diff --git a/server/public/assets/FleetReportsApp-9Z_DFtwj.js b/server/public/assets/FleetReportsApp-Cl72SGXl.js similarity index 99% rename from server/public/assets/FleetReportsApp-9Z_DFtwj.js rename to server/public/assets/FleetReportsApp-Cl72SGXl.js index b48fb5b7..9095d5dd 100644 --- a/server/public/assets/FleetReportsApp-9Z_DFtwj.js +++ b/server/public/assets/FleetReportsApp-Cl72SGXl.js @@ -1,4 +1,4 @@ -import{g as ha,r as Gt,j as u,u as da,a as Kr,i as pa,b as ma,D as ga,c as xa,S as ya,t as wa,C as pt,L as Yr,d as _a,e as ba}from"./index-DFlKqFdJ.js";var dn={exports:{}};var va=dn.exports,sr;function Sa(){return sr||(sr=1,(function(e,n){((r,l)=>{e.exports=l()})(va,function r(){var l=typeof self<"u"?self:typeof window<"u"?window:l!==void 0?l:{},i,f=!l.document&&!!l.postMessage,h=l.IS_PAPA_WORKER||!1,y={},g=0,c={};function v(d){return d.charCodeAt(0)===65279?d.slice(1):d}function _(d){this._handle=null,this._finished=!1,this._completed=!1,this._halted=!1,this._input=null,this._baseIndex=0,this._partialLine="",this._rowCount=0,this._start=0,this._nextChunk=null,this.isFirstChunk=!0,this._completeResults={data:[],errors:[],meta:{}},(function(p){var x=B(p);x.chunkSize=parseInt(x.chunkSize),p.step||p.chunk||(x.chunkSize=null),this._handle=new $(x),(this._handle.streamer=this)._config=x}).call(this,d),this.parseChunk=function(p,x){var E=parseInt(this._config.skipFirstNLines)||0;if(this.isFirstChunk&&0=this._config.preview),h)l.postMessage({results:j,workerId:c.WORKER_ID,finished:E});else if(H(this._config.chunk)&&!x){if(this._config.chunk(j,this._handle),this._handle.paused()||this._handle.aborted())return void(this._halted=!0);this._completeResults=j=void 0}return this._config.step||this._config.chunk||(this._completeResults.data=this._completeResults.data.concat(j.data),this._completeResults.errors=this._completeResults.errors.concat(j.errors),this._completeResults.meta=j.meta),this._completed||!E||!H(this._config.complete)||j&&j.meta.aborted||(this._config.complete(this._completeResults,this._input),this._completed=!0),E||j&&j.meta.paused||this._nextChunk(),j}this._halted=!0},this._sendError=function(p){H(this._config.error)?this._config.error(p):h&&this._config.error&&l.postMessage({workerId:c.WORKER_ID,error:p,finished:!1})}}function S(d){var p;(d=d||{}).chunkSize||(d.chunkSize=c.RemoteChunkSize),_.call(this,d),this._nextChunk=f?function(){this._readChunk(),this._chunkLoaded()}:function(){this._readChunk()},this.stream=function(x){this._input=x,this._nextChunk()},this._readChunk=function(){if(this._finished)this._chunkLoaded();else{if(p=new XMLHttpRequest,this._config.withCredentials&&(p.withCredentials=this._config.withCredentials),f||(p.onload=ie(this._chunkLoaded,this),p.onerror=ie(this._chunkError,this)),p.open(this._config.downloadRequestBody?"POST":"GET",this._input,!f),this._config.downloadRequestHeaders){var x,E=this._config.downloadRequestHeaders;for(x in E)p.setRequestHeader(x,E[x])}var j;this._config.chunkSize&&(j=this._start+this._config.chunkSize-1,p.setRequestHeader("Range","bytes="+this._start+"-"+j));try{p.send(this._config.downloadRequestBody)}catch(D){this._chunkError(D.message)}f&&p.status===0&&this._chunkError()}},this._chunkLoaded=function(){p.readyState===4&&(p.status<200||400<=p.status?this._chunkError():(this._start+=this._config.chunkSize||p.responseText.length,this._finished=!this._config.chunkSize||this._start>=(x=>(x=x.getResponseHeader("Content-Range"))!==null?parseInt(x.substring(x.lastIndexOf("/")+1)):-1)(p),this.parseChunk(p.responseText)))},this._chunkError=function(x){x=p.statusText||x,this._sendError(new Error(x))}}function W(d){(d=d||{}).chunkSize||(d.chunkSize=c.LocalChunkSize),_.call(this,d);var p,x,E=typeof FileReader<"u";this.stream=function(j){this._input=j,x=j.slice||j.webkitSlice||j.mozSlice,E?((p=new FileReader).onload=ie(this._chunkLoaded,this),p.onerror=ie(this._chunkError,this)):p=new FileReaderSync,this._nextChunk()},this._nextChunk=function(){this._finished||this._config.preview&&!(this._rowCount=this._input.size,this.parseChunk(j.target.result)},this._chunkError=function(){this._sendError(p.error)}}function z(d){var p;_.call(this,d=d||{}),this.stream=function(x){return p=x,this._nextChunk()},this._nextChunk=function(){var x,E;if(!this._finished)return x=this._config.chunkSize,p=x?(E=p.substring(0,x),p.substring(x)):(E=p,""),this._finished=!p,this.parseChunk(E)}}function w(d){_.call(this,d=d||{});var p=[],x=!0,E=!1;this.pause=function(){_.prototype.pause.apply(this,arguments),this._input.pause()},this.resume=function(){_.prototype.resume.apply(this,arguments),this._input.resume()},this.stream=function(j){this._input=j,this._input.on("data",this._streamData),this._input.on("end",this._streamEnd),this._input.on("error",this._streamError)},this._checkIsFinished=function(){E&&p.length===1&&(this._finished=!0)},this._nextChunk=function(){this._checkIsFinished(),p.length?this.parseChunk(p.shift()):x=!0},this._streamData=ie(function(j){try{p.push(typeof j=="string"?j:j.toString(this._config.encoding)),x&&(x=!1,this._checkIsFinished(),this.parseChunk(p.shift()))}catch(D){this._streamError(D)}},this),this._streamError=ie(function(j){this._streamCleanUp(),this._sendError(j)},this),this._streamEnd=ie(function(){this._streamCleanUp(),E=!0,this._streamData("")},this),this._streamCleanUp=ie(function(){this._input.removeListener("data",this._streamData),this._input.removeListener("end",this._streamEnd),this._input.removeListener("error",this._streamError)},this)}function $(d){var p,x,E,j,D=Math.pow(2,53),P=-D,te=/^\s*-?(\d+\.?|\.\d+|\d+\.\d+)([eE][-+]?\d+)?\s*$/,U=/^((\d{4}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d:[0-5]\d\.\d+([+-][0-2]\d:[0-5]\d|Z))|(\d{4}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d:[0-5]\d([+-][0-2]\d:[0-5]\d|Z))|(\d{4}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d([+-][0-2]\d:[0-5]\d|Z)))$/,X=this,ae=0,O=0,ce=!1,L=!1,A=[],F={data:[],errors:[],meta:{}};function Ee(se){return d.skipEmptyLines==="greedy"?se.join("").trim()==="":se.length===1&&se[0].length===0}function le(){if(F&&E&&(Fe("Delimiter","UndetectableDelimiter","Unable to auto-detect delimiting character; defaulted to '"+c.DefaultDelimiter+"'"),E=!1),d.skipEmptyLines&&(F.data=F.data.filter(function(Z){return!Ee(Z)})),ee()){let Z=function(me,Ae){me=v(me),H(d.transformHeader)&&(me=d.transformHeader(me,Ae)),A.push(me)};if(F)if(Array.isArray(F.data[0])){for(var se=0;ee()&&se(de=>(d.dynamicTypingFunction&&d.dynamicTyping[de]===void 0&&(d.dynamicTyping[de]=d.dynamicTypingFunction(de)),(d.dynamicTyping[de]||d.dynamicTyping)===!0))(rt)?re==="true"||re==="TRUE"||re!=="false"&&re!=="FALSE"&&((de=>{if(te.test(de)&&(de=parseFloat(de),P=A.length?"__parsed_extra":A[we]:be,he=d.transform?d.transform(he,be):he);be==="__parsed_extra"?(Ae[be]=Ae[be]||[],Ae[be].push(he)):Ae[be]=he}return d.header&&(we>A.length?Fe("FieldMismatch","TooManyFields","Too many fields: expected "+A.length+" fields but parsed "+we,O+me):wed.preview?x.abort():(F.data=F.data[0],j(F,X))))}),this.parse=function(se,q,_e){var Z=d.quoteChar||'"',Z=(d.newline||(d.newline=this.guessLineEndings(se,Z)),E=!1,d.delimiter?H(d.delimiter)&&(d.delimiter=d.delimiter(se),F.meta.delimiter=d.delimiter):((Z=((me,Ae,we,be,he)=>{var rt,re,de,ut;he=he||[","," ","|",";",c.RECORD_SEP,c.UNIT_SEP];for(var it=0;it{e.exports=l()})(va,function r(){var l=typeof self<"u"?self:typeof window<"u"?window:l!==void 0?l:{},i,f=!l.document&&!!l.postMessage,h=l.IS_PAPA_WORKER||!1,y={},g=0,c={};function v(d){return d.charCodeAt(0)===65279?d.slice(1):d}function _(d){this._handle=null,this._finished=!1,this._completed=!1,this._halted=!1,this._input=null,this._baseIndex=0,this._partialLine="",this._rowCount=0,this._start=0,this._nextChunk=null,this.isFirstChunk=!0,this._completeResults={data:[],errors:[],meta:{}},(function(p){var x=B(p);x.chunkSize=parseInt(x.chunkSize),p.step||p.chunk||(x.chunkSize=null),this._handle=new $(x),(this._handle.streamer=this)._config=x}).call(this,d),this.parseChunk=function(p,x){var E=parseInt(this._config.skipFirstNLines)||0;if(this.isFirstChunk&&0=this._config.preview),h)l.postMessage({results:j,workerId:c.WORKER_ID,finished:E});else if(H(this._config.chunk)&&!x){if(this._config.chunk(j,this._handle),this._handle.paused()||this._handle.aborted())return void(this._halted=!0);this._completeResults=j=void 0}return this._config.step||this._config.chunk||(this._completeResults.data=this._completeResults.data.concat(j.data),this._completeResults.errors=this._completeResults.errors.concat(j.errors),this._completeResults.meta=j.meta),this._completed||!E||!H(this._config.complete)||j&&j.meta.aborted||(this._config.complete(this._completeResults,this._input),this._completed=!0),E||j&&j.meta.paused||this._nextChunk(),j}this._halted=!0},this._sendError=function(p){H(this._config.error)?this._config.error(p):h&&this._config.error&&l.postMessage({workerId:c.WORKER_ID,error:p,finished:!1})}}function S(d){var p;(d=d||{}).chunkSize||(d.chunkSize=c.RemoteChunkSize),_.call(this,d),this._nextChunk=f?function(){this._readChunk(),this._chunkLoaded()}:function(){this._readChunk()},this.stream=function(x){this._input=x,this._nextChunk()},this._readChunk=function(){if(this._finished)this._chunkLoaded();else{if(p=new XMLHttpRequest,this._config.withCredentials&&(p.withCredentials=this._config.withCredentials),f||(p.onload=ie(this._chunkLoaded,this),p.onerror=ie(this._chunkError,this)),p.open(this._config.downloadRequestBody?"POST":"GET",this._input,!f),this._config.downloadRequestHeaders){var x,E=this._config.downloadRequestHeaders;for(x in E)p.setRequestHeader(x,E[x])}var j;this._config.chunkSize&&(j=this._start+this._config.chunkSize-1,p.setRequestHeader("Range","bytes="+this._start+"-"+j));try{p.send(this._config.downloadRequestBody)}catch(D){this._chunkError(D.message)}f&&p.status===0&&this._chunkError()}},this._chunkLoaded=function(){p.readyState===4&&(p.status<200||400<=p.status?this._chunkError():(this._start+=this._config.chunkSize||p.responseText.length,this._finished=!this._config.chunkSize||this._start>=(x=>(x=x.getResponseHeader("Content-Range"))!==null?parseInt(x.substring(x.lastIndexOf("/")+1)):-1)(p),this.parseChunk(p.responseText)))},this._chunkError=function(x){x=p.statusText||x,this._sendError(new Error(x))}}function W(d){(d=d||{}).chunkSize||(d.chunkSize=c.LocalChunkSize),_.call(this,d);var p,x,E=typeof FileReader<"u";this.stream=function(j){this._input=j,x=j.slice||j.webkitSlice||j.mozSlice,E?((p=new FileReader).onload=ie(this._chunkLoaded,this),p.onerror=ie(this._chunkError,this)):p=new FileReaderSync,this._nextChunk()},this._nextChunk=function(){this._finished||this._config.preview&&!(this._rowCount=this._input.size,this.parseChunk(j.target.result)},this._chunkError=function(){this._sendError(p.error)}}function z(d){var p;_.call(this,d=d||{}),this.stream=function(x){return p=x,this._nextChunk()},this._nextChunk=function(){var x,E;if(!this._finished)return x=this._config.chunkSize,p=x?(E=p.substring(0,x),p.substring(x)):(E=p,""),this._finished=!p,this.parseChunk(E)}}function w(d){_.call(this,d=d||{});var p=[],x=!0,E=!1;this.pause=function(){_.prototype.pause.apply(this,arguments),this._input.pause()},this.resume=function(){_.prototype.resume.apply(this,arguments),this._input.resume()},this.stream=function(j){this._input=j,this._input.on("data",this._streamData),this._input.on("end",this._streamEnd),this._input.on("error",this._streamError)},this._checkIsFinished=function(){E&&p.length===1&&(this._finished=!0)},this._nextChunk=function(){this._checkIsFinished(),p.length?this.parseChunk(p.shift()):x=!0},this._streamData=ie(function(j){try{p.push(typeof j=="string"?j:j.toString(this._config.encoding)),x&&(x=!1,this._checkIsFinished(),this.parseChunk(p.shift()))}catch(D){this._streamError(D)}},this),this._streamError=ie(function(j){this._streamCleanUp(),this._sendError(j)},this),this._streamEnd=ie(function(){this._streamCleanUp(),E=!0,this._streamData("")},this),this._streamCleanUp=ie(function(){this._input.removeListener("data",this._streamData),this._input.removeListener("end",this._streamEnd),this._input.removeListener("error",this._streamError)},this)}function $(d){var p,x,E,j,D=Math.pow(2,53),P=-D,te=/^\s*-?(\d+\.?|\.\d+|\d+\.\d+)([eE][-+]?\d+)?\s*$/,U=/^((\d{4}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d:[0-5]\d\.\d+([+-][0-2]\d:[0-5]\d|Z))|(\d{4}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d:[0-5]\d([+-][0-2]\d:[0-5]\d|Z))|(\d{4}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d([+-][0-2]\d:[0-5]\d|Z)))$/,X=this,ae=0,O=0,ce=!1,L=!1,A=[],F={data:[],errors:[],meta:{}};function Ee(se){return d.skipEmptyLines==="greedy"?se.join("").trim()==="":se.length===1&&se[0].length===0}function le(){if(F&&E&&(Fe("Delimiter","UndetectableDelimiter","Unable to auto-detect delimiting character; defaulted to '"+c.DefaultDelimiter+"'"),E=!1),d.skipEmptyLines&&(F.data=F.data.filter(function(Z){return!Ee(Z)})),ee()){let Z=function(me,Ae){me=v(me),H(d.transformHeader)&&(me=d.transformHeader(me,Ae)),A.push(me)};if(F)if(Array.isArray(F.data[0])){for(var se=0;ee()&&se(de=>(d.dynamicTypingFunction&&d.dynamicTyping[de]===void 0&&(d.dynamicTyping[de]=d.dynamicTypingFunction(de)),(d.dynamicTyping[de]||d.dynamicTyping)===!0))(rt)?re==="true"||re==="TRUE"||re!=="false"&&re!=="FALSE"&&((de=>{if(te.test(de)&&(de=parseFloat(de),P=A.length?"__parsed_extra":A[we]:be,he=d.transform?d.transform(he,be):he);be==="__parsed_extra"?(Ae[be]=Ae[be]||[],Ae[be].push(he)):Ae[be]=he}return d.header&&(we>A.length?Fe("FieldMismatch","TooManyFields","Too many fields: expected "+A.length+" fields but parsed "+we,O+me):wed.preview?x.abort():(F.data=F.data[0],j(F,X))))}),this.parse=function(se,q,_e){var Z=d.quoteChar||'"',Z=(d.newline||(d.newline=this.guessLineEndings(se,Z)),E=!1,d.delimiter?H(d.delimiter)&&(d.delimiter=d.delimiter(se),F.meta.delimiter=d.delimiter):((Z=((me,Ae,we,be,he)=>{var rt,re,de,ut;he=he||[","," ","|",";",c.RECORD_SEP,c.UNIT_SEP];for(var it=0;it=_e.length/2?`\r @@ -10,4 +10,4 @@ import{g as ha,r as Gt,j as u,u as da,a as Kr,i as pa,b as ma,D as ga,c as xa,S `,'"',c.BYTE_ORDER_MARK],c.WORKERS_SUPPORTED=!f&&!!l.Worker,c.NODE_STREAM_INPUT=1,c.LocalChunkSize=10485760,c.RemoteChunkSize=5242880,c.DefaultDelimiter=",",c.Parser=M,c.ParserHandle=$,c.NetworkStreamer=S,c.FileStreamer=W,c.StringStreamer=z,c.ReadableStreamStreamer=w,l.jQuery&&((i=l.jQuery).fn.parse=function(d){var p=d.config||{},x=[];return this.each(function(D){if(!(i(this).prop("tagName").toUpperCase()==="INPUT"&&i(this).attr("type").toLowerCase()==="file"&&l.FileReader)||!this.files||this.files.length===0)return!0;for(var P=0;Pl||r>i?vt(e,ul):is(e,ul))}const pr=new WeakMap;function mr(e,n,r){let l=n+r,i=pr.get(e);l!=i&&(pr.set(e,l),e.style.background=n,e.style.borderColor=r)}const gr=new WeakMap;function xr(e,n,r,l){let i=n+""+r,f=gr.get(e);i!=f&&(gr.set(e,i),e.style.height=r+"px",e.style.width=n+"px",e.style.marginLeft=l?-n/2+"px":0,e.style.marginTop=l?-r/2+"px":0)}const gs={passive:!0},Ka={...gs,capture:!0};function fl(e,n,r,l){n.addEventListener(e,r,l?Ka:gs)}function as(e,n,r,l){n.removeEventListener(e,r,gs)}Ol&&rs();function Ot(e,n,r,l){let i;r=r||0,l=l||n.length-1;let f=l<=2147483647;for(;l-r>1;)i=f?r+l>>1:St((r+l)/2),n[i]{let f=-1,h=-1;for(let y=l;y<=i;y++)if(e(r[y])){f=y;break}for(let y=i;y>=l;y--)if(e(r[y])){h=y;break}return[f,h]}}const Qr=e=>e!=null,Zr=e=>e!=null&&e>0,yn=Jr(Qr),Ya=Jr(Zr);function Ja(e,n,r,l=0,i=!1){let f=i?Ya:yn,h=i?Zr:Qr;[n,r]=f(e,n,r);let y=e[n],g=e[n];if(n>-1)if(l==1)y=e[n],g=e[r];else if(l==-1)y=e[r],g=e[n];else for(let c=n;c<=r;c++){let v=e[c];h(v)&&(vg&&(g=v))}return[y??Te,g??-Te]}function wn(e,n,r,l){let i=_r(e),f=_r(n);e==n&&(i==-1?(e*=r,n/=r):(e/=r,n*=r));let h=r==10?$t:Xr,y=i==1?St:Rt,g=f==1?Rt:St,c=y(h($e(e))),v=g(h($e(n))),_=Dl(r,c),S=Dl(r,v);return r==10&&(c<0&&(_=Re(_,-c)),v<0&&(S=Re(S,-v))),l||r==2?(e=_*i,n=S*f):(e=ni(e,_),n=_n(n,S)),[e,n]}function xs(e,n,r,l){let i=wn(e,n,r,l);return e==0&&(i[0]=0),n==0&&(i[1]=0),i}const ys=.1,yr={mode:3,pad:ys},Ql={pad:0,soft:null,mode:0},Qa={min:Ql,max:Ql};function gn(e,n,r,l){return bn(r)?wr(e,n,r):(Ql.pad=r,Ql.soft=l?0:null,Ql.mode=l?3:0,wr(e,n,Qa))}function Se(e,n){return e??n}function Za(e,n,r){for(n=Se(n,0),r=Se(r,e.length-1);n<=r;){if(e[n]!=null)return!0;n++}return!1}function wr(e,n,r){let l=r.min,i=r.max,f=Se(l.pad,0),h=Se(i.pad,0),y=Se(l.hard,-Te),g=Se(i.hard,Te),c=Se(l.soft,Te),v=Se(i.soft,-Te),_=Se(l.mode,0),S=Se(i.mode,0),W=n-e,z=$t(W),w=mt($e(e),$e(n)),$=$t(w),Q=$e($-z);(W<1e-24||Q>10)&&(W=0,(e==0||n==0)&&(W=1e-24,_==2&&c!=Te&&(f=0),S==2&&v!=-Te&&(h=0)));let M=W||w||1e3,J=$t(M),N=Dl(10,St(J)),fe=M*(W==0?e==0?.1:1:f),B=Re(ni(e-fe,N/10),24),ie=e>=c&&(_==1||_==3&&B<=c||_==2&&B>=c)?c:Te,H=mt(y,B=ie?ie:Ft(ie,B)),d=M*(W==0?n==0?.1:1:h),p=Re(_n(n+d,N/10),24),x=n<=v&&(S==1||S==3&&p>=v||S==2&&p<=v)?v:-Te,E=Ft(g,p>x&&n<=x?x:mt(x,p));return H==E&&H==0&&(E=100),[H,E]}const Xa=new Intl.NumberFormat(Ol?$a.language:"en-US"),ws=e=>Xa.format(e),jt=Math,pn=jt.PI,$e=jt.abs,St=jt.floor,qe=jt.round,Rt=jt.ceil,Ft=jt.min,mt=jt.max,Dl=jt.pow,_r=jt.sign,$t=jt.log10,Xr=jt.log2,eo=(e,n=1)=>jt.sinh(e)*n,Zn=(e,n=1)=>jt.asinh(e/n),Te=1/0;function br(e){return($t((e^e>>31)-(e>>31))|0)+1}function os(e,n,r){return Ft(mt(e,n),r)}function ei(e){return typeof e=="function"}function ye(e){return ei(e)?e:()=>e}const to=()=>{},ti=e=>e,li=(e,n)=>n,lo=e=>null,vr=e=>!0,Sr=(e,n)=>e==n,no=/\.\d*?(?=9{6,}|0{6,})/gm,hl=e=>{if(ri(e)||tl.has(e))return e;const n=`${e}`,r=n.match(no);if(r==null)return e;let l=r[0].length-1;if(n.indexOf("e-")!=-1){let[i,f]=n.split("e");return+`${hl(i)}e${f}`}return Re(e,l)};function ol(e,n){return hl(Re(hl(e/n))*n)}function _n(e,n){return hl(Rt(hl(e/n))*n)}function ni(e,n){return hl(St(hl(e/n))*n)}function Re(e,n=0){if(ri(e))return e;let r=10**n,l=e*r*(1+Number.EPSILON);return qe(l)/r}const tl=new Map;function si(e){return((""+e).split(".")[1]||"").length}function Xl(e,n,r,l){let i=[],f=l.map(si);for(let h=n;h=0?0:y)+(h>=f[c]?0:f[c]),S=e==10?v:Re(v,_);i.push(S),tl.set(S,_)}}return i}const Zl={},_s=[],Nl=[null,null],el=Array.isArray,ri=Number.isInteger,so=e=>e===void 0;function jr(e){return typeof e=="string"}function bn(e){let n=!1;if(e!=null){let r=e.constructor;n=r==null||r==Object}return n}function ro(e){return e!=null&&typeof e=="object"}const io=Object.getPrototypeOf(Uint8Array),ii="__proto__";function Ll(e,n=bn){let r;if(el(e)){let l=e.find(i=>i!=null);if(el(l)||n(l)){r=Array(e.length);for(let i=0;if){for(i=h-1;i>=0&&e[i]==null;)e[i--]=null;for(i=h+1;ih-y)],i=l[0].length,f=new Map;for(let h=0;h"u"?e=>Promise.resolve().then(e):queueMicrotask;function po(e){let n=e[0],r=n.length,l=Array(r);for(let f=0;fn[f]-n[h]);let i=[];for(let f=0;f=l&&e[i]==null;)i--;if(i<=l)return!0;const f=mt(1,St((i-l+1)/n));for(let h=e[l],y=l+f;y<=i;y+=f){const g=e[y];if(g!=null){if(g<=h)return!1;h=g}}return!0}const ai=["January","February","March","April","May","June","July","August","September","October","November","December"],oi=["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"];function ci(e){return e.slice(0,3)}const xo=oi.map(ci),yo=ai.map(ci),wo={MMMM:ai,MMM:yo,WWWW:oi,WWW:xo};function $l(e){return(e<10?"0":"")+e}function _o(e){return(e<10?"00":e<100?"0":"")+e}const bo={YYYY:e=>e.getFullYear(),YY:e=>(e.getFullYear()+"").slice(2),MMMM:(e,n)=>n.MMMM[e.getMonth()],MMM:(e,n)=>n.MMM[e.getMonth()],MM:e=>$l(e.getMonth()+1),M:e=>e.getMonth()+1,DD:e=>$l(e.getDate()),D:e=>e.getDate(),WWWW:(e,n)=>n.WWWW[e.getDay()],WWW:(e,n)=>n.WWW[e.getDay()],HH:e=>$l(e.getHours()),H:e=>e.getHours(),h:e=>{let n=e.getHours();return n==0?12:n>12?n-12:n},AA:e=>e.getHours()>=12?"PM":"AM",aa:e=>e.getHours()>=12?"pm":"am",a:e=>e.getHours()>=12?"p":"a",mm:e=>$l(e.getMinutes()),m:e=>e.getMinutes(),ss:e=>$l(e.getSeconds()),s:e=>e.getSeconds(),fff:e=>_o(e.getMilliseconds())};function bs(e,n){n=n||wo;let r=[],l=/\{([a-z]+)\}|[^{]+/gi,i;for(;i=l.exec(e);)r.push(i[0][0]=="{"?bo[i[1]]:i[0]);return f=>{let h="";for(let y=0;ye%1==0,xn=[1,2,2.5,5],jo=Xl(10,-32,0,xn),fi=Xl(10,0,32,xn),ko=fi.filter(ui),cl=jo.concat(fi),vs=` `,hi="{YYYY}",kr=vs+hi,di="{M}/{D}",Jl=vs+di,fn=Jl+"/{YY}",pi="{aa}",Co="{h}:{mm}",Tl=Co+pi,Cr=vs+Tl,Er=":{ss}",Ce=null;function mi(e){let n=e*1e3,r=n*60,l=r*60,i=l*24,f=i*30,h=i*365,g=(e==1?Xl(10,0,3,xn).filter(ui):Xl(10,-3,0,xn)).concat([n,n*5,n*10,n*15,n*30,r,r*5,r*10,r*15,r*30,l,l*2,l*3,l*4,l*6,l*8,l*12,i,i*2,i*3,i*4,i*5,i*6,i*7,i*8,i*9,i*10,i*15,f,f*2,f*3,f*4,f*6,h,h*2,h*5,h*10,h*25,h*50,h*100]);const c=[[h,hi,Ce,Ce,Ce,Ce,Ce,Ce,1],[i*28,"{MMM}",kr,Ce,Ce,Ce,Ce,Ce,1],[i,di,kr,Ce,Ce,Ce,Ce,Ce,1],[l,"{h}"+pi,fn,Ce,Jl,Ce,Ce,Ce,1],[r,Tl,fn,Ce,Jl,Ce,Ce,Ce,1],[n,Er,fn+" "+Tl,Ce,Jl+" "+Tl,Ce,Cr,Ce,1],[e,Er+".{fff}",fn+" "+Tl,Ce,Jl+" "+Tl,Ce,Cr,Ce,1]];function v(_){return(S,W,z,w,$,Q)=>{let M=[],J=$>=h,N=$>=f&&$=i?i:$,p=St(z)-St(B),x=H+p+_n(B-H,d);M.push(x);let E=_(x),j=E.getHours()+E.getMinutes()/r+E.getSeconds()/l,D=$/l,P=S.axes[W]._space,te=Q/P;for(;x=Re(x+$,e==1?0:3),!(x>w);)if(D>1){let U=St(Re(j+D,6))%24,O=_(x).getHours()-U;O>1&&(O=-1),x-=O*l,j=(j+D)%24;let ce=M[M.length-1];Re((x-ce)/$,3)*te>=.7&&M.push(x)}else M.push(x)}return M}}return[g,c,v]}const[Eo,Ao,Mo]=mi(1),[To,Ro,Do]=mi(.001);Xl(2,-53,53,[1]);function Ar(e,n){return e.map(r=>r.map((l,i)=>i==0||i==8||l==null?l:n(i==1||r[8]==0?l:r[1]+l)))}function Mr(e,n){return(r,l,i,f,h)=>{let y=n.find(z=>h>=z[0])||n[n.length-1],g,c,v,_,S,W;return l.map(z=>{let w=e(z),$=w.getFullYear(),Q=w.getMonth(),M=w.getDate(),J=w.getHours(),N=w.getMinutes(),fe=w.getSeconds(),B=$!=g&&y[2]||Q!=c&&y[3]||M!=v&&y[4]||J!=_&&y[5]||N!=S&&y[6]||fe!=W&&y[7]||y[1];return g=$,c=Q,v=M,_=J,S=N,W=fe,B(w)})}}function No(e,n){let r=bs(n);return(l,i,f,h,y)=>i.map(g=>r(e(g)))}function Xn(e,n,r){return new Date(e,n,r)}function Tr(e,n){return n(e)}const Lo="{YYYY}-{MM}-{DD} {h}:{mm}{aa}";function Rr(e,n){return(r,l,i,f)=>f==null?ms:n(e(l))}function Po(e,n){let r=e.series[n];return r.width?r.stroke(e,n):r.points.width?r.points.stroke(e,n):null}function Oo(e,n){return e.series[n].fill(e,n)}const Fo={show:!0,live:!0,isolate:!1,mount:to,markers:{show:!0,width:2,stroke:Po,fill:Oo,dash:"solid"},idx:null,idxs:null,values:[]};function Io(e,n){let r=e.cursor.points,l=Mt(),i=r.size(e,n);Pe(l,Kl,i),Pe(l,Yl,i);let f=i/-2;Pe(l,"marginLeft",f),Pe(l,"marginTop",f);let h=r.width(e,n,i);return h&&Pe(l,"borderWidth",h),l}function zo(e,n){let r=e.series[n].points;return r._fill||r._stroke}function Vo(e,n){let r=e.series[n].points;return r._stroke||r._fill}function Ho(e,n){return e.series[n].points.size}const es=[0,0];function Wo(e,n,r){return es[0]=n,es[1]=r,es}function hn(e,n,r,l=!0){return i=>{i.button==0&&(!l||i.target==n)&&r(i)}}function ts(e,n,r,l=!0){return i=>{(!l||i.target==n)&&r(i)}}const Bo={show:!0,x:!0,y:!0,lock:!1,move:Wo,points:{one:!1,show:Io,size:Ho,width:0,stroke:Vo,fill:zo},bind:{mousedown:hn,mouseup:hn,click:hn,dblclick:hn,mousemove:ts,mouseleave:ts,mouseenter:ts},drag:{setScale:!0,x:!0,y:!1,dist:0,uni:null,click:(e,n)=>{n.stopPropagation(),n.stopImmediatePropagation()},_x:!1,_y:!1},focus:{dist:(e,n,r,l,i)=>l-i,prox:-1,bias:0},hover:{skip:[void 0],prox:null,bias:0},left:-10,top:-10,idx:null,dataIdx:null,idxs:null,event:null},gi={show:!0,stroke:"rgba(0,0,0,0.07)",width:2},Ss=Ge({},gi,{filter:li}),xi=Ge({},Ss,{size:10}),yi=Ge({},gi,{show:!1}),js='12px system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"',wi="bold "+js,_i=1.5,Dr={show:!0,scale:"x",stroke:ps,space:50,gap:5,alignTo:1,size:50,labelGap:0,labelSize:30,labelFont:wi,side:2,grid:Ss,ticks:xi,border:yi,font:js,lineGap:_i,rotate:0},Uo="Value",Go="Time",Nr={show:!0,scale:"x",auto:!1,sorted:1,min:Te,max:-Te,idxs:[]};function qo(e,n,r,l,i){return n.map(f=>f==null?"":ws(f))}function $o(e,n,r,l,i,f,h){let y=[],g=tl.get(i)||0;r=h?r:Re(_n(r,i),g);for(let c=r;c<=l;c=Re(c+i,g))y.push(Object.is(c,-0)?0:c);return y}function cs(e,n,r,l,i,f,h){const y=[],g=e.scales[e.axes[n].scale].log,c=g==10?$t:Xr,v=St(c(r));i=Dl(g,v),g==10&&(i=cl[Ot(i,cl)]);let _=r,S=i*g;g==10&&(S=cl[Ot(S,cl)]);do y.push(_),_=_+i,g==10&&!tl.has(_)&&(_=Re(_,tl.get(i))),_>=S&&(i=_,S=i*g,g==10&&(S=cl[Ot(S,cl)]));while(_<=l);return y}function Ko(e,n,r,l,i,f,h){let g=e.scales[e.axes[n].scale].asinh,c=l>g?cs(e,n,mt(g,r),l,i):[g],v=l>=0&&r<=0?[0]:[];return(r<-g?cs(e,n,mt(g,-l),-r,i):[g]).reverse().map(S=>-S).concat(v,c)}const bi=/./,Yo=/[12357]/,Jo=/[125]/,Lr=/1/,us=(e,n,r,l)=>e.map((i,f)=>n==4&&i==0||f%l==0&&r.test(i.toExponential()[i<0?1:0])?i:null);function Qo(e,n,r,l,i){let f=e.axes[r],h=f.scale,y=e.scales[h],g=e.valToPos,c=f._space,v=g(10,h),_=g(9,h)-v>=c?bi:g(7,h)-v>=c?Yo:g(5,h)-v>=c?Jo:Lr;if(_==Lr){let S=$e(g(1,h)-v);if(Si,Fr={show:!0,auto:!0,sorted:0,gaps:vi,alpha:1,facets:[Ge({},Or,{scale:"x"}),Ge({},Or,{scale:"y"})]},Ir={scale:"y",auto:!0,sorted:0,show:!0,spanGaps:!1,gaps:vi,alpha:1,points:{show:tc,filter:null},values:null,min:Te,max:-Te,idxs:[],path:null,clip:null};function lc(e,n,r,l,i){return r/10}const Si={time:Ca,auto:!0,distr:1,log:10,asinh:1,min:null,max:null,dir:1,ori:0},nc=Ge({},Si,{time:!1,ori:1}),zr={};function ji(e,n){let r=zr[e];return r||(r={key:e,plots:[],sub(l){r.plots.push(l)},unsub(l){r.plots=r.plots.filter(i=>i!=l)},pub(l,i,f,h,y,g,c){for(let v=0;v{let Q=h.pxRound;const M=c.dir*(c.ori==0?1:-1),J=c.ori==0?Fl:Il;let N,fe;M==1?(N=r,fe=l):(N=l,fe=r);let B=Q(_(y[N],c,w,W)),ie=Q(S(g[N],v,$,z)),H=Q(_(y[fe],c,w,W)),d=Q(S(f==1?v.max:v.min,v,$,z)),p=new Path2D(i);return J(p,H,d),J(p,B,d),J(p,B,ie),p})}function vn(e,n,r,l,i,f){let h=null;if(e.length>0){h=new Path2D;const y=n==0?kn:Es;let g=r;for(let _=0;_S[0]){let W=S[0]-g;W>0&&y(h,g,l,W,l+f),g=S[1]}}let c=r+i-g,v=10;c>0&&y(h,g,l-v/2,c,l+f+v)}return h}function rc(e,n,r){let l=e[e.length-1];l&&l[0]==n?l[1]=r:e.push([n,r])}function Cs(e,n,r,l,i,f,h){let y=[],g=e.length;for(let c=i==1?r:l;c>=r&&c<=l;c+=i)if(n[c]===null){let _=c,S=c;if(i==1)for(;++c<=l&&n[c]===null;)S=c;else for(;--c>=r&&n[c]===null;)S=c;let W=f(e[_]),z=S==_?W:f(e[S]),w=_-i;W=h<=0&&w>=0&&w=0&&Q>=0&&Q=W&&y.push([W,z])}return y}function Vr(e){return e==0?ti:e==1?qe:n=>ol(n,e)}function ki(e){let n=e==0?Sn:jn,r=e==0?(i,f,h,y,g,c)=>{i.arcTo(f,h,y,g,c)}:(i,f,h,y,g,c)=>{i.arcTo(h,f,g,y,c)},l=e==0?(i,f,h,y,g)=>{i.rect(f,h,y,g)}:(i,f,h,y,g)=>{i.rect(h,f,g,y)};return(i,f,h,y,g,c=0,v=0)=>{c==0&&v==0?l(i,f,h,y,g):(c=Ft(c,y/2,g/2),v=Ft(v,y/2,g/2),n(i,f+c,h),r(i,f+y,h,f+y,h+g,c),r(i,f+y,h+g,f,h+g,v),r(i,f,h+g,f,h,v),r(i,f,h,f+y,h,c),i.closePath())}}const Sn=(e,n,r)=>{e.moveTo(n,r)},jn=(e,n,r)=>{e.moveTo(r,n)},Fl=(e,n,r)=>{e.lineTo(n,r)},Il=(e,n,r)=>{e.lineTo(r,n)},kn=ki(0),Es=ki(1),Ci=(e,n,r,l,i,f)=>{e.arc(n,r,l,i,f)},Ei=(e,n,r,l,i,f)=>{e.arc(r,n,l,i,f)},Ai=(e,n,r,l,i,f,h)=>{e.bezierCurveTo(n,r,l,i,f,h)},Mi=(e,n,r,l,i,f,h)=>{e.bezierCurveTo(r,n,i,l,h,f)};function Ti(e){return(n,r,l,i,f)=>dl(n,r,(h,y,g,c,v,_,S,W,z,w,$)=>{let{pxRound:Q,points:M}=h,J,N;c.ori==0?(J=Sn,N=Ci):(J=jn,N=Ei);const fe=Re(M.width*ke,3);let B=(M.size-M.width)/2*ke,ie=Re(B*2,3),H=new Path2D,d=new Path2D,{left:p,top:x,width:E,height:j}=n.bbox;kn(d,p-ie,x-ie,E+ie*2,j+ie*2);const D=P=>{if(g[P]!=null){let te=Q(_(y[P],c,w,W)),U=Q(S(g[P],v,$,z));J(H,te+B,U),N(H,te,U,B,0,pn*2)}};if(f)f.forEach(D);else for(let P=l;P<=i;P++)D(P);return{stroke:fe>0?H:null,fill:H,clip:d,flags:Pl|fs}})}function Ri(e){return(n,r,l,i,f,h)=>{l!=i&&(f!=l&&h!=l&&e(n,r,l),f!=i&&h!=i&&e(n,r,i),e(n,r,h))}}const ic=Ri(Fl),ac=Ri(Il);function Di(e){const n=Se(e?.alignGaps,0);return(r,l,i,f)=>dl(r,l,(h,y,g,c,v,_,S,W,z,w,$)=>{[i,f]=yn(g,i,f);let Q=h.pxRound,M=j=>Q(_(j,c,w,W)),J=j=>Q(S(j,v,$,z)),N,fe;c.ori==0?(N=Fl,fe=ic):(N=Il,fe=ac);const B=c.dir*(c.ori==0?1:-1),ie={stroke:new Path2D,fill:null,clip:null,band:null,gaps:null,flags:Pl},H=ie.stroke;let d=!1;if(f-i>=w*4){let j=A=>r.posToVal(A,c.key,!0),D=null,P=null,te,U,X,ae=M(y[B==1?i:f]),O=M(y[i]),ce=M(y[f]),L=j(B==1?O+1:ce-1);for(let A=B==1?i:f;A>=i&&A<=f;A+=B){let F=y[A],le=(B==1?FL)?ae:M(F),ee=g[A];le==ae?ee!=null?(U=ee,D==null?(N(H,le,J(U)),te=D=P=U):UP&&(P=U)):ee===null&&(d=!0):(D!=null&&fe(H,ae,J(D),J(P),J(te),J(U)),ee!=null?(U=ee,N(H,le,J(U)),D=P=te=U):(D=P=null,ee===null&&(d=!0)),ae=le,L=j(ae+B))}D!=null&&D!=P&&X!=ae&&fe(H,ae,J(D),J(P),J(te),J(U))}else for(let j=B==1?i:f;j>=i&&j<=f;j+=B){let D=g[j];D===null?d=!0:D!=null&&N(H,M(y[j]),J(D))}let[x,E]=ks(r,l);if(h.fill!=null||x!=0){let j=ie.fill=new Path2D(H),D=h.fillTo(r,l,h.min,h.max,x),P=J(D),te=M(y[i]),U=M(y[f]);B==-1&&([U,te]=[te,U]),N(j,U,P),N(j,te,P)}if(!h.spanGaps){let j=[];d&&j.push(...Cs(y,g,i,f,B,M,n)),ie.gaps=j=h.gaps(r,l,i,f,j),ie.clip=vn(j,c.ori,W,z,w,$)}return E!=0&&(ie.band=E==2?[Kt(r,l,i,f,H,-1),Kt(r,l,i,f,H,1)]:Kt(r,l,i,f,H,E)),ie})}function oc(e){const n=Se(e.align,1),r=Se(e.ascDesc,!1),l=Se(e.alignGaps,0),i=Se(e.extend,!1);return(f,h,y,g)=>dl(f,h,(c,v,_,S,W,z,w,$,Q,M,J)=>{[y,g]=yn(_,y,g);let N=c.pxRound,{left:fe,width:B}=f.bbox,ie=O=>N(z(O,S,M,$)),H=O=>N(w(O,W,J,Q)),d=S.ori==0?Fl:Il;const p={stroke:new Path2D,fill:null,clip:null,band:null,gaps:null,flags:Pl},x=p.stroke,E=S.dir*(S.ori==0?1:-1);let j=H(_[E==1?y:g]),D=ie(v[E==1?y:g]),P=D,te=D;i&&n==-1&&(te=fe,d(x,te,j)),d(x,D,j);for(let O=E==1?y:g;O>=y&&O<=g;O+=E){let ce=_[O];if(ce==null)continue;let L=ie(v[O]),A=H(ce);n==1?d(x,L,j):d(x,P,A),d(x,L,A),j=A,P=L}let U=P;i&&n==1&&(U=fe+B,d(x,U,j));let[X,ae]=ks(f,h);if(c.fill!=null||X!=0){let O=p.fill=new Path2D(x),ce=c.fillTo(f,h,c.min,c.max,X),L=H(ce);d(O,U,L),d(O,te,L)}if(!c.spanGaps){let O=[];O.push(...Cs(v,_,y,g,E,ie,l));let ce=c.width*ke/2,L=r||n==1?ce:-ce,A=r||n==-1?-ce:ce;O.forEach(F=>{F[0]+=L,F[1]+=A}),p.gaps=O=c.gaps(f,h,y,g,O),p.clip=vn(O,S.ori,$,Q,M,J)}return ae!=0&&(p.band=ae==2?[Kt(f,h,y,g,x,-1),Kt(f,h,y,g,x,1)]:Kt(f,h,y,g,x,ae)),p})}function Hr(e,n,r,l,i,f,h=Te){if(e.length>1){let y=null;for(let g=0,c=1/0;g{}),{fill:_,stroke:S}=c;return(W,z,w,$)=>dl(W,z,(Q,M,J,N,fe,B,ie,H,d,p,x)=>{let E=Q.pxRound,j=r,D=l*ke,P=y*ke,te=g*ke,U,X;N.ori==0?[U,X]=f(W,z):[X,U]=f(W,z);const ae=N.dir*(N.ori==0?1:-1);let O=N.ori==0?kn:Es,ce=N.ori==0?v:(R,ge,pe,He,lt,gt,It)=>{v(R,ge,pe,lt,He,It,gt)},L=Se(W.bands,_s).find(R=>R.series[0]==z),A=L!=null?L.dir:0,F=Q.fillTo(W,z,Q.min,Q.max,A),Ee=E(ie(F,fe,x,d)),le,ee,Fe,se=p,q=E(Q.width*ke),_e=!1,Z=null,me=null,Ae=null,we=null;_!=null&&(q==0||S!=null)&&(_e=!0,Z=_.values(W,z,w,$),me=new Map,new Set(Z).forEach(R=>{R!=null&&me.set(R,new Path2D)}),q>0&&(Ae=S.values(W,z,w,$),we=new Map,new Set(Ae).forEach(R=>{R!=null&&we.set(R,new Path2D)})));let{x0:be,size:he}=c;if(be!=null&&he!=null){j=1,M=be.values(W,z,w,$),be.unit==2&&(M=M.map(pe=>W.posToVal(H+pe*p,N.key,!0)));let R=he.values(W,z,w,$);he.unit==2?ee=R[0]*p:ee=B(R[0],N,p,H)-B(0,N,p,H),se=Hr(M,J,B,N,p,H,se),Fe=se-ee+D}else se=Hr(M,J,B,N,p,H,se),Fe=se*h+D,ee=se-Fe;Fe<1&&(Fe=0),q>=ee/2&&(q=0),Fe<5&&(E=ti);let rt=Fe>0,re=se-Fe-(rt?q:0);ee=E(os(re,te,P)),le=(j==0?ee/2:j==ae?0:ee)-j*ae*((j==0?D/2:0)+(rt?q/2:0));const de={stroke:null,fill:null,clip:null,band:null,gaps:null,flags:0},ut=_e?null:new Path2D;let it=null;if(L!=null)it=W.data[L.series[1]];else{let{y0:R,y1:ge}=c;R!=null&&ge!=null&&(J=ge.values(W,z,w,$),it=R.values(W,z,w,$))}let Ye=U*ee,oe=X*ee;for(let R=ae==1?w:$;R>=w&&R<=$;R+=ae){let ge=J[R];if(ge==null)continue;if(it!=null){let Be=it[R]??0;if(ge-Be==0)continue;Ee=ie(Be,fe,x,d)}let pe=N.distr!=2||c!=null?M[R]:R,He=B(pe,N,p,H),lt=ie(Se(ge,F),fe,x,d),gt=E(He-le),It=E(mt(lt,Ee)),We=E(Ft(lt,Ee)),Ie=It-We;if(ge!=null){let Be=ge<0?oe:Ye,xt=ge<0?Ye:oe;_e?(q>0&&Ae[R]!=null&&O(we.get(Ae[R]),gt,We+St(q/2),ee,mt(0,Ie-q),Be,xt),Z[R]!=null&&O(me.get(Z[R]),gt,We+St(q/2),ee,mt(0,Ie-q),Be,xt)):O(ut,gt,We+St(q/2),ee,mt(0,Ie-q),Be,xt),ce(W,z,R,gt-q/2,We,ee+q,Ie)}}return q>0?de.stroke=_e?we:ut:_e||(de._fill=Q.width==0?Q._fill:Q._stroke??Q._fill,de.width=0),de.fill=_e?me:ut,de})}function uc(e,n){const r=Se(n?.alignGaps,0);return(l,i,f,h)=>dl(l,i,(y,g,c,v,_,S,W,z,w,$,Q)=>{[f,h]=yn(c,f,h);let M=y.pxRound,J=U=>M(S(U,v,$,z)),N=U=>M(W(U,_,Q,w)),fe,B,ie;v.ori==0?(fe=Sn,ie=Fl,B=Ai):(fe=jn,ie=Il,B=Mi);const H=v.dir*(v.ori==0?1:-1);let d=J(g[H==1?f:h]),p=d,x=[],E=[];for(let U=H==1?f:h;U>=f&&U<=h;U+=H)if(c[U]!=null){let ae=g[U],O=J(ae);x.push(p=O),E.push(N(c[U]))}const j={stroke:e(x,E,fe,ie,B,M),fill:null,clip:null,band:null,gaps:null,flags:Pl},D=j.stroke;let[P,te]=ks(l,i);if(y.fill!=null||P!=0){let U=j.fill=new Path2D(D),X=y.fillTo(l,i,y.min,y.max,P),ae=N(X);ie(U,p,ae),ie(U,d,ae)}if(!y.spanGaps){let U=[];U.push(...Cs(g,c,f,h,H,J,r)),j.gaps=U=y.gaps(l,i,f,h,U),j.clip=vn(U,v.ori,z,w,$,Q)}return te!=0&&(j.band=te==2?[Kt(l,i,f,h,D,-1),Kt(l,i,f,h,D,1)]:Kt(l,i,f,h,D,te)),j})}function fc(e){return uc(hc,e)}function hc(e,n,r,l,i,f){const h=e.length;if(h<2)return null;const y=new Path2D;if(r(y,e[0],n[0]),h==2)l(y,e[1],n[1]);else{let g=Array(h),c=Array(h-1),v=Array(h-1),_=Array(h-1);for(let S=0;S0!=c[S]>0?g[S]=0:(g[S]=3*(_[S-1]+_[S])/((2*_[S]+_[S-1])/c[S-1]+(_[S]+2*_[S-1])/c[S]),isFinite(g[S])||(g[S]=0));g[h-1]=c[h-2];for(let S=0;S{ct.pxRatio=ke}));const dc=Di(),pc=Ti();function Br(e,n,r,l){return(l?[e[0],e[1]].concat(e.slice(2)):[e[0]].concat(e.slice(1))).map((f,h)=>ds(f,h,n,r))}function mc(e,n){return e.map((r,l)=>l==0?{}:Ge({},n,r))}function ds(e,n,r,l){return Ge({},n==0?r:l,e)}function Ni(e,n,r){return n==null?Nl:[n,r]}const gc=Ni;function xc(e,n,r){return n==null?Nl:gn(n,r,ys,!0)}function Li(e,n,r,l){return n==null?Nl:wn(n,r,e.scales[l].log,!1)}const yc=Li;function Pi(e,n,r,l){return n==null?Nl:xs(n,r,e.scales[l].log,!1)}const wc=Pi;function _c(e,n,r,l,i){let f=mt(br(e),br(n)),h=n-e,y=Ot(i/l*h,r);do{let g=r[y],c=l*g/h;if(c>=i&&f+(g<5?tl.get(g):0)<=17)return[g,c]}while(++y(n=qe((r=+i)*ke))+"px"),[e,n,r]}function bc(e){e.show&&[e.font,e.labelFont].forEach(n=>{let r=Re(n[2]*ke,1);n[0]=n[0].replace(/[0-9.]+px/,r+"px"),n[1]=r})}function ct(e,n,r){const l={mode:Se(e.mode,1)},i=l.mode;function f(t,s,a,o){let m=s.valToPct(t);return o+a*(s.dir==-1?1-m:m)}function h(t,s,a,o){let m=s.valToPct(t);return o+a*(s.dir==-1?m:1-m)}function y(t,s,a,o){return s.ori==0?f(t,s,a,o):h(t,s,a,o)}l.valToPosH=f,l.valToPosV=h;let g=!1;l.status=0;const c=l.root=Mt(Ea);if(e.id!=null&&(c.id=e.id),vt(c,e.class),e.title){let t=Mt(Ta,c);t.textContent=e.title}const v=Pt("canvas"),_=l.ctx=v.getContext("2d"),S=Mt(Ra,c);fl("click",S,t=>{t.target===z&&(De!=jl||Oe!=kl)&&st.click(l,t)},!0);const W=l.under=Mt(Da,S);S.appendChild(v);const z=l.over=Mt(Na,S);e=Ll(e);const w=+Se(e.pxAlign,1),$=Vr(w);(e.plugins||[]).forEach(t=>{t.opts&&(e=t.opts(l,e)||e)});const Q=e.ms||.001,M=l.series=i==1?Br(e.series||[],Nr,Ir,!1):mc(e.series||[null],Fr),J=l.axes=Br(e.axes||[],Dr,Pr,!0),N=l.scales={},fe=l.bands=e.bands||[];fe.forEach(t=>{t.fill=ye(t.fill||null),t.dir=Se(t.dir,-1)});const B=i==2?M[1].facets[0].scale:M[0].scale,ie={axes:Qi,series:qi},H=(e.drawOrder||["axes","series"]).map(t=>ie[t]);function d(t){const s=t.distr==3?a=>$t(a>0?a:t.clamp(l,a,t.min,t.max,t.key)):t.distr==4?a=>Zn(a,t.asinh):t.distr==100?a=>t.fwd(a):a=>a;return a=>{let o=s(a),{_min:m,_max:b}=t,k=b-m;return(o-m)/k}}function p(t){let s=N[t];if(s==null){let a=(e.scales||Zl)[t]||Zl;if(a.from!=null){p(a.from);let o=Ge({},N[a.from],a,{key:t});o.valToPct=d(o),N[t]=o}else{s=N[t]=Ge({},t==B?Si:nc,a),s.key=t;let o=s.time,m=s.range,b=el(m);if((t!=B||i==2&&!o)&&(b&&(m[0]==null||m[1]==null)&&(m={min:m[0]==null?yr:{mode:1,hard:m[0],soft:m[0]},max:m[1]==null?yr:{mode:1,hard:m[1],soft:m[1]}},b=!1),!b&&bn(m))){let k=m;m=(C,T,I)=>T==null?Nl:gn(T,I,k)}s.range=ye(m||(o?gc:t==B?s.distr==3?yc:s.distr==4?wc:Ni:s.distr==3?Li:s.distr==4?Pi:xc)),s.auto=ye(b?!1:s.auto),s.clamp=ye(s.clamp||lc),s._min=s._max=null,s.valToPct=d(s)}}}p("x"),p("y"),i==1&&M.forEach(t=>{p(t.scale)}),J.forEach(t=>{p(t.scale)});for(let t in e.scales)p(t);const x=N[B],E=x.distr;let j,D;x.ori==0?(vt(c,Aa),j=f,D=h):(vt(c,Ma),j=h,D=f);const P={};for(let t in N){let s=N[t];(s.min!=null||s.max!=null)&&(P[t]={min:s.min,max:s.max},s.min=s.max=null)}const te=e.tzDate||(t=>new Date(qe(t/Q))),U=e.fmtDate||bs,X=Q==1?Mo(te):Do(te),ae=Mr(te,Ar(Q==1?Ao:Ro,U)),O=Rr(te,Tr(Lo,U)),ce=[],L=l.legend=Ge({},Fo,e.legend),A=l.cursor=Ge({},Bo,{drag:{y:i==2}},e.cursor),F=L.show,Ee=A.show,le=L.markers;L.idxs=ce,le.width=ye(le.width),le.dash=ye(le.dash),le.stroke=ye(le.stroke),le.fill=ye(le.fill);let ee,Fe,se,q=[],_e=[],Z,me=!1,Ae={};if(L.live){const t=M[1]?M[1].values:null;me=t!=null,Z=me?t(l,1,0):{_:0};for(let s in Z)Ae[s]=ms}if(F)if(ee=Pt("table",za,c),se=Pt("tbody",null,ee),L.mount(l,ee),me){Fe=Pt("thead",null,ee,se);let t=Pt("tr",null,Fe);Pt("th",null,t);for(var we in Z)Pt("th",rr,t).textContent=we}else vt(ee,Ha),L.live&&vt(ee,Va);const be={show:!0},he={show:!1};function rt(t,s){if(s==0&&(me||!L.live||i==2))return Nl;let a=[],o=Pt("tr",Wa,se,se.childNodes[s]);vt(o,t.class),t.show||vt(o,ul);let m=Pt("th",null,o);if(le.show){let C=Mt(Ba,m);if(s>0){let T=le.width(l,s);T&&(C.style.border=T+"px "+le.dash(l,s)+" "+le.stroke(l,s)),C.style.background=le.fill(l,s)}}let b=Mt(rr,m);t.label instanceof HTMLElement?b.appendChild(t.label):b.textContent=t.label,s>0&&(le.show||(b.style.color=t.width>0?le.stroke(l,s):le.fill(l,s)),de("click",m,C=>{if(A._lock)return;nl(C);let T=M.indexOf(t);if((C.ctrlKey||C.metaKey)!=L.isolate){let I=M.some((V,G)=>G>0&&G!=T&&V.show);M.forEach((V,G)=>{G>0&&Vt(G,I?G==T?be:he:be,!0,Ue.setSeries)})}else Vt(T,{show:!t.show},!0,Ue.setSeries)},!1),ml&&de(cr,m,C=>{A._lock||(nl(C),Vt(M.indexOf(t),El,!0,Ue.setSeries))},!1));for(var k in Z){let C=Pt("td",Ua,o);C.textContent="--",a.push(C)}return[o,a]}const re=new Map;function de(t,s,a,o=!0){const m=re.get(s)||{},b=A.bind[t](l,s,a,o);b&&(fl(t,s,m[t]=b),re.set(s,m))}function ut(t,s,a){const o=re.get(s)||{};for(let m in o)(t==null||m==t)&&(as(m,s,o[m]),delete o[m]);t==null&&re.delete(s)}let it=0,Ye=0,oe=0,R=0,ge=0,pe=0,He=ge,lt=pe,gt=oe,It=R,We=0,Ie=0,Be=0,xt=0;l.bbox={};let Cn=!1,en=!1,pl=!1,ll=!1,tn=!1,kt=!1;function En(t,s,a){(a||t!=l.width||s!=l.height)&&As(t,s),_l(!1),pl=!0,en=!0,bl()}function As(t,s){l.width=it=oe=t,l.height=Ye=R=s,ge=pe=0,zi(),Vi();let a=l.bbox;We=a.left=ol(ge*ke,.5),Ie=a.top=ol(pe*ke,.5),Be=a.width=ol(oe*ke,.5),xt=a.height=ol(R*ke,.5)}const Oi=3;function Fi(){let t=!1,s=0;for(;!t;){s++;let a=Yi(s),o=Ji(s);t=s==Oi||a&&o,t||(As(l.width,l.height),en=!0)}}function Ii({width:t,height:s}){En(t,s)}l.setSize=Ii;function zi(){let t=!1,s=!1,a=!1,o=!1;J.forEach((m,b)=>{if(m.show&&m._show){let{side:k,_size:C}=m,T=k%2,I=m.label!=null?m.labelSize:0,V=C+I;V>0&&(T?(oe-=V,k==3?(ge+=V,o=!0):a=!0):(R-=V,k==0?(pe+=V,t=!0):s=!0))}}),sl[0]=t,sl[1]=a,sl[2]=s,sl[3]=o,oe-=Yt[1]+Yt[3],ge+=Yt[3],R-=Yt[2]+Yt[0],pe+=Yt[0]}function Vi(){let t=ge+oe,s=pe+R,a=ge,o=pe;function m(b,k){switch(b){case 1:return t+=k,t-k;case 2:return s+=k,s-k;case 3:return a-=k,a+k;case 0:return o-=k,o+k}}J.forEach((b,k)=>{if(b.show&&b._show){let C=b.side;b._pos=m(C,b._size),b.label!=null&&(b._lpos=m(C,b.labelSize))}})}if(A.dataIdx==null){let t=A.hover,s=t.skip=new Set(t.skip??[]);s.add(void 0);let a=t.prox=ye(t.prox),o=t.bias??=0;A.dataIdx=(m,b,k,C)=>{if(b==0)return k;let T=k,I=a(m,b,k,C)??Te,V=I>=0&&I0;)s.has(ve[K])||(xe=K);if(o==0||o==1)for(K=k;ne==null&&K++I&&(T=null);return T}}const nl=t=>{A.event=t};A.idxs=ce,A._lock=!1;let at=A.points;at.show=ye(at.show),at.size=ye(at.size),at.stroke=ye(at.stroke),at.width=ye(at.width),at.fill=ye(at.fill);const zt=l.focus=Ge({},e.focus||{alpha:.3},A.focus),ml=zt.prox>=0,gl=ml&&at.one;let Ct=[],xl=[],yl=[];function Ms(t,s){let a=at.show(l,s);if(a instanceof HTMLElement)return vt(a,Ia),vt(a,t.class),Ut(a,-10,-10,oe,R),z.insertBefore(a,Ct[s]),a}function Ts(t,s){if(i==1||s>0){let a=i==1&&N[t.scale].time,o=t.value;t.value=a?jr(o)?Rr(te,Tr(o,U)):o||O:o||Xo,t.label=t.label||(a?Go:Uo)}if(gl||s>0){t.width=t.width==null?1:t.width,t.paths=t.paths||dc||lo,t.fillTo=ye(t.fillTo||sc),t.pxAlign=+Se(t.pxAlign,w),t.pxRound=Vr(t.pxAlign),t.stroke=ye(t.stroke||null),t.fill=ye(t.fill||null),t._stroke=t._fill=t._paths=t._focus=null;let a=ec(mt(1,t.width),1),o=t.points=Ge({},{size:a,width:mt(1,a*.2),stroke:t.stroke,space:a*2,paths:pc,_stroke:null,_fill:null},t.points);o.show=ye(o.show),o.filter=ye(o.filter),o.fill=ye(o.fill),o.stroke=ye(o.stroke),o.paths=ye(o.paths),o.pxAlign=t.pxAlign}if(F){let a=rt(t,s);q.splice(s,0,a[0]),_e.splice(s,0,a[1]),L.values.push(null)}if(Ee){ce.splice(s,0,null);let a=null;gl?s==0&&(a=Ms(t,s)):s>0&&(a=Ms(t,s)),Ct.splice(s,0,a),xl.splice(s,0,0),yl.splice(s,0,0)}et("addSeries",s)}function Hi(t,s){s=s??M.length,t=i==1?ds(t,s,Nr,Ir):ds(t,s,{},Fr),M.splice(s,0,t),Ts(M[s],s)}l.addSeries=Hi;function Wi(t){if(M.splice(t,1),F){L.values.splice(t,1),_e.splice(t,1);let s=q.splice(t,1)[0];ut(null,s.firstChild),s.remove()}Ee&&(ce.splice(t,1),Ct.splice(t,1)[0].remove(),xl.splice(t,1),yl.splice(t,1)),et("delSeries",t)}l.delSeries=Wi;const sl=[!1,!1,!1,!1];function Bi(t,s){if(t._show=t.show,t.show){let a=t.side%2,o=N[t.scale];o==null&&(t.scale=a?M[1].scale:B,o=N[t.scale]);let m=o.time;t.size=ye(t.size),t.space=ye(t.space),t.rotate=ye(t.rotate),el(t.incrs)&&t.incrs.forEach(k=>{!tl.has(k)&&tl.set(k,si(k))}),t.incrs=ye(t.incrs||(o.distr==2?ko:m?Q==1?Eo:To:cl)),t.splits=ye(t.splits||(m&&o.distr==1?X:o.distr==3?cs:o.distr==4?Ko:$o)),t.stroke=ye(t.stroke),t.grid.stroke=ye(t.grid.stroke),t.ticks.stroke=ye(t.ticks.stroke),t.border.stroke=ye(t.border.stroke);let b=t.values;t.values=el(b)&&!el(b[0])?ye(b):m?el(b)?Mr(te,Ar(b,U)):jr(b)?No(te,b):b||ae:b||qo,t.filter=ye(t.filter||(o.distr>=3&&o.log==10?Qo:o.distr==3&&o.log==2?Zo:li)),t.font=Ur(t.font),t.labelFont=Ur(t.labelFont),t._size=t.size(l,null,s,0),t._space=t._rotate=t._incrs=t._found=t._splits=t._values=null,t._size>0&&(sl[s]=!0,t._el=Mt(La,S))}}function zl(t,s,a,o){let[m,b,k,C]=a,T=s%2,I=0;return T==0&&(C||b)&&(I=s==0&&!m||s==2&&!k?qe(Dr.size/3):0),T==1&&(m||k)&&(I=s==1&&!b||s==3&&!C?qe(Pr.size/2):0),I}const Rs=l.padding=(e.padding||[zl,zl,zl,zl]).map(t=>ye(Se(t,zl))),Yt=l._padding=Rs.map((t,s)=>t(l,s,sl,0));let nt,Je=null,Qe=null;const ln=i==1?M[0].idxs:null;let Dt=null,Vl=!1;function Ds(t,s){if(n=t??[],l.data=l._data=n,i==2){nt=0;for(let a=1;a=0,kt=!0,bl()}}l.setData=Ds;function An(){Vl=!0;let t,s;i==1&&(nt>0?(Je=ln[0]=0,Qe=ln[1]=nt-1,t=n[0][Je],s=n[0][Qe],E==2?(t=Je,s=Qe):t==s&&(E==3?[t,s]=wn(t,t,x.log,!1):E==4?[t,s]=xs(t,t,x.log,!1):x.time?s=t+qe(86400/Q):[t,s]=gn(t,s,ys,!0))):(Je=ln[0]=t=null,Qe=ln[1]=s=null)),Qt(B,t,s)}let nn,wl,Mn,Tn,Rn,Dn,Nn,Ln,Pn,yt;function Ns(t,s,a,o,m,b){t??=ar,a??=_s,o??="butt",m??=ar,b??="round",t!=nn&&(_.strokeStyle=nn=t),m!=wl&&(_.fillStyle=wl=m),s!=Mn&&(_.lineWidth=Mn=s),b!=Rn&&(_.lineJoin=Rn=b),o!=Dn&&(_.lineCap=Dn=o),a!=Tn&&_.setLineDash(Tn=a)}function Ls(t,s,a,o){s!=wl&&(_.fillStyle=wl=s),t!=Nn&&(_.font=Nn=t),a!=Ln&&(_.textAlign=Ln=a),o!=Pn&&(_.textBaseline=Pn=o)}function On(t,s,a,o,m=0){if(o.length>0&&t.auto(l,Vl)&&(s==null||s.min==null)){let b=Se(Je,0),k=Se(Qe,o.length-1),C=a.min==null?Ja(o,b,k,m,t.distr==3):[a.min,a.max];t.min=Ft(t.min,a.min=C[0]),t.max=mt(t.max,a.max=C[1])}}const Ps={min:null,max:null};function Ui(){for(let o in N){let m=N[o];P[o]==null&&(m.min==null||P[B]!=null&&m.auto(l,Vl))&&(P[o]=Ps)}for(let o in N){let m=N[o];P[o]==null&&m.from!=null&&P[m.from]!=null&&(P[o]=Ps)}P[B]!=null&&_l(!0);let t={};for(let o in P){let m=P[o];if(m!=null){let b=t[o]=Ll(N[o],ro);if(m.min!=null)Ge(b,m);else if(o!=B||i==2)if(nt==0&&b.from==null){let k=b.range(l,null,null,o);b.min=k[0],b.max=k[1]}else b.min=Te,b.max=-Te}}if(nt>0){M.forEach((o,m)=>{if(i==1){let b=o.scale,k=P[b];if(k==null)return;let C=t[b];if(m==0){let T=C.range(l,C.min,C.max,b);C.min=T[0],C.max=T[1],Je=Ot(C.min,n[0]),Qe=Ot(C.max,n[0]),Qe-Je>1&&(n[0][Je]C.max&&Qe--),o.min=Dt[Je],o.max=Dt[Qe]}else o.show&&o.auto&&On(C,k,o,n[m],o.sorted);o.idxs[0]=Je,o.idxs[1]=Qe}else if(m>0&&o.show&&o.auto){let[b,k]=o.facets,C=b.scale,T=k.scale,[I,V]=n[m],G=t[C],ue=t[T];G!=null&&On(G,P[C],b,I,b.sorted),ue!=null&&On(ue,P[T],k,V,k.sorted),o.min=k.min,o.max=k.max}});for(let o in t){let m=t[o],b=P[o];if(m.from==null&&(b==null||b.min==null)){let k=m.range(l,m.min==Te?null:m.min,m.max==-Te?null:m.max,o);m.min=k[0],m.max=k[1]}}}for(let o in t){let m=t[o];if(m.from!=null){let b=t[m.from];if(b.min==null)m.min=m.max=null;else{let k=m.range(l,b.min,b.max,o);m.min=k[0],m.max=k[1]}}}let s={},a=!1;for(let o in t){let m=t[o],b=N[o];if(b.min!=m.min||b.max!=m.max){b.min=m.min,b.max=m.max;let k=b.distr;b._min=k==3?$t(b.min):k==4?Zn(b.min,b.asinh):k==100?b.fwd(b.min):b.min,b._max=k==3?$t(b.max):k==4?Zn(b.max,b.asinh):k==100?b.fwd(b.max):b.max,s[o]=a=!0}}if(a){M.forEach((o,m)=>{i==2?m>0&&s.y&&(o._paths=null):s[o.scale]&&(o._paths=null)});for(let o in s)pl=!0,et("setScale",o);Ee&&A.left>=0&&(ll=kt=!0)}for(let o in P)P[o]=null}function Gi(t){let s=os(Je-1,0,nt-1),a=os(Qe+1,0,nt-1);for(;t[s]==null&&s>0;)s--;for(;t[a]==null&&a0){let t=M.some(s=>s._focus)&&yt!=zt.alpha;t&&(_.globalAlpha=yt=zt.alpha),M.forEach((s,a)=>{if(a>0&&s.show&&(Os(a,!1),Os(a,!0),s._paths==null)){let o=yt;yt!=s.alpha&&(_.globalAlpha=yt=s.alpha);let m=i==2?[0,n[a][0].length-1]:Gi(n[a]);s._paths=s.paths(l,a,m[0],m[1]),yt!=o&&(_.globalAlpha=yt=o)}}),M.forEach((s,a)=>{if(a>0&&s.show){let o=yt;yt!=s.alpha&&(_.globalAlpha=yt=s.alpha),s._paths!=null&&Fs(a,!1);{let m=s._paths!=null?s._paths.gaps:null,b=s.points.show(l,a,Je,Qe,m),k=s.points.filter(l,a,b,m);(b||k)&&(s.points._paths=s.points.paths(l,a,Je,Qe,k),Fs(a,!0))}yt!=o&&(_.globalAlpha=yt=o),et("drawSeries",a)}}),t&&(_.globalAlpha=yt=1)}}function Os(t,s){let a=s?M[t].points:M[t];a._stroke=a.stroke(l,t),a._fill=a.fill(l,t)}function Fs(t,s){let a=s?M[t].points:M[t],{stroke:o,fill:m,clip:b,flags:k,_stroke:C=a._stroke,_fill:T=a._fill,_width:I=a.width}=a._paths;I=Re(I*ke,3);let V=null,G=I%2/2;s&&T==null&&(T=I>0?"#fff":C);let ue=a.pxAlign==1&&G>0;if(ue&&_.translate(G,G),!s){let je=We-I/2,ve=Ie-I/2,xe=Be+I,ne=xt+I;V=new Path2D,V.rect(je,ve,xe,ne)}s?Fn(C,I,a.dash,a.cap,T,o,m,k,b):$i(t,C,I,a.dash,a.cap,T,o,m,k,V,b),ue&&_.translate(-G,-G)}function $i(t,s,a,o,m,b,k,C,T,I,V){let G=!1;T!=0&&fe.forEach((ue,je)=>{if(ue.series[0]==t){let ve=M[ue.series[1]],xe=n[ue.series[1]],ne=(ve._paths||Zl).band;el(ne)&&(ne=ue.dir==1?ne[0]:ne[1]);let K,Le=null;ve.show&&ne&&Za(xe,Je,Qe)?(Le=ue.fill(l,je)||b,K=ve._paths.clip):ne=null,Fn(s,a,o,m,Le,k,C,T,I,V,K,ne),G=!0}}),G||Fn(s,a,o,m,b,k,C,T,I,V)}const Is=Pl|fs;function Fn(t,s,a,o,m,b,k,C,T,I,V,G){Ns(t,s,a,o,m),(T||I||G)&&(_.save(),T&&_.clip(T),I&&_.clip(I)),G?(C&Is)==Is?(_.clip(G),V&&_.clip(V),rn(m,k),sn(t,b,s)):C&fs?(rn(m,k),_.clip(G),sn(t,b,s)):C&Pl&&(_.save(),_.clip(G),V&&_.clip(V),rn(m,k),_.restore(),sn(t,b,s)):(rn(m,k),sn(t,b,s)),(T||I||G)&&_.restore()}function sn(t,s,a){a>0&&(s instanceof Map?s.forEach((o,m)=>{_.strokeStyle=nn=m,_.stroke(o)}):s!=null&&t&&_.stroke(s))}function rn(t,s){s instanceof Map?s.forEach((a,o)=>{_.fillStyle=wl=o,_.fill(a)}):s!=null&&t&&_.fill(s)}function Ki(t,s,a,o){let m=J[t],b;if(o<=0)b=[0,0];else{let k=m._space=m.space(l,t,s,a,o),C=m._incrs=m.incrs(l,t,s,a,o,k);b=_c(s,a,C,o,k)}return m._found=b}function In(t,s,a,o,m,b,k,C,T,I){let V=k%2/2;w==1&&_.translate(V,V),Ns(C,k,T,I,C),_.beginPath();let G,ue,je,ve,xe=m+(o==0||o==3?-b:b);a==0?(ue=m,ve=xe):(G=m,je=xe);for(let ne=0;ne{if(!a.show)return;let m=N[a.scale];if(m.min==null){a._show&&(s=!1,a._show=!1,_l(!1));return}else a._show||(s=!1,a._show=!0,_l(!1));let b=a.side,k=b%2,{min:C,max:T}=m,[I,V]=Ki(o,C,T,k==0?oe:R);if(V==0)return;let G=m.distr==2,ue=a._splits=a.splits(l,o,C,T,I,V,G),je=m.distr==2?ue.map(K=>Dt[K]):ue,ve=m.distr==2?Dt[ue[1]]-Dt[ue[0]]:I,xe=a._values=a.values(l,a.filter(l,je,o,V,ve),o,V,ve);a._rotate=b==2?a.rotate(l,xe,o,V):0;let ne=a._size;a._size=Rt(a.size(l,xe,o,t)),ne!=null&&a._size!=ne&&(s=!1)}),s}function Ji(t){let s=!0;return Rs.forEach((a,o)=>{let m=a(l,o,sl,t);m!=Yt[o]&&(s=!1),Yt[o]=m}),s}function Qi(){for(let t=0;tDt[ht]):je,xe=V.distr==2?Dt[je[1]]-Dt[je[0]]:T,ne=s.ticks,K=s.border,Le=ne.show?ne.size:0,ze=qe(Le*ke),tt=qe((s.alignTo==2?s._size-Le-s.gap:s.gap)*ke),Me=s._rotate*-pn/180,Ve=$(s._pos*ke),wt=(ze+tt)*C,ft=Ve+wt;b=o==0?ft:0,m=o==1?ft:0;let Et=s.font[0],Nt=s.align==1?Ml:s.align==2?Yn:Me>0?Ml:Me<0?Yn:o==0?"center":a==3?Yn:Ml,Wt=Me||o==1?"middle":a==2?ql:ir;Ls(Et,k,Nt,Wt);let _t=s.font[1]*s.lineGap,At=je.map(ht=>$(y(ht,V,G,ue))),Lt=s._values;for(let ht=0;ht{a>0&&(s._paths=null,t&&(i==1?(s.min=null,s.max=null):s.facets.forEach(o=>{o.min=null,o.max=null})))})}let an=!1,zn=!1,Hl=[];function Zi(){zn=!1;for(let t=0;t0&&queueMicrotask(Zi)}l.batch=Xi;function zs(){if(Cn&&(Ui(),Cn=!1),pl&&(Fi(),pl=!1),en){if(Pe(W,Ml,ge),Pe(W,ql,pe),Pe(W,Kl,oe),Pe(W,Yl,R),Pe(z,Ml,ge),Pe(z,ql,pe),Pe(z,Kl,oe),Pe(z,Yl,R),Pe(S,Kl,it),Pe(S,Yl,Ye),v.width=qe(it*ke),v.height=qe(Ye*ke),J.forEach(({_el:t,_show:s,_size:a,_pos:o,side:m})=>{if(t!=null)if(s){let b=m===3||m===0?a:0,k=m%2==1;Pe(t,k?"left":"top",o-b),Pe(t,k?"width":"height",a),Pe(t,k?"top":"left",k?pe:ge),Pe(t,k?"height":"width",k?R:oe),is(t,ul)}else vt(t,ul)}),nn=wl=Mn=Rn=Dn=Nn=Ln=Pn=Tn=null,yt=1,Ul(!0),ge!=He||pe!=lt||oe!=gt||R!=It){_l(!1);let t=oe/gt,s=R/It;if(Ee&&!ll&&A.left>=0){A.left*=t,A.top*=s,vl&&Ut(vl,qe(A.left),0,oe,R),Sl&&Ut(Sl,0,qe(A.top),oe,R);for(let a=0;a=0&&Ne.width>0){Ne.left*=t,Ne.width*=t,Ne.top*=s,Ne.height*=s;for(let a in Gn)Pe(Cl,a,Ne[a])}He=ge,lt=pe,gt=oe,It=R}et("setSize"),en=!1}it>0&&Ye>0&&(_.clearRect(0,0,v.width,v.height),et("drawClear"),H.forEach(t=>t()),et("draw")),Ne.show&&tn&&(on(Ne),tn=!1),Ee&&ll&&(il(null,!0,!1),ll=!1),L.show&&L.live&&kt&&(Bn(),kt=!1),g||(g=!0,l.status=1,et("ready")),Vl=!1,an=!1}l.redraw=(t,s)=>{pl=s||!1,t!==!1?Qt(B,x.min,x.max):bl()};function Vn(t,s){let a=N[t];if(a.from==null){if(nt==0){let o=a.range(l,s.min,s.max,t);s.min=o[0],s.max=o[1]}if(s.min>s.max){let o=s.min;s.min=s.max,s.max=o}if(nt>1&&s.min!=null&&s.max!=null&&s.max-s.min<1e-16)return;t==B&&a.distr==2&&nt>0&&(s.min=Ot(s.min,n[0]),s.max=Ot(s.max,n[0]),s.min==s.max&&s.max++),P[t]=s,Cn=!0,bl()}}l.setScale=Vn;let Hn,Wn,vl,Sl,Vs,Hs,jl,kl,Ws,Bs,De,Oe,Jt=!1;const st=A.drag;let Ze=st.x,Xe=st.y;Ee&&(A.x&&(Hn=Mt(Oa,z)),A.y&&(Wn=Mt(Fa,z)),x.ori==0?(vl=Hn,Sl=Wn):(vl=Wn,Sl=Hn),De=A.left,Oe=A.top);const Ne=l.select=Ge({show:!0,over:!0,left:0,width:0,top:0,height:0},e.select),Cl=Ne.show?Mt(Pa,Ne.over?z:W):null;function on(t,s){if(Ne.show){for(let a in t)Ne[a]=t[a],a in Gn&&Pe(Cl,a,t[a]);s!==!1&&et("setSelect")}}l.setSelect=on;function ea(t){if(M[t].show)F&&is(q[t],ul);else if(F&&vt(q[t],ul),Ee){let a=gl?Ct[0]:Ct[t];a!=null&&Ut(a,-10,-10,oe,R)}}function Qt(t,s,a){Vn(t,{min:s,max:a})}function Vt(t,s,a,o){s.focus!=null&&ra(t),s.show!=null&&M.forEach((m,b)=>{b>0&&(t==b||t==null)&&(m.show=s.show,ea(b),i==2?(Qt(m.facets[0].scale,null,null),Qt(m.facets[1].scale,null,null)):Qt(m.scale,null,null),bl())}),a!==!1&&et("setSeries",t,s),o&&Gl("setSeries",l,t,s)}l.setSeries=Vt;function ta(t,s){Ge(fe[t],s)}function la(t,s){t.fill=ye(t.fill||null),t.dir=Se(t.dir,-1),s=s??fe.length,fe.splice(s,0,t)}function na(t){t==null?fe.length=0:fe.splice(t,1)}l.addBand=la,l.setBand=ta,l.delBand=na;function sa(t,s){M[t].alpha=s,Ee&&Ct[t]!=null&&(Ct[t].style.opacity=s),F&&q[t]&&(q[t].style.opacity=s)}let qt,Zt,rl;const El={focus:!0};function ra(t){if(t!=rl){let s=t==null,a=zt.alpha!=1;M.forEach((o,m)=>{if(i==1||m>0){let b=s||m==0||m==t;o._focus=s?null:b,a&&sa(m,b?1:zt.alpha)}}),rl=t,a&&bl()}}F&&ml&&de(ur,ee,t=>{A._lock||(nl(t),rl!=null&&Vt(null,El,!0,Ue.setSeries))});function Ht(t,s,a){let o=N[s];a&&(t=t/ke-(o.ori==1?pe:ge));let m=oe;o.ori==1&&(m=R,t=m-t),o.dir==-1&&(t=m-t);let b=o._min,k=o._max,C=t/m,T=b+(k-b)*C,I=o.distr;return I==3?Dl(10,T):I==4?eo(T,o.asinh):I==100?o.bwd(T):T}function ia(t,s){let a=Ht(t,B,s);return Ot(a,n[0],Je,Qe)}l.valToIdx=t=>Ot(t,n[0]),l.posToIdx=ia,l.posToVal=Ht,l.valToPos=(t,s,a)=>N[s].ori==0?f(t,N[s],a?Be:oe,a?We:0):h(t,N[s],a?xt:R,a?Ie:0),l.setCursor=(t,s,a)=>{De=t.left,Oe=t.top,il(null,s,a)};function Us(t,s){Pe(Cl,Ml,Ne.left=t),Pe(Cl,Kl,Ne.width=s)}function Gs(t,s){Pe(Cl,ql,Ne.top=t),Pe(Cl,Yl,Ne.height=s)}let Wl=x.ori==0?Us:Gs,Bl=x.ori==1?Us:Gs;function aa(){if(F&&L.live)for(let t=i==2?1:0;t{ce[o]=a}):so(t.idx)||ce.fill(t.idx),L.idx=ce[0]),F&&L.live){for(let a=0;a0||i==1&&!me)&&oa(a,ce[a]);aa()}kt=!1,s!==!1&&et("setLegend")}l.setLegend=Bn;function oa(t,s){let a=M[t],o=t==0&&E==2?Dt:n[t],m;me?m=a.values(l,t,s)??Ae:(m=a.value(l,s==null?null:o[s],t,s),m=m==null?Ae:{_:m}),L.values[t]=m}function il(t,s,a){Ws=De,Bs=Oe,[De,Oe]=A.move(l,De,Oe),A.left=De,A.top=Oe,Ee&&(vl&&Ut(vl,qe(De),0,oe,R),Sl&&Ut(Sl,0,qe(Oe),oe,R));let o,m=Je>Qe;qt=Te,Zt=null;let b=x.ori==0?oe:R,k=x.ori==1?oe:R;if(De<0||nt==0||m){o=A.idx=null;for(let C=0;C0&&Le.show){let wt=Me==null?-10:Me==o?I:j(i==1?n[0][Me]:n[K][0][Me],x,b,0),ft=Ve==null?-10:D(Ve,i==1?N[Le.scale]:N[Le.facets[1].scale],k,0);if(ml&&Ve!=null){let Et=x.ori==1?De:Oe,Nt=$e(zt.dist(l,K,Me,ft,Et));if(Nt=0?1:-1,Lt=_t>=0?1:-1;Lt==At&&(Lt==1?Wt==1?Ve>=_t:Ve<=_t:Wt==1?Ve<=_t:Ve>=_t)&&(qt=Nt,Zt=K)}else qt=Nt,Zt=K}}if(kt||gl){let Et,Nt;x.ori==0?(Et=wt,Nt=ft):(Et=ft,Nt=wt);let Wt,_t,At,Lt,Bt,ht,bt=!0,al=at.bbox;if(al!=null){bt=!1;let dt=al(l,K);At=dt.left,Lt=dt.top,Wt=dt.width,_t=dt.height}else At=Et,Lt=Nt,Wt=_t=at.size(l,K);if(ht=at.fill(l,K),Bt=at.stroke(l,K),gl)K==Zt&&qt<=zt.prox&&(V=At,G=Lt,ue=Wt,je=_t,ve=bt,xe=ht,ne=Bt);else{let dt=Ct[K];dt!=null&&(xl[K]=At,yl[K]=Lt,xr(dt,Wt,_t,bt),mr(dt,ht,Bt),Ut(dt,Rt(At),Rt(Lt),oe,R))}}}}if(gl){let K=zt.prox,Le=rl==null?qt<=K:qt>K||Zt!=rl;if(kt||Le){let ze=Ct[0];ze!=null&&(xl[0]=V,yl[0]=G,xr(ze,ue,je,ve),mr(ze,xe,ne),Ut(ze,Rt(V),Rt(G),oe,R))}}}if(Ne.show&&Jt)if(t!=null){let[C,T]=Ue.scales,[I,V]=Ue.match,[G,ue]=t.cursor.sync.scales,je=t.cursor.drag;if(Ze=je._x,Xe=je._y,Ze||Xe){let{left:ve,top:xe,width:ne,height:K}=t.select,Le=t.scales[G].ori,ze=t.posToVal,tt,Me,Ve,wt,ft,Et=C!=null&&I(C,G),Nt=T!=null&&V(T,ue);Et&&Ze?(Le==0?(tt=ve,Me=ne):(tt=xe,Me=K),Ve=N[C],wt=j(ze(tt,G),Ve,b,0),ft=j(ze(tt+Me,G),Ve,b,0),Wl(Ft(wt,ft),$e(ft-wt))):Wl(0,b),Nt&&Xe?(Le==1?(tt=ve,Me=ne):(tt=xe,Me=K),Ve=N[T],wt=D(ze(tt,ue),Ve,k,0),ft=D(ze(tt+Me,ue),Ve,k,0),Bl(Ft(wt,ft),$e(ft-wt))):Bl(0,k)}else qn()}else{let C=$e(Ws-Vs),T=$e(Bs-Hs);if(x.ori==1){let ue=C;C=T,T=ue}Ze=st.x&&C>=st.dist,Xe=st.y&&T>=st.dist;let I=st.uni;I!=null?Ze&&Xe&&(Ze=C>=I,Xe=T>=I,!Ze&&!Xe&&(T>C?Xe=!0:Ze=!0)):st.x&&st.y&&(Ze||Xe)&&(Ze=Xe=!0);let V,G;Ze&&(x.ori==0?(V=jl,G=De):(V=kl,G=Oe),Wl(Ft(V,G),$e(G-V)),Xe||Bl(0,k)),Xe&&(x.ori==1?(V=jl,G=De):(V=kl,G=Oe),Bl(Ft(V,G),$e(G-V)),Ze||Wl(0,b)),!Ze&&!Xe&&(Wl(0,0),Bl(0,0))}if(st._x=Ze,st._y=Xe,t==null){if(a){if(lr!=null){let[C,T]=Ue.scales;Ue.values[0]=C!=null?Ht(x.ori==0?De:Oe,C):null,Ue.values[1]=T!=null?Ht(x.ori==1?De:Oe,T):null}Gl(Jn,l,De,Oe,oe,R,o)}if(ml){let C=a&&Ue.setSeries,T=zt.prox;rl==null?qt<=T&&Vt(Zt,El,!0,C):qt>T?Vt(null,El,!0,C):Zt!=rl&&Vt(Zt,El,!0,C)}}kt&&(L.idx=o,Bn()),s!==!1&&et("setCursor")}let Xt=null;Object.defineProperty(l,"rect",{get(){return Xt==null&&Ul(!1),Xt}});function Ul(t=!1){t?Xt=null:(Xt=z.getBoundingClientRect(),et("syncRect",Xt))}function qs(t,s,a,o,m,b,k){A._lock||Jt&&t!=null&&t.movementX==0&&t.movementY==0||(Un(t,s,a,o,m,b,k,!1,t!=null),t!=null?il(null,!0,!0):il(s,!0,!1))}function Un(t,s,a,o,m,b,k,C,T){if(Xt==null&&Ul(!1),nl(t),t!=null)a=t.clientX-Xt.left,o=t.clientY-Xt.top;else{if(a<0||o<0){De=-10,Oe=-10;return}let[I,V]=Ue.scales,G=s.cursor.sync,[ue,je]=G.values,[ve,xe]=G.scales,[ne,K]=Ue.match,Le=s.axes[0].side%2==1,ze=x.ori==0?oe:R,tt=x.ori==1?oe:R,Me=Le?b:m,Ve=Le?m:b,wt=Le?o:a,ft=Le?a:o;if(ve!=null?a=ne(I,ve)?y(ue,N[I],ze,0):-10:a=ze*(wt/Me),xe!=null?o=K(V,xe)?y(je,N[V],tt,0):-10:o=tt*(ft/Ve),x.ori==1){let Et=a;a=o,o=Et}}T&&(s==null||s.cursor.event.type==Jn)&&((a<=1||a>=oe-1)&&(a=ol(a,oe)),(o<=1||o>=R-1)&&(o=ol(o,R))),C?(Vs=a,Hs=o,[jl,kl]=A.move(l,a,o)):(De=a,Oe=o)}const Gn={width:0,height:0,left:0,top:0};function qn(){on(Gn,!1)}let $s,Ks,Ys,Js;function Qs(t,s,a,o,m,b,k){Jt=!0,Ze=Xe=st._x=st._y=!1,Un(t,s,a,o,m,b,k,!0,!1),t!=null&&(de(Qn,ss,Zs,!1),Gl(or,l,jl,kl,oe,R,null));let{left:C,top:T,width:I,height:V}=Ne;$s=C,Ks=T,Ys=I,Js=V}function Zs(t,s,a,o,m,b,k){Jt=st._x=st._y=!1,Un(t,s,a,o,m,b,k,!1,!0);let{left:C,top:T,width:I,height:V}=Ne,G=I>0||V>0,ue=$s!=C||Ks!=T||Ys!=I||Js!=V;if(G&&ue&&on(Ne),st.setScale&&G&&ue){let je=C,ve=I,xe=T,ne=V;if(x.ori==1&&(je=T,ve=V,xe=C,ne=I),Ze&&Qt(B,Ht(je,B),Ht(je+ve,B)),Xe)for(let K in N){let Le=N[K];K!=B&&Le.from==null&&Le.min!=Te&&Qt(K,Ht(xe+ne,K),Ht(xe,K))}qn()}else A.lock&&(A._lock=!A._lock,il(s,!0,t!=null));t!=null&&(ut(Qn,ss),Gl(Qn,l,De,Oe,oe,R,null))}function ca(t,s,a,o,m,b,k){if(A._lock)return;nl(t);let C=Jt;if(Jt){let T=!0,I=!0,V=10,G,ue;x.ori==0?(G=Ze,ue=Xe):(G=Xe,ue=Ze),G&&ue&&(T=De<=V||De>=oe-V,I=Oe<=V||Oe>=R-V),G&&T&&(De=De{let m=Ue.match[2];a=m(l,s,a),a!=-1&&Vt(a,o,!0,!1)},Ee&&(de(or,z,Qs),de(Jn,z,qs),de(cr,z,t=>{nl(t),Ul(!1)}),de(ur,z,ca),de(fr,z,Xs),hs.add(l),l.syncRect=Ul);const cn=l.hooks=e.hooks||{};function et(t,s,a){zn?Hl.push([t,s,a]):t in cn&&cn[t].forEach(o=>{o.call(null,l,s,a)})}(e.plugins||[]).forEach(t=>{for(let s in t.hooks)cn[s]=(cn[s]||[]).concat(t.hooks[s])});const tr=(t,s,a)=>a,Ue=Ge({key:null,setSeries:!1,filters:{pub:vr,sub:vr},scales:[B,M[1]?M[1].scale:null],match:[Sr,Sr,tr],values:[null,null]},A.sync);Ue.match.length==2&&Ue.match.push(tr),A.sync=Ue;const lr=Ue.key,$n=ji(lr);function Gl(t,s,a,o,m,b,k){Ue.filters.pub(t,s,a,o,m,b,k)&&$n.pub(t,s,a,o,m,b,k)}$n.sub(l);function ua(t,s,a,o,m,b,k){Ue.filters.sub(t,s,a,o,m,b,k)&&Al[t](null,s,a,o,m,b,k)}l.pub=ua;function fa(){$n.unsub(l),hs.delete(l),re.clear(),as(mn,Rl,er),c.remove(),ee?.remove(),et("destroy")}l.destroy=fa;function Kn(){et("init",e,n),Ds(n||e.data,!1),P[B]?Vn(B,P[B]):An(),tn=Ne.show&&(Ne.width>0||Ne.height>0),ll=kt=!0,En(e.width,e.height)}return M.forEach(Ts),J.forEach(Bi),r?r instanceof HTMLElement?(r.appendChild(c),Kn()):r(l,Kn):Kn(),l}ct.assign=Ge;ct.fmtNum=ws;ct.rangeNum=gn;ct.rangeLog=wn;ct.rangeAsinh=xs;ct.orient=dl;ct.pxRatio=ke;ct.join=fo;ct.fmtDate=bs,ct.tzDate=So;ct.sync=ji;{ct.addGap=rc,ct.clipGaps=vn;let e=ct.paths={points:Ti};e.linear=Di,e.stepped=oc,e.bars=cc,e.spline=fc}const Gr=["#22d3ee","#f59e0b","#a78bfa","#34d399","#fb7185","#60a5fa","#facc15","#c084fc"];function vc({minutes:e=[],roverIds:n=[],metric:r="dischargedMah"}){const l=Gt.useRef(null),i=Gt.useMemo(()=>{const f=Array.from(new Set(e.map(g=>Number(g.bucketTs)/1e3))).sort((g,c)=>g-c),h=new Map(f.map((g,c)=>[g,c])),y=new Map(n.map(g=>[String(g),new Array(f.length).fill(null)]));return e.forEach(g=>{const c=y.get(String(g.roverId)),v=h.get(Number(g.bucketTs)/1e3);!c||v==null||(c[v]=g[r]==null?null:Number(g[r]))}),{data:[f,...n.map(g=>y.get(String(g)))],series:n.map((g,c)=>({label:String(g),stroke:Gr[c%Gr.length],width:1.5,spanGaps:!1,value:(v,_)=>_==null?"--":Number(_).toLocaleString(void 0,{maximumFractionDigits:3})}))}},[r,e,n]);return Gt.useEffect(()=>{if(!l.current||!i.data[0].length)return;const f=l.current,h={dischargedMah:"Discharged mAh/min",chargedMah:"Charged mAh/min",avgVoltageMv:"Average voltage mV",avgCurrentMa:"Average current mA",avgTemperatureC:"Average temperature °C"},y=new ct({width:Math.max(320,f.clientWidth),height:384,title:h[r]||r,cursor:{drag:{x:!0,y:!1,setScale:!0}},legend:{show:!0,live:!0},axes:[{stroke:"#94a3b8",grid:{stroke:"rgba(115,115,115,0.22)"}},{stroke:"#94a3b8",grid:{stroke:"rgba(115,115,115,0.22)"}}],scales:{x:{time:!0}},series:[{label:"Time"},...i.series],hooks:{ready:[c=>{c.root.addEventListener("dblclick",()=>c.setScale("x",{min:null,max:null}))}]}},i.data,f),g=new ResizeObserver(()=>{y.setSize({width:Math.max(320,f.clientWidth),height:384})});return g.observe(f),()=>{g.disconnect(),y.destroy()}},[r,i]),i.data[0].length?u.jsxs("div",{children:[u.jsx("p",{className:"mb-0.5 text-[0.68rem] text-slate-400",children:"Drag horizontally to zoom. Double-click to restore the full range. Hover for exact values."}),u.jsx("div",{ref:l,className:"min-h-[24rem] w-full overflow-hidden text-slate-200",role:"img","aria-label":`Fleet time series for ${r}`})]}):u.jsx("p",{className:"surface p-1 text-sm text-slate-400",children:"No minute time-series data in this range."})}const qr=[{label:"24 hours",ms:1440*60*1e3},{label:"7 days",ms:10080*60*1e3},{label:"30 days",ms:720*60*60*1e3},{label:"90 days",ms:2160*60*60*1e3},{label:"1 year",ms:365*24*60*60*1e3}],Sc=[["dischargedMah","Discharged mAh"],["chargedMah","Charged mAh"],["avgVoltageMv","Average voltage"],["avgCurrentMa","Average current"],["avgTemperatureC","Average temperature"]];function Y(e,n=2){return e!=null&&e!==""&&Number.isFinite(Number(e))?Number(e).toLocaleString(void 0,{maximumFractionDigits:n}):"--"}function Tt(e){return e!=null&&e!==""&&Number.isFinite(Number(e))?new Date(Number(e)).toLocaleString():"--"}function ls(e){const n=Math.round((Number(e)||0)/6e4);return n<60?`${n}m`:n<1440?`${Math.floor(n/60)}h ${n%60}m`:`${Math.floor(n/1440)}d ${Math.floor(n%1440/60)}h`}function $r(e){const n=Number(e)||0;return n>=1e6?`${Y(n/1e6)} km`:`${Y(n/1e3)} m`}function ot({label:e,value:n,detail:r=null}){return u.jsxs("div",{className:"surface min-w-0 px-1 py-0.5",children:[u.jsx("div",{className:"text-[0.68rem] text-slate-400",children:e}),u.jsx("div",{className:"truncate text-sm font-semibold text-slate-100",children:n}),r?u.jsx("div",{className:"truncate text-[0.68rem] text-slate-500",children:r}):null]})}function ns(e,n){const r=n.map(h=>Object.fromEntries(Object.entries(h).map(([y,g])=>[y,g&&typeof g=="object"?JSON.stringify(g):g]))),l=ka.unparse(r),i=URL.createObjectURL(new Blob([l],{type:"text/csv;charset=utf-8"})),f=document.createElement("a");f.href=i,f.download=e,f.click(),URL.revokeObjectURL(i)}function jc({report:e,onSaved:n}){const r=ba(),l=Kr(v=>v.session?.role||null),i=l==="admin"||l==="lockdown",[f,h]=Gt.useState({roverId:e.rovers[0]?.roverId||"",chemistry:"unknown",ratedCapacityMah:"",installedDate:new Date().toISOString().slice(0,10),notes:""}),[y,g]=Gt.useState(""),c=v=>{v.preventDefault(),g("Saving…"),r.emit("fleetReports:replaceBattery",{roverId:f.roverId,chemistry:f.chemistry,ratedCapacityMah:Number(f.ratedCapacityMah),installedAt:new Date(`${f.installedDate}T12:00:00`).getTime(),notes:f.notes},(_={})=>{if(_.error){g(_.error);return}g(`Registered ${_.battery?.batteryKey||"battery"}`),n()})};return u.jsxs(pt,{title:"Physical battery registry",meta:`${e.batteryRegistry.length} historical records`,bodyClassName:"space-y-0.5 p-0.5",children:[u.jsx("div",{className:"overflow-x-auto",children:u.jsxs("table",{className:"w-full whitespace-nowrap text-left text-xs",children:[u.jsx("thead",{className:"text-slate-400",children:u.jsxs("tr",{children:[u.jsx("th",{children:"Rover"}),u.jsx("th",{children:"Battery identity"}),u.jsx("th",{children:"Chemistry"}),u.jsx("th",{children:"Rated capacity mAh"}),u.jsx("th",{children:"Installed"}),u.jsx("th",{children:"Retired"}),u.jsx("th",{children:"Learned baseline mAh"}),u.jsx("th",{children:"Notes"})]})}),u.jsx("tbody",{children:e.batteryRegistry.map(v=>u.jsxs("tr",{className:"border-t border-neutral-700/70 text-slate-200",children:[u.jsx("td",{children:v.roverId}),u.jsx("td",{children:v.batteryKey}),u.jsx("td",{children:v.chemistry||"--"}),u.jsx("td",{children:Y(v.ratedCapacityMah,0)}),u.jsx("td",{children:Tt(v.installedAt)}),u.jsx("td",{children:Tt(v.retiredAt)}),u.jsx("td",{children:Y(v.healthyBaselineMah)}),u.jsx("td",{children:v.notes||"--"})]},v.batteryKey))})]})}),i?u.jsxs("form",{className:"surface grid gap-0.5 p-1 text-xs md:grid-cols-2 xl:grid-cols-6",onSubmit:c,children:[u.jsxs("label",{className:"space-y-0.5",children:[u.jsx("span",{className:"text-slate-400",children:"Rover"}),u.jsx("select",{className:"w-full bg-neutral-800 p-0.5",value:f.roverId,onChange:v=>h(_=>({..._,roverId:v.target.value})),children:e.rovers.map(v=>u.jsx("option",{value:v.roverId,children:v.name},v.roverId))})]}),u.jsxs("label",{className:"space-y-0.5",children:[u.jsx("span",{className:"text-slate-400",children:"Chemistry"}),u.jsxs("select",{className:"w-full bg-neutral-800 p-0.5",value:f.chemistry,onChange:v=>h(_=>({..._,chemistry:v.target.value})),children:[u.jsx("option",{value:"unknown",children:"Unknown"}),u.jsx("option",{value:"NiMH",children:"NiMH"}),u.jsx("option",{value:"Li-ion",children:"Li-ion"})]})]}),u.jsxs("label",{className:"space-y-0.5",children:[u.jsx("span",{className:"text-slate-400",children:"Rated capacity mAh"}),u.jsx("input",{required:!0,min:"1",max:"65535",type:"number",className:"w-full bg-neutral-800 p-0.5",value:f.ratedCapacityMah,onChange:v=>h(_=>({..._,ratedCapacityMah:v.target.value}))})]}),u.jsxs("label",{className:"space-y-0.5",children:[u.jsx("span",{className:"text-slate-400",children:"Installation date"}),u.jsx("input",{required:!0,type:"date",className:"w-full bg-neutral-800 p-0.5",value:f.installedDate,onChange:v=>h(_=>({..._,installedDate:v.target.value}))})]}),u.jsxs("label",{className:"space-y-0.5",children:[u.jsx("span",{className:"text-slate-400",children:"Notes"}),u.jsx("input",{className:"w-full bg-neutral-800 p-0.5",value:f.notes,onChange:v=>h(_=>({..._,notes:v.target.value}))})]}),u.jsxs("div",{className:"flex items-end gap-0.5",children:[u.jsx("button",{type:"submit",className:"button-dark px-1 py-0.5",children:"Install/replace battery"}),u.jsx("span",{className:"text-slate-400",children:y})]})]}):u.jsx("p",{className:"surface px-1 py-0.5 text-xs text-slate-400",children:"Battery history is read-only. Admin access is required to register a physical replacement."})]})}function kc(){const[e,n]=Gt.useState(qr[1].ms),[r,l]=Gt.useState(()=>Date.now()),[i,f]=Gt.useState("dischargedMah"),[h,y]=Gt.useState([]),g=r-e,{report:c,loading:v,error:_,refresh:S}=_a({since:g,until:r,compact:!1,includeEvents:!0,roverIds:h.length?h:null}),W=Gt.useMemo(()=>c?.rovers.map(w=>w.roverId)||[],[c]),z=w=>{y($=>$.includes(w)?$.filter(Q=>Q!==w):[...$,w])};return u.jsxs(u.Fragment,{children:[u.jsxs(pt,{title:"Fleet reports",meta:c?`Generated ${Tt(c.generatedAt)}`:"Read-only operational history",actions:u.jsx(Yr,{className:"button-dark px-1 py-0.25 text-[0.75rem]",to:"/",children:"Back to rover page"}),bodyClassName:"space-y-0.5 p-0.5 text-sm",children:[u.jsxs("div",{className:"flex flex-wrap items-center gap-0.5",children:[qr.map(w=>u.jsx("button",{type:"button",className:`button-dark px-1 py-0.5 text-xs ${e===w.ms?"text-cyan-200":""}`,onClick:()=>{n(w.ms),l(Date.now())},children:w.label},w.label)),u.jsx("button",{type:"button",className:"button-dark px-1 py-0.5 text-xs",onClick:()=>l(Date.now()),children:"Refresh"}),u.jsxs("span",{className:"text-xs text-slate-400",children:[Tt(g)," through ",Tt(r)]})]}),c?.rovers.length?u.jsxs("div",{className:"flex flex-wrap gap-0.5",children:[c.rovers.map(w=>u.jsxs("button",{type:"button",className:`button-dark px-1 py-0.5 text-xs ${h.includes(w.roverId)?"text-cyan-200":""}`,onClick:()=>z(w.roverId),children:[h.includes(w.roverId)?"✓ ":"",w.name]},w.roverId)),h.length?u.jsx("button",{type:"button",className:"button-dark px-1 py-0.5 text-xs",onClick:()=>y([]),children:"Clear rover filter"}):null]}):null]}),v&&!c?u.jsx(pt,{title:"Loading",bodyClassName:"p-1 text-sm text-slate-400",children:"Loading detailed fleet evidence…"}):null,_?u.jsx(pt,{title:"Report unavailable",bodyClassName:"p-1 text-sm text-red-300",children:_}):null,c?u.jsxs(u.Fragment,{children:[u.jsxs(pt,{title:"Exact totals",meta:`${c.totals.sampleCount.toLocaleString()} sensor samples`,bodyClassName:"grid grid-cols-2 gap-0.5 p-0.5 md:grid-cols-4 xl:grid-cols-6",children:[u.jsx(ot,{label:"Rovers",value:`${c.totals.onlineRoverCount}/${c.totals.roverCount} online`}),u.jsx(ot,{label:"Telemetry coverage",value:ls(c.totals.coverageMs)}),u.jsx(ot,{label:"Telemetry gaps",value:Y(c.totals.telemetryGapCount,0)}),u.jsx(ot,{label:"Commands",value:Y(c.totals.commandCount,0),detail:`${Y(c.totals.driveCommandCount,0)} drive/motor`}),u.jsx(ot,{label:"Rejected commands",value:Y(c.totals.rejectedCommandCount,0)}),u.jsx(ot,{label:"Distance",value:$r(c.totals.distanceMm)}),u.jsx(ot,{label:"Overcurrent episodes",value:Y(c.totals.overcurrentEpisodeCount,0)}),u.jsx(ot,{label:"Bumps",value:Y(c.totals.bumpCount,0)}),u.jsx(ot,{label:"Cliff episodes",value:Y(c.totals.cliffCount,0)}),u.jsx(ot,{label:"Wheel drops",value:Y(c.totals.wheelDropCount,0)}),u.jsx(ot,{label:"Virtual walls",value:Y(c.totals.virtualWallCount,0)}),u.jsx(ot,{label:"Charged",value:`${Y(c.totals.chargedMah)} mAh`}),u.jsx(ot,{label:"Discharged",value:`${Y(c.totals.dischargedMah)} mAh`}),u.jsx(ot,{label:"Battery sessions",value:Y(c.totals.batterySessionCount,0)}),u.jsx(ot,{label:"Warnings",value:Y(c.totals.warningFindingCount,0)}),u.jsx(ot,{label:"Critical",value:Y(c.totals.criticalFindingCount,0)})]}),u.jsx(pt,{title:"Needs attention",meta:c.findings.length,bodyClassName:"space-y-0.5 p-0.5 text-xs",children:c.findings.length?c.findings.map(w=>u.jsxs("details",{className:"surface px-1 py-0.5",children:[u.jsxs("summary",{className:"cursor-pointer text-slate-100",children:[u.jsx("span",{className:w.severity==="critical"?"text-red-300":w.severity==="warning"?"text-amber-300":"text-slate-400",children:w.severity})," · ",w.roverId?`${w.roverId} · `:"",w.title," · confidence ",w.confidence]}),u.jsx("pre",{className:"mt-0.5 overflow-x-auto whitespace-pre-wrap text-[0.68rem] text-slate-300",children:JSON.stringify(w.evidence,null,2)})]},w.key)):u.jsx("p",{className:"surface px-1 py-0.5 text-emerald-300",children:"No findings in the selected range."})}),u.jsx(pt,{title:"Time series",meta:`${c.minutes.length.toLocaleString()} minute rows`,actions:u.jsx("select",{className:"surface px-1 py-0.25 text-xs text-slate-100",value:i,onChange:w=>f(w.target.value),children:Sc.map(([w,$])=>u.jsx("option",{value:w,children:$},w))}),bodyClassName:"p-0.5",children:u.jsx(vc,{minutes:c.minutes,roverIds:W,metric:i})}),u.jsx(pt,{title:"Rover comparison",meta:c.rovers.length,actions:u.jsx("button",{type:"button",className:"button-dark px-1 py-0.25 text-xs",onClick:()=>ns("fleet-rovers.csv",c.rovers),children:"Export CSV"}),bodyClassName:"overflow-x-auto p-0.5",children:u.jsxs("table",{className:"w-full whitespace-nowrap text-left text-xs",children:[u.jsx("thead",{className:"text-slate-400",children:u.jsxs("tr",{children:[u.jsx("th",{children:"Rover"}),u.jsx("th",{children:"Online"}),u.jsx("th",{children:"Samples"}),u.jsx("th",{children:"Coverage"}),u.jsx("th",{children:"Gaps"}),u.jsx("th",{children:"Distance"}),u.jsx("th",{children:"Commands"}),u.jsx("th",{children:"Drive/motor"}),u.jsx("th",{children:"Rejected"}),u.jsx("th",{children:"Overcurrents"}),u.jsx("th",{children:"Bumps"}),u.jsx("th",{children:"Cliffs"}),u.jsx("th",{children:"Wheel drops"}),u.jsx("th",{children:"Virtual walls"}),u.jsx("th",{children:"Charged mAh"}),u.jsx("th",{children:"Discharged mAh"}),u.jsx("th",{children:"Voltage avg/min/max mV"}),u.jsx("th",{children:"Temperature avg/min/max °C"}),u.jsx("th",{children:"Charge now mAh"}),u.jsx("th",{children:"Reported capacity mAh"}),u.jsx("th",{children:"Last sample"})]})}),u.jsx("tbody",{children:c.rovers.map(w=>u.jsxs("tr",{className:"border-t border-neutral-700/70 text-slate-200",children:[u.jsx("td",{children:w.name}),u.jsx("td",{children:w.online?"yes":"no"}),u.jsx("td",{children:Y(w.sampleCount,0)}),u.jsx("td",{children:ls(w.coverageMs)}),u.jsx("td",{children:Y(w.gapCount,0)}),u.jsx("td",{children:$r(w.distanceMm)}),u.jsx("td",{children:Y(w.commandCount,0)}),u.jsx("td",{children:Y(w.driveCommandCount,0)}),u.jsx("td",{children:Y(w.rejectedCommandCount,0)}),u.jsx("td",{children:Y(w.overcurrentEpisodeCount,0)}),u.jsx("td",{children:Y(w.bumpCount,0)}),u.jsx("td",{children:Y(w.cliffCount,0)}),u.jsx("td",{children:Y(w.wheelDropCount,0)}),u.jsx("td",{children:Y(w.virtualWallCount,0)}),u.jsx("td",{children:Y(w.chargedMah)}),u.jsx("td",{children:Y(w.dischargedMah)}),u.jsxs("td",{children:[Y(w.averageVoltageMv,0)," / ",Y(w.minimumVoltageMv,0)," / ",Y(w.maximumVoltageMv,0)]}),u.jsxs("td",{children:[Y(w.averageTemperatureC)," / ",Y(w.minimumTemperatureC)," / ",Y(w.maximumTemperatureC)]}),u.jsx("td",{children:Y(w.latestChargeMah,0)}),u.jsx("td",{children:Y(w.reportedCapacityMah,0)}),u.jsx("td",{children:Tt(w.lastSampleAt)})]},w.roverId))})]})}),u.jsx(pt,{title:"Battery sessions",meta:c.batterySessions.length,actions:u.jsx("button",{type:"button",className:"button-dark px-1 py-0.25 text-xs",onClick:()=>ns("fleet-battery-sessions.csv",c.batterySessions),children:"Export CSV"}),bodyClassName:"overflow-x-auto p-0.5",children:u.jsxs("table",{className:"w-full whitespace-nowrap text-left text-xs",children:[u.jsx("thead",{className:"text-slate-400",children:u.jsxs("tr",{children:[u.jsx("th",{children:"Rover"}),u.jsx("th",{children:"Kind"}),u.jsx("th",{children:"Started"}),u.jsx("th",{children:"Ended"}),u.jsx("th",{children:"Duration"}),u.jsx("th",{children:"Start/end charge"}),u.jsx("th",{children:"Charged mAh"}),u.jsx("th",{children:"Discharged mAh"}),u.jsx("th",{children:"Voltage min/max"}),u.jsx("th",{children:"Temperature min/max"}),u.jsx("th",{children:"Samples"}),u.jsx("th",{children:"Gaps"}),u.jsx("th",{children:"Confidence"}),u.jsx("th",{children:"Qualification"})]})}),u.jsx("tbody",{children:c.batterySessions.map(w=>u.jsxs("tr",{className:"border-t border-neutral-700/70 text-slate-200",children:[u.jsx("td",{children:w.roverId}),u.jsx("td",{children:w.kind}),u.jsx("td",{children:Tt(w.startedAt)}),u.jsx("td",{children:Tt(w.endedAt)}),u.jsx("td",{children:ls((w.endedAt||c.generatedAt)-w.startedAt)}),u.jsxs("td",{children:[Y(w.startChargeMah,0)," / ",Y(w.endChargeMah,0)," mAh"]}),u.jsx("td",{children:Y(w.chargedMah)}),u.jsx("td",{children:Y(w.dischargedMah)}),u.jsxs("td",{children:[Y(w.minVoltageMv,0)," / ",Y(w.maxVoltageMv,0)," mV"]}),u.jsxs("td",{children:[Y(w.minTemperatureC)," / ",Y(w.maxTemperatureC)," °C"]}),u.jsx("td",{children:Y(w.sampleCount,0)}),u.jsx("td",{children:Y(w.gapCount,0)}),u.jsx("td",{children:w.confidence}),u.jsx("td",{children:w.qualificationReason})]},w.id))})]})}),u.jsx(pt,{title:"Battery health calculations",meta:c.batteryHealth.length,bodyClassName:"overflow-x-auto p-0.5",children:u.jsxs("table",{className:"w-full whitespace-nowrap text-left text-xs",children:[u.jsx("thead",{className:"text-slate-400",children:u.jsxs("tr",{children:[u.jsx("th",{children:"Rover"}),u.jsx("th",{children:"Battery identity"}),u.jsx("th",{children:"Qualified tests"}),u.jsx("th",{children:"Baseline tests"}),u.jsx("th",{children:"Learned baseline mAh"}),u.jsx("th",{children:"Latest usable mAh"}),u.jsx("th",{children:"Capacity retained"}),u.jsx("th",{children:"Discharged throughput mAh"}),u.jsx("th",{children:"Equivalent full cycles"}),u.jsx("th",{children:"Latest qualified test"}),u.jsx("th",{children:"Confidence"}),u.jsx("th",{children:"Confidence reason"})]})}),u.jsx("tbody",{children:c.batteryHealth.map(w=>u.jsxs("tr",{className:"border-t border-neutral-700/70 text-slate-200",children:[u.jsx("td",{children:w.roverId}),u.jsx("td",{children:w.batteryKey}),u.jsx("td",{children:Y(w.qualifiedTestCount,0)}),u.jsx("td",{children:Y(w.baselineTestCount,0)}),u.jsx("td",{children:Y(w.baselineMah)}),u.jsx("td",{children:Y(w.measuredUsableMah)}),u.jsx("td",{children:w.capacityRetentionPercent==null?"--":`${Y(w.capacityRetentionPercent)}%`}),u.jsx("td",{children:Y(w.dischargedThroughputMah)}),u.jsx("td",{children:Y(w.equivalentFullCycles,3)}),u.jsx("td",{children:Tt(w.latestQualifiedTestAt)}),u.jsx("td",{children:w.confidence}),u.jsx("td",{children:w.confidenceReason})]},w.roverId))})]})}),u.jsx(jc,{report:c,onSaved:S}),u.jsx(pt,{title:"Structured event history",meta:`${c.events.length} returned`,actions:u.jsx("button",{type:"button",className:"button-dark px-1 py-0.25 text-xs",onClick:()=>ns("fleet-events.csv",c.events),children:"Export CSV"}),bodyClassName:"space-y-0.5 p-0.5",children:c.events.map(w=>u.jsxs("details",{className:"surface px-1 py-0.5 text-xs",children:[u.jsxs("summary",{className:"cursor-pointer text-slate-200",children:[Tt(w.ts)," · ",w.severity," · ",w.source," · ",w.type,w.roverId?` · ${w.roverId}`:""]}),u.jsx("pre",{className:"mt-0.5 overflow-x-auto whitespace-pre-wrap text-[0.68rem] text-slate-300",children:JSON.stringify(w.payload,null,2)})]},w.id))}),u.jsx(pt,{title:"Daily report and Discord delivery history",meta:c.dailyReportHistory.length,bodyClassName:"overflow-x-auto p-0.5",children:u.jsxs("table",{className:"w-full whitespace-nowrap text-left text-xs",children:[u.jsx("thead",{className:"text-slate-400",children:u.jsxs("tr",{children:[u.jsx("th",{children:"Report day"}),u.jsx("th",{children:"Generated"}),u.jsx("th",{children:"Stored bytes"}),u.jsx("th",{children:"Discord delivered"}),u.jsx("th",{children:"Delivery error"})]})}),u.jsx("tbody",{children:c.dailyReportHistory.map(w=>u.jsxs("tr",{className:"border-t border-neutral-700/70 text-slate-200",children:[u.jsx("td",{children:w.reportDate}),u.jsx("td",{children:Tt(w.generatedAt)}),u.jsx("td",{children:Y(w.reportBytes,0)}),u.jsx("td",{children:Tt(w.discordDeliveredAt)}),u.jsx("td",{children:w.discordError||"--"})]},w.reportDate))})]})}),u.jsxs(pt,{title:"Collector and storage diagnostics",bodyClassName:"grid gap-0.5 p-0.5 md:grid-cols-2",children:[u.jsx("pre",{className:"surface overflow-x-auto whitespace-pre-wrap p-1 text-[0.68rem] text-slate-300",children:JSON.stringify(c.diagnostics.collector,null,2)}),u.jsx("pre",{className:"surface overflow-x-auto whitespace-pre-wrap p-1 text-[0.68rem] text-slate-300",children:JSON.stringify(c.diagnostics.storage,null,2)})]}),u.jsxs(pt,{title:"Methodology",bodyClassName:"space-y-0.5 p-1 text-xs text-slate-300",children:[u.jsx("p",{children:"Battery throughput integrates OI packet 23 signed battery current: delta mAh = current mA × elapsed milliseconds / 3,600,000. Positive current is charged throughput; negative current is discharged throughput."}),u.jsx("p",{children:"Intervals exceeding the configured maximum gap are excluded rather than interpreted as zero. Packet 25 charge movement is retained as independent evidence. Packet 26 is displayed as the rover-reported fixed reference and is not treated as measured battery health."}),u.jsx("p",{children:"A high-confidence capacity test requires a qualified full endpoint, continuous telemetry, configured minimum discharge depth, and a low endpoint. Partial or interrupted sessions remain visible with lower confidence and an explicit qualification reason."})]})]}):null]})}function Ec(){da({identitySurface:"passive"});const e=Kr(l=>pa(l,"fleetReports")),{value:n}=ma("page",{backgroundTheme:ga}),r=xa(n?.backgroundTheme);return u.jsxs("div",{className:`${r} min-h-screen text-slate-100`,children:[u.jsx(ya,{}),u.jsx("main",{className:`mx-auto flex min-h-screen w-full max-w-[120rem] flex-col ${wa} p-1`,children:e?u.jsx(kc,{}):u.jsxs(pt,{title:"Fleet reports unavailable",bodyClassName:"space-y-0.5 p-1 text-sm text-slate-300",children:[u.jsx("p",{children:"This server has not enabled fleet reporting."}),u.jsx(Yr,{className:"button-dark inline-block px-1 py-0.5 text-xs",to:"/",children:"Back to rover page"})]})})]})}export{Ec as default}; -//# sourceMappingURL=FleetReportsApp-9Z_DFtwj.js.map +//# sourceMappingURL=FleetReportsApp-Cl72SGXl.js.map diff --git a/server/public/assets/FleetReportsApp-9Z_DFtwj.js.map b/server/public/assets/FleetReportsApp-Cl72SGXl.js.map similarity index 99% rename from server/public/assets/FleetReportsApp-9Z_DFtwj.js.map rename to server/public/assets/FleetReportsApp-Cl72SGXl.js.map index bfad8133..a47b07de 100644 --- a/server/public/assets/FleetReportsApp-9Z_DFtwj.js.map +++ b/server/public/assets/FleetReportsApp-Cl72SGXl.js.map @@ -1 +1 @@ -{"version":3,"file":"FleetReportsApp-9Z_DFtwj.js","sources":["../../../webui/node_modules/papaparse/papaparse.min.js","../../../webui/node_modules/uplot/dist/uPlot.esm.js","../../../webui/src/reports/FleetTimeSeriesChart.jsx","../../../webui/src/reports/FleetReportsApp.jsx"],"sourcesContent":["/* @license\nPapa Parse\nv5.5.4\nhttps://github.com/mholt/PapaParse\nLicense: MIT\n*/\n((e,t)=>{\"function\"==typeof define&&define.amd?define([],t):\"object\"==typeof module&&\"undefined\"!=typeof exports?module.exports=t():e.Papa=t()})(this,function r(){var n=\"undefined\"!=typeof self?self:\"undefined\"!=typeof window?window:void 0!==n?n:{};var d,s=!n.document&&!!n.postMessage,a=n.IS_PAPA_WORKER||!1,o={},h=0,v={};function P(e){return 65279===e.charCodeAt(0)?e.slice(1):e}function u(e){this._handle=null,this._finished=!1,this._completed=!1,this._halted=!1,this._input=null,this._baseIndex=0,this._partialLine=\"\",this._rowCount=0,this._start=0,this._nextChunk=null,this.isFirstChunk=!0,this._completeResults={data:[],errors:[],meta:{}},function(e){var t=b(e);t.chunkSize=parseInt(t.chunkSize),e.step||e.chunk||(t.chunkSize=null);this._handle=new i(t),(this._handle.streamer=this)._config=t}.call(this,e),this.parseChunk=function(t,e){var i=parseInt(this._config.skipFirstNLines)||0;if(this.isFirstChunk&&0=this._config.preview);if(a)n.postMessage({results:r,workerId:v.WORKER_ID,finished:i});else if(q(this._config.chunk)&&!e){if(this._config.chunk(r,this._handle),this._handle.paused()||this._handle.aborted())return void(this._halted=!0);this._completeResults=r=void 0}return this._config.step||this._config.chunk||(this._completeResults.data=this._completeResults.data.concat(r.data),this._completeResults.errors=this._completeResults.errors.concat(r.errors),this._completeResults.meta=r.meta),this._completed||!i||!q(this._config.complete)||r&&r.meta.aborted||(this._config.complete(this._completeResults,this._input),this._completed=!0),i||r&&r.meta.paused||this._nextChunk(),r}this._halted=!0},this._sendError=function(e){q(this._config.error)?this._config.error(e):a&&this._config.error&&n.postMessage({workerId:v.WORKER_ID,error:e,finished:!1})}}function f(e){var r;(e=e||{}).chunkSize||(e.chunkSize=v.RemoteChunkSize),u.call(this,e),this._nextChunk=s?function(){this._readChunk(),this._chunkLoaded()}:function(){this._readChunk()},this.stream=function(e){this._input=e,this._nextChunk()},this._readChunk=function(){if(this._finished)this._chunkLoaded();else{if(r=new XMLHttpRequest,this._config.withCredentials&&(r.withCredentials=this._config.withCredentials),s||(r.onload=y(this._chunkLoaded,this),r.onerror=y(this._chunkError,this)),r.open(this._config.downloadRequestBody?\"POST\":\"GET\",this._input,!s),this._config.downloadRequestHeaders){var e,t=this._config.downloadRequestHeaders;for(e in t)r.setRequestHeader(e,t[e])}var i;this._config.chunkSize&&(i=this._start+this._config.chunkSize-1,r.setRequestHeader(\"Range\",\"bytes=\"+this._start+\"-\"+i));try{r.send(this._config.downloadRequestBody)}catch(e){this._chunkError(e.message)}s&&0===r.status&&this._chunkError()}},this._chunkLoaded=function(){4===r.readyState&&(r.status<200||400<=r.status?this._chunkError():(this._start+=this._config.chunkSize||r.responseText.length,this._finished=!this._config.chunkSize||this._start>=(e=>null!==(e=e.getResponseHeader(\"Content-Range\"))?parseInt(e.substring(e.lastIndexOf(\"/\")+1)):-1)(r),this.parseChunk(r.responseText)))},this._chunkError=function(e){e=r.statusText||e;this._sendError(new Error(e))}}function l(e){(e=e||{}).chunkSize||(e.chunkSize=v.LocalChunkSize),u.call(this,e);var i,r,n=\"undefined\"!=typeof FileReader;this.stream=function(e){this._input=e,r=e.slice||e.webkitSlice||e.mozSlice,n?((i=new FileReader).onload=y(this._chunkLoaded,this),i.onerror=y(this._chunkError,this)):i=new FileReaderSync,this._nextChunk()},this._nextChunk=function(){this._finished||this._config.preview&&!(this._rowCount=this._input.size,this.parseChunk(e.target.result)},this._chunkError=function(){this._sendError(i.error)}}function c(e){var i;u.call(this,e=e||{}),this.stream=function(e){return i=e,this._nextChunk()},this._nextChunk=function(){var e,t;if(!this._finished)return e=this._config.chunkSize,i=e?(t=i.substring(0,e),i.substring(e)):(t=i,\"\"),this._finished=!i,this.parseChunk(t)}}function p(e){u.call(this,e=e||{});var t=[],i=!0,r=!1;this.pause=function(){u.prototype.pause.apply(this,arguments),this._input.pause()},this.resume=function(){u.prototype.resume.apply(this,arguments),this._input.resume()},this.stream=function(e){this._input=e,this._input.on(\"data\",this._streamData),this._input.on(\"end\",this._streamEnd),this._input.on(\"error\",this._streamError)},this._checkIsFinished=function(){r&&1===t.length&&(this._finished=!0)},this._nextChunk=function(){this._checkIsFinished(),t.length?this.parseChunk(t.shift()):i=!0},this._streamData=y(function(e){try{t.push(\"string\"==typeof e?e:e.toString(this._config.encoding)),i&&(i=!1,this._checkIsFinished(),this.parseChunk(t.shift()))}catch(e){this._streamError(e)}},this),this._streamError=y(function(e){this._streamCleanUp(),this._sendError(e)},this),this._streamEnd=y(function(){this._streamCleanUp(),r=!0,this._streamData(\"\")},this),this._streamCleanUp=y(function(){this._input.removeListener(\"data\",this._streamData),this._input.removeListener(\"end\",this._streamEnd),this._input.removeListener(\"error\",this._streamError)},this)}function i(m){var n,s,a,t,o=Math.pow(2,53),h=-o,u=/^\\s*-?(\\d+\\.?|\\.\\d+|\\d+\\.\\d+)([eE][-+]?\\d+)?\\s*$/,d=/^((\\d{4}-[01]\\d-[0-3]\\dT[0-2]\\d:[0-5]\\d:[0-5]\\d\\.\\d+([+-][0-2]\\d:[0-5]\\d|Z))|(\\d{4}-[01]\\d-[0-3]\\dT[0-2]\\d:[0-5]\\d:[0-5]\\d([+-][0-2]\\d:[0-5]\\d|Z))|(\\d{4}-[01]\\d-[0-3]\\dT[0-2]\\d:[0-5]\\d([+-][0-2]\\d:[0-5]\\d|Z)))$/,i=this,r=0,f=0,l=!1,e=!1,c=[],p={data:[],errors:[],meta:{}};function y(e){return\"greedy\"===m.skipEmptyLines?\"\"===e.join(\"\").trim():1===e.length&&0===e[0].length}function g(){if(p&&a&&(k(\"Delimiter\",\"UndetectableDelimiter\",\"Unable to auto-detect delimiting character; defaulted to '\"+v.DefaultDelimiter+\"'\"),a=!1),m.skipEmptyLines&&(p.data=p.data.filter(function(e){return!y(e)})),_()){if(p)if(Array.isArray(p.data[0])){for(var e=0;_()&&e(e=>(m.dynamicTypingFunction&&void 0===m.dynamicTyping[e]&&(m.dynamicTyping[e]=m.dynamicTypingFunction(e)),!0===(m.dynamicTyping[e]||m.dynamicTyping)))(e)?\"true\"===t||\"TRUE\"===t||\"false\"!==t&&\"FALSE\"!==t&&((e=>{if(u.test(e)){e=parseFloat(e);if(h=c.length?\"__parsed_extra\":c[r]:n,s=m.transform?m.transform(s,n):s);\"__parsed_extra\"===n?(i[n]=i[n]||[],i[n].push(s)):i[n]=s}return m.header&&(r>c.length?k(\"FieldMismatch\",\"TooManyFields\",\"Too many fields: expected \"+c.length+\" fields but parsed \"+r,f+t):rm.preview?s.abort():(p.data=p.data[0],t(p,i))))}),this.parse=function(e,t,i){var r=m.quoteChar||'\"',r=(m.newline||(m.newline=this.guessLineEndings(e,r)),a=!1,m.delimiter?q(m.delimiter)&&(m.delimiter=m.delimiter(e),p.meta.delimiter=m.delimiter):((r=((e,t,i,r,n)=>{var s,a,o,h;n=n||[\",\",\"\\t\",\"|\",\";\",v.RECORD_SEP,v.UNIT_SEP];for(var u=0;u=i.length/2?\"\\r\\n\":\"\\r\"}}function U(e){return e.replace(/[.*+?^${}()|[\\]\\\\]/g,\"\\\\$&\")}function E(C){var S=(C=C||{}).delimiter,O=C.newline,x=C.comments,I=C.step,A=C.preview,T=C.fastMode,D=null,L=!1,F=null==C.quoteChar?'\"':C.quoteChar,j=F;if(void 0!==C.escapeChar&&(j=C.escapeChar),(\"string\"!=typeof S||-1=A)return w(!0);break}u.push({type:\"Quotes\",code:\"InvalidQuotes\",message:\"Trailing quote on quoted field is malformed\",row:h.length,index:z}),m++}}else if(x&&0===d.length&&i.substring(z,z+a)===x){if(-1===g)return w();z=g+s,g=i.indexOf(O,z),p=i.indexOf(S,z)}else if(-1!==p&&(p=A)return w(!0)}return E();function k(e){h.push(e),f=z}function v(e){var t=0;return t=-1!==e&&(e=i.substring(m+1,e))&&\"\"===e.trim()?e.length:t}function E(e){return r||(void 0===e&&(e=i.substring(z)),d.push(e),z=n,k(d),o&&R()),w()}function b(e){z=e,k(d),d=[],g=i.indexOf(O,z)}function w(e){if(C.header&&!t&&h.length&&!L){var s=h[0],a=Object.create(null),o=new Set(s);let n=!1;for(let r=0;r{var e;return!!v.WORKERS_SUPPORTED&&(e=(()=>{var e=n.URL||n.webkitURL||null,t=r.toString();return v.BLOB_URL||(v.BLOB_URL=e.createObjectURL(new Blob([\"var global = (function() { if (typeof self !== 'undefined') { return self; } if (typeof window !== 'undefined') { return window; } if (typeof global !== 'undefined') { return global; } return {}; })(); global.IS_PAPA_WORKER=true; \",\"(\",t,\")();\"],{type:\"text/javascript\"})))})(),(e=new n.Worker(e)).onmessage=g,e.id=h++,o[e.id]=e)})()).userStep=t.step,i.userChunk=t.chunk,i.userComplete=t.complete,i.userError=t.error,t.step=q(t.step),t.chunk=q(t.chunk),t.complete=q(t.complete),t.error=q(t.error),delete t.worker,i.postMessage({input:e,config:t,workerId:i.id})},v.unparse=function(e,t){var s=!1,_=!0,m=\",\",y=\"\\r\\n\",a='\"',o=a+a,i=!1,r=null,h=!1,u=((()=>{if(\"object\"==typeof t){if(\"string\"!=typeof t.delimiter||v.BAD_DELIMITERS.filter(function(e){return-1!==t.delimiter.indexOf(e)}).length||(m=t.delimiter),\"boolean\"!=typeof t.quotes&&\"function\"!=typeof t.quotes&&!Array.isArray(t.quotes)||(s=t.quotes),\"boolean\"!=typeof t.skipEmptyLines&&\"string\"!=typeof t.skipEmptyLines||(i=t.skipEmptyLines),\"string\"==typeof t.newline&&(y=t.newline),\"string\"==typeof t.quoteChar&&(a=t.quoteChar,o=a+a),\"boolean\"==typeof t.header&&(_=t.header),Array.isArray(t.columns)){if(0===t.columns.length)throw new Error(\"Option columns is empty\");r=t.columns}void 0!==t.escapeChar&&(o=t.escapeChar+a),t.escapeFormulae instanceof RegExp?h=t.escapeFormulae:\"boolean\"==typeof t.escapeFormulae&&t.escapeFormulae&&(h=/^[=+\\-@\\t\\r].*$/)}})(),new RegExp(U(a),\"g\"));\"string\"==typeof e&&(e=JSON.parse(e));if(Array.isArray(e)){if(!e.length||Array.isArray(e[0]))return n(null,e,i);if(\"object\"==typeof e[0])return n(r||Object.keys(e[0]),e,i)}else if(\"object\"==typeof e)return\"string\"==typeof e.data&&(e.data=JSON.parse(e.data)),Array.isArray(e.data)&&(e.fields||(e.fields=e.meta&&e.meta.fields||r),e.fields||(e.fields=Array.isArray(e.data[0])?e.fields:\"object\"==typeof e.data[0]?Object.keys(e.data[0]):[]),Array.isArray(e.data[0])||\"object\"==typeof e.data[0]||(e.data=[e.data])),n(e.fields||[],e.data||[],i);throw new Error(\"Unable to serialize unrecognized input\");function n(e,t,i){var r=\"\",n=(\"string\"==typeof e&&(e=JSON.parse(e)),\"string\"==typeof t&&(t=JSON.parse(t)),Array.isArray(e)&&0{for(var i=0;i xMax || yPos > yMax)\n\t\t\taddClass(el, OFF);\n\t\telse\n\t\t\tremClass(el, OFF);\n\t}\n}\n\nconst colorCache = new WeakMap();\n\nfunction elColor(el, background, borderColor) {\n\tlet newColor = background + borderColor;\n\tlet oldColor = colorCache.get(el);\n\n\tif (newColor != oldColor) {\n\t\tcolorCache.set(el, newColor);\n\t\tel.style.background = background;\n\t\tel.style.borderColor = borderColor;\n\t}\n}\n\nconst sizeCache = new WeakMap();\n\nfunction elSize(el, newWid, newHgt, centered) {\n\tlet newSize = newWid + \"\" + newHgt;\n\tlet oldSize = sizeCache.get(el);\n\n\tif (newSize != oldSize) {\n\t\tsizeCache.set(el, newSize);\n\t\tel.style.height = newHgt + \"px\";\n\t\tel.style.width = newWid + \"px\";\n\t\tel.style.marginLeft = centered ? -newWid/2 + \"px\" : 0;\n\t\tel.style.marginTop = centered ? -newHgt/2 + \"px\" : 0;\n\t}\n}\n\nconst evOpts = {passive: true};\nconst evOpts2 = {...evOpts, capture: true};\n\nfunction on(ev, el, cb, capt) {\n\tel.addEventListener(ev, cb, capt ? evOpts2 : evOpts);\n}\n\nfunction off(ev, el, cb, capt) {\n\tel.removeEventListener(ev, cb, evOpts);\n}\n\ndomEnv && setPxRatio();\n\n// binary search for index of closest value\nfunction closestIdx(num, arr, lo, hi) {\n\tlet mid;\n\tlo = lo || 0;\n\thi = hi || arr.length - 1;\n\tlet bitwise = hi <= 2147483647;\n\n\twhile (hi - lo > 1) {\n\t\tmid = bitwise ? (lo + hi) >> 1 : floor((lo + hi) / 2);\n\n\t\tif (arr[mid] < num)\n\t\t\tlo = mid;\n\t\telse\n\t\t\thi = mid;\n\t}\n\n\tif (num - arr[lo] <= arr[hi] - num)\n\t\treturn lo;\n\n\treturn hi;\n}\n\nfunction makeIndexOfs(predicate) {\n\t let indexOfs = (data, _i0, _i1) => {\n\t\tlet i0 = -1;\n\t\tlet i1 = -1;\n\n\t\tfor (let i = _i0; i <= _i1; i++) {\n\t\t\tif (predicate(data[i])) {\n\t\t\t\ti0 = i;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\tfor (let i = _i1; i >= _i0; i--) {\n\t\t\tif (predicate(data[i])) {\n\t\t\t\ti1 = i;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\treturn [i0, i1];\n\t };\n\n\t return indexOfs;\n}\n\nconst notNullish = v => v != null;\nconst isPositive = v => v != null && v > 0;\n\nconst nonNullIdxs = makeIndexOfs(notNullish);\nconst positiveIdxs = makeIndexOfs(isPositive);\n\nfunction getMinMax(data, _i0, _i1, sorted = 0, log = false) {\n//\tconsole.log(\"getMinMax()\");\n\n\tlet getEdgeIdxs = log ? positiveIdxs : nonNullIdxs;\n\tlet predicate = log ? isPositive : notNullish;\n\n\t[_i0, _i1] = getEdgeIdxs(data, _i0, _i1);\n\n\tlet _min = data[_i0];\n\tlet _max = data[_i0];\n\n\tif (_i0 > -1) {\n\t\tif (sorted == 1) {\n\t\t\t_min = data[_i0];\n\t\t\t_max = data[_i1];\n\t\t}\n\t\telse if (sorted == -1) {\n\t\t\t_min = data[_i1];\n\t\t\t_max = data[_i0];\n\t\t}\n\t\telse {\n\t\t\tfor (let i = _i0; i <= _i1; i++) {\n\t\t\t\tlet v = data[i];\n\n\t\t\t\tif (predicate(v)) {\n\t\t\t\t\tif (v < _min)\n\t\t\t\t\t\t_min = v;\n\t\t\t\t\telse if (v > _max)\n\t\t\t\t\t\t_max = v;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn [_min ?? inf, _max ?? -inf]; // todo: fix to return nulls\n}\n\nfunction rangeLog(min, max, base, fullMags) {\n\tlet minSign = sign(min);\n\tlet maxSign = sign(max);\n\n\tif (min == max) {\n\t\tif (minSign == -1) {\n\t\t\tmin *= base;\n\t\t\tmax /= base;\n\t\t}\n\t\telse {\n\t\t\tmin /= base;\n\t\t\tmax *= base;\n\t\t}\n\t}\n\n\tlet logFn = base == 10 ? log10 : log2;\n\n\tlet growMinAbs = minSign == 1 ? floor : ceil;\n\tlet growMaxAbs = maxSign == 1 ? ceil : floor;\n\n\tlet minExp = growMinAbs(logFn(abs(min)));\n\tlet maxExp = growMaxAbs(logFn(abs(max)));\n\n\tlet minIncr = pow(base, minExp);\n\tlet maxIncr = pow(base, maxExp);\n\n\t// fix values like Math.pow(10, -5) === 0.000009999999999999999\n\tif (base == 10) {\n\t\tif (minExp < 0)\n\t\t\tminIncr = roundDec(minIncr, -minExp);\n\t\tif (maxExp < 0)\n\t\t\tmaxIncr = roundDec(maxIncr, -maxExp);\n\t}\n\n\tif (fullMags || base == 2) {\n\t\tmin = minIncr * minSign;\n\t\tmax = maxIncr * maxSign;\n\t}\n\telse {\n\t\tmin = incrRoundDn(min, minIncr);\n\t\tmax = incrRoundUp(max, maxIncr);\n\t}\n\n\treturn [min, max];\n}\n\nfunction rangeAsinh(min, max, base, fullMags) {\n\tlet minMax = rangeLog(min, max, base, fullMags);\n\n\tif (min == 0)\n\t\tminMax[0] = 0;\n\n\tif (max == 0)\n\t\tminMax[1] = 0;\n\n\treturn minMax;\n}\n\nconst rangePad = 0.1;\n\nconst autoRangePart = {\n\tmode: 3,\n\tpad: rangePad,\n};\n\nconst _eqRangePart = {\n\tpad: 0,\n\tsoft: null,\n\tmode: 0,\n};\n\nconst _eqRange = {\n\tmin: _eqRangePart,\n\tmax: _eqRangePart,\n};\n\n// this ensures that non-temporal/numeric y-axes get multiple-snapped padding added above/below\n// TODO: also account for incrs when snapping to ensure top of axis gets a tick & value\nfunction rangeNum(_min, _max, mult, extra) {\n\tif (isObj(mult))\n\t\treturn _rangeNum(_min, _max, mult);\n\n\t_eqRangePart.pad = mult;\n\t_eqRangePart.soft = extra ? 0 : null;\n\t_eqRangePart.mode = extra ? 3 : 0;\n\n\treturn _rangeNum(_min, _max, _eqRange);\n}\n\n// nullish coalesce\nfunction ifNull(lh, rh) {\n\treturn lh == null ? rh : lh;\n}\n\n// checks if given index range in an array contains a non-null value\n// aka a range-bounded Array.some()\nfunction hasData(data, idx0, idx1) {\n\tidx0 = ifNull(idx0, 0);\n\tidx1 = ifNull(idx1, data.length - 1);\n\n\twhile (idx0 <= idx1) {\n\t\tif (data[idx0] != null)\n\t\t\treturn true;\n\t\tidx0++;\n\t}\n\n\treturn false;\n}\n\nfunction _rangeNum(_min, _max, cfg) {\n\tlet cmin = cfg.min;\n\tlet cmax = cfg.max;\n\n\tlet padMin = ifNull(cmin.pad, 0);\n\tlet padMax = ifNull(cmax.pad, 0);\n\n\tlet hardMin = ifNull(cmin.hard, -inf);\n\tlet hardMax = ifNull(cmax.hard, inf);\n\n\tlet softMin = ifNull(cmin.soft, inf);\n\tlet softMax = ifNull(cmax.soft, -inf);\n\n\tlet softMinMode = ifNull(cmin.mode, 0);\n\tlet softMaxMode = ifNull(cmax.mode, 0);\n\n\tlet delta = _max - _min;\n\tlet deltaMag = log10(delta);\n\n\tlet scalarMax = max(abs(_min), abs(_max));\n\tlet scalarMag = log10(scalarMax);\n\n\tlet scalarMagDelta = abs(scalarMag - deltaMag);\n\n\t// this handles situations like 89.7, 89.69999999999999\n\t// by assuming 0.001x deltas are precision errors\n//\tif (delta > 0 && delta < abs(_max) / 1e3)\n//\t\tdelta = 0;\n\n\t// treat data as flat if delta is less than 1e-24\n\t// or range is 11+ orders of magnitude below raw values, e.g. 99999999.99999996 - 100000000.00000004\n\tif (delta < 1e-24 || scalarMagDelta > 10) {\n\t\tdelta = 0;\n\n\t\t// if soft mode is 2 and all vals are flat at 0, avoid the 0.1 * 1e3 fallback\n\t\t// this prevents 0,0,0 from ranging to -100,100 when softMin/softMax are -1,1\n\t\tif (_min == 0 || _max == 0) {\n\t\t\tdelta = 1e-24;\n\n\t\t\tif (softMinMode == 2 && softMin != inf)\n\t\t\t\tpadMin = 0;\n\n\t\t\tif (softMaxMode == 2 && softMax != -inf)\n\t\t\t\tpadMax = 0;\n\t\t}\n\t}\n\n\tlet nonZeroDelta = delta || scalarMax || 1e3;\n\tlet mag = log10(nonZeroDelta);\n\tlet base = pow(10, floor(mag));\n\n\tlet _padMin = nonZeroDelta * (delta == 0 ? (_min == 0 ? .1 : 1) : padMin);\n\tlet _newMin = roundDec(incrRoundDn(_min - _padMin, base/10), 24);\n\tlet _softMin = _min >= softMin && (softMinMode == 1 || softMinMode == 3 && _newMin <= softMin || softMinMode == 2 && _newMin >= softMin) ? softMin : inf;\n\tlet minLim = max(hardMin, _newMin < _softMin && _min >= _softMin ? _softMin : min(_softMin, _newMin));\n\n\tlet _padMax = nonZeroDelta * (delta == 0 ? (_max == 0 ? .1 : 1) : padMax);\n\tlet _newMax = roundDec(incrRoundUp(_max + _padMax, base/10), 24);\n\tlet _softMax = _max <= softMax && (softMaxMode == 1 || softMaxMode == 3 && _newMax >= softMax || softMaxMode == 2 && _newMax <= softMax) ? softMax : -inf;\n\tlet maxLim = min(hardMax, _newMax > _softMax && _max <= _softMax ? _softMax : max(_softMax, _newMax));\n\n\tif (minLim == maxLim && minLim == 0)\n\t\tmaxLim = 100;\n\n\treturn [minLim, maxLim];\n}\n\n// alternative: https://stackoverflow.com/a/2254896\nconst numFormatter = new Intl.NumberFormat(domEnv ? nav.language : 'en-US');\nconst fmtNum = val => numFormatter.format(val);\n\nconst M = Math;\n\nconst PI = M.PI;\nconst abs = M.abs;\nconst floor = M.floor;\nconst round = M.round;\nconst ceil = M.ceil;\nconst min = M.min;\nconst max = M.max;\nconst pow = M.pow;\nconst sign = M.sign;\nconst log10 = M.log10;\nconst log2 = M.log2;\n// TODO: seems like this needs to match asinh impl if the passed v is tweaked?\nconst sinh = (v, linthresh = 1) => M.sinh(v) * linthresh;\nconst asinh = (v, linthresh = 1) => M.asinh(v / linthresh);\n\nconst inf = Infinity;\n\nfunction numIntDigits(x) {\n\treturn (log10((x ^ (x >> 31)) - (x >> 31)) | 0) + 1;\n}\n\nfunction clamp(num, _min, _max) {\n\treturn min(max(num, _min), _max);\n}\n\nfunction isFn(v) {\n\treturn typeof v == \"function\";\n}\n\nfunction fnOrSelf(v) {\n\treturn isFn(v) ? v : () => v;\n}\n\nconst noop = () => {};\n\n// note: these identity fns may get deoptimized if reused for different arg types\n// a TS version would enforce they stay monotyped and require making variants\nconst retArg0 = _0 => _0;\n\nconst retArg1 = (_0, _1) => _1;\n\nconst retNull = _ => null;\n\nconst retTrue = _ => true;\n\nconst retEq = (a, b) => a == b;\n\nconst regex6 = /\\.\\d*?(?=9{6,}|0{6,})/gm;\n\n// e.g. 17999.204999999998 -> 17999.205\nconst fixFloat = val => {\n\tif (isInt(val) || fixedDec.has(val))\n\t\treturn val;\n\n\tconst str = `${val}`;\n\n\tconst match = str.match(regex6);\n\n\tif (match == null)\n\t\treturn val;\n\n\tlet len = match[0].length - 1;\n\n\t// e.g. 1.0000000000000001e-24\n\tif (str.indexOf('e-') != -1) {\n\t\tlet [num, exp] = str.split('e');\n\t\treturn +`${fixFloat(num)}e${exp}`;\n\t}\n\n\treturn roundDec(val, len);\n};\n\nfunction incrRound(num, incr) {\n\treturn fixFloat(roundDec(fixFloat(num/incr))*incr);\n}\n\nfunction incrRoundUp(num, incr) {\n\treturn fixFloat(ceil(fixFloat(num/incr))*incr);\n}\n\nfunction incrRoundDn(num, incr) {\n\treturn fixFloat(floor(fixFloat(num/incr))*incr);\n}\n\n// https://stackoverflow.com/a/48764436\n// rounds half away from zero\nfunction roundDec(val, dec = 0) {\n\tif (isInt(val))\n\t\treturn val;\n//\telse if (dec == 0)\n//\t\treturn round(val);\n\n\tlet p = 10 ** dec;\n\tlet n = (val * p) * (1 + Number.EPSILON);\n\treturn round(n) / p;\n}\n\nconst fixedDec = new Map();\n\nfunction guessDec(num) {\n\treturn ((\"\"+num).split(\".\")[1] || \"\").length;\n}\n\nfunction genIncrs(base, minExp, maxExp, mults) {\n\tlet incrs = [];\n\n\tlet multDec = mults.map(guessDec);\n\n\tfor (let exp = minExp; exp < maxExp; exp++) {\n\t\tlet expa = abs(exp);\n\t\tlet mag = roundDec(pow(base, exp), expa);\n\n\t\tfor (let i = 0; i < mults.length; i++) {\n\t\t\tlet _incr = base == 10 ? +`${mults[i]}e${exp}` : mults[i] * mag;\n\t\t\tlet dec = (exp >= 0 ? 0 : expa) + (exp >= multDec[i] ? 0 : multDec[i]);\n\t\t\tlet incr = base == 10 ? _incr : roundDec(_incr, dec);\n\t\t\tincrs.push(incr);\n\t\t\tfixedDec.set(incr, dec);\n\t\t}\n\t}\n\n\treturn incrs;\n}\n\n//export const assign = Object.assign;\n\nconst EMPTY_OBJ = {};\nconst EMPTY_ARR = [];\n\nconst nullNullTuple = [null, null];\n\nconst isArr = Array.isArray;\nconst isInt = Number.isInteger;\nconst isUndef = v => v === void 0;\n\nfunction isStr(v) {\n\treturn typeof v == 'string';\n}\n\nfunction isObj(v) {\n\tlet is = false;\n\n\tif (v != null) {\n\t\tlet c = v.constructor;\n\t\tis = c == null || c == Object;\n\t}\n\n\treturn is;\n}\n\nfunction fastIsObj(v) {\n\treturn v != null && typeof v == 'object';\n}\n\nconst TypedArray = Object.getPrototypeOf(Uint8Array);\n\nconst __proto__ = \"__proto__\";\n\nfunction copy(o, _isObj = isObj) {\n\tlet out;\n\n\tif (isArr(o)) {\n\t\tlet val = o.find(v => v != null);\n\n\t\tif (isArr(val) || _isObj(val)) {\n\t\t\tout = Array(o.length);\n\t\t\tfor (let i = 0; i < o.length; i++)\n\t\t\t\tout[i] = copy(o[i], _isObj);\n\t\t}\n\t\telse\n\t\t\tout = o.slice();\n\t}\n\telse if (o instanceof TypedArray) // also (ArrayBuffer.isView(o) && !(o instanceof DataView))\n\t\tout = o.slice();\n\telse if (_isObj(o)) {\n\t\tout = {};\n\t\tfor (let k in o) {\n\t\t\tif (k != __proto__)\n\t\t\t\tout[k] = copy(o[k], _isObj);\n\t\t}\n\t}\n\telse\n\t\tout = o;\n\n\treturn out;\n}\n\nfunction assign(targ) {\n\tlet args = arguments;\n\n\tfor (let i = 1; i < args.length; i++) {\n\t\tlet src = args[i];\n\n\t\tfor (let key in src) {\n\t\t\tif (key != __proto__) {\n\t\t\t\tif (isObj(targ[key]))\n\t\t\t\t\tassign(targ[key], copy(src[key]));\n\t\t\t\telse\n\t\t\t\t\ttarg[key] = copy(src[key]);\n\t\t\t}\n\t\t}\n\t}\n\n\treturn targ;\n}\n\n// nullModes\nconst NULL_REMOVE = 0; // nulls are converted to undefined (e.g. for spanGaps: true)\nconst NULL_RETAIN = 1; // nulls are retained, with alignment artifacts set to undefined (default)\nconst NULL_EXPAND = 2; // nulls are expanded to include any adjacent alignment artifacts\n\n// sets undefined values to nulls when adjacent to existing nulls (minesweeper)\nfunction nullExpand(yVals, nullIdxs, alignedLen) {\n\tfor (let i = 0, xi, lastNullIdx = -1; i < nullIdxs.length; i++) {\n\t\tlet nullIdx = nullIdxs[i];\n\n\t\tif (nullIdx > lastNullIdx) {\n\t\t\txi = nullIdx - 1;\n\t\t\twhile (xi >= 0 && yVals[xi] == null)\n\t\t\t\tyVals[xi--] = null;\n\n\t\t\txi = nullIdx + 1;\n\t\t\twhile (xi < alignedLen && yVals[xi] == null)\n\t\t\t\tyVals[lastNullIdx = xi++] = null;\n\t\t}\n\t}\n}\n\n// nullModes is a tables-matched array indicating how to treat nulls in each series\n// output is sorted ASC on the joined field (table[0]) and duplicate join values are collapsed\nfunction join(tables, nullModes) {\n\tif (allHeadersSame(tables)) {\n\t//\tconsole.log('cheap join!');\n\n\t\tlet table = tables[0].slice();\n\n\t\tfor (let i = 1; i < tables.length; i++)\n\t\t\ttable.push(...tables[i].slice(1));\n\n\t\tif (!isAsc(table[0]))\n\t\t\ttable = sortCols(table);\n\n\t\treturn table;\n\t}\n\n\tlet xVals = new Set();\n\n\tfor (let ti = 0; ti < tables.length; ti++) {\n\t\tlet t = tables[ti];\n\t\tlet xs = t[0];\n\t\tlet len = xs.length;\n\n\t\tfor (let i = 0; i < len; i++)\n\t\t\txVals.add(xs[i]);\n\t}\n\n\tlet data = [Array.from(xVals).sort((a, b) => a - b)];\n\n\tlet alignedLen = data[0].length;\n\n\tlet xIdxs = new Map();\n\n\tfor (let i = 0; i < alignedLen; i++)\n\t\txIdxs.set(data[0][i], i);\n\n\tfor (let ti = 0; ti < tables.length; ti++) {\n\t\tlet t = tables[ti];\n\t\tlet xs = t[0];\n\n\t\tfor (let si = 1; si < t.length; si++) {\n\t\t\tlet ys = t[si];\n\n\t\t\tlet yVals = Array(alignedLen).fill(undefined);\n\n\t\t\tlet nullMode = nullModes ? nullModes[ti][si] : NULL_RETAIN;\n\n\t\t\tlet nullIdxs = [];\n\n\t\t\tfor (let i = 0; i < ys.length; i++) {\n\t\t\t\tlet yVal = ys[i];\n\t\t\t\tlet alignedIdx = xIdxs.get(xs[i]);\n\n\t\t\t\tif (yVal === null) {\n\t\t\t\t\tif (nullMode != NULL_REMOVE) {\n\t\t\t\t\t\tyVals[alignedIdx] = yVal;\n\n\t\t\t\t\t\tif (nullMode == NULL_EXPAND)\n\t\t\t\t\t\t\tnullIdxs.push(alignedIdx);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t\tyVals[alignedIdx] = yVal;\n\t\t\t}\n\n\t\t\tnullExpand(yVals, nullIdxs, alignedLen);\n\n\t\t\tdata.push(yVals);\n\t\t}\n\t}\n\n\treturn data;\n}\n\nconst microTask = typeof queueMicrotask == \"undefined\" ? fn => Promise.resolve().then(fn) : queueMicrotask;\n\n// TODO: https://github.com/dy/sort-ids (~2x faster for 1e5+ arrays)\nfunction sortCols(table) {\n\tlet head = table[0];\n\tlet rlen = head.length;\n\n\tlet idxs = Array(rlen);\n\tfor (let i = 0; i < idxs.length; i++)\n\t\tidxs[i] = i;\n\n\tidxs.sort((i0, i1) => head[i0] - head[i1]);\n\n\tlet table2 = [];\n\tfor (let i = 0; i < table.length; i++) {\n\t\tlet row = table[i];\n\t\tlet row2 = Array(rlen);\n\n\t\tfor (let j = 0; j < rlen; j++)\n\t\t\trow2[j] = row[idxs[j]];\n\n\t\ttable2.push(row2);\n\t}\n\n\treturn table2;\n}\n\n// test if we can do cheap join (all join fields same)\nfunction allHeadersSame(tables) {\n\tlet vals0 = tables[0][0];\n\tlet len0 = vals0.length;\n\n\tfor (let i = 1; i < tables.length; i++) {\n\t\tlet vals1 = tables[i][0];\n\n\t\tif (vals1.length != len0)\n\t\t\treturn false;\n\n\t\tif (vals1 != vals0) {\n\t\t\tfor (let j = 0; j < len0; j++) {\n\t\t\t\tif (vals1[j] != vals0[j])\n\t\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\t}\n\n\treturn true;\n}\n\nfunction isAsc(vals, samples = 100) {\n\tconst len = vals.length;\n\n\t// empty or single value\n\tif (len <= 1)\n\t\treturn true;\n\n\t// skip leading & trailing nullish\n\tlet firstIdx = 0;\n\tlet lastIdx = len - 1;\n\n\twhile (firstIdx <= lastIdx && vals[firstIdx] == null)\n\t\tfirstIdx++;\n\n\twhile (lastIdx >= firstIdx && vals[lastIdx] == null)\n\t\tlastIdx--;\n\n\t// all nullish or one value surrounded by nullish\n\tif (lastIdx <= firstIdx)\n\t\treturn true;\n\n\tconst stride = max(1, floor((lastIdx - firstIdx + 1) / samples));\n\n\tfor (let prevVal = vals[firstIdx], i = firstIdx + stride; i <= lastIdx; i += stride) {\n\t\tconst v = vals[i];\n\n\t\tif (v != null) {\n\t\t\tif (v <= prevVal)\n\t\t\t\treturn false;\n\n\t\t\tprevVal = v;\n\t\t}\n\t}\n\n\treturn true;\n}\n\nconst months = [\n\t\"January\",\n\t\"February\",\n\t\"March\",\n\t\"April\",\n\t\"May\",\n\t\"June\",\n\t\"July\",\n\t\"August\",\n\t\"September\",\n\t\"October\",\n\t\"November\",\n\t\"December\",\n];\n\nconst days = [\n\t\"Sunday\",\n\t\"Monday\",\n\t\"Tuesday\",\n\t\"Wednesday\",\n\t\"Thursday\",\n\t\"Friday\",\n\t\"Saturday\",\n];\n\nfunction slice3(str) {\n\treturn str.slice(0, 3);\n}\n\nconst days3 = days.map(slice3);\n\nconst months3 = months.map(slice3);\n\nconst engNames = {\n\tMMMM: months,\n\tMMM: months3,\n\tWWWW: days,\n\tWWW: days3,\n};\n\nfunction zeroPad2(int) {\n\treturn (int < 10 ? '0' : '') + int;\n}\n\nfunction zeroPad3(int) {\n\treturn (int < 10 ? '00' : int < 100 ? '0' : '') + int;\n}\n\n/*\nfunction suffix(int) {\n\tlet mod10 = int % 10;\n\n\treturn int + (\n\t\tmod10 == 1 && int != 11 ? \"st\" :\n\t\tmod10 == 2 && int != 12 ? \"nd\" :\n\t\tmod10 == 3 && int != 13 ? \"rd\" : \"th\"\n\t);\n}\n*/\n\nconst subs = {\n\t// 2019\n\tYYYY:\td => d.getFullYear(),\n\t// 19\n\tYY:\t\td => (d.getFullYear()+'').slice(2),\n\t// July\n\tMMMM:\t(d, names) => names.MMMM[d.getMonth()],\n\t// Jul\n\tMMM:\t(d, names) => names.MMM[d.getMonth()],\n\t// 07\n\tMM:\t\td => zeroPad2(d.getMonth()+1),\n\t// 7\n\tM:\t\td => d.getMonth()+1,\n\t// 09\n\tDD:\t\td => zeroPad2(d.getDate()),\n\t// 9\n\tD:\t\td => d.getDate(),\n\t// Monday\n\tWWWW:\t(d, names) => names.WWWW[d.getDay()],\n\t// Mon\n\tWWW:\t(d, names) => names.WWW[d.getDay()],\n\t// 03\n\tHH:\t\td => zeroPad2(d.getHours()),\n\t// 3\n\tH:\t\td => d.getHours(),\n\t// 9 (12hr, unpadded)\n\th:\t\td => {let h = d.getHours(); return h == 0 ? 12 : h > 12 ? h - 12 : h;},\n\t// AM\n\tAA:\t\td => d.getHours() >= 12 ? 'PM' : 'AM',\n\t// am\n\taa:\t\td => d.getHours() >= 12 ? 'pm' : 'am',\n\t// a\n\ta:\t\td => d.getHours() >= 12 ? 'p' : 'a',\n\t// 09\n\tmm:\t\td => zeroPad2(d.getMinutes()),\n\t// 9\n\tm:\t\td => d.getMinutes(),\n\t// 09\n\tss:\t\td => zeroPad2(d.getSeconds()),\n\t// 9\n\ts:\t\td => d.getSeconds(),\n\t// 374\n\tfff:\td => zeroPad3(d.getMilliseconds()),\n};\n\nfunction fmtDate(tpl, names) {\n\tnames = names || engNames;\n\tlet parts = [];\n\n\tlet R = /\\{([a-z]+)\\}|[^{]+/gi, m;\n\n\twhile (m = R.exec(tpl))\n\t\tparts.push(m[0][0] == '{' ? subs[m[1]] : m[0]);\n\n\treturn d => {\n\t\tlet out = '';\n\n\t\tfor (let i = 0; i < parts.length; i++)\n\t\t\tout += typeof parts[i] == \"string\" ? parts[i] : parts[i](d, names);\n\n\t\treturn out;\n\t}\n}\n\nconst localTz = new Intl.DateTimeFormat().resolvedOptions().timeZone;\n\n// https://stackoverflow.com/questions/15141762/how-to-initialize-a-javascript-date-to-a-particular-time-zone/53652131#53652131\nfunction tzDate(date, tz) {\n\tlet date2;\n\n\t// perf optimization\n\tif (tz == 'UTC' || tz == 'Etc/UTC')\n\t\tdate2 = new Date(+date + date.getTimezoneOffset() * 6e4);\n\telse if (tz == localTz)\n\t\tdate2 = date;\n\telse {\n\t\tdate2 = new Date(date.toLocaleString('en-US', {timeZone: tz}));\n\t\tdate2.setMilliseconds(date.getMilliseconds());\n\t}\n\n\treturn date2;\n}\n\n//export const series = [];\n\n// default formatters:\n\nconst onlyWhole = v => v % 1 == 0;\n\nconst allMults = [1,2,2.5,5];\n\n// ...0.01, 0.02, 0.025, 0.05, 0.1, 0.2, 0.25, 0.5\nconst decIncrs = genIncrs(10, -32, 0, allMults);\n\n// 1, 2, 2.5, 5, 10, 20, 25, 50...\nconst oneIncrs = genIncrs(10, 0, 32, allMults);\n\n// 1, 2, 5, 10, 20, 25, 50...\nconst wholeIncrs = oneIncrs.filter(onlyWhole);\n\nconst numIncrs = decIncrs.concat(oneIncrs);\n\nconst NL = \"\\n\";\n\nconst yyyy = \"{YYYY}\";\nconst NLyyyy = NL + yyyy;\nconst md = \"{M}/{D}\";\nconst NLmd = NL + md;\nconst NLmdyy = NLmd + \"/{YY}\";\n\nconst aa = \"{aa}\";\nconst hmm = \"{h}:{mm}\";\nconst hmmaa = hmm + aa;\nconst NLhmmaa = NL + hmmaa;\nconst ss = \":{ss}\";\n\nconst _ = null;\n\nfunction genTimeStuffs(ms) {\n\tlet\ts = ms * 1e3,\n\t\tm = s * 60,\n\t\th = m * 60,\n\t\td = h * 24,\n\t\tmo = d * 30,\n\t\ty = d * 365;\n\n\t// min of 1e-3 prevents setting a temporal x ticks too small since Date objects cannot advance ticks smaller than 1ms\n\tlet subSecIncrs = ms == 1 ? genIncrs(10, 0, 3, allMults).filter(onlyWhole) : genIncrs(10, -3, 0, allMults);\n\n\tlet timeIncrs = subSecIncrs.concat([\n\t\t// minute divisors (# of secs)\n\t\ts,\n\t\ts * 5,\n\t\ts * 10,\n\t\ts * 15,\n\t\ts * 30,\n\t\t// hour divisors (# of mins)\n\t\tm,\n\t\tm * 5,\n\t\tm * 10,\n\t\tm * 15,\n\t\tm * 30,\n\t\t// day divisors (# of hrs)\n\t\th,\n\t\th * 2,\n\t\th * 3,\n\t\th * 4,\n\t\th * 6,\n\t\th * 8,\n\t\th * 12,\n\t\t// month divisors TODO: need more?\n\t\td,\n\t\td * 2,\n\t\td * 3,\n\t\td * 4,\n\t\td * 5,\n\t\td * 6,\n\t\td * 7,\n\t\td * 8,\n\t\td * 9,\n\t\td * 10,\n\t\td * 15,\n\t\t// year divisors (# months, approx)\n\t\tmo,\n\t\tmo * 2,\n\t\tmo * 3,\n\t\tmo * 4,\n\t\tmo * 6,\n\t\t// century divisors\n\t\ty,\n\t\ty * 2,\n\t\ty * 5,\n\t\ty * 10,\n\t\ty * 25,\n\t\ty * 50,\n\t\ty * 100,\n\t]);\n\n\t// [0]: minimum num secs in the tick incr\n\t// [1]: default tick format\n\t// [2-7]: rollover tick formats\n\t// [8]: mode: 0: replace [1] -> [2-7], 1: concat [1] + [2-7]\n\tconst _timeAxisStamps = [\n\t// tick incr default year month day hour min sec mode\n\t\t[y, yyyy, _, _, _, _, _, _, 1],\n\t\t[d * 28, \"{MMM}\", NLyyyy, _, _, _, _, _, 1],\n\t\t[d, md, NLyyyy, _, _, _, _, _, 1],\n\t\t[h, \"{h}\" + aa, NLmdyy, _, NLmd, _, _, _, 1],\n\t\t[m, hmmaa, NLmdyy, _, NLmd, _, _, _, 1],\n\t\t[s, ss, NLmdyy + \" \" + hmmaa, _, NLmd + \" \" + hmmaa, _, NLhmmaa, _, 1],\n\t\t[ms, ss + \".{fff}\", NLmdyy + \" \" + hmmaa, _, NLmd + \" \" + hmmaa, _, NLhmmaa, _, 1],\n\t];\n\n\t// the ensures that axis ticks, values & grid are aligned to logical temporal breakpoints and not an arbitrary timestamp\n\t// https://www.timeanddate.com/time/dst/\n\t// https://www.timeanddate.com/time/dst/2019.html\n\t// https://www.epochconverter.com/timezones\n\tfunction timeAxisSplits(tzDate) {\n\t\treturn (self, axisIdx, scaleMin, scaleMax, foundIncr, foundSpace) => {\n\t\t\tlet splits = [];\n\t\t\tlet isYr = foundIncr >= y;\n\t\t\tlet isMo = foundIncr >= mo && foundIncr < y;\n\n\t\t\t// get the timezone-adjusted date\n\t\t\tlet minDate = tzDate(scaleMin);\n\t\t\tlet minDateTs = roundDec(minDate * ms, 3);\n\n\t\t\t// get ts of 12am (this lands us at or before the original scaleMin)\n\t\t\tlet minMin = mkDate(minDate.getFullYear(), isYr ? 0 : minDate.getMonth(), isMo || isYr ? 1 : minDate.getDate());\n\t\t\tlet minMinTs = roundDec(minMin * ms, 3);\n\n\t\t\tif (isMo || isYr) {\n\t\t\t\tlet moIncr = isMo ? foundIncr / mo : 0;\n\t\t\t\tlet yrIncr = isYr ? foundIncr / y : 0;\n\t\t\t//\tlet tzOffset = scaleMin - minDateTs;\t\t// needed?\n\t\t\t\tlet split = minDateTs == minMinTs ? minDateTs : roundDec(mkDate(minMin.getFullYear() + yrIncr, minMin.getMonth() + moIncr, 1) * ms, 3);\n\t\t\t\tlet splitDate = new Date(round(split / ms));\n\t\t\t\tlet baseYear = splitDate.getFullYear();\n\t\t\t\tlet baseMonth = splitDate.getMonth();\n\n\t\t\t\tfor (let i = 0; split <= scaleMax; i++) {\n\t\t\t\t\tlet next = mkDate(baseYear + yrIncr * i, baseMonth + moIncr * i, 1);\n\t\t\t\t\tlet offs = next - tzDate(roundDec(next * ms, 3));\n\n\t\t\t\t\tsplit = roundDec((+next + offs) * ms, 3);\n\n\t\t\t\t\tif (split <= scaleMax)\n\t\t\t\t\t\tsplits.push(split);\n\t\t\t\t}\n\t\t\t}\n\t\t\telse {\n\t\t\t\tlet incr0 = foundIncr >= d ? d : foundIncr;\n\t\t\t\tlet tzOffset = floor(scaleMin) - floor(minDateTs);\n\t\t\t\tlet split = minMinTs + tzOffset + incrRoundUp(minDateTs - minMinTs, incr0);\n\t\t\t\tsplits.push(split);\n\n\t\t\t\tlet date0 = tzDate(split);\n\n\t\t\t\tlet prevHour = date0.getHours() + (date0.getMinutes() / m) + (date0.getSeconds() / h);\n\t\t\t\tlet incrHours = foundIncr / h;\n\n\t\t\t\tlet minSpace = self.axes[axisIdx]._space;\n\t\t\t\tlet pctSpace = foundSpace / minSpace;\n\n\t\t\t\twhile (1) {\n\t\t\t\t\tsplit = roundDec(split + foundIncr, ms == 1 ? 0 : 3);\n\n\t\t\t\t\tif (split > scaleMax)\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tif (incrHours > 1) {\n\t\t\t\t\t\tlet expectedHour = floor(roundDec(prevHour + incrHours, 6)) % 24;\n\t\t\t\t\t\tlet splitDate = tzDate(split);\n\t\t\t\t\t\tlet actualHour = splitDate.getHours();\n\n\t\t\t\t\t\tlet dstShift = actualHour - expectedHour;\n\n\t\t\t\t\t\tif (dstShift > 1)\n\t\t\t\t\t\t\tdstShift = -1;\n\n\t\t\t\t\t\tsplit -= dstShift * h;\n\n\t\t\t\t\t\tprevHour = (prevHour + incrHours) % 24;\n\n\t\t\t\t\t\t// add a tick only if it's further than 70% of the min allowed label spacing\n\t\t\t\t\t\tlet prevSplit = splits[splits.length - 1];\n\t\t\t\t\t\tlet pctIncr = roundDec((split - prevSplit) / foundIncr, 3);\n\n\t\t\t\t\t\tif (pctIncr * pctSpace >= .7)\n\t\t\t\t\t\t\tsplits.push(split);\n\t\t\t\t\t}\n\t\t\t\t\telse\n\t\t\t\t\t\tsplits.push(split);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn splits;\n\t\t}\n\t}\n\n\treturn [\n\t\ttimeIncrs,\n\t\t_timeAxisStamps,\n\t\ttimeAxisSplits,\n\t];\n}\n\nconst [ timeIncrsMs, _timeAxisStampsMs, timeAxisSplitsMs ] = genTimeStuffs(1);\nconst [ timeIncrsS, _timeAxisStampsS, timeAxisSplitsS ] = genTimeStuffs(1e-3);\n\n// base 2\ngenIncrs(2, -53, 53, [1]);\n\n/*\nconsole.log({\n\tdecIncrs,\n\toneIncrs,\n\twholeIncrs,\n\tnumIncrs,\n\ttimeIncrs,\n\tfixedDec,\n});\n*/\n\nfunction timeAxisStamps(stampCfg, fmtDate) {\n\treturn stampCfg.map(s => s.map((v, i) =>\n\t\ti == 0 || i == 8 || v == null ? v : fmtDate(i == 1 || s[8] == 0 ? v : s[1] + v)\n\t));\n}\n\n// TODO: will need to accept spaces[] and pull incr into the loop when grid will be non-uniform, eg for log scales.\n// currently we ignore this for months since they're *nearly* uniform and the added complexity is not worth it\nfunction timeAxisVals(tzDate, stamps) {\n\treturn (self, splits, axisIdx, foundSpace, foundIncr) => {\n\t\tlet s = stamps.find(s => foundIncr >= s[0]) || stamps[stamps.length - 1];\n\n\t\t// these track boundaries when a full label is needed again\n\t\tlet prevYear;\n\t\tlet prevMnth;\n\t\tlet prevDate;\n\t\tlet prevHour;\n\t\tlet prevMins;\n\t\tlet prevSecs;\n\n\t\treturn splits.map(split => {\n\t\t\tlet date = tzDate(split);\n\n\t\t\tlet newYear = date.getFullYear();\n\t\t\tlet newMnth = date.getMonth();\n\t\t\tlet newDate = date.getDate();\n\t\t\tlet newHour = date.getHours();\n\t\t\tlet newMins = date.getMinutes();\n\t\t\tlet newSecs = date.getSeconds();\n\n\t\t\tlet stamp = (\n\t\t\t\tnewYear != prevYear && s[2] ||\n\t\t\t\tnewMnth != prevMnth && s[3] ||\n\t\t\t\tnewDate != prevDate && s[4] ||\n\t\t\t\tnewHour != prevHour && s[5] ||\n\t\t\t\tnewMins != prevMins && s[6] ||\n\t\t\t\tnewSecs != prevSecs && s[7] ||\n\t\t\t\t s[1]\n\t\t\t);\n\n\t\t\tprevYear = newYear;\n\t\t\tprevMnth = newMnth;\n\t\t\tprevDate = newDate;\n\t\t\tprevHour = newHour;\n\t\t\tprevMins = newMins;\n\t\t\tprevSecs = newSecs;\n\n\t\t\treturn stamp(date);\n\t\t});\n\t}\n}\n\n// for when axis.values is defined as a static fmtDate template string\nfunction timeAxisVal(tzDate, dateTpl) {\n\tlet stamp = fmtDate(dateTpl);\n\treturn (self, splits, axisIdx, foundSpace, foundIncr) => splits.map(split => stamp(tzDate(split)));\n}\n\nfunction mkDate(y, m, d) {\n\treturn new Date(y, m, d);\n}\n\nfunction timeSeriesStamp(stampCfg, fmtDate) {\n\treturn fmtDate(stampCfg);\n}\nconst _timeSeriesStamp = '{YYYY}-{MM}-{DD} {h}:{mm}{aa}';\n\nfunction timeSeriesVal(tzDate, stamp) {\n\treturn (self, val, seriesIdx, dataIdx) => dataIdx == null ? LEGEND_DISP : stamp(tzDate(val));\n}\n\nfunction legendStroke(self, seriesIdx) {\n\tlet s = self.series[seriesIdx];\n\treturn s.width ? s.stroke(self, seriesIdx) : s.points.width ? s.points.stroke(self, seriesIdx) : null;\n}\n\nfunction legendFill(self, seriesIdx) {\n\treturn self.series[seriesIdx].fill(self, seriesIdx);\n}\n\nconst legendOpts = {\n\tshow: true,\n\tlive: true,\n\tisolate: false,\n\tmount: noop,\n\tmarkers: {\n\t\tshow: true,\n\t\twidth: 2,\n\t\tstroke: legendStroke,\n\t\tfill: legendFill,\n\t\tdash: \"solid\",\n\t},\n\tidx: null,\n\tidxs: null,\n\tvalues: [],\n};\n\nfunction cursorPointShow(self, si) {\n\tlet o = self.cursor.points;\n\n\tlet pt = placeDiv();\n\n\tlet size = o.size(self, si);\n\tsetStylePx(pt, WIDTH, size);\n\tsetStylePx(pt, HEIGHT, size);\n\n\tlet mar = size / -2;\n\tsetStylePx(pt, \"marginLeft\", mar);\n\tsetStylePx(pt, \"marginTop\", mar);\n\n\tlet width = o.width(self, si, size);\n\twidth && setStylePx(pt, \"borderWidth\", width);\n\n\treturn pt;\n}\n\nfunction cursorPointFill(self, si) {\n\tlet sp = self.series[si].points;\n\treturn sp._fill || sp._stroke;\n}\n\nfunction cursorPointStroke(self, si) {\n\tlet sp = self.series[si].points;\n\treturn sp._stroke || sp._fill;\n}\n\nfunction cursorPointSize(self, si) {\n\tlet sp = self.series[si].points;\n\treturn sp.size;\n}\n\nconst moveTuple = [0,0];\n\nfunction cursorMove(self, mouseLeft1, mouseTop1) {\n\tmoveTuple[0] = mouseLeft1;\n\tmoveTuple[1] = mouseTop1;\n\treturn moveTuple;\n}\n\nfunction filtBtn0(self, targ, handle, onlyTarg = true) {\n\treturn e => {\n\t\te.button == 0 && (!onlyTarg || e.target == targ) && handle(e);\n\t};\n}\n\nfunction filtTarg(self, targ, handle, onlyTarg = true) {\n\treturn e => {\n\t\t(!onlyTarg || e.target == targ) && handle(e);\n\t};\n}\n\nconst cursorOpts = {\n\tshow: true,\n\tx: true,\n\ty: true,\n\tlock: false,\n\tmove: cursorMove,\n\tpoints: {\n\t\tone: false,\n\t\tshow: cursorPointShow,\n\t\tsize: cursorPointSize,\n\t\twidth: 0,\n\t\tstroke: cursorPointStroke,\n\t\tfill: cursorPointFill,\n\t},\n\n\tbind: {\n\t\tmousedown: filtBtn0,\n\t\tmouseup: filtBtn0,\n\t\tclick: filtBtn0, // legend clicks, not .u-over clicks\n\t\tdblclick: filtBtn0,\n\n\t\tmousemove: filtTarg,\n\t\tmouseleave: filtTarg,\n\t\tmouseenter: filtTarg,\n\t},\n\n\tdrag: {\n\t\tsetScale: true,\n\t\tx: true,\n\t\ty: false,\n\t\tdist: 0,\n\t\tuni: null,\n\t\tclick: (self, e) => {\n\t\t//\te.preventDefault();\n\t\t\te.stopPropagation();\n\t\t\te.stopImmediatePropagation();\n\t\t},\n\t\t_x: false,\n\t\t_y: false,\n\t},\n\n\tfocus: {\n\t\tdist: (self, seriesIdx, dataIdx, valPos, curPos) => valPos - curPos,\n\t\tprox: -1,\n\t\tbias: 0,\n\t},\n\n\thover: {\n\t\tskip: [void 0],\n\t\tprox: null,\n\t\tbias: 0,\n\t},\n\n\tleft: -10,\n\ttop: -10,\n\tidx: null,\n\tdataIdx: null,\n\tidxs: null,\n\n\tevent: null,\n};\n\nconst axisLines = {\n\tshow: true,\n\tstroke: \"rgba(0,0,0,0.07)\",\n\twidth: 2,\n//\tdash: [],\n};\n\nconst grid = assign({}, axisLines, {\n\tfilter: retArg1,\n});\n\nconst ticks = assign({}, grid, {\n\tsize: 10,\n});\n\nconst border = assign({}, axisLines, {\n\tshow: false,\n});\n\nconst font = '12px system-ui, -apple-system, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, \"Noto Sans\", sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\"';\nconst labelFont = \"bold \" + font;\nconst lineGap = 1.5;\t// font-size multiplier\n\nconst xAxisOpts = {\n\tshow: true,\n\tscale: \"x\",\n\tstroke: hexBlack,\n\tspace: 50,\n\tgap: 5,\n\talignTo: 1,\n\tsize: 50,\n\tlabelGap: 0,\n\tlabelSize: 30,\n\tlabelFont,\n\tside: 2,\n//\tclass: \"x-vals\",\n//\tincrs: timeIncrs,\n//\tvalues: timeVals,\n//\tfilter: retArg1,\n\tgrid,\n\tticks,\n\tborder,\n\tfont,\n\tlineGap,\n\trotate: 0,\n};\n\nconst numSeriesLabel = \"Value\";\nconst timeSeriesLabel = \"Time\";\n\nconst xSeriesOpts = {\n\tshow: true,\n\tscale: \"x\",\n\tauto: false,\n\tsorted: 1,\n//\tlabel: \"Time\",\n//\tvalue: v => stamp(new Date(v * 1e3)),\n\n\t// internal caches\n\tmin: inf,\n\tmax: -inf,\n\tidxs: [],\n};\n\nfunction numAxisVals(self, splits, axisIdx, foundSpace, foundIncr) {\n\treturn splits.map(v => v == null ? \"\" : fmtNum(v));\n}\n\nfunction numAxisSplits(self, axisIdx, scaleMin, scaleMax, foundIncr, foundSpace, forceMin) {\n\tlet splits = [];\n\n\tlet numDec = fixedDec.get(foundIncr) || 0;\n\n\tscaleMin = forceMin ? scaleMin : roundDec(incrRoundUp(scaleMin, foundIncr), numDec);\n\n\tfor (let val = scaleMin; val <= scaleMax; val = roundDec(val + foundIncr, numDec))\n\t\tsplits.push(Object.is(val, -0) ? 0 : val);\t\t// coalesces -0\n\n\treturn splits;\n}\n\n// this doesnt work for sin, which needs to come off from 0 independently in pos and neg dirs\nfunction logAxisSplits(self, axisIdx, scaleMin, scaleMax, foundIncr, foundSpace, forceMin) {\n\tconst splits = [];\n\n\tconst logBase = self.scales[self.axes[axisIdx].scale].log;\n\n\tconst logFn = logBase == 10 ? log10 : log2;\n\n\tconst exp = floor(logFn(scaleMin));\n\n\tfoundIncr = pow(logBase, exp);\n\n\t// boo: 10 ** -24 === 1.0000000000000001e-24\n\t// this grabs the proper 1e-24 one\n\tif (logBase == 10)\n\t\tfoundIncr = numIncrs[closestIdx(foundIncr, numIncrs)];\n\n\tlet split = scaleMin;\n\tlet nextMagIncr = foundIncr * logBase;\n\n\tif (logBase == 10)\n\t\tnextMagIncr = numIncrs[closestIdx(nextMagIncr, numIncrs)];\n\n\tdo {\n\t\tsplits.push(split);\n\t\tsplit = split + foundIncr;\n\n\t\tif (logBase == 10 && !fixedDec.has(split))\n\t\t\tsplit = roundDec(split, fixedDec.get(foundIncr));\n\n\t\tif (split >= nextMagIncr) {\n\t\t\tfoundIncr = split;\n\t\t\tnextMagIncr = foundIncr * logBase;\n\n\t\t\tif (logBase == 10)\n\t\t\t\tnextMagIncr = numIncrs[closestIdx(nextMagIncr, numIncrs)];\n\t\t}\n\t} while (split <= scaleMax);\n\n\treturn splits;\n}\n\nfunction asinhAxisSplits(self, axisIdx, scaleMin, scaleMax, foundIncr, foundSpace, forceMin) {\n\tlet sc = self.scales[self.axes[axisIdx].scale];\n\n\tlet linthresh = sc.asinh;\n\n\tlet posSplits = scaleMax > linthresh ? logAxisSplits(self, axisIdx, max(linthresh, scaleMin), scaleMax, foundIncr) : [linthresh];\n\tlet zero = scaleMax >= 0 && scaleMin <= 0 ? [0] : [];\n\tlet negSplits = scaleMin < -linthresh ? logAxisSplits(self, axisIdx, max(linthresh, -scaleMax), -scaleMin, foundIncr): [linthresh];\n\n\treturn negSplits.reverse().map(v => -v).concat(zero, posSplits);\n}\n\nconst RE_ALL = /./;\nconst RE_12357 = /[12357]/;\nconst RE_125 = /[125]/;\nconst RE_1 = /1/;\n\nconst _filt = (splits, distr, re, keepMod) => splits.map((v, i) => ((distr == 4 && v == 0) || i % keepMod == 0 && re.test(v.toExponential()[v < 0 ? 1 : 0])) ? v : null);\n\nfunction log10AxisValsFilt(self, splits, axisIdx, foundSpace, foundIncr) {\n\tlet axis = self.axes[axisIdx];\n\tlet scaleKey = axis.scale;\n\tlet sc = self.scales[scaleKey];\n\n//\tif (sc.distr == 3 && sc.log == 2)\n//\t\treturn splits;\n\n\tlet valToPos = self.valToPos;\n\n\tlet minSpace = axis._space;\n\n\tlet _10 = valToPos(10, scaleKey);\n\n\tlet re = (\n\t\tvalToPos(9, scaleKey) - _10 >= minSpace ? RE_ALL :\n\t\tvalToPos(7, scaleKey) - _10 >= minSpace ? RE_12357 :\n\t\tvalToPos(5, scaleKey) - _10 >= minSpace ? RE_125 :\n\t\tRE_1\n\t);\n\n\tif (re == RE_1) {\n\t\tlet magSpace = abs(valToPos(1, scaleKey) - _10);\n\n\t\tif (magSpace < minSpace)\n\t\t\treturn _filt(splits.slice().reverse(), sc.distr, re, ceil(minSpace / magSpace)).reverse(); // max->min skip\n\t}\n\n\treturn _filt(splits, sc.distr, re, 1);\n}\n\nfunction log2AxisValsFilt(self, splits, axisIdx, foundSpace, foundIncr) {\n\tlet axis = self.axes[axisIdx];\n\tlet scaleKey = axis.scale;\n\tlet minSpace = axis._space;\n\tlet valToPos = self.valToPos;\n\n\tlet magSpace = abs(valToPos(1, scaleKey) - valToPos(2, scaleKey));\n\n\tif (magSpace < minSpace)\n\t\treturn _filt(splits.slice().reverse(), 3, RE_ALL, ceil(minSpace / magSpace)).reverse(); // max->min skip\n\n\treturn splits;\n}\n\nfunction numSeriesVal(self, val, seriesIdx, dataIdx) {\n\treturn dataIdx == null ? LEGEND_DISP : val == null ? \"\" : fmtNum(val);\n}\n\nconst yAxisOpts = {\n\tshow: true,\n\tscale: \"y\",\n\tstroke: hexBlack,\n\tspace: 30,\n\tgap: 5,\n\talignTo: 1,\n\tsize: 50,\n\tlabelGap: 0,\n\tlabelSize: 30,\n\tlabelFont,\n\tside: 3,\n//\tclass: \"y-vals\",\n//\tincrs: numIncrs,\n//\tvalues: (vals, space) => vals,\n//\tfilter: retArg1,\n\tgrid,\n\tticks,\n\tborder,\n\tfont,\n\tlineGap,\n\trotate: 0,\n};\n\n// takes stroke width\nfunction ptDia(width, mult) {\n\tlet dia = 3 + (width || 1) * 2;\n\treturn roundDec(dia * mult, 3);\n}\n\nfunction seriesPointsShow(self, si) {\n\tlet { scale, idxs } = self.series[0];\n\tlet xData = self._data[0];\n\tlet p0 = self.valToPos(xData[idxs[0]], scale, true);\n\tlet p1 = self.valToPos(xData[idxs[1]], scale, true);\n\tlet dim = abs(p1 - p0);\n\n\tlet s = self.series[si];\n//\tconst dia = ptDia(s.width, pxRatio);\n\tlet maxPts = dim / (s.points.space * pxRatio);\n\treturn idxs[1] - idxs[0] <= maxPts;\n}\n\nconst facet = {\n\tscale: null,\n\tauto: true,\n\tsorted: 0,\n\n\t// internal caches\n\tmin: inf,\n\tmax: -inf,\n};\n\nconst gaps = (self, seriesIdx, idx0, idx1, nullGaps) => nullGaps;\n\nconst xySeriesOpts = {\n\tshow: true,\n\tauto: true,\n\tsorted: 0,\n\tgaps,\n\talpha: 1,\n\tfacets: [\n\t\tassign({}, facet, {scale: 'x'}),\n\t\tassign({}, facet, {scale: 'y'}),\n\t],\n};\n\nconst ySeriesOpts = {\n\tscale: \"y\",\n\tauto: true,\n\tsorted: 0,\n\tshow: true,\n\tspanGaps: false,\n\tgaps,\n\talpha: 1,\n\tpoints: {\n\t\tshow: seriesPointsShow,\n\t\tfilter: null,\n\t// paths:\n\t//\tstroke: \"#000\",\n\t//\tfill: \"#fff\",\n\t//\twidth: 1,\n\t//\tsize: 10,\n\t},\n//\tlabel: \"Value\",\n//\tvalue: v => v,\n\tvalues: null,\n\n\t// internal caches\n\tmin: inf,\n\tmax: -inf,\n\tidxs: [],\n\n\tpath: null,\n\tclip: null,\n};\n\nfunction clampScale(self, val, scaleMin, scaleMax, scaleKey) {\n/*\n\tif (val < 0) {\n\t\tlet cssHgt = self.bbox.height / pxRatio;\n\t\tlet absPos = self.valToPos(abs(val), scaleKey);\n\t\tlet fromBtm = cssHgt - absPos;\n\t\treturn self.posToVal(cssHgt + fromBtm, scaleKey);\n\t}\n*/\n\treturn scaleMin / 10;\n}\n\nconst xScaleOpts = {\n\ttime: FEAT_TIME,\n\tauto: true,\n\tdistr: 1,\n\tlog: 10,\n\tasinh: 1,\n\tmin: null,\n\tmax: null,\n\tdir: 1,\n\tori: 0,\n};\n\nconst yScaleOpts = assign({}, xScaleOpts, {\n\ttime: false,\n\tori: 1,\n});\n\nconst syncs = {};\n\nfunction _sync(key, opts) {\n\tlet s = syncs[key];\n\n\tif (!s) {\n\t\ts = {\n\t\t\tkey,\n\t\t\tplots: [],\n\t\t\tsub(plot) {\n\t\t\t\ts.plots.push(plot);\n\t\t\t},\n\t\t\tunsub(plot) {\n\t\t\t\ts.plots = s.plots.filter(c => c != plot);\n\t\t\t},\n\t\t\tpub(type, self, x, y, w, h, i) {\n\t\t\t\tfor (let j = 0; j < s.plots.length; j++)\n\t\t\t\t\ts.plots[j] != self && s.plots[j].pub(type, self, x, y, w, h, i);\n\t\t\t},\n\t\t};\n\n\t\tif (key != null)\n\t\t\tsyncs[key] = s;\n\t}\n\n\treturn s;\n}\n\nconst BAND_CLIP_FILL = 1 << 0;\nconst BAND_CLIP_STROKE = 1 << 1;\n\nfunction orient(u, seriesIdx, cb) {\n\tconst mode = u.mode;\n\tconst series = u.series[seriesIdx];\n\tconst data = mode == 2 ? u._data[seriesIdx] : u._data;\n\tconst scales = u.scales;\n\tconst bbox = u.bbox;\n\n\tlet dx = data[0],\n\t\tdy = mode == 2 ? data[1] : data[seriesIdx],\n\t\tsx = mode == 2 ? scales[series.facets[0].scale] : scales[u.series[0].scale],\n\t\tsy = mode == 2 ? scales[series.facets[1].scale] : scales[series.scale],\n\t\tl = bbox.left,\n\t\tt = bbox.top,\n\t\tw = bbox.width,\n\t\th = bbox.height,\n\t\tH = u.valToPosH,\n\t\tV = u.valToPosV;\n\n\treturn (sx.ori == 0\n\t\t? cb(\n\t\t\tseries,\n\t\t\tdx,\n\t\t\tdy,\n\t\t\tsx,\n\t\t\tsy,\n\t\t\tH,\n\t\t\tV,\n\t\t\tl,\n\t\t\tt,\n\t\t\tw,\n\t\t\th,\n\t\t\tmoveToH,\n\t\t\tlineToH,\n\t\t\trectH,\n\t\t\tarcH,\n\t\t\tbezierCurveToH,\n\t\t)\n\t\t: cb(\n\t\t\tseries,\n\t\t\tdx,\n\t\t\tdy,\n\t\t\tsx,\n\t\t\tsy,\n\t\t\tV,\n\t\t\tH,\n\t\t\tt,\n\t\t\tl,\n\t\t\th,\n\t\t\tw,\n\t\t\tmoveToV,\n\t\t\tlineToV,\n\t\t\trectV,\n\t\t\tarcV,\n\t\t\tbezierCurveToV,\n\t\t)\n\t);\n}\n\nfunction bandFillClipDirs(self, seriesIdx) {\n\tlet fillDir = 0;\n\n\t// 2 bits, -1 | 1\n\tlet clipDirs = 0;\n\n\tlet bands = ifNull(self.bands, EMPTY_ARR);\n\n\tfor (let i = 0; i < bands.length; i++) {\n\t\tlet b = bands[i];\n\n\t\t// is a \"from\" band edge\n\t\tif (b.series[0] == seriesIdx)\n\t\t\tfillDir = b.dir;\n\t\t// is a \"to\" band edge\n\t\telse if (b.series[1] == seriesIdx) {\n\t\t\tif (b.dir == 1)\n\t\t\t\tclipDirs |= 1;\n\t\t\telse\n\t\t\t\tclipDirs |= 2;\n\t\t}\n\t}\n\n\treturn [\n\t\tfillDir,\n\t\t(\n\t\t\tclipDirs == 1 ? -1 : // neg only\n\t\t\tclipDirs == 2 ? 1 : // pos only\n\t\t\tclipDirs == 3 ? 2 : // both\n\t\t\t 0 // neither\n\t\t)\n\t];\n}\n\nfunction seriesFillTo(self, seriesIdx, dataMin, dataMax, bandFillDir) {\n\tlet mode = self.mode;\n\tlet series = self.series[seriesIdx];\n\tlet scaleKey = mode == 2 ? series.facets[1].scale : series.scale;\n\tlet scale = self.scales[scaleKey];\n\n\treturn (\n\t\tbandFillDir == -1 ? scale.min :\n\t\tbandFillDir == 1 ? scale.max :\n\t\tscale.distr == 3 ? (\n\t\t\tscale.dir == 1 ? scale.min :\n\t\t\tscale.max\n\t\t) : 0\n\t);\n}\n\n// creates inverted band clip path (from stroke path -> yMax || yMin)\n// clipDir is always inverse of fillDir\n// default clip dir is upwards (1), since default band fill is downwards/fillBelowTo (-1) (highIdx -> lowIdx)\nfunction clipBandLine(self, seriesIdx, idx0, idx1, strokePath, clipDir) {\n\treturn orient(self, seriesIdx, (series, dataX, dataY, scaleX, scaleY, valToPosX, valToPosY, xOff, yOff, xDim, yDim) => {\n\t\tlet pxRound = series.pxRound;\n\n\t\tconst dir = scaleX.dir * (scaleX.ori == 0 ? 1 : -1);\n\t\tconst lineTo = scaleX.ori == 0 ? lineToH : lineToV;\n\n\t\tlet frIdx, toIdx;\n\n\t\tif (dir == 1) {\n\t\t\tfrIdx = idx0;\n\t\t\ttoIdx = idx1;\n\t\t}\n\t\telse {\n\t\t\tfrIdx = idx1;\n\t\t\ttoIdx = idx0;\n\t\t}\n\n\t\t// path start\n\t\tlet x0 = pxRound(valToPosX(dataX[frIdx], scaleX, xDim, xOff));\n\t\tlet y0 = pxRound(valToPosY(dataY[frIdx], scaleY, yDim, yOff));\n\t\t// path end x\n\t\tlet x1 = pxRound(valToPosX(dataX[toIdx], scaleX, xDim, xOff));\n\t\t// upper or lower y limit\n\t\tlet yLimit = pxRound(valToPosY(clipDir == 1 ? scaleY.max : scaleY.min, scaleY, yDim, yOff));\n\n\t\tlet clip = new Path2D(strokePath);\n\n\t\tlineTo(clip, x1, yLimit);\n\t\tlineTo(clip, x0, yLimit);\n\t\tlineTo(clip, x0, y0);\n\n\t\treturn clip;\n\t});\n}\n\nfunction clipGaps(gaps, ori, plotLft, plotTop, plotWid, plotHgt) {\n\tlet clip = null;\n\n\t// create clip path (invert gaps and non-gaps)\n\tif (gaps.length > 0) {\n\t\tclip = new Path2D();\n\n\t\tconst rect = ori == 0 ? rectH : rectV;\n\n\t\tlet prevGapEnd = plotLft;\n\n\t\tfor (let i = 0; i < gaps.length; i++) {\n\t\t\tlet g = gaps[i];\n\n\t\t\tif (g[1] > g[0]) {\n\t\t\t\tlet w = g[0] - prevGapEnd;\n\n\t\t\t\tw > 0 && rect(clip, prevGapEnd, plotTop, w, plotTop + plotHgt);\n\n\t\t\t\tprevGapEnd = g[1];\n\t\t\t}\n\t\t}\n\n\t\tlet w = plotLft + plotWid - prevGapEnd;\n\n\t\t// hack to ensure we expand the clip enough to avoid cutting off strokes at edges\n\t\tlet maxStrokeWidth = 10;\n\n\t\tw > 0 && rect(clip, prevGapEnd, plotTop - maxStrokeWidth / 2, w, plotTop + plotHgt + maxStrokeWidth);\n\t}\n\n\treturn clip;\n}\n\nfunction addGap(gaps, fromX, toX) {\n\tlet prevGap = gaps[gaps.length - 1];\n\n\tif (prevGap && prevGap[0] == fromX)\t\t\t// TODO: gaps must be encoded at stroke widths?\n\t\tprevGap[1] = toX;\n\telse\n\t\tgaps.push([fromX, toX]);\n}\n\nfunction findGaps(xs, ys, idx0, idx1, dir, pixelForX, align) {\n\tlet gaps = [];\n\tlet len = xs.length;\n\n\tfor (let i = dir == 1 ? idx0 : idx1; i >= idx0 && i <= idx1; i += dir) {\n\t\tlet yVal = ys[i];\n\n\t\tif (yVal === null) {\n\t\t\tlet fr = i, to = i;\n\n\t\t\tif (dir == 1) {\n\t\t\t\twhile (++i <= idx1 && ys[i] === null)\n\t\t\t\t\tto = i;\n\t\t\t}\n\t\t\telse {\n\t\t\t\twhile (--i >= idx0 && ys[i] === null)\n\t\t\t\t\tto = i;\n\t\t\t}\n\n\t\t\tlet frPx = pixelForX(xs[fr]);\n\t\t\tlet toPx = to == fr ? frPx : pixelForX(xs[to]);\n\n\t\t\t// if value adjacent to edge null is same pixel, then it's partially\n\t\t\t// filled and gap should start at next pixel\n\t\t\tlet fri2 = fr - dir;\n\t\t\tlet frPx2 = align <= 0 && fri2 >= 0 && fri2 < len ? pixelForX(xs[fri2]) : frPx;\n\t\t//\tif (frPx2 == frPx)\n\t\t//\t\tfrPx++;\n\t\t//\telse\n\t\t\t\tfrPx = frPx2;\n\n\t\t\tlet toi2 = to + dir;\n\t\t\tlet toPx2 = align >= 0 && toi2 >= 0 && toi2 < len ? pixelForX(xs[toi2]) : toPx;\n\t\t//\tif (toPx2 == toPx)\n\t\t//\t\ttoPx--;\n\t\t//\telse\n\t\t\t\ttoPx = toPx2;\n\n\t\t\tif (toPx >= frPx)\n\t\t\t\tgaps.push([frPx, toPx]); // addGap\n\t\t}\n\t}\n\n\treturn gaps;\n}\n\nfunction pxRoundGen(pxAlign) {\n\treturn pxAlign == 0 ? retArg0 : pxAlign == 1 ? round : v => incrRound(v, pxAlign);\n}\n\n/*\n// inefficient linear interpolation that does bi-directinal scans on each call\nexport function costlyLerp(i, idx0, idx1, _dirX, dataY) {\n\tlet prevNonNull = nonNullIdx(dataY, _dirX == 1 ? idx0 : idx1, i, -_dirX);\n\tlet nextNonNull = nonNullIdx(dataY, i, _dirX == 1 ? idx1 : idx0, _dirX);\n\n\tlet prevVal = dataY[prevNonNull];\n\tlet nextVal = dataY[nextNonNull];\n\n\treturn prevVal + (i - prevNonNull) / (nextNonNull - prevNonNull) * (nextVal - prevVal);\n}\n*/\n\nfunction rect(ori) {\n\tlet moveTo = ori == 0 ?\n\t\tmoveToH :\n\t\tmoveToV;\n\n\tlet arcTo = ori == 0 ?\n\t\t(p, x1, y1, x2, y2, r) => { p.arcTo(x1, y1, x2, y2, r); } :\n\t\t(p, y1, x1, y2, x2, r) => { p.arcTo(x1, y1, x2, y2, r); };\n\n\tlet rect = ori == 0 ?\n\t\t(p, x, y, w, h) => { p.rect(x, y, w, h); } :\n\t\t(p, y, x, h, w) => { p.rect(x, y, w, h); };\n\n\t// TODO (pending better browser support): https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/roundRect\n\treturn (p, x, y, w, h, endRad = 0, baseRad = 0) => {\n\t\tif (endRad == 0 && baseRad == 0)\n\t\t\trect(p, x, y, w, h);\n\t\telse {\n\t\t\tendRad = min(endRad, w / 2, h / 2);\n\t\t\tbaseRad = min(baseRad, w / 2, h / 2);\n\n\t\t\t// adapted from https://stackoverflow.com/questions/1255512/how-to-draw-a-rounded-rectangle-using-html-canvas/7838871#7838871\n\t\t\tmoveTo(p, x + endRad, y);\n\t\t\tarcTo(p, x + w, y, x + w, y + h, endRad);\n\t\t\tarcTo(p, x + w, y + h, x, y + h, baseRad);\n\t\t\tarcTo(p, x, y + h, x, y, baseRad);\n\t\t\tarcTo(p, x, y, x + w, y, endRad);\n\t\t\tp.closePath();\n\t\t}\n\t};\n}\n\n// orientation-inverting canvas functions\nconst moveToH = (p, x, y) => { p.moveTo(x, y); };\nconst moveToV = (p, y, x) => { p.moveTo(x, y); };\nconst lineToH = (p, x, y) => { p.lineTo(x, y); };\nconst lineToV = (p, y, x) => { p.lineTo(x, y); };\nconst rectH = rect(0);\nconst rectV = rect(1);\nconst arcH = (p, x, y, r, startAngle, endAngle) => { p.arc(x, y, r, startAngle, endAngle); };\nconst arcV = (p, y, x, r, startAngle, endAngle) => { p.arc(x, y, r, startAngle, endAngle); };\nconst bezierCurveToH = (p, bp1x, bp1y, bp2x, bp2y, p2x, p2y) => { p.bezierCurveTo(bp1x, bp1y, bp2x, bp2y, p2x, p2y); };\nconst bezierCurveToV = (p, bp1y, bp1x, bp2y, bp2x, p2y, p2x) => { p.bezierCurveTo(bp1x, bp1y, bp2x, bp2y, p2x, p2y); };\n\n// TODO: drawWrap(seriesIdx, drawPoints) (save, restore, translate, clip)\nfunction points(opts) {\n\treturn (u, seriesIdx, idx0, idx1, filtIdxs) => {\n\t//\tlog(\"drawPoints()\", arguments);\n\n\t\treturn orient(u, seriesIdx, (series, dataX, dataY, scaleX, scaleY, valToPosX, valToPosY, xOff, yOff, xDim, yDim) => {\n\t\t\tlet { pxRound, points } = series;\n\n\t\t\tlet moveTo, arc;\n\n\t\t\tif (scaleX.ori == 0) {\n\t\t\t\tmoveTo = moveToH;\n\t\t\t\tarc = arcH;\n\t\t\t}\n\t\t\telse {\n\t\t\t\tmoveTo = moveToV;\n\t\t\t\tarc = arcV;\n\t\t\t}\n\n\t\t\tconst width = roundDec(points.width * pxRatio, 3);\n\n\t\t\tlet rad = (points.size - points.width) / 2 * pxRatio;\n\t\t\tlet dia = roundDec(rad * 2, 3);\n\n\t\t\tlet fill = new Path2D();\n\t\t\tlet clip = new Path2D();\n\n\t\t\tlet { left: lft, top: top, width: wid, height: hgt } = u.bbox;\n\n\t\t\trectH(clip,\n\t\t\t\tlft - dia,\n\t\t\t\ttop - dia,\n\t\t\t\twid + dia * 2,\n\t\t\t\thgt + dia * 2,\n\t\t\t);\n\n\t\t\tconst drawPoint = pi => {\n\t\t\t\tif (dataY[pi] != null) {\n\t\t\t\t\tlet x = pxRound(valToPosX(dataX[pi], scaleX, xDim, xOff));\n\t\t\t\t\tlet y = pxRound(valToPosY(dataY[pi], scaleY, yDim, yOff));\n\n\t\t\t\t\tmoveTo(fill, x + rad, y);\n\t\t\t\t\tarc(fill, x, y, rad, 0, PI * 2);\n\t\t\t\t}\n\t\t\t};\n\n\t\t\tif (filtIdxs)\n\t\t\t\tfiltIdxs.forEach(drawPoint);\n\t\t\telse {\n\t\t\t\tfor (let pi = idx0; pi <= idx1; pi++)\n\t\t\t\t\tdrawPoint(pi);\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\tstroke: width > 0 ? fill : null,\n\t\t\t\tfill,\n\t\t\t\tclip,\n\t\t\t\tflags: BAND_CLIP_FILL | BAND_CLIP_STROKE,\n\t\t\t};\n\t\t});\n\t};\n}\n\nfunction _drawAcc(lineTo) {\n\treturn (stroke, accX, minY, maxY, inY, outY) => {\n\t\tif (minY != maxY) {\n\t\t\tif (inY != minY && outY != minY)\n\t\t\t\tlineTo(stroke, accX, minY);\n\t\t\tif (inY != maxY && outY != maxY)\n\t\t\t\tlineTo(stroke, accX, maxY);\n\n\t\t\tlineTo(stroke, accX, outY);\n\t\t}\n\t};\n}\n\nconst drawAccH = _drawAcc(lineToH);\nconst drawAccV = _drawAcc(lineToV);\n\nfunction linear(opts) {\n\tconst alignGaps = ifNull(opts?.alignGaps, 0);\n\n\treturn (u, seriesIdx, idx0, idx1) => {\n\t\treturn orient(u, seriesIdx, (series, dataX, dataY, scaleX, scaleY, valToPosX, valToPosY, xOff, yOff, xDim, yDim) => {\n\t\t\t[idx0, idx1] = nonNullIdxs(dataY, idx0, idx1);\n\n\t\t\tlet pxRound = series.pxRound;\n\n\t\t\tlet pixelForX = val => pxRound(valToPosX(val, scaleX, xDim, xOff));\n\t\t\tlet pixelForY = val => pxRound(valToPosY(val, scaleY, yDim, yOff));\n\n\t\t\tlet lineTo, drawAcc;\n\n\t\t\tif (scaleX.ori == 0) {\n\t\t\t\tlineTo = lineToH;\n\t\t\t\tdrawAcc = drawAccH;\n\t\t\t}\n\t\t\telse {\n\t\t\t\tlineTo = lineToV;\n\t\t\t\tdrawAcc = drawAccV;\n\t\t\t}\n\n\t\t\tconst dir = scaleX.dir * (scaleX.ori == 0 ? 1 : -1);\n\n\t\t\tconst _paths = {stroke: new Path2D(), fill: null, clip: null, band: null, gaps: null, flags: BAND_CLIP_FILL};\n\t\t\tconst stroke = _paths.stroke;\n\n\t\t\tlet hasGap = false;\n\n\t\t\t// decimate when number of points >= 4x available pixels\n\t\t\tconst decimate = idx1 - idx0 >= xDim * 4;\n\n\t\t\tif (decimate) {\n\t\t\t\tlet xForPixel = pos => u.posToVal(pos, scaleX.key, true);\n\n\t\t\t\tlet minY = null,\n\t\t\t\t\tmaxY = null,\n\t\t\t\t\tinY, outY, drawnAtX;\n\n\t\t\t\tlet accX = pixelForX(dataX[dir == 1 ? idx0 : idx1]);\n\n\t\t\t\tlet idx0px = pixelForX(dataX[idx0]);\n\t\t\t\tlet idx1px = pixelForX(dataX[idx1]);\n\n\t\t\t\t// tracks limit of current x bucket to avoid having to get x pixel for every x value\n\t\t\t\tlet nextAccXVal = xForPixel(dir == 1 ? idx0px + 1 : idx1px - 1);\n\n\t\t\t\tfor (let i = dir == 1 ? idx0 : idx1; i >= idx0 && i <= idx1; i += dir) {\n\t\t\t\t\tlet xVal = dataX[i];\n\t\t\t\t\tlet reuseAccX = dir == 1 ? (xVal < nextAccXVal) : (xVal > nextAccXVal);\n\t\t\t\t\tlet x = reuseAccX ? accX : pixelForX(xVal);\n\n\t\t\t\t\tlet yVal = dataY[i];\n\n\t\t\t\t\tif (x == accX) {\n\t\t\t\t\t\tif (yVal != null) {\n\t\t\t\t\t\t\toutY = yVal;\n\n\t\t\t\t\t\t\tif (minY == null) {\n\t\t\t\t\t\t\t\tlineTo(stroke, x, pixelForY(outY));\n\t\t\t\t\t\t\t\tinY = minY = maxY = outY;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tif (outY < minY)\n\t\t\t\t\t\t\t\t\tminY = outY;\n\t\t\t\t\t\t\t\telse if (outY > maxY)\n\t\t\t\t\t\t\t\t\tmaxY = outY;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tif (yVal === null)\n\t\t\t\t\t\t\t\thasGap = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tif (minY != null)\n\t\t\t\t\t\t\tdrawAcc(stroke, accX, pixelForY(minY), pixelForY(maxY), pixelForY(inY), pixelForY(outY));\n\n\t\t\t\t\t\tif (yVal != null) {\n\t\t\t\t\t\t\toutY = yVal;\n\t\t\t\t\t\t\tlineTo(stroke, x, pixelForY(outY));\n\t\t\t\t\t\t\tminY = maxY = inY = outY;\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tminY = maxY = null;\n\n\t\t\t\t\t\t\tif (yVal === null)\n\t\t\t\t\t\t\t\thasGap = true;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\taccX = x;\n\t\t\t\t\t\tnextAccXVal = xForPixel(accX + dir);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (minY != null && minY != maxY && drawnAtX != accX)\n\t\t\t\t\tdrawAcc(stroke, accX, pixelForY(minY), pixelForY(maxY), pixelForY(inY), pixelForY(outY));\n\t\t\t}\n\t\t\telse {\n\t\t\t\tfor (let i = dir == 1 ? idx0 : idx1; i >= idx0 && i <= idx1; i += dir) {\n\t\t\t\t\tlet yVal = dataY[i];\n\n\t\t\t\t\tif (yVal === null)\n\t\t\t\t\t\thasGap = true;\n\t\t\t\t\telse if (yVal != null)\n\t\t\t\t\t\tlineTo(stroke, pixelForX(dataX[i]), pixelForY(yVal));\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tlet [ bandFillDir, bandClipDir ] = bandFillClipDirs(u, seriesIdx);\n\n\t\t\tif (series.fill != null || bandFillDir != 0) {\n\t\t\t\tlet fill = _paths.fill = new Path2D(stroke);\n\n\t\t\t\tlet fillToVal = series.fillTo(u, seriesIdx, series.min, series.max, bandFillDir);\n\t\t\t\tlet fillToY = pixelForY(fillToVal);\n\n\t\t\t\tlet frX = pixelForX(dataX[idx0]);\n\t\t\t\tlet toX = pixelForX(dataX[idx1]);\n\n\t\t\t\tif (dir == -1)\n\t\t\t\t\t[toX, frX] = [frX, toX];\n\n\t\t\t\tlineTo(fill, toX, fillToY);\n\t\t\t\tlineTo(fill, frX, fillToY);\n\t\t\t}\n\n\t\t\tif (!series.spanGaps) { // skip in mode: 2?\n\t\t\t//\tconsole.time('gaps');\n\t\t\t\tlet gaps = [];\n\n\t\t\t\thasGap && gaps.push(...findGaps(dataX, dataY, idx0, idx1, dir, pixelForX, alignGaps));\n\n\t\t\t//\tconsole.timeEnd('gaps');\n\n\t\t\t//\tconsole.log('gaps', JSON.stringify(gaps));\n\n\t\t\t\t_paths.gaps = gaps = series.gaps(u, seriesIdx, idx0, idx1, gaps);\n\n\t\t\t\t_paths.clip = clipGaps(gaps, scaleX.ori, xOff, yOff, xDim, yDim);\n\t\t\t}\n\n\t\t\tif (bandClipDir != 0) {\n\t\t\t\t_paths.band = bandClipDir == 2 ? [\n\t\t\t\t\tclipBandLine(u, seriesIdx, idx0, idx1, stroke, -1),\n\t\t\t\t\tclipBandLine(u, seriesIdx, idx0, idx1, stroke, 1),\n\t\t\t\t] : clipBandLine(u, seriesIdx, idx0, idx1, stroke, bandClipDir);\n\t\t\t}\n\n\t\t\treturn _paths;\n\t\t});\n\t};\n}\n\n// BUG: align: -1 behaves like align: 1 when scale.dir: -1\nfunction stepped(opts) {\n\tconst align = ifNull(opts.align, 1);\n\t// whether to draw ascenders/descenders at null/gap bondaries\n\tconst ascDesc = ifNull(opts.ascDesc, false);\n\tconst alignGaps = ifNull(opts.alignGaps, 0);\n\tconst extend = ifNull(opts.extend, false);\n\n\treturn (u, seriesIdx, idx0, idx1) => {\n\t\treturn orient(u, seriesIdx, (series, dataX, dataY, scaleX, scaleY, valToPosX, valToPosY, xOff, yOff, xDim, yDim) => {\n\t\t\t[idx0, idx1] = nonNullIdxs(dataY, idx0, idx1);\n\n\t\t\tlet pxRound = series.pxRound;\n\n\t\t\tlet { left, width } = u.bbox;\n\n\t\t\tlet pixelForX = val => pxRound(valToPosX(val, scaleX, xDim, xOff));\n\t\t\tlet pixelForY = val => pxRound(valToPosY(val, scaleY, yDim, yOff));\n\n\t\t\tlet lineTo = scaleX.ori == 0 ? lineToH : lineToV;\n\n\t\t\tconst _paths = {stroke: new Path2D(), fill: null, clip: null, band: null, gaps: null, flags: BAND_CLIP_FILL};\n\t\t\tconst stroke = _paths.stroke;\n\n\t\t\tconst dir = scaleX.dir * (scaleX.ori == 0 ? 1 : -1);\n\n\t\t\tlet prevYPos = pixelForY(dataY[dir == 1 ? idx0 : idx1]);\n\t\t\tlet firstXPos = pixelForX(dataX[dir == 1 ? idx0 : idx1]);\n\t\t\tlet prevXPos = firstXPos;\n\n\t\t\tlet firstXPosExt = firstXPos;\n\n\t\t\tif (extend && align == -1) {\n\t\t\t\tfirstXPosExt = left;\n\t\t\t\tlineTo(stroke, firstXPosExt, prevYPos);\n\t\t\t}\n\n\t\t\tlineTo(stroke, firstXPos, prevYPos);\n\n\t\t\tfor (let i = dir == 1 ? idx0 : idx1; i >= idx0 && i <= idx1; i += dir) {\n\t\t\t\tlet yVal1 = dataY[i];\n\n\t\t\t\tif (yVal1 == null)\n\t\t\t\t\tcontinue;\n\n\t\t\t\tlet x1 = pixelForX(dataX[i]);\n\t\t\t\tlet y1 = pixelForY(yVal1);\n\n\t\t\t\tif (align == 1)\n\t\t\t\t\tlineTo(stroke, x1, prevYPos);\n\t\t\t\telse\n\t\t\t\t\tlineTo(stroke, prevXPos, y1);\n\n\t\t\t\tlineTo(stroke, x1, y1);\n\n\t\t\t\tprevYPos = y1;\n\t\t\t\tprevXPos = x1;\n\t\t\t}\n\n\t\t\tlet prevXPosExt = prevXPos;\n\n\t\t\tif (extend && align == 1) {\n\t\t\t\tprevXPosExt = left + width;\n\t\t\t\tlineTo(stroke, prevXPosExt, prevYPos);\n\t\t\t}\n\n\t\t\tlet [ bandFillDir, bandClipDir ] = bandFillClipDirs(u, seriesIdx);\n\n\t\t\tif (series.fill != null || bandFillDir != 0) {\n\t\t\t\tlet fill = _paths.fill = new Path2D(stroke);\n\n\t\t\t\tlet fillTo = series.fillTo(u, seriesIdx, series.min, series.max, bandFillDir);\n\t\t\t\tlet fillToY = pixelForY(fillTo);\n\n\t\t\t\tlineTo(fill, prevXPosExt, fillToY);\n\t\t\t\tlineTo(fill, firstXPosExt, fillToY);\n\t\t\t}\n\n\t\t\tif (!series.spanGaps) {\n\t\t\t//\tconsole.time('gaps');\n\t\t\t\tlet gaps = [];\n\n\t\t\t\tgaps.push(...findGaps(dataX, dataY, idx0, idx1, dir, pixelForX, alignGaps));\n\n\t\t\t//\tconsole.timeEnd('gaps');\n\n\t\t\t//\tconsole.log('gaps', JSON.stringify(gaps));\n\n\t\t\t\t// expand/contract clips for ascenders/descenders\n\t\t\t\tlet halfStroke = (series.width * pxRatio) / 2;\n\t\t\t\tlet startsOffset = (ascDesc || align == 1) ? halfStroke : -halfStroke;\n\t\t\t\tlet endsOffset = (ascDesc || align == -1) ? -halfStroke : halfStroke;\n\n\t\t\t\tgaps.forEach(g => {\n\t\t\t\t\tg[0] += startsOffset;\n\t\t\t\t\tg[1] += endsOffset;\n\t\t\t\t});\n\n\t\t\t\t_paths.gaps = gaps = series.gaps(u, seriesIdx, idx0, idx1, gaps);\n\n\t\t\t\t_paths.clip = clipGaps(gaps, scaleX.ori, xOff, yOff, xDim, yDim);\n\t\t\t}\n\n\t\t\tif (bandClipDir != 0) {\n\t\t\t\t_paths.band = bandClipDir == 2 ? [\n\t\t\t\t\tclipBandLine(u, seriesIdx, idx0, idx1, stroke, -1),\n\t\t\t\t\tclipBandLine(u, seriesIdx, idx0, idx1, stroke, 1),\n\t\t\t\t] : clipBandLine(u, seriesIdx, idx0, idx1, stroke, bandClipDir);\n\t\t\t}\n\n\t\t\treturn _paths;\n\t\t});\n\t};\n}\n\nfunction findColWidth(dataX, dataY, valToPosX, scaleX, xDim, xOff, colWid = inf) {\n\tif (dataX.length > 1) {\n\t\t// prior index with non-undefined y data\n\t\tlet prevIdx = null;\n\n\t\t// scan full dataset for smallest adjacent delta\n\t\t// will not work properly for non-linear x scales, since does not do expensive valToPosX calcs till end\n\t\tfor (let i = 0, minDelta = Infinity; i < dataX.length; i++) {\n\t\t\tif (dataY[i] !== undefined) {\n\t\t\t\tif (prevIdx != null) {\n\t\t\t\t\tlet delta = abs(dataX[i] - dataX[prevIdx]);\n\n\t\t\t\t\tif (delta < minDelta) {\n\t\t\t\t\t\tminDelta = delta;\n\t\t\t\t\t\tcolWid = abs(valToPosX(dataX[i], scaleX, xDim, xOff) - valToPosX(dataX[prevIdx], scaleX, xDim, xOff));\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tprevIdx = i;\n\t\t\t}\n\t\t}\n\t}\n\n\treturn colWid;\n}\n\nfunction bars(opts) {\n\topts = opts || EMPTY_OBJ;\n\tconst size = ifNull(opts.size, [0.6, inf, 1]);\n\tconst align = opts.align || 0;\n\tconst _extraGap = (opts.gap || 0);\n\n\tlet ro = opts.radius;\n\n\tro =\n\t\t// [valueRadius, baselineRadius]\n\t\tro == null ? [0, 0] :\n\t\ttypeof ro == 'number' ? [ro, 0] : ro;\n\n\tconst radiusFn = fnOrSelf(ro);\n\n\tconst gapFactor = 1 - size[0];\n\tconst _maxWidth = ifNull(size[1], inf);\n\tconst _minWidth = ifNull(size[2], 1);\n\n\tconst disp = ifNull(opts.disp, EMPTY_OBJ);\n\tconst _each = ifNull(opts.each, _ => {});\n\n\tconst { fill: dispFills, stroke: dispStrokes } = disp;\n\n\treturn (u, seriesIdx, idx0, idx1) => {\n\t\treturn orient(u, seriesIdx, (series, dataX, dataY, scaleX, scaleY, valToPosX, valToPosY, xOff, yOff, xDim, yDim) => {\n\t\t\tlet pxRound = series.pxRound;\n\t\t\tlet _align = align;\n\n\t\t\tlet extraGap = _extraGap * pxRatio;\n\t\t\tlet maxWidth = _maxWidth * pxRatio;\n\t\t\tlet minWidth = _minWidth * pxRatio;\n\n\t\t\tlet valRadius, baseRadius;\n\n\t\t\tif (scaleX.ori == 0)\n\t\t\t\t[valRadius, baseRadius] = radiusFn(u, seriesIdx);\n\t\t\telse\n\t\t\t\t[baseRadius, valRadius] = radiusFn(u, seriesIdx);\n\n\t\t\tconst _dirX = scaleX.dir * (scaleX.ori == 0 ? 1 : -1);\n\t\t//\tconst _dirY = scaleY.dir * (scaleY.ori == 1 ? 1 : -1);\n\n\t\t\tlet rect = scaleX.ori == 0 ? rectH : rectV;\n\n\t\t\tlet each = scaleX.ori == 0 ? _each : (u, seriesIdx, i, top, lft, hgt, wid) => {\n\t\t\t\t_each(u, seriesIdx, i, lft, top, wid, hgt);\n\t\t\t};\n\n\t\t\t// band where this series is the \"from\" edge\n\t\t\tlet band = ifNull(u.bands, EMPTY_ARR).find(b => b.series[0] == seriesIdx);\n\n\t\t\tlet fillDir = band != null ? band.dir : 0;\n\t\t\tlet fillTo = series.fillTo(u, seriesIdx, series.min, series.max, fillDir);\n\t\t\tlet fillToY = pxRound(valToPosY(fillTo, scaleY, yDim, yOff));\n\n\t\t\t// barWid is to center of stroke\n\t\t\tlet xShift, barWid, fullGap, colWid = xDim;\n\n\t\t\tlet strokeWidth = pxRound(series.width * pxRatio);\n\n\t\t\tlet multiPath = false;\n\n\t\t\tlet fillColors = null;\n\t\t\tlet fillPaths = null;\n\t\t\tlet strokeColors = null;\n\t\t\tlet strokePaths = null;\n\n\t\t\tif (dispFills != null && (strokeWidth == 0 || dispStrokes != null)) {\n\t\t\t\tmultiPath = true;\n\n\t\t\t\tfillColors = dispFills.values(u, seriesIdx, idx0, idx1);\n\t\t\t\tfillPaths = new Map();\n\t\t\t\t(new Set(fillColors)).forEach(color => {\n\t\t\t\t\tif (color != null)\n\t\t\t\t\t\tfillPaths.set(color, new Path2D());\n\t\t\t\t});\n\n\t\t\t\tif (strokeWidth > 0) {\n\t\t\t\t\tstrokeColors = dispStrokes.values(u, seriesIdx, idx0, idx1);\n\t\t\t\t\tstrokePaths = new Map();\n\t\t\t\t\t(new Set(strokeColors)).forEach(color => {\n\t\t\t\t\t\tif (color != null)\n\t\t\t\t\t\t\tstrokePaths.set(color, new Path2D());\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tlet { x0, size } = disp;\n\n\t\t\tif (x0 != null && size != null) {\n\t\t\t\t_align = 1;\n\t\t\t\tdataX = x0.values(u, seriesIdx, idx0, idx1);\n\n\t\t\t\tif (x0.unit == 2)\n\t\t\t\t\tdataX = dataX.map(pct => u.posToVal(xOff + pct * xDim, scaleX.key, true));\n\n\t\t\t\t// assumes uniform sizes, for now\n\t\t\t\tlet sizes = size.values(u, seriesIdx, idx0, idx1);\n\n\t\t\t\tif (size.unit == 2)\n\t\t\t\t\tbarWid = sizes[0] * xDim;\n\t\t\t\telse\n\t\t\t\t\tbarWid = valToPosX(sizes[0], scaleX, xDim, xOff) - valToPosX(0, scaleX, xDim, xOff); // assumes linear scale (delta from 0)\n\n\t\t\t\tcolWid = findColWidth(dataX, dataY, valToPosX, scaleX, xDim, xOff, colWid);\n\n\t\t\t\tlet gapWid = colWid - barWid;\n\t\t\t\tfullGap = gapWid + extraGap;\n\t\t\t}\n\t\t\telse {\n\t\t\t\tcolWid = findColWidth(dataX, dataY, valToPosX, scaleX, xDim, xOff, colWid);\n\n\t\t\t\tlet gapWid = colWid * gapFactor;\n\n\t\t\t\tfullGap = gapWid + extraGap;\n\t\t\t\tbarWid = colWid - fullGap;\n\t\t\t}\n\n\t\t\tif (fullGap < 1)\n\t\t\t\tfullGap = 0;\n\n\t\t\tif (strokeWidth >= barWid / 2)\n\t\t\t\tstrokeWidth = 0;\n\n\t\t\t// for small gaps, disable pixel snapping since gap inconsistencies become noticible and annoying\n\t\t\tif (fullGap < 5)\n\t\t\t\tpxRound = retArg0;\n\n\t\t\tlet insetStroke = fullGap > 0;\n\n\t\t\tlet rawBarWid = colWid - fullGap - (insetStroke ? strokeWidth : 0);\n\n\t\t\tbarWid = pxRound(clamp(rawBarWid, minWidth, maxWidth));\n\n\t\t\txShift = (_align == 0 ? barWid / 2 : _align == _dirX ? 0 : barWid) - _align * _dirX * ((_align == 0 ? extraGap / 2 : 0) + (insetStroke ? strokeWidth / 2 : 0));\n\n\n\t\t\tconst _paths = {stroke: null, fill: null, clip: null, band: null, gaps: null, flags: 0}; // disp, geom\n\n\t\t\tconst stroke = multiPath ? null : new Path2D();\n\n\t\t\tlet dataY0 = null;\n\n\t\t\tif (band != null)\n\t\t\t\tdataY0 = u.data[band.series[1]];\n\t\t\telse {\n\t\t\t\tlet { y0, y1 } = disp;\n\n\t\t\t\tif (y0 != null && y1 != null) {\n\t\t\t\t\tdataY = y1.values(u, seriesIdx, idx0, idx1);\n\t\t\t\t\tdataY0 = y0.values(u, seriesIdx, idx0, idx1);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tlet radVal = valRadius * barWid;\n\t\t\tlet radBase = baseRadius * barWid;\n\n\t\t\tfor (let i = _dirX == 1 ? idx0 : idx1; i >= idx0 && i <= idx1; i += _dirX) {\n\t\t\t\tlet yVal = dataY[i];\n\n\t\t\t\tif (yVal == null)\n\t\t\t\t\tcontinue;\n\n\t\t\t\tif (dataY0 != null) {\n\t\t\t\t\tlet yVal0 = dataY0[i] ?? 0;\n\n\t\t\t\t\tif (yVal - yVal0 == 0)\n\t\t\t\t\t\tcontinue;\n\n\t\t\t\t\tfillToY = valToPosY(yVal0, scaleY, yDim, yOff);\n\t\t\t\t}\n\n\t\t\t\tlet xVal = scaleX.distr != 2 || disp != null ? dataX[i] : i;\n\n\t\t\t\t// TODO: all xPos can be pre-computed once for all series in aligned set\n\t\t\t\tlet xPos = valToPosX(xVal, scaleX, xDim, xOff);\n\t\t\t\tlet yPos = valToPosY(ifNull(yVal, fillTo), scaleY, yDim, yOff);\n\n\t\t\t\tlet lft = pxRound(xPos - xShift);\n\t\t\t\tlet btm = pxRound(max(yPos, fillToY));\n\t\t\t\tlet top = pxRound(min(yPos, fillToY));\n\t\t\t\t// this includes the stroke\n\t\t\t\tlet barHgt = btm - top;\n\n\t\t\t\tif (yVal != null) { // && yVal != fillTo (0 height bar)\n\t\t\t\t\tlet rv = yVal < 0 ? radBase : radVal;\n\t\t\t\t\tlet rb = yVal < 0 ? radVal : radBase;\n\n\t\t\t\t\tif (multiPath) {\n\t\t\t\t\t\tif (strokeWidth > 0 && strokeColors[i] != null)\n\t\t\t\t\t\t\trect(strokePaths.get(strokeColors[i]), lft, top + floor(strokeWidth / 2), barWid, max(0, barHgt - strokeWidth), rv, rb);\n\n\t\t\t\t\t\tif (fillColors[i] != null)\n\t\t\t\t\t\t\trect(fillPaths.get(fillColors[i]), lft, top + floor(strokeWidth / 2), barWid, max(0, barHgt - strokeWidth), rv, rb);\n\t\t\t\t\t}\n\t\t\t\t\telse\n\t\t\t\t\t\trect(stroke, lft, top + floor(strokeWidth / 2), barWid, max(0, barHgt - strokeWidth), rv, rb);\n\n\t\t\t\t\teach(u, seriesIdx, i,\n\t\t\t\t\t\tlft - strokeWidth / 2,\n\t\t\t\t\t\ttop,\n\t\t\t\t\t\tbarWid + strokeWidth,\n\t\t\t\t\t\tbarHgt,\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (strokeWidth > 0)\n\t\t\t\t_paths.stroke = multiPath ? strokePaths : stroke;\n\t\t\telse if (!multiPath) {\n\t\t\t\t_paths._fill = series.width == 0 ? series._fill : series._stroke ?? series._fill;\n\t\t\t\t_paths.width = 0;\n\t\t\t}\n\n\t\t\t_paths.fill = multiPath ? fillPaths : stroke;\n\n\t\t\treturn _paths;\n\t\t});\n\t};\n}\n\nfunction splineInterp(interp, opts) {\n\tconst alignGaps = ifNull(opts?.alignGaps, 0);\n\n\treturn (u, seriesIdx, idx0, idx1) => {\n\t\treturn orient(u, seriesIdx, (series, dataX, dataY, scaleX, scaleY, valToPosX, valToPosY, xOff, yOff, xDim, yDim) => {\n\t\t\t[idx0, idx1] = nonNullIdxs(dataY, idx0, idx1);\n\n\t\t\tlet pxRound = series.pxRound;\n\n\t\t\tlet pixelForX = val => pxRound(valToPosX(val, scaleX, xDim, xOff));\n\t\t\tlet pixelForY = val => pxRound(valToPosY(val, scaleY, yDim, yOff));\n\n\t\t\tlet moveTo, bezierCurveTo, lineTo;\n\n\t\t\tif (scaleX.ori == 0) {\n\t\t\t\tmoveTo = moveToH;\n\t\t\t\tlineTo = lineToH;\n\t\t\t\tbezierCurveTo = bezierCurveToH;\n\t\t\t}\n\t\t\telse {\n\t\t\t\tmoveTo = moveToV;\n\t\t\t\tlineTo = lineToV;\n\t\t\t\tbezierCurveTo = bezierCurveToV;\n\t\t\t}\n\n\t\t\tconst dir = scaleX.dir * (scaleX.ori == 0 ? 1 : -1);\n\n\t\t\tlet firstXPos = pixelForX(dataX[dir == 1 ? idx0 : idx1]);\n\t\t\tlet prevXPos = firstXPos;\n\n\t\t\tlet xCoords = [];\n\t\t\tlet yCoords = [];\n\n\t\t\tfor (let i = dir == 1 ? idx0 : idx1; i >= idx0 && i <= idx1; i += dir) {\n\t\t\t\tlet yVal = dataY[i];\n\n\t\t\t\tif (yVal != null) {\n\t\t\t\t\tlet xVal = dataX[i];\n\t\t\t\t\tlet xPos = pixelForX(xVal);\n\n\t\t\t\t\txCoords.push(prevXPos = xPos);\n\t\t\t\t\tyCoords.push(pixelForY(dataY[i]));\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst _paths = {stroke: interp(xCoords, yCoords, moveTo, lineTo, bezierCurveTo, pxRound), fill: null, clip: null, band: null, gaps: null, flags: BAND_CLIP_FILL};\n\t\t\tconst stroke = _paths.stroke;\n\n\t\t\tlet [ bandFillDir, bandClipDir ] = bandFillClipDirs(u, seriesIdx);\n\n\t\t\tif (series.fill != null || bandFillDir != 0) {\n\t\t\t\tlet fill = _paths.fill = new Path2D(stroke);\n\n\t\t\t\tlet fillTo = series.fillTo(u, seriesIdx, series.min, series.max, bandFillDir);\n\t\t\t\tlet fillToY = pixelForY(fillTo);\n\n\t\t\t\tlineTo(fill, prevXPos, fillToY);\n\t\t\t\tlineTo(fill, firstXPos, fillToY);\n\t\t\t}\n\n\t\t\tif (!series.spanGaps) {\n\t\t\t//\tconsole.time('gaps');\n\t\t\t\tlet gaps = [];\n\n\t\t\t\tgaps.push(...findGaps(dataX, dataY, idx0, idx1, dir, pixelForX, alignGaps));\n\n\t\t\t//\tconsole.timeEnd('gaps');\n\n\t\t\t//\tconsole.log('gaps', JSON.stringify(gaps));\n\n\t\t\t\t_paths.gaps = gaps = series.gaps(u, seriesIdx, idx0, idx1, gaps);\n\n\t\t\t\t_paths.clip = clipGaps(gaps, scaleX.ori, xOff, yOff, xDim, yDim);\n\t\t\t}\n\n\t\t\tif (bandClipDir != 0) {\n\t\t\t\t_paths.band = bandClipDir == 2 ? [\n\t\t\t\t\tclipBandLine(u, seriesIdx, idx0, idx1, stroke, -1),\n\t\t\t\t\tclipBandLine(u, seriesIdx, idx0, idx1, stroke, 1),\n\t\t\t\t] : clipBandLine(u, seriesIdx, idx0, idx1, stroke, bandClipDir);\n\t\t\t}\n\n\t\t\treturn _paths;\n\n\t\t\t// if FEAT_PATHS: false in rollup.config.js\n\t\t\t//\tu.ctx.save();\n\t\t\t//\tu.ctx.beginPath();\n\t\t\t//\tu.ctx.rect(u.bbox.left, u.bbox.top, u.bbox.width, u.bbox.height);\n\t\t\t//\tu.ctx.clip();\n\t\t\t//\tu.ctx.strokeStyle = u.series[sidx].stroke;\n\t\t\t//\tu.ctx.stroke(stroke);\n\t\t\t//\tu.ctx.fillStyle = u.series[sidx].fill;\n\t\t\t//\tu.ctx.fill(fill);\n\t\t\t//\tu.ctx.restore();\n\t\t\t//\treturn null;\n\t\t});\n\t};\n}\n\nfunction monotoneCubic(opts) {\n\treturn splineInterp(_monotoneCubic, opts);\n}\n\n// Monotone Cubic Spline interpolation, adapted from the Chartist.js implementation:\n// https://github.com/gionkunz/chartist-js/blob/e7e78201bffe9609915e5e53cfafa29a5d6c49f9/src/scripts/interpolation.js#L240-L369\nfunction _monotoneCubic(xs, ys, moveTo, lineTo, bezierCurveTo, pxRound) {\n\tconst n = xs.length;\n\n\tif (n < 2)\n\t\treturn null;\n\n\tconst path = new Path2D();\n\n\tmoveTo(path, xs[0], ys[0]);\n\n\tif (n == 2)\n\t\tlineTo(path, xs[1], ys[1]);\n\telse {\n\t\tlet ms = Array(n),\n\t\t\tds = Array(n - 1),\n\t\t\tdys = Array(n - 1),\n\t\t\tdxs = Array(n - 1);\n\n\t\t// calc deltas and derivative\n\t\tfor (let i = 0; i < n - 1; i++) {\n\t\t\tdys[i] = ys[i + 1] - ys[i];\n\t\t\tdxs[i] = xs[i + 1] - xs[i];\n\t\t\tds[i] = dys[i] / dxs[i];\n\t\t}\n\n\t\t// determine desired slope (m) at each point using Fritsch-Carlson method\n\t\t// http://math.stackexchange.com/questions/45218/implementation-of-monotone-cubic-interpolation\n\t\tms[0] = ds[0];\n\n\t\tfor (let i = 1; i < n - 1; i++) {\n\t\t\tif (ds[i] === 0 || ds[i - 1] === 0 || (ds[i - 1] > 0) !== (ds[i] > 0))\n\t\t\t\tms[i] = 0;\n\t\t\telse {\n\t\t\t\tms[i] = 3 * (dxs[i - 1] + dxs[i]) / (\n\t\t\t\t\t(2 * dxs[i] + dxs[i - 1]) / ds[i - 1] +\n\t\t\t\t\t(dxs[i] + 2 * dxs[i - 1]) / ds[i]\n\t\t\t\t);\n\n\t\t\t\tif (!isFinite(ms[i]))\n\t\t\t\t\tms[i] = 0;\n\t\t\t}\n\t\t}\n\n\t\tms[n - 1] = ds[n - 2];\n\n\t\tfor (let i = 0; i < n - 1; i++) {\n\t\t\tbezierCurveTo(\n\t\t\t\tpath,\n\t\t\t\txs[i] + dxs[i] / 3,\n\t\t\t\tys[i] + ms[i] * dxs[i] / 3,\n\t\t\t\txs[i + 1] - dxs[i] / 3,\n\t\t\t\tys[i + 1] - ms[i + 1] * dxs[i] / 3,\n\t\t\t\txs[i + 1],\n\t\t\t\tys[i + 1],\n\t\t\t);\n\t\t}\n\t}\n\n\treturn path;\n}\n\nconst cursorPlots = new Set();\n\nfunction invalidateRects() {\n\tfor (let u of cursorPlots)\n\t\tu.syncRect(true);\n}\n\nif (domEnv) {\n\ton(resize, win, invalidateRects);\n\ton(scroll, win, invalidateRects, true);\n\ton(dppxchange, win, () => { uPlot.pxRatio = pxRatio; });\n}\n\nconst linearPath = linear() ;\nconst pointsPath = points() ;\n\nfunction setDefaults(d, xo, yo, initY) {\n\tlet d2 = initY ? [d[0], d[1]].concat(d.slice(2)) : [d[0]].concat(d.slice(1));\n\treturn d2.map((o, i) => setDefault(o, i, xo, yo));\n}\n\nfunction setDefaults2(d, xyo) {\n\treturn d.map((o, i) => i == 0 ? {} : assign({}, xyo, o)); // todo: assign() will not merge facet arrays\n}\n\nfunction setDefault(o, i, xo, yo) {\n\treturn assign({}, (i == 0 ? xo : yo), o);\n}\n\nfunction snapNumX(self, dataMin, dataMax) {\n\treturn dataMin == null ? nullNullTuple : [dataMin, dataMax];\n}\n\nconst snapTimeX = snapNumX;\n\n// this ensures that non-temporal/numeric y-axes get multiple-snapped padding added above/below\n// TODO: also account for incrs when snapping to ensure top of axis gets a tick & value\nfunction snapNumY(self, dataMin, dataMax) {\n\treturn dataMin == null ? nullNullTuple : rangeNum(dataMin, dataMax, rangePad, true);\n}\n\nfunction snapLogY(self, dataMin, dataMax, scale) {\n\treturn dataMin == null ? nullNullTuple : rangeLog(dataMin, dataMax, self.scales[scale].log, false);\n}\n\nconst snapLogX = snapLogY;\n\nfunction snapAsinhY(self, dataMin, dataMax, scale) {\n\treturn dataMin == null ? nullNullTuple : rangeAsinh(dataMin, dataMax, self.scales[scale].log, false);\n}\n\nconst snapAsinhX = snapAsinhY;\n\n// dim is logical (getClientBoundingRect) pixels, not canvas pixels\nfunction findIncr(minVal, maxVal, incrs, dim, minSpace) {\n\tlet intDigits = max(numIntDigits(minVal), numIntDigits(maxVal));\n\n\tlet delta = maxVal - minVal;\n\n\tlet incrIdx = closestIdx((minSpace / dim) * delta, incrs);\n\n\tdo {\n\t\tlet foundIncr = incrs[incrIdx];\n\t\tlet foundSpace = dim * foundIncr / delta;\n\n\t\tif (foundSpace >= minSpace && intDigits + (foundIncr < 5 ? fixedDec.get(foundIncr) : 0) <= 17)\n\t\t\treturn [foundIncr, foundSpace];\n\t} while (++incrIdx < incrs.length);\n\n\treturn [0, 0];\n}\n\nfunction pxRatioFont(font) {\n\tlet fontSize, fontSizeCss;\n\tfont = font.replace(/(\\d+)px/, (m, p1) => (fontSize = round((fontSizeCss = +p1) * pxRatio)) + 'px');\n\treturn [font, fontSize, fontSizeCss];\n}\n\nfunction syncFontSize(axis) {\n\tif (axis.show) {\n\t\t[axis.font, axis.labelFont].forEach(f => {\n\t\t\tlet size = roundDec(f[2] * pxRatio, 1);\n\t\t\tf[0] = f[0].replace(/[0-9.]+px/, size + 'px');\n\t\t\tf[1] = size;\n\t\t});\n\t}\n}\n\nfunction uPlot(opts, data, then) {\n\tconst self = {\n\t\tmode: ifNull(opts.mode, 1),\n\t};\n\n\tconst mode = self.mode;\n\n\tfunction getHPos(val, scale, dim, off) {\n\t\tlet pct = scale.valToPct(val);\n\t\treturn off + dim * (scale.dir == -1 ? (1 - pct) : pct);\n\t}\n\n\tfunction getVPos(val, scale, dim, off) {\n\t\tlet pct = scale.valToPct(val);\n\t\treturn off + dim * (scale.dir == -1 ? pct : (1 - pct));\n\t}\n\n\tfunction getPos(val, scale, dim, off) {\n\t\treturn scale.ori == 0 ? getHPos(val, scale, dim, off) : getVPos(val, scale, dim, off);\n\t}\n\n\tself.valToPosH = getHPos;\n\tself.valToPosV = getVPos;\n\n\tlet ready = false;\n\tself.status = 0;\n\n\tconst root = self.root = placeDiv(UPLOT);\n\n\tif (opts.id != null)\n\t\troot.id = opts.id;\n\n\taddClass(root, opts.class);\n\n\tif (opts.title) {\n\t\tlet title = placeDiv(TITLE, root);\n\t\ttitle.textContent = opts.title;\n\t}\n\n\tconst can = placeTag(\"canvas\");\n\tconst ctx = self.ctx = can.getContext(\"2d\");\n\n\tconst wrap = placeDiv(WRAP, root);\n\n\ton(\"click\", wrap, e => {\n\t\tif (e.target === over) {\n\t\t\tlet didDrag = mouseLeft1 != mouseLeft0 || mouseTop1 != mouseTop0;\n\t\t\tdidDrag && drag.click(self, e);\n\t\t}\n\t}, true);\n\n\tconst under = self.under = placeDiv(UNDER, wrap);\n\twrap.appendChild(can);\n\tconst over = self.over = placeDiv(OVER, wrap);\n\n\topts = copy(opts);\n\n\tconst pxAlign = +ifNull(opts.pxAlign, 1);\n\n\tconst pxRound = pxRoundGen(pxAlign);\n\n\t(opts.plugins || []).forEach(p => {\n\t\tif (p.opts)\n\t\t\topts = p.opts(self, opts) || opts;\n\t});\n\n\tconst ms = opts.ms || 1e-3;\n\n\tconst series = self.series = mode == 1 ?\n\t\tsetDefaults(opts.series || [], xSeriesOpts, ySeriesOpts, false) :\n\t\tsetDefaults2(opts.series || [null], xySeriesOpts);\n\tconst axes = self.axes = setDefaults(opts.axes || [], xAxisOpts, yAxisOpts, true);\n\tconst scales = self.scales = {};\n\tconst bands = self.bands = opts.bands || [];\n\n\tbands.forEach(b => {\n\t\tb.fill = fnOrSelf(b.fill || null);\n\t\tb.dir = ifNull(b.dir, -1);\n\t});\n\n\tconst xScaleKey = mode == 2 ? series[1].facets[0].scale : series[0].scale;\n\n\tconst drawOrderMap = {\n\t\taxes: drawAxesGrid,\n\t\tseries: drawSeries,\n\t};\n\n\tconst drawOrder = (opts.drawOrder || [\"axes\", \"series\"]).map(key => drawOrderMap[key]);\n\n\tfunction initValToPct(sc) {\n\t\tconst getVal = (\n\t\t\tsc.distr == 3 ? val => log10(val > 0 ? val : sc.clamp(self, val, sc.min, sc.max, sc.key)) :\n\t\t\tsc.distr == 4 ? val => asinh(val, sc.asinh) :\n\t\t\tsc.distr == 100 ? val => sc.fwd(val) :\n\t\t\tval => val\n\t\t);\n\n\t\treturn val => {\n\t\t\tlet _val = getVal(val);\n\t\t\tlet { _min, _max } = sc;\n\t\t\tlet delta = _max - _min;\n\t\t\treturn (_val - _min) / delta;\n\t\t};\n\t}\n\n\tfunction initScale(scaleKey) {\n\t\tlet sc = scales[scaleKey];\n\n\t\tif (sc == null) {\n\t\t\tlet scaleOpts = (opts.scales || EMPTY_OBJ)[scaleKey] || EMPTY_OBJ;\n\n\t\t\tif (scaleOpts.from != null) {\n\t\t\t\t// ensure parent is initialized\n\t\t\t\tinitScale(scaleOpts.from);\n\t\t\t\t// dependent scales inherit\n\t\t\t\tlet sc = assign({}, scales[scaleOpts.from], scaleOpts, {key: scaleKey});\n\t\t\t\tsc.valToPct = initValToPct(sc);\n\t\t\t\tscales[scaleKey] = sc;\n\t\t\t}\n\t\t\telse {\n\t\t\t\tsc = scales[scaleKey] = assign({}, (scaleKey == xScaleKey ? xScaleOpts : yScaleOpts), scaleOpts);\n\n\t\t\t\tsc.key = scaleKey;\n\n\t\t\t\tlet isTime = sc.time;\n\n\t\t\t\tlet rn = sc.range;\n\n\t\t\t\tlet rangeIsArr = isArr(rn);\n\n\t\t\t\tif (scaleKey != xScaleKey || (mode == 2 && !isTime)) {\n\t\t\t\t\t// if range array has null limits, it should be auto\n\t\t\t\t\tif (rangeIsArr && (rn[0] == null || rn[1] == null)) {\n\t\t\t\t\t\trn = {\n\t\t\t\t\t\t\tmin: rn[0] == null ? autoRangePart : {\n\t\t\t\t\t\t\t\tmode: 1,\n\t\t\t\t\t\t\t\thard: rn[0],\n\t\t\t\t\t\t\t\tsoft: rn[0],\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tmax: rn[1] == null ? autoRangePart : {\n\t\t\t\t\t\t\t\tmode: 1,\n\t\t\t\t\t\t\t\thard: rn[1],\n\t\t\t\t\t\t\t\tsoft: rn[1],\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t};\n\t\t\t\t\t\trangeIsArr = false;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (!rangeIsArr && isObj(rn)) {\n\t\t\t\t\t\tlet cfg = rn;\n\t\t\t\t\t\t// this is similar to snapNumY\n\t\t\t\t\t\trn = (self, dataMin, dataMax) => dataMin == null ? nullNullTuple : rangeNum(dataMin, dataMax, cfg);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tsc.range = fnOrSelf(rn || (isTime ? snapTimeX : scaleKey == xScaleKey ?\n\t\t\t\t\t(sc.distr == 3 ? snapLogX : sc.distr == 4 ? snapAsinhX : snapNumX) :\n\t\t\t\t\t(sc.distr == 3 ? snapLogY : sc.distr == 4 ? snapAsinhY : snapNumY)\n\t\t\t\t));\n\n\t\t\t\tsc.auto = fnOrSelf(rangeIsArr ? false : sc.auto);\n\n\t\t\t\tsc.clamp = fnOrSelf(sc.clamp || clampScale);\n\n\t\t\t\t// caches for expensive ops like asinh() & log()\n\t\t\t\tsc._min = sc._max = null;\n\n\t\t\t\tsc.valToPct = initValToPct(sc);\n\t\t\t}\n\t\t}\n\t}\n\n\tinitScale(\"x\");\n\tinitScale(\"y\");\n\n\t// TODO: init scales from facets in mode: 2\n\tif (mode == 1) {\n\t\tseries.forEach(s => {\n\t\t\tinitScale(s.scale);\n\t\t});\n\t}\n\n\taxes.forEach(a => {\n\t\tinitScale(a.scale);\n\t});\n\n\tfor (let k in opts.scales)\n\t\tinitScale(k);\n\n\tconst scaleX = scales[xScaleKey];\n\n\tconst xScaleDistr = scaleX.distr;\n\n\tlet valToPosX, valToPosY;\n\n\tif (scaleX.ori == 0) {\n\t\taddClass(root, ORI_HZ);\n\t\tvalToPosX = getHPos;\n\t\tvalToPosY = getVPos;\n\t\t/*\n\t\tupdOriDims = () => {\n\t\t\txDimCan = plotWid;\n\t\t\txOffCan = plotLft;\n\t\t\tyDimCan = plotHgt;\n\t\t\tyOffCan = plotTop;\n\n\t\t\txDimCss = plotWidCss;\n\t\t\txOffCss = plotLftCss;\n\t\t\tyDimCss = plotHgtCss;\n\t\t\tyOffCss = plotTopCss;\n\t\t};\n\t\t*/\n\t}\n\telse {\n\t\taddClass(root, ORI_VT);\n\t\tvalToPosX = getVPos;\n\t\tvalToPosY = getHPos;\n\t\t/*\n\t\tupdOriDims = () => {\n\t\t\txDimCan = plotHgt;\n\t\t\txOffCan = plotTop;\n\t\t\tyDimCan = plotWid;\n\t\t\tyOffCan = plotLft;\n\n\t\t\txDimCss = plotHgtCss;\n\t\t\txOffCss = plotTopCss;\n\t\t\tyDimCss = plotWidCss;\n\t\t\tyOffCss = plotLftCss;\n\t\t};\n\t\t*/\n\t}\n\n\tconst pendScales = {};\n\n\t// explicitly-set initial scales\n\tfor (let k in scales) {\n\t\tlet sc = scales[k];\n\n\t\tif (sc.min != null || sc.max != null) {\n\t\t\tpendScales[k] = {min: sc.min, max: sc.max};\n\t\t\tsc.min = sc.max = null;\n\t\t}\n\t}\n\n//\tself.tz = opts.tz || Intl.DateTimeFormat().resolvedOptions().timeZone;\n\tconst _tzDate = (opts.tzDate || (ts => new Date(round(ts / ms))));\n\tconst _fmtDate = (opts.fmtDate || fmtDate);\n\n\tconst _timeAxisSplits = (ms == 1 ? timeAxisSplitsMs(_tzDate) : timeAxisSplitsS(_tzDate));\n\tconst _timeAxisVals = timeAxisVals(_tzDate, timeAxisStamps((ms == 1 ? _timeAxisStampsMs : _timeAxisStampsS), _fmtDate));\n\tconst _timeSeriesVal = timeSeriesVal(_tzDate, timeSeriesStamp(_timeSeriesStamp, _fmtDate));\n\n\tconst activeIdxs = [];\n\n\tconst legend = (self.legend = assign({}, legendOpts, opts.legend));\n\tconst cursor = (self.cursor = assign({}, cursorOpts, {drag: {y: mode == 2}}, opts.cursor));\n\tconst showLegend = legend.show;\n\tconst showCursor = cursor.show;\n\tconst markers = legend.markers;\n\n\t{\n\t\tlegend.idxs = activeIdxs;\n\n\t\tmarkers.width = fnOrSelf(markers.width);\n\t\tmarkers.dash = fnOrSelf(markers.dash);\n\t\tmarkers.stroke = fnOrSelf(markers.stroke);\n\t\tmarkers.fill = fnOrSelf(markers.fill);\n\t}\n\n\tlet legendTable;\n\tlet legendHead;\n\tlet legendBody;\n\tlet legendRows = [];\n\tlet legendCells = [];\n\tlet legendCols;\n\tlet multiValLegend = false;\n\tlet NULL_LEGEND_VALUES = {};\n\n\tif (legend.live) {\n\t\tconst getMultiVals = series[1] ? series[1].values : null;\n\t\tmultiValLegend = getMultiVals != null;\n\t\tlegendCols = multiValLegend ? getMultiVals(self, 1, 0) : {_: 0};\n\n\t\tfor (let k in legendCols)\n\t\t\tNULL_LEGEND_VALUES[k] = LEGEND_DISP;\n\t}\n\n\tif (showLegend) {\n\t\tlegendTable = placeTag(\"table\", LEGEND, root);\n\t\tlegendBody = placeTag(\"tbody\", null, legendTable);\n\n\t\t// allows legend to be moved out of root\n\t\tlegend.mount(self, legendTable);\n\n\t\tif (multiValLegend) {\n\t\t\tlegendHead = placeTag(\"thead\", null, legendTable, legendBody);\n\n\t\t\tlet head = placeTag(\"tr\", null, legendHead);\n\t\t\tplaceTag(\"th\", null, head);\n\n\t\t\tfor (var key in legendCols)\n\t\t\t\tplaceTag(\"th\", LEGEND_LABEL, head).textContent = key;\n\t\t}\n\t\telse {\n\t\t\taddClass(legendTable, LEGEND_INLINE);\n\t\t\tlegend.live && addClass(legendTable, LEGEND_LIVE);\n\t\t}\n\t}\n\n\tconst son = {show: true};\n\tconst soff = {show: false};\n\n\tfunction initLegendRow(s, i) {\n\t\tif (i == 0 && (multiValLegend || !legend.live || mode == 2))\n\t\t\treturn nullNullTuple;\n\n\t\tlet cells = [];\n\n\t\tlet row = placeTag(\"tr\", LEGEND_SERIES, legendBody, legendBody.childNodes[i]);\n\n\t\taddClass(row, s.class);\n\n\t\tif (!s.show)\n\t\t\taddClass(row, OFF);\n\n\t\tlet label = placeTag(\"th\", null, row);\n\n\t\tif (markers.show) {\n\t\t\tlet indic = placeDiv(LEGEND_MARKER, label);\n\n\t\t\tif (i > 0) {\n\t\t\t\tlet width = markers.width(self, i);\n\n\t\t\t\tif (width)\n\t\t\t\t\tindic.style.border = width + \"px \" + markers.dash(self, i) + \" \" + markers.stroke(self, i);\n\n\t\t\t\tindic.style.background = markers.fill(self, i);\n\t\t\t}\n\t\t}\n\n\t\tlet text = placeDiv(LEGEND_LABEL, label);\n\n\t\tif (s.label instanceof HTMLElement)\n\t\t\ttext.appendChild(s.label);\n\t\telse\n\t\t\ttext.textContent = s.label;\n\n\t\tif (i > 0) {\n\t\t\tif (!markers.show)\n\t\t\t\ttext.style.color = s.width > 0 ? markers.stroke(self, i) : markers.fill(self, i);\n\n\t\t\tonMouse(\"click\", label, e => {\n\t\t\t\tif (cursor._lock)\n\t\t\t\t\treturn;\n\n\t\t\t\tsetCursorEvent(e);\n\n\t\t\t\tlet seriesIdx = series.indexOf(s);\n\n\t\t\t\tif ((e.ctrlKey || e.metaKey) != legend.isolate) {\n\t\t\t\t\t// if any other series is shown, isolate this one. else show all\n\t\t\t\t\tlet isolate = series.some((s, i) => i > 0 && i != seriesIdx && s.show);\n\n\t\t\t\t\tseries.forEach((s, i) => {\n\t\t\t\t\t\ti > 0 && setSeries(i, isolate ? (i == seriesIdx ? son : soff) : son, true, syncOpts.setSeries);\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t\tsetSeries(seriesIdx, {show: !s.show}, true, syncOpts.setSeries);\n\t\t\t}, false);\n\n\t\t\tif (cursorFocus) {\n\t\t\t\tonMouse(mouseenter, label, e => {\n\t\t\t\t\tif (cursor._lock)\n\t\t\t\t\t\treturn;\n\n\t\t\t\t\tsetCursorEvent(e);\n\n\t\t\t\t\tsetSeries(series.indexOf(s), FOCUS_TRUE, true, syncOpts.setSeries);\n\t\t\t\t}, false);\n\t\t\t}\n\t\t}\n\n\t\tfor (var key in legendCols) {\n\t\t\tlet v = placeTag(\"td\", LEGEND_VALUE, row);\n\t\t\tv.textContent = \"--\";\n\t\t\tcells.push(v);\n\t\t}\n\n\t\treturn [row, cells];\n\t}\n\n\tconst mouseListeners = new Map();\n\n\tfunction onMouse(ev, targ, fn, onlyTarg = true) {\n\t\tconst targListeners = mouseListeners.get(targ) || {};\n\t\tconst listener = cursor.bind[ev](self, targ, fn, onlyTarg);\n\n\t\tif (listener) {\n\t\t\ton(ev, targ, targListeners[ev] = listener);\n\t\t\tmouseListeners.set(targ, targListeners);\n\t\t}\n\t}\n\n\tfunction offMouse(ev, targ, fn) {\n\t\tconst targListeners = mouseListeners.get(targ) || {};\n\n\t\tfor (let k in targListeners) {\n\t\t\tif (ev == null || k == ev) {\n\t\t\t\toff(k, targ, targListeners[k]);\n\t\t\t\tdelete targListeners[k];\n\t\t\t}\n\t\t}\n\n\t\tif (ev == null)\n\t\t\tmouseListeners.delete(targ);\n\t}\n\n\tlet fullWidCss = 0;\n\tlet fullHgtCss = 0;\n\n\tlet plotWidCss = 0;\n\tlet plotHgtCss = 0;\n\n\t// plot margins to account for axes\n\tlet plotLftCss = 0;\n\tlet plotTopCss = 0;\n\n\t// previous values for diffing\n\tlet _plotLftCss = plotLftCss;\n\tlet _plotTopCss = plotTopCss;\n\tlet _plotWidCss = plotWidCss;\n\tlet _plotHgtCss = plotHgtCss;\n\n\n\tlet plotLft = 0;\n\tlet plotTop = 0;\n\tlet plotWid = 0;\n\tlet plotHgt = 0;\n\n\tself.bbox = {};\n\n\tlet shouldSetScales = false;\n\tlet shouldSetSize = false;\n\tlet shouldConvergeSize = false;\n\tlet shouldSetCursor = false;\n\tlet shouldSetSelect = false;\n\tlet shouldSetLegend = false;\n\n\tfunction _setSize(width, height, force) {\n\t\tif (force || (width != self.width || height != self.height))\n\t\t\tcalcSize(width, height);\n\n\t\tresetYSeries(false);\n\n\t\tshouldConvergeSize = true;\n\t\tshouldSetSize = true;\n\n\t\tcommit();\n\t}\n\n\tfunction calcSize(width, height) {\n\t//\tlog(\"calcSize()\", arguments);\n\n\t\tself.width = fullWidCss = plotWidCss = width;\n\t\tself.height = fullHgtCss = plotHgtCss = height;\n\t\tplotLftCss = plotTopCss = 0;\n\n\t\tcalcPlotRect();\n\t\tcalcAxesRects();\n\n\t\tlet bb = self.bbox;\n\n\t\tplotLft = bb.left = incrRound(plotLftCss * pxRatio, 0.5);\n\t\tplotTop = bb.top = incrRound(plotTopCss * pxRatio, 0.5);\n\t\tplotWid = bb.width = incrRound(plotWidCss * pxRatio, 0.5);\n\t\tplotHgt = bb.height = incrRound(plotHgtCss * pxRatio, 0.5);\n\n\t//\tupdOriDims();\n\t}\n\n\t// ensures size calc convergence\n\tconst CYCLE_LIMIT = 3;\n\n\tfunction convergeSize() {\n\t\tlet converged = false;\n\n\t\tlet cycleNum = 0;\n\n\t\twhile (!converged) {\n\t\t\tcycleNum++;\n\n\t\t\tlet axesConverged = axesCalc(cycleNum);\n\t\t\tlet paddingConverged = paddingCalc(cycleNum);\n\n\t\t\tconverged = cycleNum == CYCLE_LIMIT || (axesConverged && paddingConverged);\n\n\t\t\tif (!converged) {\n\t\t\t\tcalcSize(self.width, self.height);\n\t\t\t\tshouldSetSize = true;\n\t\t\t}\n\t\t}\n\t}\n\n\tfunction setSize({width, height}) {\n\t\t_setSize(width, height);\n\t}\n\n\tself.setSize = setSize;\n\n\t// accumulate axis offsets, reduce canvas width\n\tfunction calcPlotRect() {\n\t\t// easements for edge labels\n\t\tlet hasTopAxis = false;\n\t\tlet hasBtmAxis = false;\n\t\tlet hasRgtAxis = false;\n\t\tlet hasLftAxis = false;\n\n\t\taxes.forEach((axis, i) => {\n\t\t\tif (axis.show && axis._show) {\n\t\t\t\tlet {side, _size} = axis;\n\t\t\t\tlet isVt = side % 2;\n\t\t\t\tlet labelSize = axis.label != null ? axis.labelSize : 0;\n\n\t\t\t\tlet fullSize = _size + labelSize;\n\n\t\t\t\tif (fullSize > 0) {\n\t\t\t\t\tif (isVt) {\n\t\t\t\t\t\tplotWidCss -= fullSize;\n\n\t\t\t\t\t\tif (side == 3) {\n\t\t\t\t\t\t\tplotLftCss += fullSize;\n\t\t\t\t\t\t\thasLftAxis = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse\n\t\t\t\t\t\t\thasRgtAxis = true;\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tplotHgtCss -= fullSize;\n\n\t\t\t\t\t\tif (side == 0) {\n\t\t\t\t\t\t\tplotTopCss += fullSize;\n\t\t\t\t\t\t\thasTopAxis = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse\n\t\t\t\t\t\t\thasBtmAxis = true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\tsidesWithAxes[0] = hasTopAxis;\n\t\tsidesWithAxes[1] = hasRgtAxis;\n\t\tsidesWithAxes[2] = hasBtmAxis;\n\t\tsidesWithAxes[3] = hasLftAxis;\n\n\t\t// hz padding\n\t\tplotWidCss -= _padding[1] + _padding[3];\n\t\tplotLftCss += _padding[3];\n\n\t\t// vt padding\n\t\tplotHgtCss -= _padding[2] + _padding[0];\n\t\tplotTopCss += _padding[0];\n\t}\n\n\tfunction calcAxesRects() {\n\t\t// will accum +\n\t\tlet off1 = plotLftCss + plotWidCss;\n\t\tlet off2 = plotTopCss + plotHgtCss;\n\t\t// will accum -\n\t\tlet off3 = plotLftCss;\n\t\tlet off0 = plotTopCss;\n\n\t\tfunction incrOffset(side, size) {\n\t\t\tswitch (side) {\n\t\t\t\tcase 1: off1 += size; return off1 - size;\n\t\t\t\tcase 2: off2 += size; return off2 - size;\n\t\t\t\tcase 3: off3 -= size; return off3 + size;\n\t\t\t\tcase 0: off0 -= size; return off0 + size;\n\t\t\t}\n\t\t}\n\n\t\taxes.forEach((axis, i) => {\n\t\t\tif (axis.show && axis._show) {\n\t\t\t\tlet side = axis.side;\n\n\t\t\t\taxis._pos = incrOffset(side, axis._size);\n\n\t\t\t\tif (axis.label != null)\n\t\t\t\t\taxis._lpos = incrOffset(side, axis.labelSize);\n\t\t\t}\n\t\t});\n\t}\n\n\tif (cursor.dataIdx == null) {\n\t\tlet hov = cursor.hover;\n\n\t\tlet skip = hov.skip = new Set(hov.skip ?? []);\n\t\tskip.add(void 0); // alignment artifacts\n\t\tlet prox = hov.prox = fnOrSelf(hov.prox);\n\t\tlet bias = hov.bias ??= 0;\n\n\t\t// TODO: only scan between in-view idxs (i0, i1)\n\t\tcursor.dataIdx = (self, seriesIdx, cursorIdx, valAtPosX) => {\n\t\t\tif (seriesIdx == 0)\n\t\t\t\treturn cursorIdx;\n\n\t\t\tlet idx2 = cursorIdx;\n\n\t\t\tlet _prox = prox(self, seriesIdx, cursorIdx, valAtPosX) ?? inf;\n\t\t\tlet withProx = _prox >= 0 && _prox < inf;\n\t\t\tlet xDim = scaleX.ori == 0 ? plotWidCss : plotHgtCss;\n\t\t\tlet cursorLft = cursor.left;\n\n\t\t\tlet xValues = data[0];\n\t\t\tlet yValues = data[seriesIdx];\n\n\t\t\tif (skip.has(yValues[cursorIdx])) {\n\t\t\t\tidx2 = null;\n\n\t\t\t\tlet nonNullLft = null,\n\t\t\t\t\tnonNullRgt = null,\n\t\t\t\t\tj;\n\n\t\t\t\tif (bias == 0 || bias == -1) {\n\t\t\t\t\tj = cursorIdx;\n\t\t\t\t\twhile (nonNullLft == null && j-- > 0) {\n\t\t\t\t\t\tif (!skip.has(yValues[j]))\n\t\t\t\t\t\t\tnonNullLft = j;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (bias == 0 || bias == 1) {\n\t\t\t\t\tj = cursorIdx;\n\t\t\t\t\twhile (nonNullRgt == null && j++ < yValues.length) {\n\t\t\t\t\t\tif (!skip.has(yValues[j]))\n\t\t\t\t\t\t\tnonNullRgt = j;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (nonNullLft != null || nonNullRgt != null) {\n\t\t\t\t\tif (withProx) {\n\t\t\t\t\t\tlet lftPos = nonNullLft == null ? -Infinity : valToPosX(xValues[nonNullLft], scaleX, xDim, 0);\n\t\t\t\t\t\tlet rgtPos = nonNullRgt == null ? Infinity : valToPosX(xValues[nonNullRgt], scaleX, xDim, 0);\n\n\t\t\t\t\t\tlet lftDelta = cursorLft - lftPos;\n\t\t\t\t\t\tlet rgtDelta = rgtPos - cursorLft;\n\n\t\t\t\t\t\tif (lftDelta <= rgtDelta) {\n\t\t\t\t\t\t\tif (lftDelta <= _prox)\n\t\t\t\t\t\t\t\tidx2 = nonNullLft;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tif (rgtDelta <= _prox)\n\t\t\t\t\t\t\t\tidx2 = nonNullRgt;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tidx2 =\n\t\t\t\t\t\t\tnonNullRgt == null ? nonNullLft :\n\t\t\t\t\t\t\tnonNullLft == null ? nonNullRgt :\n\t\t\t\t\t\t\tcursorIdx - nonNullLft <= nonNullRgt - cursorIdx ? nonNullLft : nonNullRgt;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\telse if (withProx) {\n\t\t\t\tlet dist = abs(cursorLft - valToPosX(xValues[cursorIdx], scaleX, xDim, 0));\n\n\t\t\t\tif (dist > _prox)\n\t\t\t\t\tidx2 = null;\n\t\t\t}\n\n\t\t\treturn idx2;\n\t\t};\n\t}\n\n\tconst setCursorEvent = e => { cursor.event = e; };\n\n\tcursor.idxs = activeIdxs;\n\n\tcursor._lock = false;\n\n\tlet points = cursor.points;\n\n\tpoints.show = fnOrSelf(points.show);\n\tpoints.size = fnOrSelf(points.size);\n\tpoints.stroke = fnOrSelf(points.stroke);\n\tpoints.width = fnOrSelf(points.width);\n\tpoints.fill = fnOrSelf(points.fill);\n\n\tconst focus = self.focus = assign({}, opts.focus || {alpha: 0.3}, cursor.focus);\n\n\tconst cursorFocus = focus.prox >= 0;\n\tconst cursorOnePt = cursorFocus && points.one;\n\n\t// series-intersection markers\n\tlet cursorPts = [];\n\t// position caches in CSS pixels\n\tlet cursorPtsLft = [];\n\tlet cursorPtsTop = [];\n\n\tfunction initCursorPt(s, si) {\n\t\tlet pt = points.show(self, si);\n\n\t\tif (pt instanceof HTMLElement) {\n\t\t\taddClass(pt, CURSOR_PT);\n\t\t\taddClass(pt, s.class);\n\t\t\telTrans(pt, -10, -10, plotWidCss, plotHgtCss);\n\t\t\tover.insertBefore(pt, cursorPts[si]);\n\n\t\t\treturn pt;\n\t\t}\n\t}\n\n\tfunction initSeries(s, i) {\n\t\tif (mode == 1 || i > 0) {\n\t\t\tlet isTime = mode == 1 && scales[s.scale].time;\n\n\t\t\tlet sv = s.value;\n\t\t\ts.value = isTime ? (isStr(sv) ? timeSeriesVal(_tzDate, timeSeriesStamp(sv, _fmtDate)) : sv || _timeSeriesVal) : sv || numSeriesVal;\n\t\t\ts.label = s.label || (isTime ? timeSeriesLabel : numSeriesLabel);\n\t\t}\n\n\t\tif (cursorOnePt || i > 0) {\n\t\t\ts.width = s.width == null ? 1 : s.width;\n\t\t\ts.paths = s.paths || linearPath || retNull;\n\t\t\ts.fillTo = fnOrSelf(s.fillTo || seriesFillTo);\n\t\t\ts.pxAlign = +ifNull(s.pxAlign, pxAlign);\n\t\t\ts.pxRound = pxRoundGen(s.pxAlign);\n\n\t\t\ts.stroke = fnOrSelf(s.stroke || null);\n\t\t\ts.fill = fnOrSelf(s.fill || null);\n\t\t\ts._stroke = s._fill = s._paths = s._focus = null;\n\n\t\t\tlet _ptDia = ptDia(max(1, s.width), 1);\n\t\t\tlet points = s.points = assign({}, {\n\t\t\t\tsize: _ptDia,\n\t\t\t\twidth: max(1, _ptDia * .2),\n\t\t\t\tstroke: s.stroke,\n\t\t\t\tspace: _ptDia * 2,\n\t\t\t\tpaths: pointsPath,\n\t\t\t\t_stroke: null,\n\t\t\t\t_fill: null,\n\t\t\t}, s.points);\n\t\t\tpoints.show = fnOrSelf(points.show);\n\t\t\tpoints.filter = fnOrSelf(points.filter);\n\t\t\tpoints.fill = fnOrSelf(points.fill);\n\t\t\tpoints.stroke = fnOrSelf(points.stroke);\n\t\t\tpoints.paths = fnOrSelf(points.paths);\n\t\t\tpoints.pxAlign = s.pxAlign;\n\t\t}\n\n\t\tif (showLegend) {\n\t\t\tlet rowCells = initLegendRow(s, i);\n\t\t\tlegendRows.splice(i, 0, rowCells[0]);\n\t\t\tlegendCells.splice(i, 0, rowCells[1]);\n\t\t\tlegend.values.push(null);\t// NULL_LEGEND_VALS not yet avil here :(\n\t\t}\n\n\t\tif (showCursor) {\n\t\t\tactiveIdxs.splice(i, 0, null);\n\n\t\t\tlet pt = null;\n\n\t\t\tif (cursorOnePt) {\n\t\t\t\tif (i == 0)\n\t\t\t\t\tpt = initCursorPt(s, i);\n\t\t\t}\n\t\t\telse if (i > 0)\n\t\t\t\tpt = initCursorPt(s, i);\n\n\t\t\tcursorPts.splice(i, 0, pt);\n\t\t\tcursorPtsLft.splice(i, 0, 0);\n\t\t\tcursorPtsTop.splice(i, 0, 0);\n\t\t}\n\n\t\tfire(\"addSeries\", i);\n\t}\n\n\tfunction addSeries(opts, si) {\n\t\tsi = si == null ? series.length : si;\n\n\t\topts = mode == 1 ? setDefault(opts, si, xSeriesOpts, ySeriesOpts) : setDefault(opts, si, {}, xySeriesOpts);\n\n\t\tseries.splice(si, 0, opts);\n\t\tinitSeries(series[si], si);\n\t}\n\n\tself.addSeries = addSeries;\n\n\tfunction delSeries(i) {\n\t\tseries.splice(i, 1);\n\n\t\tif (showLegend) {\n\t\t\tlegend.values.splice(i, 1);\n\n\t\t\tlegendCells.splice(i, 1);\n\t\t\tlet tr = legendRows.splice(i, 1)[0];\n\t\t\toffMouse(null, tr.firstChild);\n\t\t\ttr.remove();\n\t\t}\n\n\t\tif (showCursor) {\n\t\t\tactiveIdxs.splice(i, 1);\n\t\t\tcursorPts.splice(i, 1)[0].remove();\n\t\t\tcursorPtsLft.splice(i, 1);\n\t\t\tcursorPtsTop.splice(i, 1);\n\t\t}\n\n\t\t// TODO: de-init no-longer-needed scales?\n\n\t\tfire(\"delSeries\", i);\n\t}\n\n\tself.delSeries = delSeries;\n\n\tconst sidesWithAxes = [false, false, false, false];\n\n\tfunction initAxis(axis, i) {\n\t\taxis._show = axis.show;\n\n\t\tif (axis.show) {\n\t\t\tlet isVt = axis.side % 2;\n\n\t\t\tlet sc = scales[axis.scale];\n\n\t\t\t// this can occur if all series specify non-default scales\n\t\t\tif (sc == null) {\n\t\t\t\taxis.scale = isVt ? series[1].scale : xScaleKey;\n\t\t\t\tsc = scales[axis.scale];\n\t\t\t}\n\n\t\t\t// also set defaults for incrs & values based on axis distr\n\t\t\tlet isTime = sc.time;\n\n\t\t\taxis.size = fnOrSelf(axis.size);\n\t\t\taxis.space = fnOrSelf(axis.space);\n\t\t\taxis.rotate = fnOrSelf(axis.rotate);\n\n\t\t\tif (isArr(axis.incrs)) {\n\t\t\t\taxis.incrs.forEach(incr => {\n\t\t\t\t\t!fixedDec.has(incr) && fixedDec.set(incr, guessDec(incr));\n\t\t\t\t});\n\t\t\t}\n\n\t\t\taxis.incrs = fnOrSelf(axis.incrs || ( sc.distr == 2 ? wholeIncrs : (isTime ? (ms == 1 ? timeIncrsMs : timeIncrsS) : numIncrs)));\n\t\t\taxis.splits = fnOrSelf(axis.splits || (isTime && sc.distr == 1 ? _timeAxisSplits : sc.distr == 3 ? logAxisSplits : sc.distr == 4 ? asinhAxisSplits : numAxisSplits));\n\n\t\t\taxis.stroke = fnOrSelf(axis.stroke);\n\t\t\taxis.grid.stroke = fnOrSelf(axis.grid.stroke);\n\t\t\taxis.ticks.stroke = fnOrSelf(axis.ticks.stroke);\n\t\t\taxis.border.stroke = fnOrSelf(axis.border.stroke);\n\n\t\t\tlet av = axis.values;\n\n\t\t\taxis.values = (\n\t\t\t\t// static array of tick values\n\t\t\t\tisArr(av) && !isArr(av[0]) ? fnOrSelf(av) :\n\t\t\t\t// temporal\n\t\t\t\tisTime ? (\n\t\t\t\t\t// config array of fmtDate string tpls\n\t\t\t\t\tisArr(av) ?\n\t\t\t\t\t\ttimeAxisVals(_tzDate, timeAxisStamps(av, _fmtDate)) :\n\t\t\t\t\t// fmtDate string tpl\n\t\t\t\t\tisStr(av) ?\n\t\t\t\t\t\ttimeAxisVal(_tzDate, av) :\n\t\t\t\t\tav || _timeAxisVals\n\t\t\t\t) : av || numAxisVals\n\t\t\t);\n\n\t\t\taxis.filter = fnOrSelf(axis.filter || ( sc.distr >= 3 && sc.log == 10 ? log10AxisValsFilt : sc.distr == 3 && sc.log == 2 ? log2AxisValsFilt : retArg1));\n\n\t\t\taxis.font = pxRatioFont(axis.font);\n\t\t\taxis.labelFont = pxRatioFont(axis.labelFont);\n\n\t\t\taxis._size = axis.size(self, null, i, 0);\n\n\t\t\taxis._space =\n\t\t\taxis._rotate =\n\t\t\taxis._incrs =\n\t\t\taxis._found =\t// foundIncrSpace\n\t\t\taxis._splits =\n\t\t\taxis._values = null;\n\n\t\t\tif (axis._size > 0) {\n\t\t\t\tsidesWithAxes[i] = true;\n\t\t\t\taxis._el = placeDiv(AXIS, wrap);\n\t\t\t}\n\n\t\t\t// debug\n\t\t//\taxis._el.style.background = \"#\" + Math.floor(Math.random()*16777215).toString(16) + '80';\n\t\t}\n\t}\n\n\tfunction autoPadSide(self, side, sidesWithAxes, cycleNum) {\n\t\tlet [hasTopAxis, hasRgtAxis, hasBtmAxis, hasLftAxis] = sidesWithAxes;\n\n\t\tlet ori = side % 2;\n\t\tlet size = 0;\n\n\t\tif (ori == 0 && (hasLftAxis || hasRgtAxis))\n\t\t\tsize = (side == 0 && !hasTopAxis || side == 2 && !hasBtmAxis ? round(xAxisOpts.size / 3) : 0);\n\t\tif (ori == 1 && (hasTopAxis || hasBtmAxis))\n\t\t\tsize = (side == 1 && !hasRgtAxis || side == 3 && !hasLftAxis ? round(yAxisOpts.size / 2) : 0);\n\n\t\treturn size;\n\t}\n\n\tconst padding = self.padding = (opts.padding || [autoPadSide,autoPadSide,autoPadSide,autoPadSide]).map(p => fnOrSelf(ifNull(p, autoPadSide)));\n\tconst _padding = self._padding = padding.map((p, i) => p(self, i, sidesWithAxes, 0));\n\n\tlet dataLen;\n\n\t// rendered data window\n\tlet i0 = null;\n\tlet i1 = null;\n\tconst idxs = mode == 1 ? series[0].idxs : null;\n\n\tlet data0 = null;\n\n\tlet viaAutoScaleX = false;\n\n\tfunction setData(_data, _resetScales) {\n\t\tdata = _data == null ? [] : _data;\n\n\t\tself.data = self._data = data;\n\n\t\tif (mode == 2) {\n\t\t\tdataLen = 0;\n\t\t\tfor (let i = 1; i < series.length; i++)\n\t\t\t\tdataLen += data[i][0].length;\n\t\t}\n\t\telse {\n\t\t\tif (data.length == 0)\n\t\t\t\tself.data = self._data = data = [[]];\n\n\t\t\tdata0 = data[0];\n\t\t\tdataLen = data0.length;\n\n\t\t\tlet scaleData = data;\n\n\t\t\tif (xScaleDistr == 2) {\n\t\t\t\tscaleData = data.slice();\n\n\t\t\t\tlet _data0 = scaleData[0] = Array(dataLen);\n\t\t\t\tfor (let i = 0; i < dataLen; i++)\n\t\t\t\t\t_data0[i] = i;\n\t\t\t}\n\n\t\t\tself._data = data = scaleData;\n\t\t}\n\n\t\tresetYSeries(true);\n\n\t\tfire(\"setData\");\n\n\t\t// forces x axis tick values to re-generate when neither x scale nor y scale changes\n\t\t// in ordinal mode, scale range is by index, so will not change if new data has same length, but tick values are from data\n\t\tif (xScaleDistr == 2) {\n\t\t\tshouldConvergeSize = true;\n\n\t\t\t/* or somewhat cheaper, and uglier:\n\t\t\tif (ready) {\n\t\t\t\t// logic extracted from axesCalc()\n\t\t\t\tlet i = 0;\n\t\t\t\tlet axis = axes[i];\n\t\t\t\tlet _splits = axis._splits.map(i => data0[i]);\n\t\t\t\tlet [_incr, _space] = axis._found;\n\t\t\t\tlet incr = data0[_splits[1]] - data0[_splits[0]];\n\t\t\t\taxis._values = axis.values(self, axis.filter(self, _splits, i, _space, incr), i, _space, incr);\n\t\t\t}\n\t\t\t*/\n\t\t}\n\n\t\tif (_resetScales !== false) {\n\t\t\tlet xsc = scaleX;\n\n\t\t\tif (xsc.auto(self, viaAutoScaleX))\n\t\t\t\tautoScaleX();\n\t\t\telse\n\t\t\t\t_setScale(xScaleKey, xsc.min, xsc.max);\n\n\t\t\tshouldSetCursor = shouldSetCursor || cursor.left >= 0;\n\t\t\tshouldSetLegend = true;\n\t\t\tcommit();\n\t\t}\n\t}\n\n\tself.setData = setData;\n\n\tfunction autoScaleX() {\n\t\tviaAutoScaleX = true;\n\n\t\tlet _min, _max;\n\n\t\tif (mode == 1) {\n\t\t\tif (dataLen > 0) {\n\t\t\t\ti0 = idxs[0] = 0;\n\t\t\t\ti1 = idxs[1] = dataLen - 1;\n\n\t\t\t\t_min = data[0][i0];\n\t\t\t\t_max = data[0][i1];\n\n\t\t\t\tif (xScaleDistr == 2) {\n\t\t\t\t\t_min = i0;\n\t\t\t\t\t_max = i1;\n\t\t\t\t}\n\t\t\t\telse if (_min == _max) {\n\t\t\t\t\tif (xScaleDistr == 3)\n\t\t\t\t\t\t[_min, _max] = rangeLog(_min, _min, scaleX.log, false);\n\t\t\t\t\telse if (xScaleDistr == 4)\n\t\t\t\t\t\t[_min, _max] = rangeAsinh(_min, _min, scaleX.log, false);\n\t\t\t\t\telse if (scaleX.time)\n\t\t\t\t\t\t_max = _min + round(86400 / ms);\n\t\t\t\t\telse\n\t\t\t\t\t\t[_min, _max] = rangeNum(_min, _max, rangePad, true);\n\t\t\t\t}\n\t\t\t}\n\t\t\telse {\n\t\t\t\ti0 = idxs[0] = _min = null;\n\t\t\t\ti1 = idxs[1] = _max = null;\n\t\t\t}\n\t\t}\n\n\t\t_setScale(xScaleKey, _min, _max);\n\t}\n\n\tlet ctxStroke, ctxFill, ctxWidth, ctxDash, ctxJoin, ctxCap, ctxFont, ctxAlign, ctxBaseline;\n\tlet ctxAlpha;\n\n\tfunction setCtxStyle(stroke, width, dash, cap, fill, join) {\n\t\tstroke ??= transparent;\n\t\tdash ??= EMPTY_ARR;\n\t\tcap ??= \"butt\"; // (‿|‿)\n\t\tfill ??= transparent;\n\t\tjoin ??= \"round\";\n\n\t\tif (stroke != ctxStroke)\n\t\t\tctx.strokeStyle = ctxStroke = stroke;\n\t\tif (fill != ctxFill)\n\t\t\tctx.fillStyle = ctxFill = fill;\n\t\tif (width != ctxWidth)\n\t\t\tctx.lineWidth = ctxWidth = width;\n\t\tif (join != ctxJoin)\n\t\t\tctx.lineJoin = ctxJoin = join;\n\t\tif (cap != ctxCap)\n\t\t\tctx.lineCap = ctxCap = cap;\n\t\tif (dash != ctxDash)\n\t\t\tctx.setLineDash(ctxDash = dash);\n\t}\n\n\tfunction setFontStyle(font, fill, align, baseline) {\n\t\tif (fill != ctxFill)\n\t\t\tctx.fillStyle = ctxFill = fill;\n\t\tif (font != ctxFont)\n\t\t\tctx.font = ctxFont = font;\n\t\tif (align != ctxAlign)\n\t\t\tctx.textAlign = ctxAlign = align;\n\t\tif (baseline != ctxBaseline)\n\t\t\tctx.textBaseline = ctxBaseline = baseline;\n\t}\n\n\tfunction accScale(wsc, psc, facet, data, sorted = 0) {\n\t\tif (data.length > 0 && wsc.auto(self, viaAutoScaleX) && (psc == null || psc.min == null)) {\n\t\t\tlet _i0 = ifNull(i0, 0);\n\t\t\tlet _i1 = ifNull(i1, data.length - 1);\n\n\t\t\t// only run getMinMax() for invalidated series data, else reuse\n\t\t\tlet minMax = facet.min == null ? getMinMax(data, _i0, _i1, sorted, wsc.distr == 3) : [facet.min, facet.max];\n\n\t\t\t// initial min/max\n\t\t\twsc.min = min(wsc.min, facet.min = minMax[0]);\n\t\t\twsc.max = max(wsc.max, facet.max = minMax[1]);\n\t\t}\n\t}\n\n\tconst AUTOSCALE = {min: null, max: null};\n\n\tfunction setScales() {\n\t//\tlog(\"setScales()\", arguments);\n\n\t\t// implicitly add auto scales, and unranged scales\n\t\tfor (let k in scales) {\n\t\t\tlet sc = scales[k];\n\n\t\t\tif (pendScales[k] == null &&\n\t\t\t\t(\n\t\t\t\t\t// scales that have never been set (on init)\n\t\t\t\t\tsc.min == null ||\n\t\t\t\t\t// or auto scales when the x scale was explicitly set\n\t\t\t\t\tpendScales[xScaleKey] != null && sc.auto(self, viaAutoScaleX)\n\t\t\t\t)\n\t\t\t) {\n\t\t\t\tpendScales[k] = AUTOSCALE;\n\t\t\t}\n\t\t}\n\n\t\t// implicitly add dependent scales\n\t\tfor (let k in scales) {\n\t\t\tlet sc = scales[k];\n\n\t\t\tif (pendScales[k] == null && sc.from != null && pendScales[sc.from] != null)\n\t\t\t\tpendScales[k] = AUTOSCALE;\n\t\t}\n\n\t\t// explicitly setting the x-scale invalidates everything (acts as redraw)\n\t\tif (pendScales[xScaleKey] != null)\n\t\t\tresetYSeries(true); // TODO: only reset series on auto scales?\n\n\t\tlet wipScales = {};\n\n\t\tfor (let k in pendScales) {\n\t\t\tlet psc = pendScales[k];\n\n\t\t\tif (psc != null) {\n\t\t\t\tlet wsc = wipScales[k] = copy(scales[k], fastIsObj);\n\n\t\t\t\tif (psc.min != null)\n\t\t\t\t\tassign(wsc, psc);\n\t\t\t\telse if (k != xScaleKey || mode == 2) {\n\t\t\t\t\tif (dataLen == 0 && wsc.from == null) {\n\t\t\t\t\t\tlet minMax = wsc.range(self, null, null, k);\n\t\t\t\t\t\twsc.min = minMax[0];\n\t\t\t\t\t\twsc.max = minMax[1];\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\twsc.min = inf;\n\t\t\t\t\t\twsc.max = -inf;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (dataLen > 0) {\n\t\t\t// pre-range y-scales from y series' data values\n\t\t\tseries.forEach((s, i) => {\n\t\t\t\tif (mode == 1) {\n\t\t\t\t\tlet k = s.scale;\n\t\t\t\t\tlet psc = pendScales[k];\n\n\t\t\t\t\tif (psc == null)\n\t\t\t\t\t\treturn;\n\n\t\t\t\t\tlet wsc = wipScales[k];\n\n\t\t\t\t\tif (i == 0) {\n\t\t\t\t\t\tlet minMax = wsc.range(self, wsc.min, wsc.max, k);\n\n\t\t\t\t\t\twsc.min = minMax[0];\n\t\t\t\t\t\twsc.max = minMax[1];\n\n\t\t\t\t\t\ti0 = closestIdx(wsc.min, data[0]);\n\t\t\t\t\t\ti1 = closestIdx(wsc.max, data[0]);\n\n\t\t\t\t\t\t// don't try to contract same or adjacent idxs\n\t\t\t\t\t\tif (i1 - i0 > 1) {\n\t\t\t\t\t\t\t// closest indices can be outside of view\n\t\t\t\t\t\t\tif (data[0][i0] < wsc.min)\n\t\t\t\t\t\t\t\ti0++;\n\t\t\t\t\t\t\tif (data[0][i1] > wsc.max)\n\t\t\t\t\t\t\t\ti1--;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\ts.min = data0[i0];\n\t\t\t\t\t\ts.max = data0[i1];\n\t\t\t\t\t}\n\t\t\t\t\telse if (s.show && s.auto)\n\t\t\t\t\t\taccScale(wsc, psc, s, data[i], s.sorted);\n\n\t\t\t\t\ts.idxs[0] = i0;\n\t\t\t\t\ts.idxs[1] = i1;\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tif (i > 0) {\n\t\t\t\t\t\tif (s.show && s.auto) {\n\t\t\t\t\t\t\t// TODO: only handles, assumes and requires facets[0] / 'x' scale, and facets[1] / 'y' scale\n\t\t\t\t\t\t\tlet [ xFacet, yFacet ] = s.facets;\n\t\t\t\t\t\t\tlet xScaleKey = xFacet.scale;\n\t\t\t\t\t\t\tlet yScaleKey = yFacet.scale;\n\t\t\t\t\t\t\tlet [ xData, yData ] = data[i];\n\n\t\t\t\t\t\t\tlet wscx = wipScales[xScaleKey];\n\t\t\t\t\t\t\tlet wscy = wipScales[yScaleKey];\n\n\t\t\t\t\t\t\t// null can happen when only x is zoomed, but y has static range and doesnt get auto-added to pending\n\t\t\t\t\t\t\twscx != null && accScale(wscx, pendScales[xScaleKey], xFacet, xData, xFacet.sorted);\n\t\t\t\t\t\t\twscy != null && accScale(wscy, pendScales[yScaleKey], yFacet, yData, yFacet.sorted);\n\n\t\t\t\t\t\t\t// temp\n\t\t\t\t\t\t\ts.min = yFacet.min;\n\t\t\t\t\t\t\ts.max = yFacet.max;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\n\t\t\t// range independent scales\n\t\t\tfor (let k in wipScales) {\n\t\t\t\tlet wsc = wipScales[k];\n\t\t\t\tlet psc = pendScales[k];\n\n\t\t\t\tif (wsc.from == null && (psc == null || psc.min == null)) {\n\t\t\t\t\tlet minMax = wsc.range(\n\t\t\t\t\t\tself,\n\t\t\t\t\t\twsc.min == inf ? null : wsc.min,\n\t\t\t\t\t\twsc.max == -inf ? null : wsc.max,\n\t\t\t\t\t\tk\n\t\t\t\t\t);\n\t\t\t\t\twsc.min = minMax[0];\n\t\t\t\t\twsc.max = minMax[1];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// range dependent scales\n\t\tfor (let k in wipScales) {\n\t\t\tlet wsc = wipScales[k];\n\n\t\t\tif (wsc.from != null) {\n\t\t\t\tlet base = wipScales[wsc.from];\n\n\t\t\t\tif (base.min == null)\n\t\t\t\t\twsc.min = wsc.max = null;\n\t\t\t\telse {\n\t\t\t\t\tlet minMax = wsc.range(self, base.min, base.max, k);\n\t\t\t\t\twsc.min = minMax[0];\n\t\t\t\t\twsc.max = minMax[1];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tlet changed = {};\n\t\tlet anyChanged = false;\n\n\t\tfor (let k in wipScales) {\n\t\t\tlet wsc = wipScales[k];\n\t\t\tlet sc = scales[k];\n\n\t\t\tif (sc.min != wsc.min || sc.max != wsc.max) {\n\t\t\t\tsc.min = wsc.min;\n\t\t\t\tsc.max = wsc.max;\n\n\t\t\t\tlet distr = sc.distr;\n\n\t\t\t\tsc._min = distr == 3 ? log10(sc.min) : distr == 4 ? asinh(sc.min, sc.asinh) : distr == 100 ? sc.fwd(sc.min) : sc.min;\n\t\t\t\tsc._max = distr == 3 ? log10(sc.max) : distr == 4 ? asinh(sc.max, sc.asinh) : distr == 100 ? sc.fwd(sc.max) : sc.max;\n\n\t\t\t\tchanged[k] = anyChanged = true;\n\t\t\t}\n\t\t}\n\n\t\tif (anyChanged) {\n\t\t\t// invalidate paths of all series on changed scales\n\t\t\tseries.forEach((s, i) => {\n\t\t\t\tif (mode == 2) {\n\t\t\t\t\tif (i > 0 && changed.y)\n\t\t\t\t\t\ts._paths = null;\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tif (changed[s.scale])\n\t\t\t\t\t\ts._paths = null;\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tfor (let k in changed) {\n\t\t\t\tshouldConvergeSize = true;\n\t\t\t\tfire(\"setScale\", k);\n\t\t\t}\n\n\t\t\tif (showCursor && cursor.left >= 0)\n\t\t\t\tshouldSetCursor = shouldSetLegend = true;\n\t\t}\n\n\t\tfor (let k in pendScales)\n\t\t\tpendScales[k] = null;\n\t}\n\n\t// grabs the nearest indices with y data outside of x-scale limits\n\tfunction getOuterIdxs(ydata) {\n\t\tlet _i0 = clamp(i0 - 1, 0, dataLen - 1);\n\t\tlet _i1 = clamp(i1 + 1, 0, dataLen - 1);\n\n\t\twhile (ydata[_i0] == null && _i0 > 0)\n\t\t\t_i0--;\n\n\t\twhile (ydata[_i1] == null && _i1 < dataLen - 1)\n\t\t\t_i1++;\n\n\t\treturn [_i0, _i1];\n\t}\n\n\tfunction drawSeries() {\n\t\tif (dataLen > 0) {\n\t\t\tlet shouldAlpha = series.some(s => s._focus) && ctxAlpha != focus.alpha;\n\n\t\t\tif (shouldAlpha)\n\t\t\t\tctx.globalAlpha = ctxAlpha = focus.alpha;\n\n\t\t\tseries.forEach((s, i) => {\n\t\t\t\tif (i > 0 && s.show) {\n\t\t\t\t\tcacheStrokeFill(i, false);\n\t\t\t\t\tcacheStrokeFill(i, true);\n\n\t\t\t\t\tif (s._paths == null) {\n\t\t\t\t\t\tlet _ctxAlpha = ctxAlpha;\n\n\t\t\t\t\t\tif (ctxAlpha != s.alpha)\n\t\t\t\t\t\t\tctx.globalAlpha = ctxAlpha = s.alpha;\n\n\t\t\t\t\t\tlet _idxs = mode == 2 ? [0, data[i][0].length - 1] : getOuterIdxs(data[i]);\n\t\t\t\t\t\ts._paths = s.paths(self, i, _idxs[0], _idxs[1]);\n\n\t\t\t\t\t\tif (ctxAlpha != _ctxAlpha)\n\t\t\t\t\t\t\tctx.globalAlpha = ctxAlpha = _ctxAlpha;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tseries.forEach((s, i) => {\n\t\t\t\tif (i > 0 && s.show) {\n\t\t\t\t\tlet _ctxAlpha = ctxAlpha;\n\n\t\t\t\t\tif (ctxAlpha != s.alpha)\n\t\t\t\t\t\tctx.globalAlpha = ctxAlpha = s.alpha;\n\n\t\t\t\t\ts._paths != null && drawPath(i, false);\n\n\t\t\t\t\t{\n\t\t\t\t\t\tlet _gaps = s._paths != null ? s._paths.gaps : null;\n\n\t\t\t\t\t\tlet show = s.points.show(self, i, i0, i1, _gaps);\n\t\t\t\t\t\tlet idxs = s.points.filter(self, i, show, _gaps);\n\n\t\t\t\t\t\tif (show || idxs) {\n\t\t\t\t\t\t\ts.points._paths = s.points.paths(self, i, i0, i1, idxs);\n\t\t\t\t\t\t\tdrawPath(i, true);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tif (ctxAlpha != _ctxAlpha)\n\t\t\t\t\t\tctx.globalAlpha = ctxAlpha = _ctxAlpha;\n\n\t\t\t\t\tfire(\"drawSeries\", i);\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tif (shouldAlpha)\n\t\t\t\tctx.globalAlpha = ctxAlpha = 1;\n\t\t}\n\t}\n\n\tfunction cacheStrokeFill(si, _points) {\n\t\tlet s = _points ? series[si].points : series[si];\n\n\t\ts._stroke = s.stroke(self, si);\n\t\ts._fill = s.fill(self, si);\n\t}\n\n\tfunction drawPath(si, _points) {\n\t\tlet s = _points ? series[si].points : series[si];\n\n\t\tlet {\n\t\t\tstroke,\n\t\t\tfill,\n\t\t\tclip: gapsClip,\n\t\t\tflags,\n\n\t\t\t_stroke: strokeStyle = s._stroke,\n\t\t\t_fill: fillStyle = s._fill,\n\t\t\t_width: width = s.width,\n\t\t} = s._paths;\n\n\t\twidth = roundDec(width * pxRatio, 3);\n\n\t\tlet boundsClip = null;\n\t\tlet offset = (width % 2) / 2;\n\n\t\tif (_points && fillStyle == null)\n\t\t\tfillStyle = width > 0 ? \"#fff\" : strokeStyle;\n\n\t\tlet _pxAlign = s.pxAlign == 1 && offset > 0;\n\n\t\t_pxAlign && ctx.translate(offset, offset);\n\n\t\tif (!_points) {\n\t\t\tlet lft = plotLft - width / 2,\n\t\t\t\ttop = plotTop - width / 2,\n\t\t\t\twid = plotWid + width,\n\t\t\t\thgt = plotHgt + width;\n\n\t\t\tboundsClip = new Path2D();\n\t\t\tboundsClip.rect(lft, top, wid, hgt);\n\t\t}\n\n\t\t// the points pathbuilder's gapsClip is its boundsClip, since points dont need gaps clipping, and bounds depend on point size\n\t\tif (_points)\n\t\t\tstrokeFill(strokeStyle, width, s.dash, s.cap, fillStyle, stroke, fill, flags, gapsClip);\n\t\telse\n\t\t\tfillStroke(si, strokeStyle, width, s.dash, s.cap, fillStyle, stroke, fill, flags, boundsClip, gapsClip);\n\n\t\t_pxAlign && ctx.translate(-offset, -offset);\n\t}\n\n\tfunction fillStroke(si, strokeStyle, lineWidth, lineDash, lineCap, fillStyle, strokePath, fillPath, flags, boundsClip, gapsClip) {\n\t\tlet didStrokeFill = false;\n\n\t\t// for all bands where this series is the top edge, create upwards clips using the bottom edges\n\t\t// and apply clips + fill with band fill or dfltFill\n\t\tflags != 0 && bands.forEach((b, bi) => {\n\t\t\t// isUpperEdge?\n\t\t\tif (b.series[0] == si) {\n\t\t\t\tlet lowerEdge = series[b.series[1]];\n\t\t\t\tlet lowerData = data[b.series[1]];\n\n\t\t\t\tlet bandClip = (lowerEdge._paths || EMPTY_OBJ).band;\n\n\t\t\t\tif (isArr(bandClip))\n\t\t\t\t\tbandClip = b.dir == 1 ? bandClip[0] : bandClip[1];\n\n\t\t\t\tlet gapsClip2;\n\n\t\t\t\tlet _fillStyle = null;\n\n\t\t\t\t// hasLowerEdge?\n\t\t\t\tif (lowerEdge.show && bandClip && hasData(lowerData, i0, i1)) {\n\t\t\t\t\t_fillStyle = b.fill(self, bi) || fillStyle;\n\t\t\t\t\tgapsClip2 = lowerEdge._paths.clip;\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t\tbandClip = null;\n\n\t\t\t\tstrokeFill(strokeStyle, lineWidth, lineDash, lineCap, _fillStyle, strokePath, fillPath, flags, boundsClip, gapsClip, gapsClip2, bandClip);\n\n\t\t\t\tdidStrokeFill = true;\n\t\t\t}\n\t\t});\n\n\t\tif (!didStrokeFill)\n\t\t\tstrokeFill(strokeStyle, lineWidth, lineDash, lineCap, fillStyle, strokePath, fillPath, flags, boundsClip, gapsClip);\n\t}\n\n\tconst CLIP_FILL_STROKE = BAND_CLIP_FILL | BAND_CLIP_STROKE;\n\n\tfunction strokeFill(strokeStyle, lineWidth, lineDash, lineCap, fillStyle, strokePath, fillPath, flags, boundsClip, gapsClip, gapsClip2, bandClip) {\n\t\tsetCtxStyle(strokeStyle, lineWidth, lineDash, lineCap, fillStyle);\n\n\t\tif (boundsClip || gapsClip || bandClip) {\n\t\t\tctx.save();\n\t\t\tboundsClip && ctx.clip(boundsClip);\n\t\t\tgapsClip && ctx.clip(gapsClip);\n\t\t}\n\n\t\tif (bandClip) {\n\t\t\tif ((flags & CLIP_FILL_STROKE) == CLIP_FILL_STROKE) {\n\t\t\t\tctx.clip(bandClip);\n\t\t\t\tgapsClip2 && ctx.clip(gapsClip2);\n\t\t\t\tdoFill(fillStyle, fillPath);\n\t\t\t\tdoStroke(strokeStyle, strokePath, lineWidth);\n\t\t\t}\n\t\t\telse if (flags & BAND_CLIP_STROKE) {\n\t\t\t\tdoFill(fillStyle, fillPath);\n\t\t\t\tctx.clip(bandClip);\n\t\t\t\tdoStroke(strokeStyle, strokePath, lineWidth);\n\t\t\t}\n\t\t\telse if (flags & BAND_CLIP_FILL) {\n\t\t\t\tctx.save();\n\t\t\t\tctx.clip(bandClip);\n\t\t\t\tgapsClip2 && ctx.clip(gapsClip2);\n\t\t\t\tdoFill(fillStyle, fillPath);\n\t\t\t\tctx.restore();\n\t\t\t\tdoStroke(strokeStyle, strokePath, lineWidth);\n\t\t\t}\n\t\t}\n\t\telse {\n\t\t\tdoFill(fillStyle, fillPath);\n\t\t\tdoStroke(strokeStyle, strokePath, lineWidth);\n\t\t}\n\n\t\tif (boundsClip || gapsClip || bandClip)\n\t\t\tctx.restore();\n\t}\n\n\tfunction doStroke(strokeStyle, strokePath, lineWidth) {\n\t\tif (lineWidth > 0) {\n\t\t\tif (strokePath instanceof Map) {\n\t\t\t\tstrokePath.forEach((strokePath, strokeStyle) => {\n\t\t\t\t\tctx.strokeStyle = ctxStroke = strokeStyle;\n\t\t\t\t\tctx.stroke(strokePath);\n\t\t\t\t});\n\t\t\t}\n\t\t\telse\n\t\t\t\tstrokePath != null && strokeStyle && ctx.stroke(strokePath);\n\t\t}\n\t}\n\n\tfunction doFill(fillStyle, fillPath) {\n\t\tif (fillPath instanceof Map) {\n\t\t\tfillPath.forEach((fillPath, fillStyle) => {\n\t\t\t\tctx.fillStyle = ctxFill = fillStyle;\n\t\t\t\tctx.fill(fillPath);\n\t\t\t});\n\t\t}\n\t\telse\n\t\t\tfillPath != null && fillStyle && ctx.fill(fillPath);\n\t}\n\n\tfunction getIncrSpace(axisIdx, min, max, fullDim) {\n\t\tlet axis = axes[axisIdx];\n\n\t\tlet incrSpace;\n\n\t\tif (fullDim <= 0)\n\t\t\tincrSpace = [0, 0];\n\t\telse {\n\t\t\tlet minSpace = axis._space = axis.space(self, axisIdx, min, max, fullDim);\n\t\t\tlet incrs = axis._incrs = axis.incrs(self, axisIdx, min, max, fullDim, minSpace);\n\t\t\tincrSpace = findIncr(min, max, incrs, fullDim, minSpace);\n\t\t}\n\n\t\treturn (axis._found = incrSpace);\n\t}\n\n\tfunction drawOrthoLines(offs, filts, ori, side, pos0, len, width, stroke, dash, cap) {\n\t\tlet offset = (width % 2) / 2;\n\n\t\tpxAlign == 1 && ctx.translate(offset, offset);\n\n\t\tsetCtxStyle(stroke, width, dash, cap, stroke);\n\n\t\tctx.beginPath();\n\n\t\tlet x0, y0, x1, y1, pos1 = pos0 + (side == 0 || side == 3 ? -len : len);\n\n\t\tif (ori == 0) {\n\t\t\ty0 = pos0;\n\t\t\ty1 = pos1;\n\t\t}\n\t\telse {\n\t\t\tx0 = pos0;\n\t\t\tx1 = pos1;\n\t\t}\n\n\t\tfor (let i = 0; i < offs.length; i++) {\n\t\t\tif (filts[i] != null) {\n\t\t\t\tif (ori == 0)\n\t\t\t\t\tx0 = x1 = offs[i];\n\t\t\t\telse\n\t\t\t\t\ty0 = y1 = offs[i];\n\n\t\t\t\tctx.moveTo(x0, y0);\n\t\t\t\tctx.lineTo(x1, y1);\n\t\t\t}\n\t\t}\n\n\t\tctx.stroke();\n\n\t\tpxAlign == 1 && ctx.translate(-offset, -offset);\n\t}\n\n\tfunction axesCalc(cycleNum) {\n\t//\tlog(\"axesCalc()\", arguments);\n\n\t\tlet converged = true;\n\n\t\taxes.forEach((axis, i) => {\n\t\t\tif (!axis.show)\n\t\t\t\treturn;\n\n\t\t\tlet scale = scales[axis.scale];\n\n\t\t\tif (scale.min == null) {\n\t\t\t\tif (axis._show) {\n\t\t\t\t\tconverged = false;\n\t\t\t\t\taxis._show = false;\n\t\t\t\t\tresetYSeries(false);\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\t}\n\t\t\telse {\n\t\t\t\tif (!axis._show) {\n\t\t\t\t\tconverged = false;\n\t\t\t\t\taxis._show = true;\n\t\t\t\t\tresetYSeries(false);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tlet side = axis.side;\n\t\t\tlet ori = side % 2;\n\n\t\t\tlet {min, max} = scale;\t\t// \t\t// should this toggle them ._show = false\n\n\t\t\tlet [_incr, _space] = getIncrSpace(i, min, max, ori == 0 ? plotWidCss : plotHgtCss);\n\n\t\t\tif (_space == 0)\n\t\t\t\treturn;\n\n\t\t\t// if we're using index positions, force first tick to match passed index\n\t\t\tlet forceMin = scale.distr == 2;\n\n\t\t\tlet _splits = axis._splits = axis.splits(self, i, min, max, _incr, _space, forceMin);\n\n\t\t\t// tick labels\n\t\t\t// BOO this assumes a specific data/series\n\t\t\tlet splits = scale.distr == 2 ? _splits.map(i => data0[i]) : _splits;\n\t\t\tlet incr = scale.distr == 2 ? data0[_splits[1]] - data0[_splits[0]] : _incr;\n\n\t\t\tlet values = axis._values = axis.values(self, axis.filter(self, splits, i, _space, incr), i, _space, incr);\n\n\t\t\t// rotating of labels only supported on bottom x axis\n\t\t\taxis._rotate = side == 2 ? axis.rotate(self, values, i, _space) : 0;\n\n\t\t\tlet oldSize = axis._size;\n\n\t\t\taxis._size = ceil(axis.size(self, values, i, cycleNum));\n\n\t\t\tif (oldSize != null && axis._size != oldSize)\t\t\t// ready && ?\n\t\t\t\tconverged = false;\n\t\t});\n\n\t\treturn converged;\n\t}\n\n\tfunction paddingCalc(cycleNum) {\n\t\tlet converged = true;\n\n\t\tpadding.forEach((p, i) => {\n\t\t\tlet _p = p(self, i, sidesWithAxes, cycleNum);\n\n\t\t\tif (_p != _padding[i])\n\t\t\t\tconverged = false;\n\n\t\t\t_padding[i] = _p;\n\t\t});\n\n\t\treturn converged;\n\t}\n\n\tfunction drawAxesGrid() {\n\t\tfor (let i = 0; i < axes.length; i++) {\n\t\t\tlet axis = axes[i];\n\n\t\t\tif (!axis.show || !axis._show)\n\t\t\t\tcontinue;\n\n\t\t\tlet side = axis.side;\n\t\t\tlet ori = side % 2;\n\n\t\t\tlet x, y;\n\n\t\t\tlet fillStyle = axis.stroke(self, i);\n\n\t\t\tlet shiftDir = side == 0 || side == 3 ? -1 : 1;\n\n\t\t\tlet [_incr, _space] = axis._found;\n\n\t\t\t// axis label\n\t\t\tif (axis.label != null) {\n\t\t\t\tlet shiftAmt = axis.labelGap * shiftDir;\n\t\t\t\tlet baseLpos = round((axis._lpos + shiftAmt) * pxRatio);\n\n\t\t\t\tsetFontStyle(axis.labelFont[0], fillStyle, \"center\", side == 2 ? TOP : BOTTOM);\n\n\t\t\t\tctx.save();\n\n\t\t\t\tif (ori == 1) {\n\t\t\t\t\tx = y = 0;\n\n\t\t\t\t\tctx.translate(\n\t\t\t\t\t\tbaseLpos,\n\t\t\t\t\t\tround(plotTop + plotHgt / 2),\n\t\t\t\t\t);\n\t\t\t\t\tctx.rotate((side == 3 ? -PI : PI) / 2);\n\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tx = round(plotLft + plotWid / 2);\n\t\t\t\t\ty = baseLpos;\n\t\t\t\t}\n\n\t\t\t\tlet _label = isFn(axis.label) ? axis.label(self, i, _incr, _space) : axis.label;\n\n\t\t\t\tctx.fillText(_label, x, y);\n\n\t\t\t\tctx.restore();\n\t\t\t}\n\n\t\t\tif (_space == 0)\n\t\t\t\tcontinue;\n\n\t\t\tlet scale = scales[axis.scale];\n\n\t\t\tlet plotDim = ori == 0 ? plotWid : plotHgt;\n\t\t\tlet plotOff = ori == 0 ? plotLft : plotTop;\n\n\t\t\tlet _splits = axis._splits;\n\n\t\t\t// tick labels\n\t\t\t// BOO this assumes a specific data/series\n\t\t\tlet splits = scale.distr == 2 ? _splits.map(i => data0[i]) : _splits;\n\t\t\tlet incr = scale.distr == 2 ? data0[_splits[1]] - data0[_splits[0]] : _incr;\n\n\t\t\tlet ticks = axis.ticks;\n\t\t\tlet border = axis.border;\n\t\t\tlet _tickSize = ticks.show ? ticks.size : 0;\n\t\t\tlet tickSize = round(_tickSize * pxRatio);\n\t\t\tlet axisGap = round((axis.alignTo == 2 ? axis._size - _tickSize - axis.gap : axis.gap) * pxRatio);\n\n\t\t\t// rotating of labels only supported on bottom x axis\n\t\t\tlet angle = axis._rotate * -PI/180;\n\n\t\t\tlet basePos = pxRound(axis._pos * pxRatio);\n\t\t\tlet shiftAmt = (tickSize + axisGap) * shiftDir;\n\t\t\tlet finalPos = basePos + shiftAmt;\n\t\t\t y = ori == 0 ? finalPos : 0;\n\t\t\t x = ori == 1 ? finalPos : 0;\n\n\t\t\tlet font = axis.font[0];\n\t\t\tlet textAlign = axis.align == 1 ? LEFT :\n\t\t\t axis.align == 2 ? RIGHT :\n\t\t\t angle > 0 ? LEFT :\n\t\t\t angle < 0 ? RIGHT :\n\t\t\t ori == 0 ? \"center\" : side == 3 ? RIGHT : LEFT;\n\t\t\tlet textBaseline = angle ||\n\t\t\t ori == 1 ? \"middle\" : side == 2 ? TOP : BOTTOM;\n\n\t\t\tsetFontStyle(font, fillStyle, textAlign, textBaseline);\n\n\t\t\tlet lineHeight = axis.font[1] * axis.lineGap;\n\n\t\t\tlet canOffs = _splits.map(val => pxRound(getPos(val, scale, plotDim, plotOff)));\n\n\t\t\tlet _values = axis._values;\n\n\t\t\tfor (let i = 0; i < _values.length; i++) {\n\t\t\t\tlet val = _values[i];\n\n\t\t\t\tif (val != null) {\n\t\t\t\t\tif (ori == 0)\n\t\t\t\t\t\tx = canOffs[i];\n\t\t\t\t\telse\n\t\t\t\t\t\ty = canOffs[i];\n\n\t\t\t\t\tval = \"\" + val;\n\n\t\t\t\t\tlet _parts = val.indexOf(\"\\n\") == -1 ? [val] : val.split(/\\n/gm);\n\n\t\t\t\t\tfor (let j = 0; j < _parts.length; j++) {\n\t\t\t\t\t\tlet text = _parts[j];\n\n\t\t\t\t\t\tif (angle) {\n\t\t\t\t\t\t\tctx.save();\n\t\t\t\t\t\t\tctx.translate(x, y + j * lineHeight); // can this be replaced with position math?\n\t\t\t\t\t\t\tctx.rotate(angle); // can this be done once?\n\t\t\t\t\t\t\tctx.fillText(text, 0, 0);\n\t\t\t\t\t\t\tctx.restore();\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse\n\t\t\t\t\t\t\tctx.fillText(text, x, y + j * lineHeight);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// ticks\n\t\t\tif (ticks.show) {\n\t\t\t\tdrawOrthoLines(\n\t\t\t\t\tcanOffs,\n\t\t\t\t\tticks.filter(self, splits, i, _space, incr),\n\t\t\t\t\tori,\n\t\t\t\t\tside,\n\t\t\t\t\tbasePos,\n\t\t\t\t\ttickSize,\n\t\t\t\t\troundDec(ticks.width * pxRatio, 3),\n\t\t\t\t\tticks.stroke(self, i),\n\t\t\t\t\tticks.dash,\n\t\t\t\t\tticks.cap,\n\t\t\t\t);\n\t\t\t}\n\n\t\t\t// grid\n\t\t\tlet grid = axis.grid;\n\n\t\t\tif (grid.show) {\n\t\t\t\tdrawOrthoLines(\n\t\t\t\t\tcanOffs,\n\t\t\t\t\tgrid.filter(self, splits, i, _space, incr),\n\t\t\t\t\tori,\n\t\t\t\t\tori == 0 ? 2 : 1,\n\t\t\t\t\tori == 0 ? plotTop : plotLft,\n\t\t\t\t\tori == 0 ? plotHgt : plotWid,\n\t\t\t\t\troundDec(grid.width * pxRatio, 3),\n\t\t\t\t\tgrid.stroke(self, i),\n\t\t\t\t\tgrid.dash,\n\t\t\t\t\tgrid.cap,\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tif (border.show) {\n\t\t\t\tdrawOrthoLines(\n\t\t\t\t\t[basePos],\n\t\t\t\t\t[1],\n\t\t\t\t\tori == 0 ? 1 : 0,\n\t\t\t\t\tori == 0 ? 1 : 2,\n\t\t\t\t\tori == 1 ? plotTop : plotLft,\n\t\t\t\t\tori == 1 ? plotHgt : plotWid,\n\t\t\t\t\troundDec(border.width * pxRatio, 3),\n\t\t\t\t\tborder.stroke(self, i),\n\t\t\t\t\tborder.dash,\n\t\t\t\t\tborder.cap,\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\n\t\tfire(\"drawAxes\");\n\t}\n\n\tfunction resetYSeries(minMax) {\n\t//\tlog(\"resetYSeries()\", arguments);\n\n\t\tseries.forEach((s, i) => {\n\t\t\tif (i > 0) {\n\t\t\t\ts._paths = null;\n\n\t\t\t\tif (minMax) {\n\t\t\t\t\tif (mode == 1) {\n\t\t\t\t\t\ts.min = null;\n\t\t\t\t\t\ts.max = null;\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\ts.facets.forEach(f => {\n\t\t\t\t\t\t\tf.min = null;\n\t\t\t\t\t\t\tf.max = null;\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n\n\tlet queuedCommit = false;\n\tlet deferHooks = false;\n\tlet hooksQueue = [];\n\n\tfunction flushHooks() {\n\t\tdeferHooks = false;\n\n\t\tfor (let i = 0; i < hooksQueue.length; i++)\n\t\t\tfire(...hooksQueue[i]);\n\n\t\thooksQueue.length = 0;\n\t}\n\n\tfunction commit() {\n\t\tif (!queuedCommit) {\n\t\t\tmicroTask(_commit);\n\t\t\tqueuedCommit = true;\n\t\t}\n\t}\n\n\t// manual batching (aka immediate mode), skips microtask queue\n\tfunction batch(fn, _deferHooks = false) {\n\t\tqueuedCommit = true;\n\t\tdeferHooks = _deferHooks;\n\n\t\tfn(self);\n\t\t_commit();\n\n\t\tif (_deferHooks && hooksQueue.length > 0)\n\t\t\tqueueMicrotask(flushHooks);\n\t}\n\n\tself.batch = batch;\n\n\tfunction _commit() {\n\t//\tlog(\"_commit()\", arguments);\n\n\t\tif (shouldSetScales) {\n\t\t\tsetScales();\n\t\t\tshouldSetScales = false;\n\t\t}\n\n\t\tif (shouldConvergeSize) {\n\t\t\tconvergeSize();\n\t\t\tshouldConvergeSize = false;\n\t\t}\n\n\t\tif (shouldSetSize) {\n\t\t\tsetStylePx(under, LEFT, plotLftCss);\n\t\t\tsetStylePx(under, TOP, plotTopCss);\n\t\t\tsetStylePx(under, WIDTH, plotWidCss);\n\t\t\tsetStylePx(under, HEIGHT, plotHgtCss);\n\n\t\t\tsetStylePx(over, LEFT, plotLftCss);\n\t\t\tsetStylePx(over, TOP, plotTopCss);\n\t\t\tsetStylePx(over, WIDTH, plotWidCss);\n\t\t\tsetStylePx(over, HEIGHT, plotHgtCss);\n\n\t\t\tsetStylePx(wrap, WIDTH, fullWidCss);\n\t\t\tsetStylePx(wrap, HEIGHT, fullHgtCss);\n\n\t\t\t// NOTE: mutating this during print preview in Chrome forces transparent\n\t\t\t// canvas pixels to white, even when followed up with clearRect() below\n\t\t\tcan.width = round(fullWidCss * pxRatio);\n\t\t\tcan.height = round(fullHgtCss * pxRatio);\n\n\t\t\taxes.forEach(({ _el, _show, _size, _pos, side }) => {\n\t\t\t\tif (_el != null) {\n\t\t\t\t\tif (_show) {\n\t\t\t\t\t\tlet posOffset = (side === 3 || side === 0 ? _size : 0);\n\t\t\t\t\t\tlet isVt = side % 2 == 1;\n\n\t\t\t\t\t\tsetStylePx(_el, isVt ? \"left\" : \"top\", _pos - posOffset);\n\t\t\t\t\t\tsetStylePx(_el, isVt ? \"width\" : \"height\", _size);\n\t\t\t\t\t\tsetStylePx(_el, isVt ? \"top\" : \"left\", isVt ? plotTopCss : plotLftCss);\n\t\t\t\t\t\tsetStylePx(_el, isVt ? \"height\" : \"width\", isVt ? plotHgtCss : plotWidCss);\n\n\t\t\t\t\t\tremClass(_el, OFF);\n\t\t\t\t\t}\n\t\t\t\t\telse\n\t\t\t\t\t\taddClass(_el, OFF);\n\t\t\t\t}\n\t\t\t});\n\n\t\t\t// invalidate ctx style cache\n\t\t\tctxStroke = ctxFill = ctxWidth = ctxJoin = ctxCap = ctxFont = ctxAlign = ctxBaseline = ctxDash = null;\n\t\t\tctxAlpha = 1;\n\n\t\t\tsyncRect(true);\n\n\t\t\tif (\n\t\t\t\tplotLftCss != _plotLftCss ||\n\t\t\t\tplotTopCss != _plotTopCss ||\n\t\t\t\tplotWidCss != _plotWidCss ||\n\t\t\t\tplotHgtCss != _plotHgtCss\n\t\t\t) {\n\t\t\t\tresetYSeries(false);\n\n\t\t\t\tlet pctWid = plotWidCss / _plotWidCss;\n\t\t\t\tlet pctHgt = plotHgtCss / _plotHgtCss;\n\n\t\t\t\tif (showCursor && !shouldSetCursor && cursor.left >= 0) {\n\t\t\t\t\tcursor.left *= pctWid;\n\t\t\t\t\tcursor.top *= pctHgt;\n\n\t\t\t\t\tvCursor && elTrans(vCursor, round(cursor.left), 0, plotWidCss, plotHgtCss);\n\t\t\t\t\thCursor && elTrans(hCursor, 0, round(cursor.top), plotWidCss, plotHgtCss);\n\n\t\t\t\t\tfor (let i = 0; i < cursorPts.length; i++) {\n\t\t\t\t\t\tlet pt = cursorPts[i];\n\n\t\t\t\t\t\tif (pt != null) {\n\t\t\t\t\t\t\tcursorPtsLft[i] *= pctWid;\n\t\t\t\t\t\t\tcursorPtsTop[i] *= pctHgt;\n\t\t\t\t\t\t\telTrans(pt, ceil(cursorPtsLft[i]), ceil(cursorPtsTop[i]), plotWidCss, plotHgtCss);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (select.show && !shouldSetSelect && select.left >= 0 && select.width > 0) {\n\t\t\t\t\tselect.left *= pctWid;\n\t\t\t\t\tselect.width *= pctWid;\n\t\t\t\t\tselect.top *= pctHgt;\n\t\t\t\t\tselect.height *= pctHgt;\n\n\t\t\t\t\tfor (let prop in _hideProps)\n\t\t\t\t\t\tsetStylePx(selectDiv, prop, select[prop]);\n\t\t\t\t}\n\n\t\t\t\t_plotLftCss = plotLftCss;\n\t\t\t\t_plotTopCss = plotTopCss;\n\t\t\t\t_plotWidCss = plotWidCss;\n\t\t\t\t_plotHgtCss = plotHgtCss;\n\t\t\t}\n\n\t\t\tfire(\"setSize\");\n\n\t\t\tshouldSetSize = false;\n\t\t}\n\n\t\tif (fullWidCss > 0 && fullHgtCss > 0) {\n\t\t\tctx.clearRect(0, 0, can.width, can.height);\n\t\t\tfire(\"drawClear\");\n\t\t\tdrawOrder.forEach(fn => fn());\n\t\t\tfire(\"draw\");\n\t\t}\n\n\t\tif (select.show && shouldSetSelect) {\n\t\t\tsetSelect(select);\n\t\t\tshouldSetSelect = false;\n\t\t}\n\n\t\tif (showCursor && shouldSetCursor) {\n\t\t\tupdateCursor(null, true, false);\n\t\t\tshouldSetCursor = false;\n\t\t}\n\n\t\tif (legend.show && legend.live && shouldSetLegend) {\n\t\t\tsetLegend();\n\t\t\tshouldSetLegend = false; // redundant currently\n\t\t}\n\n\t\tif (!ready) {\n\t\t\tready = true;\n\t\t\tself.status = 1;\n\n\t\t\tfire(\"ready\");\n\t\t}\n\n\t\tviaAutoScaleX = false;\n\n\t\tqueuedCommit = false;\n\t}\n\n\tself.redraw = (rebuildPaths, recalcAxes) => {\n\t\tshouldConvergeSize = recalcAxes || false;\n\n\t\tif (rebuildPaths !== false)\n\t\t\t_setScale(xScaleKey, scaleX.min, scaleX.max);\n\t\telse\n\t\t\tcommit();\n\t};\n\n\t// redraw() => setScale('x', scales.x.min, scales.x.max);\n\n\t// explicit, never re-ranged (is this actually true? for x and y)\n\tfunction setScale(key, opts) {\n\t\tlet sc = scales[key];\n\n\t\tif (sc.from == null) {\n\t\t\tif (dataLen == 0) {\n\t\t\t\tlet minMax = sc.range(self, opts.min, opts.max, key);\n\t\t\t\topts.min = minMax[0];\n\t\t\t\topts.max = minMax[1];\n\t\t\t}\n\n\t\t\tif (opts.min > opts.max) {\n\t\t\t\tlet _min = opts.min;\n\t\t\t\topts.min = opts.max;\n\t\t\t\topts.max = _min;\n\t\t\t}\n\n\t\t\tif (dataLen > 1 && opts.min != null && opts.max != null && opts.max - opts.min < 1e-16)\n\t\t\t\treturn;\n\n\t\t\tif (key == xScaleKey) {\n\t\t\t\tif (sc.distr == 2 && dataLen > 0) {\n\t\t\t\t\topts.min = closestIdx(opts.min, data[0]);\n\t\t\t\t\topts.max = closestIdx(opts.max, data[0]);\n\n\t\t\t\t\tif (opts.min == opts.max)\n\t\t\t\t\t\topts.max++;\n\t\t\t\t}\n\t\t\t}\n\n\t\t//\tlog(\"setScale()\", arguments);\n\n\t\t\tpendScales[key] = opts;\n\n\t\t\tshouldSetScales = true;\n\t\t\tcommit();\n\t\t}\n\t}\n\n\tself.setScale = setScale;\n\n//\tINTERACTION\n\n\tlet xCursor;\n\tlet yCursor;\n\tlet vCursor;\n\tlet hCursor;\n\n\t// starting position before cursor.move\n\tlet rawMouseLeft0;\n\tlet rawMouseTop0;\n\n\t// starting position\n\tlet mouseLeft0;\n\tlet mouseTop0;\n\n\t// current position before cursor.move\n\tlet rawMouseLeft1;\n\tlet rawMouseTop1;\n\n\t// current position\n\tlet mouseLeft1;\n\tlet mouseTop1;\n\n\tlet dragging = false;\n\n\tconst drag = cursor.drag;\n\n\tlet dragX = drag.x;\n\tlet dragY = drag.y;\n\n\tif (showCursor) {\n\t\tif (cursor.x)\n\t\t\txCursor = placeDiv(CURSOR_X, over);\n\t\tif (cursor.y)\n\t\t\tyCursor = placeDiv(CURSOR_Y, over);\n\n\t\tif (scaleX.ori == 0) {\n\t\t\tvCursor = xCursor;\n\t\t\thCursor = yCursor;\n\t\t}\n\t\telse {\n\t\t\tvCursor = yCursor;\n\t\t\thCursor = xCursor;\n\t\t}\n\n\t\tmouseLeft1 = cursor.left;\n\t\tmouseTop1 = cursor.top;\n\t}\n\n\tconst select = self.select = assign({\n\t\tshow: true,\n\t\tover: true,\n\t\tleft: 0,\n\t\twidth: 0,\n\t\ttop: 0,\n\t\theight: 0,\n\t}, opts.select);\n\n\tconst selectDiv = select.show ? placeDiv(SELECT, select.over ? over : under) : null;\n\n\tfunction setSelect(opts, _fire) {\n\t\tif (select.show) {\n\t\t\tfor (let prop in opts) {\n\t\t\t\tselect[prop] = opts[prop];\n\n\t\t\t\tif (prop in _hideProps)\n\t\t\t\t\tsetStylePx(selectDiv, prop, opts[prop]);\n\t\t\t}\n\n\t\t\t_fire !== false && fire(\"setSelect\");\n\t\t}\n\t}\n\n\tself.setSelect = setSelect;\n\n\tfunction toggleDOM(i) {\n\t\tlet s = series[i];\n\n\t\tif (s.show)\n\t\t\tshowLegend && remClass(legendRows[i], OFF);\n\t\telse {\n\t\t\tshowLegend && addClass(legendRows[i], OFF);\n\n\t\t\tif (showCursor) {\n\t\t\t\tlet pt = cursorOnePt ? cursorPts[0] : cursorPts[i];\n\t\t\t\tpt != null && elTrans(pt, -10, -10, plotWidCss, plotHgtCss);\n\t\t\t}\n\t\t}\n\t}\n\n\tfunction _setScale(key, min, max) {\n\t\tsetScale(key, {min, max});\n\t}\n\n\tfunction setSeries(i, opts, _fire, _pub) {\n\t//\tlog(\"setSeries()\", arguments);\n\n\t\tif (opts.focus != null)\n\t\t\tsetFocus(i);\n\n\t\tif (opts.show != null) {\n\t\t\tseries.forEach((s, si) => {\n\t\t\t\tif (si > 0 && (i == si || i == null)) {\n\t\t\t\t\ts.show = opts.show;\n\t\t\t\t\ttoggleDOM(si);\n\n\t\t\t\t\tif (mode == 2) {\n\t\t\t\t\t\t_setScale(s.facets[0].scale, null, null);\n\t\t\t\t\t\t_setScale(s.facets[1].scale, null, null);\n\t\t\t\t\t}\n\t\t\t\t\telse\n\t\t\t\t\t\t_setScale(s.scale, null, null);\n\n\t\t\t\t\tcommit();\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\t_fire !== false && fire(\"setSeries\", i, opts);\n\n\t\t_pub && pubSync(\"setSeries\", self, i, opts);\n\t}\n\n\tself.setSeries = setSeries;\n\n\tfunction setBand(bi, opts) {\n\t\tassign(bands[bi], opts);\n\t}\n\n\tfunction addBand(opts, bi) {\n\t\topts.fill = fnOrSelf(opts.fill || null);\n\t\topts.dir = ifNull(opts.dir, -1);\n\t\tbi = bi == null ? bands.length : bi;\n\t\tbands.splice(bi, 0, opts);\n\t}\n\n\tfunction delBand(bi) {\n\t\tif (bi == null)\n\t\t\tbands.length = 0;\n\t\telse\n\t\t\tbands.splice(bi, 1);\n\t}\n\n\tself.addBand = addBand;\n\tself.setBand = setBand;\n\tself.delBand = delBand;\n\n\tfunction setAlpha(i, value) {\n\t\tseries[i].alpha = value;\n\n\t\tif (showCursor && cursorPts[i] != null)\n\t\t\tcursorPts[i].style.opacity = value;\n\n\t\tif (showLegend && legendRows[i])\n\t\t\tlegendRows[i].style.opacity = value;\n\t}\n\n\t// y-distance\n\tlet closestDist;\n\tlet closestSeries;\n\tlet focusedSeries;\n\tconst FOCUS_TRUE = {focus: true};\n\n\tfunction setFocus(i) {\n\t\tif (i != focusedSeries) {\n\t\t//\tlog(\"setFocus()\", arguments);\n\n\t\t\tlet allFocused = i == null;\n\n\t\t\tlet _setAlpha = focus.alpha != 1;\n\n\t\t\tseries.forEach((s, i2) => {\n\t\t\t\tif (mode == 1 || i2 > 0) {\n\t\t\t\t\tlet isFocused = allFocused || i2 == 0 || i2 == i;\n\t\t\t\t\ts._focus = allFocused ? null : isFocused;\n\t\t\t\t\t_setAlpha && setAlpha(i2, isFocused ? 1 : focus.alpha);\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tfocusedSeries = i;\n\t\t\t_setAlpha && commit();\n\t\t}\n\t}\n\n\tif (showLegend && cursorFocus) {\n\t\tonMouse(mouseleave, legendTable, e => {\n\t\t\tif (cursor._lock)\n\t\t\t\treturn;\n\n\t\t\tsetCursorEvent(e);\n\n\t\t\tif (focusedSeries != null)\n\t\t\t\tsetSeries(null, FOCUS_TRUE, true, syncOpts.setSeries);\n\t\t});\n\t}\n\n\tfunction posToVal(pos, scale, can) {\n\t\tlet sc = scales[scale];\n\n\t\tif (can)\n\t\t\tpos = pos / pxRatio - (sc.ori == 1 ? plotTopCss : plotLftCss);\n\n\t\tlet dim = plotWidCss;\n\n\t\tif (sc.ori == 1) {\n\t\t\tdim = plotHgtCss;\n\t\t\tpos = dim - pos;\n\t\t}\n\n\t\tif (sc.dir == -1)\n\t\t\tpos = dim - pos;\n\n\t\tlet _min = sc._min,\n\t\t\t_max = sc._max,\n\t\t\tpct = pos / dim;\n\n\t\tlet sv = _min + (_max - _min) * pct;\n\n\t\tlet distr = sc.distr;\n\n\t\treturn (\n\t\t\tdistr == 3 ? pow(10, sv) :\n\t\t\tdistr == 4 ? sinh(sv, sc.asinh) :\n\t\t\tdistr == 100 ? sc.bwd(sv) :\n\t\t\tsv\n\t\t);\n\t}\n\n\tfunction closestIdxFromXpos(pos, can) {\n\t\tlet v = posToVal(pos, xScaleKey, can);\n\t\treturn closestIdx(v, data[0], i0, i1);\n\t}\n\n\tself.valToIdx = val => closestIdx(val, data[0]);\n\tself.posToIdx = closestIdxFromXpos;\n\tself.posToVal = posToVal;\n\tself.valToPos = (val, scale, can) => (\n\t\tscales[scale].ori == 0 ?\n\t\tgetHPos(val, scales[scale],\n\t\t\tcan ? plotWid : plotWidCss,\n\t\t\tcan ? plotLft : 0,\n\t\t) :\n\t\tgetVPos(val, scales[scale],\n\t\t\tcan ? plotHgt : plotHgtCss,\n\t\t\tcan ? plotTop : 0,\n\t\t)\n\t);\n\n\tself.setCursor = (opts, _fire, _pub) => {\n\t\tmouseLeft1 = opts.left;\n\t\tmouseTop1 = opts.top;\n\t//\tassign(cursor, opts);\n\t\tupdateCursor(null, _fire, _pub);\n\t};\n\n\tfunction setSelH(off, dim) {\n\t\tsetStylePx(selectDiv, LEFT, select.left = off);\n\t\tsetStylePx(selectDiv, WIDTH, select.width = dim);\n\t}\n\n\tfunction setSelV(off, dim) {\n\t\tsetStylePx(selectDiv, TOP, select.top = off);\n\t\tsetStylePx(selectDiv, HEIGHT, select.height = dim);\n\t}\n\n\tlet setSelX = scaleX.ori == 0 ? setSelH : setSelV;\n\tlet setSelY = scaleX.ori == 1 ? setSelH : setSelV;\n\n\tfunction syncLegend() {\n\t\tif (showLegend && legend.live) {\n\t\t\tfor (let i = mode == 2 ? 1 : 0; i < series.length; i++) {\n\t\t\t\tif (i == 0 && multiValLegend)\n\t\t\t\t\tcontinue;\n\n\t\t\t\tlet vals = legend.values[i];\n\n\t\t\t\tlet j = 0;\n\n\t\t\t\tfor (let k in vals)\n\t\t\t\t\tlegendCells[i][j++].firstChild.nodeValue = vals[k];\n\t\t\t}\n\t\t}\n\t}\n\n\tfunction setLegend(opts, _fire) {\n\t\tif (opts != null) {\n\t\t\tif (opts.idxs) {\n\t\t\t\topts.idxs.forEach((didx, sidx) => {\n\t\t\t\t\tactiveIdxs[sidx] = didx;\n\t\t\t\t});\n\t\t\t}\n\t\t\telse if (!isUndef(opts.idx))\n\t\t\t\tactiveIdxs.fill(opts.idx);\n\n\t\t\tlegend.idx = activeIdxs[0];\n\t\t}\n\n\t\tif (showLegend && legend.live) {\n\t\t\tfor (let sidx = 0; sidx < series.length; sidx++) {\n\t\t\t\tif (sidx > 0 || mode == 1 && !multiValLegend)\n\t\t\t\t\tsetLegendValues(sidx, activeIdxs[sidx]);\n\t\t\t}\n\n\t\t\tsyncLegend();\n\t\t}\n\n\t\tshouldSetLegend = false;\n\n\t\t_fire !== false && fire(\"setLegend\");\n\t}\n\n\tself.setLegend = setLegend;\n\n\tfunction setLegendValues(sidx, idx) {\n\t\tlet s = series[sidx];\n\t\tlet src = sidx == 0 && xScaleDistr == 2 ? data0 : data[sidx];\n\t\tlet val;\n\n\t\tif (multiValLegend)\n\t\t\tval = s.values(self, sidx, idx) ?? NULL_LEGEND_VALUES;\n\t\telse {\n\t\t\tval = s.value(self, idx == null ? null : src[idx], sidx, idx);\n\t\t\tval = val == null ? NULL_LEGEND_VALUES : {_: val};\n\t\t}\n\n\t\tlegend.values[sidx] = val;\n\t}\n\n\tfunction updateCursor(src, _fire, _pub) {\n\t//\tts == null && log(\"updateCursor()\", arguments);\n\n\t\trawMouseLeft1 = mouseLeft1;\n\t\trawMouseTop1 = mouseTop1;\n\n\t\t[mouseLeft1, mouseTop1] = cursor.move(self, mouseLeft1, mouseTop1);\n\n\t\tcursor.left = mouseLeft1;\n\t\tcursor.top = mouseTop1;\n\n\t\tif (showCursor) {\n\t\t\tvCursor && elTrans(vCursor, round(mouseLeft1), 0, plotWidCss, plotHgtCss);\n\t\t\thCursor && elTrans(hCursor, 0, round(mouseTop1), plotWidCss, plotHgtCss);\n\t\t}\n\n\t\tlet idx;\n\n\t\t// when zooming to an x scale range between datapoints the binary search\n\t\t// for nearest min/max indices results in this condition. cheap hack :D\n\t\tlet noDataInRange = i0 > i1; // works for mode 1 only\n\n\t\tclosestDist = inf;\n\t\tclosestSeries = null;\n\n\t\t// TODO: extract\n\t\tlet xDim = scaleX.ori == 0 ? plotWidCss : plotHgtCss;\n\t\tlet yDim = scaleX.ori == 1 ? plotWidCss : plotHgtCss;\n\n\t\t// if cursor hidden, hide points & clear legend vals\n\t\tif (mouseLeft1 < 0 || dataLen == 0 || noDataInRange) {\n\t\t\tidx = cursor.idx = null;\n\n\t\t\tfor (let i = 0; i < series.length; i++) {\n\t\t\t\tlet pt = cursorPts[i];\n\t\t\t\tpt != null && elTrans(pt, -10, -10, plotWidCss, plotHgtCss);\n\t\t\t}\n\n\t\t\tif (cursorFocus)\n\t\t\t\tsetSeries(null, FOCUS_TRUE, true, src == null && syncOpts.setSeries);\n\n\t\t\tif (legend.live) {\n\t\t\t\tactiveIdxs.fill(idx);\n\t\t\t\tshouldSetLegend = true;\n\t\t\t}\n\t\t}\n\t\telse {\n\t\t//\tlet pctY = 1 - (y / rect.height);\n\n\t\t\tlet mouseXPos, valAtPosX, xPos;\n\n\t\t\tif (mode == 1) {\n\t\t\t\tmouseXPos = scaleX.ori == 0 ? mouseLeft1 : mouseTop1;\n\t\t\t\tvalAtPosX = posToVal(mouseXPos, xScaleKey);\n\t\t\t\tidx = cursor.idx = closestIdx(valAtPosX, data[0], i0, i1);\n\t\t\t\txPos = valToPosX(data[0][idx], scaleX, xDim, 0);\n\t\t\t}\n\n\t\t\t// closest pt values\n\t\t\tlet _ptLft = -10;\n\t\t\tlet _ptTop = -10;\n\t\t\tlet _ptWid = 0;\n\t\t\tlet _ptHgt = 0;\n\t\t\tlet _centered = true;\n\t\t\tlet _ptFill = '';\n\t\t\tlet _ptStroke = '';\n\n\t\t\tfor (let i = mode == 2 ? 1 : 0; i < series.length; i++) {\n\t\t\t\tlet s = series[i];\n\n\t\t\t\tlet idx1 = activeIdxs[i];\n\t\t\t\tlet yVal1 = idx1 == null ? null : (mode == 1 ? data[i][idx1] : data[i][1][idx1]);\n\n\t\t\t\tlet idx2 = cursor.dataIdx(self, i, idx, valAtPosX);\n\t\t\t\tlet yVal2 = idx2 == null ? null : (mode == 1 ? data[i][idx2] : data[i][1][idx2]);\n\n\t\t\t\tshouldSetLegend = shouldSetLegend || yVal2 != yVal1 || idx2 != idx1;\n\n\t\t\t\tactiveIdxs[i] = idx2;\n\n\t\t\t\tif (i > 0 && s.show) {\n\t\t\t\t\tlet xPos2 = idx2 == null ? -10 : idx2 == idx ? xPos : valToPosX(mode == 1 ? data[0][idx2] : data[i][0][idx2], scaleX, xDim, 0);\n\n\t\t\t\t\t// this doesnt really work for state timeline, heatmap, status history (where the value maps to color, not y coords)\n\t\t\t\t\tlet yPos = yVal2 == null ? -10 : valToPosY(yVal2, mode == 1 ? scales[s.scale] : scales[s.facets[1].scale], yDim, 0);\n\n\t\t\t\t\tif (cursorFocus && yVal2 != null) {\n\t\t\t\t\t\tlet mouseYPos = scaleX.ori == 1 ? mouseLeft1 : mouseTop1;\n\t\t\t\t\t\tlet dist = abs(focus.dist(self, i, idx2, yPos, mouseYPos));\n\n\t\t\t\t\t\tif (dist < closestDist) {\n\t\t\t\t\t\t\tlet bias = focus.bias;\n\n\t\t\t\t\t\t\tif (bias != 0) {\n\t\t\t\t\t\t\t\tlet mouseYVal = posToVal(mouseYPos, s.scale);\n\n\t\t\t\t\t\t\t\tlet seriesYValSign = yVal2 >= 0 ? 1 : -1;\n\t\t\t\t\t\t\t\tlet mouseYValSign = mouseYVal >= 0 ? 1 : -1;\n\n\t\t\t\t\t\t\t\t// with a focus bias, we will never cross zero when prox testing\n\t\t\t\t\t\t\t\t// it's either closest towards zero, or closest away from zero\n\t\t\t\t\t\t\t\tif (mouseYValSign == seriesYValSign && (\n\t\t\t\t\t\t\t\t\tmouseYValSign == 1 ?\n\t\t\t\t\t\t\t\t\t\t(bias == 1 ? yVal2 >= mouseYVal : yVal2 <= mouseYVal) : // >= 0\n\t\t\t\t\t\t\t\t\t\t(bias == 1 ? yVal2 <= mouseYVal : yVal2 >= mouseYVal) // < 0\n\t\t\t\t\t\t\t\t)) {\n\t\t\t\t\t\t\t\t\tclosestDist = dist;\n\t\t\t\t\t\t\t\t\tclosestSeries = i;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\tclosestDist = dist;\n\t\t\t\t\t\t\t\tclosestSeries = i;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tif (shouldSetLegend || cursorOnePt) {\n\t\t\t\t\t\tlet hPos, vPos;\n\n\t\t\t\t\t\tif (scaleX.ori == 0) {\n\t\t\t\t\t\t\thPos = xPos2;\n\t\t\t\t\t\t\tvPos = yPos;\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\thPos = yPos;\n\t\t\t\t\t\t\tvPos = xPos2;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tlet ptWid, ptHgt, ptLft, ptTop,\n\t\t\t\t\t\t\tptStroke, ptFill,\n\t\t\t\t\t\t\tcentered = true,\n\t\t\t\t\t\t\tgetBBox = points.bbox;\n\n\t\t\t\t\t\tif (getBBox != null) {\n\t\t\t\t\t\t\tcentered = false;\n\n\t\t\t\t\t\t\tlet bbox = getBBox(self, i);\n\n\t\t\t\t\t\t\tptLft = bbox.left;\n\t\t\t\t\t\t\tptTop = bbox.top;\n\t\t\t\t\t\t\tptWid = bbox.width;\n\t\t\t\t\t\t\tptHgt = bbox.height;\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tptLft = hPos;\n\t\t\t\t\t\t\tptTop = vPos;\n\t\t\t\t\t\t\tptWid = ptHgt = points.size(self, i);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tptFill = points.fill(self, i);\n\t\t\t\t\t\tptStroke = points.stroke(self, i);\n\n\t\t\t\t\t\tif (cursorOnePt) {\n\t\t\t\t\t\t\tif (i == closestSeries && closestDist <= focus.prox) {\n\t\t\t\t\t\t\t\t_ptLft = ptLft;\n\t\t\t\t\t\t\t\t_ptTop = ptTop;\n\t\t\t\t\t\t\t\t_ptWid = ptWid;\n\t\t\t\t\t\t\t\t_ptHgt = ptHgt;\n\t\t\t\t\t\t\t\t_centered = centered;\n\t\t\t\t\t\t\t\t_ptFill = ptFill;\n\t\t\t\t\t\t\t\t_ptStroke = ptStroke;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tlet pt = cursorPts[i];\n\n\t\t\t\t\t\t\tif (pt != null) {\n\t\t\t\t\t\t\t\tcursorPtsLft[i] = ptLft;\n\t\t\t\t\t\t\t\tcursorPtsTop[i] = ptTop;\n\n\t\t\t\t\t\t\t\telSize(pt, ptWid, ptHgt, centered);\n\t\t\t\t\t\t\t\telColor(pt, ptFill, ptStroke);\n\t\t\t\t\t\t\t\telTrans(pt, ceil(ptLft), ceil(ptTop), plotWidCss, plotHgtCss);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// if only using single hover point (at cursorPts[0])\n\t\t\t// we have trigger styling at last visible series (once closestSeries is settled)\n\t\t\tif (cursorOnePt) {\n\t\t\t\t// some of this logic is similar to series focus below, since it matches the behavior by design\n\n\t\t\t\tlet p = focus.prox;\n\n\t\t\t\tlet focusChanged = focusedSeries == null ? closestDist <= p : (closestDist > p || closestSeries != focusedSeries);\n\n\t\t\t\tif (shouldSetLegend || focusChanged) {\n\t\t\t\t\tlet pt = cursorPts[0];\n\n\t\t\t\t\tif (pt != null) {\n\t\t\t\t\t\tcursorPtsLft[0] = _ptLft;\n\t\t\t\t\t\tcursorPtsTop[0] = _ptTop;\n\n\t\t\t\t\t\telSize(pt, _ptWid, _ptHgt, _centered);\n\t\t\t\t\t\telColor(pt, _ptFill, _ptStroke);\n\t\t\t\t\t\telTrans(pt, ceil(_ptLft), ceil(_ptTop), plotWidCss, plotHgtCss);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// nit: cursor.drag.setSelect is assumed always true\n\t\tif (select.show && dragging) {\n\t\t\tif (src != null) {\n\t\t\t\tlet [xKey, yKey] = syncOpts.scales;\n\t\t\t\tlet [matchXKeys, matchYKeys] = syncOpts.match;\n\t\t\t\tlet [xKeySrc, yKeySrc] = src.cursor.sync.scales;\n\n\t\t\t\t// match the dragX/dragY implicitness/explicitness of src\n\t\t\t\tlet sdrag = src.cursor.drag;\n\t\t\t\tdragX = sdrag._x;\n\t\t\t\tdragY = sdrag._y;\n\n\t\t\t\tif (dragX || dragY) {\n\t\t\t\t\tlet { left, top, width, height } = src.select;\n\n\t\t\t\t\tlet sori = src.scales[xKeySrc].ori;\n\t\t\t\t\tlet sPosToVal = src.posToVal;\n\n\t\t\t\t\tlet sOff, sDim, sc, a, b;\n\n\t\t\t\t\tlet matchingX = xKey != null && matchXKeys(xKey, xKeySrc);\n\t\t\t\t\tlet matchingY = yKey != null && matchYKeys(yKey, yKeySrc);\n\n\t\t\t\t\tif (matchingX && dragX) {\n\t\t\t\t\t\tif (sori == 0) {\n\t\t\t\t\t\t\tsOff = left;\n\t\t\t\t\t\t\tsDim = width;\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tsOff = top;\n\t\t\t\t\t\t\tsDim = height;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tsc = scales[xKey];\n\n\t\t\t\t\t\ta = valToPosX(sPosToVal(sOff, xKeySrc), sc, xDim, 0);\n\t\t\t\t\t\tb = valToPosX(sPosToVal(sOff + sDim, xKeySrc), sc, xDim, 0);\n\n\t\t\t\t\t\tsetSelX(min(a,b), abs(b-a));\n\t\t\t\t\t}\n\t\t\t\t\telse\n\t\t\t\t\t\tsetSelX(0, xDim);\n\n\t\t\t\t\tif (matchingY && dragY) {\n\t\t\t\t\t\tif (sori == 1) {\n\t\t\t\t\t\t\tsOff = left;\n\t\t\t\t\t\t\tsDim = width;\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tsOff = top;\n\t\t\t\t\t\t\tsDim = height;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tsc = scales[yKey];\n\n\t\t\t\t\t\ta = valToPosY(sPosToVal(sOff, yKeySrc), sc, yDim, 0);\n\t\t\t\t\t\tb = valToPosY(sPosToVal(sOff + sDim, yKeySrc), sc, yDim, 0);\n\n\t\t\t\t\t\tsetSelY(min(a,b), abs(b-a));\n\t\t\t\t\t}\n\t\t\t\t\telse\n\t\t\t\t\t\tsetSelY(0, yDim);\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t\thideSelect();\n\t\t\t}\n\t\t\telse {\n\t\t\t\tlet rawDX = abs(rawMouseLeft1 - rawMouseLeft0);\n\t\t\t\tlet rawDY = abs(rawMouseTop1 - rawMouseTop0);\n\n\t\t\t\tif (scaleX.ori == 1) {\n\t\t\t\t\tlet _rawDX = rawDX;\n\t\t\t\t\trawDX = rawDY;\n\t\t\t\t\trawDY = _rawDX;\n\t\t\t\t}\n\n\t\t\t\tdragX = drag.x && rawDX >= drag.dist;\n\t\t\t\tdragY = drag.y && rawDY >= drag.dist;\n\n\t\t\t\tlet uni = drag.uni;\n\n\t\t\t\tif (uni != null) {\n\t\t\t\t\t// only calc drag status if they pass the dist thresh\n\t\t\t\t\tif (dragX && dragY) {\n\t\t\t\t\t\tdragX = rawDX >= uni;\n\t\t\t\t\t\tdragY = rawDY >= uni;\n\n\t\t\t\t\t\t// force unidirectionality when both are under uni limit\n\t\t\t\t\t\tif (!dragX && !dragY) {\n\t\t\t\t\t\t\tif (rawDY > rawDX)\n\t\t\t\t\t\t\t\tdragY = true;\n\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\tdragX = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse if (drag.x && drag.y && (dragX || dragY))\n\t\t\t\t\t// if omni with no uni then both dragX / dragY should be true if either is true\n\t\t\t\t\tdragX = dragY = true;\n\n\t\t\t\tlet p0, p1;\n\n\t\t\t\tif (dragX) {\n\t\t\t\t\tif (scaleX.ori == 0) {\n\t\t\t\t\t\tp0 = mouseLeft0;\n\t\t\t\t\t\tp1 = mouseLeft1;\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tp0 = mouseTop0;\n\t\t\t\t\t\tp1 = mouseTop1;\n\t\t\t\t\t}\n\n\t\t\t\t\tsetSelX(min(p0, p1), abs(p1 - p0));\n\n\t\t\t\t\tif (!dragY)\n\t\t\t\t\t\tsetSelY(0, yDim);\n\t\t\t\t}\n\n\t\t\t\tif (dragY) {\n\t\t\t\t\tif (scaleX.ori == 1) {\n\t\t\t\t\t\tp0 = mouseLeft0;\n\t\t\t\t\t\tp1 = mouseLeft1;\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tp0 = mouseTop0;\n\t\t\t\t\t\tp1 = mouseTop1;\n\t\t\t\t\t}\n\n\t\t\t\t\tsetSelY(min(p0, p1), abs(p1 - p0));\n\n\t\t\t\t\tif (!dragX)\n\t\t\t\t\t\tsetSelX(0, xDim);\n\t\t\t\t}\n\n\t\t\t\t// the drag didn't pass the dist requirement\n\t\t\t\tif (!dragX && !dragY) {\n\t\t\t\t\tsetSelX(0, 0);\n\t\t\t\t\tsetSelY(0, 0);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tdrag._x = dragX;\n\t\tdrag._y = dragY;\n\n\t\tif (src == null) {\n\t\t\tif (_pub) {\n\t\t\t\tif (syncKey != null) {\n\t\t\t\t\tlet [xSyncKey, ySyncKey] = syncOpts.scales;\n\n\t\t\t\t\tsyncOpts.values[0] = xSyncKey != null ? posToVal(scaleX.ori == 0 ? mouseLeft1 : mouseTop1, xSyncKey) : null;\n\t\t\t\t\tsyncOpts.values[1] = ySyncKey != null ? posToVal(scaleX.ori == 1 ? mouseLeft1 : mouseTop1, ySyncKey) : null;\n\t\t\t\t}\n\n\t\t\t\tpubSync(mousemove, self, mouseLeft1, mouseTop1, plotWidCss, plotHgtCss, idx);\n\t\t\t}\n\n\t\t\tif (cursorFocus) {\n\t\t\t\tlet shouldPub = _pub && syncOpts.setSeries;\n\t\t\t\tlet p = focus.prox;\n\n\t\t\t\tif (focusedSeries == null) {\n\t\t\t\t\tif (closestDist <= p)\n\t\t\t\t\t\tsetSeries(closestSeries, FOCUS_TRUE, true, shouldPub);\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tif (closestDist > p)\n\t\t\t\t\t\tsetSeries(null, FOCUS_TRUE, true, shouldPub);\n\t\t\t\t\telse if (closestSeries != focusedSeries)\n\t\t\t\t\t\tsetSeries(closestSeries, FOCUS_TRUE, true, shouldPub);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (shouldSetLegend) {\n\t\t\tlegend.idx = idx;\n\t\t\tsetLegend();\n\t\t}\n\n\t\t_fire !== false && fire(\"setCursor\");\n\t}\n\n\tlet rect = null;\n\n\tObject.defineProperty(self, 'rect', {\n\t\tget() {\n\t\t\tif (rect == null)\n\t\t\t\tsyncRect(false);\n\n\t\t\treturn rect;\n\t\t},\n\t});\n\n\tfunction syncRect(defer = false) {\n\t\tif (defer)\n\t\t\trect = null;\n\t\telse {\n\t\t\trect = over.getBoundingClientRect();\n\t\t\tfire(\"syncRect\", rect);\n\t\t}\n\t}\n\n\tfunction mouseMove(e, src, _l, _t, _w, _h, _i) {\n\t\tif (cursor._lock)\n\t\t\treturn;\n\n\t\t// Chrome on Windows has a bug which triggers a stray mousemove event after an initial mousedown event\n\t\t// when clicking into a plot as part of re-focusing the browser window.\n\t\t// we gotta ignore it to avoid triggering a phantom drag / setSelect\n\t\t// However, on touch-only devices Chrome-based browsers trigger a 0-distance mousemove before mousedown\n\t\t// so we don't ignore it when mousedown has set the dragging flag\n\t\tif (dragging && e != null && e.movementX == 0 && e.movementY == 0)\n\t\t\treturn;\n\n\t\tcacheMouse(e, src, _l, _t, _w, _h, _i, false, e != null);\n\n\t\tif (e != null)\n\t\t\tupdateCursor(null, true, true);\n\t\telse\n\t\t\tupdateCursor(src, true, false);\n\t}\n\n\tfunction cacheMouse(e, src, _l, _t, _w, _h, _i, initial, snap) {\n\t\tif (rect == null)\n\t\t\tsyncRect(false);\n\n\t\tsetCursorEvent(e);\n\n\t\tif (e != null) {\n\t\t\t_l = e.clientX - rect.left;\n\t\t\t_t = e.clientY - rect.top;\n\t\t}\n\t\telse {\n\t\t\tif (_l < 0 || _t < 0) {\n\t\t\t\tmouseLeft1 = -10;\n\t\t\t\tmouseTop1 = -10;\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tlet [xKey, yKey] = syncOpts.scales;\n\n\t\t\tlet syncOptsSrc = src.cursor.sync;\n\t\t\tlet [xValSrc, yValSrc] = syncOptsSrc.values;\n\t\t\tlet [xKeySrc, yKeySrc] = syncOptsSrc.scales;\n\t\t\tlet [matchXKeys, matchYKeys] = syncOpts.match;\n\n\t\t\tlet rotSrc = src.axes[0].side % 2 == 1;\n\n\t\t\tlet xDim = scaleX.ori == 0 ? plotWidCss : plotHgtCss,\n\t\t\t\tyDim = scaleX.ori == 1 ? plotWidCss : plotHgtCss,\n\t\t\t\t_xDim = rotSrc ? _h : _w,\n\t\t\t\t_yDim = rotSrc ? _w : _h,\n\t\t\t\t_xPos = rotSrc ? _t : _l,\n\t\t\t\t_yPos = rotSrc ? _l : _t;\n\n\t\t\tif (xKeySrc != null)\n\t\t\t\t_l = matchXKeys(xKey, xKeySrc) ? getPos(xValSrc, scales[xKey], xDim, 0) : -10;\n\t\t\telse\n\t\t\t\t_l = xDim * (_xPos/_xDim);\n\n\t\t\tif (yKeySrc != null)\n\t\t\t\t_t = matchYKeys(yKey, yKeySrc) ? getPos(yValSrc, scales[yKey], yDim, 0) : -10;\n\t\t\telse\n\t\t\t\t_t = yDim * (_yPos/_yDim);\n\n\t\t\tif (scaleX.ori == 1) {\n\t\t\t\tlet __l = _l;\n\t\t\t\t_l = _t;\n\t\t\t\t_t = __l;\n\t\t\t}\n\t\t}\n\n\t\tif (snap && (src == null || src.cursor.event.type == mousemove)) {\n\t\t\tif (_l <= 1 || _l >= plotWidCss - 1)\n\t\t\t\t_l = incrRound(_l, plotWidCss);\n\n\t\t\tif (_t <= 1 || _t >= plotHgtCss - 1)\n\t\t\t\t_t = incrRound(_t, plotHgtCss);\n\t\t}\n\n\t\tif (initial) {\n\t\t\trawMouseLeft0 = _l;\n\t\t\trawMouseTop0 = _t;\n\n\t\t\t[mouseLeft0, mouseTop0] = cursor.move(self, _l, _t);\n\t\t}\n\t\telse {\n\t\t\tmouseLeft1 = _l;\n\t\t\tmouseTop1 = _t;\n\t\t}\n\t}\n\n\tconst _hideProps = {\n\t\twidth: 0,\n\t\theight: 0,\n\t\tleft: 0,\n\t\ttop: 0,\n\t};\n\n\tfunction hideSelect() {\n\t\tsetSelect(_hideProps, false);\n\t}\n\n\tlet downSelectLeft;\n\tlet downSelectTop;\n\tlet downSelectWidth;\n\tlet downSelectHeight;\n\n\tfunction mouseDown(e, src, _l, _t, _w, _h, _i) {\n\t\tdragging = true;\n\t\tdragX = dragY = drag._x = drag._y = false;\n\n\t\tcacheMouse(e, src, _l, _t, _w, _h, _i, true, false);\n\n\t\tif (e != null) {\n\t\t\tonMouse(mouseup, doc, mouseUp, false);\n\t\t\tpubSync(mousedown, self, mouseLeft0, mouseTop0, plotWidCss, plotHgtCss, null);\n\t\t}\n\n\t\tlet { left, top, width, height } = select;\n\n\t\tdownSelectLeft = left;\n\t\tdownSelectTop = top;\n\t\tdownSelectWidth = width;\n\t\tdownSelectHeight = height;\n\n\t//\thideSelect();\n\t}\n\n\tfunction mouseUp(e, src, _l, _t, _w, _h, _i) {\n\t\tdragging = drag._x = drag._y = false;\n\n\t\tcacheMouse(e, src, _l, _t, _w, _h, _i, false, true);\n\n\t\tlet { left, top, width, height } = select;\n\n\t\tlet hasSelect = width > 0 || height > 0;\n\t\tlet chgSelect = (\n\t\t\tdownSelectLeft != left ||\n\t\t\tdownSelectTop != top ||\n\t\t\tdownSelectWidth != width ||\n\t\t\tdownSelectHeight != height\n\t\t);\n\n\t\thasSelect && chgSelect && setSelect(select);\n\n\t\tif (drag.setScale && hasSelect && chgSelect) {\n\t\t//\tif (syncKey != null) {\n\t\t//\t\tdragX = drag.x;\n\t\t//\t\tdragY = drag.y;\n\t\t//\t}\n\n\t\t\tlet xOff = left,\n\t\t\t\txDim = width,\n\t\t\t\tyOff = top,\n\t\t\t\tyDim = height;\n\n\t\t\tif (scaleX.ori == 1) {\n\t\t\t\txOff = top,\n\t\t\t\txDim = height,\n\t\t\t\tyOff = left,\n\t\t\t\tyDim = width;\n\t\t\t}\n\n\t\t\tif (dragX) {\n\t\t\t\t_setScale(xScaleKey,\n\t\t\t\t\tposToVal(xOff, xScaleKey),\n\t\t\t\t\tposToVal(xOff + xDim, xScaleKey)\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tif (dragY) {\n\t\t\t\tfor (let k in scales) {\n\t\t\t\t\tlet sc = scales[k];\n\n\t\t\t\t\tif (k != xScaleKey && sc.from == null && sc.min != inf) {\n\t\t\t\t\t\t_setScale(k,\n\t\t\t\t\t\t\tposToVal(yOff + yDim, k),\n\t\t\t\t\t\t\tposToVal(yOff, k)\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\thideSelect();\n\t\t}\n\t\telse if (cursor.lock) {\n\t\t\tcursor._lock = !cursor._lock;\n\t\t\tupdateCursor(src, true, e != null);\n\t\t}\n\n\t\tif (e != null) {\n\t\t\toffMouse(mouseup, doc);\n\t\t\tpubSync(mouseup, self, mouseLeft1, mouseTop1, plotWidCss, plotHgtCss, null);\n\t\t}\n\t}\n\n\tfunction mouseLeave(e, src, _l, _t, _w, _h, _i) {\n\t\tif (cursor._lock)\n\t\t\treturn;\n\n\t\tsetCursorEvent(e);\n\n\t\tlet _dragging = dragging;\n\n\t\tif (dragging) {\n\t\t\t// handle case when mousemove aren't fired all the way to edges by browser\n\t\t\tlet snapH = true;\n\t\t\tlet snapV = true;\n\t\t\tlet snapProx = 10;\n\n\t\t\tlet dragH, dragV;\n\n\t\t\tif (scaleX.ori == 0) {\n\t\t\t\tdragH = dragX;\n\t\t\t\tdragV = dragY;\n\t\t\t}\n\t\t\telse {\n\t\t\t\tdragH = dragY;\n\t\t\t\tdragV = dragX;\n\t\t\t}\n\n\t\t\tif (dragH && dragV) {\n\t\t\t\t// maybe omni corner snap\n\t\t\t\tsnapH = mouseLeft1 <= snapProx || mouseLeft1 >= plotWidCss - snapProx;\n\t\t\t\tsnapV = mouseTop1 <= snapProx || mouseTop1 >= plotHgtCss - snapProx;\n\t\t\t}\n\n\t\t\tif (dragH && snapH)\n\t\t\t\tmouseLeft1 = mouseLeft1 < mouseLeft0 ? 0 : plotWidCss;\n\n\t\t\tif (dragV && snapV)\n\t\t\t\tmouseTop1 = mouseTop1 < mouseTop0 ? 0 : plotHgtCss;\n\n\t\t\tupdateCursor(null, true, true);\n\n\t\t\tdragging = false;\n\t\t}\n\n\t\tmouseLeft1 = -10;\n\t\tmouseTop1 = -10;\n\n\t\tactiveIdxs.fill(null);\n\n\t\t// passing a non-null timestamp to force sync/mousemove event\n\t\tupdateCursor(null, true, true);\n\n\t\tif (_dragging)\n\t\t\tdragging = _dragging;\n\t}\n\n\tfunction dblClick(e, src, _l, _t, _w, _h, _i) {\n\t\tif (cursor._lock)\n\t\t\treturn;\n\n\t\tsetCursorEvent(e);\n\n\t\tautoScaleX();\n\n\t\thideSelect();\n\n\t\tif (e != null)\n\t\t\tpubSync(dblclick, self, mouseLeft1, mouseTop1, plotWidCss, plotHgtCss, null);\n\t}\n\n\tfunction syncPxRatio() {\n\t\taxes.forEach(syncFontSize);\n\t\t_setSize(self.width, self.height, true);\n\t}\n\n\ton(dppxchange, win, syncPxRatio);\n\n\t// internal pub/sub\n\tconst events = {};\n\n\tevents.mousedown = mouseDown;\n\tevents.mousemove = mouseMove;\n\tevents.mouseup = mouseUp;\n\tevents.dblclick = dblClick;\n\tevents[\"setSeries\"] = (e, src, idx, opts) => {\n\t\tlet seriesIdxMatcher = syncOpts.match[2];\n\t\tidx = seriesIdxMatcher(self, src, idx);\n\t\tidx != -1 && setSeries(idx, opts, true, false);\n\t};\n\n\tif (showCursor) {\n\t\tonMouse(mousedown, over, mouseDown);\n\t\tonMouse(mousemove, over, mouseMove);\n\t\tonMouse(mouseenter, over, e => {\n\t\t\tsetCursorEvent(e);\n\t\t\tsyncRect(false);\n\t\t});\n\t\tonMouse(mouseleave, over, mouseLeave);\n\n\t\tonMouse(dblclick, over, dblClick);\n\n\t\tcursorPlots.add(self);\n\n\t\tself.syncRect = syncRect;\n\t}\n\n\t// external on/off\n\tconst hooks = self.hooks = opts.hooks || {};\n\n\tfunction fire(evName, a1, a2) {\n\t\tif (deferHooks)\n\t\t\thooksQueue.push([evName, a1, a2]);\n\t\telse {\n\t\t\tif (evName in hooks) {\n\t\t\t\thooks[evName].forEach(fn => {\n\t\t\t\t\tfn.call(null, self, a1, a2);\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t}\n\n\t(opts.plugins || []).forEach(p => {\n\t\tfor (let evName in p.hooks)\n\t\t\thooks[evName] = (hooks[evName] || []).concat(p.hooks[evName]);\n\t});\n\n\tconst seriesIdxMatcher = (self, src, srcSeriesIdx) => srcSeriesIdx;\n\n\tconst syncOpts = assign({\n\t\tkey: null,\n\t\tsetSeries: false,\n\t\tfilters: {\n\t\t\tpub: retTrue,\n\t\t\tsub: retTrue,\n\t\t},\n\t\tscales: [xScaleKey, series[1] ? series[1].scale : null],\n\t\tmatch: [retEq, retEq, seriesIdxMatcher],\n\t\tvalues: [null, null],\n\t}, cursor.sync);\n\n\tif (syncOpts.match.length == 2)\n\t\tsyncOpts.match.push(seriesIdxMatcher);\n\n\tcursor.sync = syncOpts;\n\n\tconst syncKey = syncOpts.key;\n\n\tconst sync = _sync(syncKey);\n\n\tfunction pubSync(type, src, x, y, w, h, i) {\n\t\tif (syncOpts.filters.pub(type, src, x, y, w, h, i))\n\t\t\tsync.pub(type, src, x, y, w, h, i);\n\t}\n\n\tsync.sub(self);\n\n\tfunction pub(type, src, x, y, w, h, i) {\n\t\tif (syncOpts.filters.sub(type, src, x, y, w, h, i))\n\t\t\tevents[type](null, src, x, y, w, h, i);\n\t}\n\n\tself.pub = pub;\n\n\tfunction destroy() {\n\t\tsync.unsub(self);\n\t\tcursorPlots.delete(self);\n\t\tmouseListeners.clear();\n\t\toff(dppxchange, win, syncPxRatio);\n\t\troot.remove();\n\t\tlegendTable?.remove(); // in case mounted outside of root\n\t\tfire(\"destroy\");\n\t}\n\n\tself.destroy = destroy;\n\n\tfunction _init() {\n\t\tfire(\"init\", opts, data);\n\n\t\tsetData(data || opts.data, false);\n\n\t\tif (pendScales[xScaleKey])\n\t\t\tsetScale(xScaleKey, pendScales[xScaleKey]);\n\t\telse\n\t\t\tautoScaleX();\n\n\t\tshouldSetSelect = select.show && (select.width > 0 || select.height > 0);\n\t\tshouldSetCursor = shouldSetLegend = true;\n\n\t\t_setSize(opts.width, opts.height);\n\t}\n\n\tseries.forEach(initSeries);\n\n\taxes.forEach(initAxis);\n\n\tif (then) {\n\t\tif (then instanceof HTMLElement) {\n\t\t\tthen.appendChild(root);\n\t\t\t_init();\n\t\t}\n\t\telse\n\t\t\tthen(self, _init);\n\t}\n\telse\n\t\t_init();\n\n\treturn self;\n}\n\nuPlot.assign = assign;\nuPlot.fmtNum = fmtNum;\nuPlot.rangeNum = rangeNum;\nuPlot.rangeLog = rangeLog;\nuPlot.rangeAsinh = rangeAsinh;\nuPlot.orient = orient;\nuPlot.pxRatio = pxRatio;\n\n{\n\tuPlot.join = join;\n}\n\n{\n\tuPlot.fmtDate = fmtDate;\n\tuPlot.tzDate = tzDate;\n}\n\nuPlot.sync = _sync;\n\n{\n\tuPlot.addGap = addGap;\n\tuPlot.clipGaps = clipGaps;\n\n\tlet paths = uPlot.paths = {\n\t\tpoints,\n\t};\n\n\t(paths.linear = linear);\n\t(paths.stepped = stepped);\n\t(paths.bars = bars);\n\t(paths.spline = monotoneCubic);\n}\n\nexport { uPlot as default };\n","// Fleet Time Series Chart\n// Purpose: Adapts uPlot to minute-level fleet evidence with exact cursor values and drag-to-zoom inspection.\n// Scope: Owns chart lifecycle and aligned-series preparation; server calculations remain authoritative and tables retain exact evidence.\nimport { useEffect, useMemo, useRef } from 'react';\nimport uPlot from 'uplot';\nimport 'uplot/dist/uPlot.min.css';\n\nconst SERIES_COLORS = ['#22d3ee', '#f59e0b', '#a78bfa', '#34d399', '#fb7185', '#60a5fa', '#facc15', '#c084fc'];\n\nexport default function FleetTimeSeriesChart({ minutes = [], roverIds = [], metric = 'dischargedMah' }) {\n const elementRef = useRef(null);\n const prepared = useMemo(() => {\n // uPlot uses aligned arrays for speed. Constructing one timestamp axis and\n // sparse value arrays lets it render long report ranges efficiently while\n // retaining nulls as visible telemetry gaps instead of joining them.\n const timestamps = Array.from(new Set(minutes.map((row) => Number(row.bucketTs) / 1000))).sort((a, b) => a - b);\n const timestampIndexes = new Map(timestamps.map((value, index) => [value, index]));\n const rowsByRover = new Map(roverIds.map((roverId) => [String(roverId), new Array(timestamps.length).fill(null)]));\n minutes.forEach((row) => {\n const values = rowsByRover.get(String(row.roverId));\n const index = timestampIndexes.get(Number(row.bucketTs) / 1000);\n if (!values || index == null) return;\n values[index] = row[metric] == null ? null : Number(row[metric]);\n });\n return {\n data: [timestamps, ...roverIds.map((roverId) => rowsByRover.get(String(roverId)))],\n series: roverIds.map((roverId, index) => ({\n label: String(roverId),\n stroke: SERIES_COLORS[index % SERIES_COLORS.length],\n width: 1.5,\n spanGaps: false,\n value: (_self, value) => value == null ? '--' : Number(value).toLocaleString(undefined, { maximumFractionDigits: 3 }),\n })),\n };\n }, [metric, minutes, roverIds]);\n\n useEffect(() => {\n if (!elementRef.current || !prepared.data[0].length) return undefined;\n const container = elementRef.current;\n const metricLabels = {\n dischargedMah: 'Discharged mAh/min',\n chargedMah: 'Charged mAh/min',\n avgVoltageMv: 'Average voltage mV',\n avgCurrentMa: 'Average current mA',\n avgTemperatureC: 'Average temperature °C',\n };\n const chart = new uPlot({\n width: Math.max(320, container.clientWidth),\n height: 384,\n title: metricLabels[metric] || metric,\n cursor: { drag: { x: true, y: false, setScale: true } },\n legend: { show: true, live: true },\n axes: [\n { stroke: '#94a3b8', grid: { stroke: 'rgba(115,115,115,0.22)' } },\n { stroke: '#94a3b8', grid: { stroke: 'rgba(115,115,115,0.22)' } },\n ],\n scales: { x: { time: true } },\n series: [{ label: 'Time' }, ...prepared.series],\n hooks: {\n ready: [(plot) => {\n // Dragging selects a time range through uPlot itself. Double-clicking\n // restores the full evidence window without adding custom graph math.\n plot.root.addEventListener('dblclick', () => plot.setScale('x', { min: null, max: null }));\n }],\n },\n }, prepared.data, container);\n const observer = new ResizeObserver(() => {\n chart.setSize({ width: Math.max(320, container.clientWidth), height: 384 });\n });\n observer.observe(container);\n return () => {\n observer.disconnect();\n chart.destroy();\n };\n }, [metric, prepared]);\n\n if (!prepared.data[0].length) {\n return

No minute time-series data in this range.

;\n }\n return (\n
\n

Drag horizontally to zoom. Double-click to restore the full range. Hover for exact values.

\n
\n
\n );\n}\n","// Fullscreen Fleet Reports Application\n// Purpose: Presents deep read-only operational history using the same global cards, surfaces, theme, and spacing as the driver page.\n// Scope: Owns report-range controls, dense evidence tables, chart selection, CSV export, and route-level feature handling.\nimport { useMemo, useState } from 'react';\nimport { Link } from 'react-router-dom';\nimport Papa from 'papaparse';\nimport CardFrame from '../components/CardFrame/index.jsx';\nimport SocketConnectionPill from '../components/SocketConnectionPill/index.jsx';\nimport { useSessionSelector } from '../context/SessionContext.jsx';\nimport { useSocket } from '../context/SocketContext.jsx';\nimport useUserIdentitySync from '../hooks/useUserIdentitySync.js';\nimport useFleetReport from '../hooks/useFleetReport.js';\nimport { isFeatureEnabled } from '../lib/features.js';\nimport { useSettingsNamespace } from '../settings/index.js';\nimport { DEFAULT_PAGE_THEME_KEY, getPageThemeClass, themeGapClass } from '../themes/index.js';\nimport FleetTimeSeriesChart from './FleetTimeSeriesChart.jsx';\n\nconst RANGE_OPTIONS = [\n { label: '24 hours', ms: 24 * 60 * 60 * 1000 },\n { label: '7 days', ms: 7 * 24 * 60 * 60 * 1000 },\n { label: '30 days', ms: 30 * 24 * 60 * 60 * 1000 },\n { label: '90 days', ms: 90 * 24 * 60 * 60 * 1000 },\n { label: '1 year', ms: 365 * 24 * 60 * 60 * 1000 },\n];\n\nconst METRICS = [\n ['dischargedMah', 'Discharged mAh'],\n ['chargedMah', 'Charged mAh'],\n ['avgVoltageMv', 'Average voltage'],\n ['avgCurrentMa', 'Average current'],\n ['avgTemperatureC', 'Average temperature'],\n];\n\nfunction number(value, digits = 2) {\n return value !== null && value !== undefined && value !== '' && Number.isFinite(Number(value))\n ? Number(value).toLocaleString(undefined, { maximumFractionDigits: digits })\n : '--';\n}\n\nfunction timestamp(value) {\n return value !== null && value !== undefined && value !== '' && Number.isFinite(Number(value))\n ? new Date(Number(value)).toLocaleString()\n : '--';\n}\n\nfunction duration(value) {\n const minutes = Math.round((Number(value) || 0) / 60000);\n if (minutes < 60) return `${minutes}m`;\n if (minutes < 1440) return `${Math.floor(minutes / 60)}h ${minutes % 60}m`;\n return `${Math.floor(minutes / 1440)}d ${Math.floor((minutes % 1440) / 60)}h`;\n}\n\nfunction distance(value) {\n const mm = Number(value) || 0;\n return mm >= 1000000 ? `${number(mm / 1000000)} km` : `${number(mm / 1000)} m`;\n}\n\nfunction Metric({ label, value, detail = null }) {\n return (\n
\n
{label}
\n
{value}
\n {detail ?
{detail}
: null}\n
\n );\n}\n\nfunction exportCsv(name, rows) {\n // Papa Parse owns CSV quoting and nested-value escaping. JSON-stringifying\n // object cells preserves evidence without maintaining a fragile custom CSV\n // serializer for arbitrary structured event payloads.\n const normalized = rows.map((row) => Object.fromEntries(\n Object.entries(row).map(([key, value]) => [key, value && typeof value === 'object' ? JSON.stringify(value) : value]),\n ));\n const csv = Papa.unparse(normalized);\n const url = URL.createObjectURL(new Blob([csv], { type: 'text/csv;charset=utf-8' }));\n const anchor = document.createElement('a');\n anchor.href = url;\n anchor.download = name;\n anchor.click();\n URL.revokeObjectURL(url);\n}\n\nfunction BatteryRegistryPanel({ report, onSaved }) {\n const socket = useSocket();\n const role = useSessionSelector((state) => state.session?.role || null);\n const canEdit = role === 'admin' || role === 'lockdown';\n const [draft, setDraft] = useState({\n roverId: report.rovers[0]?.roverId || '',\n chemistry: 'unknown',\n ratedCapacityMah: '',\n installedDate: new Date().toISOString().slice(0, 10),\n notes: '',\n });\n const [status, setStatus] = useState('');\n\n const submit = (event) => {\n event.preventDefault();\n setStatus('Saving…');\n socket.emit('fleetReports:replaceBattery', {\n roverId: draft.roverId,\n chemistry: draft.chemistry,\n ratedCapacityMah: Number(draft.ratedCapacityMah),\n installedAt: new Date(`${draft.installedDate}T12:00:00`).getTime(),\n notes: draft.notes,\n }, (response = {}) => {\n if (response.error) {\n setStatus(response.error);\n return;\n }\n setStatus(`Registered ${response.battery?.batteryKey || 'battery'}`);\n onSaved();\n });\n };\n\n return (\n \n
\n \n \n {report.batteryRegistry.map((battery) => (\n \n \n \n \n ))}\n
RoverBattery identityChemistryRated capacity mAhInstalledRetiredLearned baseline mAhNotes
{battery.roverId}{battery.batteryKey}{battery.chemistry || '--'}{number(battery.ratedCapacityMah, 0)}{timestamp(battery.installedAt)}{timestamp(battery.retiredAt)}{number(battery.healthyBaselineMah)}{battery.notes || '--'}
\n
\n {canEdit ? (\n
\n \n \n \n \n \n
{status}
\n
\n ) :

Battery history is read-only. Admin access is required to register a physical replacement.

}\n
\n );\n}\n\nfunction FullReportContent() {\n const [rangeMs, setRangeMs] = useState(RANGE_OPTIONS[1].ms);\n const [rangeEnd, setRangeEnd] = useState(() => Date.now());\n const [metric, setMetric] = useState('dischargedMah');\n const [selectedRovers, setSelectedRovers] = useState([]);\n const since = rangeEnd - rangeMs;\n const { report, loading, error, refresh } = useFleetReport({\n since,\n until: rangeEnd,\n compact: false,\n includeEvents: true,\n roverIds: selectedRovers.length ? selectedRovers : null,\n });\n\n const chartRoverIds = useMemo(() => report?.rovers.map((rover) => rover.roverId) || [], [report]);\n const toggleRover = (roverId) => {\n setSelectedRovers((current) => current.includes(roverId)\n ? current.filter((id) => id !== roverId)\n : [...current, roverId]);\n };\n\n return (\n <>\n Back to rover page}\n bodyClassName=\"space-y-0.5 p-0.5 text-sm\"\n >\n
\n {RANGE_OPTIONS.map((option) => (\n { setRangeMs(option.ms); setRangeEnd(Date.now()); }}\n >\n {option.label}\n \n ))}\n \n {timestamp(since)} through {timestamp(rangeEnd)}\n
\n {report?.rovers.length ? (\n
\n {report.rovers.map((rover) => (\n toggleRover(rover.roverId)}\n >\n {selectedRovers.includes(rover.roverId) ? '✓ ' : ''}{rover.name}\n \n ))}\n {selectedRovers.length ? : null}\n
\n ) : null}\n \n\n {loading && !report ? Loading detailed fleet evidence… : null}\n {error ? {error} : null}\n\n {report ? (\n <>\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n\n \n {report.findings.length ? report.findings.map((finding) => (\n
\n \n {finding.severity}\n {' · '}{finding.roverId ? `${finding.roverId} · ` : ''}{finding.title} · confidence {finding.confidence}\n \n
{JSON.stringify(finding.evidence, null, 2)}
\n
\n )) :

No findings in the selected range.

}\n
\n\n setMetric(event.target.value)}>\n {METRICS.map(([key, label]) => )}\n \n )}\n bodyClassName=\"p-0.5\"\n >\n \n \n\n exportCsv('fleet-rovers.csv', report.rovers)}>Export CSV}\n bodyClassName=\"overflow-x-auto p-0.5\"\n >\n \n \n {report.rovers.map((rover) => (\n \n \n \n \n \n \n \n ))}\n
RoverOnlineSamplesCoverageGapsDistanceCommandsDrive/motorRejectedOvercurrentsBumpsCliffsWheel dropsVirtual wallsCharged mAhDischarged mAhVoltage avg/min/max mVTemperature avg/min/max °CCharge now mAhReported capacity mAhLast sample
{rover.name}{rover.online ? 'yes' : 'no'}{number(rover.sampleCount, 0)}{duration(rover.coverageMs)}{number(rover.gapCount, 0)}{distance(rover.distanceMm)}{number(rover.commandCount, 0)}{number(rover.driveCommandCount, 0)}{number(rover.rejectedCommandCount, 0)}{number(rover.overcurrentEpisodeCount, 0)}{number(rover.bumpCount, 0)}{number(rover.cliffCount, 0)}{number(rover.wheelDropCount, 0)}{number(rover.virtualWallCount, 0)}{number(rover.chargedMah)}{number(rover.dischargedMah)}{number(rover.averageVoltageMv, 0)} / {number(rover.minimumVoltageMv, 0)} / {number(rover.maximumVoltageMv, 0)}{number(rover.averageTemperatureC)} / {number(rover.minimumTemperatureC)} / {number(rover.maximumTemperatureC)}{number(rover.latestChargeMah, 0)}{number(rover.reportedCapacityMah, 0)}{timestamp(rover.lastSampleAt)}
\n \n\n exportCsv('fleet-battery-sessions.csv', report.batterySessions)}>Export CSV}\n bodyClassName=\"overflow-x-auto p-0.5\"\n >\n \n \n {report.batterySessions.map((session) => (\n \n \n \n \n \n \n ))}\n
RoverKindStartedEndedDurationStart/end chargeCharged mAhDischarged mAhVoltage min/maxTemperature min/maxSamplesGapsConfidenceQualification
{session.roverId}{session.kind}{timestamp(session.startedAt)}{timestamp(session.endedAt)}{duration((session.endedAt || report.generatedAt) - session.startedAt)}{number(session.startChargeMah, 0)} / {number(session.endChargeMah, 0)} mAh{number(session.chargedMah)}{number(session.dischargedMah)}{number(session.minVoltageMv, 0)} / {number(session.maxVoltageMv, 0)} mV{number(session.minTemperatureC)} / {number(session.maxTemperatureC)} °C{number(session.sampleCount, 0)}{number(session.gapCount, 0)}{session.confidence}{session.qualificationReason}
\n \n\n \n \n \n {report.batteryHealth.map((health) => (\n \n \n \n \n \n ))}\n
RoverBattery identityQualified testsBaseline testsLearned baseline mAhLatest usable mAhCapacity retainedDischarged throughput mAhEquivalent full cyclesLatest qualified testConfidenceConfidence reason
{health.roverId}{health.batteryKey}{number(health.qualifiedTestCount, 0)}{number(health.baselineTestCount, 0)}{number(health.baselineMah)}{number(health.measuredUsableMah)}{health.capacityRetentionPercent == null ? '--' : `${number(health.capacityRetentionPercent)}%`}{number(health.dischargedThroughputMah)}{number(health.equivalentFullCycles, 3)}{timestamp(health.latestQualifiedTestAt)}{health.confidence}{health.confidenceReason}
\n
\n\n \n\n exportCsv('fleet-events.csv', report.events)}>Export CSV}\n bodyClassName=\"space-y-0.5 p-0.5\"\n >\n {report.events.map((event) => (\n
\n {timestamp(event.ts)} · {event.severity} · {event.source} · {event.type}{event.roverId ? ` · ${event.roverId}` : ''}\n
{JSON.stringify(event.payload, null, 2)}
\n
\n ))}\n \n\n \n \n \n {report.dailyReportHistory.map((daily) => (\n \n \n \n ))}\n
Report dayGeneratedStored bytesDiscord deliveredDelivery error
{daily.reportDate}{timestamp(daily.generatedAt)}{number(daily.reportBytes, 0)}{timestamp(daily.discordDeliveredAt)}{daily.discordError || '--'}
\n
\n\n \n
{JSON.stringify(report.diagnostics.collector, null, 2)}
\n
{JSON.stringify(report.diagnostics.storage, null, 2)}
\n
\n\n \n

Battery throughput integrates OI packet 23 signed battery current: delta mAh = current mA × elapsed milliseconds / 3,600,000. Positive current is charged throughput; negative current is discharged throughput.

\n

Intervals exceeding the configured maximum gap are excluded rather than interpreted as zero. Packet 25 charge movement is retained as independent evidence. Packet 26 is displayed as the rover-reported fixed reference and is not treated as measured battery health.

\n

A high-confidence capacity test requires a qualified full endpoint, continuous telemetry, configured minimum discharge depth, and a low endpoint. Partial or interrupted sessions remain visible with lower confidence and an explicit qualification reason.

\n
\n \n ) : null}\n \n );\n}\n\nexport default function FleetReportsApp() {\n useUserIdentitySync({ identitySurface: 'passive' });\n const enabled = useSessionSelector((state) => isFeatureEnabled(state, 'fleetReports'));\n const { value: pageSettings } = useSettingsNamespace('page', { backgroundTheme: DEFAULT_PAGE_THEME_KEY });\n const pageBackgroundClass = getPageThemeClass(pageSettings?.backgroundTheme);\n return (\n
\n \n
\n {enabled ? : (\n \n

This server has not enabled fleet reporting.

\n Back to rover page\n
\n )}\n
\n
\n );\n}\n"],"names":["e","t","module","this","n","d","s","a","o","h","v","P","u","b","i","r","q","f","y","l","c","p","m","g","k","_","E","U","C","S","O","x","I","A","T","D","L","F","j","z","M","w","R","FEAT_TIME","pre","UPLOT","ORI_HZ","ORI_VT","TITLE","WRAP","UNDER","OVER","AXIS","OFF","SELECT","CURSOR_X","CURSOR_Y","CURSOR_PT","LEGEND","LEGEND_LIVE","LEGEND_INLINE","LEGEND_SERIES","LEGEND_MARKER","LEGEND_LABEL","LEGEND_VALUE","WIDTH","HEIGHT","TOP","BOTTOM","LEFT","RIGHT","hexBlack","transparent","mousemove","mousedown","mouseup","mouseenter","mouseleave","dblclick","resize","scroll","change","dppxchange","LEGEND_DISP","domEnv","doc","win","nav","pxRatio","query","setPxRatio","_pxRatio","off","on","addClass","el","cl","remClass","setStylePx","name","value","placeTag","tag","cls","targ","refEl","placeDiv","xformCache","elTrans","xPos","yPos","xMax","yMax","xform","xformOld","colorCache","elColor","background","borderColor","newColor","oldColor","sizeCache","elSize","newWid","newHgt","centered","newSize","oldSize","evOpts","evOpts2","ev","cb","capt","closestIdx","num","arr","lo","hi","mid","bitwise","floor","makeIndexOfs","predicate","data","_i0","_i1","i0","i1","notNullish","isPositive","nonNullIdxs","positiveIdxs","getMinMax","sorted","log","getEdgeIdxs","_min","_max","inf","rangeLog","min","max","base","fullMags","minSign","sign","maxSign","logFn","log10","log2","growMinAbs","ceil","growMaxAbs","minExp","abs","maxExp","minIncr","pow","maxIncr","roundDec","incrRoundDn","incrRoundUp","rangeAsinh","minMax","rangePad","autoRangePart","_eqRangePart","_eqRange","rangeNum","mult","extra","isObj","_rangeNum","ifNull","lh","rh","hasData","idx0","idx1","cfg","cmin","cmax","padMin","padMax","hardMin","hardMax","softMin","softMax","softMinMode","softMaxMode","delta","deltaMag","scalarMax","scalarMag","scalarMagDelta","nonZeroDelta","mag","_padMin","_newMin","_softMin","minLim","_padMax","_newMax","_softMax","maxLim","numFormatter","fmtNum","val","PI","round","sinh","linthresh","asinh","numIntDigits","clamp","isFn","fnOrSelf","noop","retArg0","_0","retArg1","_1","retNull","retTrue","retEq","regex6","fixFloat","isInt","fixedDec","str","match","len","exp","incrRound","incr","dec","guessDec","genIncrs","mults","incrs","multDec","expa","_incr","EMPTY_OBJ","EMPTY_ARR","nullNullTuple","isArr","isUndef","isStr","is","fastIsObj","TypedArray","__proto__","copy","_isObj","out","assign","args","src","key","NULL_REMOVE","NULL_RETAIN","NULL_EXPAND","nullExpand","yVals","nullIdxs","alignedLen","xi","lastNullIdx","nullIdx","join","tables","nullModes","allHeadersSame","table","isAsc","sortCols","xVals","ti","xs","xIdxs","si","ys","nullMode","yVal","alignedIdx","microTask","fn","head","rlen","idxs","table2","row","row2","vals0","len0","vals1","vals","samples","firstIdx","lastIdx","stride","prevVal","months","days","slice3","days3","months3","engNames","zeroPad2","int","zeroPad3","subs","names","fmtDate","tpl","parts","localTz","tzDate","date","tz","date2","onlyWhole","allMults","decIncrs","oneIncrs","wholeIncrs","numIncrs","NL","yyyy","NLyyyy","md","NLmd","NLmdyy","aa","hmm","hmmaa","NLhmmaa","ss","genTimeStuffs","ms","mo","timeIncrs","_timeAxisStamps","timeAxisSplits","self","axisIdx","scaleMin","scaleMax","foundIncr","foundSpace","splits","isYr","isMo","minDate","minDateTs","minMin","mkDate","minMinTs","moIncr","yrIncr","split","splitDate","baseYear","baseMonth","next","offs","incr0","tzOffset","date0","prevHour","incrHours","minSpace","pctSpace","expectedHour","dstShift","prevSplit","timeIncrsMs","_timeAxisStampsMs","timeAxisSplitsMs","timeIncrsS","_timeAxisStampsS","timeAxisSplitsS","timeAxisStamps","stampCfg","timeAxisVals","stamps","prevYear","prevMnth","prevDate","prevMins","prevSecs","newYear","newMnth","newDate","newHour","newMins","newSecs","stamp","timeAxisVal","dateTpl","timeSeriesStamp","_timeSeriesStamp","timeSeriesVal","seriesIdx","dataIdx","legendStroke","legendFill","legendOpts","cursorPointShow","pt","size","mar","width","cursorPointFill","sp","cursorPointStroke","cursorPointSize","moveTuple","cursorMove","mouseLeft1","mouseTop1","filtBtn0","handle","onlyTarg","filtTarg","cursorOpts","valPos","curPos","axisLines","grid","ticks","border","font","labelFont","lineGap","xAxisOpts","numSeriesLabel","timeSeriesLabel","xSeriesOpts","numAxisVals","numAxisSplits","forceMin","numDec","logAxisSplits","logBase","nextMagIncr","asinhAxisSplits","posSplits","zero","RE_ALL","RE_12357","RE_125","RE_1","_filt","distr","re","keepMod","log10AxisValsFilt","axis","scaleKey","sc","valToPos","_10","magSpace","log2AxisValsFilt","numSeriesVal","yAxisOpts","ptDia","dia","seriesPointsShow","scale","xData","p0","p1","dim","maxPts","facet","gaps","nullGaps","xySeriesOpts","ySeriesOpts","clampScale","xScaleOpts","yScaleOpts","syncs","_sync","opts","plot","type","BAND_CLIP_FILL","BAND_CLIP_STROKE","orient","mode","series","scales","bbox","dx","dy","sx","sy","H","V","moveToH","lineToH","rectH","arcH","bezierCurveToH","moveToV","lineToV","rectV","arcV","bezierCurveToV","bandFillClipDirs","fillDir","clipDirs","bands","seriesFillTo","dataMin","dataMax","bandFillDir","clipBandLine","strokePath","clipDir","dataX","dataY","scaleX","scaleY","valToPosX","valToPosY","xOff","yOff","xDim","yDim","pxRound","dir","lineTo","frIdx","toIdx","x0","y0","x1","yLimit","clip","clipGaps","ori","plotLft","plotTop","plotWid","plotHgt","rect","prevGapEnd","maxStrokeWidth","addGap","fromX","toX","prevGap","findGaps","pixelForX","align","fr","to","frPx","toPx","fri2","toi2","pxRoundGen","pxAlign","moveTo","arcTo","y1","x2","y2","endRad","baseRad","startAngle","endAngle","bp1x","bp1y","bp2x","bp2y","p2x","p2y","points","filtIdxs","arc","rad","fill","lft","top","wid","hgt","drawPoint","pi","_drawAcc","stroke","accX","minY","maxY","inY","outY","drawAccH","drawAccV","linear","alignGaps","pixelForY","drawAcc","_paths","hasGap","xForPixel","pos","drawnAtX","idx0px","idx1px","nextAccXVal","xVal","bandClipDir","fillToVal","fillToY","frX","stepped","ascDesc","extend","left","prevYPos","firstXPos","prevXPos","firstXPosExt","yVal1","prevXPosExt","fillTo","halfStroke","startsOffset","endsOffset","findColWidth","colWid","prevIdx","minDelta","bars","_extraGap","ro","radiusFn","gapFactor","_maxWidth","_minWidth","disp","_each","dispFills","dispStrokes","_align","extraGap","maxWidth","minWidth","valRadius","baseRadius","_dirX","each","band","xShift","barWid","fullGap","strokeWidth","multiPath","fillColors","fillPaths","strokeColors","strokePaths","color","pct","sizes","insetStroke","rawBarWid","dataY0","radVal","radBase","yVal0","btm","barHgt","rv","rb","splineInterp","interp","bezierCurveTo","xCoords","yCoords","monotoneCubic","_monotoneCubic","path","ds","dys","dxs","cursorPlots","invalidateRects","uPlot","linearPath","pointsPath","setDefaults","xo","yo","initY","setDefault","setDefaults2","xyo","snapNumX","snapTimeX","snapNumY","snapLogY","snapLogX","snapAsinhY","snapAsinhX","findIncr","minVal","maxVal","intDigits","incrIdx","pxRatioFont","fontSize","fontSizeCss","syncFontSize","then","getHPos","getVPos","getPos","ready","root","title","can","ctx","wrap","over","mouseLeft0","mouseTop0","drag","under","axes","xScaleKey","drawOrderMap","drawAxesGrid","drawSeries","drawOrder","initValToPct","getVal","_val","initScale","scaleOpts","isTime","rn","rangeIsArr","xScaleDistr","pendScales","_tzDate","ts","_fmtDate","_timeAxisSplits","_timeAxisVals","_timeSeriesVal","activeIdxs","legend","cursor","showLegend","showCursor","markers","legendTable","legendHead","legendBody","legendRows","legendCells","legendCols","multiValLegend","NULL_LEGEND_VALUES","getMultiVals","son","soff","initLegendRow","cells","label","indic","text","onMouse","setCursorEvent","isolate","setSeries","syncOpts","cursorFocus","FOCUS_TRUE","mouseListeners","targListeners","listener","offMouse","fullWidCss","fullHgtCss","plotWidCss","plotHgtCss","plotLftCss","plotTopCss","_plotLftCss","_plotTopCss","_plotWidCss","_plotHgtCss","shouldSetScales","shouldSetSize","shouldConvergeSize","shouldSetCursor","shouldSetSelect","shouldSetLegend","_setSize","height","force","calcSize","resetYSeries","commit","calcPlotRect","calcAxesRects","bb","CYCLE_LIMIT","convergeSize","converged","cycleNum","axesConverged","axesCalc","paddingConverged","paddingCalc","setSize","hasTopAxis","hasBtmAxis","hasRgtAxis","hasLftAxis","side","_size","isVt","labelSize","fullSize","sidesWithAxes","_padding","off1","off2","off3","off0","incrOffset","hov","skip","prox","bias","cursorIdx","valAtPosX","idx2","_prox","withProx","cursorLft","xValues","yValues","nonNullLft","nonNullRgt","lftPos","rgtPos","lftDelta","rgtDelta","focus","cursorOnePt","cursorPts","cursorPtsLft","cursorPtsTop","initCursorPt","initSeries","sv","_ptDia","rowCells","fire","addSeries","delSeries","tr","initAxis","av","autoPadSide","padding","dataLen","data0","viaAutoScaleX","setData","_data","_resetScales","scaleData","_data0","xsc","autoScaleX","_setScale","ctxStroke","ctxFill","ctxWidth","ctxDash","ctxJoin","ctxCap","ctxFont","ctxAlign","ctxBaseline","ctxAlpha","setCtxStyle","dash","cap","setFontStyle","baseline","accScale","wsc","psc","AUTOSCALE","setScales","wipScales","xFacet","yFacet","yScaleKey","yData","wscx","wscy","changed","anyChanged","getOuterIdxs","ydata","shouldAlpha","cacheStrokeFill","_ctxAlpha","_idxs","drawPath","_gaps","show","_points","gapsClip","flags","strokeStyle","fillStyle","boundsClip","offset","_pxAlign","strokeFill","fillStroke","lineWidth","lineDash","lineCap","fillPath","didStrokeFill","bi","lowerEdge","lowerData","bandClip","gapsClip2","_fillStyle","CLIP_FILL_STROKE","doFill","doStroke","getIncrSpace","fullDim","incrSpace","drawOrthoLines","filts","pos0","pos1","_space","_splits","values","_p","shiftDir","shiftAmt","baseLpos","_label","plotDim","plotOff","_tickSize","tickSize","axisGap","angle","basePos","finalPos","textAlign","textBaseline","lineHeight","canOffs","_values","_parts","queuedCommit","deferHooks","hooksQueue","flushHooks","_commit","batch","_deferHooks","_el","_show","_pos","posOffset","syncRect","pctWid","pctHgt","vCursor","hCursor","select","prop","_hideProps","selectDiv","setSelect","updateCursor","setLegend","rebuildPaths","recalcAxes","setScale","xCursor","yCursor","rawMouseLeft0","rawMouseTop0","rawMouseLeft1","rawMouseTop1","dragging","dragX","dragY","_fire","toggleDOM","_pub","setFocus","pubSync","setBand","addBand","delBand","setAlpha","closestDist","closestSeries","focusedSeries","allFocused","_setAlpha","i2","isFocused","posToVal","closestIdxFromXpos","setSelH","setSelV","setSelX","setSelY","syncLegend","didx","sidx","setLegendValues","idx","noDataInRange","mouseXPos","_ptLft","_ptTop","_ptWid","_ptHgt","_centered","_ptFill","_ptStroke","yVal2","xPos2","mouseYPos","dist","mouseYVal","seriesYValSign","mouseYValSign","hPos","vPos","ptWid","ptHgt","ptLft","ptTop","ptStroke","ptFill","getBBox","focusChanged","xKey","yKey","matchXKeys","matchYKeys","xKeySrc","yKeySrc","sdrag","sori","sPosToVal","sOff","sDim","matchingX","matchingY","hideSelect","rawDX","rawDY","_rawDX","uni","syncKey","xSyncKey","ySyncKey","shouldPub","defer","mouseMove","_l","_t","_w","_h","_i","cacheMouse","initial","snap","syncOptsSrc","xValSrc","yValSrc","rotSrc","_xDim","_yDim","_xPos","_yPos","__l","downSelectLeft","downSelectTop","downSelectWidth","downSelectHeight","mouseDown","mouseUp","hasSelect","chgSelect","mouseLeave","_dragging","snapH","snapV","snapProx","dragH","dragV","dblClick","syncPxRatio","events","seriesIdxMatcher","hooks","evName","a1","a2","srcSeriesIdx","sync","pub","destroy","_init","paths","SERIES_COLORS","FleetTimeSeriesChart","minutes","roverIds","metric","elementRef","useRef","prepared","useMemo","timestamps","timestampIndexes","index","rowsByRover","roverId","_self","useEffect","container","metricLabels","chart","observer","jsx","RANGE_OPTIONS","METRICS","number","digits","timestamp","duration","distance","mm","Metric","detail","jsxs","exportCsv","rows","normalized","csv","Papa","url","anchor","BatteryRegistryPanel","report","onSaved","socket","useSocket","role","useSessionSelector","state","canEdit","draft","setDraft","useState","status","setStatus","submit","event","response","CardFrame","battery","current","rover","FullReportContent","rangeMs","setRangeMs","rangeEnd","setRangeEnd","setMetric","selectedRovers","setSelectedRovers","since","loading","error","refresh","useFleetReport","chartRoverIds","toggleRover","id","Fragment","Link","option","finding","session","health","daily","FleetReportsApp","useUserIdentitySync","enabled","isFeatureEnabled","pageSettings","useSettingsNamespace","DEFAULT_PAGE_THEME_KEY","pageBackgroundClass","getPageThemeClass","SocketConnectionPill","themeGapClass"],"mappings":"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","x_google_ignoreList":[0,1]} \ No newline at end of file +{"version":3,"file":"FleetReportsApp-Cl72SGXl.js","sources":["../../../webui/node_modules/papaparse/papaparse.min.js","../../../webui/node_modules/uplot/dist/uPlot.esm.js","../../../webui/src/reports/FleetTimeSeriesChart.jsx","../../../webui/src/reports/FleetReportsApp.jsx"],"sourcesContent":["/* @license\nPapa Parse\nv5.5.4\nhttps://github.com/mholt/PapaParse\nLicense: MIT\n*/\n((e,t)=>{\"function\"==typeof define&&define.amd?define([],t):\"object\"==typeof module&&\"undefined\"!=typeof exports?module.exports=t():e.Papa=t()})(this,function r(){var n=\"undefined\"!=typeof self?self:\"undefined\"!=typeof window?window:void 0!==n?n:{};var d,s=!n.document&&!!n.postMessage,a=n.IS_PAPA_WORKER||!1,o={},h=0,v={};function P(e){return 65279===e.charCodeAt(0)?e.slice(1):e}function u(e){this._handle=null,this._finished=!1,this._completed=!1,this._halted=!1,this._input=null,this._baseIndex=0,this._partialLine=\"\",this._rowCount=0,this._start=0,this._nextChunk=null,this.isFirstChunk=!0,this._completeResults={data:[],errors:[],meta:{}},function(e){var t=b(e);t.chunkSize=parseInt(t.chunkSize),e.step||e.chunk||(t.chunkSize=null);this._handle=new i(t),(this._handle.streamer=this)._config=t}.call(this,e),this.parseChunk=function(t,e){var i=parseInt(this._config.skipFirstNLines)||0;if(this.isFirstChunk&&0=this._config.preview);if(a)n.postMessage({results:r,workerId:v.WORKER_ID,finished:i});else if(q(this._config.chunk)&&!e){if(this._config.chunk(r,this._handle),this._handle.paused()||this._handle.aborted())return void(this._halted=!0);this._completeResults=r=void 0}return this._config.step||this._config.chunk||(this._completeResults.data=this._completeResults.data.concat(r.data),this._completeResults.errors=this._completeResults.errors.concat(r.errors),this._completeResults.meta=r.meta),this._completed||!i||!q(this._config.complete)||r&&r.meta.aborted||(this._config.complete(this._completeResults,this._input),this._completed=!0),i||r&&r.meta.paused||this._nextChunk(),r}this._halted=!0},this._sendError=function(e){q(this._config.error)?this._config.error(e):a&&this._config.error&&n.postMessage({workerId:v.WORKER_ID,error:e,finished:!1})}}function f(e){var r;(e=e||{}).chunkSize||(e.chunkSize=v.RemoteChunkSize),u.call(this,e),this._nextChunk=s?function(){this._readChunk(),this._chunkLoaded()}:function(){this._readChunk()},this.stream=function(e){this._input=e,this._nextChunk()},this._readChunk=function(){if(this._finished)this._chunkLoaded();else{if(r=new XMLHttpRequest,this._config.withCredentials&&(r.withCredentials=this._config.withCredentials),s||(r.onload=y(this._chunkLoaded,this),r.onerror=y(this._chunkError,this)),r.open(this._config.downloadRequestBody?\"POST\":\"GET\",this._input,!s),this._config.downloadRequestHeaders){var e,t=this._config.downloadRequestHeaders;for(e in t)r.setRequestHeader(e,t[e])}var i;this._config.chunkSize&&(i=this._start+this._config.chunkSize-1,r.setRequestHeader(\"Range\",\"bytes=\"+this._start+\"-\"+i));try{r.send(this._config.downloadRequestBody)}catch(e){this._chunkError(e.message)}s&&0===r.status&&this._chunkError()}},this._chunkLoaded=function(){4===r.readyState&&(r.status<200||400<=r.status?this._chunkError():(this._start+=this._config.chunkSize||r.responseText.length,this._finished=!this._config.chunkSize||this._start>=(e=>null!==(e=e.getResponseHeader(\"Content-Range\"))?parseInt(e.substring(e.lastIndexOf(\"/\")+1)):-1)(r),this.parseChunk(r.responseText)))},this._chunkError=function(e){e=r.statusText||e;this._sendError(new Error(e))}}function l(e){(e=e||{}).chunkSize||(e.chunkSize=v.LocalChunkSize),u.call(this,e);var i,r,n=\"undefined\"!=typeof FileReader;this.stream=function(e){this._input=e,r=e.slice||e.webkitSlice||e.mozSlice,n?((i=new FileReader).onload=y(this._chunkLoaded,this),i.onerror=y(this._chunkError,this)):i=new FileReaderSync,this._nextChunk()},this._nextChunk=function(){this._finished||this._config.preview&&!(this._rowCount=this._input.size,this.parseChunk(e.target.result)},this._chunkError=function(){this._sendError(i.error)}}function c(e){var i;u.call(this,e=e||{}),this.stream=function(e){return i=e,this._nextChunk()},this._nextChunk=function(){var e,t;if(!this._finished)return e=this._config.chunkSize,i=e?(t=i.substring(0,e),i.substring(e)):(t=i,\"\"),this._finished=!i,this.parseChunk(t)}}function p(e){u.call(this,e=e||{});var t=[],i=!0,r=!1;this.pause=function(){u.prototype.pause.apply(this,arguments),this._input.pause()},this.resume=function(){u.prototype.resume.apply(this,arguments),this._input.resume()},this.stream=function(e){this._input=e,this._input.on(\"data\",this._streamData),this._input.on(\"end\",this._streamEnd),this._input.on(\"error\",this._streamError)},this._checkIsFinished=function(){r&&1===t.length&&(this._finished=!0)},this._nextChunk=function(){this._checkIsFinished(),t.length?this.parseChunk(t.shift()):i=!0},this._streamData=y(function(e){try{t.push(\"string\"==typeof e?e:e.toString(this._config.encoding)),i&&(i=!1,this._checkIsFinished(),this.parseChunk(t.shift()))}catch(e){this._streamError(e)}},this),this._streamError=y(function(e){this._streamCleanUp(),this._sendError(e)},this),this._streamEnd=y(function(){this._streamCleanUp(),r=!0,this._streamData(\"\")},this),this._streamCleanUp=y(function(){this._input.removeListener(\"data\",this._streamData),this._input.removeListener(\"end\",this._streamEnd),this._input.removeListener(\"error\",this._streamError)},this)}function i(m){var n,s,a,t,o=Math.pow(2,53),h=-o,u=/^\\s*-?(\\d+\\.?|\\.\\d+|\\d+\\.\\d+)([eE][-+]?\\d+)?\\s*$/,d=/^((\\d{4}-[01]\\d-[0-3]\\dT[0-2]\\d:[0-5]\\d:[0-5]\\d\\.\\d+([+-][0-2]\\d:[0-5]\\d|Z))|(\\d{4}-[01]\\d-[0-3]\\dT[0-2]\\d:[0-5]\\d:[0-5]\\d([+-][0-2]\\d:[0-5]\\d|Z))|(\\d{4}-[01]\\d-[0-3]\\dT[0-2]\\d:[0-5]\\d([+-][0-2]\\d:[0-5]\\d|Z)))$/,i=this,r=0,f=0,l=!1,e=!1,c=[],p={data:[],errors:[],meta:{}};function y(e){return\"greedy\"===m.skipEmptyLines?\"\"===e.join(\"\").trim():1===e.length&&0===e[0].length}function g(){if(p&&a&&(k(\"Delimiter\",\"UndetectableDelimiter\",\"Unable to auto-detect delimiting character; defaulted to '\"+v.DefaultDelimiter+\"'\"),a=!1),m.skipEmptyLines&&(p.data=p.data.filter(function(e){return!y(e)})),_()){if(p)if(Array.isArray(p.data[0])){for(var e=0;_()&&e(e=>(m.dynamicTypingFunction&&void 0===m.dynamicTyping[e]&&(m.dynamicTyping[e]=m.dynamicTypingFunction(e)),!0===(m.dynamicTyping[e]||m.dynamicTyping)))(e)?\"true\"===t||\"TRUE\"===t||\"false\"!==t&&\"FALSE\"!==t&&((e=>{if(u.test(e)){e=parseFloat(e);if(h=c.length?\"__parsed_extra\":c[r]:n,s=m.transform?m.transform(s,n):s);\"__parsed_extra\"===n?(i[n]=i[n]||[],i[n].push(s)):i[n]=s}return m.header&&(r>c.length?k(\"FieldMismatch\",\"TooManyFields\",\"Too many fields: expected \"+c.length+\" fields but parsed \"+r,f+t):rm.preview?s.abort():(p.data=p.data[0],t(p,i))))}),this.parse=function(e,t,i){var r=m.quoteChar||'\"',r=(m.newline||(m.newline=this.guessLineEndings(e,r)),a=!1,m.delimiter?q(m.delimiter)&&(m.delimiter=m.delimiter(e),p.meta.delimiter=m.delimiter):((r=((e,t,i,r,n)=>{var s,a,o,h;n=n||[\",\",\"\\t\",\"|\",\";\",v.RECORD_SEP,v.UNIT_SEP];for(var u=0;u=i.length/2?\"\\r\\n\":\"\\r\"}}function U(e){return e.replace(/[.*+?^${}()|[\\]\\\\]/g,\"\\\\$&\")}function E(C){var S=(C=C||{}).delimiter,O=C.newline,x=C.comments,I=C.step,A=C.preview,T=C.fastMode,D=null,L=!1,F=null==C.quoteChar?'\"':C.quoteChar,j=F;if(void 0!==C.escapeChar&&(j=C.escapeChar),(\"string\"!=typeof S||-1=A)return w(!0);break}u.push({type:\"Quotes\",code:\"InvalidQuotes\",message:\"Trailing quote on quoted field is malformed\",row:h.length,index:z}),m++}}else if(x&&0===d.length&&i.substring(z,z+a)===x){if(-1===g)return w();z=g+s,g=i.indexOf(O,z),p=i.indexOf(S,z)}else if(-1!==p&&(p=A)return w(!0)}return E();function k(e){h.push(e),f=z}function v(e){var t=0;return t=-1!==e&&(e=i.substring(m+1,e))&&\"\"===e.trim()?e.length:t}function E(e){return r||(void 0===e&&(e=i.substring(z)),d.push(e),z=n,k(d),o&&R()),w()}function b(e){z=e,k(d),d=[],g=i.indexOf(O,z)}function w(e){if(C.header&&!t&&h.length&&!L){var s=h[0],a=Object.create(null),o=new Set(s);let n=!1;for(let r=0;r{var e;return!!v.WORKERS_SUPPORTED&&(e=(()=>{var e=n.URL||n.webkitURL||null,t=r.toString();return v.BLOB_URL||(v.BLOB_URL=e.createObjectURL(new Blob([\"var global = (function() { if (typeof self !== 'undefined') { return self; } if (typeof window !== 'undefined') { return window; } if (typeof global !== 'undefined') { return global; } return {}; })(); global.IS_PAPA_WORKER=true; \",\"(\",t,\")();\"],{type:\"text/javascript\"})))})(),(e=new n.Worker(e)).onmessage=g,e.id=h++,o[e.id]=e)})()).userStep=t.step,i.userChunk=t.chunk,i.userComplete=t.complete,i.userError=t.error,t.step=q(t.step),t.chunk=q(t.chunk),t.complete=q(t.complete),t.error=q(t.error),delete t.worker,i.postMessage({input:e,config:t,workerId:i.id})},v.unparse=function(e,t){var s=!1,_=!0,m=\",\",y=\"\\r\\n\",a='\"',o=a+a,i=!1,r=null,h=!1,u=((()=>{if(\"object\"==typeof t){if(\"string\"!=typeof t.delimiter||v.BAD_DELIMITERS.filter(function(e){return-1!==t.delimiter.indexOf(e)}).length||(m=t.delimiter),\"boolean\"!=typeof t.quotes&&\"function\"!=typeof t.quotes&&!Array.isArray(t.quotes)||(s=t.quotes),\"boolean\"!=typeof t.skipEmptyLines&&\"string\"!=typeof t.skipEmptyLines||(i=t.skipEmptyLines),\"string\"==typeof t.newline&&(y=t.newline),\"string\"==typeof t.quoteChar&&(a=t.quoteChar,o=a+a),\"boolean\"==typeof t.header&&(_=t.header),Array.isArray(t.columns)){if(0===t.columns.length)throw new Error(\"Option columns is empty\");r=t.columns}void 0!==t.escapeChar&&(o=t.escapeChar+a),t.escapeFormulae instanceof RegExp?h=t.escapeFormulae:\"boolean\"==typeof t.escapeFormulae&&t.escapeFormulae&&(h=/^[=+\\-@\\t\\r].*$/)}})(),new RegExp(U(a),\"g\"));\"string\"==typeof e&&(e=JSON.parse(e));if(Array.isArray(e)){if(!e.length||Array.isArray(e[0]))return n(null,e,i);if(\"object\"==typeof e[0])return n(r||Object.keys(e[0]),e,i)}else if(\"object\"==typeof e)return\"string\"==typeof e.data&&(e.data=JSON.parse(e.data)),Array.isArray(e.data)&&(e.fields||(e.fields=e.meta&&e.meta.fields||r),e.fields||(e.fields=Array.isArray(e.data[0])?e.fields:\"object\"==typeof e.data[0]?Object.keys(e.data[0]):[]),Array.isArray(e.data[0])||\"object\"==typeof e.data[0]||(e.data=[e.data])),n(e.fields||[],e.data||[],i);throw new Error(\"Unable to serialize unrecognized input\");function n(e,t,i){var r=\"\",n=(\"string\"==typeof e&&(e=JSON.parse(e)),\"string\"==typeof t&&(t=JSON.parse(t)),Array.isArray(e)&&0{for(var i=0;i xMax || yPos > yMax)\n\t\t\taddClass(el, OFF);\n\t\telse\n\t\t\tremClass(el, OFF);\n\t}\n}\n\nconst colorCache = new WeakMap();\n\nfunction elColor(el, background, borderColor) {\n\tlet newColor = background + borderColor;\n\tlet oldColor = colorCache.get(el);\n\n\tif (newColor != oldColor) {\n\t\tcolorCache.set(el, newColor);\n\t\tel.style.background = background;\n\t\tel.style.borderColor = borderColor;\n\t}\n}\n\nconst sizeCache = new WeakMap();\n\nfunction elSize(el, newWid, newHgt, centered) {\n\tlet newSize = newWid + \"\" + newHgt;\n\tlet oldSize = sizeCache.get(el);\n\n\tif (newSize != oldSize) {\n\t\tsizeCache.set(el, newSize);\n\t\tel.style.height = newHgt + \"px\";\n\t\tel.style.width = newWid + \"px\";\n\t\tel.style.marginLeft = centered ? -newWid/2 + \"px\" : 0;\n\t\tel.style.marginTop = centered ? -newHgt/2 + \"px\" : 0;\n\t}\n}\n\nconst evOpts = {passive: true};\nconst evOpts2 = {...evOpts, capture: true};\n\nfunction on(ev, el, cb, capt) {\n\tel.addEventListener(ev, cb, capt ? evOpts2 : evOpts);\n}\n\nfunction off(ev, el, cb, capt) {\n\tel.removeEventListener(ev, cb, evOpts);\n}\n\ndomEnv && setPxRatio();\n\n// binary search for index of closest value\nfunction closestIdx(num, arr, lo, hi) {\n\tlet mid;\n\tlo = lo || 0;\n\thi = hi || arr.length - 1;\n\tlet bitwise = hi <= 2147483647;\n\n\twhile (hi - lo > 1) {\n\t\tmid = bitwise ? (lo + hi) >> 1 : floor((lo + hi) / 2);\n\n\t\tif (arr[mid] < num)\n\t\t\tlo = mid;\n\t\telse\n\t\t\thi = mid;\n\t}\n\n\tif (num - arr[lo] <= arr[hi] - num)\n\t\treturn lo;\n\n\treturn hi;\n}\n\nfunction makeIndexOfs(predicate) {\n\t let indexOfs = (data, _i0, _i1) => {\n\t\tlet i0 = -1;\n\t\tlet i1 = -1;\n\n\t\tfor (let i = _i0; i <= _i1; i++) {\n\t\t\tif (predicate(data[i])) {\n\t\t\t\ti0 = i;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\tfor (let i = _i1; i >= _i0; i--) {\n\t\t\tif (predicate(data[i])) {\n\t\t\t\ti1 = i;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\treturn [i0, i1];\n\t };\n\n\t return indexOfs;\n}\n\nconst notNullish = v => v != null;\nconst isPositive = v => v != null && v > 0;\n\nconst nonNullIdxs = makeIndexOfs(notNullish);\nconst positiveIdxs = makeIndexOfs(isPositive);\n\nfunction getMinMax(data, _i0, _i1, sorted = 0, log = false) {\n//\tconsole.log(\"getMinMax()\");\n\n\tlet getEdgeIdxs = log ? positiveIdxs : nonNullIdxs;\n\tlet predicate = log ? isPositive : notNullish;\n\n\t[_i0, _i1] = getEdgeIdxs(data, _i0, _i1);\n\n\tlet _min = data[_i0];\n\tlet _max = data[_i0];\n\n\tif (_i0 > -1) {\n\t\tif (sorted == 1) {\n\t\t\t_min = data[_i0];\n\t\t\t_max = data[_i1];\n\t\t}\n\t\telse if (sorted == -1) {\n\t\t\t_min = data[_i1];\n\t\t\t_max = data[_i0];\n\t\t}\n\t\telse {\n\t\t\tfor (let i = _i0; i <= _i1; i++) {\n\t\t\t\tlet v = data[i];\n\n\t\t\t\tif (predicate(v)) {\n\t\t\t\t\tif (v < _min)\n\t\t\t\t\t\t_min = v;\n\t\t\t\t\telse if (v > _max)\n\t\t\t\t\t\t_max = v;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn [_min ?? inf, _max ?? -inf]; // todo: fix to return nulls\n}\n\nfunction rangeLog(min, max, base, fullMags) {\n\tlet minSign = sign(min);\n\tlet maxSign = sign(max);\n\n\tif (min == max) {\n\t\tif (minSign == -1) {\n\t\t\tmin *= base;\n\t\t\tmax /= base;\n\t\t}\n\t\telse {\n\t\t\tmin /= base;\n\t\t\tmax *= base;\n\t\t}\n\t}\n\n\tlet logFn = base == 10 ? log10 : log2;\n\n\tlet growMinAbs = minSign == 1 ? floor : ceil;\n\tlet growMaxAbs = maxSign == 1 ? ceil : floor;\n\n\tlet minExp = growMinAbs(logFn(abs(min)));\n\tlet maxExp = growMaxAbs(logFn(abs(max)));\n\n\tlet minIncr = pow(base, minExp);\n\tlet maxIncr = pow(base, maxExp);\n\n\t// fix values like Math.pow(10, -5) === 0.000009999999999999999\n\tif (base == 10) {\n\t\tif (minExp < 0)\n\t\t\tminIncr = roundDec(minIncr, -minExp);\n\t\tif (maxExp < 0)\n\t\t\tmaxIncr = roundDec(maxIncr, -maxExp);\n\t}\n\n\tif (fullMags || base == 2) {\n\t\tmin = minIncr * minSign;\n\t\tmax = maxIncr * maxSign;\n\t}\n\telse {\n\t\tmin = incrRoundDn(min, minIncr);\n\t\tmax = incrRoundUp(max, maxIncr);\n\t}\n\n\treturn [min, max];\n}\n\nfunction rangeAsinh(min, max, base, fullMags) {\n\tlet minMax = rangeLog(min, max, base, fullMags);\n\n\tif (min == 0)\n\t\tminMax[0] = 0;\n\n\tif (max == 0)\n\t\tminMax[1] = 0;\n\n\treturn minMax;\n}\n\nconst rangePad = 0.1;\n\nconst autoRangePart = {\n\tmode: 3,\n\tpad: rangePad,\n};\n\nconst _eqRangePart = {\n\tpad: 0,\n\tsoft: null,\n\tmode: 0,\n};\n\nconst _eqRange = {\n\tmin: _eqRangePart,\n\tmax: _eqRangePart,\n};\n\n// this ensures that non-temporal/numeric y-axes get multiple-snapped padding added above/below\n// TODO: also account for incrs when snapping to ensure top of axis gets a tick & value\nfunction rangeNum(_min, _max, mult, extra) {\n\tif (isObj(mult))\n\t\treturn _rangeNum(_min, _max, mult);\n\n\t_eqRangePart.pad = mult;\n\t_eqRangePart.soft = extra ? 0 : null;\n\t_eqRangePart.mode = extra ? 3 : 0;\n\n\treturn _rangeNum(_min, _max, _eqRange);\n}\n\n// nullish coalesce\nfunction ifNull(lh, rh) {\n\treturn lh == null ? rh : lh;\n}\n\n// checks if given index range in an array contains a non-null value\n// aka a range-bounded Array.some()\nfunction hasData(data, idx0, idx1) {\n\tidx0 = ifNull(idx0, 0);\n\tidx1 = ifNull(idx1, data.length - 1);\n\n\twhile (idx0 <= idx1) {\n\t\tif (data[idx0] != null)\n\t\t\treturn true;\n\t\tidx0++;\n\t}\n\n\treturn false;\n}\n\nfunction _rangeNum(_min, _max, cfg) {\n\tlet cmin = cfg.min;\n\tlet cmax = cfg.max;\n\n\tlet padMin = ifNull(cmin.pad, 0);\n\tlet padMax = ifNull(cmax.pad, 0);\n\n\tlet hardMin = ifNull(cmin.hard, -inf);\n\tlet hardMax = ifNull(cmax.hard, inf);\n\n\tlet softMin = ifNull(cmin.soft, inf);\n\tlet softMax = ifNull(cmax.soft, -inf);\n\n\tlet softMinMode = ifNull(cmin.mode, 0);\n\tlet softMaxMode = ifNull(cmax.mode, 0);\n\n\tlet delta = _max - _min;\n\tlet deltaMag = log10(delta);\n\n\tlet scalarMax = max(abs(_min), abs(_max));\n\tlet scalarMag = log10(scalarMax);\n\n\tlet scalarMagDelta = abs(scalarMag - deltaMag);\n\n\t// this handles situations like 89.7, 89.69999999999999\n\t// by assuming 0.001x deltas are precision errors\n//\tif (delta > 0 && delta < abs(_max) / 1e3)\n//\t\tdelta = 0;\n\n\t// treat data as flat if delta is less than 1e-24\n\t// or range is 11+ orders of magnitude below raw values, e.g. 99999999.99999996 - 100000000.00000004\n\tif (delta < 1e-24 || scalarMagDelta > 10) {\n\t\tdelta = 0;\n\n\t\t// if soft mode is 2 and all vals are flat at 0, avoid the 0.1 * 1e3 fallback\n\t\t// this prevents 0,0,0 from ranging to -100,100 when softMin/softMax are -1,1\n\t\tif (_min == 0 || _max == 0) {\n\t\t\tdelta = 1e-24;\n\n\t\t\tif (softMinMode == 2 && softMin != inf)\n\t\t\t\tpadMin = 0;\n\n\t\t\tif (softMaxMode == 2 && softMax != -inf)\n\t\t\t\tpadMax = 0;\n\t\t}\n\t}\n\n\tlet nonZeroDelta = delta || scalarMax || 1e3;\n\tlet mag = log10(nonZeroDelta);\n\tlet base = pow(10, floor(mag));\n\n\tlet _padMin = nonZeroDelta * (delta == 0 ? (_min == 0 ? .1 : 1) : padMin);\n\tlet _newMin = roundDec(incrRoundDn(_min - _padMin, base/10), 24);\n\tlet _softMin = _min >= softMin && (softMinMode == 1 || softMinMode == 3 && _newMin <= softMin || softMinMode == 2 && _newMin >= softMin) ? softMin : inf;\n\tlet minLim = max(hardMin, _newMin < _softMin && _min >= _softMin ? _softMin : min(_softMin, _newMin));\n\n\tlet _padMax = nonZeroDelta * (delta == 0 ? (_max == 0 ? .1 : 1) : padMax);\n\tlet _newMax = roundDec(incrRoundUp(_max + _padMax, base/10), 24);\n\tlet _softMax = _max <= softMax && (softMaxMode == 1 || softMaxMode == 3 && _newMax >= softMax || softMaxMode == 2 && _newMax <= softMax) ? softMax : -inf;\n\tlet maxLim = min(hardMax, _newMax > _softMax && _max <= _softMax ? _softMax : max(_softMax, _newMax));\n\n\tif (minLim == maxLim && minLim == 0)\n\t\tmaxLim = 100;\n\n\treturn [minLim, maxLim];\n}\n\n// alternative: https://stackoverflow.com/a/2254896\nconst numFormatter = new Intl.NumberFormat(domEnv ? nav.language : 'en-US');\nconst fmtNum = val => numFormatter.format(val);\n\nconst M = Math;\n\nconst PI = M.PI;\nconst abs = M.abs;\nconst floor = M.floor;\nconst round = M.round;\nconst ceil = M.ceil;\nconst min = M.min;\nconst max = M.max;\nconst pow = M.pow;\nconst sign = M.sign;\nconst log10 = M.log10;\nconst log2 = M.log2;\n// TODO: seems like this needs to match asinh impl if the passed v is tweaked?\nconst sinh = (v, linthresh = 1) => M.sinh(v) * linthresh;\nconst asinh = (v, linthresh = 1) => M.asinh(v / linthresh);\n\nconst inf = Infinity;\n\nfunction numIntDigits(x) {\n\treturn (log10((x ^ (x >> 31)) - (x >> 31)) | 0) + 1;\n}\n\nfunction clamp(num, _min, _max) {\n\treturn min(max(num, _min), _max);\n}\n\nfunction isFn(v) {\n\treturn typeof v == \"function\";\n}\n\nfunction fnOrSelf(v) {\n\treturn isFn(v) ? v : () => v;\n}\n\nconst noop = () => {};\n\n// note: these identity fns may get deoptimized if reused for different arg types\n// a TS version would enforce they stay monotyped and require making variants\nconst retArg0 = _0 => _0;\n\nconst retArg1 = (_0, _1) => _1;\n\nconst retNull = _ => null;\n\nconst retTrue = _ => true;\n\nconst retEq = (a, b) => a == b;\n\nconst regex6 = /\\.\\d*?(?=9{6,}|0{6,})/gm;\n\n// e.g. 17999.204999999998 -> 17999.205\nconst fixFloat = val => {\n\tif (isInt(val) || fixedDec.has(val))\n\t\treturn val;\n\n\tconst str = `${val}`;\n\n\tconst match = str.match(regex6);\n\n\tif (match == null)\n\t\treturn val;\n\n\tlet len = match[0].length - 1;\n\n\t// e.g. 1.0000000000000001e-24\n\tif (str.indexOf('e-') != -1) {\n\t\tlet [num, exp] = str.split('e');\n\t\treturn +`${fixFloat(num)}e${exp}`;\n\t}\n\n\treturn roundDec(val, len);\n};\n\nfunction incrRound(num, incr) {\n\treturn fixFloat(roundDec(fixFloat(num/incr))*incr);\n}\n\nfunction incrRoundUp(num, incr) {\n\treturn fixFloat(ceil(fixFloat(num/incr))*incr);\n}\n\nfunction incrRoundDn(num, incr) {\n\treturn fixFloat(floor(fixFloat(num/incr))*incr);\n}\n\n// https://stackoverflow.com/a/48764436\n// rounds half away from zero\nfunction roundDec(val, dec = 0) {\n\tif (isInt(val))\n\t\treturn val;\n//\telse if (dec == 0)\n//\t\treturn round(val);\n\n\tlet p = 10 ** dec;\n\tlet n = (val * p) * (1 + Number.EPSILON);\n\treturn round(n) / p;\n}\n\nconst fixedDec = new Map();\n\nfunction guessDec(num) {\n\treturn ((\"\"+num).split(\".\")[1] || \"\").length;\n}\n\nfunction genIncrs(base, minExp, maxExp, mults) {\n\tlet incrs = [];\n\n\tlet multDec = mults.map(guessDec);\n\n\tfor (let exp = minExp; exp < maxExp; exp++) {\n\t\tlet expa = abs(exp);\n\t\tlet mag = roundDec(pow(base, exp), expa);\n\n\t\tfor (let i = 0; i < mults.length; i++) {\n\t\t\tlet _incr = base == 10 ? +`${mults[i]}e${exp}` : mults[i] * mag;\n\t\t\tlet dec = (exp >= 0 ? 0 : expa) + (exp >= multDec[i] ? 0 : multDec[i]);\n\t\t\tlet incr = base == 10 ? _incr : roundDec(_incr, dec);\n\t\t\tincrs.push(incr);\n\t\t\tfixedDec.set(incr, dec);\n\t\t}\n\t}\n\n\treturn incrs;\n}\n\n//export const assign = Object.assign;\n\nconst EMPTY_OBJ = {};\nconst EMPTY_ARR = [];\n\nconst nullNullTuple = [null, null];\n\nconst isArr = Array.isArray;\nconst isInt = Number.isInteger;\nconst isUndef = v => v === void 0;\n\nfunction isStr(v) {\n\treturn typeof v == 'string';\n}\n\nfunction isObj(v) {\n\tlet is = false;\n\n\tif (v != null) {\n\t\tlet c = v.constructor;\n\t\tis = c == null || c == Object;\n\t}\n\n\treturn is;\n}\n\nfunction fastIsObj(v) {\n\treturn v != null && typeof v == 'object';\n}\n\nconst TypedArray = Object.getPrototypeOf(Uint8Array);\n\nconst __proto__ = \"__proto__\";\n\nfunction copy(o, _isObj = isObj) {\n\tlet out;\n\n\tif (isArr(o)) {\n\t\tlet val = o.find(v => v != null);\n\n\t\tif (isArr(val) || _isObj(val)) {\n\t\t\tout = Array(o.length);\n\t\t\tfor (let i = 0; i < o.length; i++)\n\t\t\t\tout[i] = copy(o[i], _isObj);\n\t\t}\n\t\telse\n\t\t\tout = o.slice();\n\t}\n\telse if (o instanceof TypedArray) // also (ArrayBuffer.isView(o) && !(o instanceof DataView))\n\t\tout = o.slice();\n\telse if (_isObj(o)) {\n\t\tout = {};\n\t\tfor (let k in o) {\n\t\t\tif (k != __proto__)\n\t\t\t\tout[k] = copy(o[k], _isObj);\n\t\t}\n\t}\n\telse\n\t\tout = o;\n\n\treturn out;\n}\n\nfunction assign(targ) {\n\tlet args = arguments;\n\n\tfor (let i = 1; i < args.length; i++) {\n\t\tlet src = args[i];\n\n\t\tfor (let key in src) {\n\t\t\tif (key != __proto__) {\n\t\t\t\tif (isObj(targ[key]))\n\t\t\t\t\tassign(targ[key], copy(src[key]));\n\t\t\t\telse\n\t\t\t\t\ttarg[key] = copy(src[key]);\n\t\t\t}\n\t\t}\n\t}\n\n\treturn targ;\n}\n\n// nullModes\nconst NULL_REMOVE = 0; // nulls are converted to undefined (e.g. for spanGaps: true)\nconst NULL_RETAIN = 1; // nulls are retained, with alignment artifacts set to undefined (default)\nconst NULL_EXPAND = 2; // nulls are expanded to include any adjacent alignment artifacts\n\n// sets undefined values to nulls when adjacent to existing nulls (minesweeper)\nfunction nullExpand(yVals, nullIdxs, alignedLen) {\n\tfor (let i = 0, xi, lastNullIdx = -1; i < nullIdxs.length; i++) {\n\t\tlet nullIdx = nullIdxs[i];\n\n\t\tif (nullIdx > lastNullIdx) {\n\t\t\txi = nullIdx - 1;\n\t\t\twhile (xi >= 0 && yVals[xi] == null)\n\t\t\t\tyVals[xi--] = null;\n\n\t\t\txi = nullIdx + 1;\n\t\t\twhile (xi < alignedLen && yVals[xi] == null)\n\t\t\t\tyVals[lastNullIdx = xi++] = null;\n\t\t}\n\t}\n}\n\n// nullModes is a tables-matched array indicating how to treat nulls in each series\n// output is sorted ASC on the joined field (table[0]) and duplicate join values are collapsed\nfunction join(tables, nullModes) {\n\tif (allHeadersSame(tables)) {\n\t//\tconsole.log('cheap join!');\n\n\t\tlet table = tables[0].slice();\n\n\t\tfor (let i = 1; i < tables.length; i++)\n\t\t\ttable.push(...tables[i].slice(1));\n\n\t\tif (!isAsc(table[0]))\n\t\t\ttable = sortCols(table);\n\n\t\treturn table;\n\t}\n\n\tlet xVals = new Set();\n\n\tfor (let ti = 0; ti < tables.length; ti++) {\n\t\tlet t = tables[ti];\n\t\tlet xs = t[0];\n\t\tlet len = xs.length;\n\n\t\tfor (let i = 0; i < len; i++)\n\t\t\txVals.add(xs[i]);\n\t}\n\n\tlet data = [Array.from(xVals).sort((a, b) => a - b)];\n\n\tlet alignedLen = data[0].length;\n\n\tlet xIdxs = new Map();\n\n\tfor (let i = 0; i < alignedLen; i++)\n\t\txIdxs.set(data[0][i], i);\n\n\tfor (let ti = 0; ti < tables.length; ti++) {\n\t\tlet t = tables[ti];\n\t\tlet xs = t[0];\n\n\t\tfor (let si = 1; si < t.length; si++) {\n\t\t\tlet ys = t[si];\n\n\t\t\tlet yVals = Array(alignedLen).fill(undefined);\n\n\t\t\tlet nullMode = nullModes ? nullModes[ti][si] : NULL_RETAIN;\n\n\t\t\tlet nullIdxs = [];\n\n\t\t\tfor (let i = 0; i < ys.length; i++) {\n\t\t\t\tlet yVal = ys[i];\n\t\t\t\tlet alignedIdx = xIdxs.get(xs[i]);\n\n\t\t\t\tif (yVal === null) {\n\t\t\t\t\tif (nullMode != NULL_REMOVE) {\n\t\t\t\t\t\tyVals[alignedIdx] = yVal;\n\n\t\t\t\t\t\tif (nullMode == NULL_EXPAND)\n\t\t\t\t\t\t\tnullIdxs.push(alignedIdx);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t\tyVals[alignedIdx] = yVal;\n\t\t\t}\n\n\t\t\tnullExpand(yVals, nullIdxs, alignedLen);\n\n\t\t\tdata.push(yVals);\n\t\t}\n\t}\n\n\treturn data;\n}\n\nconst microTask = typeof queueMicrotask == \"undefined\" ? fn => Promise.resolve().then(fn) : queueMicrotask;\n\n// TODO: https://github.com/dy/sort-ids (~2x faster for 1e5+ arrays)\nfunction sortCols(table) {\n\tlet head = table[0];\n\tlet rlen = head.length;\n\n\tlet idxs = Array(rlen);\n\tfor (let i = 0; i < idxs.length; i++)\n\t\tidxs[i] = i;\n\n\tidxs.sort((i0, i1) => head[i0] - head[i1]);\n\n\tlet table2 = [];\n\tfor (let i = 0; i < table.length; i++) {\n\t\tlet row = table[i];\n\t\tlet row2 = Array(rlen);\n\n\t\tfor (let j = 0; j < rlen; j++)\n\t\t\trow2[j] = row[idxs[j]];\n\n\t\ttable2.push(row2);\n\t}\n\n\treturn table2;\n}\n\n// test if we can do cheap join (all join fields same)\nfunction allHeadersSame(tables) {\n\tlet vals0 = tables[0][0];\n\tlet len0 = vals0.length;\n\n\tfor (let i = 1; i < tables.length; i++) {\n\t\tlet vals1 = tables[i][0];\n\n\t\tif (vals1.length != len0)\n\t\t\treturn false;\n\n\t\tif (vals1 != vals0) {\n\t\t\tfor (let j = 0; j < len0; j++) {\n\t\t\t\tif (vals1[j] != vals0[j])\n\t\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\t}\n\n\treturn true;\n}\n\nfunction isAsc(vals, samples = 100) {\n\tconst len = vals.length;\n\n\t// empty or single value\n\tif (len <= 1)\n\t\treturn true;\n\n\t// skip leading & trailing nullish\n\tlet firstIdx = 0;\n\tlet lastIdx = len - 1;\n\n\twhile (firstIdx <= lastIdx && vals[firstIdx] == null)\n\t\tfirstIdx++;\n\n\twhile (lastIdx >= firstIdx && vals[lastIdx] == null)\n\t\tlastIdx--;\n\n\t// all nullish or one value surrounded by nullish\n\tif (lastIdx <= firstIdx)\n\t\treturn true;\n\n\tconst stride = max(1, floor((lastIdx - firstIdx + 1) / samples));\n\n\tfor (let prevVal = vals[firstIdx], i = firstIdx + stride; i <= lastIdx; i += stride) {\n\t\tconst v = vals[i];\n\n\t\tif (v != null) {\n\t\t\tif (v <= prevVal)\n\t\t\t\treturn false;\n\n\t\t\tprevVal = v;\n\t\t}\n\t}\n\n\treturn true;\n}\n\nconst months = [\n\t\"January\",\n\t\"February\",\n\t\"March\",\n\t\"April\",\n\t\"May\",\n\t\"June\",\n\t\"July\",\n\t\"August\",\n\t\"September\",\n\t\"October\",\n\t\"November\",\n\t\"December\",\n];\n\nconst days = [\n\t\"Sunday\",\n\t\"Monday\",\n\t\"Tuesday\",\n\t\"Wednesday\",\n\t\"Thursday\",\n\t\"Friday\",\n\t\"Saturday\",\n];\n\nfunction slice3(str) {\n\treturn str.slice(0, 3);\n}\n\nconst days3 = days.map(slice3);\n\nconst months3 = months.map(slice3);\n\nconst engNames = {\n\tMMMM: months,\n\tMMM: months3,\n\tWWWW: days,\n\tWWW: days3,\n};\n\nfunction zeroPad2(int) {\n\treturn (int < 10 ? '0' : '') + int;\n}\n\nfunction zeroPad3(int) {\n\treturn (int < 10 ? '00' : int < 100 ? '0' : '') + int;\n}\n\n/*\nfunction suffix(int) {\n\tlet mod10 = int % 10;\n\n\treturn int + (\n\t\tmod10 == 1 && int != 11 ? \"st\" :\n\t\tmod10 == 2 && int != 12 ? \"nd\" :\n\t\tmod10 == 3 && int != 13 ? \"rd\" : \"th\"\n\t);\n}\n*/\n\nconst subs = {\n\t// 2019\n\tYYYY:\td => d.getFullYear(),\n\t// 19\n\tYY:\t\td => (d.getFullYear()+'').slice(2),\n\t// July\n\tMMMM:\t(d, names) => names.MMMM[d.getMonth()],\n\t// Jul\n\tMMM:\t(d, names) => names.MMM[d.getMonth()],\n\t// 07\n\tMM:\t\td => zeroPad2(d.getMonth()+1),\n\t// 7\n\tM:\t\td => d.getMonth()+1,\n\t// 09\n\tDD:\t\td => zeroPad2(d.getDate()),\n\t// 9\n\tD:\t\td => d.getDate(),\n\t// Monday\n\tWWWW:\t(d, names) => names.WWWW[d.getDay()],\n\t// Mon\n\tWWW:\t(d, names) => names.WWW[d.getDay()],\n\t// 03\n\tHH:\t\td => zeroPad2(d.getHours()),\n\t// 3\n\tH:\t\td => d.getHours(),\n\t// 9 (12hr, unpadded)\n\th:\t\td => {let h = d.getHours(); return h == 0 ? 12 : h > 12 ? h - 12 : h;},\n\t// AM\n\tAA:\t\td => d.getHours() >= 12 ? 'PM' : 'AM',\n\t// am\n\taa:\t\td => d.getHours() >= 12 ? 'pm' : 'am',\n\t// a\n\ta:\t\td => d.getHours() >= 12 ? 'p' : 'a',\n\t// 09\n\tmm:\t\td => zeroPad2(d.getMinutes()),\n\t// 9\n\tm:\t\td => d.getMinutes(),\n\t// 09\n\tss:\t\td => zeroPad2(d.getSeconds()),\n\t// 9\n\ts:\t\td => d.getSeconds(),\n\t// 374\n\tfff:\td => zeroPad3(d.getMilliseconds()),\n};\n\nfunction fmtDate(tpl, names) {\n\tnames = names || engNames;\n\tlet parts = [];\n\n\tlet R = /\\{([a-z]+)\\}|[^{]+/gi, m;\n\n\twhile (m = R.exec(tpl))\n\t\tparts.push(m[0][0] == '{' ? subs[m[1]] : m[0]);\n\n\treturn d => {\n\t\tlet out = '';\n\n\t\tfor (let i = 0; i < parts.length; i++)\n\t\t\tout += typeof parts[i] == \"string\" ? parts[i] : parts[i](d, names);\n\n\t\treturn out;\n\t}\n}\n\nconst localTz = new Intl.DateTimeFormat().resolvedOptions().timeZone;\n\n// https://stackoverflow.com/questions/15141762/how-to-initialize-a-javascript-date-to-a-particular-time-zone/53652131#53652131\nfunction tzDate(date, tz) {\n\tlet date2;\n\n\t// perf optimization\n\tif (tz == 'UTC' || tz == 'Etc/UTC')\n\t\tdate2 = new Date(+date + date.getTimezoneOffset() * 6e4);\n\telse if (tz == localTz)\n\t\tdate2 = date;\n\telse {\n\t\tdate2 = new Date(date.toLocaleString('en-US', {timeZone: tz}));\n\t\tdate2.setMilliseconds(date.getMilliseconds());\n\t}\n\n\treturn date2;\n}\n\n//export const series = [];\n\n// default formatters:\n\nconst onlyWhole = v => v % 1 == 0;\n\nconst allMults = [1,2,2.5,5];\n\n// ...0.01, 0.02, 0.025, 0.05, 0.1, 0.2, 0.25, 0.5\nconst decIncrs = genIncrs(10, -32, 0, allMults);\n\n// 1, 2, 2.5, 5, 10, 20, 25, 50...\nconst oneIncrs = genIncrs(10, 0, 32, allMults);\n\n// 1, 2, 5, 10, 20, 25, 50...\nconst wholeIncrs = oneIncrs.filter(onlyWhole);\n\nconst numIncrs = decIncrs.concat(oneIncrs);\n\nconst NL = \"\\n\";\n\nconst yyyy = \"{YYYY}\";\nconst NLyyyy = NL + yyyy;\nconst md = \"{M}/{D}\";\nconst NLmd = NL + md;\nconst NLmdyy = NLmd + \"/{YY}\";\n\nconst aa = \"{aa}\";\nconst hmm = \"{h}:{mm}\";\nconst hmmaa = hmm + aa;\nconst NLhmmaa = NL + hmmaa;\nconst ss = \":{ss}\";\n\nconst _ = null;\n\nfunction genTimeStuffs(ms) {\n\tlet\ts = ms * 1e3,\n\t\tm = s * 60,\n\t\th = m * 60,\n\t\td = h * 24,\n\t\tmo = d * 30,\n\t\ty = d * 365;\n\n\t// min of 1e-3 prevents setting a temporal x ticks too small since Date objects cannot advance ticks smaller than 1ms\n\tlet subSecIncrs = ms == 1 ? genIncrs(10, 0, 3, allMults).filter(onlyWhole) : genIncrs(10, -3, 0, allMults);\n\n\tlet timeIncrs = subSecIncrs.concat([\n\t\t// minute divisors (# of secs)\n\t\ts,\n\t\ts * 5,\n\t\ts * 10,\n\t\ts * 15,\n\t\ts * 30,\n\t\t// hour divisors (# of mins)\n\t\tm,\n\t\tm * 5,\n\t\tm * 10,\n\t\tm * 15,\n\t\tm * 30,\n\t\t// day divisors (# of hrs)\n\t\th,\n\t\th * 2,\n\t\th * 3,\n\t\th * 4,\n\t\th * 6,\n\t\th * 8,\n\t\th * 12,\n\t\t// month divisors TODO: need more?\n\t\td,\n\t\td * 2,\n\t\td * 3,\n\t\td * 4,\n\t\td * 5,\n\t\td * 6,\n\t\td * 7,\n\t\td * 8,\n\t\td * 9,\n\t\td * 10,\n\t\td * 15,\n\t\t// year divisors (# months, approx)\n\t\tmo,\n\t\tmo * 2,\n\t\tmo * 3,\n\t\tmo * 4,\n\t\tmo * 6,\n\t\t// century divisors\n\t\ty,\n\t\ty * 2,\n\t\ty * 5,\n\t\ty * 10,\n\t\ty * 25,\n\t\ty * 50,\n\t\ty * 100,\n\t]);\n\n\t// [0]: minimum num secs in the tick incr\n\t// [1]: default tick format\n\t// [2-7]: rollover tick formats\n\t// [8]: mode: 0: replace [1] -> [2-7], 1: concat [1] + [2-7]\n\tconst _timeAxisStamps = [\n\t// tick incr default year month day hour min sec mode\n\t\t[y, yyyy, _, _, _, _, _, _, 1],\n\t\t[d * 28, \"{MMM}\", NLyyyy, _, _, _, _, _, 1],\n\t\t[d, md, NLyyyy, _, _, _, _, _, 1],\n\t\t[h, \"{h}\" + aa, NLmdyy, _, NLmd, _, _, _, 1],\n\t\t[m, hmmaa, NLmdyy, _, NLmd, _, _, _, 1],\n\t\t[s, ss, NLmdyy + \" \" + hmmaa, _, NLmd + \" \" + hmmaa, _, NLhmmaa, _, 1],\n\t\t[ms, ss + \".{fff}\", NLmdyy + \" \" + hmmaa, _, NLmd + \" \" + hmmaa, _, NLhmmaa, _, 1],\n\t];\n\n\t// the ensures that axis ticks, values & grid are aligned to logical temporal breakpoints and not an arbitrary timestamp\n\t// https://www.timeanddate.com/time/dst/\n\t// https://www.timeanddate.com/time/dst/2019.html\n\t// https://www.epochconverter.com/timezones\n\tfunction timeAxisSplits(tzDate) {\n\t\treturn (self, axisIdx, scaleMin, scaleMax, foundIncr, foundSpace) => {\n\t\t\tlet splits = [];\n\t\t\tlet isYr = foundIncr >= y;\n\t\t\tlet isMo = foundIncr >= mo && foundIncr < y;\n\n\t\t\t// get the timezone-adjusted date\n\t\t\tlet minDate = tzDate(scaleMin);\n\t\t\tlet minDateTs = roundDec(minDate * ms, 3);\n\n\t\t\t// get ts of 12am (this lands us at or before the original scaleMin)\n\t\t\tlet minMin = mkDate(minDate.getFullYear(), isYr ? 0 : minDate.getMonth(), isMo || isYr ? 1 : minDate.getDate());\n\t\t\tlet minMinTs = roundDec(minMin * ms, 3);\n\n\t\t\tif (isMo || isYr) {\n\t\t\t\tlet moIncr = isMo ? foundIncr / mo : 0;\n\t\t\t\tlet yrIncr = isYr ? foundIncr / y : 0;\n\t\t\t//\tlet tzOffset = scaleMin - minDateTs;\t\t// needed?\n\t\t\t\tlet split = minDateTs == minMinTs ? minDateTs : roundDec(mkDate(minMin.getFullYear() + yrIncr, minMin.getMonth() + moIncr, 1) * ms, 3);\n\t\t\t\tlet splitDate = new Date(round(split / ms));\n\t\t\t\tlet baseYear = splitDate.getFullYear();\n\t\t\t\tlet baseMonth = splitDate.getMonth();\n\n\t\t\t\tfor (let i = 0; split <= scaleMax; i++) {\n\t\t\t\t\tlet next = mkDate(baseYear + yrIncr * i, baseMonth + moIncr * i, 1);\n\t\t\t\t\tlet offs = next - tzDate(roundDec(next * ms, 3));\n\n\t\t\t\t\tsplit = roundDec((+next + offs) * ms, 3);\n\n\t\t\t\t\tif (split <= scaleMax)\n\t\t\t\t\t\tsplits.push(split);\n\t\t\t\t}\n\t\t\t}\n\t\t\telse {\n\t\t\t\tlet incr0 = foundIncr >= d ? d : foundIncr;\n\t\t\t\tlet tzOffset = floor(scaleMin) - floor(minDateTs);\n\t\t\t\tlet split = minMinTs + tzOffset + incrRoundUp(minDateTs - minMinTs, incr0);\n\t\t\t\tsplits.push(split);\n\n\t\t\t\tlet date0 = tzDate(split);\n\n\t\t\t\tlet prevHour = date0.getHours() + (date0.getMinutes() / m) + (date0.getSeconds() / h);\n\t\t\t\tlet incrHours = foundIncr / h;\n\n\t\t\t\tlet minSpace = self.axes[axisIdx]._space;\n\t\t\t\tlet pctSpace = foundSpace / minSpace;\n\n\t\t\t\twhile (1) {\n\t\t\t\t\tsplit = roundDec(split + foundIncr, ms == 1 ? 0 : 3);\n\n\t\t\t\t\tif (split > scaleMax)\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tif (incrHours > 1) {\n\t\t\t\t\t\tlet expectedHour = floor(roundDec(prevHour + incrHours, 6)) % 24;\n\t\t\t\t\t\tlet splitDate = tzDate(split);\n\t\t\t\t\t\tlet actualHour = splitDate.getHours();\n\n\t\t\t\t\t\tlet dstShift = actualHour - expectedHour;\n\n\t\t\t\t\t\tif (dstShift > 1)\n\t\t\t\t\t\t\tdstShift = -1;\n\n\t\t\t\t\t\tsplit -= dstShift * h;\n\n\t\t\t\t\t\tprevHour = (prevHour + incrHours) % 24;\n\n\t\t\t\t\t\t// add a tick only if it's further than 70% of the min allowed label spacing\n\t\t\t\t\t\tlet prevSplit = splits[splits.length - 1];\n\t\t\t\t\t\tlet pctIncr = roundDec((split - prevSplit) / foundIncr, 3);\n\n\t\t\t\t\t\tif (pctIncr * pctSpace >= .7)\n\t\t\t\t\t\t\tsplits.push(split);\n\t\t\t\t\t}\n\t\t\t\t\telse\n\t\t\t\t\t\tsplits.push(split);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn splits;\n\t\t}\n\t}\n\n\treturn [\n\t\ttimeIncrs,\n\t\t_timeAxisStamps,\n\t\ttimeAxisSplits,\n\t];\n}\n\nconst [ timeIncrsMs, _timeAxisStampsMs, timeAxisSplitsMs ] = genTimeStuffs(1);\nconst [ timeIncrsS, _timeAxisStampsS, timeAxisSplitsS ] = genTimeStuffs(1e-3);\n\n// base 2\ngenIncrs(2, -53, 53, [1]);\n\n/*\nconsole.log({\n\tdecIncrs,\n\toneIncrs,\n\twholeIncrs,\n\tnumIncrs,\n\ttimeIncrs,\n\tfixedDec,\n});\n*/\n\nfunction timeAxisStamps(stampCfg, fmtDate) {\n\treturn stampCfg.map(s => s.map((v, i) =>\n\t\ti == 0 || i == 8 || v == null ? v : fmtDate(i == 1 || s[8] == 0 ? v : s[1] + v)\n\t));\n}\n\n// TODO: will need to accept spaces[] and pull incr into the loop when grid will be non-uniform, eg for log scales.\n// currently we ignore this for months since they're *nearly* uniform and the added complexity is not worth it\nfunction timeAxisVals(tzDate, stamps) {\n\treturn (self, splits, axisIdx, foundSpace, foundIncr) => {\n\t\tlet s = stamps.find(s => foundIncr >= s[0]) || stamps[stamps.length - 1];\n\n\t\t// these track boundaries when a full label is needed again\n\t\tlet prevYear;\n\t\tlet prevMnth;\n\t\tlet prevDate;\n\t\tlet prevHour;\n\t\tlet prevMins;\n\t\tlet prevSecs;\n\n\t\treturn splits.map(split => {\n\t\t\tlet date = tzDate(split);\n\n\t\t\tlet newYear = date.getFullYear();\n\t\t\tlet newMnth = date.getMonth();\n\t\t\tlet newDate = date.getDate();\n\t\t\tlet newHour = date.getHours();\n\t\t\tlet newMins = date.getMinutes();\n\t\t\tlet newSecs = date.getSeconds();\n\n\t\t\tlet stamp = (\n\t\t\t\tnewYear != prevYear && s[2] ||\n\t\t\t\tnewMnth != prevMnth && s[3] ||\n\t\t\t\tnewDate != prevDate && s[4] ||\n\t\t\t\tnewHour != prevHour && s[5] ||\n\t\t\t\tnewMins != prevMins && s[6] ||\n\t\t\t\tnewSecs != prevSecs && s[7] ||\n\t\t\t\t s[1]\n\t\t\t);\n\n\t\t\tprevYear = newYear;\n\t\t\tprevMnth = newMnth;\n\t\t\tprevDate = newDate;\n\t\t\tprevHour = newHour;\n\t\t\tprevMins = newMins;\n\t\t\tprevSecs = newSecs;\n\n\t\t\treturn stamp(date);\n\t\t});\n\t}\n}\n\n// for when axis.values is defined as a static fmtDate template string\nfunction timeAxisVal(tzDate, dateTpl) {\n\tlet stamp = fmtDate(dateTpl);\n\treturn (self, splits, axisIdx, foundSpace, foundIncr) => splits.map(split => stamp(tzDate(split)));\n}\n\nfunction mkDate(y, m, d) {\n\treturn new Date(y, m, d);\n}\n\nfunction timeSeriesStamp(stampCfg, fmtDate) {\n\treturn fmtDate(stampCfg);\n}\nconst _timeSeriesStamp = '{YYYY}-{MM}-{DD} {h}:{mm}{aa}';\n\nfunction timeSeriesVal(tzDate, stamp) {\n\treturn (self, val, seriesIdx, dataIdx) => dataIdx == null ? LEGEND_DISP : stamp(tzDate(val));\n}\n\nfunction legendStroke(self, seriesIdx) {\n\tlet s = self.series[seriesIdx];\n\treturn s.width ? s.stroke(self, seriesIdx) : s.points.width ? s.points.stroke(self, seriesIdx) : null;\n}\n\nfunction legendFill(self, seriesIdx) {\n\treturn self.series[seriesIdx].fill(self, seriesIdx);\n}\n\nconst legendOpts = {\n\tshow: true,\n\tlive: true,\n\tisolate: false,\n\tmount: noop,\n\tmarkers: {\n\t\tshow: true,\n\t\twidth: 2,\n\t\tstroke: legendStroke,\n\t\tfill: legendFill,\n\t\tdash: \"solid\",\n\t},\n\tidx: null,\n\tidxs: null,\n\tvalues: [],\n};\n\nfunction cursorPointShow(self, si) {\n\tlet o = self.cursor.points;\n\n\tlet pt = placeDiv();\n\n\tlet size = o.size(self, si);\n\tsetStylePx(pt, WIDTH, size);\n\tsetStylePx(pt, HEIGHT, size);\n\n\tlet mar = size / -2;\n\tsetStylePx(pt, \"marginLeft\", mar);\n\tsetStylePx(pt, \"marginTop\", mar);\n\n\tlet width = o.width(self, si, size);\n\twidth && setStylePx(pt, \"borderWidth\", width);\n\n\treturn pt;\n}\n\nfunction cursorPointFill(self, si) {\n\tlet sp = self.series[si].points;\n\treturn sp._fill || sp._stroke;\n}\n\nfunction cursorPointStroke(self, si) {\n\tlet sp = self.series[si].points;\n\treturn sp._stroke || sp._fill;\n}\n\nfunction cursorPointSize(self, si) {\n\tlet sp = self.series[si].points;\n\treturn sp.size;\n}\n\nconst moveTuple = [0,0];\n\nfunction cursorMove(self, mouseLeft1, mouseTop1) {\n\tmoveTuple[0] = mouseLeft1;\n\tmoveTuple[1] = mouseTop1;\n\treturn moveTuple;\n}\n\nfunction filtBtn0(self, targ, handle, onlyTarg = true) {\n\treturn e => {\n\t\te.button == 0 && (!onlyTarg || e.target == targ) && handle(e);\n\t};\n}\n\nfunction filtTarg(self, targ, handle, onlyTarg = true) {\n\treturn e => {\n\t\t(!onlyTarg || e.target == targ) && handle(e);\n\t};\n}\n\nconst cursorOpts = {\n\tshow: true,\n\tx: true,\n\ty: true,\n\tlock: false,\n\tmove: cursorMove,\n\tpoints: {\n\t\tone: false,\n\t\tshow: cursorPointShow,\n\t\tsize: cursorPointSize,\n\t\twidth: 0,\n\t\tstroke: cursorPointStroke,\n\t\tfill: cursorPointFill,\n\t},\n\n\tbind: {\n\t\tmousedown: filtBtn0,\n\t\tmouseup: filtBtn0,\n\t\tclick: filtBtn0, // legend clicks, not .u-over clicks\n\t\tdblclick: filtBtn0,\n\n\t\tmousemove: filtTarg,\n\t\tmouseleave: filtTarg,\n\t\tmouseenter: filtTarg,\n\t},\n\n\tdrag: {\n\t\tsetScale: true,\n\t\tx: true,\n\t\ty: false,\n\t\tdist: 0,\n\t\tuni: null,\n\t\tclick: (self, e) => {\n\t\t//\te.preventDefault();\n\t\t\te.stopPropagation();\n\t\t\te.stopImmediatePropagation();\n\t\t},\n\t\t_x: false,\n\t\t_y: false,\n\t},\n\n\tfocus: {\n\t\tdist: (self, seriesIdx, dataIdx, valPos, curPos) => valPos - curPos,\n\t\tprox: -1,\n\t\tbias: 0,\n\t},\n\n\thover: {\n\t\tskip: [void 0],\n\t\tprox: null,\n\t\tbias: 0,\n\t},\n\n\tleft: -10,\n\ttop: -10,\n\tidx: null,\n\tdataIdx: null,\n\tidxs: null,\n\n\tevent: null,\n};\n\nconst axisLines = {\n\tshow: true,\n\tstroke: \"rgba(0,0,0,0.07)\",\n\twidth: 2,\n//\tdash: [],\n};\n\nconst grid = assign({}, axisLines, {\n\tfilter: retArg1,\n});\n\nconst ticks = assign({}, grid, {\n\tsize: 10,\n});\n\nconst border = assign({}, axisLines, {\n\tshow: false,\n});\n\nconst font = '12px system-ui, -apple-system, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, \"Noto Sans\", sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\"';\nconst labelFont = \"bold \" + font;\nconst lineGap = 1.5;\t// font-size multiplier\n\nconst xAxisOpts = {\n\tshow: true,\n\tscale: \"x\",\n\tstroke: hexBlack,\n\tspace: 50,\n\tgap: 5,\n\talignTo: 1,\n\tsize: 50,\n\tlabelGap: 0,\n\tlabelSize: 30,\n\tlabelFont,\n\tside: 2,\n//\tclass: \"x-vals\",\n//\tincrs: timeIncrs,\n//\tvalues: timeVals,\n//\tfilter: retArg1,\n\tgrid,\n\tticks,\n\tborder,\n\tfont,\n\tlineGap,\n\trotate: 0,\n};\n\nconst numSeriesLabel = \"Value\";\nconst timeSeriesLabel = \"Time\";\n\nconst xSeriesOpts = {\n\tshow: true,\n\tscale: \"x\",\n\tauto: false,\n\tsorted: 1,\n//\tlabel: \"Time\",\n//\tvalue: v => stamp(new Date(v * 1e3)),\n\n\t// internal caches\n\tmin: inf,\n\tmax: -inf,\n\tidxs: [],\n};\n\nfunction numAxisVals(self, splits, axisIdx, foundSpace, foundIncr) {\n\treturn splits.map(v => v == null ? \"\" : fmtNum(v));\n}\n\nfunction numAxisSplits(self, axisIdx, scaleMin, scaleMax, foundIncr, foundSpace, forceMin) {\n\tlet splits = [];\n\n\tlet numDec = fixedDec.get(foundIncr) || 0;\n\n\tscaleMin = forceMin ? scaleMin : roundDec(incrRoundUp(scaleMin, foundIncr), numDec);\n\n\tfor (let val = scaleMin; val <= scaleMax; val = roundDec(val + foundIncr, numDec))\n\t\tsplits.push(Object.is(val, -0) ? 0 : val);\t\t// coalesces -0\n\n\treturn splits;\n}\n\n// this doesnt work for sin, which needs to come off from 0 independently in pos and neg dirs\nfunction logAxisSplits(self, axisIdx, scaleMin, scaleMax, foundIncr, foundSpace, forceMin) {\n\tconst splits = [];\n\n\tconst logBase = self.scales[self.axes[axisIdx].scale].log;\n\n\tconst logFn = logBase == 10 ? log10 : log2;\n\n\tconst exp = floor(logFn(scaleMin));\n\n\tfoundIncr = pow(logBase, exp);\n\n\t// boo: 10 ** -24 === 1.0000000000000001e-24\n\t// this grabs the proper 1e-24 one\n\tif (logBase == 10)\n\t\tfoundIncr = numIncrs[closestIdx(foundIncr, numIncrs)];\n\n\tlet split = scaleMin;\n\tlet nextMagIncr = foundIncr * logBase;\n\n\tif (logBase == 10)\n\t\tnextMagIncr = numIncrs[closestIdx(nextMagIncr, numIncrs)];\n\n\tdo {\n\t\tsplits.push(split);\n\t\tsplit = split + foundIncr;\n\n\t\tif (logBase == 10 && !fixedDec.has(split))\n\t\t\tsplit = roundDec(split, fixedDec.get(foundIncr));\n\n\t\tif (split >= nextMagIncr) {\n\t\t\tfoundIncr = split;\n\t\t\tnextMagIncr = foundIncr * logBase;\n\n\t\t\tif (logBase == 10)\n\t\t\t\tnextMagIncr = numIncrs[closestIdx(nextMagIncr, numIncrs)];\n\t\t}\n\t} while (split <= scaleMax);\n\n\treturn splits;\n}\n\nfunction asinhAxisSplits(self, axisIdx, scaleMin, scaleMax, foundIncr, foundSpace, forceMin) {\n\tlet sc = self.scales[self.axes[axisIdx].scale];\n\n\tlet linthresh = sc.asinh;\n\n\tlet posSplits = scaleMax > linthresh ? logAxisSplits(self, axisIdx, max(linthresh, scaleMin), scaleMax, foundIncr) : [linthresh];\n\tlet zero = scaleMax >= 0 && scaleMin <= 0 ? [0] : [];\n\tlet negSplits = scaleMin < -linthresh ? logAxisSplits(self, axisIdx, max(linthresh, -scaleMax), -scaleMin, foundIncr): [linthresh];\n\n\treturn negSplits.reverse().map(v => -v).concat(zero, posSplits);\n}\n\nconst RE_ALL = /./;\nconst RE_12357 = /[12357]/;\nconst RE_125 = /[125]/;\nconst RE_1 = /1/;\n\nconst _filt = (splits, distr, re, keepMod) => splits.map((v, i) => ((distr == 4 && v == 0) || i % keepMod == 0 && re.test(v.toExponential()[v < 0 ? 1 : 0])) ? v : null);\n\nfunction log10AxisValsFilt(self, splits, axisIdx, foundSpace, foundIncr) {\n\tlet axis = self.axes[axisIdx];\n\tlet scaleKey = axis.scale;\n\tlet sc = self.scales[scaleKey];\n\n//\tif (sc.distr == 3 && sc.log == 2)\n//\t\treturn splits;\n\n\tlet valToPos = self.valToPos;\n\n\tlet minSpace = axis._space;\n\n\tlet _10 = valToPos(10, scaleKey);\n\n\tlet re = (\n\t\tvalToPos(9, scaleKey) - _10 >= minSpace ? RE_ALL :\n\t\tvalToPos(7, scaleKey) - _10 >= minSpace ? RE_12357 :\n\t\tvalToPos(5, scaleKey) - _10 >= minSpace ? RE_125 :\n\t\tRE_1\n\t);\n\n\tif (re == RE_1) {\n\t\tlet magSpace = abs(valToPos(1, scaleKey) - _10);\n\n\t\tif (magSpace < minSpace)\n\t\t\treturn _filt(splits.slice().reverse(), sc.distr, re, ceil(minSpace / magSpace)).reverse(); // max->min skip\n\t}\n\n\treturn _filt(splits, sc.distr, re, 1);\n}\n\nfunction log2AxisValsFilt(self, splits, axisIdx, foundSpace, foundIncr) {\n\tlet axis = self.axes[axisIdx];\n\tlet scaleKey = axis.scale;\n\tlet minSpace = axis._space;\n\tlet valToPos = self.valToPos;\n\n\tlet magSpace = abs(valToPos(1, scaleKey) - valToPos(2, scaleKey));\n\n\tif (magSpace < minSpace)\n\t\treturn _filt(splits.slice().reverse(), 3, RE_ALL, ceil(minSpace / magSpace)).reverse(); // max->min skip\n\n\treturn splits;\n}\n\nfunction numSeriesVal(self, val, seriesIdx, dataIdx) {\n\treturn dataIdx == null ? LEGEND_DISP : val == null ? \"\" : fmtNum(val);\n}\n\nconst yAxisOpts = {\n\tshow: true,\n\tscale: \"y\",\n\tstroke: hexBlack,\n\tspace: 30,\n\tgap: 5,\n\talignTo: 1,\n\tsize: 50,\n\tlabelGap: 0,\n\tlabelSize: 30,\n\tlabelFont,\n\tside: 3,\n//\tclass: \"y-vals\",\n//\tincrs: numIncrs,\n//\tvalues: (vals, space) => vals,\n//\tfilter: retArg1,\n\tgrid,\n\tticks,\n\tborder,\n\tfont,\n\tlineGap,\n\trotate: 0,\n};\n\n// takes stroke width\nfunction ptDia(width, mult) {\n\tlet dia = 3 + (width || 1) * 2;\n\treturn roundDec(dia * mult, 3);\n}\n\nfunction seriesPointsShow(self, si) {\n\tlet { scale, idxs } = self.series[0];\n\tlet xData = self._data[0];\n\tlet p0 = self.valToPos(xData[idxs[0]], scale, true);\n\tlet p1 = self.valToPos(xData[idxs[1]], scale, true);\n\tlet dim = abs(p1 - p0);\n\n\tlet s = self.series[si];\n//\tconst dia = ptDia(s.width, pxRatio);\n\tlet maxPts = dim / (s.points.space * pxRatio);\n\treturn idxs[1] - idxs[0] <= maxPts;\n}\n\nconst facet = {\n\tscale: null,\n\tauto: true,\n\tsorted: 0,\n\n\t// internal caches\n\tmin: inf,\n\tmax: -inf,\n};\n\nconst gaps = (self, seriesIdx, idx0, idx1, nullGaps) => nullGaps;\n\nconst xySeriesOpts = {\n\tshow: true,\n\tauto: true,\n\tsorted: 0,\n\tgaps,\n\talpha: 1,\n\tfacets: [\n\t\tassign({}, facet, {scale: 'x'}),\n\t\tassign({}, facet, {scale: 'y'}),\n\t],\n};\n\nconst ySeriesOpts = {\n\tscale: \"y\",\n\tauto: true,\n\tsorted: 0,\n\tshow: true,\n\tspanGaps: false,\n\tgaps,\n\talpha: 1,\n\tpoints: {\n\t\tshow: seriesPointsShow,\n\t\tfilter: null,\n\t// paths:\n\t//\tstroke: \"#000\",\n\t//\tfill: \"#fff\",\n\t//\twidth: 1,\n\t//\tsize: 10,\n\t},\n//\tlabel: \"Value\",\n//\tvalue: v => v,\n\tvalues: null,\n\n\t// internal caches\n\tmin: inf,\n\tmax: -inf,\n\tidxs: [],\n\n\tpath: null,\n\tclip: null,\n};\n\nfunction clampScale(self, val, scaleMin, scaleMax, scaleKey) {\n/*\n\tif (val < 0) {\n\t\tlet cssHgt = self.bbox.height / pxRatio;\n\t\tlet absPos = self.valToPos(abs(val), scaleKey);\n\t\tlet fromBtm = cssHgt - absPos;\n\t\treturn self.posToVal(cssHgt + fromBtm, scaleKey);\n\t}\n*/\n\treturn scaleMin / 10;\n}\n\nconst xScaleOpts = {\n\ttime: FEAT_TIME,\n\tauto: true,\n\tdistr: 1,\n\tlog: 10,\n\tasinh: 1,\n\tmin: null,\n\tmax: null,\n\tdir: 1,\n\tori: 0,\n};\n\nconst yScaleOpts = assign({}, xScaleOpts, {\n\ttime: false,\n\tori: 1,\n});\n\nconst syncs = {};\n\nfunction _sync(key, opts) {\n\tlet s = syncs[key];\n\n\tif (!s) {\n\t\ts = {\n\t\t\tkey,\n\t\t\tplots: [],\n\t\t\tsub(plot) {\n\t\t\t\ts.plots.push(plot);\n\t\t\t},\n\t\t\tunsub(plot) {\n\t\t\t\ts.plots = s.plots.filter(c => c != plot);\n\t\t\t},\n\t\t\tpub(type, self, x, y, w, h, i) {\n\t\t\t\tfor (let j = 0; j < s.plots.length; j++)\n\t\t\t\t\ts.plots[j] != self && s.plots[j].pub(type, self, x, y, w, h, i);\n\t\t\t},\n\t\t};\n\n\t\tif (key != null)\n\t\t\tsyncs[key] = s;\n\t}\n\n\treturn s;\n}\n\nconst BAND_CLIP_FILL = 1 << 0;\nconst BAND_CLIP_STROKE = 1 << 1;\n\nfunction orient(u, seriesIdx, cb) {\n\tconst mode = u.mode;\n\tconst series = u.series[seriesIdx];\n\tconst data = mode == 2 ? u._data[seriesIdx] : u._data;\n\tconst scales = u.scales;\n\tconst bbox = u.bbox;\n\n\tlet dx = data[0],\n\t\tdy = mode == 2 ? data[1] : data[seriesIdx],\n\t\tsx = mode == 2 ? scales[series.facets[0].scale] : scales[u.series[0].scale],\n\t\tsy = mode == 2 ? scales[series.facets[1].scale] : scales[series.scale],\n\t\tl = bbox.left,\n\t\tt = bbox.top,\n\t\tw = bbox.width,\n\t\th = bbox.height,\n\t\tH = u.valToPosH,\n\t\tV = u.valToPosV;\n\n\treturn (sx.ori == 0\n\t\t? cb(\n\t\t\tseries,\n\t\t\tdx,\n\t\t\tdy,\n\t\t\tsx,\n\t\t\tsy,\n\t\t\tH,\n\t\t\tV,\n\t\t\tl,\n\t\t\tt,\n\t\t\tw,\n\t\t\th,\n\t\t\tmoveToH,\n\t\t\tlineToH,\n\t\t\trectH,\n\t\t\tarcH,\n\t\t\tbezierCurveToH,\n\t\t)\n\t\t: cb(\n\t\t\tseries,\n\t\t\tdx,\n\t\t\tdy,\n\t\t\tsx,\n\t\t\tsy,\n\t\t\tV,\n\t\t\tH,\n\t\t\tt,\n\t\t\tl,\n\t\t\th,\n\t\t\tw,\n\t\t\tmoveToV,\n\t\t\tlineToV,\n\t\t\trectV,\n\t\t\tarcV,\n\t\t\tbezierCurveToV,\n\t\t)\n\t);\n}\n\nfunction bandFillClipDirs(self, seriesIdx) {\n\tlet fillDir = 0;\n\n\t// 2 bits, -1 | 1\n\tlet clipDirs = 0;\n\n\tlet bands = ifNull(self.bands, EMPTY_ARR);\n\n\tfor (let i = 0; i < bands.length; i++) {\n\t\tlet b = bands[i];\n\n\t\t// is a \"from\" band edge\n\t\tif (b.series[0] == seriesIdx)\n\t\t\tfillDir = b.dir;\n\t\t// is a \"to\" band edge\n\t\telse if (b.series[1] == seriesIdx) {\n\t\t\tif (b.dir == 1)\n\t\t\t\tclipDirs |= 1;\n\t\t\telse\n\t\t\t\tclipDirs |= 2;\n\t\t}\n\t}\n\n\treturn [\n\t\tfillDir,\n\t\t(\n\t\t\tclipDirs == 1 ? -1 : // neg only\n\t\t\tclipDirs == 2 ? 1 : // pos only\n\t\t\tclipDirs == 3 ? 2 : // both\n\t\t\t 0 // neither\n\t\t)\n\t];\n}\n\nfunction seriesFillTo(self, seriesIdx, dataMin, dataMax, bandFillDir) {\n\tlet mode = self.mode;\n\tlet series = self.series[seriesIdx];\n\tlet scaleKey = mode == 2 ? series.facets[1].scale : series.scale;\n\tlet scale = self.scales[scaleKey];\n\n\treturn (\n\t\tbandFillDir == -1 ? scale.min :\n\t\tbandFillDir == 1 ? scale.max :\n\t\tscale.distr == 3 ? (\n\t\t\tscale.dir == 1 ? scale.min :\n\t\t\tscale.max\n\t\t) : 0\n\t);\n}\n\n// creates inverted band clip path (from stroke path -> yMax || yMin)\n// clipDir is always inverse of fillDir\n// default clip dir is upwards (1), since default band fill is downwards/fillBelowTo (-1) (highIdx -> lowIdx)\nfunction clipBandLine(self, seriesIdx, idx0, idx1, strokePath, clipDir) {\n\treturn orient(self, seriesIdx, (series, dataX, dataY, scaleX, scaleY, valToPosX, valToPosY, xOff, yOff, xDim, yDim) => {\n\t\tlet pxRound = series.pxRound;\n\n\t\tconst dir = scaleX.dir * (scaleX.ori == 0 ? 1 : -1);\n\t\tconst lineTo = scaleX.ori == 0 ? lineToH : lineToV;\n\n\t\tlet frIdx, toIdx;\n\n\t\tif (dir == 1) {\n\t\t\tfrIdx = idx0;\n\t\t\ttoIdx = idx1;\n\t\t}\n\t\telse {\n\t\t\tfrIdx = idx1;\n\t\t\ttoIdx = idx0;\n\t\t}\n\n\t\t// path start\n\t\tlet x0 = pxRound(valToPosX(dataX[frIdx], scaleX, xDim, xOff));\n\t\tlet y0 = pxRound(valToPosY(dataY[frIdx], scaleY, yDim, yOff));\n\t\t// path end x\n\t\tlet x1 = pxRound(valToPosX(dataX[toIdx], scaleX, xDim, xOff));\n\t\t// upper or lower y limit\n\t\tlet yLimit = pxRound(valToPosY(clipDir == 1 ? scaleY.max : scaleY.min, scaleY, yDim, yOff));\n\n\t\tlet clip = new Path2D(strokePath);\n\n\t\tlineTo(clip, x1, yLimit);\n\t\tlineTo(clip, x0, yLimit);\n\t\tlineTo(clip, x0, y0);\n\n\t\treturn clip;\n\t});\n}\n\nfunction clipGaps(gaps, ori, plotLft, plotTop, plotWid, plotHgt) {\n\tlet clip = null;\n\n\t// create clip path (invert gaps and non-gaps)\n\tif (gaps.length > 0) {\n\t\tclip = new Path2D();\n\n\t\tconst rect = ori == 0 ? rectH : rectV;\n\n\t\tlet prevGapEnd = plotLft;\n\n\t\tfor (let i = 0; i < gaps.length; i++) {\n\t\t\tlet g = gaps[i];\n\n\t\t\tif (g[1] > g[0]) {\n\t\t\t\tlet w = g[0] - prevGapEnd;\n\n\t\t\t\tw > 0 && rect(clip, prevGapEnd, plotTop, w, plotTop + plotHgt);\n\n\t\t\t\tprevGapEnd = g[1];\n\t\t\t}\n\t\t}\n\n\t\tlet w = plotLft + plotWid - prevGapEnd;\n\n\t\t// hack to ensure we expand the clip enough to avoid cutting off strokes at edges\n\t\tlet maxStrokeWidth = 10;\n\n\t\tw > 0 && rect(clip, prevGapEnd, plotTop - maxStrokeWidth / 2, w, plotTop + plotHgt + maxStrokeWidth);\n\t}\n\n\treturn clip;\n}\n\nfunction addGap(gaps, fromX, toX) {\n\tlet prevGap = gaps[gaps.length - 1];\n\n\tif (prevGap && prevGap[0] == fromX)\t\t\t// TODO: gaps must be encoded at stroke widths?\n\t\tprevGap[1] = toX;\n\telse\n\t\tgaps.push([fromX, toX]);\n}\n\nfunction findGaps(xs, ys, idx0, idx1, dir, pixelForX, align) {\n\tlet gaps = [];\n\tlet len = xs.length;\n\n\tfor (let i = dir == 1 ? idx0 : idx1; i >= idx0 && i <= idx1; i += dir) {\n\t\tlet yVal = ys[i];\n\n\t\tif (yVal === null) {\n\t\t\tlet fr = i, to = i;\n\n\t\t\tif (dir == 1) {\n\t\t\t\twhile (++i <= idx1 && ys[i] === null)\n\t\t\t\t\tto = i;\n\t\t\t}\n\t\t\telse {\n\t\t\t\twhile (--i >= idx0 && ys[i] === null)\n\t\t\t\t\tto = i;\n\t\t\t}\n\n\t\t\tlet frPx = pixelForX(xs[fr]);\n\t\t\tlet toPx = to == fr ? frPx : pixelForX(xs[to]);\n\n\t\t\t// if value adjacent to edge null is same pixel, then it's partially\n\t\t\t// filled and gap should start at next pixel\n\t\t\tlet fri2 = fr - dir;\n\t\t\tlet frPx2 = align <= 0 && fri2 >= 0 && fri2 < len ? pixelForX(xs[fri2]) : frPx;\n\t\t//\tif (frPx2 == frPx)\n\t\t//\t\tfrPx++;\n\t\t//\telse\n\t\t\t\tfrPx = frPx2;\n\n\t\t\tlet toi2 = to + dir;\n\t\t\tlet toPx2 = align >= 0 && toi2 >= 0 && toi2 < len ? pixelForX(xs[toi2]) : toPx;\n\t\t//\tif (toPx2 == toPx)\n\t\t//\t\ttoPx--;\n\t\t//\telse\n\t\t\t\ttoPx = toPx2;\n\n\t\t\tif (toPx >= frPx)\n\t\t\t\tgaps.push([frPx, toPx]); // addGap\n\t\t}\n\t}\n\n\treturn gaps;\n}\n\nfunction pxRoundGen(pxAlign) {\n\treturn pxAlign == 0 ? retArg0 : pxAlign == 1 ? round : v => incrRound(v, pxAlign);\n}\n\n/*\n// inefficient linear interpolation that does bi-directinal scans on each call\nexport function costlyLerp(i, idx0, idx1, _dirX, dataY) {\n\tlet prevNonNull = nonNullIdx(dataY, _dirX == 1 ? idx0 : idx1, i, -_dirX);\n\tlet nextNonNull = nonNullIdx(dataY, i, _dirX == 1 ? idx1 : idx0, _dirX);\n\n\tlet prevVal = dataY[prevNonNull];\n\tlet nextVal = dataY[nextNonNull];\n\n\treturn prevVal + (i - prevNonNull) / (nextNonNull - prevNonNull) * (nextVal - prevVal);\n}\n*/\n\nfunction rect(ori) {\n\tlet moveTo = ori == 0 ?\n\t\tmoveToH :\n\t\tmoveToV;\n\n\tlet arcTo = ori == 0 ?\n\t\t(p, x1, y1, x2, y2, r) => { p.arcTo(x1, y1, x2, y2, r); } :\n\t\t(p, y1, x1, y2, x2, r) => { p.arcTo(x1, y1, x2, y2, r); };\n\n\tlet rect = ori == 0 ?\n\t\t(p, x, y, w, h) => { p.rect(x, y, w, h); } :\n\t\t(p, y, x, h, w) => { p.rect(x, y, w, h); };\n\n\t// TODO (pending better browser support): https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/roundRect\n\treturn (p, x, y, w, h, endRad = 0, baseRad = 0) => {\n\t\tif (endRad == 0 && baseRad == 0)\n\t\t\trect(p, x, y, w, h);\n\t\telse {\n\t\t\tendRad = min(endRad, w / 2, h / 2);\n\t\t\tbaseRad = min(baseRad, w / 2, h / 2);\n\n\t\t\t// adapted from https://stackoverflow.com/questions/1255512/how-to-draw-a-rounded-rectangle-using-html-canvas/7838871#7838871\n\t\t\tmoveTo(p, x + endRad, y);\n\t\t\tarcTo(p, x + w, y, x + w, y + h, endRad);\n\t\t\tarcTo(p, x + w, y + h, x, y + h, baseRad);\n\t\t\tarcTo(p, x, y + h, x, y, baseRad);\n\t\t\tarcTo(p, x, y, x + w, y, endRad);\n\t\t\tp.closePath();\n\t\t}\n\t};\n}\n\n// orientation-inverting canvas functions\nconst moveToH = (p, x, y) => { p.moveTo(x, y); };\nconst moveToV = (p, y, x) => { p.moveTo(x, y); };\nconst lineToH = (p, x, y) => { p.lineTo(x, y); };\nconst lineToV = (p, y, x) => { p.lineTo(x, y); };\nconst rectH = rect(0);\nconst rectV = rect(1);\nconst arcH = (p, x, y, r, startAngle, endAngle) => { p.arc(x, y, r, startAngle, endAngle); };\nconst arcV = (p, y, x, r, startAngle, endAngle) => { p.arc(x, y, r, startAngle, endAngle); };\nconst bezierCurveToH = (p, bp1x, bp1y, bp2x, bp2y, p2x, p2y) => { p.bezierCurveTo(bp1x, bp1y, bp2x, bp2y, p2x, p2y); };\nconst bezierCurveToV = (p, bp1y, bp1x, bp2y, bp2x, p2y, p2x) => { p.bezierCurveTo(bp1x, bp1y, bp2x, bp2y, p2x, p2y); };\n\n// TODO: drawWrap(seriesIdx, drawPoints) (save, restore, translate, clip)\nfunction points(opts) {\n\treturn (u, seriesIdx, idx0, idx1, filtIdxs) => {\n\t//\tlog(\"drawPoints()\", arguments);\n\n\t\treturn orient(u, seriesIdx, (series, dataX, dataY, scaleX, scaleY, valToPosX, valToPosY, xOff, yOff, xDim, yDim) => {\n\t\t\tlet { pxRound, points } = series;\n\n\t\t\tlet moveTo, arc;\n\n\t\t\tif (scaleX.ori == 0) {\n\t\t\t\tmoveTo = moveToH;\n\t\t\t\tarc = arcH;\n\t\t\t}\n\t\t\telse {\n\t\t\t\tmoveTo = moveToV;\n\t\t\t\tarc = arcV;\n\t\t\t}\n\n\t\t\tconst width = roundDec(points.width * pxRatio, 3);\n\n\t\t\tlet rad = (points.size - points.width) / 2 * pxRatio;\n\t\t\tlet dia = roundDec(rad * 2, 3);\n\n\t\t\tlet fill = new Path2D();\n\t\t\tlet clip = new Path2D();\n\n\t\t\tlet { left: lft, top: top, width: wid, height: hgt } = u.bbox;\n\n\t\t\trectH(clip,\n\t\t\t\tlft - dia,\n\t\t\t\ttop - dia,\n\t\t\t\twid + dia * 2,\n\t\t\t\thgt + dia * 2,\n\t\t\t);\n\n\t\t\tconst drawPoint = pi => {\n\t\t\t\tif (dataY[pi] != null) {\n\t\t\t\t\tlet x = pxRound(valToPosX(dataX[pi], scaleX, xDim, xOff));\n\t\t\t\t\tlet y = pxRound(valToPosY(dataY[pi], scaleY, yDim, yOff));\n\n\t\t\t\t\tmoveTo(fill, x + rad, y);\n\t\t\t\t\tarc(fill, x, y, rad, 0, PI * 2);\n\t\t\t\t}\n\t\t\t};\n\n\t\t\tif (filtIdxs)\n\t\t\t\tfiltIdxs.forEach(drawPoint);\n\t\t\telse {\n\t\t\t\tfor (let pi = idx0; pi <= idx1; pi++)\n\t\t\t\t\tdrawPoint(pi);\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\tstroke: width > 0 ? fill : null,\n\t\t\t\tfill,\n\t\t\t\tclip,\n\t\t\t\tflags: BAND_CLIP_FILL | BAND_CLIP_STROKE,\n\t\t\t};\n\t\t});\n\t};\n}\n\nfunction _drawAcc(lineTo) {\n\treturn (stroke, accX, minY, maxY, inY, outY) => {\n\t\tif (minY != maxY) {\n\t\t\tif (inY != minY && outY != minY)\n\t\t\t\tlineTo(stroke, accX, minY);\n\t\t\tif (inY != maxY && outY != maxY)\n\t\t\t\tlineTo(stroke, accX, maxY);\n\n\t\t\tlineTo(stroke, accX, outY);\n\t\t}\n\t};\n}\n\nconst drawAccH = _drawAcc(lineToH);\nconst drawAccV = _drawAcc(lineToV);\n\nfunction linear(opts) {\n\tconst alignGaps = ifNull(opts?.alignGaps, 0);\n\n\treturn (u, seriesIdx, idx0, idx1) => {\n\t\treturn orient(u, seriesIdx, (series, dataX, dataY, scaleX, scaleY, valToPosX, valToPosY, xOff, yOff, xDim, yDim) => {\n\t\t\t[idx0, idx1] = nonNullIdxs(dataY, idx0, idx1);\n\n\t\t\tlet pxRound = series.pxRound;\n\n\t\t\tlet pixelForX = val => pxRound(valToPosX(val, scaleX, xDim, xOff));\n\t\t\tlet pixelForY = val => pxRound(valToPosY(val, scaleY, yDim, yOff));\n\n\t\t\tlet lineTo, drawAcc;\n\n\t\t\tif (scaleX.ori == 0) {\n\t\t\t\tlineTo = lineToH;\n\t\t\t\tdrawAcc = drawAccH;\n\t\t\t}\n\t\t\telse {\n\t\t\t\tlineTo = lineToV;\n\t\t\t\tdrawAcc = drawAccV;\n\t\t\t}\n\n\t\t\tconst dir = scaleX.dir * (scaleX.ori == 0 ? 1 : -1);\n\n\t\t\tconst _paths = {stroke: new Path2D(), fill: null, clip: null, band: null, gaps: null, flags: BAND_CLIP_FILL};\n\t\t\tconst stroke = _paths.stroke;\n\n\t\t\tlet hasGap = false;\n\n\t\t\t// decimate when number of points >= 4x available pixels\n\t\t\tconst decimate = idx1 - idx0 >= xDim * 4;\n\n\t\t\tif (decimate) {\n\t\t\t\tlet xForPixel = pos => u.posToVal(pos, scaleX.key, true);\n\n\t\t\t\tlet minY = null,\n\t\t\t\t\tmaxY = null,\n\t\t\t\t\tinY, outY, drawnAtX;\n\n\t\t\t\tlet accX = pixelForX(dataX[dir == 1 ? idx0 : idx1]);\n\n\t\t\t\tlet idx0px = pixelForX(dataX[idx0]);\n\t\t\t\tlet idx1px = pixelForX(dataX[idx1]);\n\n\t\t\t\t// tracks limit of current x bucket to avoid having to get x pixel for every x value\n\t\t\t\tlet nextAccXVal = xForPixel(dir == 1 ? idx0px + 1 : idx1px - 1);\n\n\t\t\t\tfor (let i = dir == 1 ? idx0 : idx1; i >= idx0 && i <= idx1; i += dir) {\n\t\t\t\t\tlet xVal = dataX[i];\n\t\t\t\t\tlet reuseAccX = dir == 1 ? (xVal < nextAccXVal) : (xVal > nextAccXVal);\n\t\t\t\t\tlet x = reuseAccX ? accX : pixelForX(xVal);\n\n\t\t\t\t\tlet yVal = dataY[i];\n\n\t\t\t\t\tif (x == accX) {\n\t\t\t\t\t\tif (yVal != null) {\n\t\t\t\t\t\t\toutY = yVal;\n\n\t\t\t\t\t\t\tif (minY == null) {\n\t\t\t\t\t\t\t\tlineTo(stroke, x, pixelForY(outY));\n\t\t\t\t\t\t\t\tinY = minY = maxY = outY;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tif (outY < minY)\n\t\t\t\t\t\t\t\t\tminY = outY;\n\t\t\t\t\t\t\t\telse if (outY > maxY)\n\t\t\t\t\t\t\t\t\tmaxY = outY;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tif (yVal === null)\n\t\t\t\t\t\t\t\thasGap = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tif (minY != null)\n\t\t\t\t\t\t\tdrawAcc(stroke, accX, pixelForY(minY), pixelForY(maxY), pixelForY(inY), pixelForY(outY));\n\n\t\t\t\t\t\tif (yVal != null) {\n\t\t\t\t\t\t\toutY = yVal;\n\t\t\t\t\t\t\tlineTo(stroke, x, pixelForY(outY));\n\t\t\t\t\t\t\tminY = maxY = inY = outY;\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tminY = maxY = null;\n\n\t\t\t\t\t\t\tif (yVal === null)\n\t\t\t\t\t\t\t\thasGap = true;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\taccX = x;\n\t\t\t\t\t\tnextAccXVal = xForPixel(accX + dir);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (minY != null && minY != maxY && drawnAtX != accX)\n\t\t\t\t\tdrawAcc(stroke, accX, pixelForY(minY), pixelForY(maxY), pixelForY(inY), pixelForY(outY));\n\t\t\t}\n\t\t\telse {\n\t\t\t\tfor (let i = dir == 1 ? idx0 : idx1; i >= idx0 && i <= idx1; i += dir) {\n\t\t\t\t\tlet yVal = dataY[i];\n\n\t\t\t\t\tif (yVal === null)\n\t\t\t\t\t\thasGap = true;\n\t\t\t\t\telse if (yVal != null)\n\t\t\t\t\t\tlineTo(stroke, pixelForX(dataX[i]), pixelForY(yVal));\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tlet [ bandFillDir, bandClipDir ] = bandFillClipDirs(u, seriesIdx);\n\n\t\t\tif (series.fill != null || bandFillDir != 0) {\n\t\t\t\tlet fill = _paths.fill = new Path2D(stroke);\n\n\t\t\t\tlet fillToVal = series.fillTo(u, seriesIdx, series.min, series.max, bandFillDir);\n\t\t\t\tlet fillToY = pixelForY(fillToVal);\n\n\t\t\t\tlet frX = pixelForX(dataX[idx0]);\n\t\t\t\tlet toX = pixelForX(dataX[idx1]);\n\n\t\t\t\tif (dir == -1)\n\t\t\t\t\t[toX, frX] = [frX, toX];\n\n\t\t\t\tlineTo(fill, toX, fillToY);\n\t\t\t\tlineTo(fill, frX, fillToY);\n\t\t\t}\n\n\t\t\tif (!series.spanGaps) { // skip in mode: 2?\n\t\t\t//\tconsole.time('gaps');\n\t\t\t\tlet gaps = [];\n\n\t\t\t\thasGap && gaps.push(...findGaps(dataX, dataY, idx0, idx1, dir, pixelForX, alignGaps));\n\n\t\t\t//\tconsole.timeEnd('gaps');\n\n\t\t\t//\tconsole.log('gaps', JSON.stringify(gaps));\n\n\t\t\t\t_paths.gaps = gaps = series.gaps(u, seriesIdx, idx0, idx1, gaps);\n\n\t\t\t\t_paths.clip = clipGaps(gaps, scaleX.ori, xOff, yOff, xDim, yDim);\n\t\t\t}\n\n\t\t\tif (bandClipDir != 0) {\n\t\t\t\t_paths.band = bandClipDir == 2 ? [\n\t\t\t\t\tclipBandLine(u, seriesIdx, idx0, idx1, stroke, -1),\n\t\t\t\t\tclipBandLine(u, seriesIdx, idx0, idx1, stroke, 1),\n\t\t\t\t] : clipBandLine(u, seriesIdx, idx0, idx1, stroke, bandClipDir);\n\t\t\t}\n\n\t\t\treturn _paths;\n\t\t});\n\t};\n}\n\n// BUG: align: -1 behaves like align: 1 when scale.dir: -1\nfunction stepped(opts) {\n\tconst align = ifNull(opts.align, 1);\n\t// whether to draw ascenders/descenders at null/gap bondaries\n\tconst ascDesc = ifNull(opts.ascDesc, false);\n\tconst alignGaps = ifNull(opts.alignGaps, 0);\n\tconst extend = ifNull(opts.extend, false);\n\n\treturn (u, seriesIdx, idx0, idx1) => {\n\t\treturn orient(u, seriesIdx, (series, dataX, dataY, scaleX, scaleY, valToPosX, valToPosY, xOff, yOff, xDim, yDim) => {\n\t\t\t[idx0, idx1] = nonNullIdxs(dataY, idx0, idx1);\n\n\t\t\tlet pxRound = series.pxRound;\n\n\t\t\tlet { left, width } = u.bbox;\n\n\t\t\tlet pixelForX = val => pxRound(valToPosX(val, scaleX, xDim, xOff));\n\t\t\tlet pixelForY = val => pxRound(valToPosY(val, scaleY, yDim, yOff));\n\n\t\t\tlet lineTo = scaleX.ori == 0 ? lineToH : lineToV;\n\n\t\t\tconst _paths = {stroke: new Path2D(), fill: null, clip: null, band: null, gaps: null, flags: BAND_CLIP_FILL};\n\t\t\tconst stroke = _paths.stroke;\n\n\t\t\tconst dir = scaleX.dir * (scaleX.ori == 0 ? 1 : -1);\n\n\t\t\tlet prevYPos = pixelForY(dataY[dir == 1 ? idx0 : idx1]);\n\t\t\tlet firstXPos = pixelForX(dataX[dir == 1 ? idx0 : idx1]);\n\t\t\tlet prevXPos = firstXPos;\n\n\t\t\tlet firstXPosExt = firstXPos;\n\n\t\t\tif (extend && align == -1) {\n\t\t\t\tfirstXPosExt = left;\n\t\t\t\tlineTo(stroke, firstXPosExt, prevYPos);\n\t\t\t}\n\n\t\t\tlineTo(stroke, firstXPos, prevYPos);\n\n\t\t\tfor (let i = dir == 1 ? idx0 : idx1; i >= idx0 && i <= idx1; i += dir) {\n\t\t\t\tlet yVal1 = dataY[i];\n\n\t\t\t\tif (yVal1 == null)\n\t\t\t\t\tcontinue;\n\n\t\t\t\tlet x1 = pixelForX(dataX[i]);\n\t\t\t\tlet y1 = pixelForY(yVal1);\n\n\t\t\t\tif (align == 1)\n\t\t\t\t\tlineTo(stroke, x1, prevYPos);\n\t\t\t\telse\n\t\t\t\t\tlineTo(stroke, prevXPos, y1);\n\n\t\t\t\tlineTo(stroke, x1, y1);\n\n\t\t\t\tprevYPos = y1;\n\t\t\t\tprevXPos = x1;\n\t\t\t}\n\n\t\t\tlet prevXPosExt = prevXPos;\n\n\t\t\tif (extend && align == 1) {\n\t\t\t\tprevXPosExt = left + width;\n\t\t\t\tlineTo(stroke, prevXPosExt, prevYPos);\n\t\t\t}\n\n\t\t\tlet [ bandFillDir, bandClipDir ] = bandFillClipDirs(u, seriesIdx);\n\n\t\t\tif (series.fill != null || bandFillDir != 0) {\n\t\t\t\tlet fill = _paths.fill = new Path2D(stroke);\n\n\t\t\t\tlet fillTo = series.fillTo(u, seriesIdx, series.min, series.max, bandFillDir);\n\t\t\t\tlet fillToY = pixelForY(fillTo);\n\n\t\t\t\tlineTo(fill, prevXPosExt, fillToY);\n\t\t\t\tlineTo(fill, firstXPosExt, fillToY);\n\t\t\t}\n\n\t\t\tif (!series.spanGaps) {\n\t\t\t//\tconsole.time('gaps');\n\t\t\t\tlet gaps = [];\n\n\t\t\t\tgaps.push(...findGaps(dataX, dataY, idx0, idx1, dir, pixelForX, alignGaps));\n\n\t\t\t//\tconsole.timeEnd('gaps');\n\n\t\t\t//\tconsole.log('gaps', JSON.stringify(gaps));\n\n\t\t\t\t// expand/contract clips for ascenders/descenders\n\t\t\t\tlet halfStroke = (series.width * pxRatio) / 2;\n\t\t\t\tlet startsOffset = (ascDesc || align == 1) ? halfStroke : -halfStroke;\n\t\t\t\tlet endsOffset = (ascDesc || align == -1) ? -halfStroke : halfStroke;\n\n\t\t\t\tgaps.forEach(g => {\n\t\t\t\t\tg[0] += startsOffset;\n\t\t\t\t\tg[1] += endsOffset;\n\t\t\t\t});\n\n\t\t\t\t_paths.gaps = gaps = series.gaps(u, seriesIdx, idx0, idx1, gaps);\n\n\t\t\t\t_paths.clip = clipGaps(gaps, scaleX.ori, xOff, yOff, xDim, yDim);\n\t\t\t}\n\n\t\t\tif (bandClipDir != 0) {\n\t\t\t\t_paths.band = bandClipDir == 2 ? [\n\t\t\t\t\tclipBandLine(u, seriesIdx, idx0, idx1, stroke, -1),\n\t\t\t\t\tclipBandLine(u, seriesIdx, idx0, idx1, stroke, 1),\n\t\t\t\t] : clipBandLine(u, seriesIdx, idx0, idx1, stroke, bandClipDir);\n\t\t\t}\n\n\t\t\treturn _paths;\n\t\t});\n\t};\n}\n\nfunction findColWidth(dataX, dataY, valToPosX, scaleX, xDim, xOff, colWid = inf) {\n\tif (dataX.length > 1) {\n\t\t// prior index with non-undefined y data\n\t\tlet prevIdx = null;\n\n\t\t// scan full dataset for smallest adjacent delta\n\t\t// will not work properly for non-linear x scales, since does not do expensive valToPosX calcs till end\n\t\tfor (let i = 0, minDelta = Infinity; i < dataX.length; i++) {\n\t\t\tif (dataY[i] !== undefined) {\n\t\t\t\tif (prevIdx != null) {\n\t\t\t\t\tlet delta = abs(dataX[i] - dataX[prevIdx]);\n\n\t\t\t\t\tif (delta < minDelta) {\n\t\t\t\t\t\tminDelta = delta;\n\t\t\t\t\t\tcolWid = abs(valToPosX(dataX[i], scaleX, xDim, xOff) - valToPosX(dataX[prevIdx], scaleX, xDim, xOff));\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tprevIdx = i;\n\t\t\t}\n\t\t}\n\t}\n\n\treturn colWid;\n}\n\nfunction bars(opts) {\n\topts = opts || EMPTY_OBJ;\n\tconst size = ifNull(opts.size, [0.6, inf, 1]);\n\tconst align = opts.align || 0;\n\tconst _extraGap = (opts.gap || 0);\n\n\tlet ro = opts.radius;\n\n\tro =\n\t\t// [valueRadius, baselineRadius]\n\t\tro == null ? [0, 0] :\n\t\ttypeof ro == 'number' ? [ro, 0] : ro;\n\n\tconst radiusFn = fnOrSelf(ro);\n\n\tconst gapFactor = 1 - size[0];\n\tconst _maxWidth = ifNull(size[1], inf);\n\tconst _minWidth = ifNull(size[2], 1);\n\n\tconst disp = ifNull(opts.disp, EMPTY_OBJ);\n\tconst _each = ifNull(opts.each, _ => {});\n\n\tconst { fill: dispFills, stroke: dispStrokes } = disp;\n\n\treturn (u, seriesIdx, idx0, idx1) => {\n\t\treturn orient(u, seriesIdx, (series, dataX, dataY, scaleX, scaleY, valToPosX, valToPosY, xOff, yOff, xDim, yDim) => {\n\t\t\tlet pxRound = series.pxRound;\n\t\t\tlet _align = align;\n\n\t\t\tlet extraGap = _extraGap * pxRatio;\n\t\t\tlet maxWidth = _maxWidth * pxRatio;\n\t\t\tlet minWidth = _minWidth * pxRatio;\n\n\t\t\tlet valRadius, baseRadius;\n\n\t\t\tif (scaleX.ori == 0)\n\t\t\t\t[valRadius, baseRadius] = radiusFn(u, seriesIdx);\n\t\t\telse\n\t\t\t\t[baseRadius, valRadius] = radiusFn(u, seriesIdx);\n\n\t\t\tconst _dirX = scaleX.dir * (scaleX.ori == 0 ? 1 : -1);\n\t\t//\tconst _dirY = scaleY.dir * (scaleY.ori == 1 ? 1 : -1);\n\n\t\t\tlet rect = scaleX.ori == 0 ? rectH : rectV;\n\n\t\t\tlet each = scaleX.ori == 0 ? _each : (u, seriesIdx, i, top, lft, hgt, wid) => {\n\t\t\t\t_each(u, seriesIdx, i, lft, top, wid, hgt);\n\t\t\t};\n\n\t\t\t// band where this series is the \"from\" edge\n\t\t\tlet band = ifNull(u.bands, EMPTY_ARR).find(b => b.series[0] == seriesIdx);\n\n\t\t\tlet fillDir = band != null ? band.dir : 0;\n\t\t\tlet fillTo = series.fillTo(u, seriesIdx, series.min, series.max, fillDir);\n\t\t\tlet fillToY = pxRound(valToPosY(fillTo, scaleY, yDim, yOff));\n\n\t\t\t// barWid is to center of stroke\n\t\t\tlet xShift, barWid, fullGap, colWid = xDim;\n\n\t\t\tlet strokeWidth = pxRound(series.width * pxRatio);\n\n\t\t\tlet multiPath = false;\n\n\t\t\tlet fillColors = null;\n\t\t\tlet fillPaths = null;\n\t\t\tlet strokeColors = null;\n\t\t\tlet strokePaths = null;\n\n\t\t\tif (dispFills != null && (strokeWidth == 0 || dispStrokes != null)) {\n\t\t\t\tmultiPath = true;\n\n\t\t\t\tfillColors = dispFills.values(u, seriesIdx, idx0, idx1);\n\t\t\t\tfillPaths = new Map();\n\t\t\t\t(new Set(fillColors)).forEach(color => {\n\t\t\t\t\tif (color != null)\n\t\t\t\t\t\tfillPaths.set(color, new Path2D());\n\t\t\t\t});\n\n\t\t\t\tif (strokeWidth > 0) {\n\t\t\t\t\tstrokeColors = dispStrokes.values(u, seriesIdx, idx0, idx1);\n\t\t\t\t\tstrokePaths = new Map();\n\t\t\t\t\t(new Set(strokeColors)).forEach(color => {\n\t\t\t\t\t\tif (color != null)\n\t\t\t\t\t\t\tstrokePaths.set(color, new Path2D());\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tlet { x0, size } = disp;\n\n\t\t\tif (x0 != null && size != null) {\n\t\t\t\t_align = 1;\n\t\t\t\tdataX = x0.values(u, seriesIdx, idx0, idx1);\n\n\t\t\t\tif (x0.unit == 2)\n\t\t\t\t\tdataX = dataX.map(pct => u.posToVal(xOff + pct * xDim, scaleX.key, true));\n\n\t\t\t\t// assumes uniform sizes, for now\n\t\t\t\tlet sizes = size.values(u, seriesIdx, idx0, idx1);\n\n\t\t\t\tif (size.unit == 2)\n\t\t\t\t\tbarWid = sizes[0] * xDim;\n\t\t\t\telse\n\t\t\t\t\tbarWid = valToPosX(sizes[0], scaleX, xDim, xOff) - valToPosX(0, scaleX, xDim, xOff); // assumes linear scale (delta from 0)\n\n\t\t\t\tcolWid = findColWidth(dataX, dataY, valToPosX, scaleX, xDim, xOff, colWid);\n\n\t\t\t\tlet gapWid = colWid - barWid;\n\t\t\t\tfullGap = gapWid + extraGap;\n\t\t\t}\n\t\t\telse {\n\t\t\t\tcolWid = findColWidth(dataX, dataY, valToPosX, scaleX, xDim, xOff, colWid);\n\n\t\t\t\tlet gapWid = colWid * gapFactor;\n\n\t\t\t\tfullGap = gapWid + extraGap;\n\t\t\t\tbarWid = colWid - fullGap;\n\t\t\t}\n\n\t\t\tif (fullGap < 1)\n\t\t\t\tfullGap = 0;\n\n\t\t\tif (strokeWidth >= barWid / 2)\n\t\t\t\tstrokeWidth = 0;\n\n\t\t\t// for small gaps, disable pixel snapping since gap inconsistencies become noticible and annoying\n\t\t\tif (fullGap < 5)\n\t\t\t\tpxRound = retArg0;\n\n\t\t\tlet insetStroke = fullGap > 0;\n\n\t\t\tlet rawBarWid = colWid - fullGap - (insetStroke ? strokeWidth : 0);\n\n\t\t\tbarWid = pxRound(clamp(rawBarWid, minWidth, maxWidth));\n\n\t\t\txShift = (_align == 0 ? barWid / 2 : _align == _dirX ? 0 : barWid) - _align * _dirX * ((_align == 0 ? extraGap / 2 : 0) + (insetStroke ? strokeWidth / 2 : 0));\n\n\n\t\t\tconst _paths = {stroke: null, fill: null, clip: null, band: null, gaps: null, flags: 0}; // disp, geom\n\n\t\t\tconst stroke = multiPath ? null : new Path2D();\n\n\t\t\tlet dataY0 = null;\n\n\t\t\tif (band != null)\n\t\t\t\tdataY0 = u.data[band.series[1]];\n\t\t\telse {\n\t\t\t\tlet { y0, y1 } = disp;\n\n\t\t\t\tif (y0 != null && y1 != null) {\n\t\t\t\t\tdataY = y1.values(u, seriesIdx, idx0, idx1);\n\t\t\t\t\tdataY0 = y0.values(u, seriesIdx, idx0, idx1);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tlet radVal = valRadius * barWid;\n\t\t\tlet radBase = baseRadius * barWid;\n\n\t\t\tfor (let i = _dirX == 1 ? idx0 : idx1; i >= idx0 && i <= idx1; i += _dirX) {\n\t\t\t\tlet yVal = dataY[i];\n\n\t\t\t\tif (yVal == null)\n\t\t\t\t\tcontinue;\n\n\t\t\t\tif (dataY0 != null) {\n\t\t\t\t\tlet yVal0 = dataY0[i] ?? 0;\n\n\t\t\t\t\tif (yVal - yVal0 == 0)\n\t\t\t\t\t\tcontinue;\n\n\t\t\t\t\tfillToY = valToPosY(yVal0, scaleY, yDim, yOff);\n\t\t\t\t}\n\n\t\t\t\tlet xVal = scaleX.distr != 2 || disp != null ? dataX[i] : i;\n\n\t\t\t\t// TODO: all xPos can be pre-computed once for all series in aligned set\n\t\t\t\tlet xPos = valToPosX(xVal, scaleX, xDim, xOff);\n\t\t\t\tlet yPos = valToPosY(ifNull(yVal, fillTo), scaleY, yDim, yOff);\n\n\t\t\t\tlet lft = pxRound(xPos - xShift);\n\t\t\t\tlet btm = pxRound(max(yPos, fillToY));\n\t\t\t\tlet top = pxRound(min(yPos, fillToY));\n\t\t\t\t// this includes the stroke\n\t\t\t\tlet barHgt = btm - top;\n\n\t\t\t\tif (yVal != null) { // && yVal != fillTo (0 height bar)\n\t\t\t\t\tlet rv = yVal < 0 ? radBase : radVal;\n\t\t\t\t\tlet rb = yVal < 0 ? radVal : radBase;\n\n\t\t\t\t\tif (multiPath) {\n\t\t\t\t\t\tif (strokeWidth > 0 && strokeColors[i] != null)\n\t\t\t\t\t\t\trect(strokePaths.get(strokeColors[i]), lft, top + floor(strokeWidth / 2), barWid, max(0, barHgt - strokeWidth), rv, rb);\n\n\t\t\t\t\t\tif (fillColors[i] != null)\n\t\t\t\t\t\t\trect(fillPaths.get(fillColors[i]), lft, top + floor(strokeWidth / 2), barWid, max(0, barHgt - strokeWidth), rv, rb);\n\t\t\t\t\t}\n\t\t\t\t\telse\n\t\t\t\t\t\trect(stroke, lft, top + floor(strokeWidth / 2), barWid, max(0, barHgt - strokeWidth), rv, rb);\n\n\t\t\t\t\teach(u, seriesIdx, i,\n\t\t\t\t\t\tlft - strokeWidth / 2,\n\t\t\t\t\t\ttop,\n\t\t\t\t\t\tbarWid + strokeWidth,\n\t\t\t\t\t\tbarHgt,\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (strokeWidth > 0)\n\t\t\t\t_paths.stroke = multiPath ? strokePaths : stroke;\n\t\t\telse if (!multiPath) {\n\t\t\t\t_paths._fill = series.width == 0 ? series._fill : series._stroke ?? series._fill;\n\t\t\t\t_paths.width = 0;\n\t\t\t}\n\n\t\t\t_paths.fill = multiPath ? fillPaths : stroke;\n\n\t\t\treturn _paths;\n\t\t});\n\t};\n}\n\nfunction splineInterp(interp, opts) {\n\tconst alignGaps = ifNull(opts?.alignGaps, 0);\n\n\treturn (u, seriesIdx, idx0, idx1) => {\n\t\treturn orient(u, seriesIdx, (series, dataX, dataY, scaleX, scaleY, valToPosX, valToPosY, xOff, yOff, xDim, yDim) => {\n\t\t\t[idx0, idx1] = nonNullIdxs(dataY, idx0, idx1);\n\n\t\t\tlet pxRound = series.pxRound;\n\n\t\t\tlet pixelForX = val => pxRound(valToPosX(val, scaleX, xDim, xOff));\n\t\t\tlet pixelForY = val => pxRound(valToPosY(val, scaleY, yDim, yOff));\n\n\t\t\tlet moveTo, bezierCurveTo, lineTo;\n\n\t\t\tif (scaleX.ori == 0) {\n\t\t\t\tmoveTo = moveToH;\n\t\t\t\tlineTo = lineToH;\n\t\t\t\tbezierCurveTo = bezierCurveToH;\n\t\t\t}\n\t\t\telse {\n\t\t\t\tmoveTo = moveToV;\n\t\t\t\tlineTo = lineToV;\n\t\t\t\tbezierCurveTo = bezierCurveToV;\n\t\t\t}\n\n\t\t\tconst dir = scaleX.dir * (scaleX.ori == 0 ? 1 : -1);\n\n\t\t\tlet firstXPos = pixelForX(dataX[dir == 1 ? idx0 : idx1]);\n\t\t\tlet prevXPos = firstXPos;\n\n\t\t\tlet xCoords = [];\n\t\t\tlet yCoords = [];\n\n\t\t\tfor (let i = dir == 1 ? idx0 : idx1; i >= idx0 && i <= idx1; i += dir) {\n\t\t\t\tlet yVal = dataY[i];\n\n\t\t\t\tif (yVal != null) {\n\t\t\t\t\tlet xVal = dataX[i];\n\t\t\t\t\tlet xPos = pixelForX(xVal);\n\n\t\t\t\t\txCoords.push(prevXPos = xPos);\n\t\t\t\t\tyCoords.push(pixelForY(dataY[i]));\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst _paths = {stroke: interp(xCoords, yCoords, moveTo, lineTo, bezierCurveTo, pxRound), fill: null, clip: null, band: null, gaps: null, flags: BAND_CLIP_FILL};\n\t\t\tconst stroke = _paths.stroke;\n\n\t\t\tlet [ bandFillDir, bandClipDir ] = bandFillClipDirs(u, seriesIdx);\n\n\t\t\tif (series.fill != null || bandFillDir != 0) {\n\t\t\t\tlet fill = _paths.fill = new Path2D(stroke);\n\n\t\t\t\tlet fillTo = series.fillTo(u, seriesIdx, series.min, series.max, bandFillDir);\n\t\t\t\tlet fillToY = pixelForY(fillTo);\n\n\t\t\t\tlineTo(fill, prevXPos, fillToY);\n\t\t\t\tlineTo(fill, firstXPos, fillToY);\n\t\t\t}\n\n\t\t\tif (!series.spanGaps) {\n\t\t\t//\tconsole.time('gaps');\n\t\t\t\tlet gaps = [];\n\n\t\t\t\tgaps.push(...findGaps(dataX, dataY, idx0, idx1, dir, pixelForX, alignGaps));\n\n\t\t\t//\tconsole.timeEnd('gaps');\n\n\t\t\t//\tconsole.log('gaps', JSON.stringify(gaps));\n\n\t\t\t\t_paths.gaps = gaps = series.gaps(u, seriesIdx, idx0, idx1, gaps);\n\n\t\t\t\t_paths.clip = clipGaps(gaps, scaleX.ori, xOff, yOff, xDim, yDim);\n\t\t\t}\n\n\t\t\tif (bandClipDir != 0) {\n\t\t\t\t_paths.band = bandClipDir == 2 ? [\n\t\t\t\t\tclipBandLine(u, seriesIdx, idx0, idx1, stroke, -1),\n\t\t\t\t\tclipBandLine(u, seriesIdx, idx0, idx1, stroke, 1),\n\t\t\t\t] : clipBandLine(u, seriesIdx, idx0, idx1, stroke, bandClipDir);\n\t\t\t}\n\n\t\t\treturn _paths;\n\n\t\t\t// if FEAT_PATHS: false in rollup.config.js\n\t\t\t//\tu.ctx.save();\n\t\t\t//\tu.ctx.beginPath();\n\t\t\t//\tu.ctx.rect(u.bbox.left, u.bbox.top, u.bbox.width, u.bbox.height);\n\t\t\t//\tu.ctx.clip();\n\t\t\t//\tu.ctx.strokeStyle = u.series[sidx].stroke;\n\t\t\t//\tu.ctx.stroke(stroke);\n\t\t\t//\tu.ctx.fillStyle = u.series[sidx].fill;\n\t\t\t//\tu.ctx.fill(fill);\n\t\t\t//\tu.ctx.restore();\n\t\t\t//\treturn null;\n\t\t});\n\t};\n}\n\nfunction monotoneCubic(opts) {\n\treturn splineInterp(_monotoneCubic, opts);\n}\n\n// Monotone Cubic Spline interpolation, adapted from the Chartist.js implementation:\n// https://github.com/gionkunz/chartist-js/blob/e7e78201bffe9609915e5e53cfafa29a5d6c49f9/src/scripts/interpolation.js#L240-L369\nfunction _monotoneCubic(xs, ys, moveTo, lineTo, bezierCurveTo, pxRound) {\n\tconst n = xs.length;\n\n\tif (n < 2)\n\t\treturn null;\n\n\tconst path = new Path2D();\n\n\tmoveTo(path, xs[0], ys[0]);\n\n\tif (n == 2)\n\t\tlineTo(path, xs[1], ys[1]);\n\telse {\n\t\tlet ms = Array(n),\n\t\t\tds = Array(n - 1),\n\t\t\tdys = Array(n - 1),\n\t\t\tdxs = Array(n - 1);\n\n\t\t// calc deltas and derivative\n\t\tfor (let i = 0; i < n - 1; i++) {\n\t\t\tdys[i] = ys[i + 1] - ys[i];\n\t\t\tdxs[i] = xs[i + 1] - xs[i];\n\t\t\tds[i] = dys[i] / dxs[i];\n\t\t}\n\n\t\t// determine desired slope (m) at each point using Fritsch-Carlson method\n\t\t// http://math.stackexchange.com/questions/45218/implementation-of-monotone-cubic-interpolation\n\t\tms[0] = ds[0];\n\n\t\tfor (let i = 1; i < n - 1; i++) {\n\t\t\tif (ds[i] === 0 || ds[i - 1] === 0 || (ds[i - 1] > 0) !== (ds[i] > 0))\n\t\t\t\tms[i] = 0;\n\t\t\telse {\n\t\t\t\tms[i] = 3 * (dxs[i - 1] + dxs[i]) / (\n\t\t\t\t\t(2 * dxs[i] + dxs[i - 1]) / ds[i - 1] +\n\t\t\t\t\t(dxs[i] + 2 * dxs[i - 1]) / ds[i]\n\t\t\t\t);\n\n\t\t\t\tif (!isFinite(ms[i]))\n\t\t\t\t\tms[i] = 0;\n\t\t\t}\n\t\t}\n\n\t\tms[n - 1] = ds[n - 2];\n\n\t\tfor (let i = 0; i < n - 1; i++) {\n\t\t\tbezierCurveTo(\n\t\t\t\tpath,\n\t\t\t\txs[i] + dxs[i] / 3,\n\t\t\t\tys[i] + ms[i] * dxs[i] / 3,\n\t\t\t\txs[i + 1] - dxs[i] / 3,\n\t\t\t\tys[i + 1] - ms[i + 1] * dxs[i] / 3,\n\t\t\t\txs[i + 1],\n\t\t\t\tys[i + 1],\n\t\t\t);\n\t\t}\n\t}\n\n\treturn path;\n}\n\nconst cursorPlots = new Set();\n\nfunction invalidateRects() {\n\tfor (let u of cursorPlots)\n\t\tu.syncRect(true);\n}\n\nif (domEnv) {\n\ton(resize, win, invalidateRects);\n\ton(scroll, win, invalidateRects, true);\n\ton(dppxchange, win, () => { uPlot.pxRatio = pxRatio; });\n}\n\nconst linearPath = linear() ;\nconst pointsPath = points() ;\n\nfunction setDefaults(d, xo, yo, initY) {\n\tlet d2 = initY ? [d[0], d[1]].concat(d.slice(2)) : [d[0]].concat(d.slice(1));\n\treturn d2.map((o, i) => setDefault(o, i, xo, yo));\n}\n\nfunction setDefaults2(d, xyo) {\n\treturn d.map((o, i) => i == 0 ? {} : assign({}, xyo, o)); // todo: assign() will not merge facet arrays\n}\n\nfunction setDefault(o, i, xo, yo) {\n\treturn assign({}, (i == 0 ? xo : yo), o);\n}\n\nfunction snapNumX(self, dataMin, dataMax) {\n\treturn dataMin == null ? nullNullTuple : [dataMin, dataMax];\n}\n\nconst snapTimeX = snapNumX;\n\n// this ensures that non-temporal/numeric y-axes get multiple-snapped padding added above/below\n// TODO: also account for incrs when snapping to ensure top of axis gets a tick & value\nfunction snapNumY(self, dataMin, dataMax) {\n\treturn dataMin == null ? nullNullTuple : rangeNum(dataMin, dataMax, rangePad, true);\n}\n\nfunction snapLogY(self, dataMin, dataMax, scale) {\n\treturn dataMin == null ? nullNullTuple : rangeLog(dataMin, dataMax, self.scales[scale].log, false);\n}\n\nconst snapLogX = snapLogY;\n\nfunction snapAsinhY(self, dataMin, dataMax, scale) {\n\treturn dataMin == null ? nullNullTuple : rangeAsinh(dataMin, dataMax, self.scales[scale].log, false);\n}\n\nconst snapAsinhX = snapAsinhY;\n\n// dim is logical (getClientBoundingRect) pixels, not canvas pixels\nfunction findIncr(minVal, maxVal, incrs, dim, minSpace) {\n\tlet intDigits = max(numIntDigits(minVal), numIntDigits(maxVal));\n\n\tlet delta = maxVal - minVal;\n\n\tlet incrIdx = closestIdx((minSpace / dim) * delta, incrs);\n\n\tdo {\n\t\tlet foundIncr = incrs[incrIdx];\n\t\tlet foundSpace = dim * foundIncr / delta;\n\n\t\tif (foundSpace >= minSpace && intDigits + (foundIncr < 5 ? fixedDec.get(foundIncr) : 0) <= 17)\n\t\t\treturn [foundIncr, foundSpace];\n\t} while (++incrIdx < incrs.length);\n\n\treturn [0, 0];\n}\n\nfunction pxRatioFont(font) {\n\tlet fontSize, fontSizeCss;\n\tfont = font.replace(/(\\d+)px/, (m, p1) => (fontSize = round((fontSizeCss = +p1) * pxRatio)) + 'px');\n\treturn [font, fontSize, fontSizeCss];\n}\n\nfunction syncFontSize(axis) {\n\tif (axis.show) {\n\t\t[axis.font, axis.labelFont].forEach(f => {\n\t\t\tlet size = roundDec(f[2] * pxRatio, 1);\n\t\t\tf[0] = f[0].replace(/[0-9.]+px/, size + 'px');\n\t\t\tf[1] = size;\n\t\t});\n\t}\n}\n\nfunction uPlot(opts, data, then) {\n\tconst self = {\n\t\tmode: ifNull(opts.mode, 1),\n\t};\n\n\tconst mode = self.mode;\n\n\tfunction getHPos(val, scale, dim, off) {\n\t\tlet pct = scale.valToPct(val);\n\t\treturn off + dim * (scale.dir == -1 ? (1 - pct) : pct);\n\t}\n\n\tfunction getVPos(val, scale, dim, off) {\n\t\tlet pct = scale.valToPct(val);\n\t\treturn off + dim * (scale.dir == -1 ? pct : (1 - pct));\n\t}\n\n\tfunction getPos(val, scale, dim, off) {\n\t\treturn scale.ori == 0 ? getHPos(val, scale, dim, off) : getVPos(val, scale, dim, off);\n\t}\n\n\tself.valToPosH = getHPos;\n\tself.valToPosV = getVPos;\n\n\tlet ready = false;\n\tself.status = 0;\n\n\tconst root = self.root = placeDiv(UPLOT);\n\n\tif (opts.id != null)\n\t\troot.id = opts.id;\n\n\taddClass(root, opts.class);\n\n\tif (opts.title) {\n\t\tlet title = placeDiv(TITLE, root);\n\t\ttitle.textContent = opts.title;\n\t}\n\n\tconst can = placeTag(\"canvas\");\n\tconst ctx = self.ctx = can.getContext(\"2d\");\n\n\tconst wrap = placeDiv(WRAP, root);\n\n\ton(\"click\", wrap, e => {\n\t\tif (e.target === over) {\n\t\t\tlet didDrag = mouseLeft1 != mouseLeft0 || mouseTop1 != mouseTop0;\n\t\t\tdidDrag && drag.click(self, e);\n\t\t}\n\t}, true);\n\n\tconst under = self.under = placeDiv(UNDER, wrap);\n\twrap.appendChild(can);\n\tconst over = self.over = placeDiv(OVER, wrap);\n\n\topts = copy(opts);\n\n\tconst pxAlign = +ifNull(opts.pxAlign, 1);\n\n\tconst pxRound = pxRoundGen(pxAlign);\n\n\t(opts.plugins || []).forEach(p => {\n\t\tif (p.opts)\n\t\t\topts = p.opts(self, opts) || opts;\n\t});\n\n\tconst ms = opts.ms || 1e-3;\n\n\tconst series = self.series = mode == 1 ?\n\t\tsetDefaults(opts.series || [], xSeriesOpts, ySeriesOpts, false) :\n\t\tsetDefaults2(opts.series || [null], xySeriesOpts);\n\tconst axes = self.axes = setDefaults(opts.axes || [], xAxisOpts, yAxisOpts, true);\n\tconst scales = self.scales = {};\n\tconst bands = self.bands = opts.bands || [];\n\n\tbands.forEach(b => {\n\t\tb.fill = fnOrSelf(b.fill || null);\n\t\tb.dir = ifNull(b.dir, -1);\n\t});\n\n\tconst xScaleKey = mode == 2 ? series[1].facets[0].scale : series[0].scale;\n\n\tconst drawOrderMap = {\n\t\taxes: drawAxesGrid,\n\t\tseries: drawSeries,\n\t};\n\n\tconst drawOrder = (opts.drawOrder || [\"axes\", \"series\"]).map(key => drawOrderMap[key]);\n\n\tfunction initValToPct(sc) {\n\t\tconst getVal = (\n\t\t\tsc.distr == 3 ? val => log10(val > 0 ? val : sc.clamp(self, val, sc.min, sc.max, sc.key)) :\n\t\t\tsc.distr == 4 ? val => asinh(val, sc.asinh) :\n\t\t\tsc.distr == 100 ? val => sc.fwd(val) :\n\t\t\tval => val\n\t\t);\n\n\t\treturn val => {\n\t\t\tlet _val = getVal(val);\n\t\t\tlet { _min, _max } = sc;\n\t\t\tlet delta = _max - _min;\n\t\t\treturn (_val - _min) / delta;\n\t\t};\n\t}\n\n\tfunction initScale(scaleKey) {\n\t\tlet sc = scales[scaleKey];\n\n\t\tif (sc == null) {\n\t\t\tlet scaleOpts = (opts.scales || EMPTY_OBJ)[scaleKey] || EMPTY_OBJ;\n\n\t\t\tif (scaleOpts.from != null) {\n\t\t\t\t// ensure parent is initialized\n\t\t\t\tinitScale(scaleOpts.from);\n\t\t\t\t// dependent scales inherit\n\t\t\t\tlet sc = assign({}, scales[scaleOpts.from], scaleOpts, {key: scaleKey});\n\t\t\t\tsc.valToPct = initValToPct(sc);\n\t\t\t\tscales[scaleKey] = sc;\n\t\t\t}\n\t\t\telse {\n\t\t\t\tsc = scales[scaleKey] = assign({}, (scaleKey == xScaleKey ? xScaleOpts : yScaleOpts), scaleOpts);\n\n\t\t\t\tsc.key = scaleKey;\n\n\t\t\t\tlet isTime = sc.time;\n\n\t\t\t\tlet rn = sc.range;\n\n\t\t\t\tlet rangeIsArr = isArr(rn);\n\n\t\t\t\tif (scaleKey != xScaleKey || (mode == 2 && !isTime)) {\n\t\t\t\t\t// if range array has null limits, it should be auto\n\t\t\t\t\tif (rangeIsArr && (rn[0] == null || rn[1] == null)) {\n\t\t\t\t\t\trn = {\n\t\t\t\t\t\t\tmin: rn[0] == null ? autoRangePart : {\n\t\t\t\t\t\t\t\tmode: 1,\n\t\t\t\t\t\t\t\thard: rn[0],\n\t\t\t\t\t\t\t\tsoft: rn[0],\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tmax: rn[1] == null ? autoRangePart : {\n\t\t\t\t\t\t\t\tmode: 1,\n\t\t\t\t\t\t\t\thard: rn[1],\n\t\t\t\t\t\t\t\tsoft: rn[1],\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t};\n\t\t\t\t\t\trangeIsArr = false;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (!rangeIsArr && isObj(rn)) {\n\t\t\t\t\t\tlet cfg = rn;\n\t\t\t\t\t\t// this is similar to snapNumY\n\t\t\t\t\t\trn = (self, dataMin, dataMax) => dataMin == null ? nullNullTuple : rangeNum(dataMin, dataMax, cfg);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tsc.range = fnOrSelf(rn || (isTime ? snapTimeX : scaleKey == xScaleKey ?\n\t\t\t\t\t(sc.distr == 3 ? snapLogX : sc.distr == 4 ? snapAsinhX : snapNumX) :\n\t\t\t\t\t(sc.distr == 3 ? snapLogY : sc.distr == 4 ? snapAsinhY : snapNumY)\n\t\t\t\t));\n\n\t\t\t\tsc.auto = fnOrSelf(rangeIsArr ? false : sc.auto);\n\n\t\t\t\tsc.clamp = fnOrSelf(sc.clamp || clampScale);\n\n\t\t\t\t// caches for expensive ops like asinh() & log()\n\t\t\t\tsc._min = sc._max = null;\n\n\t\t\t\tsc.valToPct = initValToPct(sc);\n\t\t\t}\n\t\t}\n\t}\n\n\tinitScale(\"x\");\n\tinitScale(\"y\");\n\n\t// TODO: init scales from facets in mode: 2\n\tif (mode == 1) {\n\t\tseries.forEach(s => {\n\t\t\tinitScale(s.scale);\n\t\t});\n\t}\n\n\taxes.forEach(a => {\n\t\tinitScale(a.scale);\n\t});\n\n\tfor (let k in opts.scales)\n\t\tinitScale(k);\n\n\tconst scaleX = scales[xScaleKey];\n\n\tconst xScaleDistr = scaleX.distr;\n\n\tlet valToPosX, valToPosY;\n\n\tif (scaleX.ori == 0) {\n\t\taddClass(root, ORI_HZ);\n\t\tvalToPosX = getHPos;\n\t\tvalToPosY = getVPos;\n\t\t/*\n\t\tupdOriDims = () => {\n\t\t\txDimCan = plotWid;\n\t\t\txOffCan = plotLft;\n\t\t\tyDimCan = plotHgt;\n\t\t\tyOffCan = plotTop;\n\n\t\t\txDimCss = plotWidCss;\n\t\t\txOffCss = plotLftCss;\n\t\t\tyDimCss = plotHgtCss;\n\t\t\tyOffCss = plotTopCss;\n\t\t};\n\t\t*/\n\t}\n\telse {\n\t\taddClass(root, ORI_VT);\n\t\tvalToPosX = getVPos;\n\t\tvalToPosY = getHPos;\n\t\t/*\n\t\tupdOriDims = () => {\n\t\t\txDimCan = plotHgt;\n\t\t\txOffCan = plotTop;\n\t\t\tyDimCan = plotWid;\n\t\t\tyOffCan = plotLft;\n\n\t\t\txDimCss = plotHgtCss;\n\t\t\txOffCss = plotTopCss;\n\t\t\tyDimCss = plotWidCss;\n\t\t\tyOffCss = plotLftCss;\n\t\t};\n\t\t*/\n\t}\n\n\tconst pendScales = {};\n\n\t// explicitly-set initial scales\n\tfor (let k in scales) {\n\t\tlet sc = scales[k];\n\n\t\tif (sc.min != null || sc.max != null) {\n\t\t\tpendScales[k] = {min: sc.min, max: sc.max};\n\t\t\tsc.min = sc.max = null;\n\t\t}\n\t}\n\n//\tself.tz = opts.tz || Intl.DateTimeFormat().resolvedOptions().timeZone;\n\tconst _tzDate = (opts.tzDate || (ts => new Date(round(ts / ms))));\n\tconst _fmtDate = (opts.fmtDate || fmtDate);\n\n\tconst _timeAxisSplits = (ms == 1 ? timeAxisSplitsMs(_tzDate) : timeAxisSplitsS(_tzDate));\n\tconst _timeAxisVals = timeAxisVals(_tzDate, timeAxisStamps((ms == 1 ? _timeAxisStampsMs : _timeAxisStampsS), _fmtDate));\n\tconst _timeSeriesVal = timeSeriesVal(_tzDate, timeSeriesStamp(_timeSeriesStamp, _fmtDate));\n\n\tconst activeIdxs = [];\n\n\tconst legend = (self.legend = assign({}, legendOpts, opts.legend));\n\tconst cursor = (self.cursor = assign({}, cursorOpts, {drag: {y: mode == 2}}, opts.cursor));\n\tconst showLegend = legend.show;\n\tconst showCursor = cursor.show;\n\tconst markers = legend.markers;\n\n\t{\n\t\tlegend.idxs = activeIdxs;\n\n\t\tmarkers.width = fnOrSelf(markers.width);\n\t\tmarkers.dash = fnOrSelf(markers.dash);\n\t\tmarkers.stroke = fnOrSelf(markers.stroke);\n\t\tmarkers.fill = fnOrSelf(markers.fill);\n\t}\n\n\tlet legendTable;\n\tlet legendHead;\n\tlet legendBody;\n\tlet legendRows = [];\n\tlet legendCells = [];\n\tlet legendCols;\n\tlet multiValLegend = false;\n\tlet NULL_LEGEND_VALUES = {};\n\n\tif (legend.live) {\n\t\tconst getMultiVals = series[1] ? series[1].values : null;\n\t\tmultiValLegend = getMultiVals != null;\n\t\tlegendCols = multiValLegend ? getMultiVals(self, 1, 0) : {_: 0};\n\n\t\tfor (let k in legendCols)\n\t\t\tNULL_LEGEND_VALUES[k] = LEGEND_DISP;\n\t}\n\n\tif (showLegend) {\n\t\tlegendTable = placeTag(\"table\", LEGEND, root);\n\t\tlegendBody = placeTag(\"tbody\", null, legendTable);\n\n\t\t// allows legend to be moved out of root\n\t\tlegend.mount(self, legendTable);\n\n\t\tif (multiValLegend) {\n\t\t\tlegendHead = placeTag(\"thead\", null, legendTable, legendBody);\n\n\t\t\tlet head = placeTag(\"tr\", null, legendHead);\n\t\t\tplaceTag(\"th\", null, head);\n\n\t\t\tfor (var key in legendCols)\n\t\t\t\tplaceTag(\"th\", LEGEND_LABEL, head).textContent = key;\n\t\t}\n\t\telse {\n\t\t\taddClass(legendTable, LEGEND_INLINE);\n\t\t\tlegend.live && addClass(legendTable, LEGEND_LIVE);\n\t\t}\n\t}\n\n\tconst son = {show: true};\n\tconst soff = {show: false};\n\n\tfunction initLegendRow(s, i) {\n\t\tif (i == 0 && (multiValLegend || !legend.live || mode == 2))\n\t\t\treturn nullNullTuple;\n\n\t\tlet cells = [];\n\n\t\tlet row = placeTag(\"tr\", LEGEND_SERIES, legendBody, legendBody.childNodes[i]);\n\n\t\taddClass(row, s.class);\n\n\t\tif (!s.show)\n\t\t\taddClass(row, OFF);\n\n\t\tlet label = placeTag(\"th\", null, row);\n\n\t\tif (markers.show) {\n\t\t\tlet indic = placeDiv(LEGEND_MARKER, label);\n\n\t\t\tif (i > 0) {\n\t\t\t\tlet width = markers.width(self, i);\n\n\t\t\t\tif (width)\n\t\t\t\t\tindic.style.border = width + \"px \" + markers.dash(self, i) + \" \" + markers.stroke(self, i);\n\n\t\t\t\tindic.style.background = markers.fill(self, i);\n\t\t\t}\n\t\t}\n\n\t\tlet text = placeDiv(LEGEND_LABEL, label);\n\n\t\tif (s.label instanceof HTMLElement)\n\t\t\ttext.appendChild(s.label);\n\t\telse\n\t\t\ttext.textContent = s.label;\n\n\t\tif (i > 0) {\n\t\t\tif (!markers.show)\n\t\t\t\ttext.style.color = s.width > 0 ? markers.stroke(self, i) : markers.fill(self, i);\n\n\t\t\tonMouse(\"click\", label, e => {\n\t\t\t\tif (cursor._lock)\n\t\t\t\t\treturn;\n\n\t\t\t\tsetCursorEvent(e);\n\n\t\t\t\tlet seriesIdx = series.indexOf(s);\n\n\t\t\t\tif ((e.ctrlKey || e.metaKey) != legend.isolate) {\n\t\t\t\t\t// if any other series is shown, isolate this one. else show all\n\t\t\t\t\tlet isolate = series.some((s, i) => i > 0 && i != seriesIdx && s.show);\n\n\t\t\t\t\tseries.forEach((s, i) => {\n\t\t\t\t\t\ti > 0 && setSeries(i, isolate ? (i == seriesIdx ? son : soff) : son, true, syncOpts.setSeries);\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t\tsetSeries(seriesIdx, {show: !s.show}, true, syncOpts.setSeries);\n\t\t\t}, false);\n\n\t\t\tif (cursorFocus) {\n\t\t\t\tonMouse(mouseenter, label, e => {\n\t\t\t\t\tif (cursor._lock)\n\t\t\t\t\t\treturn;\n\n\t\t\t\t\tsetCursorEvent(e);\n\n\t\t\t\t\tsetSeries(series.indexOf(s), FOCUS_TRUE, true, syncOpts.setSeries);\n\t\t\t\t}, false);\n\t\t\t}\n\t\t}\n\n\t\tfor (var key in legendCols) {\n\t\t\tlet v = placeTag(\"td\", LEGEND_VALUE, row);\n\t\t\tv.textContent = \"--\";\n\t\t\tcells.push(v);\n\t\t}\n\n\t\treturn [row, cells];\n\t}\n\n\tconst mouseListeners = new Map();\n\n\tfunction onMouse(ev, targ, fn, onlyTarg = true) {\n\t\tconst targListeners = mouseListeners.get(targ) || {};\n\t\tconst listener = cursor.bind[ev](self, targ, fn, onlyTarg);\n\n\t\tif (listener) {\n\t\t\ton(ev, targ, targListeners[ev] = listener);\n\t\t\tmouseListeners.set(targ, targListeners);\n\t\t}\n\t}\n\n\tfunction offMouse(ev, targ, fn) {\n\t\tconst targListeners = mouseListeners.get(targ) || {};\n\n\t\tfor (let k in targListeners) {\n\t\t\tif (ev == null || k == ev) {\n\t\t\t\toff(k, targ, targListeners[k]);\n\t\t\t\tdelete targListeners[k];\n\t\t\t}\n\t\t}\n\n\t\tif (ev == null)\n\t\t\tmouseListeners.delete(targ);\n\t}\n\n\tlet fullWidCss = 0;\n\tlet fullHgtCss = 0;\n\n\tlet plotWidCss = 0;\n\tlet plotHgtCss = 0;\n\n\t// plot margins to account for axes\n\tlet plotLftCss = 0;\n\tlet plotTopCss = 0;\n\n\t// previous values for diffing\n\tlet _plotLftCss = plotLftCss;\n\tlet _plotTopCss = plotTopCss;\n\tlet _plotWidCss = plotWidCss;\n\tlet _plotHgtCss = plotHgtCss;\n\n\n\tlet plotLft = 0;\n\tlet plotTop = 0;\n\tlet plotWid = 0;\n\tlet plotHgt = 0;\n\n\tself.bbox = {};\n\n\tlet shouldSetScales = false;\n\tlet shouldSetSize = false;\n\tlet shouldConvergeSize = false;\n\tlet shouldSetCursor = false;\n\tlet shouldSetSelect = false;\n\tlet shouldSetLegend = false;\n\n\tfunction _setSize(width, height, force) {\n\t\tif (force || (width != self.width || height != self.height))\n\t\t\tcalcSize(width, height);\n\n\t\tresetYSeries(false);\n\n\t\tshouldConvergeSize = true;\n\t\tshouldSetSize = true;\n\n\t\tcommit();\n\t}\n\n\tfunction calcSize(width, height) {\n\t//\tlog(\"calcSize()\", arguments);\n\n\t\tself.width = fullWidCss = plotWidCss = width;\n\t\tself.height = fullHgtCss = plotHgtCss = height;\n\t\tplotLftCss = plotTopCss = 0;\n\n\t\tcalcPlotRect();\n\t\tcalcAxesRects();\n\n\t\tlet bb = self.bbox;\n\n\t\tplotLft = bb.left = incrRound(plotLftCss * pxRatio, 0.5);\n\t\tplotTop = bb.top = incrRound(plotTopCss * pxRatio, 0.5);\n\t\tplotWid = bb.width = incrRound(plotWidCss * pxRatio, 0.5);\n\t\tplotHgt = bb.height = incrRound(plotHgtCss * pxRatio, 0.5);\n\n\t//\tupdOriDims();\n\t}\n\n\t// ensures size calc convergence\n\tconst CYCLE_LIMIT = 3;\n\n\tfunction convergeSize() {\n\t\tlet converged = false;\n\n\t\tlet cycleNum = 0;\n\n\t\twhile (!converged) {\n\t\t\tcycleNum++;\n\n\t\t\tlet axesConverged = axesCalc(cycleNum);\n\t\t\tlet paddingConverged = paddingCalc(cycleNum);\n\n\t\t\tconverged = cycleNum == CYCLE_LIMIT || (axesConverged && paddingConverged);\n\n\t\t\tif (!converged) {\n\t\t\t\tcalcSize(self.width, self.height);\n\t\t\t\tshouldSetSize = true;\n\t\t\t}\n\t\t}\n\t}\n\n\tfunction setSize({width, height}) {\n\t\t_setSize(width, height);\n\t}\n\n\tself.setSize = setSize;\n\n\t// accumulate axis offsets, reduce canvas width\n\tfunction calcPlotRect() {\n\t\t// easements for edge labels\n\t\tlet hasTopAxis = false;\n\t\tlet hasBtmAxis = false;\n\t\tlet hasRgtAxis = false;\n\t\tlet hasLftAxis = false;\n\n\t\taxes.forEach((axis, i) => {\n\t\t\tif (axis.show && axis._show) {\n\t\t\t\tlet {side, _size} = axis;\n\t\t\t\tlet isVt = side % 2;\n\t\t\t\tlet labelSize = axis.label != null ? axis.labelSize : 0;\n\n\t\t\t\tlet fullSize = _size + labelSize;\n\n\t\t\t\tif (fullSize > 0) {\n\t\t\t\t\tif (isVt) {\n\t\t\t\t\t\tplotWidCss -= fullSize;\n\n\t\t\t\t\t\tif (side == 3) {\n\t\t\t\t\t\t\tplotLftCss += fullSize;\n\t\t\t\t\t\t\thasLftAxis = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse\n\t\t\t\t\t\t\thasRgtAxis = true;\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tplotHgtCss -= fullSize;\n\n\t\t\t\t\t\tif (side == 0) {\n\t\t\t\t\t\t\tplotTopCss += fullSize;\n\t\t\t\t\t\t\thasTopAxis = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse\n\t\t\t\t\t\t\thasBtmAxis = true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\tsidesWithAxes[0] = hasTopAxis;\n\t\tsidesWithAxes[1] = hasRgtAxis;\n\t\tsidesWithAxes[2] = hasBtmAxis;\n\t\tsidesWithAxes[3] = hasLftAxis;\n\n\t\t// hz padding\n\t\tplotWidCss -= _padding[1] + _padding[3];\n\t\tplotLftCss += _padding[3];\n\n\t\t// vt padding\n\t\tplotHgtCss -= _padding[2] + _padding[0];\n\t\tplotTopCss += _padding[0];\n\t}\n\n\tfunction calcAxesRects() {\n\t\t// will accum +\n\t\tlet off1 = plotLftCss + plotWidCss;\n\t\tlet off2 = plotTopCss + plotHgtCss;\n\t\t// will accum -\n\t\tlet off3 = plotLftCss;\n\t\tlet off0 = plotTopCss;\n\n\t\tfunction incrOffset(side, size) {\n\t\t\tswitch (side) {\n\t\t\t\tcase 1: off1 += size; return off1 - size;\n\t\t\t\tcase 2: off2 += size; return off2 - size;\n\t\t\t\tcase 3: off3 -= size; return off3 + size;\n\t\t\t\tcase 0: off0 -= size; return off0 + size;\n\t\t\t}\n\t\t}\n\n\t\taxes.forEach((axis, i) => {\n\t\t\tif (axis.show && axis._show) {\n\t\t\t\tlet side = axis.side;\n\n\t\t\t\taxis._pos = incrOffset(side, axis._size);\n\n\t\t\t\tif (axis.label != null)\n\t\t\t\t\taxis._lpos = incrOffset(side, axis.labelSize);\n\t\t\t}\n\t\t});\n\t}\n\n\tif (cursor.dataIdx == null) {\n\t\tlet hov = cursor.hover;\n\n\t\tlet skip = hov.skip = new Set(hov.skip ?? []);\n\t\tskip.add(void 0); // alignment artifacts\n\t\tlet prox = hov.prox = fnOrSelf(hov.prox);\n\t\tlet bias = hov.bias ??= 0;\n\n\t\t// TODO: only scan between in-view idxs (i0, i1)\n\t\tcursor.dataIdx = (self, seriesIdx, cursorIdx, valAtPosX) => {\n\t\t\tif (seriesIdx == 0)\n\t\t\t\treturn cursorIdx;\n\n\t\t\tlet idx2 = cursorIdx;\n\n\t\t\tlet _prox = prox(self, seriesIdx, cursorIdx, valAtPosX) ?? inf;\n\t\t\tlet withProx = _prox >= 0 && _prox < inf;\n\t\t\tlet xDim = scaleX.ori == 0 ? plotWidCss : plotHgtCss;\n\t\t\tlet cursorLft = cursor.left;\n\n\t\t\tlet xValues = data[0];\n\t\t\tlet yValues = data[seriesIdx];\n\n\t\t\tif (skip.has(yValues[cursorIdx])) {\n\t\t\t\tidx2 = null;\n\n\t\t\t\tlet nonNullLft = null,\n\t\t\t\t\tnonNullRgt = null,\n\t\t\t\t\tj;\n\n\t\t\t\tif (bias == 0 || bias == -1) {\n\t\t\t\t\tj = cursorIdx;\n\t\t\t\t\twhile (nonNullLft == null && j-- > 0) {\n\t\t\t\t\t\tif (!skip.has(yValues[j]))\n\t\t\t\t\t\t\tnonNullLft = j;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (bias == 0 || bias == 1) {\n\t\t\t\t\tj = cursorIdx;\n\t\t\t\t\twhile (nonNullRgt == null && j++ < yValues.length) {\n\t\t\t\t\t\tif (!skip.has(yValues[j]))\n\t\t\t\t\t\t\tnonNullRgt = j;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (nonNullLft != null || nonNullRgt != null) {\n\t\t\t\t\tif (withProx) {\n\t\t\t\t\t\tlet lftPos = nonNullLft == null ? -Infinity : valToPosX(xValues[nonNullLft], scaleX, xDim, 0);\n\t\t\t\t\t\tlet rgtPos = nonNullRgt == null ? Infinity : valToPosX(xValues[nonNullRgt], scaleX, xDim, 0);\n\n\t\t\t\t\t\tlet lftDelta = cursorLft - lftPos;\n\t\t\t\t\t\tlet rgtDelta = rgtPos - cursorLft;\n\n\t\t\t\t\t\tif (lftDelta <= rgtDelta) {\n\t\t\t\t\t\t\tif (lftDelta <= _prox)\n\t\t\t\t\t\t\t\tidx2 = nonNullLft;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tif (rgtDelta <= _prox)\n\t\t\t\t\t\t\t\tidx2 = nonNullRgt;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tidx2 =\n\t\t\t\t\t\t\tnonNullRgt == null ? nonNullLft :\n\t\t\t\t\t\t\tnonNullLft == null ? nonNullRgt :\n\t\t\t\t\t\t\tcursorIdx - nonNullLft <= nonNullRgt - cursorIdx ? nonNullLft : nonNullRgt;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\telse if (withProx) {\n\t\t\t\tlet dist = abs(cursorLft - valToPosX(xValues[cursorIdx], scaleX, xDim, 0));\n\n\t\t\t\tif (dist > _prox)\n\t\t\t\t\tidx2 = null;\n\t\t\t}\n\n\t\t\treturn idx2;\n\t\t};\n\t}\n\n\tconst setCursorEvent = e => { cursor.event = e; };\n\n\tcursor.idxs = activeIdxs;\n\n\tcursor._lock = false;\n\n\tlet points = cursor.points;\n\n\tpoints.show = fnOrSelf(points.show);\n\tpoints.size = fnOrSelf(points.size);\n\tpoints.stroke = fnOrSelf(points.stroke);\n\tpoints.width = fnOrSelf(points.width);\n\tpoints.fill = fnOrSelf(points.fill);\n\n\tconst focus = self.focus = assign({}, opts.focus || {alpha: 0.3}, cursor.focus);\n\n\tconst cursorFocus = focus.prox >= 0;\n\tconst cursorOnePt = cursorFocus && points.one;\n\n\t// series-intersection markers\n\tlet cursorPts = [];\n\t// position caches in CSS pixels\n\tlet cursorPtsLft = [];\n\tlet cursorPtsTop = [];\n\n\tfunction initCursorPt(s, si) {\n\t\tlet pt = points.show(self, si);\n\n\t\tif (pt instanceof HTMLElement) {\n\t\t\taddClass(pt, CURSOR_PT);\n\t\t\taddClass(pt, s.class);\n\t\t\telTrans(pt, -10, -10, plotWidCss, plotHgtCss);\n\t\t\tover.insertBefore(pt, cursorPts[si]);\n\n\t\t\treturn pt;\n\t\t}\n\t}\n\n\tfunction initSeries(s, i) {\n\t\tif (mode == 1 || i > 0) {\n\t\t\tlet isTime = mode == 1 && scales[s.scale].time;\n\n\t\t\tlet sv = s.value;\n\t\t\ts.value = isTime ? (isStr(sv) ? timeSeriesVal(_tzDate, timeSeriesStamp(sv, _fmtDate)) : sv || _timeSeriesVal) : sv || numSeriesVal;\n\t\t\ts.label = s.label || (isTime ? timeSeriesLabel : numSeriesLabel);\n\t\t}\n\n\t\tif (cursorOnePt || i > 0) {\n\t\t\ts.width = s.width == null ? 1 : s.width;\n\t\t\ts.paths = s.paths || linearPath || retNull;\n\t\t\ts.fillTo = fnOrSelf(s.fillTo || seriesFillTo);\n\t\t\ts.pxAlign = +ifNull(s.pxAlign, pxAlign);\n\t\t\ts.pxRound = pxRoundGen(s.pxAlign);\n\n\t\t\ts.stroke = fnOrSelf(s.stroke || null);\n\t\t\ts.fill = fnOrSelf(s.fill || null);\n\t\t\ts._stroke = s._fill = s._paths = s._focus = null;\n\n\t\t\tlet _ptDia = ptDia(max(1, s.width), 1);\n\t\t\tlet points = s.points = assign({}, {\n\t\t\t\tsize: _ptDia,\n\t\t\t\twidth: max(1, _ptDia * .2),\n\t\t\t\tstroke: s.stroke,\n\t\t\t\tspace: _ptDia * 2,\n\t\t\t\tpaths: pointsPath,\n\t\t\t\t_stroke: null,\n\t\t\t\t_fill: null,\n\t\t\t}, s.points);\n\t\t\tpoints.show = fnOrSelf(points.show);\n\t\t\tpoints.filter = fnOrSelf(points.filter);\n\t\t\tpoints.fill = fnOrSelf(points.fill);\n\t\t\tpoints.stroke = fnOrSelf(points.stroke);\n\t\t\tpoints.paths = fnOrSelf(points.paths);\n\t\t\tpoints.pxAlign = s.pxAlign;\n\t\t}\n\n\t\tif (showLegend) {\n\t\t\tlet rowCells = initLegendRow(s, i);\n\t\t\tlegendRows.splice(i, 0, rowCells[0]);\n\t\t\tlegendCells.splice(i, 0, rowCells[1]);\n\t\t\tlegend.values.push(null);\t// NULL_LEGEND_VALS not yet avil here :(\n\t\t}\n\n\t\tif (showCursor) {\n\t\t\tactiveIdxs.splice(i, 0, null);\n\n\t\t\tlet pt = null;\n\n\t\t\tif (cursorOnePt) {\n\t\t\t\tif (i == 0)\n\t\t\t\t\tpt = initCursorPt(s, i);\n\t\t\t}\n\t\t\telse if (i > 0)\n\t\t\t\tpt = initCursorPt(s, i);\n\n\t\t\tcursorPts.splice(i, 0, pt);\n\t\t\tcursorPtsLft.splice(i, 0, 0);\n\t\t\tcursorPtsTop.splice(i, 0, 0);\n\t\t}\n\n\t\tfire(\"addSeries\", i);\n\t}\n\n\tfunction addSeries(opts, si) {\n\t\tsi = si == null ? series.length : si;\n\n\t\topts = mode == 1 ? setDefault(opts, si, xSeriesOpts, ySeriesOpts) : setDefault(opts, si, {}, xySeriesOpts);\n\n\t\tseries.splice(si, 0, opts);\n\t\tinitSeries(series[si], si);\n\t}\n\n\tself.addSeries = addSeries;\n\n\tfunction delSeries(i) {\n\t\tseries.splice(i, 1);\n\n\t\tif (showLegend) {\n\t\t\tlegend.values.splice(i, 1);\n\n\t\t\tlegendCells.splice(i, 1);\n\t\t\tlet tr = legendRows.splice(i, 1)[0];\n\t\t\toffMouse(null, tr.firstChild);\n\t\t\ttr.remove();\n\t\t}\n\n\t\tif (showCursor) {\n\t\t\tactiveIdxs.splice(i, 1);\n\t\t\tcursorPts.splice(i, 1)[0].remove();\n\t\t\tcursorPtsLft.splice(i, 1);\n\t\t\tcursorPtsTop.splice(i, 1);\n\t\t}\n\n\t\t// TODO: de-init no-longer-needed scales?\n\n\t\tfire(\"delSeries\", i);\n\t}\n\n\tself.delSeries = delSeries;\n\n\tconst sidesWithAxes = [false, false, false, false];\n\n\tfunction initAxis(axis, i) {\n\t\taxis._show = axis.show;\n\n\t\tif (axis.show) {\n\t\t\tlet isVt = axis.side % 2;\n\n\t\t\tlet sc = scales[axis.scale];\n\n\t\t\t// this can occur if all series specify non-default scales\n\t\t\tif (sc == null) {\n\t\t\t\taxis.scale = isVt ? series[1].scale : xScaleKey;\n\t\t\t\tsc = scales[axis.scale];\n\t\t\t}\n\n\t\t\t// also set defaults for incrs & values based on axis distr\n\t\t\tlet isTime = sc.time;\n\n\t\t\taxis.size = fnOrSelf(axis.size);\n\t\t\taxis.space = fnOrSelf(axis.space);\n\t\t\taxis.rotate = fnOrSelf(axis.rotate);\n\n\t\t\tif (isArr(axis.incrs)) {\n\t\t\t\taxis.incrs.forEach(incr => {\n\t\t\t\t\t!fixedDec.has(incr) && fixedDec.set(incr, guessDec(incr));\n\t\t\t\t});\n\t\t\t}\n\n\t\t\taxis.incrs = fnOrSelf(axis.incrs || ( sc.distr == 2 ? wholeIncrs : (isTime ? (ms == 1 ? timeIncrsMs : timeIncrsS) : numIncrs)));\n\t\t\taxis.splits = fnOrSelf(axis.splits || (isTime && sc.distr == 1 ? _timeAxisSplits : sc.distr == 3 ? logAxisSplits : sc.distr == 4 ? asinhAxisSplits : numAxisSplits));\n\n\t\t\taxis.stroke = fnOrSelf(axis.stroke);\n\t\t\taxis.grid.stroke = fnOrSelf(axis.grid.stroke);\n\t\t\taxis.ticks.stroke = fnOrSelf(axis.ticks.stroke);\n\t\t\taxis.border.stroke = fnOrSelf(axis.border.stroke);\n\n\t\t\tlet av = axis.values;\n\n\t\t\taxis.values = (\n\t\t\t\t// static array of tick values\n\t\t\t\tisArr(av) && !isArr(av[0]) ? fnOrSelf(av) :\n\t\t\t\t// temporal\n\t\t\t\tisTime ? (\n\t\t\t\t\t// config array of fmtDate string tpls\n\t\t\t\t\tisArr(av) ?\n\t\t\t\t\t\ttimeAxisVals(_tzDate, timeAxisStamps(av, _fmtDate)) :\n\t\t\t\t\t// fmtDate string tpl\n\t\t\t\t\tisStr(av) ?\n\t\t\t\t\t\ttimeAxisVal(_tzDate, av) :\n\t\t\t\t\tav || _timeAxisVals\n\t\t\t\t) : av || numAxisVals\n\t\t\t);\n\n\t\t\taxis.filter = fnOrSelf(axis.filter || ( sc.distr >= 3 && sc.log == 10 ? log10AxisValsFilt : sc.distr == 3 && sc.log == 2 ? log2AxisValsFilt : retArg1));\n\n\t\t\taxis.font = pxRatioFont(axis.font);\n\t\t\taxis.labelFont = pxRatioFont(axis.labelFont);\n\n\t\t\taxis._size = axis.size(self, null, i, 0);\n\n\t\t\taxis._space =\n\t\t\taxis._rotate =\n\t\t\taxis._incrs =\n\t\t\taxis._found =\t// foundIncrSpace\n\t\t\taxis._splits =\n\t\t\taxis._values = null;\n\n\t\t\tif (axis._size > 0) {\n\t\t\t\tsidesWithAxes[i] = true;\n\t\t\t\taxis._el = placeDiv(AXIS, wrap);\n\t\t\t}\n\n\t\t\t// debug\n\t\t//\taxis._el.style.background = \"#\" + Math.floor(Math.random()*16777215).toString(16) + '80';\n\t\t}\n\t}\n\n\tfunction autoPadSide(self, side, sidesWithAxes, cycleNum) {\n\t\tlet [hasTopAxis, hasRgtAxis, hasBtmAxis, hasLftAxis] = sidesWithAxes;\n\n\t\tlet ori = side % 2;\n\t\tlet size = 0;\n\n\t\tif (ori == 0 && (hasLftAxis || hasRgtAxis))\n\t\t\tsize = (side == 0 && !hasTopAxis || side == 2 && !hasBtmAxis ? round(xAxisOpts.size / 3) : 0);\n\t\tif (ori == 1 && (hasTopAxis || hasBtmAxis))\n\t\t\tsize = (side == 1 && !hasRgtAxis || side == 3 && !hasLftAxis ? round(yAxisOpts.size / 2) : 0);\n\n\t\treturn size;\n\t}\n\n\tconst padding = self.padding = (opts.padding || [autoPadSide,autoPadSide,autoPadSide,autoPadSide]).map(p => fnOrSelf(ifNull(p, autoPadSide)));\n\tconst _padding = self._padding = padding.map((p, i) => p(self, i, sidesWithAxes, 0));\n\n\tlet dataLen;\n\n\t// rendered data window\n\tlet i0 = null;\n\tlet i1 = null;\n\tconst idxs = mode == 1 ? series[0].idxs : null;\n\n\tlet data0 = null;\n\n\tlet viaAutoScaleX = false;\n\n\tfunction setData(_data, _resetScales) {\n\t\tdata = _data == null ? [] : _data;\n\n\t\tself.data = self._data = data;\n\n\t\tif (mode == 2) {\n\t\t\tdataLen = 0;\n\t\t\tfor (let i = 1; i < series.length; i++)\n\t\t\t\tdataLen += data[i][0].length;\n\t\t}\n\t\telse {\n\t\t\tif (data.length == 0)\n\t\t\t\tself.data = self._data = data = [[]];\n\n\t\t\tdata0 = data[0];\n\t\t\tdataLen = data0.length;\n\n\t\t\tlet scaleData = data;\n\n\t\t\tif (xScaleDistr == 2) {\n\t\t\t\tscaleData = data.slice();\n\n\t\t\t\tlet _data0 = scaleData[0] = Array(dataLen);\n\t\t\t\tfor (let i = 0; i < dataLen; i++)\n\t\t\t\t\t_data0[i] = i;\n\t\t\t}\n\n\t\t\tself._data = data = scaleData;\n\t\t}\n\n\t\tresetYSeries(true);\n\n\t\tfire(\"setData\");\n\n\t\t// forces x axis tick values to re-generate when neither x scale nor y scale changes\n\t\t// in ordinal mode, scale range is by index, so will not change if new data has same length, but tick values are from data\n\t\tif (xScaleDistr == 2) {\n\t\t\tshouldConvergeSize = true;\n\n\t\t\t/* or somewhat cheaper, and uglier:\n\t\t\tif (ready) {\n\t\t\t\t// logic extracted from axesCalc()\n\t\t\t\tlet i = 0;\n\t\t\t\tlet axis = axes[i];\n\t\t\t\tlet _splits = axis._splits.map(i => data0[i]);\n\t\t\t\tlet [_incr, _space] = axis._found;\n\t\t\t\tlet incr = data0[_splits[1]] - data0[_splits[0]];\n\t\t\t\taxis._values = axis.values(self, axis.filter(self, _splits, i, _space, incr), i, _space, incr);\n\t\t\t}\n\t\t\t*/\n\t\t}\n\n\t\tif (_resetScales !== false) {\n\t\t\tlet xsc = scaleX;\n\n\t\t\tif (xsc.auto(self, viaAutoScaleX))\n\t\t\t\tautoScaleX();\n\t\t\telse\n\t\t\t\t_setScale(xScaleKey, xsc.min, xsc.max);\n\n\t\t\tshouldSetCursor = shouldSetCursor || cursor.left >= 0;\n\t\t\tshouldSetLegend = true;\n\t\t\tcommit();\n\t\t}\n\t}\n\n\tself.setData = setData;\n\n\tfunction autoScaleX() {\n\t\tviaAutoScaleX = true;\n\n\t\tlet _min, _max;\n\n\t\tif (mode == 1) {\n\t\t\tif (dataLen > 0) {\n\t\t\t\ti0 = idxs[0] = 0;\n\t\t\t\ti1 = idxs[1] = dataLen - 1;\n\n\t\t\t\t_min = data[0][i0];\n\t\t\t\t_max = data[0][i1];\n\n\t\t\t\tif (xScaleDistr == 2) {\n\t\t\t\t\t_min = i0;\n\t\t\t\t\t_max = i1;\n\t\t\t\t}\n\t\t\t\telse if (_min == _max) {\n\t\t\t\t\tif (xScaleDistr == 3)\n\t\t\t\t\t\t[_min, _max] = rangeLog(_min, _min, scaleX.log, false);\n\t\t\t\t\telse if (xScaleDistr == 4)\n\t\t\t\t\t\t[_min, _max] = rangeAsinh(_min, _min, scaleX.log, false);\n\t\t\t\t\telse if (scaleX.time)\n\t\t\t\t\t\t_max = _min + round(86400 / ms);\n\t\t\t\t\telse\n\t\t\t\t\t\t[_min, _max] = rangeNum(_min, _max, rangePad, true);\n\t\t\t\t}\n\t\t\t}\n\t\t\telse {\n\t\t\t\ti0 = idxs[0] = _min = null;\n\t\t\t\ti1 = idxs[1] = _max = null;\n\t\t\t}\n\t\t}\n\n\t\t_setScale(xScaleKey, _min, _max);\n\t}\n\n\tlet ctxStroke, ctxFill, ctxWidth, ctxDash, ctxJoin, ctxCap, ctxFont, ctxAlign, ctxBaseline;\n\tlet ctxAlpha;\n\n\tfunction setCtxStyle(stroke, width, dash, cap, fill, join) {\n\t\tstroke ??= transparent;\n\t\tdash ??= EMPTY_ARR;\n\t\tcap ??= \"butt\"; // (‿|‿)\n\t\tfill ??= transparent;\n\t\tjoin ??= \"round\";\n\n\t\tif (stroke != ctxStroke)\n\t\t\tctx.strokeStyle = ctxStroke = stroke;\n\t\tif (fill != ctxFill)\n\t\t\tctx.fillStyle = ctxFill = fill;\n\t\tif (width != ctxWidth)\n\t\t\tctx.lineWidth = ctxWidth = width;\n\t\tif (join != ctxJoin)\n\t\t\tctx.lineJoin = ctxJoin = join;\n\t\tif (cap != ctxCap)\n\t\t\tctx.lineCap = ctxCap = cap;\n\t\tif (dash != ctxDash)\n\t\t\tctx.setLineDash(ctxDash = dash);\n\t}\n\n\tfunction setFontStyle(font, fill, align, baseline) {\n\t\tif (fill != ctxFill)\n\t\t\tctx.fillStyle = ctxFill = fill;\n\t\tif (font != ctxFont)\n\t\t\tctx.font = ctxFont = font;\n\t\tif (align != ctxAlign)\n\t\t\tctx.textAlign = ctxAlign = align;\n\t\tif (baseline != ctxBaseline)\n\t\t\tctx.textBaseline = ctxBaseline = baseline;\n\t}\n\n\tfunction accScale(wsc, psc, facet, data, sorted = 0) {\n\t\tif (data.length > 0 && wsc.auto(self, viaAutoScaleX) && (psc == null || psc.min == null)) {\n\t\t\tlet _i0 = ifNull(i0, 0);\n\t\t\tlet _i1 = ifNull(i1, data.length - 1);\n\n\t\t\t// only run getMinMax() for invalidated series data, else reuse\n\t\t\tlet minMax = facet.min == null ? getMinMax(data, _i0, _i1, sorted, wsc.distr == 3) : [facet.min, facet.max];\n\n\t\t\t// initial min/max\n\t\t\twsc.min = min(wsc.min, facet.min = minMax[0]);\n\t\t\twsc.max = max(wsc.max, facet.max = minMax[1]);\n\t\t}\n\t}\n\n\tconst AUTOSCALE = {min: null, max: null};\n\n\tfunction setScales() {\n\t//\tlog(\"setScales()\", arguments);\n\n\t\t// implicitly add auto scales, and unranged scales\n\t\tfor (let k in scales) {\n\t\t\tlet sc = scales[k];\n\n\t\t\tif (pendScales[k] == null &&\n\t\t\t\t(\n\t\t\t\t\t// scales that have never been set (on init)\n\t\t\t\t\tsc.min == null ||\n\t\t\t\t\t// or auto scales when the x scale was explicitly set\n\t\t\t\t\tpendScales[xScaleKey] != null && sc.auto(self, viaAutoScaleX)\n\t\t\t\t)\n\t\t\t) {\n\t\t\t\tpendScales[k] = AUTOSCALE;\n\t\t\t}\n\t\t}\n\n\t\t// implicitly add dependent scales\n\t\tfor (let k in scales) {\n\t\t\tlet sc = scales[k];\n\n\t\t\tif (pendScales[k] == null && sc.from != null && pendScales[sc.from] != null)\n\t\t\t\tpendScales[k] = AUTOSCALE;\n\t\t}\n\n\t\t// explicitly setting the x-scale invalidates everything (acts as redraw)\n\t\tif (pendScales[xScaleKey] != null)\n\t\t\tresetYSeries(true); // TODO: only reset series on auto scales?\n\n\t\tlet wipScales = {};\n\n\t\tfor (let k in pendScales) {\n\t\t\tlet psc = pendScales[k];\n\n\t\t\tif (psc != null) {\n\t\t\t\tlet wsc = wipScales[k] = copy(scales[k], fastIsObj);\n\n\t\t\t\tif (psc.min != null)\n\t\t\t\t\tassign(wsc, psc);\n\t\t\t\telse if (k != xScaleKey || mode == 2) {\n\t\t\t\t\tif (dataLen == 0 && wsc.from == null) {\n\t\t\t\t\t\tlet minMax = wsc.range(self, null, null, k);\n\t\t\t\t\t\twsc.min = minMax[0];\n\t\t\t\t\t\twsc.max = minMax[1];\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\twsc.min = inf;\n\t\t\t\t\t\twsc.max = -inf;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (dataLen > 0) {\n\t\t\t// pre-range y-scales from y series' data values\n\t\t\tseries.forEach((s, i) => {\n\t\t\t\tif (mode == 1) {\n\t\t\t\t\tlet k = s.scale;\n\t\t\t\t\tlet psc = pendScales[k];\n\n\t\t\t\t\tif (psc == null)\n\t\t\t\t\t\treturn;\n\n\t\t\t\t\tlet wsc = wipScales[k];\n\n\t\t\t\t\tif (i == 0) {\n\t\t\t\t\t\tlet minMax = wsc.range(self, wsc.min, wsc.max, k);\n\n\t\t\t\t\t\twsc.min = minMax[0];\n\t\t\t\t\t\twsc.max = minMax[1];\n\n\t\t\t\t\t\ti0 = closestIdx(wsc.min, data[0]);\n\t\t\t\t\t\ti1 = closestIdx(wsc.max, data[0]);\n\n\t\t\t\t\t\t// don't try to contract same or adjacent idxs\n\t\t\t\t\t\tif (i1 - i0 > 1) {\n\t\t\t\t\t\t\t// closest indices can be outside of view\n\t\t\t\t\t\t\tif (data[0][i0] < wsc.min)\n\t\t\t\t\t\t\t\ti0++;\n\t\t\t\t\t\t\tif (data[0][i1] > wsc.max)\n\t\t\t\t\t\t\t\ti1--;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\ts.min = data0[i0];\n\t\t\t\t\t\ts.max = data0[i1];\n\t\t\t\t\t}\n\t\t\t\t\telse if (s.show && s.auto)\n\t\t\t\t\t\taccScale(wsc, psc, s, data[i], s.sorted);\n\n\t\t\t\t\ts.idxs[0] = i0;\n\t\t\t\t\ts.idxs[1] = i1;\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tif (i > 0) {\n\t\t\t\t\t\tif (s.show && s.auto) {\n\t\t\t\t\t\t\t// TODO: only handles, assumes and requires facets[0] / 'x' scale, and facets[1] / 'y' scale\n\t\t\t\t\t\t\tlet [ xFacet, yFacet ] = s.facets;\n\t\t\t\t\t\t\tlet xScaleKey = xFacet.scale;\n\t\t\t\t\t\t\tlet yScaleKey = yFacet.scale;\n\t\t\t\t\t\t\tlet [ xData, yData ] = data[i];\n\n\t\t\t\t\t\t\tlet wscx = wipScales[xScaleKey];\n\t\t\t\t\t\t\tlet wscy = wipScales[yScaleKey];\n\n\t\t\t\t\t\t\t// null can happen when only x is zoomed, but y has static range and doesnt get auto-added to pending\n\t\t\t\t\t\t\twscx != null && accScale(wscx, pendScales[xScaleKey], xFacet, xData, xFacet.sorted);\n\t\t\t\t\t\t\twscy != null && accScale(wscy, pendScales[yScaleKey], yFacet, yData, yFacet.sorted);\n\n\t\t\t\t\t\t\t// temp\n\t\t\t\t\t\t\ts.min = yFacet.min;\n\t\t\t\t\t\t\ts.max = yFacet.max;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\n\t\t\t// range independent scales\n\t\t\tfor (let k in wipScales) {\n\t\t\t\tlet wsc = wipScales[k];\n\t\t\t\tlet psc = pendScales[k];\n\n\t\t\t\tif (wsc.from == null && (psc == null || psc.min == null)) {\n\t\t\t\t\tlet minMax = wsc.range(\n\t\t\t\t\t\tself,\n\t\t\t\t\t\twsc.min == inf ? null : wsc.min,\n\t\t\t\t\t\twsc.max == -inf ? null : wsc.max,\n\t\t\t\t\t\tk\n\t\t\t\t\t);\n\t\t\t\t\twsc.min = minMax[0];\n\t\t\t\t\twsc.max = minMax[1];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// range dependent scales\n\t\tfor (let k in wipScales) {\n\t\t\tlet wsc = wipScales[k];\n\n\t\t\tif (wsc.from != null) {\n\t\t\t\tlet base = wipScales[wsc.from];\n\n\t\t\t\tif (base.min == null)\n\t\t\t\t\twsc.min = wsc.max = null;\n\t\t\t\telse {\n\t\t\t\t\tlet minMax = wsc.range(self, base.min, base.max, k);\n\t\t\t\t\twsc.min = minMax[0];\n\t\t\t\t\twsc.max = minMax[1];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tlet changed = {};\n\t\tlet anyChanged = false;\n\n\t\tfor (let k in wipScales) {\n\t\t\tlet wsc = wipScales[k];\n\t\t\tlet sc = scales[k];\n\n\t\t\tif (sc.min != wsc.min || sc.max != wsc.max) {\n\t\t\t\tsc.min = wsc.min;\n\t\t\t\tsc.max = wsc.max;\n\n\t\t\t\tlet distr = sc.distr;\n\n\t\t\t\tsc._min = distr == 3 ? log10(sc.min) : distr == 4 ? asinh(sc.min, sc.asinh) : distr == 100 ? sc.fwd(sc.min) : sc.min;\n\t\t\t\tsc._max = distr == 3 ? log10(sc.max) : distr == 4 ? asinh(sc.max, sc.asinh) : distr == 100 ? sc.fwd(sc.max) : sc.max;\n\n\t\t\t\tchanged[k] = anyChanged = true;\n\t\t\t}\n\t\t}\n\n\t\tif (anyChanged) {\n\t\t\t// invalidate paths of all series on changed scales\n\t\t\tseries.forEach((s, i) => {\n\t\t\t\tif (mode == 2) {\n\t\t\t\t\tif (i > 0 && changed.y)\n\t\t\t\t\t\ts._paths = null;\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tif (changed[s.scale])\n\t\t\t\t\t\ts._paths = null;\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tfor (let k in changed) {\n\t\t\t\tshouldConvergeSize = true;\n\t\t\t\tfire(\"setScale\", k);\n\t\t\t}\n\n\t\t\tif (showCursor && cursor.left >= 0)\n\t\t\t\tshouldSetCursor = shouldSetLegend = true;\n\t\t}\n\n\t\tfor (let k in pendScales)\n\t\t\tpendScales[k] = null;\n\t}\n\n\t// grabs the nearest indices with y data outside of x-scale limits\n\tfunction getOuterIdxs(ydata) {\n\t\tlet _i0 = clamp(i0 - 1, 0, dataLen - 1);\n\t\tlet _i1 = clamp(i1 + 1, 0, dataLen - 1);\n\n\t\twhile (ydata[_i0] == null && _i0 > 0)\n\t\t\t_i0--;\n\n\t\twhile (ydata[_i1] == null && _i1 < dataLen - 1)\n\t\t\t_i1++;\n\n\t\treturn [_i0, _i1];\n\t}\n\n\tfunction drawSeries() {\n\t\tif (dataLen > 0) {\n\t\t\tlet shouldAlpha = series.some(s => s._focus) && ctxAlpha != focus.alpha;\n\n\t\t\tif (shouldAlpha)\n\t\t\t\tctx.globalAlpha = ctxAlpha = focus.alpha;\n\n\t\t\tseries.forEach((s, i) => {\n\t\t\t\tif (i > 0 && s.show) {\n\t\t\t\t\tcacheStrokeFill(i, false);\n\t\t\t\t\tcacheStrokeFill(i, true);\n\n\t\t\t\t\tif (s._paths == null) {\n\t\t\t\t\t\tlet _ctxAlpha = ctxAlpha;\n\n\t\t\t\t\t\tif (ctxAlpha != s.alpha)\n\t\t\t\t\t\t\tctx.globalAlpha = ctxAlpha = s.alpha;\n\n\t\t\t\t\t\tlet _idxs = mode == 2 ? [0, data[i][0].length - 1] : getOuterIdxs(data[i]);\n\t\t\t\t\t\ts._paths = s.paths(self, i, _idxs[0], _idxs[1]);\n\n\t\t\t\t\t\tif (ctxAlpha != _ctxAlpha)\n\t\t\t\t\t\t\tctx.globalAlpha = ctxAlpha = _ctxAlpha;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tseries.forEach((s, i) => {\n\t\t\t\tif (i > 0 && s.show) {\n\t\t\t\t\tlet _ctxAlpha = ctxAlpha;\n\n\t\t\t\t\tif (ctxAlpha != s.alpha)\n\t\t\t\t\t\tctx.globalAlpha = ctxAlpha = s.alpha;\n\n\t\t\t\t\ts._paths != null && drawPath(i, false);\n\n\t\t\t\t\t{\n\t\t\t\t\t\tlet _gaps = s._paths != null ? s._paths.gaps : null;\n\n\t\t\t\t\t\tlet show = s.points.show(self, i, i0, i1, _gaps);\n\t\t\t\t\t\tlet idxs = s.points.filter(self, i, show, _gaps);\n\n\t\t\t\t\t\tif (show || idxs) {\n\t\t\t\t\t\t\ts.points._paths = s.points.paths(self, i, i0, i1, idxs);\n\t\t\t\t\t\t\tdrawPath(i, true);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tif (ctxAlpha != _ctxAlpha)\n\t\t\t\t\t\tctx.globalAlpha = ctxAlpha = _ctxAlpha;\n\n\t\t\t\t\tfire(\"drawSeries\", i);\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tif (shouldAlpha)\n\t\t\t\tctx.globalAlpha = ctxAlpha = 1;\n\t\t}\n\t}\n\n\tfunction cacheStrokeFill(si, _points) {\n\t\tlet s = _points ? series[si].points : series[si];\n\n\t\ts._stroke = s.stroke(self, si);\n\t\ts._fill = s.fill(self, si);\n\t}\n\n\tfunction drawPath(si, _points) {\n\t\tlet s = _points ? series[si].points : series[si];\n\n\t\tlet {\n\t\t\tstroke,\n\t\t\tfill,\n\t\t\tclip: gapsClip,\n\t\t\tflags,\n\n\t\t\t_stroke: strokeStyle = s._stroke,\n\t\t\t_fill: fillStyle = s._fill,\n\t\t\t_width: width = s.width,\n\t\t} = s._paths;\n\n\t\twidth = roundDec(width * pxRatio, 3);\n\n\t\tlet boundsClip = null;\n\t\tlet offset = (width % 2) / 2;\n\n\t\tif (_points && fillStyle == null)\n\t\t\tfillStyle = width > 0 ? \"#fff\" : strokeStyle;\n\n\t\tlet _pxAlign = s.pxAlign == 1 && offset > 0;\n\n\t\t_pxAlign && ctx.translate(offset, offset);\n\n\t\tif (!_points) {\n\t\t\tlet lft = plotLft - width / 2,\n\t\t\t\ttop = plotTop - width / 2,\n\t\t\t\twid = plotWid + width,\n\t\t\t\thgt = plotHgt + width;\n\n\t\t\tboundsClip = new Path2D();\n\t\t\tboundsClip.rect(lft, top, wid, hgt);\n\t\t}\n\n\t\t// the points pathbuilder's gapsClip is its boundsClip, since points dont need gaps clipping, and bounds depend on point size\n\t\tif (_points)\n\t\t\tstrokeFill(strokeStyle, width, s.dash, s.cap, fillStyle, stroke, fill, flags, gapsClip);\n\t\telse\n\t\t\tfillStroke(si, strokeStyle, width, s.dash, s.cap, fillStyle, stroke, fill, flags, boundsClip, gapsClip);\n\n\t\t_pxAlign && ctx.translate(-offset, -offset);\n\t}\n\n\tfunction fillStroke(si, strokeStyle, lineWidth, lineDash, lineCap, fillStyle, strokePath, fillPath, flags, boundsClip, gapsClip) {\n\t\tlet didStrokeFill = false;\n\n\t\t// for all bands where this series is the top edge, create upwards clips using the bottom edges\n\t\t// and apply clips + fill with band fill or dfltFill\n\t\tflags != 0 && bands.forEach((b, bi) => {\n\t\t\t// isUpperEdge?\n\t\t\tif (b.series[0] == si) {\n\t\t\t\tlet lowerEdge = series[b.series[1]];\n\t\t\t\tlet lowerData = data[b.series[1]];\n\n\t\t\t\tlet bandClip = (lowerEdge._paths || EMPTY_OBJ).band;\n\n\t\t\t\tif (isArr(bandClip))\n\t\t\t\t\tbandClip = b.dir == 1 ? bandClip[0] : bandClip[1];\n\n\t\t\t\tlet gapsClip2;\n\n\t\t\t\tlet _fillStyle = null;\n\n\t\t\t\t// hasLowerEdge?\n\t\t\t\tif (lowerEdge.show && bandClip && hasData(lowerData, i0, i1)) {\n\t\t\t\t\t_fillStyle = b.fill(self, bi) || fillStyle;\n\t\t\t\t\tgapsClip2 = lowerEdge._paths.clip;\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t\tbandClip = null;\n\n\t\t\t\tstrokeFill(strokeStyle, lineWidth, lineDash, lineCap, _fillStyle, strokePath, fillPath, flags, boundsClip, gapsClip, gapsClip2, bandClip);\n\n\t\t\t\tdidStrokeFill = true;\n\t\t\t}\n\t\t});\n\n\t\tif (!didStrokeFill)\n\t\t\tstrokeFill(strokeStyle, lineWidth, lineDash, lineCap, fillStyle, strokePath, fillPath, flags, boundsClip, gapsClip);\n\t}\n\n\tconst CLIP_FILL_STROKE = BAND_CLIP_FILL | BAND_CLIP_STROKE;\n\n\tfunction strokeFill(strokeStyle, lineWidth, lineDash, lineCap, fillStyle, strokePath, fillPath, flags, boundsClip, gapsClip, gapsClip2, bandClip) {\n\t\tsetCtxStyle(strokeStyle, lineWidth, lineDash, lineCap, fillStyle);\n\n\t\tif (boundsClip || gapsClip || bandClip) {\n\t\t\tctx.save();\n\t\t\tboundsClip && ctx.clip(boundsClip);\n\t\t\tgapsClip && ctx.clip(gapsClip);\n\t\t}\n\n\t\tif (bandClip) {\n\t\t\tif ((flags & CLIP_FILL_STROKE) == CLIP_FILL_STROKE) {\n\t\t\t\tctx.clip(bandClip);\n\t\t\t\tgapsClip2 && ctx.clip(gapsClip2);\n\t\t\t\tdoFill(fillStyle, fillPath);\n\t\t\t\tdoStroke(strokeStyle, strokePath, lineWidth);\n\t\t\t}\n\t\t\telse if (flags & BAND_CLIP_STROKE) {\n\t\t\t\tdoFill(fillStyle, fillPath);\n\t\t\t\tctx.clip(bandClip);\n\t\t\t\tdoStroke(strokeStyle, strokePath, lineWidth);\n\t\t\t}\n\t\t\telse if (flags & BAND_CLIP_FILL) {\n\t\t\t\tctx.save();\n\t\t\t\tctx.clip(bandClip);\n\t\t\t\tgapsClip2 && ctx.clip(gapsClip2);\n\t\t\t\tdoFill(fillStyle, fillPath);\n\t\t\t\tctx.restore();\n\t\t\t\tdoStroke(strokeStyle, strokePath, lineWidth);\n\t\t\t}\n\t\t}\n\t\telse {\n\t\t\tdoFill(fillStyle, fillPath);\n\t\t\tdoStroke(strokeStyle, strokePath, lineWidth);\n\t\t}\n\n\t\tif (boundsClip || gapsClip || bandClip)\n\t\t\tctx.restore();\n\t}\n\n\tfunction doStroke(strokeStyle, strokePath, lineWidth) {\n\t\tif (lineWidth > 0) {\n\t\t\tif (strokePath instanceof Map) {\n\t\t\t\tstrokePath.forEach((strokePath, strokeStyle) => {\n\t\t\t\t\tctx.strokeStyle = ctxStroke = strokeStyle;\n\t\t\t\t\tctx.stroke(strokePath);\n\t\t\t\t});\n\t\t\t}\n\t\t\telse\n\t\t\t\tstrokePath != null && strokeStyle && ctx.stroke(strokePath);\n\t\t}\n\t}\n\n\tfunction doFill(fillStyle, fillPath) {\n\t\tif (fillPath instanceof Map) {\n\t\t\tfillPath.forEach((fillPath, fillStyle) => {\n\t\t\t\tctx.fillStyle = ctxFill = fillStyle;\n\t\t\t\tctx.fill(fillPath);\n\t\t\t});\n\t\t}\n\t\telse\n\t\t\tfillPath != null && fillStyle && ctx.fill(fillPath);\n\t}\n\n\tfunction getIncrSpace(axisIdx, min, max, fullDim) {\n\t\tlet axis = axes[axisIdx];\n\n\t\tlet incrSpace;\n\n\t\tif (fullDim <= 0)\n\t\t\tincrSpace = [0, 0];\n\t\telse {\n\t\t\tlet minSpace = axis._space = axis.space(self, axisIdx, min, max, fullDim);\n\t\t\tlet incrs = axis._incrs = axis.incrs(self, axisIdx, min, max, fullDim, minSpace);\n\t\t\tincrSpace = findIncr(min, max, incrs, fullDim, minSpace);\n\t\t}\n\n\t\treturn (axis._found = incrSpace);\n\t}\n\n\tfunction drawOrthoLines(offs, filts, ori, side, pos0, len, width, stroke, dash, cap) {\n\t\tlet offset = (width % 2) / 2;\n\n\t\tpxAlign == 1 && ctx.translate(offset, offset);\n\n\t\tsetCtxStyle(stroke, width, dash, cap, stroke);\n\n\t\tctx.beginPath();\n\n\t\tlet x0, y0, x1, y1, pos1 = pos0 + (side == 0 || side == 3 ? -len : len);\n\n\t\tif (ori == 0) {\n\t\t\ty0 = pos0;\n\t\t\ty1 = pos1;\n\t\t}\n\t\telse {\n\t\t\tx0 = pos0;\n\t\t\tx1 = pos1;\n\t\t}\n\n\t\tfor (let i = 0; i < offs.length; i++) {\n\t\t\tif (filts[i] != null) {\n\t\t\t\tif (ori == 0)\n\t\t\t\t\tx0 = x1 = offs[i];\n\t\t\t\telse\n\t\t\t\t\ty0 = y1 = offs[i];\n\n\t\t\t\tctx.moveTo(x0, y0);\n\t\t\t\tctx.lineTo(x1, y1);\n\t\t\t}\n\t\t}\n\n\t\tctx.stroke();\n\n\t\tpxAlign == 1 && ctx.translate(-offset, -offset);\n\t}\n\n\tfunction axesCalc(cycleNum) {\n\t//\tlog(\"axesCalc()\", arguments);\n\n\t\tlet converged = true;\n\n\t\taxes.forEach((axis, i) => {\n\t\t\tif (!axis.show)\n\t\t\t\treturn;\n\n\t\t\tlet scale = scales[axis.scale];\n\n\t\t\tif (scale.min == null) {\n\t\t\t\tif (axis._show) {\n\t\t\t\t\tconverged = false;\n\t\t\t\t\taxis._show = false;\n\t\t\t\t\tresetYSeries(false);\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\t}\n\t\t\telse {\n\t\t\t\tif (!axis._show) {\n\t\t\t\t\tconverged = false;\n\t\t\t\t\taxis._show = true;\n\t\t\t\t\tresetYSeries(false);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tlet side = axis.side;\n\t\t\tlet ori = side % 2;\n\n\t\t\tlet {min, max} = scale;\t\t// \t\t// should this toggle them ._show = false\n\n\t\t\tlet [_incr, _space] = getIncrSpace(i, min, max, ori == 0 ? plotWidCss : plotHgtCss);\n\n\t\t\tif (_space == 0)\n\t\t\t\treturn;\n\n\t\t\t// if we're using index positions, force first tick to match passed index\n\t\t\tlet forceMin = scale.distr == 2;\n\n\t\t\tlet _splits = axis._splits = axis.splits(self, i, min, max, _incr, _space, forceMin);\n\n\t\t\t// tick labels\n\t\t\t// BOO this assumes a specific data/series\n\t\t\tlet splits = scale.distr == 2 ? _splits.map(i => data0[i]) : _splits;\n\t\t\tlet incr = scale.distr == 2 ? data0[_splits[1]] - data0[_splits[0]] : _incr;\n\n\t\t\tlet values = axis._values = axis.values(self, axis.filter(self, splits, i, _space, incr), i, _space, incr);\n\n\t\t\t// rotating of labels only supported on bottom x axis\n\t\t\taxis._rotate = side == 2 ? axis.rotate(self, values, i, _space) : 0;\n\n\t\t\tlet oldSize = axis._size;\n\n\t\t\taxis._size = ceil(axis.size(self, values, i, cycleNum));\n\n\t\t\tif (oldSize != null && axis._size != oldSize)\t\t\t// ready && ?\n\t\t\t\tconverged = false;\n\t\t});\n\n\t\treturn converged;\n\t}\n\n\tfunction paddingCalc(cycleNum) {\n\t\tlet converged = true;\n\n\t\tpadding.forEach((p, i) => {\n\t\t\tlet _p = p(self, i, sidesWithAxes, cycleNum);\n\n\t\t\tif (_p != _padding[i])\n\t\t\t\tconverged = false;\n\n\t\t\t_padding[i] = _p;\n\t\t});\n\n\t\treturn converged;\n\t}\n\n\tfunction drawAxesGrid() {\n\t\tfor (let i = 0; i < axes.length; i++) {\n\t\t\tlet axis = axes[i];\n\n\t\t\tif (!axis.show || !axis._show)\n\t\t\t\tcontinue;\n\n\t\t\tlet side = axis.side;\n\t\t\tlet ori = side % 2;\n\n\t\t\tlet x, y;\n\n\t\t\tlet fillStyle = axis.stroke(self, i);\n\n\t\t\tlet shiftDir = side == 0 || side == 3 ? -1 : 1;\n\n\t\t\tlet [_incr, _space] = axis._found;\n\n\t\t\t// axis label\n\t\t\tif (axis.label != null) {\n\t\t\t\tlet shiftAmt = axis.labelGap * shiftDir;\n\t\t\t\tlet baseLpos = round((axis._lpos + shiftAmt) * pxRatio);\n\n\t\t\t\tsetFontStyle(axis.labelFont[0], fillStyle, \"center\", side == 2 ? TOP : BOTTOM);\n\n\t\t\t\tctx.save();\n\n\t\t\t\tif (ori == 1) {\n\t\t\t\t\tx = y = 0;\n\n\t\t\t\t\tctx.translate(\n\t\t\t\t\t\tbaseLpos,\n\t\t\t\t\t\tround(plotTop + plotHgt / 2),\n\t\t\t\t\t);\n\t\t\t\t\tctx.rotate((side == 3 ? -PI : PI) / 2);\n\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tx = round(plotLft + plotWid / 2);\n\t\t\t\t\ty = baseLpos;\n\t\t\t\t}\n\n\t\t\t\tlet _label = isFn(axis.label) ? axis.label(self, i, _incr, _space) : axis.label;\n\n\t\t\t\tctx.fillText(_label, x, y);\n\n\t\t\t\tctx.restore();\n\t\t\t}\n\n\t\t\tif (_space == 0)\n\t\t\t\tcontinue;\n\n\t\t\tlet scale = scales[axis.scale];\n\n\t\t\tlet plotDim = ori == 0 ? plotWid : plotHgt;\n\t\t\tlet plotOff = ori == 0 ? plotLft : plotTop;\n\n\t\t\tlet _splits = axis._splits;\n\n\t\t\t// tick labels\n\t\t\t// BOO this assumes a specific data/series\n\t\t\tlet splits = scale.distr == 2 ? _splits.map(i => data0[i]) : _splits;\n\t\t\tlet incr = scale.distr == 2 ? data0[_splits[1]] - data0[_splits[0]] : _incr;\n\n\t\t\tlet ticks = axis.ticks;\n\t\t\tlet border = axis.border;\n\t\t\tlet _tickSize = ticks.show ? ticks.size : 0;\n\t\t\tlet tickSize = round(_tickSize * pxRatio);\n\t\t\tlet axisGap = round((axis.alignTo == 2 ? axis._size - _tickSize - axis.gap : axis.gap) * pxRatio);\n\n\t\t\t// rotating of labels only supported on bottom x axis\n\t\t\tlet angle = axis._rotate * -PI/180;\n\n\t\t\tlet basePos = pxRound(axis._pos * pxRatio);\n\t\t\tlet shiftAmt = (tickSize + axisGap) * shiftDir;\n\t\t\tlet finalPos = basePos + shiftAmt;\n\t\t\t y = ori == 0 ? finalPos : 0;\n\t\t\t x = ori == 1 ? finalPos : 0;\n\n\t\t\tlet font = axis.font[0];\n\t\t\tlet textAlign = axis.align == 1 ? LEFT :\n\t\t\t axis.align == 2 ? RIGHT :\n\t\t\t angle > 0 ? LEFT :\n\t\t\t angle < 0 ? RIGHT :\n\t\t\t ori == 0 ? \"center\" : side == 3 ? RIGHT : LEFT;\n\t\t\tlet textBaseline = angle ||\n\t\t\t ori == 1 ? \"middle\" : side == 2 ? TOP : BOTTOM;\n\n\t\t\tsetFontStyle(font, fillStyle, textAlign, textBaseline);\n\n\t\t\tlet lineHeight = axis.font[1] * axis.lineGap;\n\n\t\t\tlet canOffs = _splits.map(val => pxRound(getPos(val, scale, plotDim, plotOff)));\n\n\t\t\tlet _values = axis._values;\n\n\t\t\tfor (let i = 0; i < _values.length; i++) {\n\t\t\t\tlet val = _values[i];\n\n\t\t\t\tif (val != null) {\n\t\t\t\t\tif (ori == 0)\n\t\t\t\t\t\tx = canOffs[i];\n\t\t\t\t\telse\n\t\t\t\t\t\ty = canOffs[i];\n\n\t\t\t\t\tval = \"\" + val;\n\n\t\t\t\t\tlet _parts = val.indexOf(\"\\n\") == -1 ? [val] : val.split(/\\n/gm);\n\n\t\t\t\t\tfor (let j = 0; j < _parts.length; j++) {\n\t\t\t\t\t\tlet text = _parts[j];\n\n\t\t\t\t\t\tif (angle) {\n\t\t\t\t\t\t\tctx.save();\n\t\t\t\t\t\t\tctx.translate(x, y + j * lineHeight); // can this be replaced with position math?\n\t\t\t\t\t\t\tctx.rotate(angle); // can this be done once?\n\t\t\t\t\t\t\tctx.fillText(text, 0, 0);\n\t\t\t\t\t\t\tctx.restore();\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse\n\t\t\t\t\t\t\tctx.fillText(text, x, y + j * lineHeight);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// ticks\n\t\t\tif (ticks.show) {\n\t\t\t\tdrawOrthoLines(\n\t\t\t\t\tcanOffs,\n\t\t\t\t\tticks.filter(self, splits, i, _space, incr),\n\t\t\t\t\tori,\n\t\t\t\t\tside,\n\t\t\t\t\tbasePos,\n\t\t\t\t\ttickSize,\n\t\t\t\t\troundDec(ticks.width * pxRatio, 3),\n\t\t\t\t\tticks.stroke(self, i),\n\t\t\t\t\tticks.dash,\n\t\t\t\t\tticks.cap,\n\t\t\t\t);\n\t\t\t}\n\n\t\t\t// grid\n\t\t\tlet grid = axis.grid;\n\n\t\t\tif (grid.show) {\n\t\t\t\tdrawOrthoLines(\n\t\t\t\t\tcanOffs,\n\t\t\t\t\tgrid.filter(self, splits, i, _space, incr),\n\t\t\t\t\tori,\n\t\t\t\t\tori == 0 ? 2 : 1,\n\t\t\t\t\tori == 0 ? plotTop : plotLft,\n\t\t\t\t\tori == 0 ? plotHgt : plotWid,\n\t\t\t\t\troundDec(grid.width * pxRatio, 3),\n\t\t\t\t\tgrid.stroke(self, i),\n\t\t\t\t\tgrid.dash,\n\t\t\t\t\tgrid.cap,\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tif (border.show) {\n\t\t\t\tdrawOrthoLines(\n\t\t\t\t\t[basePos],\n\t\t\t\t\t[1],\n\t\t\t\t\tori == 0 ? 1 : 0,\n\t\t\t\t\tori == 0 ? 1 : 2,\n\t\t\t\t\tori == 1 ? plotTop : plotLft,\n\t\t\t\t\tori == 1 ? plotHgt : plotWid,\n\t\t\t\t\troundDec(border.width * pxRatio, 3),\n\t\t\t\t\tborder.stroke(self, i),\n\t\t\t\t\tborder.dash,\n\t\t\t\t\tborder.cap,\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\n\t\tfire(\"drawAxes\");\n\t}\n\n\tfunction resetYSeries(minMax) {\n\t//\tlog(\"resetYSeries()\", arguments);\n\n\t\tseries.forEach((s, i) => {\n\t\t\tif (i > 0) {\n\t\t\t\ts._paths = null;\n\n\t\t\t\tif (minMax) {\n\t\t\t\t\tif (mode == 1) {\n\t\t\t\t\t\ts.min = null;\n\t\t\t\t\t\ts.max = null;\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\ts.facets.forEach(f => {\n\t\t\t\t\t\t\tf.min = null;\n\t\t\t\t\t\t\tf.max = null;\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n\n\tlet queuedCommit = false;\n\tlet deferHooks = false;\n\tlet hooksQueue = [];\n\n\tfunction flushHooks() {\n\t\tdeferHooks = false;\n\n\t\tfor (let i = 0; i < hooksQueue.length; i++)\n\t\t\tfire(...hooksQueue[i]);\n\n\t\thooksQueue.length = 0;\n\t}\n\n\tfunction commit() {\n\t\tif (!queuedCommit) {\n\t\t\tmicroTask(_commit);\n\t\t\tqueuedCommit = true;\n\t\t}\n\t}\n\n\t// manual batching (aka immediate mode), skips microtask queue\n\tfunction batch(fn, _deferHooks = false) {\n\t\tqueuedCommit = true;\n\t\tdeferHooks = _deferHooks;\n\n\t\tfn(self);\n\t\t_commit();\n\n\t\tif (_deferHooks && hooksQueue.length > 0)\n\t\t\tqueueMicrotask(flushHooks);\n\t}\n\n\tself.batch = batch;\n\n\tfunction _commit() {\n\t//\tlog(\"_commit()\", arguments);\n\n\t\tif (shouldSetScales) {\n\t\t\tsetScales();\n\t\t\tshouldSetScales = false;\n\t\t}\n\n\t\tif (shouldConvergeSize) {\n\t\t\tconvergeSize();\n\t\t\tshouldConvergeSize = false;\n\t\t}\n\n\t\tif (shouldSetSize) {\n\t\t\tsetStylePx(under, LEFT, plotLftCss);\n\t\t\tsetStylePx(under, TOP, plotTopCss);\n\t\t\tsetStylePx(under, WIDTH, plotWidCss);\n\t\t\tsetStylePx(under, HEIGHT, plotHgtCss);\n\n\t\t\tsetStylePx(over, LEFT, plotLftCss);\n\t\t\tsetStylePx(over, TOP, plotTopCss);\n\t\t\tsetStylePx(over, WIDTH, plotWidCss);\n\t\t\tsetStylePx(over, HEIGHT, plotHgtCss);\n\n\t\t\tsetStylePx(wrap, WIDTH, fullWidCss);\n\t\t\tsetStylePx(wrap, HEIGHT, fullHgtCss);\n\n\t\t\t// NOTE: mutating this during print preview in Chrome forces transparent\n\t\t\t// canvas pixels to white, even when followed up with clearRect() below\n\t\t\tcan.width = round(fullWidCss * pxRatio);\n\t\t\tcan.height = round(fullHgtCss * pxRatio);\n\n\t\t\taxes.forEach(({ _el, _show, _size, _pos, side }) => {\n\t\t\t\tif (_el != null) {\n\t\t\t\t\tif (_show) {\n\t\t\t\t\t\tlet posOffset = (side === 3 || side === 0 ? _size : 0);\n\t\t\t\t\t\tlet isVt = side % 2 == 1;\n\n\t\t\t\t\t\tsetStylePx(_el, isVt ? \"left\" : \"top\", _pos - posOffset);\n\t\t\t\t\t\tsetStylePx(_el, isVt ? \"width\" : \"height\", _size);\n\t\t\t\t\t\tsetStylePx(_el, isVt ? \"top\" : \"left\", isVt ? plotTopCss : plotLftCss);\n\t\t\t\t\t\tsetStylePx(_el, isVt ? \"height\" : \"width\", isVt ? plotHgtCss : plotWidCss);\n\n\t\t\t\t\t\tremClass(_el, OFF);\n\t\t\t\t\t}\n\t\t\t\t\telse\n\t\t\t\t\t\taddClass(_el, OFF);\n\t\t\t\t}\n\t\t\t});\n\n\t\t\t// invalidate ctx style cache\n\t\t\tctxStroke = ctxFill = ctxWidth = ctxJoin = ctxCap = ctxFont = ctxAlign = ctxBaseline = ctxDash = null;\n\t\t\tctxAlpha = 1;\n\n\t\t\tsyncRect(true);\n\n\t\t\tif (\n\t\t\t\tplotLftCss != _plotLftCss ||\n\t\t\t\tplotTopCss != _plotTopCss ||\n\t\t\t\tplotWidCss != _plotWidCss ||\n\t\t\t\tplotHgtCss != _plotHgtCss\n\t\t\t) {\n\t\t\t\tresetYSeries(false);\n\n\t\t\t\tlet pctWid = plotWidCss / _plotWidCss;\n\t\t\t\tlet pctHgt = plotHgtCss / _plotHgtCss;\n\n\t\t\t\tif (showCursor && !shouldSetCursor && cursor.left >= 0) {\n\t\t\t\t\tcursor.left *= pctWid;\n\t\t\t\t\tcursor.top *= pctHgt;\n\n\t\t\t\t\tvCursor && elTrans(vCursor, round(cursor.left), 0, plotWidCss, plotHgtCss);\n\t\t\t\t\thCursor && elTrans(hCursor, 0, round(cursor.top), plotWidCss, plotHgtCss);\n\n\t\t\t\t\tfor (let i = 0; i < cursorPts.length; i++) {\n\t\t\t\t\t\tlet pt = cursorPts[i];\n\n\t\t\t\t\t\tif (pt != null) {\n\t\t\t\t\t\t\tcursorPtsLft[i] *= pctWid;\n\t\t\t\t\t\t\tcursorPtsTop[i] *= pctHgt;\n\t\t\t\t\t\t\telTrans(pt, ceil(cursorPtsLft[i]), ceil(cursorPtsTop[i]), plotWidCss, plotHgtCss);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (select.show && !shouldSetSelect && select.left >= 0 && select.width > 0) {\n\t\t\t\t\tselect.left *= pctWid;\n\t\t\t\t\tselect.width *= pctWid;\n\t\t\t\t\tselect.top *= pctHgt;\n\t\t\t\t\tselect.height *= pctHgt;\n\n\t\t\t\t\tfor (let prop in _hideProps)\n\t\t\t\t\t\tsetStylePx(selectDiv, prop, select[prop]);\n\t\t\t\t}\n\n\t\t\t\t_plotLftCss = plotLftCss;\n\t\t\t\t_plotTopCss = plotTopCss;\n\t\t\t\t_plotWidCss = plotWidCss;\n\t\t\t\t_plotHgtCss = plotHgtCss;\n\t\t\t}\n\n\t\t\tfire(\"setSize\");\n\n\t\t\tshouldSetSize = false;\n\t\t}\n\n\t\tif (fullWidCss > 0 && fullHgtCss > 0) {\n\t\t\tctx.clearRect(0, 0, can.width, can.height);\n\t\t\tfire(\"drawClear\");\n\t\t\tdrawOrder.forEach(fn => fn());\n\t\t\tfire(\"draw\");\n\t\t}\n\n\t\tif (select.show && shouldSetSelect) {\n\t\t\tsetSelect(select);\n\t\t\tshouldSetSelect = false;\n\t\t}\n\n\t\tif (showCursor && shouldSetCursor) {\n\t\t\tupdateCursor(null, true, false);\n\t\t\tshouldSetCursor = false;\n\t\t}\n\n\t\tif (legend.show && legend.live && shouldSetLegend) {\n\t\t\tsetLegend();\n\t\t\tshouldSetLegend = false; // redundant currently\n\t\t}\n\n\t\tif (!ready) {\n\t\t\tready = true;\n\t\t\tself.status = 1;\n\n\t\t\tfire(\"ready\");\n\t\t}\n\n\t\tviaAutoScaleX = false;\n\n\t\tqueuedCommit = false;\n\t}\n\n\tself.redraw = (rebuildPaths, recalcAxes) => {\n\t\tshouldConvergeSize = recalcAxes || false;\n\n\t\tif (rebuildPaths !== false)\n\t\t\t_setScale(xScaleKey, scaleX.min, scaleX.max);\n\t\telse\n\t\t\tcommit();\n\t};\n\n\t// redraw() => setScale('x', scales.x.min, scales.x.max);\n\n\t// explicit, never re-ranged (is this actually true? for x and y)\n\tfunction setScale(key, opts) {\n\t\tlet sc = scales[key];\n\n\t\tif (sc.from == null) {\n\t\t\tif (dataLen == 0) {\n\t\t\t\tlet minMax = sc.range(self, opts.min, opts.max, key);\n\t\t\t\topts.min = minMax[0];\n\t\t\t\topts.max = minMax[1];\n\t\t\t}\n\n\t\t\tif (opts.min > opts.max) {\n\t\t\t\tlet _min = opts.min;\n\t\t\t\topts.min = opts.max;\n\t\t\t\topts.max = _min;\n\t\t\t}\n\n\t\t\tif (dataLen > 1 && opts.min != null && opts.max != null && opts.max - opts.min < 1e-16)\n\t\t\t\treturn;\n\n\t\t\tif (key == xScaleKey) {\n\t\t\t\tif (sc.distr == 2 && dataLen > 0) {\n\t\t\t\t\topts.min = closestIdx(opts.min, data[0]);\n\t\t\t\t\topts.max = closestIdx(opts.max, data[0]);\n\n\t\t\t\t\tif (opts.min == opts.max)\n\t\t\t\t\t\topts.max++;\n\t\t\t\t}\n\t\t\t}\n\n\t\t//\tlog(\"setScale()\", arguments);\n\n\t\t\tpendScales[key] = opts;\n\n\t\t\tshouldSetScales = true;\n\t\t\tcommit();\n\t\t}\n\t}\n\n\tself.setScale = setScale;\n\n//\tINTERACTION\n\n\tlet xCursor;\n\tlet yCursor;\n\tlet vCursor;\n\tlet hCursor;\n\n\t// starting position before cursor.move\n\tlet rawMouseLeft0;\n\tlet rawMouseTop0;\n\n\t// starting position\n\tlet mouseLeft0;\n\tlet mouseTop0;\n\n\t// current position before cursor.move\n\tlet rawMouseLeft1;\n\tlet rawMouseTop1;\n\n\t// current position\n\tlet mouseLeft1;\n\tlet mouseTop1;\n\n\tlet dragging = false;\n\n\tconst drag = cursor.drag;\n\n\tlet dragX = drag.x;\n\tlet dragY = drag.y;\n\n\tif (showCursor) {\n\t\tif (cursor.x)\n\t\t\txCursor = placeDiv(CURSOR_X, over);\n\t\tif (cursor.y)\n\t\t\tyCursor = placeDiv(CURSOR_Y, over);\n\n\t\tif (scaleX.ori == 0) {\n\t\t\tvCursor = xCursor;\n\t\t\thCursor = yCursor;\n\t\t}\n\t\telse {\n\t\t\tvCursor = yCursor;\n\t\t\thCursor = xCursor;\n\t\t}\n\n\t\tmouseLeft1 = cursor.left;\n\t\tmouseTop1 = cursor.top;\n\t}\n\n\tconst select = self.select = assign({\n\t\tshow: true,\n\t\tover: true,\n\t\tleft: 0,\n\t\twidth: 0,\n\t\ttop: 0,\n\t\theight: 0,\n\t}, opts.select);\n\n\tconst selectDiv = select.show ? placeDiv(SELECT, select.over ? over : under) : null;\n\n\tfunction setSelect(opts, _fire) {\n\t\tif (select.show) {\n\t\t\tfor (let prop in opts) {\n\t\t\t\tselect[prop] = opts[prop];\n\n\t\t\t\tif (prop in _hideProps)\n\t\t\t\t\tsetStylePx(selectDiv, prop, opts[prop]);\n\t\t\t}\n\n\t\t\t_fire !== false && fire(\"setSelect\");\n\t\t}\n\t}\n\n\tself.setSelect = setSelect;\n\n\tfunction toggleDOM(i) {\n\t\tlet s = series[i];\n\n\t\tif (s.show)\n\t\t\tshowLegend && remClass(legendRows[i], OFF);\n\t\telse {\n\t\t\tshowLegend && addClass(legendRows[i], OFF);\n\n\t\t\tif (showCursor) {\n\t\t\t\tlet pt = cursorOnePt ? cursorPts[0] : cursorPts[i];\n\t\t\t\tpt != null && elTrans(pt, -10, -10, plotWidCss, plotHgtCss);\n\t\t\t}\n\t\t}\n\t}\n\n\tfunction _setScale(key, min, max) {\n\t\tsetScale(key, {min, max});\n\t}\n\n\tfunction setSeries(i, opts, _fire, _pub) {\n\t//\tlog(\"setSeries()\", arguments);\n\n\t\tif (opts.focus != null)\n\t\t\tsetFocus(i);\n\n\t\tif (opts.show != null) {\n\t\t\tseries.forEach((s, si) => {\n\t\t\t\tif (si > 0 && (i == si || i == null)) {\n\t\t\t\t\ts.show = opts.show;\n\t\t\t\t\ttoggleDOM(si);\n\n\t\t\t\t\tif (mode == 2) {\n\t\t\t\t\t\t_setScale(s.facets[0].scale, null, null);\n\t\t\t\t\t\t_setScale(s.facets[1].scale, null, null);\n\t\t\t\t\t}\n\t\t\t\t\telse\n\t\t\t\t\t\t_setScale(s.scale, null, null);\n\n\t\t\t\t\tcommit();\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\t_fire !== false && fire(\"setSeries\", i, opts);\n\n\t\t_pub && pubSync(\"setSeries\", self, i, opts);\n\t}\n\n\tself.setSeries = setSeries;\n\n\tfunction setBand(bi, opts) {\n\t\tassign(bands[bi], opts);\n\t}\n\n\tfunction addBand(opts, bi) {\n\t\topts.fill = fnOrSelf(opts.fill || null);\n\t\topts.dir = ifNull(opts.dir, -1);\n\t\tbi = bi == null ? bands.length : bi;\n\t\tbands.splice(bi, 0, opts);\n\t}\n\n\tfunction delBand(bi) {\n\t\tif (bi == null)\n\t\t\tbands.length = 0;\n\t\telse\n\t\t\tbands.splice(bi, 1);\n\t}\n\n\tself.addBand = addBand;\n\tself.setBand = setBand;\n\tself.delBand = delBand;\n\n\tfunction setAlpha(i, value) {\n\t\tseries[i].alpha = value;\n\n\t\tif (showCursor && cursorPts[i] != null)\n\t\t\tcursorPts[i].style.opacity = value;\n\n\t\tif (showLegend && legendRows[i])\n\t\t\tlegendRows[i].style.opacity = value;\n\t}\n\n\t// y-distance\n\tlet closestDist;\n\tlet closestSeries;\n\tlet focusedSeries;\n\tconst FOCUS_TRUE = {focus: true};\n\n\tfunction setFocus(i) {\n\t\tif (i != focusedSeries) {\n\t\t//\tlog(\"setFocus()\", arguments);\n\n\t\t\tlet allFocused = i == null;\n\n\t\t\tlet _setAlpha = focus.alpha != 1;\n\n\t\t\tseries.forEach((s, i2) => {\n\t\t\t\tif (mode == 1 || i2 > 0) {\n\t\t\t\t\tlet isFocused = allFocused || i2 == 0 || i2 == i;\n\t\t\t\t\ts._focus = allFocused ? null : isFocused;\n\t\t\t\t\t_setAlpha && setAlpha(i2, isFocused ? 1 : focus.alpha);\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tfocusedSeries = i;\n\t\t\t_setAlpha && commit();\n\t\t}\n\t}\n\n\tif (showLegend && cursorFocus) {\n\t\tonMouse(mouseleave, legendTable, e => {\n\t\t\tif (cursor._lock)\n\t\t\t\treturn;\n\n\t\t\tsetCursorEvent(e);\n\n\t\t\tif (focusedSeries != null)\n\t\t\t\tsetSeries(null, FOCUS_TRUE, true, syncOpts.setSeries);\n\t\t});\n\t}\n\n\tfunction posToVal(pos, scale, can) {\n\t\tlet sc = scales[scale];\n\n\t\tif (can)\n\t\t\tpos = pos / pxRatio - (sc.ori == 1 ? plotTopCss : plotLftCss);\n\n\t\tlet dim = plotWidCss;\n\n\t\tif (sc.ori == 1) {\n\t\t\tdim = plotHgtCss;\n\t\t\tpos = dim - pos;\n\t\t}\n\n\t\tif (sc.dir == -1)\n\t\t\tpos = dim - pos;\n\n\t\tlet _min = sc._min,\n\t\t\t_max = sc._max,\n\t\t\tpct = pos / dim;\n\n\t\tlet sv = _min + (_max - _min) * pct;\n\n\t\tlet distr = sc.distr;\n\n\t\treturn (\n\t\t\tdistr == 3 ? pow(10, sv) :\n\t\t\tdistr == 4 ? sinh(sv, sc.asinh) :\n\t\t\tdistr == 100 ? sc.bwd(sv) :\n\t\t\tsv\n\t\t);\n\t}\n\n\tfunction closestIdxFromXpos(pos, can) {\n\t\tlet v = posToVal(pos, xScaleKey, can);\n\t\treturn closestIdx(v, data[0], i0, i1);\n\t}\n\n\tself.valToIdx = val => closestIdx(val, data[0]);\n\tself.posToIdx = closestIdxFromXpos;\n\tself.posToVal = posToVal;\n\tself.valToPos = (val, scale, can) => (\n\t\tscales[scale].ori == 0 ?\n\t\tgetHPos(val, scales[scale],\n\t\t\tcan ? plotWid : plotWidCss,\n\t\t\tcan ? plotLft : 0,\n\t\t) :\n\t\tgetVPos(val, scales[scale],\n\t\t\tcan ? plotHgt : plotHgtCss,\n\t\t\tcan ? plotTop : 0,\n\t\t)\n\t);\n\n\tself.setCursor = (opts, _fire, _pub) => {\n\t\tmouseLeft1 = opts.left;\n\t\tmouseTop1 = opts.top;\n\t//\tassign(cursor, opts);\n\t\tupdateCursor(null, _fire, _pub);\n\t};\n\n\tfunction setSelH(off, dim) {\n\t\tsetStylePx(selectDiv, LEFT, select.left = off);\n\t\tsetStylePx(selectDiv, WIDTH, select.width = dim);\n\t}\n\n\tfunction setSelV(off, dim) {\n\t\tsetStylePx(selectDiv, TOP, select.top = off);\n\t\tsetStylePx(selectDiv, HEIGHT, select.height = dim);\n\t}\n\n\tlet setSelX = scaleX.ori == 0 ? setSelH : setSelV;\n\tlet setSelY = scaleX.ori == 1 ? setSelH : setSelV;\n\n\tfunction syncLegend() {\n\t\tif (showLegend && legend.live) {\n\t\t\tfor (let i = mode == 2 ? 1 : 0; i < series.length; i++) {\n\t\t\t\tif (i == 0 && multiValLegend)\n\t\t\t\t\tcontinue;\n\n\t\t\t\tlet vals = legend.values[i];\n\n\t\t\t\tlet j = 0;\n\n\t\t\t\tfor (let k in vals)\n\t\t\t\t\tlegendCells[i][j++].firstChild.nodeValue = vals[k];\n\t\t\t}\n\t\t}\n\t}\n\n\tfunction setLegend(opts, _fire) {\n\t\tif (opts != null) {\n\t\t\tif (opts.idxs) {\n\t\t\t\topts.idxs.forEach((didx, sidx) => {\n\t\t\t\t\tactiveIdxs[sidx] = didx;\n\t\t\t\t});\n\t\t\t}\n\t\t\telse if (!isUndef(opts.idx))\n\t\t\t\tactiveIdxs.fill(opts.idx);\n\n\t\t\tlegend.idx = activeIdxs[0];\n\t\t}\n\n\t\tif (showLegend && legend.live) {\n\t\t\tfor (let sidx = 0; sidx < series.length; sidx++) {\n\t\t\t\tif (sidx > 0 || mode == 1 && !multiValLegend)\n\t\t\t\t\tsetLegendValues(sidx, activeIdxs[sidx]);\n\t\t\t}\n\n\t\t\tsyncLegend();\n\t\t}\n\n\t\tshouldSetLegend = false;\n\n\t\t_fire !== false && fire(\"setLegend\");\n\t}\n\n\tself.setLegend = setLegend;\n\n\tfunction setLegendValues(sidx, idx) {\n\t\tlet s = series[sidx];\n\t\tlet src = sidx == 0 && xScaleDistr == 2 ? data0 : data[sidx];\n\t\tlet val;\n\n\t\tif (multiValLegend)\n\t\t\tval = s.values(self, sidx, idx) ?? NULL_LEGEND_VALUES;\n\t\telse {\n\t\t\tval = s.value(self, idx == null ? null : src[idx], sidx, idx);\n\t\t\tval = val == null ? NULL_LEGEND_VALUES : {_: val};\n\t\t}\n\n\t\tlegend.values[sidx] = val;\n\t}\n\n\tfunction updateCursor(src, _fire, _pub) {\n\t//\tts == null && log(\"updateCursor()\", arguments);\n\n\t\trawMouseLeft1 = mouseLeft1;\n\t\trawMouseTop1 = mouseTop1;\n\n\t\t[mouseLeft1, mouseTop1] = cursor.move(self, mouseLeft1, mouseTop1);\n\n\t\tcursor.left = mouseLeft1;\n\t\tcursor.top = mouseTop1;\n\n\t\tif (showCursor) {\n\t\t\tvCursor && elTrans(vCursor, round(mouseLeft1), 0, plotWidCss, plotHgtCss);\n\t\t\thCursor && elTrans(hCursor, 0, round(mouseTop1), plotWidCss, plotHgtCss);\n\t\t}\n\n\t\tlet idx;\n\n\t\t// when zooming to an x scale range between datapoints the binary search\n\t\t// for nearest min/max indices results in this condition. cheap hack :D\n\t\tlet noDataInRange = i0 > i1; // works for mode 1 only\n\n\t\tclosestDist = inf;\n\t\tclosestSeries = null;\n\n\t\t// TODO: extract\n\t\tlet xDim = scaleX.ori == 0 ? plotWidCss : plotHgtCss;\n\t\tlet yDim = scaleX.ori == 1 ? plotWidCss : plotHgtCss;\n\n\t\t// if cursor hidden, hide points & clear legend vals\n\t\tif (mouseLeft1 < 0 || dataLen == 0 || noDataInRange) {\n\t\t\tidx = cursor.idx = null;\n\n\t\t\tfor (let i = 0; i < series.length; i++) {\n\t\t\t\tlet pt = cursorPts[i];\n\t\t\t\tpt != null && elTrans(pt, -10, -10, plotWidCss, plotHgtCss);\n\t\t\t}\n\n\t\t\tif (cursorFocus)\n\t\t\t\tsetSeries(null, FOCUS_TRUE, true, src == null && syncOpts.setSeries);\n\n\t\t\tif (legend.live) {\n\t\t\t\tactiveIdxs.fill(idx);\n\t\t\t\tshouldSetLegend = true;\n\t\t\t}\n\t\t}\n\t\telse {\n\t\t//\tlet pctY = 1 - (y / rect.height);\n\n\t\t\tlet mouseXPos, valAtPosX, xPos;\n\n\t\t\tif (mode == 1) {\n\t\t\t\tmouseXPos = scaleX.ori == 0 ? mouseLeft1 : mouseTop1;\n\t\t\t\tvalAtPosX = posToVal(mouseXPos, xScaleKey);\n\t\t\t\tidx = cursor.idx = closestIdx(valAtPosX, data[0], i0, i1);\n\t\t\t\txPos = valToPosX(data[0][idx], scaleX, xDim, 0);\n\t\t\t}\n\n\t\t\t// closest pt values\n\t\t\tlet _ptLft = -10;\n\t\t\tlet _ptTop = -10;\n\t\t\tlet _ptWid = 0;\n\t\t\tlet _ptHgt = 0;\n\t\t\tlet _centered = true;\n\t\t\tlet _ptFill = '';\n\t\t\tlet _ptStroke = '';\n\n\t\t\tfor (let i = mode == 2 ? 1 : 0; i < series.length; i++) {\n\t\t\t\tlet s = series[i];\n\n\t\t\t\tlet idx1 = activeIdxs[i];\n\t\t\t\tlet yVal1 = idx1 == null ? null : (mode == 1 ? data[i][idx1] : data[i][1][idx1]);\n\n\t\t\t\tlet idx2 = cursor.dataIdx(self, i, idx, valAtPosX);\n\t\t\t\tlet yVal2 = idx2 == null ? null : (mode == 1 ? data[i][idx2] : data[i][1][idx2]);\n\n\t\t\t\tshouldSetLegend = shouldSetLegend || yVal2 != yVal1 || idx2 != idx1;\n\n\t\t\t\tactiveIdxs[i] = idx2;\n\n\t\t\t\tif (i > 0 && s.show) {\n\t\t\t\t\tlet xPos2 = idx2 == null ? -10 : idx2 == idx ? xPos : valToPosX(mode == 1 ? data[0][idx2] : data[i][0][idx2], scaleX, xDim, 0);\n\n\t\t\t\t\t// this doesnt really work for state timeline, heatmap, status history (where the value maps to color, not y coords)\n\t\t\t\t\tlet yPos = yVal2 == null ? -10 : valToPosY(yVal2, mode == 1 ? scales[s.scale] : scales[s.facets[1].scale], yDim, 0);\n\n\t\t\t\t\tif (cursorFocus && yVal2 != null) {\n\t\t\t\t\t\tlet mouseYPos = scaleX.ori == 1 ? mouseLeft1 : mouseTop1;\n\t\t\t\t\t\tlet dist = abs(focus.dist(self, i, idx2, yPos, mouseYPos));\n\n\t\t\t\t\t\tif (dist < closestDist) {\n\t\t\t\t\t\t\tlet bias = focus.bias;\n\n\t\t\t\t\t\t\tif (bias != 0) {\n\t\t\t\t\t\t\t\tlet mouseYVal = posToVal(mouseYPos, s.scale);\n\n\t\t\t\t\t\t\t\tlet seriesYValSign = yVal2 >= 0 ? 1 : -1;\n\t\t\t\t\t\t\t\tlet mouseYValSign = mouseYVal >= 0 ? 1 : -1;\n\n\t\t\t\t\t\t\t\t// with a focus bias, we will never cross zero when prox testing\n\t\t\t\t\t\t\t\t// it's either closest towards zero, or closest away from zero\n\t\t\t\t\t\t\t\tif (mouseYValSign == seriesYValSign && (\n\t\t\t\t\t\t\t\t\tmouseYValSign == 1 ?\n\t\t\t\t\t\t\t\t\t\t(bias == 1 ? yVal2 >= mouseYVal : yVal2 <= mouseYVal) : // >= 0\n\t\t\t\t\t\t\t\t\t\t(bias == 1 ? yVal2 <= mouseYVal : yVal2 >= mouseYVal) // < 0\n\t\t\t\t\t\t\t\t)) {\n\t\t\t\t\t\t\t\t\tclosestDist = dist;\n\t\t\t\t\t\t\t\t\tclosestSeries = i;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\tclosestDist = dist;\n\t\t\t\t\t\t\t\tclosestSeries = i;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tif (shouldSetLegend || cursorOnePt) {\n\t\t\t\t\t\tlet hPos, vPos;\n\n\t\t\t\t\t\tif (scaleX.ori == 0) {\n\t\t\t\t\t\t\thPos = xPos2;\n\t\t\t\t\t\t\tvPos = yPos;\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\thPos = yPos;\n\t\t\t\t\t\t\tvPos = xPos2;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tlet ptWid, ptHgt, ptLft, ptTop,\n\t\t\t\t\t\t\tptStroke, ptFill,\n\t\t\t\t\t\t\tcentered = true,\n\t\t\t\t\t\t\tgetBBox = points.bbox;\n\n\t\t\t\t\t\tif (getBBox != null) {\n\t\t\t\t\t\t\tcentered = false;\n\n\t\t\t\t\t\t\tlet bbox = getBBox(self, i);\n\n\t\t\t\t\t\t\tptLft = bbox.left;\n\t\t\t\t\t\t\tptTop = bbox.top;\n\t\t\t\t\t\t\tptWid = bbox.width;\n\t\t\t\t\t\t\tptHgt = bbox.height;\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tptLft = hPos;\n\t\t\t\t\t\t\tptTop = vPos;\n\t\t\t\t\t\t\tptWid = ptHgt = points.size(self, i);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tptFill = points.fill(self, i);\n\t\t\t\t\t\tptStroke = points.stroke(self, i);\n\n\t\t\t\t\t\tif (cursorOnePt) {\n\t\t\t\t\t\t\tif (i == closestSeries && closestDist <= focus.prox) {\n\t\t\t\t\t\t\t\t_ptLft = ptLft;\n\t\t\t\t\t\t\t\t_ptTop = ptTop;\n\t\t\t\t\t\t\t\t_ptWid = ptWid;\n\t\t\t\t\t\t\t\t_ptHgt = ptHgt;\n\t\t\t\t\t\t\t\t_centered = centered;\n\t\t\t\t\t\t\t\t_ptFill = ptFill;\n\t\t\t\t\t\t\t\t_ptStroke = ptStroke;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tlet pt = cursorPts[i];\n\n\t\t\t\t\t\t\tif (pt != null) {\n\t\t\t\t\t\t\t\tcursorPtsLft[i] = ptLft;\n\t\t\t\t\t\t\t\tcursorPtsTop[i] = ptTop;\n\n\t\t\t\t\t\t\t\telSize(pt, ptWid, ptHgt, centered);\n\t\t\t\t\t\t\t\telColor(pt, ptFill, ptStroke);\n\t\t\t\t\t\t\t\telTrans(pt, ceil(ptLft), ceil(ptTop), plotWidCss, plotHgtCss);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// if only using single hover point (at cursorPts[0])\n\t\t\t// we have trigger styling at last visible series (once closestSeries is settled)\n\t\t\tif (cursorOnePt) {\n\t\t\t\t// some of this logic is similar to series focus below, since it matches the behavior by design\n\n\t\t\t\tlet p = focus.prox;\n\n\t\t\t\tlet focusChanged = focusedSeries == null ? closestDist <= p : (closestDist > p || closestSeries != focusedSeries);\n\n\t\t\t\tif (shouldSetLegend || focusChanged) {\n\t\t\t\t\tlet pt = cursorPts[0];\n\n\t\t\t\t\tif (pt != null) {\n\t\t\t\t\t\tcursorPtsLft[0] = _ptLft;\n\t\t\t\t\t\tcursorPtsTop[0] = _ptTop;\n\n\t\t\t\t\t\telSize(pt, _ptWid, _ptHgt, _centered);\n\t\t\t\t\t\telColor(pt, _ptFill, _ptStroke);\n\t\t\t\t\t\telTrans(pt, ceil(_ptLft), ceil(_ptTop), plotWidCss, plotHgtCss);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// nit: cursor.drag.setSelect is assumed always true\n\t\tif (select.show && dragging) {\n\t\t\tif (src != null) {\n\t\t\t\tlet [xKey, yKey] = syncOpts.scales;\n\t\t\t\tlet [matchXKeys, matchYKeys] = syncOpts.match;\n\t\t\t\tlet [xKeySrc, yKeySrc] = src.cursor.sync.scales;\n\n\t\t\t\t// match the dragX/dragY implicitness/explicitness of src\n\t\t\t\tlet sdrag = src.cursor.drag;\n\t\t\t\tdragX = sdrag._x;\n\t\t\t\tdragY = sdrag._y;\n\n\t\t\t\tif (dragX || dragY) {\n\t\t\t\t\tlet { left, top, width, height } = src.select;\n\n\t\t\t\t\tlet sori = src.scales[xKeySrc].ori;\n\t\t\t\t\tlet sPosToVal = src.posToVal;\n\n\t\t\t\t\tlet sOff, sDim, sc, a, b;\n\n\t\t\t\t\tlet matchingX = xKey != null && matchXKeys(xKey, xKeySrc);\n\t\t\t\t\tlet matchingY = yKey != null && matchYKeys(yKey, yKeySrc);\n\n\t\t\t\t\tif (matchingX && dragX) {\n\t\t\t\t\t\tif (sori == 0) {\n\t\t\t\t\t\t\tsOff = left;\n\t\t\t\t\t\t\tsDim = width;\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tsOff = top;\n\t\t\t\t\t\t\tsDim = height;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tsc = scales[xKey];\n\n\t\t\t\t\t\ta = valToPosX(sPosToVal(sOff, xKeySrc), sc, xDim, 0);\n\t\t\t\t\t\tb = valToPosX(sPosToVal(sOff + sDim, xKeySrc), sc, xDim, 0);\n\n\t\t\t\t\t\tsetSelX(min(a,b), abs(b-a));\n\t\t\t\t\t}\n\t\t\t\t\telse\n\t\t\t\t\t\tsetSelX(0, xDim);\n\n\t\t\t\t\tif (matchingY && dragY) {\n\t\t\t\t\t\tif (sori == 1) {\n\t\t\t\t\t\t\tsOff = left;\n\t\t\t\t\t\t\tsDim = width;\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tsOff = top;\n\t\t\t\t\t\t\tsDim = height;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tsc = scales[yKey];\n\n\t\t\t\t\t\ta = valToPosY(sPosToVal(sOff, yKeySrc), sc, yDim, 0);\n\t\t\t\t\t\tb = valToPosY(sPosToVal(sOff + sDim, yKeySrc), sc, yDim, 0);\n\n\t\t\t\t\t\tsetSelY(min(a,b), abs(b-a));\n\t\t\t\t\t}\n\t\t\t\t\telse\n\t\t\t\t\t\tsetSelY(0, yDim);\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t\thideSelect();\n\t\t\t}\n\t\t\telse {\n\t\t\t\tlet rawDX = abs(rawMouseLeft1 - rawMouseLeft0);\n\t\t\t\tlet rawDY = abs(rawMouseTop1 - rawMouseTop0);\n\n\t\t\t\tif (scaleX.ori == 1) {\n\t\t\t\t\tlet _rawDX = rawDX;\n\t\t\t\t\trawDX = rawDY;\n\t\t\t\t\trawDY = _rawDX;\n\t\t\t\t}\n\n\t\t\t\tdragX = drag.x && rawDX >= drag.dist;\n\t\t\t\tdragY = drag.y && rawDY >= drag.dist;\n\n\t\t\t\tlet uni = drag.uni;\n\n\t\t\t\tif (uni != null) {\n\t\t\t\t\t// only calc drag status if they pass the dist thresh\n\t\t\t\t\tif (dragX && dragY) {\n\t\t\t\t\t\tdragX = rawDX >= uni;\n\t\t\t\t\t\tdragY = rawDY >= uni;\n\n\t\t\t\t\t\t// force unidirectionality when both are under uni limit\n\t\t\t\t\t\tif (!dragX && !dragY) {\n\t\t\t\t\t\t\tif (rawDY > rawDX)\n\t\t\t\t\t\t\t\tdragY = true;\n\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\tdragX = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse if (drag.x && drag.y && (dragX || dragY))\n\t\t\t\t\t// if omni with no uni then both dragX / dragY should be true if either is true\n\t\t\t\t\tdragX = dragY = true;\n\n\t\t\t\tlet p0, p1;\n\n\t\t\t\tif (dragX) {\n\t\t\t\t\tif (scaleX.ori == 0) {\n\t\t\t\t\t\tp0 = mouseLeft0;\n\t\t\t\t\t\tp1 = mouseLeft1;\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tp0 = mouseTop0;\n\t\t\t\t\t\tp1 = mouseTop1;\n\t\t\t\t\t}\n\n\t\t\t\t\tsetSelX(min(p0, p1), abs(p1 - p0));\n\n\t\t\t\t\tif (!dragY)\n\t\t\t\t\t\tsetSelY(0, yDim);\n\t\t\t\t}\n\n\t\t\t\tif (dragY) {\n\t\t\t\t\tif (scaleX.ori == 1) {\n\t\t\t\t\t\tp0 = mouseLeft0;\n\t\t\t\t\t\tp1 = mouseLeft1;\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tp0 = mouseTop0;\n\t\t\t\t\t\tp1 = mouseTop1;\n\t\t\t\t\t}\n\n\t\t\t\t\tsetSelY(min(p0, p1), abs(p1 - p0));\n\n\t\t\t\t\tif (!dragX)\n\t\t\t\t\t\tsetSelX(0, xDim);\n\t\t\t\t}\n\n\t\t\t\t// the drag didn't pass the dist requirement\n\t\t\t\tif (!dragX && !dragY) {\n\t\t\t\t\tsetSelX(0, 0);\n\t\t\t\t\tsetSelY(0, 0);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tdrag._x = dragX;\n\t\tdrag._y = dragY;\n\n\t\tif (src == null) {\n\t\t\tif (_pub) {\n\t\t\t\tif (syncKey != null) {\n\t\t\t\t\tlet [xSyncKey, ySyncKey] = syncOpts.scales;\n\n\t\t\t\t\tsyncOpts.values[0] = xSyncKey != null ? posToVal(scaleX.ori == 0 ? mouseLeft1 : mouseTop1, xSyncKey) : null;\n\t\t\t\t\tsyncOpts.values[1] = ySyncKey != null ? posToVal(scaleX.ori == 1 ? mouseLeft1 : mouseTop1, ySyncKey) : null;\n\t\t\t\t}\n\n\t\t\t\tpubSync(mousemove, self, mouseLeft1, mouseTop1, plotWidCss, plotHgtCss, idx);\n\t\t\t}\n\n\t\t\tif (cursorFocus) {\n\t\t\t\tlet shouldPub = _pub && syncOpts.setSeries;\n\t\t\t\tlet p = focus.prox;\n\n\t\t\t\tif (focusedSeries == null) {\n\t\t\t\t\tif (closestDist <= p)\n\t\t\t\t\t\tsetSeries(closestSeries, FOCUS_TRUE, true, shouldPub);\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tif (closestDist > p)\n\t\t\t\t\t\tsetSeries(null, FOCUS_TRUE, true, shouldPub);\n\t\t\t\t\telse if (closestSeries != focusedSeries)\n\t\t\t\t\t\tsetSeries(closestSeries, FOCUS_TRUE, true, shouldPub);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (shouldSetLegend) {\n\t\t\tlegend.idx = idx;\n\t\t\tsetLegend();\n\t\t}\n\n\t\t_fire !== false && fire(\"setCursor\");\n\t}\n\n\tlet rect = null;\n\n\tObject.defineProperty(self, 'rect', {\n\t\tget() {\n\t\t\tif (rect == null)\n\t\t\t\tsyncRect(false);\n\n\t\t\treturn rect;\n\t\t},\n\t});\n\n\tfunction syncRect(defer = false) {\n\t\tif (defer)\n\t\t\trect = null;\n\t\telse {\n\t\t\trect = over.getBoundingClientRect();\n\t\t\tfire(\"syncRect\", rect);\n\t\t}\n\t}\n\n\tfunction mouseMove(e, src, _l, _t, _w, _h, _i) {\n\t\tif (cursor._lock)\n\t\t\treturn;\n\n\t\t// Chrome on Windows has a bug which triggers a stray mousemove event after an initial mousedown event\n\t\t// when clicking into a plot as part of re-focusing the browser window.\n\t\t// we gotta ignore it to avoid triggering a phantom drag / setSelect\n\t\t// However, on touch-only devices Chrome-based browsers trigger a 0-distance mousemove before mousedown\n\t\t// so we don't ignore it when mousedown has set the dragging flag\n\t\tif (dragging && e != null && e.movementX == 0 && e.movementY == 0)\n\t\t\treturn;\n\n\t\tcacheMouse(e, src, _l, _t, _w, _h, _i, false, e != null);\n\n\t\tif (e != null)\n\t\t\tupdateCursor(null, true, true);\n\t\telse\n\t\t\tupdateCursor(src, true, false);\n\t}\n\n\tfunction cacheMouse(e, src, _l, _t, _w, _h, _i, initial, snap) {\n\t\tif (rect == null)\n\t\t\tsyncRect(false);\n\n\t\tsetCursorEvent(e);\n\n\t\tif (e != null) {\n\t\t\t_l = e.clientX - rect.left;\n\t\t\t_t = e.clientY - rect.top;\n\t\t}\n\t\telse {\n\t\t\tif (_l < 0 || _t < 0) {\n\t\t\t\tmouseLeft1 = -10;\n\t\t\t\tmouseTop1 = -10;\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tlet [xKey, yKey] = syncOpts.scales;\n\n\t\t\tlet syncOptsSrc = src.cursor.sync;\n\t\t\tlet [xValSrc, yValSrc] = syncOptsSrc.values;\n\t\t\tlet [xKeySrc, yKeySrc] = syncOptsSrc.scales;\n\t\t\tlet [matchXKeys, matchYKeys] = syncOpts.match;\n\n\t\t\tlet rotSrc = src.axes[0].side % 2 == 1;\n\n\t\t\tlet xDim = scaleX.ori == 0 ? plotWidCss : plotHgtCss,\n\t\t\t\tyDim = scaleX.ori == 1 ? plotWidCss : plotHgtCss,\n\t\t\t\t_xDim = rotSrc ? _h : _w,\n\t\t\t\t_yDim = rotSrc ? _w : _h,\n\t\t\t\t_xPos = rotSrc ? _t : _l,\n\t\t\t\t_yPos = rotSrc ? _l : _t;\n\n\t\t\tif (xKeySrc != null)\n\t\t\t\t_l = matchXKeys(xKey, xKeySrc) ? getPos(xValSrc, scales[xKey], xDim, 0) : -10;\n\t\t\telse\n\t\t\t\t_l = xDim * (_xPos/_xDim);\n\n\t\t\tif (yKeySrc != null)\n\t\t\t\t_t = matchYKeys(yKey, yKeySrc) ? getPos(yValSrc, scales[yKey], yDim, 0) : -10;\n\t\t\telse\n\t\t\t\t_t = yDim * (_yPos/_yDim);\n\n\t\t\tif (scaleX.ori == 1) {\n\t\t\t\tlet __l = _l;\n\t\t\t\t_l = _t;\n\t\t\t\t_t = __l;\n\t\t\t}\n\t\t}\n\n\t\tif (snap && (src == null || src.cursor.event.type == mousemove)) {\n\t\t\tif (_l <= 1 || _l >= plotWidCss - 1)\n\t\t\t\t_l = incrRound(_l, plotWidCss);\n\n\t\t\tif (_t <= 1 || _t >= plotHgtCss - 1)\n\t\t\t\t_t = incrRound(_t, plotHgtCss);\n\t\t}\n\n\t\tif (initial) {\n\t\t\trawMouseLeft0 = _l;\n\t\t\trawMouseTop0 = _t;\n\n\t\t\t[mouseLeft0, mouseTop0] = cursor.move(self, _l, _t);\n\t\t}\n\t\telse {\n\t\t\tmouseLeft1 = _l;\n\t\t\tmouseTop1 = _t;\n\t\t}\n\t}\n\n\tconst _hideProps = {\n\t\twidth: 0,\n\t\theight: 0,\n\t\tleft: 0,\n\t\ttop: 0,\n\t};\n\n\tfunction hideSelect() {\n\t\tsetSelect(_hideProps, false);\n\t}\n\n\tlet downSelectLeft;\n\tlet downSelectTop;\n\tlet downSelectWidth;\n\tlet downSelectHeight;\n\n\tfunction mouseDown(e, src, _l, _t, _w, _h, _i) {\n\t\tdragging = true;\n\t\tdragX = dragY = drag._x = drag._y = false;\n\n\t\tcacheMouse(e, src, _l, _t, _w, _h, _i, true, false);\n\n\t\tif (e != null) {\n\t\t\tonMouse(mouseup, doc, mouseUp, false);\n\t\t\tpubSync(mousedown, self, mouseLeft0, mouseTop0, plotWidCss, plotHgtCss, null);\n\t\t}\n\n\t\tlet { left, top, width, height } = select;\n\n\t\tdownSelectLeft = left;\n\t\tdownSelectTop = top;\n\t\tdownSelectWidth = width;\n\t\tdownSelectHeight = height;\n\n\t//\thideSelect();\n\t}\n\n\tfunction mouseUp(e, src, _l, _t, _w, _h, _i) {\n\t\tdragging = drag._x = drag._y = false;\n\n\t\tcacheMouse(e, src, _l, _t, _w, _h, _i, false, true);\n\n\t\tlet { left, top, width, height } = select;\n\n\t\tlet hasSelect = width > 0 || height > 0;\n\t\tlet chgSelect = (\n\t\t\tdownSelectLeft != left ||\n\t\t\tdownSelectTop != top ||\n\t\t\tdownSelectWidth != width ||\n\t\t\tdownSelectHeight != height\n\t\t);\n\n\t\thasSelect && chgSelect && setSelect(select);\n\n\t\tif (drag.setScale && hasSelect && chgSelect) {\n\t\t//\tif (syncKey != null) {\n\t\t//\t\tdragX = drag.x;\n\t\t//\t\tdragY = drag.y;\n\t\t//\t}\n\n\t\t\tlet xOff = left,\n\t\t\t\txDim = width,\n\t\t\t\tyOff = top,\n\t\t\t\tyDim = height;\n\n\t\t\tif (scaleX.ori == 1) {\n\t\t\t\txOff = top,\n\t\t\t\txDim = height,\n\t\t\t\tyOff = left,\n\t\t\t\tyDim = width;\n\t\t\t}\n\n\t\t\tif (dragX) {\n\t\t\t\t_setScale(xScaleKey,\n\t\t\t\t\tposToVal(xOff, xScaleKey),\n\t\t\t\t\tposToVal(xOff + xDim, xScaleKey)\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tif (dragY) {\n\t\t\t\tfor (let k in scales) {\n\t\t\t\t\tlet sc = scales[k];\n\n\t\t\t\t\tif (k != xScaleKey && sc.from == null && sc.min != inf) {\n\t\t\t\t\t\t_setScale(k,\n\t\t\t\t\t\t\tposToVal(yOff + yDim, k),\n\t\t\t\t\t\t\tposToVal(yOff, k)\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\thideSelect();\n\t\t}\n\t\telse if (cursor.lock) {\n\t\t\tcursor._lock = !cursor._lock;\n\t\t\tupdateCursor(src, true, e != null);\n\t\t}\n\n\t\tif (e != null) {\n\t\t\toffMouse(mouseup, doc);\n\t\t\tpubSync(mouseup, self, mouseLeft1, mouseTop1, plotWidCss, plotHgtCss, null);\n\t\t}\n\t}\n\n\tfunction mouseLeave(e, src, _l, _t, _w, _h, _i) {\n\t\tif (cursor._lock)\n\t\t\treturn;\n\n\t\tsetCursorEvent(e);\n\n\t\tlet _dragging = dragging;\n\n\t\tif (dragging) {\n\t\t\t// handle case when mousemove aren't fired all the way to edges by browser\n\t\t\tlet snapH = true;\n\t\t\tlet snapV = true;\n\t\t\tlet snapProx = 10;\n\n\t\t\tlet dragH, dragV;\n\n\t\t\tif (scaleX.ori == 0) {\n\t\t\t\tdragH = dragX;\n\t\t\t\tdragV = dragY;\n\t\t\t}\n\t\t\telse {\n\t\t\t\tdragH = dragY;\n\t\t\t\tdragV = dragX;\n\t\t\t}\n\n\t\t\tif (dragH && dragV) {\n\t\t\t\t// maybe omni corner snap\n\t\t\t\tsnapH = mouseLeft1 <= snapProx || mouseLeft1 >= plotWidCss - snapProx;\n\t\t\t\tsnapV = mouseTop1 <= snapProx || mouseTop1 >= plotHgtCss - snapProx;\n\t\t\t}\n\n\t\t\tif (dragH && snapH)\n\t\t\t\tmouseLeft1 = mouseLeft1 < mouseLeft0 ? 0 : plotWidCss;\n\n\t\t\tif (dragV && snapV)\n\t\t\t\tmouseTop1 = mouseTop1 < mouseTop0 ? 0 : plotHgtCss;\n\n\t\t\tupdateCursor(null, true, true);\n\n\t\t\tdragging = false;\n\t\t}\n\n\t\tmouseLeft1 = -10;\n\t\tmouseTop1 = -10;\n\n\t\tactiveIdxs.fill(null);\n\n\t\t// passing a non-null timestamp to force sync/mousemove event\n\t\tupdateCursor(null, true, true);\n\n\t\tif (_dragging)\n\t\t\tdragging = _dragging;\n\t}\n\n\tfunction dblClick(e, src, _l, _t, _w, _h, _i) {\n\t\tif (cursor._lock)\n\t\t\treturn;\n\n\t\tsetCursorEvent(e);\n\n\t\tautoScaleX();\n\n\t\thideSelect();\n\n\t\tif (e != null)\n\t\t\tpubSync(dblclick, self, mouseLeft1, mouseTop1, plotWidCss, plotHgtCss, null);\n\t}\n\n\tfunction syncPxRatio() {\n\t\taxes.forEach(syncFontSize);\n\t\t_setSize(self.width, self.height, true);\n\t}\n\n\ton(dppxchange, win, syncPxRatio);\n\n\t// internal pub/sub\n\tconst events = {};\n\n\tevents.mousedown = mouseDown;\n\tevents.mousemove = mouseMove;\n\tevents.mouseup = mouseUp;\n\tevents.dblclick = dblClick;\n\tevents[\"setSeries\"] = (e, src, idx, opts) => {\n\t\tlet seriesIdxMatcher = syncOpts.match[2];\n\t\tidx = seriesIdxMatcher(self, src, idx);\n\t\tidx != -1 && setSeries(idx, opts, true, false);\n\t};\n\n\tif (showCursor) {\n\t\tonMouse(mousedown, over, mouseDown);\n\t\tonMouse(mousemove, over, mouseMove);\n\t\tonMouse(mouseenter, over, e => {\n\t\t\tsetCursorEvent(e);\n\t\t\tsyncRect(false);\n\t\t});\n\t\tonMouse(mouseleave, over, mouseLeave);\n\n\t\tonMouse(dblclick, over, dblClick);\n\n\t\tcursorPlots.add(self);\n\n\t\tself.syncRect = syncRect;\n\t}\n\n\t// external on/off\n\tconst hooks = self.hooks = opts.hooks || {};\n\n\tfunction fire(evName, a1, a2) {\n\t\tif (deferHooks)\n\t\t\thooksQueue.push([evName, a1, a2]);\n\t\telse {\n\t\t\tif (evName in hooks) {\n\t\t\t\thooks[evName].forEach(fn => {\n\t\t\t\t\tfn.call(null, self, a1, a2);\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t}\n\n\t(opts.plugins || []).forEach(p => {\n\t\tfor (let evName in p.hooks)\n\t\t\thooks[evName] = (hooks[evName] || []).concat(p.hooks[evName]);\n\t});\n\n\tconst seriesIdxMatcher = (self, src, srcSeriesIdx) => srcSeriesIdx;\n\n\tconst syncOpts = assign({\n\t\tkey: null,\n\t\tsetSeries: false,\n\t\tfilters: {\n\t\t\tpub: retTrue,\n\t\t\tsub: retTrue,\n\t\t},\n\t\tscales: [xScaleKey, series[1] ? series[1].scale : null],\n\t\tmatch: [retEq, retEq, seriesIdxMatcher],\n\t\tvalues: [null, null],\n\t}, cursor.sync);\n\n\tif (syncOpts.match.length == 2)\n\t\tsyncOpts.match.push(seriesIdxMatcher);\n\n\tcursor.sync = syncOpts;\n\n\tconst syncKey = syncOpts.key;\n\n\tconst sync = _sync(syncKey);\n\n\tfunction pubSync(type, src, x, y, w, h, i) {\n\t\tif (syncOpts.filters.pub(type, src, x, y, w, h, i))\n\t\t\tsync.pub(type, src, x, y, w, h, i);\n\t}\n\n\tsync.sub(self);\n\n\tfunction pub(type, src, x, y, w, h, i) {\n\t\tif (syncOpts.filters.sub(type, src, x, y, w, h, i))\n\t\t\tevents[type](null, src, x, y, w, h, i);\n\t}\n\n\tself.pub = pub;\n\n\tfunction destroy() {\n\t\tsync.unsub(self);\n\t\tcursorPlots.delete(self);\n\t\tmouseListeners.clear();\n\t\toff(dppxchange, win, syncPxRatio);\n\t\troot.remove();\n\t\tlegendTable?.remove(); // in case mounted outside of root\n\t\tfire(\"destroy\");\n\t}\n\n\tself.destroy = destroy;\n\n\tfunction _init() {\n\t\tfire(\"init\", opts, data);\n\n\t\tsetData(data || opts.data, false);\n\n\t\tif (pendScales[xScaleKey])\n\t\t\tsetScale(xScaleKey, pendScales[xScaleKey]);\n\t\telse\n\t\t\tautoScaleX();\n\n\t\tshouldSetSelect = select.show && (select.width > 0 || select.height > 0);\n\t\tshouldSetCursor = shouldSetLegend = true;\n\n\t\t_setSize(opts.width, opts.height);\n\t}\n\n\tseries.forEach(initSeries);\n\n\taxes.forEach(initAxis);\n\n\tif (then) {\n\t\tif (then instanceof HTMLElement) {\n\t\t\tthen.appendChild(root);\n\t\t\t_init();\n\t\t}\n\t\telse\n\t\t\tthen(self, _init);\n\t}\n\telse\n\t\t_init();\n\n\treturn self;\n}\n\nuPlot.assign = assign;\nuPlot.fmtNum = fmtNum;\nuPlot.rangeNum = rangeNum;\nuPlot.rangeLog = rangeLog;\nuPlot.rangeAsinh = rangeAsinh;\nuPlot.orient = orient;\nuPlot.pxRatio = pxRatio;\n\n{\n\tuPlot.join = join;\n}\n\n{\n\tuPlot.fmtDate = fmtDate;\n\tuPlot.tzDate = tzDate;\n}\n\nuPlot.sync = _sync;\n\n{\n\tuPlot.addGap = addGap;\n\tuPlot.clipGaps = clipGaps;\n\n\tlet paths = uPlot.paths = {\n\t\tpoints,\n\t};\n\n\t(paths.linear = linear);\n\t(paths.stepped = stepped);\n\t(paths.bars = bars);\n\t(paths.spline = monotoneCubic);\n}\n\nexport { uPlot as default };\n","// Fleet Time Series Chart\n// Purpose: Adapts uPlot to minute-level fleet evidence with exact cursor values and drag-to-zoom inspection.\n// Scope: Owns chart lifecycle and aligned-series preparation; server calculations remain authoritative and tables retain exact evidence.\nimport { useEffect, useMemo, useRef } from 'react';\nimport uPlot from 'uplot';\nimport 'uplot/dist/uPlot.min.css';\n\nconst SERIES_COLORS = ['#22d3ee', '#f59e0b', '#a78bfa', '#34d399', '#fb7185', '#60a5fa', '#facc15', '#c084fc'];\n\nexport default function FleetTimeSeriesChart({ minutes = [], roverIds = [], metric = 'dischargedMah' }) {\n const elementRef = useRef(null);\n const prepared = useMemo(() => {\n // uPlot uses aligned arrays for speed. Constructing one timestamp axis and\n // sparse value arrays lets it render long report ranges efficiently while\n // retaining nulls as visible telemetry gaps instead of joining them.\n const timestamps = Array.from(new Set(minutes.map((row) => Number(row.bucketTs) / 1000))).sort((a, b) => a - b);\n const timestampIndexes = new Map(timestamps.map((value, index) => [value, index]));\n const rowsByRover = new Map(roverIds.map((roverId) => [String(roverId), new Array(timestamps.length).fill(null)]));\n minutes.forEach((row) => {\n const values = rowsByRover.get(String(row.roverId));\n const index = timestampIndexes.get(Number(row.bucketTs) / 1000);\n if (!values || index == null) return;\n values[index] = row[metric] == null ? null : Number(row[metric]);\n });\n return {\n data: [timestamps, ...roverIds.map((roverId) => rowsByRover.get(String(roverId)))],\n series: roverIds.map((roverId, index) => ({\n label: String(roverId),\n stroke: SERIES_COLORS[index % SERIES_COLORS.length],\n width: 1.5,\n spanGaps: false,\n value: (_self, value) => value == null ? '--' : Number(value).toLocaleString(undefined, { maximumFractionDigits: 3 }),\n })),\n };\n }, [metric, minutes, roverIds]);\n\n useEffect(() => {\n if (!elementRef.current || !prepared.data[0].length) return undefined;\n const container = elementRef.current;\n const metricLabels = {\n dischargedMah: 'Discharged mAh/min',\n chargedMah: 'Charged mAh/min',\n avgVoltageMv: 'Average voltage mV',\n avgCurrentMa: 'Average current mA',\n avgTemperatureC: 'Average temperature °C',\n };\n const chart = new uPlot({\n width: Math.max(320, container.clientWidth),\n height: 384,\n title: metricLabels[metric] || metric,\n cursor: { drag: { x: true, y: false, setScale: true } },\n legend: { show: true, live: true },\n axes: [\n { stroke: '#94a3b8', grid: { stroke: 'rgba(115,115,115,0.22)' } },\n { stroke: '#94a3b8', grid: { stroke: 'rgba(115,115,115,0.22)' } },\n ],\n scales: { x: { time: true } },\n series: [{ label: 'Time' }, ...prepared.series],\n hooks: {\n ready: [(plot) => {\n // Dragging selects a time range through uPlot itself. Double-clicking\n // restores the full evidence window without adding custom graph math.\n plot.root.addEventListener('dblclick', () => plot.setScale('x', { min: null, max: null }));\n }],\n },\n }, prepared.data, container);\n const observer = new ResizeObserver(() => {\n chart.setSize({ width: Math.max(320, container.clientWidth), height: 384 });\n });\n observer.observe(container);\n return () => {\n observer.disconnect();\n chart.destroy();\n };\n }, [metric, prepared]);\n\n if (!prepared.data[0].length) {\n return

No minute time-series data in this range.

;\n }\n return (\n
\n

Drag horizontally to zoom. Double-click to restore the full range. Hover for exact values.

\n
\n
\n );\n}\n","// Fullscreen Fleet Reports Application\n// Purpose: Presents deep read-only operational history using the same global cards, surfaces, theme, and spacing as the driver page.\n// Scope: Owns report-range controls, dense evidence tables, chart selection, CSV export, and route-level feature handling.\nimport { useMemo, useState } from 'react';\nimport { Link } from 'react-router-dom';\nimport Papa from 'papaparse';\nimport CardFrame from '../components/CardFrame/index.jsx';\nimport SocketConnectionPill from '../components/SocketConnectionPill/index.jsx';\nimport { useSessionSelector } from '../context/SessionContext.jsx';\nimport { useSocket } from '../context/SocketContext.jsx';\nimport useUserIdentitySync from '../hooks/useUserIdentitySync.js';\nimport useFleetReport from '../hooks/useFleetReport.js';\nimport { isFeatureEnabled } from '../lib/features.js';\nimport { useSettingsNamespace } from '../settings/index.js';\nimport { DEFAULT_PAGE_THEME_KEY, getPageThemeClass, themeGapClass } from '../themes/index.js';\nimport FleetTimeSeriesChart from './FleetTimeSeriesChart.jsx';\n\nconst RANGE_OPTIONS = [\n { label: '24 hours', ms: 24 * 60 * 60 * 1000 },\n { label: '7 days', ms: 7 * 24 * 60 * 60 * 1000 },\n { label: '30 days', ms: 30 * 24 * 60 * 60 * 1000 },\n { label: '90 days', ms: 90 * 24 * 60 * 60 * 1000 },\n { label: '1 year', ms: 365 * 24 * 60 * 60 * 1000 },\n];\n\nconst METRICS = [\n ['dischargedMah', 'Discharged mAh'],\n ['chargedMah', 'Charged mAh'],\n ['avgVoltageMv', 'Average voltage'],\n ['avgCurrentMa', 'Average current'],\n ['avgTemperatureC', 'Average temperature'],\n];\n\nfunction number(value, digits = 2) {\n return value !== null && value !== undefined && value !== '' && Number.isFinite(Number(value))\n ? Number(value).toLocaleString(undefined, { maximumFractionDigits: digits })\n : '--';\n}\n\nfunction timestamp(value) {\n return value !== null && value !== undefined && value !== '' && Number.isFinite(Number(value))\n ? new Date(Number(value)).toLocaleString()\n : '--';\n}\n\nfunction duration(value) {\n const minutes = Math.round((Number(value) || 0) / 60000);\n if (minutes < 60) return `${minutes}m`;\n if (minutes < 1440) return `${Math.floor(minutes / 60)}h ${minutes % 60}m`;\n return `${Math.floor(minutes / 1440)}d ${Math.floor((minutes % 1440) / 60)}h`;\n}\n\nfunction distance(value) {\n const mm = Number(value) || 0;\n return mm >= 1000000 ? `${number(mm / 1000000)} km` : `${number(mm / 1000)} m`;\n}\n\nfunction Metric({ label, value, detail = null }) {\n return (\n
\n
{label}
\n
{value}
\n {detail ?
{detail}
: null}\n
\n );\n}\n\nfunction exportCsv(name, rows) {\n // Papa Parse owns CSV quoting and nested-value escaping. JSON-stringifying\n // object cells preserves evidence without maintaining a fragile custom CSV\n // serializer for arbitrary structured event payloads.\n const normalized = rows.map((row) => Object.fromEntries(\n Object.entries(row).map(([key, value]) => [key, value && typeof value === 'object' ? JSON.stringify(value) : value]),\n ));\n const csv = Papa.unparse(normalized);\n const url = URL.createObjectURL(new Blob([csv], { type: 'text/csv;charset=utf-8' }));\n const anchor = document.createElement('a');\n anchor.href = url;\n anchor.download = name;\n anchor.click();\n URL.revokeObjectURL(url);\n}\n\nfunction BatteryRegistryPanel({ report, onSaved }) {\n const socket = useSocket();\n const role = useSessionSelector((state) => state.session?.role || null);\n const canEdit = role === 'admin' || role === 'lockdown';\n const [draft, setDraft] = useState({\n roverId: report.rovers[0]?.roverId || '',\n chemistry: 'unknown',\n ratedCapacityMah: '',\n installedDate: new Date().toISOString().slice(0, 10),\n notes: '',\n });\n const [status, setStatus] = useState('');\n\n const submit = (event) => {\n event.preventDefault();\n setStatus('Saving…');\n socket.emit('fleetReports:replaceBattery', {\n roverId: draft.roverId,\n chemistry: draft.chemistry,\n ratedCapacityMah: Number(draft.ratedCapacityMah),\n installedAt: new Date(`${draft.installedDate}T12:00:00`).getTime(),\n notes: draft.notes,\n }, (response = {}) => {\n if (response.error) {\n setStatus(response.error);\n return;\n }\n setStatus(`Registered ${response.battery?.batteryKey || 'battery'}`);\n onSaved();\n });\n };\n\n return (\n \n
\n \n \n {report.batteryRegistry.map((battery) => (\n \n \n \n \n ))}\n
RoverBattery identityChemistryRated capacity mAhInstalledRetiredLearned baseline mAhNotes
{battery.roverId}{battery.batteryKey}{battery.chemistry || '--'}{number(battery.ratedCapacityMah, 0)}{timestamp(battery.installedAt)}{timestamp(battery.retiredAt)}{number(battery.healthyBaselineMah)}{battery.notes || '--'}
\n
\n {canEdit ? (\n
\n \n \n \n \n \n
{status}
\n
\n ) :

Battery history is read-only. Admin access is required to register a physical replacement.

}\n
\n );\n}\n\nfunction FullReportContent() {\n const [rangeMs, setRangeMs] = useState(RANGE_OPTIONS[1].ms);\n const [rangeEnd, setRangeEnd] = useState(() => Date.now());\n const [metric, setMetric] = useState('dischargedMah');\n const [selectedRovers, setSelectedRovers] = useState([]);\n const since = rangeEnd - rangeMs;\n const { report, loading, error, refresh } = useFleetReport({\n since,\n until: rangeEnd,\n compact: false,\n includeEvents: true,\n roverIds: selectedRovers.length ? selectedRovers : null,\n });\n\n const chartRoverIds = useMemo(() => report?.rovers.map((rover) => rover.roverId) || [], [report]);\n const toggleRover = (roverId) => {\n setSelectedRovers((current) => current.includes(roverId)\n ? current.filter((id) => id !== roverId)\n : [...current, roverId]);\n };\n\n return (\n <>\n Back to rover page}\n bodyClassName=\"space-y-0.5 p-0.5 text-sm\"\n >\n
\n {RANGE_OPTIONS.map((option) => (\n { setRangeMs(option.ms); setRangeEnd(Date.now()); }}\n >\n {option.label}\n \n ))}\n \n {timestamp(since)} through {timestamp(rangeEnd)}\n
\n {report?.rovers.length ? (\n
\n {report.rovers.map((rover) => (\n toggleRover(rover.roverId)}\n >\n {selectedRovers.includes(rover.roverId) ? '✓ ' : ''}{rover.name}\n \n ))}\n {selectedRovers.length ? : null}\n
\n ) : null}\n \n\n {loading && !report ? Loading detailed fleet evidence… : null}\n {error ? {error} : null}\n\n {report ? (\n <>\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n\n \n {report.findings.length ? report.findings.map((finding) => (\n
\n \n {finding.severity}\n {' · '}{finding.roverId ? `${finding.roverId} · ` : ''}{finding.title} · confidence {finding.confidence}\n \n
{JSON.stringify(finding.evidence, null, 2)}
\n
\n )) :

No findings in the selected range.

}\n
\n\n setMetric(event.target.value)}>\n {METRICS.map(([key, label]) => )}\n \n )}\n bodyClassName=\"p-0.5\"\n >\n \n \n\n exportCsv('fleet-rovers.csv', report.rovers)}>Export CSV}\n bodyClassName=\"overflow-x-auto p-0.5\"\n >\n \n \n {report.rovers.map((rover) => (\n \n \n \n \n \n \n \n ))}\n
RoverOnlineSamplesCoverageGapsDistanceCommandsDrive/motorRejectedOvercurrentsBumpsCliffsWheel dropsVirtual wallsCharged mAhDischarged mAhVoltage avg/min/max mVTemperature avg/min/max °CCharge now mAhReported capacity mAhLast sample
{rover.name}{rover.online ? 'yes' : 'no'}{number(rover.sampleCount, 0)}{duration(rover.coverageMs)}{number(rover.gapCount, 0)}{distance(rover.distanceMm)}{number(rover.commandCount, 0)}{number(rover.driveCommandCount, 0)}{number(rover.rejectedCommandCount, 0)}{number(rover.overcurrentEpisodeCount, 0)}{number(rover.bumpCount, 0)}{number(rover.cliffCount, 0)}{number(rover.wheelDropCount, 0)}{number(rover.virtualWallCount, 0)}{number(rover.chargedMah)}{number(rover.dischargedMah)}{number(rover.averageVoltageMv, 0)} / {number(rover.minimumVoltageMv, 0)} / {number(rover.maximumVoltageMv, 0)}{number(rover.averageTemperatureC)} / {number(rover.minimumTemperatureC)} / {number(rover.maximumTemperatureC)}{number(rover.latestChargeMah, 0)}{number(rover.reportedCapacityMah, 0)}{timestamp(rover.lastSampleAt)}
\n \n\n exportCsv('fleet-battery-sessions.csv', report.batterySessions)}>Export CSV}\n bodyClassName=\"overflow-x-auto p-0.5\"\n >\n \n \n {report.batterySessions.map((session) => (\n \n \n \n \n \n \n ))}\n
RoverKindStartedEndedDurationStart/end chargeCharged mAhDischarged mAhVoltage min/maxTemperature min/maxSamplesGapsConfidenceQualification
{session.roverId}{session.kind}{timestamp(session.startedAt)}{timestamp(session.endedAt)}{duration((session.endedAt || report.generatedAt) - session.startedAt)}{number(session.startChargeMah, 0)} / {number(session.endChargeMah, 0)} mAh{number(session.chargedMah)}{number(session.dischargedMah)}{number(session.minVoltageMv, 0)} / {number(session.maxVoltageMv, 0)} mV{number(session.minTemperatureC)} / {number(session.maxTemperatureC)} °C{number(session.sampleCount, 0)}{number(session.gapCount, 0)}{session.confidence}{session.qualificationReason}
\n \n\n \n \n \n {report.batteryHealth.map((health) => (\n \n \n \n \n \n ))}\n
RoverBattery identityQualified testsBaseline testsLearned baseline mAhLatest usable mAhCapacity retainedDischarged throughput mAhEquivalent full cyclesLatest qualified testConfidenceConfidence reason
{health.roverId}{health.batteryKey}{number(health.qualifiedTestCount, 0)}{number(health.baselineTestCount, 0)}{number(health.baselineMah)}{number(health.measuredUsableMah)}{health.capacityRetentionPercent == null ? '--' : `${number(health.capacityRetentionPercent)}%`}{number(health.dischargedThroughputMah)}{number(health.equivalentFullCycles, 3)}{timestamp(health.latestQualifiedTestAt)}{health.confidence}{health.confidenceReason}
\n
\n\n \n\n exportCsv('fleet-events.csv', report.events)}>Export CSV}\n bodyClassName=\"space-y-0.5 p-0.5\"\n >\n {report.events.map((event) => (\n
\n {timestamp(event.ts)} · {event.severity} · {event.source} · {event.type}{event.roverId ? ` · ${event.roverId}` : ''}\n
{JSON.stringify(event.payload, null, 2)}
\n
\n ))}\n \n\n \n \n \n {report.dailyReportHistory.map((daily) => (\n \n \n \n ))}\n
Report dayGeneratedStored bytesDiscord deliveredDelivery error
{daily.reportDate}{timestamp(daily.generatedAt)}{number(daily.reportBytes, 0)}{timestamp(daily.discordDeliveredAt)}{daily.discordError || '--'}
\n
\n\n \n
{JSON.stringify(report.diagnostics.collector, null, 2)}
\n
{JSON.stringify(report.diagnostics.storage, null, 2)}
\n
\n\n \n

Battery throughput integrates OI packet 23 signed battery current: delta mAh = current mA × elapsed milliseconds / 3,600,000. Positive current is charged throughput; negative current is discharged throughput.

\n

Intervals exceeding the configured maximum gap are excluded rather than interpreted as zero. Packet 25 charge movement is retained as independent evidence. Packet 26 is displayed as the rover-reported fixed reference and is not treated as measured battery health.

\n

A high-confidence capacity test requires a qualified full endpoint, continuous telemetry, configured minimum discharge depth, and a low endpoint. Partial or interrupted sessions remain visible with lower confidence and an explicit qualification reason.

\n
\n \n ) : null}\n \n );\n}\n\nexport default function FleetReportsApp() {\n useUserIdentitySync({ identitySurface: 'passive' });\n const enabled = useSessionSelector((state) => isFeatureEnabled(state, 'fleetReports'));\n const { value: pageSettings } = useSettingsNamespace('page', { backgroundTheme: DEFAULT_PAGE_THEME_KEY });\n const pageBackgroundClass = getPageThemeClass(pageSettings?.backgroundTheme);\n return (\n
\n \n
\n {enabled ? : (\n \n

This server has not enabled fleet reporting.

\n Back to rover page\n
\n )}\n
\n
\n );\n}\n"],"names":["e","t","module","this","n","d","s","a","o","h","v","P","u","b","i","r","q","f","y","l","c","p","m","g","k","_","E","U","C","S","O","x","I","A","T","D","L","F","j","z","M","w","R","FEAT_TIME","pre","UPLOT","ORI_HZ","ORI_VT","TITLE","WRAP","UNDER","OVER","AXIS","OFF","SELECT","CURSOR_X","CURSOR_Y","CURSOR_PT","LEGEND","LEGEND_LIVE","LEGEND_INLINE","LEGEND_SERIES","LEGEND_MARKER","LEGEND_LABEL","LEGEND_VALUE","WIDTH","HEIGHT","TOP","BOTTOM","LEFT","RIGHT","hexBlack","transparent","mousemove","mousedown","mouseup","mouseenter","mouseleave","dblclick","resize","scroll","change","dppxchange","LEGEND_DISP","domEnv","doc","win","nav","pxRatio","query","setPxRatio","_pxRatio","off","on","addClass","el","cl","remClass","setStylePx","name","value","placeTag","tag","cls","targ","refEl","placeDiv","xformCache","elTrans","xPos","yPos","xMax","yMax","xform","xformOld","colorCache","elColor","background","borderColor","newColor","oldColor","sizeCache","elSize","newWid","newHgt","centered","newSize","oldSize","evOpts","evOpts2","ev","cb","capt","closestIdx","num","arr","lo","hi","mid","bitwise","floor","makeIndexOfs","predicate","data","_i0","_i1","i0","i1","notNullish","isPositive","nonNullIdxs","positiveIdxs","getMinMax","sorted","log","getEdgeIdxs","_min","_max","inf","rangeLog","min","max","base","fullMags","minSign","sign","maxSign","logFn","log10","log2","growMinAbs","ceil","growMaxAbs","minExp","abs","maxExp","minIncr","pow","maxIncr","roundDec","incrRoundDn","incrRoundUp","rangeAsinh","minMax","rangePad","autoRangePart","_eqRangePart","_eqRange","rangeNum","mult","extra","isObj","_rangeNum","ifNull","lh","rh","hasData","idx0","idx1","cfg","cmin","cmax","padMin","padMax","hardMin","hardMax","softMin","softMax","softMinMode","softMaxMode","delta","deltaMag","scalarMax","scalarMag","scalarMagDelta","nonZeroDelta","mag","_padMin","_newMin","_softMin","minLim","_padMax","_newMax","_softMax","maxLim","numFormatter","fmtNum","val","PI","round","sinh","linthresh","asinh","numIntDigits","clamp","isFn","fnOrSelf","noop","retArg0","_0","retArg1","_1","retNull","retTrue","retEq","regex6","fixFloat","isInt","fixedDec","str","match","len","exp","incrRound","incr","dec","guessDec","genIncrs","mults","incrs","multDec","expa","_incr","EMPTY_OBJ","EMPTY_ARR","nullNullTuple","isArr","isUndef","isStr","is","fastIsObj","TypedArray","__proto__","copy","_isObj","out","assign","args","src","key","NULL_REMOVE","NULL_RETAIN","NULL_EXPAND","nullExpand","yVals","nullIdxs","alignedLen","xi","lastNullIdx","nullIdx","join","tables","nullModes","allHeadersSame","table","isAsc","sortCols","xVals","ti","xs","xIdxs","si","ys","nullMode","yVal","alignedIdx","microTask","fn","head","rlen","idxs","table2","row","row2","vals0","len0","vals1","vals","samples","firstIdx","lastIdx","stride","prevVal","months","days","slice3","days3","months3","engNames","zeroPad2","int","zeroPad3","subs","names","fmtDate","tpl","parts","localTz","tzDate","date","tz","date2","onlyWhole","allMults","decIncrs","oneIncrs","wholeIncrs","numIncrs","NL","yyyy","NLyyyy","md","NLmd","NLmdyy","aa","hmm","hmmaa","NLhmmaa","ss","genTimeStuffs","ms","mo","timeIncrs","_timeAxisStamps","timeAxisSplits","self","axisIdx","scaleMin","scaleMax","foundIncr","foundSpace","splits","isYr","isMo","minDate","minDateTs","minMin","mkDate","minMinTs","moIncr","yrIncr","split","splitDate","baseYear","baseMonth","next","offs","incr0","tzOffset","date0","prevHour","incrHours","minSpace","pctSpace","expectedHour","dstShift","prevSplit","timeIncrsMs","_timeAxisStampsMs","timeAxisSplitsMs","timeIncrsS","_timeAxisStampsS","timeAxisSplitsS","timeAxisStamps","stampCfg","timeAxisVals","stamps","prevYear","prevMnth","prevDate","prevMins","prevSecs","newYear","newMnth","newDate","newHour","newMins","newSecs","stamp","timeAxisVal","dateTpl","timeSeriesStamp","_timeSeriesStamp","timeSeriesVal","seriesIdx","dataIdx","legendStroke","legendFill","legendOpts","cursorPointShow","pt","size","mar","width","cursorPointFill","sp","cursorPointStroke","cursorPointSize","moveTuple","cursorMove","mouseLeft1","mouseTop1","filtBtn0","handle","onlyTarg","filtTarg","cursorOpts","valPos","curPos","axisLines","grid","ticks","border","font","labelFont","lineGap","xAxisOpts","numSeriesLabel","timeSeriesLabel","xSeriesOpts","numAxisVals","numAxisSplits","forceMin","numDec","logAxisSplits","logBase","nextMagIncr","asinhAxisSplits","posSplits","zero","RE_ALL","RE_12357","RE_125","RE_1","_filt","distr","re","keepMod","log10AxisValsFilt","axis","scaleKey","sc","valToPos","_10","magSpace","log2AxisValsFilt","numSeriesVal","yAxisOpts","ptDia","dia","seriesPointsShow","scale","xData","p0","p1","dim","maxPts","facet","gaps","nullGaps","xySeriesOpts","ySeriesOpts","clampScale","xScaleOpts","yScaleOpts","syncs","_sync","opts","plot","type","BAND_CLIP_FILL","BAND_CLIP_STROKE","orient","mode","series","scales","bbox","dx","dy","sx","sy","H","V","moveToH","lineToH","rectH","arcH","bezierCurveToH","moveToV","lineToV","rectV","arcV","bezierCurveToV","bandFillClipDirs","fillDir","clipDirs","bands","seriesFillTo","dataMin","dataMax","bandFillDir","clipBandLine","strokePath","clipDir","dataX","dataY","scaleX","scaleY","valToPosX","valToPosY","xOff","yOff","xDim","yDim","pxRound","dir","lineTo","frIdx","toIdx","x0","y0","x1","yLimit","clip","clipGaps","ori","plotLft","plotTop","plotWid","plotHgt","rect","prevGapEnd","maxStrokeWidth","addGap","fromX","toX","prevGap","findGaps","pixelForX","align","fr","to","frPx","toPx","fri2","toi2","pxRoundGen","pxAlign","moveTo","arcTo","y1","x2","y2","endRad","baseRad","startAngle","endAngle","bp1x","bp1y","bp2x","bp2y","p2x","p2y","points","filtIdxs","arc","rad","fill","lft","top","wid","hgt","drawPoint","pi","_drawAcc","stroke","accX","minY","maxY","inY","outY","drawAccH","drawAccV","linear","alignGaps","pixelForY","drawAcc","_paths","hasGap","xForPixel","pos","drawnAtX","idx0px","idx1px","nextAccXVal","xVal","bandClipDir","fillToVal","fillToY","frX","stepped","ascDesc","extend","left","prevYPos","firstXPos","prevXPos","firstXPosExt","yVal1","prevXPosExt","fillTo","halfStroke","startsOffset","endsOffset","findColWidth","colWid","prevIdx","minDelta","bars","_extraGap","ro","radiusFn","gapFactor","_maxWidth","_minWidth","disp","_each","dispFills","dispStrokes","_align","extraGap","maxWidth","minWidth","valRadius","baseRadius","_dirX","each","band","xShift","barWid","fullGap","strokeWidth","multiPath","fillColors","fillPaths","strokeColors","strokePaths","color","pct","sizes","insetStroke","rawBarWid","dataY0","radVal","radBase","yVal0","btm","barHgt","rv","rb","splineInterp","interp","bezierCurveTo","xCoords","yCoords","monotoneCubic","_monotoneCubic","path","ds","dys","dxs","cursorPlots","invalidateRects","uPlot","linearPath","pointsPath","setDefaults","xo","yo","initY","setDefault","setDefaults2","xyo","snapNumX","snapTimeX","snapNumY","snapLogY","snapLogX","snapAsinhY","snapAsinhX","findIncr","minVal","maxVal","intDigits","incrIdx","pxRatioFont","fontSize","fontSizeCss","syncFontSize","then","getHPos","getVPos","getPos","ready","root","title","can","ctx","wrap","over","mouseLeft0","mouseTop0","drag","under","axes","xScaleKey","drawOrderMap","drawAxesGrid","drawSeries","drawOrder","initValToPct","getVal","_val","initScale","scaleOpts","isTime","rn","rangeIsArr","xScaleDistr","pendScales","_tzDate","ts","_fmtDate","_timeAxisSplits","_timeAxisVals","_timeSeriesVal","activeIdxs","legend","cursor","showLegend","showCursor","markers","legendTable","legendHead","legendBody","legendRows","legendCells","legendCols","multiValLegend","NULL_LEGEND_VALUES","getMultiVals","son","soff","initLegendRow","cells","label","indic","text","onMouse","setCursorEvent","isolate","setSeries","syncOpts","cursorFocus","FOCUS_TRUE","mouseListeners","targListeners","listener","offMouse","fullWidCss","fullHgtCss","plotWidCss","plotHgtCss","plotLftCss","plotTopCss","_plotLftCss","_plotTopCss","_plotWidCss","_plotHgtCss","shouldSetScales","shouldSetSize","shouldConvergeSize","shouldSetCursor","shouldSetSelect","shouldSetLegend","_setSize","height","force","calcSize","resetYSeries","commit","calcPlotRect","calcAxesRects","bb","CYCLE_LIMIT","convergeSize","converged","cycleNum","axesConverged","axesCalc","paddingConverged","paddingCalc","setSize","hasTopAxis","hasBtmAxis","hasRgtAxis","hasLftAxis","side","_size","isVt","labelSize","fullSize","sidesWithAxes","_padding","off1","off2","off3","off0","incrOffset","hov","skip","prox","bias","cursorIdx","valAtPosX","idx2","_prox","withProx","cursorLft","xValues","yValues","nonNullLft","nonNullRgt","lftPos","rgtPos","lftDelta","rgtDelta","focus","cursorOnePt","cursorPts","cursorPtsLft","cursorPtsTop","initCursorPt","initSeries","sv","_ptDia","rowCells","fire","addSeries","delSeries","tr","initAxis","av","autoPadSide","padding","dataLen","data0","viaAutoScaleX","setData","_data","_resetScales","scaleData","_data0","xsc","autoScaleX","_setScale","ctxStroke","ctxFill","ctxWidth","ctxDash","ctxJoin","ctxCap","ctxFont","ctxAlign","ctxBaseline","ctxAlpha","setCtxStyle","dash","cap","setFontStyle","baseline","accScale","wsc","psc","AUTOSCALE","setScales","wipScales","xFacet","yFacet","yScaleKey","yData","wscx","wscy","changed","anyChanged","getOuterIdxs","ydata","shouldAlpha","cacheStrokeFill","_ctxAlpha","_idxs","drawPath","_gaps","show","_points","gapsClip","flags","strokeStyle","fillStyle","boundsClip","offset","_pxAlign","strokeFill","fillStroke","lineWidth","lineDash","lineCap","fillPath","didStrokeFill","bi","lowerEdge","lowerData","bandClip","gapsClip2","_fillStyle","CLIP_FILL_STROKE","doFill","doStroke","getIncrSpace","fullDim","incrSpace","drawOrthoLines","filts","pos0","pos1","_space","_splits","values","_p","shiftDir","shiftAmt","baseLpos","_label","plotDim","plotOff","_tickSize","tickSize","axisGap","angle","basePos","finalPos","textAlign","textBaseline","lineHeight","canOffs","_values","_parts","queuedCommit","deferHooks","hooksQueue","flushHooks","_commit","batch","_deferHooks","_el","_show","_pos","posOffset","syncRect","pctWid","pctHgt","vCursor","hCursor","select","prop","_hideProps","selectDiv","setSelect","updateCursor","setLegend","rebuildPaths","recalcAxes","setScale","xCursor","yCursor","rawMouseLeft0","rawMouseTop0","rawMouseLeft1","rawMouseTop1","dragging","dragX","dragY","_fire","toggleDOM","_pub","setFocus","pubSync","setBand","addBand","delBand","setAlpha","closestDist","closestSeries","focusedSeries","allFocused","_setAlpha","i2","isFocused","posToVal","closestIdxFromXpos","setSelH","setSelV","setSelX","setSelY","syncLegend","didx","sidx","setLegendValues","idx","noDataInRange","mouseXPos","_ptLft","_ptTop","_ptWid","_ptHgt","_centered","_ptFill","_ptStroke","yVal2","xPos2","mouseYPos","dist","mouseYVal","seriesYValSign","mouseYValSign","hPos","vPos","ptWid","ptHgt","ptLft","ptTop","ptStroke","ptFill","getBBox","focusChanged","xKey","yKey","matchXKeys","matchYKeys","xKeySrc","yKeySrc","sdrag","sori","sPosToVal","sOff","sDim","matchingX","matchingY","hideSelect","rawDX","rawDY","_rawDX","uni","syncKey","xSyncKey","ySyncKey","shouldPub","defer","mouseMove","_l","_t","_w","_h","_i","cacheMouse","initial","snap","syncOptsSrc","xValSrc","yValSrc","rotSrc","_xDim","_yDim","_xPos","_yPos","__l","downSelectLeft","downSelectTop","downSelectWidth","downSelectHeight","mouseDown","mouseUp","hasSelect","chgSelect","mouseLeave","_dragging","snapH","snapV","snapProx","dragH","dragV","dblClick","syncPxRatio","events","seriesIdxMatcher","hooks","evName","a1","a2","srcSeriesIdx","sync","pub","destroy","_init","paths","SERIES_COLORS","FleetTimeSeriesChart","minutes","roverIds","metric","elementRef","useRef","prepared","useMemo","timestamps","timestampIndexes","index","rowsByRover","roverId","_self","useEffect","container","metricLabels","chart","observer","jsx","RANGE_OPTIONS","METRICS","number","digits","timestamp","duration","distance","mm","Metric","detail","jsxs","exportCsv","rows","normalized","csv","Papa","url","anchor","BatteryRegistryPanel","report","onSaved","socket","useSocket","role","useSessionSelector","state","canEdit","draft","setDraft","useState","status","setStatus","submit","event","response","CardFrame","battery","current","rover","FullReportContent","rangeMs","setRangeMs","rangeEnd","setRangeEnd","setMetric","selectedRovers","setSelectedRovers","since","loading","error","refresh","useFleetReport","chartRoverIds","toggleRover","id","Fragment","Link","option","finding","session","health","daily","FleetReportsApp","useUserIdentitySync","enabled","isFeatureEnabled","pageSettings","useSettingsNamespace","DEFAULT_PAGE_THEME_KEY","pageBackgroundClass","getPageThemeClass","SocketConnectionPill","themeGapClass"],"mappings":"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","x_google_ignoreList":[0,1]} \ No newline at end of file diff --git a/server/public/assets/index-DFlKqFdJ.js b/server/public/assets/index-CEQiOJg5.js similarity index 68% rename from server/public/assets/index-DFlKqFdJ.js rename to server/public/assets/index-CEQiOJg5.js index 5e5093bf..b64af4d7 100644 --- a/server/public/assets/index-DFlKqFdJ.js +++ b/server/public/assets/index-CEQiOJg5.js @@ -1,15 +1,15 @@ -const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/OrbitControls-BJ-UXxdt.js","assets/three.module--MGUDD-H.js","assets/FleetReportsApp-9Z_DFtwj.js","assets/FleetReportsApp-BqTUOKJh.css"])))=>i.map(i=>d[i]); -(function(){const c=document.createElement("link").relList;if(c&&c.supports&&c.supports("modulepreload"))return;for(const u of document.querySelectorAll('link[rel="modulepreload"]'))i(u);new MutationObserver(u=>{for(const h of u)if(h.type==="childList")for(const d of h.addedNodes)d.tagName==="LINK"&&d.rel==="modulepreload"&&i(d)}).observe(document,{childList:!0,subtree:!0});function n(u){const h={};return u.integrity&&(h.integrity=u.integrity),u.referrerPolicy&&(h.referrerPolicy=u.referrerPolicy),u.crossOrigin==="use-credentials"?h.credentials="include":u.crossOrigin==="anonymous"?h.credentials="omit":h.credentials="same-origin",h}function i(u){if(u.ep)return;u.ep=!0;const h=n(u);fetch(u.href,h)}})();const cp="modulepreload",ap=function(t){return"/"+t},qs={},ha=function(c,n,i){let u=Promise.resolve();if(n&&n.length>0){let p=function(x){return Promise.all(x.map(g=>Promise.resolve(g).then(b=>({status:"fulfilled",value:b}),b=>({status:"rejected",reason:b}))))};document.getElementsByTagName("link");const d=document.querySelector("meta[property=csp-nonce]"),m=d?.nonce||d?.getAttribute("nonce");u=p(n.map(x=>{if(x=ap(x),x in qs)return;qs[x]=!0;const g=x.endsWith(".css"),b=g?'[rel="stylesheet"]':"";if(document.querySelector(`link[href="${x}"]${b}`))return;const y=document.createElement("link");if(y.rel=g?"stylesheet":cp,g||(y.as="script"),y.crossOrigin="",y.href=x,m&&y.setAttribute("nonce",m),document.head.appendChild(y),g)return new Promise((M,H)=>{y.addEventListener("load",M),y.addEventListener("error",()=>H(new Error(`Unable to preload CSS for ${x}`)))})}))}function h(d){const m=new Event("vite:preloadError",{cancelable:!0});if(m.payload=d,window.dispatchEvent(m),!m.defaultPrevented)throw d}return u.then(d=>{for(const m of d||[])m.status==="rejected"&&h(m.reason);return c().catch(h)})};function np(t){return t&&t.__esModule&&Object.prototype.hasOwnProperty.call(t,"default")?t.default:t}var zc={exports:{}},I8={};var Ds;function rp(){if(Ds)return I8;Ds=1;var t=Symbol.for("react.transitional.element"),c=Symbol.for("react.fragment");function n(i,u,h){var d=null;if(h!==void 0&&(d=""+h),u.key!==void 0&&(d=""+u.key),"key"in u){h={};for(var m in u)m!=="key"&&(h[m]=u[m])}else h=u;return u=h.ref,{$$typeof:t,type:i,key:d,ref:u!==void 0?u:null,props:h}}return I8.Fragment=c,I8.jsx=n,I8.jsxs=n,I8}var Os;function lp(){return Os||(Os=1,zc.exports=rp()),zc.exports}var r=lp(),bc={exports:{}},Z1={};var Us;function ip(){if(Us)return Z1;Us=1;var t=Symbol.for("react.transitional.element"),c=Symbol.for("react.portal"),n=Symbol.for("react.fragment"),i=Symbol.for("react.strict_mode"),u=Symbol.for("react.profiler"),h=Symbol.for("react.consumer"),d=Symbol.for("react.context"),m=Symbol.for("react.forward_ref"),p=Symbol.for("react.suspense"),x=Symbol.for("react.memo"),g=Symbol.for("react.lazy"),b=Symbol.for("react.activity"),y=Symbol.iterator;function M(_){return _===null||typeof _!="object"?null:(_=y&&_[y]||_["@@iterator"],typeof _=="function"?_:null)}var H={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},L=Object.assign,C={};function B(_,G,l1){this.props=_,this.context=G,this.refs=C,this.updater=l1||H}B.prototype.isReactComponent={},B.prototype.setState=function(_,G){if(typeof _!="object"&&typeof _!="function"&&_!=null)throw Error("takes an object of state variables to update or a function which returns an object of state variables.");this.updater.enqueueSetState(this,_,G,"setState")},B.prototype.forceUpdate=function(_){this.updater.enqueueForceUpdate(this,_,"forceUpdate")};function S(){}S.prototype=B.prototype;function w(_,G,l1){this.props=_,this.context=G,this.refs=C,this.updater=l1||H}var j=w.prototype=new S;j.constructor=w,L(j,B.prototype),j.isPureReactComponent=!0;var E=Array.isArray;function k(){}var F={H:null,A:null,T:null,S:null},V=Object.prototype.hasOwnProperty;function N(_,G,l1){var Q=l1.ref;return{$$typeof:t,type:_,key:G,ref:Q!==void 0?Q:null,props:l1}}function q(_,G){return N(_.type,G,_.props)}function O(_){return typeof _=="object"&&_!==null&&_.$$typeof===t}function Z(_){var G={"=":"=0",":":"=2"};return"$"+_.replace(/[=:]/g,function(l1){return G[l1]})}var t1=/\/+/g;function Y(_,G){return typeof _=="object"&&_!==null&&_.key!=null?Z(""+_.key):G.toString(36)}function P(_){switch(_.status){case"fulfilled":return _.value;case"rejected":throw _.reason;default:switch(typeof _.status=="string"?_.then(k,k):(_.status="pending",_.then(function(G){_.status==="pending"&&(_.status="fulfilled",_.value=G)},function(G){_.status==="pending"&&(_.status="rejected",_.reason=G)})),_.status){case"fulfilled":return _.value;case"rejected":throw _.reason}}throw _}function T(_,G,l1,Q,a1){var r1=typeof _;(r1==="undefined"||r1==="boolean")&&(_=null);var e1=!1;if(_===null)e1=!0;else switch(r1){case"bigint":case"string":case"number":e1=!0;break;case"object":switch(_.$$typeof){case t:case c:e1=!0;break;case g:return e1=_._init,T(e1(_._payload),G,l1,Q,a1)}}if(e1)return a1=a1(_),e1=Q===""?"."+Y(_,0):Q,E(a1)?(l1="",e1!=null&&(l1=e1.replace(t1,"$&/")+"/"),T(a1,G,l1,"",function(T1){return T1})):a1!=null&&(O(a1)&&(a1=q(a1,l1+(a1.key==null||_&&_.key===a1.key?"":(""+a1.key).replace(t1,"$&/")+"/")+e1)),G.push(a1)),1;e1=0;var b1=Q===""?".":Q+":";if(E(_))for(var y1=0;y1<_.length;y1++)Q=_[y1],r1=b1+Y(Q,y1),e1+=T(Q,G,l1,r1,a1);else if(y1=M(_),typeof y1=="function")for(_=y1.call(_),y1=0;!(Q=_.next()).done;)Q=Q.value,r1=b1+Y(Q,y1++),e1+=T(Q,G,l1,r1,a1);else if(r1==="object"){if(typeof _.then=="function")return T(P(_),G,l1,Q,a1);throw G=String(_),Error("Objects are not valid as a React child (found: "+(G==="[object Object]"?"object with keys {"+Object.keys(_).join(", ")+"}":G)+"). If you meant to render a collection of children, use an array instead.")}return e1}function U(_,G,l1){if(_==null)return _;var Q=[],a1=0;return T(_,Q,"","",function(r1){return G.call(l1,r1,a1++)}),Q}function I(_){if(_._status===-1){var G=_._result;G=G(),G.then(function(l1){(_._status===0||_._status===-1)&&(_._status=1,_._result=l1)},function(l1){(_._status===0||_._status===-1)&&(_._status=2,_._result=l1)}),_._status===-1&&(_._status=0,_._result=G)}if(_._status===1)return _._result.default;throw _._result}var n1=typeof reportError=="function"?reportError:function(_){if(typeof window=="object"&&typeof window.ErrorEvent=="function"){var G=new window.ErrorEvent("error",{bubbles:!0,cancelable:!0,message:typeof _=="object"&&_!==null&&typeof _.message=="string"?String(_.message):String(_),error:_});if(!window.dispatchEvent(G))return}else if(typeof process=="object"&&typeof process.emit=="function"){process.emit("uncaughtException",_);return}console.error(_)},v1={map:U,forEach:function(_,G,l1){U(_,function(){G.apply(this,arguments)},l1)},count:function(_){var G=0;return U(_,function(){G++}),G},toArray:function(_){return U(_,function(G){return G})||[]},only:function(_){if(!O(_))throw Error("React.Children.only expected to receive a single React element child.");return _}};return Z1.Activity=b,Z1.Children=v1,Z1.Component=B,Z1.Fragment=n,Z1.Profiler=u,Z1.PureComponent=w,Z1.StrictMode=i,Z1.Suspense=p,Z1.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE=F,Z1.__COMPILER_RUNTIME={__proto__:null,c:function(_){return F.H.useMemoCache(_)}},Z1.cache=function(_){return function(){return _.apply(null,arguments)}},Z1.cacheSignal=function(){return null},Z1.cloneElement=function(_,G,l1){if(_==null)throw Error("The argument must be a React element, but you passed "+_+".");var Q=L({},_.props),a1=_.key;if(G!=null)for(r1 in G.key!==void 0&&(a1=""+G.key),G)!V.call(G,r1)||r1==="key"||r1==="__self"||r1==="__source"||r1==="ref"&&G.ref===void 0||(Q[r1]=G[r1]);var r1=arguments.length-2;if(r1===1)Q.children=l1;else if(1>>1,v1=T[n1];if(0>>1;n1<_;){var G=2*(n1+1)-1,l1=T[G],Q=G+1,a1=T[Q];if(0>u(l1,I))Qu(a1,l1)?(T[n1]=a1,T[Q]=I,n1=Q):(T[n1]=l1,T[G]=I,n1=G);else if(Qu(a1,I))T[n1]=a1,T[Q]=I,n1=Q;else break t}}return U}function u(T,U){var I=T.sortIndex-U.sortIndex;return I!==0?I:T.id-U.id}if(t.unstable_now=void 0,typeof performance=="object"&&typeof performance.now=="function"){var h=performance;t.unstable_now=function(){return h.now()}}else{var d=Date,m=d.now();t.unstable_now=function(){return d.now()-m}}var p=[],x=[],g=1,b=null,y=3,M=!1,H=!1,L=!1,C=!1,B=typeof setTimeout=="function"?setTimeout:null,S=typeof clearTimeout=="function"?clearTimeout:null,w=typeof setImmediate<"u"?setImmediate:null;function j(T){for(var U=n(x);U!==null;){if(U.callback===null)i(x);else if(U.startTime<=T)i(x),U.sortIndex=U.expirationTime,c(p,U);else break;U=n(x)}}function E(T){if(L=!1,j(T),!H)if(n(p)!==null)H=!0,k||(k=!0,Z());else{var U=n(x);U!==null&&P(E,U.startTime-T)}}var k=!1,F=-1,V=5,N=-1;function q(){return C?!0:!(t.unstable_now()-NT&&q());){var n1=b.callback;if(typeof n1=="function"){b.callback=null,y=b.priorityLevel;var v1=n1(b.expirationTime<=T);if(T=t.unstable_now(),typeof v1=="function"){b.callback=v1,j(T),U=!0;break e}b===n(p)&&i(p),j(T)}else i(p);b=n(p)}if(b!==null)U=!0;else{var _=n(x);_!==null&&P(E,_.startTime-T),U=!1}}break t}finally{b=null,y=I,M=!1}U=void 0}}finally{U?Z():k=!1}}}var Z;if(typeof w=="function")Z=function(){w(O)};else if(typeof MessageChannel<"u"){var t1=new MessageChannel,Y=t1.port2;t1.port1.onmessage=O,Z=function(){Y.postMessage(null)}}else Z=function(){B(O,0)};function P(T,U){F=B(function(){T(t.unstable_now())},U)}t.unstable_IdlePriority=5,t.unstable_ImmediatePriority=1,t.unstable_LowPriority=4,t.unstable_NormalPriority=3,t.unstable_Profiling=null,t.unstable_UserBlockingPriority=2,t.unstable_cancelCallback=function(T){T.callback=null},t.unstable_forceFrameRate=function(T){0>T||125n1?(T.sortIndex=I,c(x,T),n(p)===null&&T===n(x)&&(L?(S(F),F=-1):L=!0,P(E,I-n1))):(T.sortIndex=v1,c(p,T),H||M||(H=!0,k||(k=!0,Z()))),T},t.unstable_shouldYield=q,t.unstable_wrapCallback=function(T){var U=y;return function(){var I=y;y=U;try{return T.apply(this,arguments)}finally{y=I}}}})(wc)),wc}var $s;function op(){return $s||($s=1,Mc.exports=sp()),Mc.exports}var Cc={exports:{}},W2={};var Zs;function up(){if(Zs)return W2;Zs=1;var t=Ka();function c(p){var x="https://react.dev/errors/"+p;if(1"u"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!="function"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(t)}catch(c){console.error(c)}}return t(),Cc.exports=up(),Cc.exports}var Ys;function hp(){if(Ys)return P8;Ys=1;var t=op(),c=Ka(),n=Ku();function i(e){var a="https://react.dev/errors/"+e;if(1v1||(e.current=n1[v1],n1[v1]=null,v1--)}function l1(e,a){v1++,n1[v1]=e.current,e.current=a}var Q=_(null),a1=_(null),r1=_(null),e1=_(null);function b1(e,a){switch(l1(r1,a),l1(a1,e),l1(Q,null),a.nodeType){case 9:case 11:e=(e=a.documentElement)&&(e=e.namespaceURI)?ss(e):0;break;default:if(e=a.tagName,a=a.namespaceURI)a=ss(a),e=os(a,e);else switch(e){case"svg":e=1;break;case"math":e=2;break;default:e=0}}G(Q),l1(Q,e)}function y1(){G(Q),G(a1),G(r1)}function T1(e){e.memoizedState!==null&&l1(e1,e);var a=Q.current,l=os(a,e.type);a!==l&&(l1(a1,e),l1(Q,l))}function _1(e){a1.current===e&&(G(Q),G(a1)),e1.current===e&&(G(e1),q8._currentValue=I)}var P1,n2;function U1(e){if(P1===void 0)try{throw Error()}catch(l){var a=l.stack.trim().match(/\n( *(at )?)/);P1=a&&a[1]||"",n2=-1)":-1i.map(i=>d[i]); +(function(){const c=document.createElement("link").relList;if(c&&c.supports&&c.supports("modulepreload"))return;for(const o of document.querySelectorAll('link[rel="modulepreload"]'))l(o);new MutationObserver(o=>{for(const h of o)if(h.type==="childList")for(const d of h.addedNodes)d.tagName==="LINK"&&d.rel==="modulepreload"&&l(d)}).observe(document,{childList:!0,subtree:!0});function n(o){const h={};return o.integrity&&(h.integrity=o.integrity),o.referrerPolicy&&(h.referrerPolicy=o.referrerPolicy),o.crossOrigin==="use-credentials"?h.credentials="include":o.crossOrigin==="anonymous"?h.credentials="omit":h.credentials="same-origin",h}function l(o){if(o.ep)return;o.ep=!0;const h=n(o);fetch(o.href,h)}})();const ip="modulepreload",sp=function(t){return"/"+t},Us={},ma=function(c,n,l){let o=Promise.resolve();if(n&&n.length>0){let p=function(x){return Promise.all(x.map(g=>Promise.resolve(g).then(b=>({status:"fulfilled",value:b}),b=>({status:"rejected",reason:b}))))};document.getElementsByTagName("link");const d=document.querySelector("meta[property=csp-nonce]"),m=d?.nonce||d?.getAttribute("nonce");o=p(n.map(x=>{if(x=sp(x),x in Us)return;Us[x]=!0;const g=x.endsWith(".css"),b=g?'[rel="stylesheet"]':"";if(document.querySelector(`link[href="${x}"]${b}`))return;const y=document.createElement("link");if(y.rel=g?"stylesheet":ip,g||(y.as="script"),y.crossOrigin="",y.href=x,m&&y.setAttribute("nonce",m),document.head.appendChild(y),g)return new Promise((M,H)=>{y.addEventListener("load",M),y.addEventListener("error",()=>H(new Error(`Unable to preload CSS for ${x}`)))})}))}function h(d){const m=new Event("vite:preloadError",{cancelable:!0});if(m.payload=d,window.dispatchEvent(m),!m.defaultPrevented)throw d}return o.then(d=>{for(const m of d||[])m.status==="rejected"&&h(m.reason);return c().catch(h)})};function op(t){return t&&t.__esModule&&Object.prototype.hasOwnProperty.call(t,"default")?t.default:t}var Mc={exports:{}},P8={};var Is;function up(){if(Is)return P8;Is=1;var t=Symbol.for("react.transitional.element"),c=Symbol.for("react.fragment");function n(l,o,h){var d=null;if(h!==void 0&&(d=""+h),o.key!==void 0&&(d=""+o.key),"key"in o){h={};for(var m in o)m!=="key"&&(h[m]=o[m])}else h=o;return o=h.ref,{$$typeof:t,type:l,key:d,ref:o!==void 0?o:null,props:h}}return P8.Fragment=c,P8.jsx=n,P8.jsxs=n,P8}var Ps;function hp(){return Ps||(Ps=1,Mc.exports=up()),Mc.exports}var r=hp(),wc={exports:{}},Z1={};var $s;function dp(){if($s)return Z1;$s=1;var t=Symbol.for("react.transitional.element"),c=Symbol.for("react.portal"),n=Symbol.for("react.fragment"),l=Symbol.for("react.strict_mode"),o=Symbol.for("react.profiler"),h=Symbol.for("react.consumer"),d=Symbol.for("react.context"),m=Symbol.for("react.forward_ref"),p=Symbol.for("react.suspense"),x=Symbol.for("react.memo"),g=Symbol.for("react.lazy"),b=Symbol.for("react.activity"),y=Symbol.iterator;function M(_){return _===null||typeof _!="object"?null:(_=y&&_[y]||_["@@iterator"],typeof _=="function"?_:null)}var H={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},L=Object.assign,C={};function B(_,G,l1){this.props=_,this.context=G,this.refs=C,this.updater=l1||H}B.prototype.isReactComponent={},B.prototype.setState=function(_,G){if(typeof _!="object"&&typeof _!="function"&&_!=null)throw Error("takes an object of state variables to update or a function which returns an object of state variables.");this.updater.enqueueSetState(this,_,G,"setState")},B.prototype.forceUpdate=function(_){this.updater.enqueueForceUpdate(this,_,"forceUpdate")};function S(){}S.prototype=B.prototype;function w(_,G,l1){this.props=_,this.context=G,this.refs=C,this.updater=l1||H}var j=w.prototype=new S;j.constructor=w,L(j,B.prototype),j.isPureReactComponent=!0;var E=Array.isArray;function k(){}var F={H:null,A:null,T:null,S:null},V=Object.prototype.hasOwnProperty;function N(_,G,l1){var Q=l1.ref;return{$$typeof:t,type:_,key:G,ref:Q!==void 0?Q:null,props:l1}}function q(_,G){return N(_.type,G,_.props)}function O(_){return typeof _=="object"&&_!==null&&_.$$typeof===t}function Z(_){var G={"=":"=0",":":"=2"};return"$"+_.replace(/[=:]/g,function(l1){return G[l1]})}var t1=/\/+/g;function Y(_,G){return typeof _=="object"&&_!==null&&_.key!=null?Z(""+_.key):G.toString(36)}function P(_){switch(_.status){case"fulfilled":return _.value;case"rejected":throw _.reason;default:switch(typeof _.status=="string"?_.then(k,k):(_.status="pending",_.then(function(G){_.status==="pending"&&(_.status="fulfilled",_.value=G)},function(G){_.status==="pending"&&(_.status="rejected",_.reason=G)})),_.status){case"fulfilled":return _.value;case"rejected":throw _.reason}}throw _}function T(_,G,l1,Q,a1){var r1=typeof _;(r1==="undefined"||r1==="boolean")&&(_=null);var e1=!1;if(_===null)e1=!0;else switch(r1){case"bigint":case"string":case"number":e1=!0;break;case"object":switch(_.$$typeof){case t:case c:e1=!0;break;case g:return e1=_._init,T(e1(_._payload),G,l1,Q,a1)}}if(e1)return a1=a1(_),e1=Q===""?"."+Y(_,0):Q,E(a1)?(l1="",e1!=null&&(l1=e1.replace(t1,"$&/")+"/"),T(a1,G,l1,"",function(T1){return T1})):a1!=null&&(O(a1)&&(a1=q(a1,l1+(a1.key==null||_&&_.key===a1.key?"":(""+a1.key).replace(t1,"$&/")+"/")+e1)),G.push(a1)),1;e1=0;var b1=Q===""?".":Q+":";if(E(_))for(var y1=0;y1<_.length;y1++)Q=_[y1],r1=b1+Y(Q,y1),e1+=T(Q,G,l1,r1,a1);else if(y1=M(_),typeof y1=="function")for(_=y1.call(_),y1=0;!(Q=_.next()).done;)Q=Q.value,r1=b1+Y(Q,y1++),e1+=T(Q,G,l1,r1,a1);else if(r1==="object"){if(typeof _.then=="function")return T(P(_),G,l1,Q,a1);throw G=String(_),Error("Objects are not valid as a React child (found: "+(G==="[object Object]"?"object with keys {"+Object.keys(_).join(", ")+"}":G)+"). If you meant to render a collection of children, use an array instead.")}return e1}function U(_,G,l1){if(_==null)return _;var Q=[],a1=0;return T(_,Q,"","",function(r1){return G.call(l1,r1,a1++)}),Q}function I(_){if(_._status===-1){var G=_._result;G=G(),G.then(function(l1){(_._status===0||_._status===-1)&&(_._status=1,_._result=l1)},function(l1){(_._status===0||_._status===-1)&&(_._status=2,_._result=l1)}),_._status===-1&&(_._status=0,_._result=G)}if(_._status===1)return _._result.default;throw _._result}var n1=typeof reportError=="function"?reportError:function(_){if(typeof window=="object"&&typeof window.ErrorEvent=="function"){var G=new window.ErrorEvent("error",{bubbles:!0,cancelable:!0,message:typeof _=="object"&&_!==null&&typeof _.message=="string"?String(_.message):String(_),error:_});if(!window.dispatchEvent(G))return}else if(typeof process=="object"&&typeof process.emit=="function"){process.emit("uncaughtException",_);return}console.error(_)},v1={map:U,forEach:function(_,G,l1){U(_,function(){G.apply(this,arguments)},l1)},count:function(_){var G=0;return U(_,function(){G++}),G},toArray:function(_){return U(_,function(G){return G})||[]},only:function(_){if(!O(_))throw Error("React.Children.only expected to receive a single React element child.");return _}};return Z1.Activity=b,Z1.Children=v1,Z1.Component=B,Z1.Fragment=n,Z1.Profiler=o,Z1.PureComponent=w,Z1.StrictMode=l,Z1.Suspense=p,Z1.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE=F,Z1.__COMPILER_RUNTIME={__proto__:null,c:function(_){return F.H.useMemoCache(_)}},Z1.cache=function(_){return function(){return _.apply(null,arguments)}},Z1.cacheSignal=function(){return null},Z1.cloneElement=function(_,G,l1){if(_==null)throw Error("The argument must be a React element, but you passed "+_+".");var Q=L({},_.props),a1=_.key;if(G!=null)for(r1 in G.key!==void 0&&(a1=""+G.key),G)!V.call(G,r1)||r1==="key"||r1==="__self"||r1==="__source"||r1==="ref"&&G.ref===void 0||(Q[r1]=G[r1]);var r1=arguments.length-2;if(r1===1)Q.children=l1;else if(1>>1,v1=T[n1];if(0>>1;n1<_;){var G=2*(n1+1)-1,l1=T[G],Q=G+1,a1=T[Q];if(0>o(l1,I))Qo(a1,l1)?(T[n1]=a1,T[Q]=I,n1=Q):(T[n1]=l1,T[G]=I,n1=G);else if(Qo(a1,I))T[n1]=a1,T[Q]=I,n1=Q;else break t}}return U}function o(T,U){var I=T.sortIndex-U.sortIndex;return I!==0?I:T.id-U.id}if(t.unstable_now=void 0,typeof performance=="object"&&typeof performance.now=="function"){var h=performance;t.unstable_now=function(){return h.now()}}else{var d=Date,m=d.now();t.unstable_now=function(){return d.now()-m}}var p=[],x=[],g=1,b=null,y=3,M=!1,H=!1,L=!1,C=!1,B=typeof setTimeout=="function"?setTimeout:null,S=typeof clearTimeout=="function"?clearTimeout:null,w=typeof setImmediate<"u"?setImmediate:null;function j(T){for(var U=n(x);U!==null;){if(U.callback===null)l(x);else if(U.startTime<=T)l(x),U.sortIndex=U.expirationTime,c(p,U);else break;U=n(x)}}function E(T){if(L=!1,j(T),!H)if(n(p)!==null)H=!0,k||(k=!0,Z());else{var U=n(x);U!==null&&P(E,U.startTime-T)}}var k=!1,F=-1,V=5,N=-1;function q(){return C?!0:!(t.unstable_now()-NT&&q());){var n1=b.callback;if(typeof n1=="function"){b.callback=null,y=b.priorityLevel;var v1=n1(b.expirationTime<=T);if(T=t.unstable_now(),typeof v1=="function"){b.callback=v1,j(T),U=!0;break e}b===n(p)&&l(p),j(T)}else l(p);b=n(p)}if(b!==null)U=!0;else{var _=n(x);_!==null&&P(E,_.startTime-T),U=!1}}break t}finally{b=null,y=I,M=!1}U=void 0}}finally{U?Z():k=!1}}}var Z;if(typeof w=="function")Z=function(){w(O)};else if(typeof MessageChannel<"u"){var t1=new MessageChannel,Y=t1.port2;t1.port1.onmessage=O,Z=function(){Y.postMessage(null)}}else Z=function(){B(O,0)};function P(T,U){F=B(function(){T(t.unstable_now())},U)}t.unstable_IdlePriority=5,t.unstable_ImmediatePriority=1,t.unstable_LowPriority=4,t.unstable_NormalPriority=3,t.unstable_Profiling=null,t.unstable_UserBlockingPriority=2,t.unstable_cancelCallback=function(T){T.callback=null},t.unstable_forceFrameRate=function(T){0>T||125n1?(T.sortIndex=I,c(x,T),n(p)===null&&T===n(x)&&(L?(S(F),F=-1):L=!0,P(E,I-n1))):(T.sortIndex=v1,c(p,T),H||M||(H=!0,k||(k=!0,Z()))),T},t.unstable_shouldYield=q,t.unstable_wrapCallback=function(T){var U=y;return function(){var I=y;y=U;try{return T.apply(this,arguments)}finally{y=I}}}})(Ac)),Ac}var Ys;function mp(){return Ys||(Ys=1,Sc.exports=fp()),Sc.exports}var Hc={exports:{}},W2={};var Ks;function vp(){if(Ks)return W2;Ks=1;var t=Wa();function c(p){var x="https://react.dev/errors/"+p;if(1"u"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!="function"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(t)}catch(c){console.error(c)}}return t(),Hc.exports=vp(),Hc.exports}var Xs;function pp(){if(Xs)return $8;Xs=1;var t=mp(),c=Wa(),n=th();function l(e){var a="https://react.dev/errors/"+e;if(1v1||(e.current=n1[v1],n1[v1]=null,v1--)}function l1(e,a){v1++,n1[v1]=e.current,e.current=a}var Q=_(null),a1=_(null),r1=_(null),e1=_(null);function b1(e,a){switch(l1(r1,a),l1(a1,e),l1(Q,null),a.nodeType){case 9:case 11:e=(e=a.documentElement)&&(e=e.namespaceURI)?hs(e):0;break;default:if(e=a.tagName,a=a.namespaceURI)a=hs(a),e=ds(a,e);else switch(e){case"svg":e=1;break;case"math":e=2;break;default:e=0}}G(Q),l1(Q,e)}function y1(){G(Q),G(a1),G(r1)}function T1(e){e.memoizedState!==null&&l1(e1,e);var a=Q.current,i=ds(a,e.type);a!==i&&(l1(a1,e),l1(Q,i))}function _1(e){a1.current===e&&(G(Q),G(a1)),e1.current===e&&(G(e1),D8._currentValue=I)}var P1,n2;function U1(e){if(P1===void 0)try{throw Error()}catch(i){var a=i.stack.trim().match(/\n( *(at )?)/);P1=a&&a[1]||"",n2=-1)":-1v||D[o]!==J[v]){var h1=` -`+D[o].replace(" at new "," at ");return e.displayName&&h1.includes("")&&(h1=h1.replace("",e.displayName)),h1}while(1<=o&&0<=v);break}}}finally{H1=!1,Error.prepareStackTrace=l}return(l=e?e.displayName||e.name:"")?U1(l):""}function C1(e,a){switch(e.tag){case 26:case 27:case 5:return U1(e.type);case 16:return U1("Lazy");case 13:return e.child!==a&&a!==null?U1("Suspense Fallback"):U1("Suspense");case 19:return U1("SuspenseList");case 0:case 15:return x1(e.type,!1);case 11:return x1(e.type.render,!1);case 1:return x1(e.type,!0);case 31:return U1("Activity");default:return""}}function R1(e){try{var a="",l=null;do a+=C1(e,l),l=e,e=e.return;while(e);return a}catch(o){return` -Error generating stack: `+o.message+` -`+o.stack}}var J1=Object.prototype.hasOwnProperty,j1=t.unstable_scheduleCallback,q1=t.unstable_cancelCallback,z1=t.unstable_shouldYield,L1=t.unstable_requestPaint,i1=t.unstable_now,M1=t.unstable_getCurrentPriorityLevel,p1=t.unstable_ImmediatePriority,V1=t.unstable_UserBlockingPriority,s1=t.unstable_NormalPriority,w1=t.unstable_LowPriority,g1=t.unstable_IdlePriority,Q1=t.log,$1=t.unstable_setDisableYieldValue,u1=null,A1=null;function B1(e){if(typeof Q1=="function"&&$1(e),A1&&typeof A1.setStrictMode=="function")try{A1.setStrictMode(u1,e)}catch{}}var x2=Math.clz32?Math.clz32:I4,S3=Math.log,W4=Math.LN2;function I4(e){return e>>>=0,e===0?32:31-(S3(e)/W4|0)|0}var O6=256,E1=262144,f2=4194304;function o2(e){var a=e&42;if(a!==0)return a;switch(e&-e){case 1:return 1;case 2:return 2;case 4:return 4;case 8:return 8;case 16:return 16;case 32:return 32;case 64:return 64;case 128:return 128;case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:return e&261888;case 262144:case 524288:case 1048576:case 2097152:return e&3932160;case 4194304:case 8388608:case 16777216:case 33554432:return e&62914560;case 67108864:return 67108864;case 134217728:return 134217728;case 268435456:return 268435456;case 536870912:return 536870912;case 1073741824:return 0;default:return e}}function t2(e,a,l){var o=e.pendingLanes;if(o===0)return 0;var v=0,z=e.suspendedLanes,A=e.pingedLanes;e=e.warmLanes;var R=o&134217727;return R!==0?(o=R&~z,o!==0?v=o2(o):(A&=R,A!==0?v=o2(A):l||(l=R&~e,l!==0&&(v=o2(l))))):(R=o&~z,R!==0?v=o2(R):A!==0?v=o2(A):l||(l=o&~e,l!==0&&(v=o2(l)))),v===0?0:a!==0&&a!==v&&(a&z)===0&&(z=v&-v,l=a&-a,z>=l||z===32&&(l&4194048)!==0)?a:v}function r2(e,a){return(e.pendingLanes&~(e.suspendedLanes&~e.pingedLanes)&a)===0}function o4(e,a){switch(e){case 1:case 2:case 4:case 8:case 64:return a+250;case 16:case 32:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:return a+5e3;case 4194304:case 8388608:case 16777216:case 33554432:return-1;case 67108864:case 134217728:case 268435456:case 536870912:case 1073741824:return-1;default:return-1}}function A3(){var e=f2;return f2<<=1,(f2&62914560)===0&&(f2=4194304),e}function H3(e){for(var a=[],l=0;31>l;l++)a.push(e);return a}function C2(e,a){e.pendingLanes|=a,a!==268435456&&(e.suspendedLanes=0,e.pingedLanes=0,e.warmLanes=0)}function s6(e,a,l,o,v,z){var A=e.pendingLanes;e.pendingLanes=l,e.suspendedLanes=0,e.pingedLanes=0,e.warmLanes=0,e.expiredLanes&=l,e.entangledLanes&=l,e.errorRecoveryDisabledLanes&=l,e.shellSuspendCounter=0;var R=e.entanglements,D=e.expirationTimes,J=e.hiddenUpdates;for(l=A&~l;0"u")return null;try{return e.activeElement||e.body}catch{return e.body}}var Qf=/[\n"\\]/g;function x4(e){return e.replace(Qf,function(a){return"\\"+a.charCodeAt(0).toString(16)+" "})}function f7(e,a,l,o,v,z,A,R){e.name="",A!=null&&typeof A!="function"&&typeof A!="symbol"&&typeof A!="boolean"?e.type=A:e.removeAttribute("type"),a!=null?A==="number"?(a===0&&e.value===""||e.value!=a)&&(e.value=""+g4(a)):e.value!==""+g4(a)&&(e.value=""+g4(a)):A!=="submit"&&A!=="reset"||e.removeAttribute("value"),a!=null?m7(e,A,g4(a)):l!=null?m7(e,A,g4(l)):o!=null&&e.removeAttribute("value"),v==null&&z!=null&&(e.defaultChecked=!!z),v!=null&&(e.checked=v&&typeof v!="function"&&typeof v!="symbol"),R!=null&&typeof R!="function"&&typeof R!="symbol"&&typeof R!="boolean"?e.name=""+g4(R):e.removeAttribute("name")}function cr(e,a,l,o,v,z,A,R){if(z!=null&&typeof z!="function"&&typeof z!="symbol"&&typeof z!="boolean"&&(e.type=z),a!=null||l!=null){if(!(z!=="submit"&&z!=="reset"||a!=null)){d7(e);return}l=l!=null?""+g4(l):"",a=a!=null?""+g4(a):l,R||a===e.value||(e.value=a),e.defaultValue=a}o=o??v,o=typeof o!="function"&&typeof o!="symbol"&&!!o,e.checked=R?e.checked:!!o,e.defaultChecked=!!o,A!=null&&typeof A!="function"&&typeof A!="symbol"&&typeof A!="boolean"&&(e.name=A),d7(e)}function m7(e,a,l){a==="number"&&N5(e.ownerDocument)===e||e.defaultValue===""+l||(e.defaultValue=""+l)}function G6(e,a,l,o){if(e=e.options,a){a={};for(var v=0;v"u"||typeof window.document>"u"||typeof window.document.createElement>"u"),z7=!1;if(e3)try{var a8={};Object.defineProperty(a8,"passive",{get:function(){z7=!0}}),window.addEventListener("test",a8,a8),window.removeEventListener("test",a8,a8)}catch{z7=!1}var V3=null,b7=null,F5=null;function or(){if(F5)return F5;var e,a=b7,l=a.length,o,v="value"in V3?V3.value:V3.textContent,z=v.length;for(e=0;e=l8),vr=" ",pr=!1;function gr(e,a){switch(e){case"keyup":return Cm.indexOf(a.keyCode)!==-1;case"keydown":return a.keyCode!==229;case"keypress":case"mousedown":case"focusout":return!0;default:return!1}}function xr(e){return e=e.detail,typeof e=="object"&&"data"in e?e.data:null}var X6=!1;function Am(e,a){switch(e){case"compositionend":return xr(a);case"keypress":return a.which!==32?null:(pr=!0,vr);case"textInput":return e=a.data,e===vr&&pr?null:e;default:return null}}function Hm(e,a){if(X6)return e==="compositionend"||!S7&&gr(e,a)?(e=or(),F5=b7=V3=null,X6=!1,e):null;switch(e){case"paste":return null;case"keypress":if(!(a.ctrlKey||a.altKey||a.metaKey)||a.ctrlKey&&a.altKey){if(a.char&&1=a)return{node:l,offset:a-e};e=o}t:{for(;l;){if(l.nextSibling){l=l.nextSibling;break t}l=l.parentNode}l=void 0}l=Ar(l)}}function Lr(e,a){return e&&a?e===a?!0:e&&e.nodeType===3?!1:a&&a.nodeType===3?Lr(e,a.parentNode):"contains"in e?e.contains(a):e.compareDocumentPosition?!!(e.compareDocumentPosition(a)&16):!1:!1}function Vr(e){e=e!=null&&e.ownerDocument!=null&&e.ownerDocument.defaultView!=null?e.ownerDocument.defaultView:window;for(var a=N5(e.document);a instanceof e.HTMLIFrameElement;){try{var l=typeof a.contentWindow.location.href=="string"}catch{l=!1}if(l)e=a.contentWindow;else break;a=N5(e.document)}return a}function L7(e){var a=e&&e.nodeName&&e.nodeName.toLowerCase();return a&&(a==="input"&&(e.type==="text"||e.type==="search"||e.type==="tel"||e.type==="url"||e.type==="password")||a==="textarea"||e.contentEditable==="true")}var Rm=e3&&"documentMode"in document&&11>=document.documentMode,W6=null,V7=null,u8=null,B7=!1;function Br(e,a,l){var o=l.window===l?l.document:l.nodeType===9?l:l.ownerDocument;B7||W6==null||W6!==N5(o)||(o=W6,"selectionStart"in o&&L7(o)?o={start:o.selectionStart,end:o.selectionEnd}:(o=(o.ownerDocument&&o.ownerDocument.defaultView||window).getSelection(),o={anchorNode:o.anchorNode,anchorOffset:o.anchorOffset,focusNode:o.focusNode,focusOffset:o.focusOffset}),u8&&o8(u8,o)||(u8=o,o=Ht(V7,"onSelect"),0>=A,v-=A,P4=1<<32-x2(a)+v|l<Y1?(c2=k1,k1=null):c2=k1.sibling;var i2=c1(K,k1,W[Y1],d1);if(i2===null){k1===null&&(k1=c2);break}e&&k1&&i2.alternate===null&&a(K,k1),$=z(i2,$,Y1),l2===null?F1=i2:l2.sibling=i2,l2=i2,k1=c2}if(Y1===W.length)return l(K,k1),a2&&a3(K,Y1),F1;if(k1===null){for(;Y1Y1?(c2=k1,k1=null):c2=k1.sibling;var X3=c1(K,k1,i2.value,d1);if(X3===null){k1===null&&(k1=c2);break}e&&k1&&X3.alternate===null&&a(K,k1),$=z(X3,$,Y1),l2===null?F1=X3:l2.sibling=X3,l2=X3,k1=c2}if(i2.done)return l(K,k1),a2&&a3(K,Y1),F1;if(k1===null){for(;!i2.done;Y1++,i2=W.next())i2=f1(K,i2.value,d1),i2!==null&&($=z(i2,$,Y1),l2===null?F1=i2:l2.sibling=i2,l2=i2);return a2&&a3(K,Y1),F1}for(k1=o(k1);!i2.done;Y1++,i2=W.next())i2=o1(k1,K,Y1,i2.value,d1),i2!==null&&(e&&i2.alternate!==null&&k1.delete(i2.key===null?Y1:i2.key),$=z(i2,$,Y1),l2===null?F1=i2:l2.sibling=i2,l2=i2);return e&&k1.forEach(function(ep){return a(K,ep)}),a2&&a3(K,Y1),F1}function p2(K,$,W,d1){if(typeof W=="object"&&W!==null&&W.type===L&&W.key===null&&(W=W.props.children),typeof W=="object"&&W!==null){switch(W.$$typeof){case M:t:{for(var F1=W.key;$!==null;){if($.key===F1){if(F1=W.type,F1===L){if($.tag===7){l(K,$.sibling),d1=v($,W.props.children),d1.return=K,K=d1;break t}}else if($.elementType===F1||typeof F1=="object"&&F1!==null&&F1.$$typeof===V&&z6(F1)===$.type){l(K,$.sibling),d1=v($,W.props),p8(d1,W),d1.return=K,K=d1;break t}l(K,$);break}else a(K,$);$=$.sibling}W.type===L?(d1=m6(W.props.children,K.mode,d1,W.key),d1.return=K,K=d1):(d1=P5(W.type,W.key,W.props,null,K.mode,d1),p8(d1,W),d1.return=K,K=d1)}return A(K);case H:t:{for(F1=W.key;$!==null;){if($.key===F1)if($.tag===4&&$.stateNode.containerInfo===W.containerInfo&&$.stateNode.implementation===W.implementation){l(K,$.sibling),d1=v($,W.children||[]),d1.return=K,K=d1;break t}else{l(K,$);break}else a(K,$);$=$.sibling}d1=T7(W,K.mode,d1),d1.return=K,K=d1}return A(K);case V:return W=z6(W),p2(K,$,W,d1)}if(P(W))return N1(K,$,W,d1);if(Z(W)){if(F1=Z(W),typeof F1!="function")throw Error(i(150));return W=F1.call(W),D1(K,$,W,d1)}if(typeof W.then=="function")return p2(K,$,X5(W),d1);if(W.$$typeof===w)return p2(K,$,G5(K,W),d1);W5(K,W)}return typeof W=="string"&&W!==""||typeof W=="number"||typeof W=="bigint"?(W=""+W,$!==null&&$.tag===6?(l(K,$.sibling),d1=v($,W),d1.return=K,K=d1):(l(K,$),d1=E7(W,K.mode,d1),d1.return=K,K=d1),A(K)):l(K,$)}return function(K,$,W,d1){try{v8=0;var F1=p2(K,$,W,d1);return o0=null,F1}catch(k1){if(k1===s0||k1===K5)throw k1;var l2=h4(29,k1,null,K.mode);return l2.lanes=d1,l2.return=K,l2}finally{}}}var y6=Jr(!0),tl=Jr(!1),F3=!1;function K7(e){e.updateQueue={baseState:e.memoizedState,firstBaseUpdate:null,lastBaseUpdate:null,shared:{pending:null,lanes:0,hiddenCallbacks:null},callbacks:null}}function Q7(e,a){e=e.updateQueue,a.updateQueue===e&&(a.updateQueue={baseState:e.baseState,firstBaseUpdate:e.firstBaseUpdate,lastBaseUpdate:e.lastBaseUpdate,shared:e.shared,callbacks:null})}function R3(e){return{lane:e,tag:0,payload:null,callback:null,next:null}}function E3(e,a,l){var o=e.updateQueue;if(o===null)return null;if(o=o.shared,(u2&2)!==0){var v=o.pending;return v===null?a.next=a:(a.next=v.next,v.next=a),o.pending=a,a=I5(e),Tr(e,null,l),a}return U5(e,o,a,l),I5(e)}function g8(e,a,l){if(a=a.updateQueue,a!==null&&(a=a.shared,(l&4194048)!==0)){var o=a.lanes;o&=e.pendingLanes,l|=o,a.lanes=l,$n(e,l)}}function X7(e,a){var l=e.updateQueue,o=e.alternate;if(o!==null&&(o=o.updateQueue,l===o)){var v=null,z=null;if(l=l.firstBaseUpdate,l!==null){do{var A={lane:l.lane,tag:l.tag,payload:l.payload,callback:null,next:null};z===null?v=z=A:z=z.next=A,l=l.next}while(l!==null);z===null?v=z=a:z=z.next=a}else v=z=a;l={baseState:o.baseState,firstBaseUpdate:v,lastBaseUpdate:z,shared:o.shared,callbacks:o.callbacks},e.updateQueue=l;return}e=l.lastBaseUpdate,e===null?l.firstBaseUpdate=a:e.next=a,l.lastBaseUpdate=a}var W7=!1;function x8(){if(W7){var e=i0;if(e!==null)throw e}}function z8(e,a,l,o){W7=!1;var v=e.updateQueue;F3=!1;var z=v.firstBaseUpdate,A=v.lastBaseUpdate,R=v.shared.pending;if(R!==null){v.shared.pending=null;var D=R,J=D.next;D.next=null,A===null?z=J:A.next=J,A=D;var h1=e.alternate;h1!==null&&(h1=h1.updateQueue,R=h1.lastBaseUpdate,R!==A&&(R===null?h1.firstBaseUpdate=J:R.next=J,h1.lastBaseUpdate=D))}if(z!==null){var f1=v.baseState;A=0,h1=J=D=null,R=z;do{var c1=R.lane&-536870913,o1=c1!==R.lane;if(o1?(e2&c1)===c1:(o&c1)===c1){c1!==0&&c1===l0&&(W7=!0),h1!==null&&(h1=h1.next={lane:0,tag:R.tag,payload:R.payload,callback:null,next:null});t:{var N1=e,D1=R;c1=a;var p2=l;switch(D1.tag){case 1:if(N1=D1.payload,typeof N1=="function"){f1=N1.call(p2,f1,c1);break t}f1=N1;break t;case 3:N1.flags=N1.flags&-65537|128;case 0:if(N1=D1.payload,c1=typeof N1=="function"?N1.call(p2,f1,c1):N1,c1==null)break t;f1=b({},f1,c1);break t;case 2:F3=!0}}c1=R.callback,c1!==null&&(e.flags|=64,o1&&(e.flags|=8192),o1=v.callbacks,o1===null?v.callbacks=[c1]:o1.push(c1))}else o1={lane:c1,tag:R.tag,payload:R.payload,callback:R.callback,next:null},h1===null?(J=h1=o1,D=f1):h1=h1.next=o1,A|=c1;if(R=R.next,R===null){if(R=v.shared.pending,R===null)break;o1=R,R=o1.next,o1.next=null,v.lastBaseUpdate=o1,v.shared.pending=null}}while(!0);h1===null&&(D=f1),v.baseState=D,v.firstBaseUpdate=J,v.lastBaseUpdate=h1,z===null&&(v.shared.lanes=0),O3|=A,e.lanes=A,e.memoizedState=f1}}function el(e,a){if(typeof e!="function")throw Error(i(191,e));e.call(a)}function cl(e,a){var l=e.callbacks;if(l!==null)for(e.callbacks=null,e=0;ez?z:8;var A=T.T,R={};T.T=R,g9(e,!1,a,l);try{var D=v(),J=T.S;if(J!==null&&J(R,D),D!==null&&typeof D=="object"&&typeof D.then=="function"){var h1=Pm(D,o);M8(e,a,h1,p4(e))}else M8(e,a,o,p4(e))}catch(f1){M8(e,a,{then:function(){},status:"rejected",reason:f1},p4())}finally{U.p=z,A!==null&&R.types!==null&&(A.types=R.types),T.T=A}}function Qm(){}function v9(e,a,l,o){if(e.tag!==5)throw Error(i(476));var v=Fl(e).queue;kl(e,v,a,I,l===null?Qm:function(){return Rl(e),l(o)})}function Fl(e){var a=e.memoizedState;if(a!==null)return a;a={memoizedState:I,baseState:I,baseQueue:null,queue:{pending:null,lanes:0,dispatch:null,lastRenderedReducer:i3,lastRenderedState:I},next:null};var l={};return a.next={memoizedState:l,baseState:l,baseQueue:null,queue:{pending:null,lanes:0,dispatch:null,lastRenderedReducer:i3,lastRenderedState:l},next:null},e.memoizedState=a,e=e.alternate,e!==null&&(e.memoizedState=a),a}function Rl(e){var a=Fl(e);a.next===null&&(a=e.alternate.memoizedState),M8(e,a.next.queue,{},p4())}function p9(){return K2(q8)}function El(){return N2().memoizedState}function Tl(){return N2().memoizedState}function Xm(e){for(var a=e.return;a!==null;){switch(a.tag){case 24:case 3:var l=p4();e=R3(l);var o=E3(a,e,l);o!==null&&(i4(o,a,l),g8(o,a,l)),a={cache:$7()},e.payload=a;return}a=a.return}}function Wm(e,a,l){var o=p4();l={lane:o,revertLane:0,gesture:null,action:l,hasEagerState:!1,eagerState:null,next:null},st(e)?ql(a,l):(l=F7(e,a,l,o),l!==null&&(i4(l,e,o),Dl(l,a,o)))}function _l(e,a,l){var o=p4();M8(e,a,l,o)}function M8(e,a,l,o){var v={lane:o,revertLane:0,gesture:null,action:l,hasEagerState:!1,eagerState:null,next:null};if(st(e))ql(a,v);else{var z=e.alternate;if(e.lanes===0&&(z===null||z.lanes===0)&&(z=a.lastRenderedReducer,z!==null))try{var A=a.lastRenderedState,R=z(A,l);if(v.hasEagerState=!0,v.eagerState=R,u4(R,A))return U5(e,a,v,0),g2===null&&O5(),!1}catch{}finally{}if(l=F7(e,a,v,o),l!==null)return i4(l,e,o),Dl(l,a,o),!0}return!1}function g9(e,a,l,o){if(o={lane:2,revertLane:K9(),gesture:null,action:o,hasEagerState:!1,eagerState:null,next:null},st(e)){if(a)throw Error(i(479))}else a=F7(e,l,o,2),a!==null&&i4(a,e,2)}function st(e){var a=e.alternate;return e===G1||a!==null&&a===G1}function ql(e,a){h0=et=!0;var l=e.pending;l===null?a.next=a:(a.next=l.next,l.next=a),e.pending=a}function Dl(e,a,l){if((l&4194048)!==0){var o=a.lanes;o&=e.pendingLanes,l|=o,a.lanes=l,$n(e,l)}}var w8={readContext:K2,use:nt,useCallback:L2,useContext:L2,useEffect:L2,useImperativeHandle:L2,useLayoutEffect:L2,useInsertionEffect:L2,useMemo:L2,useReducer:L2,useRef:L2,useState:L2,useDebugValue:L2,useDeferredValue:L2,useTransition:L2,useSyncExternalStore:L2,useId:L2,useHostTransitionStatus:L2,useFormState:L2,useActionState:L2,useOptimistic:L2,useMemoCache:L2,useCacheRefresh:L2};w8.useEffectEvent=L2;var Ol={readContext:K2,use:nt,useCallback:function(e,a){return t4().memoizedState=[e,a===void 0?null:a],e},useContext:K2,useEffect:Cl,useImperativeHandle:function(e,a,l){l=l!=null?l.concat([e]):null,lt(4194308,4,Ll.bind(null,a,e),l)},useLayoutEffect:function(e,a){return lt(4194308,4,e,a)},useInsertionEffect:function(e,a){lt(4,2,e,a)},useMemo:function(e,a){var l=t4();a=a===void 0?null:a;var o=e();if(M6){B1(!0);try{e()}finally{B1(!1)}}return l.memoizedState=[o,a],o},useReducer:function(e,a,l){var o=t4();if(l!==void 0){var v=l(a);if(M6){B1(!0);try{l(a)}finally{B1(!1)}}}else v=a;return o.memoizedState=o.baseState=v,e={pending:null,lanes:0,dispatch:null,lastRenderedReducer:e,lastRenderedState:v},o.queue=e,e=e.dispatch=Wm.bind(null,G1,e),[o.memoizedState,e]},useRef:function(e){var a=t4();return e={current:e},a.memoizedState=e},useState:function(e){e=u9(e);var a=e.queue,l=_l.bind(null,G1,a);return a.dispatch=l,[e.memoizedState,l]},useDebugValue:f9,useDeferredValue:function(e,a){var l=t4();return m9(l,e,a)},useTransition:function(){var e=u9(!1);return e=kl.bind(null,G1,e.queue,!0,!1),t4().memoizedState=e,[!1,e]},useSyncExternalStore:function(e,a,l){var o=G1,v=t4();if(a2){if(l===void 0)throw Error(i(407));l=l()}else{if(l=a(),g2===null)throw Error(i(349));(e2&127)!==0||sl(o,a,l)}v.memoizedState=l;var z={value:l,getSnapshot:a};return v.queue=z,Cl(ul.bind(null,o,z,e),[e]),o.flags|=2048,f0(9,{destroy:void 0},ol.bind(null,o,z,l,a),null),l},useId:function(){var e=t4(),a=g2.identifierPrefix;if(a2){var l=$4,o=P4;l=(o&~(1<<32-x2(o)-1)).toString(32)+l,a="_"+a+"R_"+l,l=ct++,0<\/script>",z=z.removeChild(z.firstChild);break;case"select":z=typeof o.is=="string"?A.createElement("select",{is:o.is}):A.createElement("select"),o.multiple?z.multiple=!0:o.size&&(z.size=o.size);break;default:z=typeof o.is=="string"?A.createElement(v,{is:o.is}):A.createElement(v)}}z[G2]=a,z[e4]=o;t:for(A=a.child;A!==null;){if(A.tag===5||A.tag===6)z.appendChild(A.stateNode);else if(A.tag!==4&&A.tag!==27&&A.child!==null){A.child.return=A,A=A.child;continue}if(A===a)break t;for(;A.sibling===null;){if(A.return===null||A.return===a)break t;A=A.return}A.sibling.return=A.return,A=A.sibling}a.stateNode=z;t:switch(X2(z,v,o),v){case"button":case"input":case"select":case"textarea":o=!!o.autoFocus;break t;case"img":o=!0;break t;default:o=!1}o&&o3(a)}}return b2(a),j9(a,a.type,e===null?null:e.memoizedProps,a.pendingProps,l),null;case 6:if(e&&a.stateNode!=null)e.memoizedProps!==o&&o3(a);else{if(typeof o!="string"&&a.stateNode===null)throw Error(i(166));if(e=r1.current,n0(a)){if(e=a.stateNode,l=a.memoizedProps,o=null,v=Y2,v!==null)switch(v.tag){case 27:case 5:o=v.memoizedProps}e[G2]=a,e=!!(e.nodeValue===l||o!==null&&o.suppressHydrationWarning===!0||ls(e.nodeValue,l)),e||N3(a,!0)}else e=Lt(e).createTextNode(o),e[G2]=a,a.stateNode=e}return b2(a),null;case 31:if(l=a.memoizedState,e===null||e.memoizedState!==null){if(o=n0(a),l!==null){if(e===null){if(!o)throw Error(i(318));if(e=a.memoizedState,e=e!==null?e.dehydrated:null,!e)throw Error(i(557));e[G2]=a}else v6(),(a.flags&128)===0&&(a.memoizedState=null),a.flags|=4;b2(a),e=!1}else l=O7(),e!==null&&e.memoizedState!==null&&(e.memoizedState.hydrationErrors=l),e=!0;if(!e)return a.flags&256?(f4(a),a):(f4(a),null);if((a.flags&128)!==0)throw Error(i(558))}return b2(a),null;case 13:if(o=a.memoizedState,e===null||e.memoizedState!==null&&e.memoizedState.dehydrated!==null){if(v=n0(a),o!==null&&o.dehydrated!==null){if(e===null){if(!v)throw Error(i(318));if(v=a.memoizedState,v=v!==null?v.dehydrated:null,!v)throw Error(i(317));v[G2]=a}else v6(),(a.flags&128)===0&&(a.memoizedState=null),a.flags|=4;b2(a),v=!1}else v=O7(),e!==null&&e.memoizedState!==null&&(e.memoizedState.hydrationErrors=v),v=!0;if(!v)return a.flags&256?(f4(a),a):(f4(a),null)}return f4(a),(a.flags&128)!==0?(a.lanes=l,a):(l=o!==null,e=e!==null&&e.memoizedState!==null,l&&(o=a.child,v=null,o.alternate!==null&&o.alternate.memoizedState!==null&&o.alternate.memoizedState.cachePool!==null&&(v=o.alternate.memoizedState.cachePool.pool),z=null,o.memoizedState!==null&&o.memoizedState.cachePool!==null&&(z=o.memoizedState.cachePool.pool),z!==v&&(o.flags|=2048)),l!==e&&l&&(a.child.flags|=8192),ft(a,a.updateQueue),b2(a),null);case 4:return y1(),e===null&&J9(a.stateNode.containerInfo),b2(a),null;case 10:return r3(a.type),b2(a),null;case 19:if(G(j2),o=a.memoizedState,o===null)return b2(a),null;if(v=(a.flags&128)!==0,z=o.rendering,z===null)if(v)S8(o,!1);else{if(V2!==0||e!==null&&(e.flags&128)!==0)for(e=a.child;e!==null;){if(z=tt(e),z!==null){for(a.flags|=128,S8(o,!1),e=z.updateQueue,a.updateQueue=e,ft(a,e),a.subtreeFlags=0,e=l,l=a.child;l!==null;)_r(l,e),l=l.sibling;return l1(j2,j2.current&1|2),a2&&a3(a,o.treeForkCount),a.child}e=e.sibling}o.tail!==null&&i1()>xt&&(a.flags|=128,v=!0,S8(o,!1),a.lanes=4194304)}else{if(!v)if(e=tt(z),e!==null){if(a.flags|=128,v=!0,e=e.updateQueue,a.updateQueue=e,ft(a,e),S8(o,!0),o.tail===null&&o.tailMode==="hidden"&&!z.alternate&&!a2)return b2(a),null}else 2*i1()-o.renderingStartTime>xt&&l!==536870912&&(a.flags|=128,v=!0,S8(o,!1),a.lanes=4194304);o.isBackwards?(z.sibling=a.child,a.child=z):(e=o.last,e!==null?e.sibling=z:a.child=z,o.last=z)}return o.tail!==null?(e=o.tail,o.rendering=e,o.tail=e.sibling,o.renderingStartTime=i1(),e.sibling=null,l=j2.current,l1(j2,v?l&1|2:l&1),a2&&a3(a,o.treeForkCount),e):(b2(a),null);case 22:case 23:return f4(a),t9(),o=a.memoizedState!==null,e!==null?e.memoizedState!==null!==o&&(a.flags|=8192):o&&(a.flags|=8192),o?(l&536870912)!==0&&(a.flags&128)===0&&(b2(a),a.subtreeFlags&6&&(a.flags|=8192)):b2(a),l=a.updateQueue,l!==null&&ft(a,l.retryQueue),l=null,e!==null&&e.memoizedState!==null&&e.memoizedState.cachePool!==null&&(l=e.memoizedState.cachePool.pool),o=null,a.memoizedState!==null&&a.memoizedState.cachePool!==null&&(o=a.memoizedState.cachePool.pool),o!==l&&(a.flags|=2048),e!==null&&G(x6),null;case 24:return l=null,e!==null&&(l=e.memoizedState.cache),a.memoizedState.cache!==l&&(a.flags|=2048),r3(F2),b2(a),null;case 25:return null;case 30:return null}throw Error(i(156,a.tag))}function av(e,a){switch(q7(a),a.tag){case 1:return e=a.flags,e&65536?(a.flags=e&-65537|128,a):null;case 3:return r3(F2),y1(),e=a.flags,(e&65536)!==0&&(e&128)===0?(a.flags=e&-65537|128,a):null;case 26:case 27:case 5:return _1(a),null;case 31:if(a.memoizedState!==null){if(f4(a),a.alternate===null)throw Error(i(340));v6()}return e=a.flags,e&65536?(a.flags=e&-65537|128,a):null;case 13:if(f4(a),e=a.memoizedState,e!==null&&e.dehydrated!==null){if(a.alternate===null)throw Error(i(340));v6()}return e=a.flags,e&65536?(a.flags=e&-65537|128,a):null;case 19:return G(j2),null;case 4:return y1(),null;case 10:return r3(a.type),null;case 22:case 23:return f4(a),t9(),e!==null&&G(x6),e=a.flags,e&65536?(a.flags=e&-65537|128,a):null;case 24:return r3(F2),null;case 25:return null;default:return null}}function hi(e,a){switch(q7(a),a.tag){case 3:r3(F2),y1();break;case 26:case 27:case 5:_1(a);break;case 4:y1();break;case 31:a.memoizedState!==null&&f4(a);break;case 13:f4(a);break;case 19:G(j2);break;case 10:r3(a.type);break;case 22:case 23:f4(a),t9(),e!==null&&G(x6);break;case 24:r3(F2)}}function A8(e,a){try{var l=a.updateQueue,o=l!==null?l.lastEffect:null;if(o!==null){var v=o.next;l=v;do{if((l.tag&e)===e){o=void 0;var z=l.create,A=l.inst;o=z(),A.destroy=o}l=l.next}while(l!==v)}}catch(R){d2(a,a.return,R)}}function q3(e,a,l){try{var o=a.updateQueue,v=o!==null?o.lastEffect:null;if(v!==null){var z=v.next;o=z;do{if((o.tag&e)===e){var A=o.inst,R=A.destroy;if(R!==void 0){A.destroy=void 0,v=a;var D=l,J=R;try{J()}catch(h1){d2(v,D,h1)}}}o=o.next}while(o!==z)}}catch(h1){d2(a,a.return,h1)}}function di(e){var a=e.updateQueue;if(a!==null){var l=e.stateNode;try{cl(a,l)}catch(o){d2(e,e.return,o)}}}function fi(e,a,l){l.props=w6(e.type,e.memoizedProps),l.state=e.memoizedState;try{l.componentWillUnmount()}catch(o){d2(e,a,o)}}function H8(e,a){try{var l=e.ref;if(l!==null){switch(e.tag){case 26:case 27:case 5:var o=e.stateNode;break;case 30:o=e.stateNode;break;default:o=e.stateNode}typeof l=="function"?e.refCleanup=l(o):l.current=o}}catch(v){d2(e,a,v)}}function Z4(e,a){var l=e.ref,o=e.refCleanup;if(l!==null)if(typeof o=="function")try{o()}catch(v){d2(e,a,v)}finally{e.refCleanup=null,e=e.alternate,e!=null&&(e.refCleanup=null)}else if(typeof l=="function")try{l(null)}catch(v){d2(e,a,v)}else l.current=null}function mi(e){var a=e.type,l=e.memoizedProps,o=e.stateNode;try{t:switch(a){case"button":case"input":case"select":case"textarea":l.autoFocus&&o.focus();break t;case"img":l.src?o.src=l.src:l.srcSet&&(o.srcset=l.srcSet)}}catch(v){d2(e,e.return,v)}}function N9(e,a,l){try{var o=e.stateNode;Sv(o,e.type,l,a),o[e4]=a}catch(v){d2(e,e.return,v)}}function vi(e){return e.tag===5||e.tag===3||e.tag===26||e.tag===27&&Z3(e.type)||e.tag===4}function k9(e){t:for(;;){for(;e.sibling===null;){if(e.return===null||vi(e.return))return null;e=e.return}for(e.sibling.return=e.return,e=e.sibling;e.tag!==5&&e.tag!==6&&e.tag!==18;){if(e.tag===27&&Z3(e.type)||e.flags&2||e.child===null||e.tag===4)continue t;e.child.return=e,e=e.child}if(!(e.flags&2))return e.stateNode}}function F9(e,a,l){var o=e.tag;if(o===5||o===6)e=e.stateNode,a?(l.nodeType===9?l.body:l.nodeName==="HTML"?l.ownerDocument.body:l).insertBefore(e,a):(a=l.nodeType===9?l.body:l.nodeName==="HTML"?l.ownerDocument.body:l,a.appendChild(e),l=l._reactRootContainer,l!=null||a.onclick!==null||(a.onclick=t3));else if(o!==4&&(o===27&&Z3(e.type)&&(l=e.stateNode,a=null),e=e.child,e!==null))for(F9(e,a,l),e=e.sibling;e!==null;)F9(e,a,l),e=e.sibling}function mt(e,a,l){var o=e.tag;if(o===5||o===6)e=e.stateNode,a?l.insertBefore(e,a):l.appendChild(e);else if(o!==4&&(o===27&&Z3(e.type)&&(l=e.stateNode),e=e.child,e!==null))for(mt(e,a,l),e=e.sibling;e!==null;)mt(e,a,l),e=e.sibling}function pi(e){var a=e.stateNode,l=e.memoizedProps;try{for(var o=e.type,v=a.attributes;v.length;)a.removeAttributeNode(v[0]);X2(a,o,l),a[G2]=e,a[e4]=l}catch(z){d2(e,e.return,z)}}var u3=!1,T2=!1,R9=!1,gi=typeof WeakSet=="function"?WeakSet:Set,Z2=null;function nv(e,a){if(e=e.containerInfo,cc=Rt,e=Vr(e),L7(e)){if("selectionStart"in e)var l={start:e.selectionStart,end:e.selectionEnd};else t:{l=(l=e.ownerDocument)&&l.defaultView||window;var o=l.getSelection&&l.getSelection();if(o&&o.rangeCount!==0){l=o.anchorNode;var v=o.anchorOffset,z=o.focusNode;o=o.focusOffset;try{l.nodeType,z.nodeType}catch{l=null;break t}var A=0,R=-1,D=-1,J=0,h1=0,f1=e,c1=null;e:for(;;){for(var o1;f1!==l||v!==0&&f1.nodeType!==3||(R=A+v),f1!==z||o!==0&&f1.nodeType!==3||(D=A+o),f1.nodeType===3&&(A+=f1.nodeValue.length),(o1=f1.firstChild)!==null;)c1=f1,f1=o1;for(;;){if(f1===e)break e;if(c1===l&&++J===v&&(R=A),c1===z&&++h1===o&&(D=A),(o1=f1.nextSibling)!==null)break;f1=c1,c1=f1.parentNode}f1=o1}l=R===-1||D===-1?null:{start:R,end:D}}else l=null}l=l||{start:0,end:0}}else l=null;for(ac={focusedElem:e,selectionRange:l},Rt=!1,Z2=a;Z2!==null;)if(a=Z2,e=a.child,(a.subtreeFlags&1028)!==0&&e!==null)e.return=a,Z2=e;else for(;Z2!==null;){switch(a=Z2,z=a.alternate,e=a.flags,a.tag){case 0:if((e&4)!==0&&(e=a.updateQueue,e=e!==null?e.events:null,e!==null))for(l=0;l title"))),X2(z,o,l),z[G2]=e,$2(z),o=z;break t;case"link":var A=ws("link","href",v).get(o+(l.href||""));if(A){for(var R=0;Rp2&&(A=p2,p2=D1,D1=A);var K=Hr(R,D1),$=Hr(R,p2);if(K&&$&&(o1.rangeCount!==1||o1.anchorNode!==K.node||o1.anchorOffset!==K.offset||o1.focusNode!==$.node||o1.focusOffset!==$.offset)){var W=f1.createRange();W.setStart(K.node,K.offset),o1.removeAllRanges(),D1>p2?(o1.addRange(W),o1.extend($.node,$.offset)):(W.setEnd($.node,$.offset),o1.addRange(W))}}}}for(f1=[],o1=R;o1=o1.parentNode;)o1.nodeType===1&&f1.push({element:o1,left:o1.scrollLeft,top:o1.scrollTop});for(typeof R.focus=="function"&&R.focus(),R=0;Rl?32:l,T.T=null,l=U9,U9=null;var z=I3,A=v3;if(O2=0,x0=I3=null,v3=0,(u2&6)!==0)throw Error(i(331));var R=u2;if(u2|=4,Li(z.current),Si(z,z.current,A,l),u2=R,k8(0,!1),A1&&typeof A1.onPostCommitFiberRoot=="function")try{A1.onPostCommitFiberRoot(u1,z)}catch{}return!0}finally{U.p=v,T.T=o,Zi(e,a)}}function Yi(e,a,l){a=b4(l,a),a=y9(e.stateNode,a,2),e=E3(e,a,2),e!==null&&(C2(e,2),G4(e))}function d2(e,a,l){if(e.tag===3)Yi(e,e,l);else for(;a!==null;){if(a.tag===3){Yi(a,e,l);break}else if(a.tag===1){var o=a.stateNode;if(typeof a.type.getDerivedStateFromError=="function"||typeof o.componentDidCatch=="function"&&(U3===null||!U3.has(o))){e=b4(l,e),l=Kl(2),o=E3(a,l,2),o!==null&&(Ql(l,o,a,e),C2(o,2),G4(o));break}}a=a.return}}function Z9(e,a,l){var o=e.pingCache;if(o===null){o=e.pingCache=new iv;var v=new Set;o.set(a,v)}else v=o.get(a),v===void 0&&(v=new Set,o.set(a,v));v.has(l)||(_9=!0,v.add(l),e=dv.bind(null,e,a,l),a.then(e,e))}function dv(e,a,l){var o=e.pingCache;o!==null&&o.delete(a),e.pingedLanes|=e.suspendedLanes&l,e.warmLanes&=~l,g2===e&&(e2&l)===l&&(V2===4||V2===3&&(e2&62914560)===e2&&300>i1()-gt?(u2&2)===0&&z0(e,0):q9|=l,g0===e2&&(g0=0)),G4(e)}function Ki(e,a){a===0&&(a=A3()),e=f6(e,a),e!==null&&(C2(e,a),G4(e))}function fv(e){var a=e.memoizedState,l=0;a!==null&&(l=a.retryLane),Ki(e,l)}function mv(e,a){var l=0;switch(e.tag){case 31:case 13:var o=e.stateNode,v=e.memoizedState;v!==null&&(l=v.retryLane);break;case 19:o=e.stateNode;break;case 22:o=e.stateNode._retryCache;break;default:throw Error(i(314))}o!==null&&o.delete(a),Ki(e,l)}function vv(e,a){return j1(e,a)}var Ct=null,y0=null,G9=!1,St=!1,Y9=!1,$3=0;function G4(e){e!==y0&&e.next===null&&(y0===null?Ct=y0=e:y0=y0.next=e),St=!0,G9||(G9=!0,gv())}function k8(e,a){if(!Y9&&St){Y9=!0;do for(var l=!1,o=Ct;o!==null;){if(e!==0){var v=o.pendingLanes;if(v===0)var z=0;else{var A=o.suspendedLanes,R=o.pingedLanes;z=(1<<31-x2(42|e)+1)-1,z&=v&~(A&~R),z=z&201326741?z&201326741|1:z?z|2:0}z!==0&&(l=!0,Ji(o,z))}else z=e2,z=t2(o,o===g2?z:0,o.cancelPendingCommit!==null||o.timeoutHandle!==-1),(z&3)===0||r2(o,z)||(l=!0,Ji(o,z));o=o.next}while(l);Y9=!1}}function pv(){Qi()}function Qi(){St=G9=!1;var e=0;$3!==0&&Hv()&&(e=$3);for(var a=i1(),l=null,o=Ct;o!==null;){var v=o.next,z=Xi(o,a);z===0?(o.next=null,l===null?Ct=v:l.next=v,v===null&&(y0=l)):(l=o,(e!==0||(z&3)!==0)&&(St=!0)),o=v}O2!==0&&O2!==5||k8(e),$3!==0&&($3=0)}function Xi(e,a){for(var l=e.suspendedLanes,o=e.pingedLanes,v=e.expirationTimes,z=e.pendingLanes&-62914561;0R)break;var h1=D.transferSize,f1=D.initiatorType;h1&&is(f1)&&(D=D.responseEnd,A+=h1*(D"u"?null:document;function zs(e,a,l){var o=M0;if(o&&typeof a=="string"&&a){var v=x4(a);v='link[rel="'+e+'"][href="'+v+'"]',typeof l=="string"&&(v+='[crossorigin="'+l+'"]'),xs.has(v)||(xs.add(v),e={rel:e,crossOrigin:l,href:a},o.querySelector(v)===null&&(a=o.createElement("link"),X2(a,"link",e),$2(a),o.head.appendChild(a)))}}function Ev(e){p3.D(e),zs("dns-prefetch",e,null)}function Tv(e,a){p3.C(e,a),zs("preconnect",e,a)}function _v(e,a,l){p3.L(e,a,l);var o=M0;if(o&&e&&a){var v='link[rel="preload"][as="'+x4(a)+'"]';a==="image"&&l&&l.imageSrcSet?(v+='[imagesrcset="'+x4(l.imageSrcSet)+'"]',typeof l.imageSizes=="string"&&(v+='[imagesizes="'+x4(l.imageSizes)+'"]')):v+='[href="'+x4(e)+'"]';var z=v;switch(a){case"style":z=w0(e);break;case"script":z=C0(e)}A4.has(z)||(e=b({rel:"preload",href:a==="image"&&l&&l.imageSrcSet?void 0:e,as:a},l),A4.set(z,e),o.querySelector(v)!==null||a==="style"&&o.querySelector(T8(z))||a==="script"&&o.querySelector(_8(z))||(a=o.createElement("link"),X2(a,"link",e),$2(a),o.head.appendChild(a)))}}function qv(e,a){p3.m(e,a);var l=M0;if(l&&e){var o=a&&typeof a.as=="string"?a.as:"script",v='link[rel="modulepreload"][as="'+x4(o)+'"][href="'+x4(e)+'"]',z=v;switch(o){case"audioworklet":case"paintworklet":case"serviceworker":case"sharedworker":case"worker":case"script":z=C0(e)}if(!A4.has(z)&&(e=b({rel:"modulepreload",href:e},a),A4.set(z,e),l.querySelector(v)===null)){switch(o){case"audioworklet":case"paintworklet":case"serviceworker":case"sharedworker":case"worker":case"script":if(l.querySelector(_8(z)))return}o=l.createElement("link"),X2(o,"link",e),$2(o),l.head.appendChild(o)}}}function Dv(e,a,l){p3.S(e,a,l);var o=M0;if(o&&e){var v=$6(o).hoistableStyles,z=w0(e);a=a||"default";var A=v.get(z);if(!A){var R={loading:0,preload:null};if(A=o.querySelector(T8(z)))R.loading=5;else{e=b({rel:"stylesheet",href:e,"data-precedence":a},l),(l=A4.get(z))&&uc(e,l);var D=A=o.createElement("link");$2(D),X2(D,"link",e),D._p=new Promise(function(J,h1){D.onload=J,D.onerror=h1}),D.addEventListener("load",function(){R.loading|=1}),D.addEventListener("error",function(){R.loading|=2}),R.loading|=4,Bt(A,a,o)}A={type:"stylesheet",instance:A,count:1,state:R},v.set(z,A)}}}function Ov(e,a){p3.X(e,a);var l=M0;if(l&&e){var o=$6(l).hoistableScripts,v=C0(e),z=o.get(v);z||(z=l.querySelector(_8(v)),z||(e=b({src:e,async:!0},a),(a=A4.get(v))&&hc(e,a),z=l.createElement("script"),$2(z),X2(z,"link",e),l.head.appendChild(z)),z={type:"script",instance:z,count:1,state:null},o.set(v,z))}}function Uv(e,a){p3.M(e,a);var l=M0;if(l&&e){var o=$6(l).hoistableScripts,v=C0(e),z=o.get(v);z||(z=l.querySelector(_8(v)),z||(e=b({src:e,async:!0,type:"module"},a),(a=A4.get(v))&&hc(e,a),z=l.createElement("script"),$2(z),X2(z,"link",e),l.head.appendChild(z)),z={type:"script",instance:z,count:1,state:null},o.set(v,z))}}function bs(e,a,l,o){var v=(v=r1.current)?Vt(v):null;if(!v)throw Error(i(446));switch(e){case"meta":case"title":return null;case"style":return typeof l.precedence=="string"&&typeof l.href=="string"?(a=w0(l.href),l=$6(v).hoistableStyles,o=l.get(a),o||(o={type:"style",instance:null,count:0,state:null},l.set(a,o)),o):{type:"void",instance:null,count:0,state:null};case"link":if(l.rel==="stylesheet"&&typeof l.href=="string"&&typeof l.precedence=="string"){e=w0(l.href);var z=$6(v).hoistableStyles,A=z.get(e);if(A||(v=v.ownerDocument||v,A={type:"stylesheet",instance:null,count:0,state:{loading:0,preload:null}},z.set(e,A),(z=v.querySelector(T8(e)))&&!z._p&&(A.instance=z,A.state.loading=5),A4.has(e)||(l={rel:"preload",as:"style",href:l.href,crossOrigin:l.crossOrigin,integrity:l.integrity,media:l.media,hrefLang:l.hrefLang,referrerPolicy:l.referrerPolicy},A4.set(e,l),z||Iv(v,e,l,A.state))),a&&o===null)throw Error(i(528,""));return A}if(a&&o!==null)throw Error(i(529,""));return null;case"script":return a=l.async,l=l.src,typeof l=="string"&&a&&typeof a!="function"&&typeof a!="symbol"?(a=C0(l),l=$6(v).hoistableScripts,o=l.get(a),o||(o={type:"script",instance:null,count:0,state:null},l.set(a,o)),o):{type:"void",instance:null,count:0,state:null};default:throw Error(i(444,e))}}function w0(e){return'href="'+x4(e)+'"'}function T8(e){return'link[rel="stylesheet"]['+e+"]"}function ys(e){return b({},e,{"data-precedence":e.precedence,precedence:null})}function Iv(e,a,l,o){e.querySelector('link[rel="preload"][as="style"]['+a+"]")?o.loading=1:(a=e.createElement("link"),o.preload=a,a.addEventListener("load",function(){return o.loading|=1}),a.addEventListener("error",function(){return o.loading|=2}),X2(a,"link",l),$2(a),e.head.appendChild(a))}function C0(e){return'[src="'+x4(e)+'"]'}function _8(e){return"script[async]"+e}function Ms(e,a,l){if(a.count++,a.instance===null)switch(a.type){case"style":var o=e.querySelector('style[data-href~="'+x4(l.href)+'"]');if(o)return a.instance=o,$2(o),o;var v=b({},l,{"data-href":l.href,"data-precedence":l.precedence,href:null,precedence:null});return o=(e.ownerDocument||e).createElement("style"),$2(o),X2(o,"style",v),Bt(o,l.precedence,e),a.instance=o;case"stylesheet":v=w0(l.href);var z=e.querySelector(T8(v));if(z)return a.state.loading|=4,a.instance=z,$2(z),z;o=ys(l),(v=A4.get(v))&&uc(o,v),z=(e.ownerDocument||e).createElement("link"),$2(z);var A=z;return A._p=new Promise(function(R,D){A.onload=R,A.onerror=D}),X2(z,"link",o),a.state.loading|=4,Bt(z,l.precedence,e),a.instance=z;case"script":return z=C0(l.src),(v=e.querySelector(_8(z)))?(a.instance=v,$2(v),v):(o=l,(v=A4.get(z))&&(o=b({},l),hc(o,v)),e=e.ownerDocument||e,v=e.createElement("script"),$2(v),X2(v,"link",o),e.head.appendChild(v),a.instance=v);case"void":return null;default:throw Error(i(443,a.type))}else a.type==="stylesheet"&&(a.state.loading&4)===0&&(o=a.instance,a.state.loading|=4,Bt(o,l.precedence,e));return a.instance}function Bt(e,a,l){for(var o=l.querySelectorAll('link[rel="stylesheet"][data-precedence],style[data-precedence]'),v=o.length?o[o.length-1]:null,z=v,A=0;A title"):null)}function Pv(e,a,l){if(l===1||a.itemProp!=null)return!1;switch(e){case"meta":case"title":return!0;case"style":if(typeof a.precedence!="string"||typeof a.href!="string"||a.href==="")break;return!0;case"link":if(typeof a.rel!="string"||typeof a.href!="string"||a.href===""||a.onLoad||a.onError)break;switch(a.rel){case"stylesheet":return e=a.disabled,typeof a.precedence=="string"&&e==null;default:return!0}case"script":if(a.async&&typeof a.async!="function"&&typeof a.async!="symbol"&&!a.onLoad&&!a.onError&&a.src&&typeof a.src=="string")return!0}return!1}function Ss(e){return!(e.type==="stylesheet"&&(e.state.loading&3)===0)}function $v(e,a,l,o){if(l.type==="stylesheet"&&(typeof o.media!="string"||matchMedia(o.media).matches!==!1)&&(l.state.loading&4)===0){if(l.instance===null){var v=w0(o.href),z=a.querySelector(T8(v));if(z){a=z._p,a!==null&&typeof a=="object"&&typeof a.then=="function"&&(e.count++,e=Nt.bind(e),a.then(e,e)),l.state.loading|=4,l.instance=z,$2(z);return}z=a.ownerDocument||a,o=ys(o),(v=A4.get(v))&&uc(o,v),z=z.createElement("link"),$2(z);var A=z;A._p=new Promise(function(R,D){A.onload=R,A.onerror=D}),X2(z,"link",o),l.instance=z}e.stylesheets===null&&(e.stylesheets=new Map),e.stylesheets.set(l,a),(a=l.state.preload)&&(l.state.loading&3)===0&&(e.count++,l=Nt.bind(e),a.addEventListener("load",l),a.addEventListener("error",l))}}var dc=0;function Zv(e,a){return e.stylesheets&&e.count===0&&Ft(e,e.stylesheets),0dc?50:800)+a);return e.unsuspend=l,function(){e.unsuspend=null,clearTimeout(o),clearTimeout(v)}}:null}function Nt(){if(this.count--,this.count===0&&(this.imgCount===0||!this.waitingForImages)){if(this.stylesheets)Ft(this,this.stylesheets);else if(this.unsuspend){var e=this.unsuspend;this.unsuspend=null,e()}}}var kt=null;function Ft(e,a){e.stylesheets=null,e.unsuspend!==null&&(e.count++,kt=new Map,a.forEach(Gv,e),kt=null,Nt.call(e))}function Gv(e,a){if(!(a.state.loading&4)){var l=kt.get(e);if(l)var o=l.get(null);else{l=new Map,kt.set(e,l);for(var v=e.querySelectorAll("link[data-precedence],style[data-precedence]"),z=0;z"u"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!="function"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(t)}catch(c){console.error(c)}}return t(),yc.exports=hp(),yc.exports}var fp=dp();var Qs="popstate";function mp(t={}){function c(i,u){let{pathname:h,search:d,hash:m}=i.location;return da("",{pathname:h,search:d,hash:m},u.state&&u.state.usr||null,u.state&&u.state.key||"default")}function n(i,u){return typeof u=="string"?u:o5(u)}return pp(c,n,null,t)}function A2(t,c){if(t===!1||t===null||typeof t>"u")throw new Error(c)}function O4(t,c){if(!t){typeof console<"u"&&console.warn(c);try{throw new Error(c)}catch{}}}function vp(){return Math.random().toString(36).substring(2,10)}function Xs(t,c){return{usr:t.state,key:t.key,idx:c}}function da(t,c,n=null,i){return{pathname:typeof t=="string"?t:t.pathname,search:"",hash:"",...typeof c=="string"?$0(c):c,state:n,key:c&&c.key||i||vp()}}function o5({pathname:t="/",search:c="",hash:n=""}){return c&&c!=="?"&&(t+=c.charAt(0)==="?"?c:"?"+c),n&&n!=="#"&&(t+=n.charAt(0)==="#"?n:"#"+n),t}function $0(t){let c={};if(t){let n=t.indexOf("#");n>=0&&(c.hash=t.substring(n),t=t.substring(0,n));let i=t.indexOf("?");i>=0&&(c.search=t.substring(i),t=t.substring(0,i)),t&&(c.pathname=t)}return c}function pp(t,c,n,i={}){let{window:u=document.defaultView,v5Compat:h=!1}=i,d=u.history,m="POP",p=null,x=g();x==null&&(x=0,d.replaceState({...d.state,idx:x},""));function g(){return(d.state||{idx:null}).idx}function b(){m="POP";let C=g(),B=C==null?null:C-x;x=C,p&&p({action:m,location:L.location,delta:B})}function y(C,B){m="PUSH";let S=da(L.location,C,B);x=g()+1;let w=Xs(S,x),j=L.createHref(S);try{d.pushState(w,"",j)}catch(E){if(E instanceof DOMException&&E.name==="DataCloneError")throw E;u.location.assign(j)}h&&p&&p({action:m,location:L.location,delta:1})}function M(C,B){m="REPLACE";let S=da(L.location,C,B);x=g();let w=Xs(S,x),j=L.createHref(S);d.replaceState(w,"",j),h&&p&&p({action:m,location:L.location,delta:0})}function H(C){return gp(C)}let L={get action(){return m},get location(){return t(u,d)},listen(C){if(p)throw new Error("A history only accepts one active listener");return u.addEventListener(Qs,b),p=C,()=>{u.removeEventListener(Qs,b),p=null}},createHref(C){return c(u,C)},createURL:H,encodeLocation(C){let B=H(C);return{pathname:B.pathname,search:B.search,hash:B.hash}},push:y,replace:M,go(C){return d.go(C)}};return L}function gp(t,c=!1){let n="http://localhost";typeof window<"u"&&(n=window.location.origin!=="null"?window.location.origin:window.location.href),A2(n,"No window.location.(origin|href) available to create URL");let i=typeof t=="string"?t:o5(t);return i=i.replace(/ $/,"%20"),!c&&i.startsWith("//")&&(i=n+i),new URL(i,n)}function Qu(t,c,n="/"){return xp(t,c,n,!1)}function xp(t,c,n,i){let u=typeof c=="string"?$0(c):c,h=w3(u.pathname||"/",n);if(h==null)return null;let d=Xu(t);zp(d);let m=null;for(let p=0;m==null&&p{let g={relativePath:x===void 0?d.path||"":x,caseSensitive:d.caseSensitive===!0,childrenIndex:m,route:d};if(g.relativePath.startsWith("/")){if(!g.relativePath.startsWith(i)&&p)return;A2(g.relativePath.startsWith(i),`Absolute route path "${g.relativePath}" nested under path "${i}" is not valid. An absolute child route path must start with the combined path of all its parent routes.`),g.relativePath=g.relativePath.slice(i.length)}let b=y3([i,g.relativePath]),y=n.concat(g);d.children&&d.children.length>0&&(A2(d.index!==!0,`Index routes must not have child routes. Please remove all child routes from route path "${b}".`),Xu(d.children,c,y,b,p)),!(d.path==null&&!d.index)&&c.push({path:b,score:Ap(b,d.index),routesMeta:y})};return t.forEach((d,m)=>{if(d.path===""||!d.path?.includes("?"))h(d,m);else for(let p of Wu(d.path))h(d,m,!0,p)}),c}function Wu(t){let c=t.split("/");if(c.length===0)return[];let[n,...i]=c,u=n.endsWith("?"),h=n.replace(/\?$/,"");if(i.length===0)return u?[h,""]:[h];let d=Wu(i.join("/")),m=[];return m.push(...d.map(p=>p===""?h:[h,p].join("/"))),u&&m.push(...d),m.map(p=>t.startsWith("/")&&p===""?"/":p)}function zp(t){t.sort((c,n)=>c.score!==n.score?n.score-c.score:Hp(c.routesMeta.map(i=>i.childrenIndex),n.routesMeta.map(i=>i.childrenIndex)))}var bp=/^:[\w-]+$/,yp=3,Mp=2,wp=1,Cp=10,Sp=-2,Ws=t=>t==="*";function Ap(t,c){let n=t.split("/"),i=n.length;return n.some(Ws)&&(i+=Sp),c&&(i+=Mp),n.filter(u=>!Ws(u)).reduce((u,h)=>u+(bp.test(h)?yp:h===""?wp:Cp),i)}function Hp(t,c){return t.length===c.length&&t.slice(0,-1).every((i,u)=>i===c[u])?t[t.length-1]-c[c.length-1]:0}function Lp(t,c,n=!1){let{routesMeta:i}=t,u={},h="/",d=[];for(let m=0;m{if(g==="*"){let H=m[y]||"";d=h.slice(0,h.length-H.length).replace(/(.)\/+$/,"$1")}const M=m[y];return b&&!M?x[g]=void 0:x[g]=(M||"").replace(/%2F/g,"/"),x},{}),pathname:h,pathnameBase:d,pattern:t}}function Vp(t,c=!1,n=!0){O4(t==="*"||!t.endsWith("*")||t.endsWith("/*"),`Route path "${t}" will be treated as if it were "${t.replace(/\*$/,"/*")}" because the \`*\` character must always follow a \`/\` in the pattern. To get rid of this warning, please change the route path to "${t.replace(/\*$/,"/*")}".`);let i=[],u="^"+t.replace(/\/*\*?$/,"").replace(/^\/*/,"/").replace(/[\\.*+^${}|()[\]]/g,"\\$&").replace(/\/:([\w-]+)(\?)?/g,(d,m,p)=>(i.push({paramName:m,isOptional:p!=null}),p?"/?([^\\/]+)?":"/([^\\/]+)")).replace(/\/([\w-]+)\?(\/|$)/g,"(/$1)?$2");return t.endsWith("*")?(i.push({paramName:"*"}),u+=t==="*"||t==="/*"?"(.*)$":"(?:\\/(.+)|\\/*)$"):n?u+="\\/*$":t!==""&&t!=="/"&&(u+="(?:(?=\\/|$))"),[new RegExp(u,c?void 0:"i"),i]}function Bp(t){try{return t.split("/").map(c=>decodeURIComponent(c).replace(/\//g,"%2F")).join("/")}catch(c){return O4(!1,`The URL path "${t}" could not be decoded because it is a malformed URL segment. This is probably due to a bad percent encoding (${c}).`),t}}function w3(t,c){if(c==="/")return t;if(!t.toLowerCase().startsWith(c.toLowerCase()))return null;let n=c.endsWith("/")?c.length-1:c.length,i=t.charAt(n);return i&&i!=="/"?null:t.slice(n)||"/"}var jp=/^(?:[a-z][a-z0-9+.-]*:|\/\/)/i,Np=t=>jp.test(t);function kp(t,c="/"){let{pathname:n,search:i="",hash:u=""}=typeof t=="string"?$0(t):t,h;if(n)if(Np(n))h=n;else{if(n.includes("//")){let d=n;n=n.replace(/\/\/+/g,"/"),O4(!1,`Pathnames cannot have embedded double slashes - normalizing ${d} -> ${n}`)}n.startsWith("/")?h=Js(n.substring(1),"/"):h=Js(n,c)}else h=c;return{pathname:h,search:Ep(i),hash:Tp(u)}}function Js(t,c){let n=c.replace(/\/+$/,"").split("/");return t.split("/").forEach(u=>{u===".."?n.length>1&&n.pop():u!=="."&&n.push(u)}),n.length>1?n.join("/"):"/"}function Sc(t,c,n,i){return`Cannot include a '${t}' character in a manually specified \`to.${c}\` field [${JSON.stringify(i)}]. Please separate it out to the \`to.${n}\` field. Alternatively you may provide the full path as a string in and the router will parse it for you.`}function Fp(t){return t.filter((c,n)=>n===0||c.route.path&&c.route.path.length>0)}function Ju(t){let c=Fp(t);return c.map((n,i)=>i===c.length-1?n.pathname:n.pathnameBase)}function th(t,c,n,i=!1){let u;typeof t=="string"?u=$0(t):(u={...t},A2(!u.pathname||!u.pathname.includes("?"),Sc("?","pathname","search",u)),A2(!u.pathname||!u.pathname.includes("#"),Sc("#","pathname","hash",u)),A2(!u.search||!u.search.includes("#"),Sc("#","search","hash",u)));let h=t===""||u.pathname==="",d=h?"/":u.pathname,m;if(d==null)m=n;else{let b=c.length-1;if(!i&&d.startsWith("..")){let y=d.split("/");for(;y[0]==="..";)y.shift(),b-=1;u.pathname=y.join("/")}m=b>=0?c[b]:"/"}let p=kp(u,m),x=d&&d!=="/"&&d.endsWith("/"),g=(h||d===".")&&n.endsWith("/");return!p.pathname.endsWith("/")&&(x||g)&&(p.pathname+="/"),p}var y3=t=>t.join("/").replace(/\/\/+/g,"/"),Rp=t=>t.replace(/\/+$/,"").replace(/^\/*/,"/"),Ep=t=>!t||t==="?"?"":t.startsWith("?")?t:"?"+t,Tp=t=>!t||t==="#"?"":t.startsWith("#")?t:"#"+t;function _p(t){return t!=null&&typeof t.status=="number"&&typeof t.statusText=="string"&&typeof t.internal=="boolean"&&"data"in t}Object.getOwnPropertyNames(Object.prototype).sort().join("\0");var eh=["POST","PUT","PATCH","DELETE"];new Set(eh);var qp=["GET",...eh];new Set(qp);var Z0=f.createContext(null);Z0.displayName="DataRouter";var Ie=f.createContext(null);Ie.displayName="DataRouterState";f.createContext(!1);var ch=f.createContext({isTransitioning:!1});ch.displayName="ViewTransition";var Dp=f.createContext(new Map);Dp.displayName="Fetchers";var Op=f.createContext(null);Op.displayName="Await";var X4=f.createContext(null);X4.displayName="Navigation";var M5=f.createContext(null);M5.displayName="Location";var C3=f.createContext({outlet:null,matches:[],isDataRoute:!1});C3.displayName="Route";var Qa=f.createContext(null);Qa.displayName="RouteError";function Up(t,{relative:c}={}){A2(w5(),"useHref() may be used only in the context of a component.");let{basename:n,navigator:i}=f.useContext(X4),{hash:u,pathname:h,search:d}=C5(t,{relative:c}),m=h;return n!=="/"&&(m=h==="/"?n:y3([n,h])),i.createHref({pathname:m,search:d,hash:u})}function w5(){return f.useContext(M5)!=null}function r6(){return A2(w5(),"useLocation() may be used only in the context of a component."),f.useContext(M5).location}var ah="You should call navigate() in a React.useEffect(), not when your component is first rendered.";function nh(t){f.useContext(X4).static||f.useLayoutEffect(t)}function Xa(){let{isDataRoute:t}=f.useContext(C3);return t?eg():Ip()}function Ip(){A2(w5(),"useNavigate() may be used only in the context of a component.");let t=f.useContext(Z0),{basename:c,navigator:n}=f.useContext(X4),{matches:i}=f.useContext(C3),{pathname:u}=r6(),h=JSON.stringify(Ju(i)),d=f.useRef(!1);return nh(()=>{d.current=!0}),f.useCallback((p,x={})=>{if(O4(d.current,ah),!d.current)return;if(typeof p=="number"){n.go(p);return}let g=th(p,JSON.parse(h),u,x.relative==="path");t==null&&c!=="/"&&(g.pathname=g.pathname==="/"?c:y3([c,g.pathname])),(x.replace?n.replace:n.push)(g,x.state,x)},[c,n,h,u,t])}f.createContext(null);function C5(t,{relative:c}={}){let{matches:n}=f.useContext(C3),{pathname:i}=r6(),u=JSON.stringify(Ju(n));return f.useMemo(()=>th(t,JSON.parse(u),i,c==="path"),[t,u,i,c])}function Pp(t,c){return rh(t,c)}function rh(t,c,n,i,u){A2(w5(),"useRoutes() may be used only in the context of a component.");let{navigator:h}=f.useContext(X4),{matches:d}=f.useContext(C3),m=d[d.length-1],p=m?m.params:{},x=m?m.pathname:"/",g=m?m.pathnameBase:"/",b=m&&m.route;{let S=b&&b.path||"";lh(x,!b||S.endsWith("*")||S.endsWith("*?"),`You rendered descendant (or called \`useRoutes()\`) at "${x}" (under ) but the parent route path has no trailing "*". This means if you navigate deeper, the parent won't match anymore and therefore the child routes will never render. +`);for(v=u=0;uv||D[u]!==J[v]){var h1=` +`+D[u].replace(" at new "," at ");return e.displayName&&h1.includes("")&&(h1=h1.replace("",e.displayName)),h1}while(1<=u&&0<=v);break}}}finally{H1=!1,Error.prepareStackTrace=i}return(i=e?e.displayName||e.name:"")?U1(i):""}function C1(e,a){switch(e.tag){case 26:case 27:case 5:return U1(e.type);case 16:return U1("Lazy");case 13:return e.child!==a&&a!==null?U1("Suspense Fallback"):U1("Suspense");case 19:return U1("SuspenseList");case 0:case 15:return x1(e.type,!1);case 11:return x1(e.type.render,!1);case 1:return x1(e.type,!0);case 31:return U1("Activity");default:return""}}function R1(e){try{var a="",i=null;do a+=C1(e,i),i=e,e=e.return;while(e);return a}catch(u){return` +Error generating stack: `+u.message+` +`+u.stack}}var J1=Object.prototype.hasOwnProperty,j1=t.unstable_scheduleCallback,q1=t.unstable_cancelCallback,z1=t.unstable_shouldYield,L1=t.unstable_requestPaint,i1=t.unstable_now,M1=t.unstable_getCurrentPriorityLevel,p1=t.unstable_ImmediatePriority,V1=t.unstable_UserBlockingPriority,s1=t.unstable_NormalPriority,w1=t.unstable_LowPriority,g1=t.unstable_IdlePriority,Q1=t.log,$1=t.unstable_setDisableYieldValue,u1=null,A1=null;function B1(e){if(typeof Q1=="function"&&$1(e),A1&&typeof A1.setStrictMode=="function")try{A1.setStrictMode(u1,e)}catch{}}var x2=Math.clz32?Math.clz32:P4,A3=Math.log,J4=Math.LN2;function P4(e){return e>>>=0,e===0?32:31-(A3(e)/J4|0)|0}var U6=256,E1=262144,f2=4194304;function o2(e){var a=e&42;if(a!==0)return a;switch(e&-e){case 1:return 1;case 2:return 2;case 4:return 4;case 8:return 8;case 16:return 16;case 32:return 32;case 64:return 64;case 128:return 128;case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:return e&261888;case 262144:case 524288:case 1048576:case 2097152:return e&3932160;case 4194304:case 8388608:case 16777216:case 33554432:return e&62914560;case 67108864:return 67108864;case 134217728:return 134217728;case 268435456:return 268435456;case 536870912:return 536870912;case 1073741824:return 0;default:return e}}function t2(e,a,i){var u=e.pendingLanes;if(u===0)return 0;var v=0,z=e.suspendedLanes,A=e.pingedLanes;e=e.warmLanes;var R=u&134217727;return R!==0?(u=R&~z,u!==0?v=o2(u):(A&=R,A!==0?v=o2(A):i||(i=R&~e,i!==0&&(v=o2(i))))):(R=u&~z,R!==0?v=o2(R):A!==0?v=o2(A):i||(i=u&~e,i!==0&&(v=o2(i)))),v===0?0:a!==0&&a!==v&&(a&z)===0&&(z=v&-v,i=a&-a,z>=i||z===32&&(i&4194048)!==0)?a:v}function r2(e,a){return(e.pendingLanes&~(e.suspendedLanes&~e.pingedLanes)&a)===0}function o4(e,a){switch(e){case 1:case 2:case 4:case 8:case 64:return a+250;case 16:case 32:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:return a+5e3;case 4194304:case 8388608:case 16777216:case 33554432:return-1;case 67108864:case 134217728:case 268435456:case 536870912:case 1073741824:return-1;default:return-1}}function H3(){var e=f2;return f2<<=1,(f2&62914560)===0&&(f2=4194304),e}function L3(e){for(var a=[],i=0;31>i;i++)a.push(e);return a}function C2(e,a){e.pendingLanes|=a,a!==268435456&&(e.suspendedLanes=0,e.pingedLanes=0,e.warmLanes=0)}function o6(e,a,i,u,v,z){var A=e.pendingLanes;e.pendingLanes=i,e.suspendedLanes=0,e.pingedLanes=0,e.warmLanes=0,e.expiredLanes&=i,e.entangledLanes&=i,e.errorRecoveryDisabledLanes&=i,e.shellSuspendCounter=0;var R=e.entanglements,D=e.expirationTimes,J=e.hiddenUpdates;for(i=A&~i;0"u")return null;try{return e.activeElement||e.body}catch{return e.body}}var em=/[\n"\\]/g;function x4(e){return e.replace(em,function(a){return"\\"+a.charCodeAt(0).toString(16)+" "})}function p7(e,a,i,u,v,z,A,R){e.name="",A!=null&&typeof A!="function"&&typeof A!="symbol"&&typeof A!="boolean"?e.type=A:e.removeAttribute("type"),a!=null?A==="number"?(a===0&&e.value===""||e.value!=a)&&(e.value=""+g4(a)):e.value!==""+g4(a)&&(e.value=""+g4(a)):A!=="submit"&&A!=="reset"||e.removeAttribute("value"),a!=null?g7(e,A,g4(a)):i!=null?g7(e,A,g4(i)):u!=null&&e.removeAttribute("value"),v==null&&z!=null&&(e.defaultChecked=!!z),v!=null&&(e.checked=v&&typeof v!="function"&&typeof v!="symbol"),R!=null&&typeof R!="function"&&typeof R!="symbol"&&typeof R!="boolean"?e.name=""+g4(R):e.removeAttribute("name")}function rr(e,a,i,u,v,z,A,R){if(z!=null&&typeof z!="function"&&typeof z!="symbol"&&typeof z!="boolean"&&(e.type=z),a!=null||i!=null){if(!(z!=="submit"&&z!=="reset"||a!=null)){v7(e);return}i=i!=null?""+g4(i):"",a=a!=null?""+g4(a):i,R||a===e.value||(e.value=a),e.defaultValue=a}u=u??v,u=typeof u!="function"&&typeof u!="symbol"&&!!u,e.checked=R?e.checked:!!u,e.defaultChecked=!!u,A!=null&&typeof A!="function"&&typeof A!="symbol"&&typeof A!="boolean"&&(e.name=A),v7(e)}function g7(e,a,i){a==="number"&&kt(e.ownerDocument)===e||e.defaultValue===""+i||(e.defaultValue=""+i)}function Y6(e,a,i,u){if(e=e.options,a){a={};for(var v=0;v"u"||typeof window.document>"u"||typeof window.document.createElement>"u"),M7=!1;if(c3)try{var n8={};Object.defineProperty(n8,"passive",{get:function(){M7=!0}}),window.addEventListener("test",n8,n8),window.removeEventListener("test",n8,n8)}catch{M7=!1}var B3=null,w7=null,Rt=null;function dr(){if(Rt)return Rt;var e,a=w7,i=a.length,u,v="value"in B3?B3.value:B3.textContent,z=v.length;for(e=0;e=i8),xr=" ",zr=!1;function br(e,a){switch(e){case"keyup":return Vm.indexOf(a.keyCode)!==-1;case"keydown":return a.keyCode!==229;case"keypress":case"mousedown":case"focusout":return!0;default:return!1}}function yr(e){return e=e.detail,typeof e=="object"&&"data"in e?e.data:null}var W6=!1;function jm(e,a){switch(e){case"compositionend":return yr(a);case"keypress":return a.which!==32?null:(zr=!0,xr);case"textInput":return e=a.data,e===xr&&zr?null:e;default:return null}}function Nm(e,a){if(W6)return e==="compositionend"||!L7&&br(e,a)?(e=dr(),Rt=w7=B3=null,W6=!1,e):null;switch(e){case"paste":return null;case"keypress":if(!(a.ctrlKey||a.altKey||a.metaKey)||a.ctrlKey&&a.altKey){if(a.char&&1=a)return{node:i,offset:a-e};e=u}t:{for(;i;){if(i.nextSibling){i=i.nextSibling;break t}i=i.parentNode}i=void 0}i=Vr(i)}}function jr(e,a){return e&&a?e===a?!0:e&&e.nodeType===3?!1:a&&a.nodeType===3?jr(e,a.parentNode):"contains"in e?e.contains(a):e.compareDocumentPosition?!!(e.compareDocumentPosition(a)&16):!1:!1}function Nr(e){e=e!=null&&e.ownerDocument!=null&&e.ownerDocument.defaultView!=null?e.ownerDocument.defaultView:window;for(var a=kt(e.document);a instanceof e.HTMLIFrameElement;){try{var i=typeof a.contentWindow.location.href=="string"}catch{i=!1}if(i)e=a.contentWindow;else break;a=kt(e.document)}return a}function j7(e){var a=e&&e.nodeName&&e.nodeName.toLowerCase();return a&&(a==="input"&&(e.type==="text"||e.type==="search"||e.type==="tel"||e.type==="url"||e.type==="password")||a==="textarea"||e.contentEditable==="true")}var Dm=c3&&"documentMode"in document&&11>=document.documentMode,J6=null,N7=null,h8=null,k7=!1;function kr(e,a,i){var u=i.window===i?i.document:i.nodeType===9?i:i.ownerDocument;k7||J6==null||J6!==kt(u)||(u=J6,"selectionStart"in u&&j7(u)?u={start:u.selectionStart,end:u.selectionEnd}:(u=(u.ownerDocument&&u.ownerDocument.defaultView||window).getSelection(),u={anchorNode:u.anchorNode,anchorOffset:u.anchorOffset,focusNode:u.focusNode,focusOffset:u.focusOffset}),h8&&u8(h8,u)||(h8=u,u=L5(N7,"onSelect"),0>=A,v-=A,$4=1<<32-x2(a)+v|i<Y1?(c2=k1,k1=null):c2=k1.sibling;var i2=c1(K,k1,W[Y1],d1);if(i2===null){k1===null&&(k1=c2);break}e&&k1&&i2.alternate===null&&a(K,k1),$=z(i2,$,Y1),l2===null?F1=i2:l2.sibling=i2,l2=i2,k1=c2}if(Y1===W.length)return i(K,k1),a2&&n3(K,Y1),F1;if(k1===null){for(;Y1Y1?(c2=k1,k1=null):c2=k1.sibling;var W3=c1(K,k1,i2.value,d1);if(W3===null){k1===null&&(k1=c2);break}e&&k1&&W3.alternate===null&&a(K,k1),$=z(W3,$,Y1),l2===null?F1=W3:l2.sibling=W3,l2=W3,k1=c2}if(i2.done)return i(K,k1),a2&&n3(K,Y1),F1;if(k1===null){for(;!i2.done;Y1++,i2=W.next())i2=f1(K,i2.value,d1),i2!==null&&($=z(i2,$,Y1),l2===null?F1=i2:l2.sibling=i2,l2=i2);return a2&&n3(K,Y1),F1}for(k1=u(k1);!i2.done;Y1++,i2=W.next())i2=o1(k1,K,Y1,i2.value,d1),i2!==null&&(e&&i2.alternate!==null&&k1.delete(i2.key===null?Y1:i2.key),$=z(i2,$,Y1),l2===null?F1=i2:l2.sibling=i2,l2=i2);return e&&k1.forEach(function(lp){return a(K,lp)}),a2&&n3(K,Y1),F1}function p2(K,$,W,d1){if(typeof W=="object"&&W!==null&&W.type===L&&W.key===null&&(W=W.props.children),typeof W=="object"&&W!==null){switch(W.$$typeof){case M:t:{for(var F1=W.key;$!==null;){if($.key===F1){if(F1=W.type,F1===L){if($.tag===7){i(K,$.sibling),d1=v($,W.props.children),d1.return=K,K=d1;break t}}else if($.elementType===F1||typeof F1=="object"&&F1!==null&&F1.$$typeof===V&&b6(F1)===$.type){i(K,$.sibling),d1=v($,W.props),g8(d1,W),d1.return=K,K=d1;break t}i(K,$);break}else a(K,$);$=$.sibling}W.type===L?(d1=v6(W.props.children,K.mode,d1,W.key),d1.return=K,K=d1):(d1=$t(W.type,W.key,W.props,null,K.mode,d1),g8(d1,W),d1.return=K,K=d1)}return A(K);case H:t:{for(F1=W.key;$!==null;){if($.key===F1)if($.tag===4&&$.stateNode.containerInfo===W.containerInfo&&$.stateNode.implementation===W.implementation){i(K,$.sibling),d1=v($,W.children||[]),d1.return=K,K=d1;break t}else{i(K,$);break}else a(K,$);$=$.sibling}d1=D7(W,K.mode,d1),d1.return=K,K=d1}return A(K);case V:return W=b6(W),p2(K,$,W,d1)}if(P(W))return N1(K,$,W,d1);if(Z(W)){if(F1=Z(W),typeof F1!="function")throw Error(l(150));return W=F1.call(W),D1(K,$,W,d1)}if(typeof W.then=="function")return p2(K,$,Wt(W),d1);if(W.$$typeof===w)return p2(K,$,Yt(K,W),d1);Jt(K,W)}return typeof W=="string"&&W!==""||typeof W=="number"||typeof W=="bigint"?(W=""+W,$!==null&&$.tag===6?(i(K,$.sibling),d1=v($,W),d1.return=K,K=d1):(i(K,$),d1=q7(W,K.mode,d1),d1.return=K,K=d1),A(K)):i(K,$)}return function(K,$,W,d1){try{p8=0;var F1=p2(K,$,W,d1);return u0=null,F1}catch(k1){if(k1===o0||k1===Qt)throw k1;var l2=h4(29,k1,null,K.mode);return l2.lanes=d1,l2.return=K,l2}finally{}}}var M6=cl(!0),al=cl(!1),R3=!1;function W7(e){e.updateQueue={baseState:e.memoizedState,firstBaseUpdate:null,lastBaseUpdate:null,shared:{pending:null,lanes:0,hiddenCallbacks:null},callbacks:null}}function J7(e,a){e=e.updateQueue,a.updateQueue===e&&(a.updateQueue={baseState:e.baseState,firstBaseUpdate:e.firstBaseUpdate,lastBaseUpdate:e.lastBaseUpdate,shared:e.shared,callbacks:null})}function E3(e){return{lane:e,tag:0,payload:null,callback:null,next:null}}function T3(e,a,i){var u=e.updateQueue;if(u===null)return null;if(u=u.shared,(u2&2)!==0){var v=u.pending;return v===null?a.next=a:(a.next=v.next,v.next=a),u.pending=a,a=Pt(e),Dr(e,null,i),a}return It(e,u,a,i),Pt(e)}function x8(e,a,i){if(a=a.updateQueue,a!==null&&(a=a.shared,(i&4194048)!==0)){var u=a.lanes;u&=e.pendingLanes,i|=u,a.lanes=i,Yn(e,i)}}function t9(e,a){var i=e.updateQueue,u=e.alternate;if(u!==null&&(u=u.updateQueue,i===u)){var v=null,z=null;if(i=i.firstBaseUpdate,i!==null){do{var A={lane:i.lane,tag:i.tag,payload:i.payload,callback:null,next:null};z===null?v=z=A:z=z.next=A,i=i.next}while(i!==null);z===null?v=z=a:z=z.next=a}else v=z=a;i={baseState:u.baseState,firstBaseUpdate:v,lastBaseUpdate:z,shared:u.shared,callbacks:u.callbacks},e.updateQueue=i;return}e=i.lastBaseUpdate,e===null?i.firstBaseUpdate=a:e.next=a,i.lastBaseUpdate=a}var e9=!1;function z8(){if(e9){var e=s0;if(e!==null)throw e}}function b8(e,a,i,u){e9=!1;var v=e.updateQueue;R3=!1;var z=v.firstBaseUpdate,A=v.lastBaseUpdate,R=v.shared.pending;if(R!==null){v.shared.pending=null;var D=R,J=D.next;D.next=null,A===null?z=J:A.next=J,A=D;var h1=e.alternate;h1!==null&&(h1=h1.updateQueue,R=h1.lastBaseUpdate,R!==A&&(R===null?h1.firstBaseUpdate=J:R.next=J,h1.lastBaseUpdate=D))}if(z!==null){var f1=v.baseState;A=0,h1=J=D=null,R=z;do{var c1=R.lane&-536870913,o1=c1!==R.lane;if(o1?(e2&c1)===c1:(u&c1)===c1){c1!==0&&c1===i0&&(e9=!0),h1!==null&&(h1=h1.next={lane:0,tag:R.tag,payload:R.payload,callback:null,next:null});t:{var N1=e,D1=R;c1=a;var p2=i;switch(D1.tag){case 1:if(N1=D1.payload,typeof N1=="function"){f1=N1.call(p2,f1,c1);break t}f1=N1;break t;case 3:N1.flags=N1.flags&-65537|128;case 0:if(N1=D1.payload,c1=typeof N1=="function"?N1.call(p2,f1,c1):N1,c1==null)break t;f1=b({},f1,c1);break t;case 2:R3=!0}}c1=R.callback,c1!==null&&(e.flags|=64,o1&&(e.flags|=8192),o1=v.callbacks,o1===null?v.callbacks=[c1]:o1.push(c1))}else o1={lane:c1,tag:R.tag,payload:R.payload,callback:R.callback,next:null},h1===null?(J=h1=o1,D=f1):h1=h1.next=o1,A|=c1;if(R=R.next,R===null){if(R=v.shared.pending,R===null)break;o1=R,R=o1.next,o1.next=null,v.lastBaseUpdate=o1,v.shared.pending=null}}while(!0);h1===null&&(D=f1),v.baseState=D,v.firstBaseUpdate=J,v.lastBaseUpdate=h1,z===null&&(v.shared.lanes=0),U3|=A,e.lanes=A,e.memoizedState=f1}}function nl(e,a){if(typeof e!="function")throw Error(l(191,e));e.call(a)}function rl(e,a){var i=e.callbacks;if(i!==null)for(e.callbacks=null,e=0;ez?z:8;var A=T.T,R={};T.T=R,b9(e,!1,a,i);try{var D=v(),J=T.S;if(J!==null&&J(R,D),D!==null&&typeof D=="object"&&typeof D.then=="function"){var h1=Km(D,u);w8(e,a,h1,p4(e))}else w8(e,a,u,p4(e))}catch(f1){w8(e,a,{then:function(){},status:"rejected",reason:f1},p4())}finally{U.p=z,A!==null&&R.types!==null&&(A.types=R.types),T.T=A}}function ev(){}function x9(e,a,i,u){if(e.tag!==5)throw Error(l(476));var v=Tl(e).queue;El(e,v,a,I,i===null?ev:function(){return _l(e),i(u)})}function Tl(e){var a=e.memoizedState;if(a!==null)return a;a={memoizedState:I,baseState:I,baseQueue:null,queue:{pending:null,lanes:0,dispatch:null,lastRenderedReducer:s3,lastRenderedState:I},next:null};var i={};return a.next={memoizedState:i,baseState:i,baseQueue:null,queue:{pending:null,lanes:0,dispatch:null,lastRenderedReducer:s3,lastRenderedState:i},next:null},e.memoizedState=a,e=e.alternate,e!==null&&(e.memoizedState=a),a}function _l(e){var a=Tl(e);a.next===null&&(a=e.alternate.memoizedState),w8(e,a.next.queue,{},p4())}function z9(){return K2(D8)}function ql(){return N2().memoizedState}function Dl(){return N2().memoizedState}function cv(e){for(var a=e.return;a!==null;){switch(a.tag){case 24:case 3:var i=p4();e=E3(i);var u=T3(a,e,i);u!==null&&(i4(u,a,i),x8(u,a,i)),a={cache:Y7()},e.payload=a;return}a=a.return}}function av(e,a,i){var u=p4();i={lane:u,revertLane:0,gesture:null,action:i,hasEagerState:!1,eagerState:null,next:null},o5(e)?Ul(a,i):(i=T7(e,a,i,u),i!==null&&(i4(i,e,u),Il(i,a,u)))}function Ol(e,a,i){var u=p4();w8(e,a,i,u)}function w8(e,a,i,u){var v={lane:u,revertLane:0,gesture:null,action:i,hasEagerState:!1,eagerState:null,next:null};if(o5(e))Ul(a,v);else{var z=e.alternate;if(e.lanes===0&&(z===null||z.lanes===0)&&(z=a.lastRenderedReducer,z!==null))try{var A=a.lastRenderedState,R=z(A,i);if(v.hasEagerState=!0,v.eagerState=R,u4(R,A))return It(e,a,v,0),g2===null&&Ut(),!1}catch{}finally{}if(i=T7(e,a,v,u),i!==null)return i4(i,e,u),Il(i,a,u),!0}return!1}function b9(e,a,i,u){if(u={lane:2,revertLane:W9(),gesture:null,action:u,hasEagerState:!1,eagerState:null,next:null},o5(e)){if(a)throw Error(l(479))}else a=T7(e,i,u,2),a!==null&&i4(a,e,2)}function o5(e){var a=e.alternate;return e===G1||a!==null&&a===G1}function Ul(e,a){d0=c5=!0;var i=e.pending;i===null?a.next=a:(a.next=i.next,i.next=a),e.pending=a}function Il(e,a,i){if((i&4194048)!==0){var u=a.lanes;u&=e.pendingLanes,i|=u,a.lanes=i,Yn(e,i)}}var C8={readContext:K2,use:r5,useCallback:L2,useContext:L2,useEffect:L2,useImperativeHandle:L2,useLayoutEffect:L2,useInsertionEffect:L2,useMemo:L2,useReducer:L2,useRef:L2,useState:L2,useDebugValue:L2,useDeferredValue:L2,useTransition:L2,useSyncExternalStore:L2,useId:L2,useHostTransitionStatus:L2,useFormState:L2,useActionState:L2,useOptimistic:L2,useMemoCache:L2,useCacheRefresh:L2};C8.useEffectEvent=L2;var Pl={readContext:K2,use:r5,useCallback:function(e,a){return t4().memoizedState=[e,a===void 0?null:a],e},useContext:K2,useEffect:Hl,useImperativeHandle:function(e,a,i){i=i!=null?i.concat([e]):null,i5(4194308,4,jl.bind(null,a,e),i)},useLayoutEffect:function(e,a){return i5(4194308,4,e,a)},useInsertionEffect:function(e,a){i5(4,2,e,a)},useMemo:function(e,a){var i=t4();a=a===void 0?null:a;var u=e();if(w6){B1(!0);try{e()}finally{B1(!1)}}return i.memoizedState=[u,a],u},useReducer:function(e,a,i){var u=t4();if(i!==void 0){var v=i(a);if(w6){B1(!0);try{i(a)}finally{B1(!1)}}}else v=a;return u.memoizedState=u.baseState=v,e={pending:null,lanes:0,dispatch:null,lastRenderedReducer:e,lastRenderedState:v},u.queue=e,e=e.dispatch=av.bind(null,G1,e),[u.memoizedState,e]},useRef:function(e){var a=t4();return e={current:e},a.memoizedState=e},useState:function(e){e=f9(e);var a=e.queue,i=Ol.bind(null,G1,a);return a.dispatch=i,[e.memoizedState,i]},useDebugValue:p9,useDeferredValue:function(e,a){var i=t4();return g9(i,e,a)},useTransition:function(){var e=f9(!1);return e=El.bind(null,G1,e.queue,!0,!1),t4().memoizedState=e,[!1,e]},useSyncExternalStore:function(e,a,i){var u=G1,v=t4();if(a2){if(i===void 0)throw Error(l(407));i=i()}else{if(i=a(),g2===null)throw Error(l(349));(e2&127)!==0||hl(u,a,i)}v.memoizedState=i;var z={value:i,getSnapshot:a};return v.queue=z,Hl(fl.bind(null,u,z,e),[e]),u.flags|=2048,m0(9,{destroy:void 0},dl.bind(null,u,z,i,a),null),i},useId:function(){var e=t4(),a=g2.identifierPrefix;if(a2){var i=Z4,u=$4;i=(u&~(1<<32-x2(u)-1)).toString(32)+i,a="_"+a+"R_"+i,i=a5++,0<\/script>",z=z.removeChild(z.firstChild);break;case"select":z=typeof u.is=="string"?A.createElement("select",{is:u.is}):A.createElement("select"),u.multiple?z.multiple=!0:u.size&&(z.size=u.size);break;default:z=typeof u.is=="string"?A.createElement(v,{is:u.is}):A.createElement(v)}}z[G2]=a,z[e4]=u;t:for(A=a.child;A!==null;){if(A.tag===5||A.tag===6)z.appendChild(A.stateNode);else if(A.tag!==4&&A.tag!==27&&A.child!==null){A.child.return=A,A=A.child;continue}if(A===a)break t;for(;A.sibling===null;){if(A.return===null||A.return===a)break t;A=A.return}A.sibling.return=A.return,A=A.sibling}a.stateNode=z;t:switch(X2(z,v,u),v){case"button":case"input":case"select":case"textarea":u=!!u.autoFocus;break t;case"img":u=!0;break t;default:u=!1}u&&u3(a)}}return b2(a),F9(a,a.type,e===null?null:e.memoizedProps,a.pendingProps,i),null;case 6:if(e&&a.stateNode!=null)e.memoizedProps!==u&&u3(a);else{if(typeof u!="string"&&a.stateNode===null)throw Error(l(166));if(e=r1.current,r0(a)){if(e=a.stateNode,i=a.memoizedProps,u=null,v=Y2,v!==null)switch(v.tag){case 27:case 5:u=v.memoizedProps}e[G2]=a,e=!!(e.nodeValue===i||u!==null&&u.suppressHydrationWarning===!0||os(e.nodeValue,i)),e||k3(a,!0)}else e=V5(e).createTextNode(u),e[G2]=a,a.stateNode=e}return b2(a),null;case 31:if(i=a.memoizedState,e===null||e.memoizedState!==null){if(u=r0(a),i!==null){if(e===null){if(!u)throw Error(l(318));if(e=a.memoizedState,e=e!==null?e.dehydrated:null,!e)throw Error(l(557));e[G2]=a}else p6(),(a.flags&128)===0&&(a.memoizedState=null),a.flags|=4;b2(a),e=!1}else i=P7(),e!==null&&e.memoizedState!==null&&(e.memoizedState.hydrationErrors=i),e=!0;if(!e)return a.flags&256?(f4(a),a):(f4(a),null);if((a.flags&128)!==0)throw Error(l(558))}return b2(a),null;case 13:if(u=a.memoizedState,e===null||e.memoizedState!==null&&e.memoizedState.dehydrated!==null){if(v=r0(a),u!==null&&u.dehydrated!==null){if(e===null){if(!v)throw Error(l(318));if(v=a.memoizedState,v=v!==null?v.dehydrated:null,!v)throw Error(l(317));v[G2]=a}else p6(),(a.flags&128)===0&&(a.memoizedState=null),a.flags|=4;b2(a),v=!1}else v=P7(),e!==null&&e.memoizedState!==null&&(e.memoizedState.hydrationErrors=v),v=!0;if(!v)return a.flags&256?(f4(a),a):(f4(a),null)}return f4(a),(a.flags&128)!==0?(a.lanes=i,a):(i=u!==null,e=e!==null&&e.memoizedState!==null,i&&(u=a.child,v=null,u.alternate!==null&&u.alternate.memoizedState!==null&&u.alternate.memoizedState.cachePool!==null&&(v=u.alternate.memoizedState.cachePool.pool),z=null,u.memoizedState!==null&&u.memoizedState.cachePool!==null&&(z=u.memoizedState.cachePool.pool),z!==v&&(u.flags|=2048)),i!==e&&i&&(a.child.flags|=8192),m5(a,a.updateQueue),b2(a),null);case 4:return y1(),e===null&&cc(a.stateNode.containerInfo),b2(a),null;case 10:return l3(a.type),b2(a),null;case 19:if(G(j2),u=a.memoizedState,u===null)return b2(a),null;if(v=(a.flags&128)!==0,z=u.rendering,z===null)if(v)A8(u,!1);else{if(V2!==0||e!==null&&(e.flags&128)!==0)for(e=a.child;e!==null;){if(z=e5(e),z!==null){for(a.flags|=128,A8(u,!1),e=z.updateQueue,a.updateQueue=e,m5(a,e),a.subtreeFlags=0,e=i,i=a.child;i!==null;)Or(i,e),i=i.sibling;return l1(j2,j2.current&1|2),a2&&n3(a,u.treeForkCount),a.child}e=e.sibling}u.tail!==null&&i1()>z5&&(a.flags|=128,v=!0,A8(u,!1),a.lanes=4194304)}else{if(!v)if(e=e5(z),e!==null){if(a.flags|=128,v=!0,e=e.updateQueue,a.updateQueue=e,m5(a,e),A8(u,!0),u.tail===null&&u.tailMode==="hidden"&&!z.alternate&&!a2)return b2(a),null}else 2*i1()-u.renderingStartTime>z5&&i!==536870912&&(a.flags|=128,v=!0,A8(u,!1),a.lanes=4194304);u.isBackwards?(z.sibling=a.child,a.child=z):(e=u.last,e!==null?e.sibling=z:a.child=z,u.last=z)}return u.tail!==null?(e=u.tail,u.rendering=e,u.tail=e.sibling,u.renderingStartTime=i1(),e.sibling=null,i=j2.current,l1(j2,v?i&1|2:i&1),a2&&n3(a,u.treeForkCount),e):(b2(a),null);case 22:case 23:return f4(a),a9(),u=a.memoizedState!==null,e!==null?e.memoizedState!==null!==u&&(a.flags|=8192):u&&(a.flags|=8192),u?(i&536870912)!==0&&(a.flags&128)===0&&(b2(a),a.subtreeFlags&6&&(a.flags|=8192)):b2(a),i=a.updateQueue,i!==null&&m5(a,i.retryQueue),i=null,e!==null&&e.memoizedState!==null&&e.memoizedState.cachePool!==null&&(i=e.memoizedState.cachePool.pool),u=null,a.memoizedState!==null&&a.memoizedState.cachePool!==null&&(u=a.memoizedState.cachePool.pool),u!==i&&(a.flags|=2048),e!==null&&G(z6),null;case 24:return i=null,e!==null&&(i=e.memoizedState.cache),a.memoizedState.cache!==i&&(a.flags|=2048),l3(F2),b2(a),null;case 25:return null;case 30:return null}throw Error(l(156,a.tag))}function sv(e,a){switch(U7(a),a.tag){case 1:return e=a.flags,e&65536?(a.flags=e&-65537|128,a):null;case 3:return l3(F2),y1(),e=a.flags,(e&65536)!==0&&(e&128)===0?(a.flags=e&-65537|128,a):null;case 26:case 27:case 5:return _1(a),null;case 31:if(a.memoizedState!==null){if(f4(a),a.alternate===null)throw Error(l(340));p6()}return e=a.flags,e&65536?(a.flags=e&-65537|128,a):null;case 13:if(f4(a),e=a.memoizedState,e!==null&&e.dehydrated!==null){if(a.alternate===null)throw Error(l(340));p6()}return e=a.flags,e&65536?(a.flags=e&-65537|128,a):null;case 19:return G(j2),null;case 4:return y1(),null;case 10:return l3(a.type),null;case 22:case 23:return f4(a),a9(),e!==null&&G(z6),e=a.flags,e&65536?(a.flags=e&-65537|128,a):null;case 24:return l3(F2),null;case 25:return null;default:return null}}function mi(e,a){switch(U7(a),a.tag){case 3:l3(F2),y1();break;case 26:case 27:case 5:_1(a);break;case 4:y1();break;case 31:a.memoizedState!==null&&f4(a);break;case 13:f4(a);break;case 19:G(j2);break;case 10:l3(a.type);break;case 22:case 23:f4(a),a9(),e!==null&&G(z6);break;case 24:l3(F2)}}function H8(e,a){try{var i=a.updateQueue,u=i!==null?i.lastEffect:null;if(u!==null){var v=u.next;i=v;do{if((i.tag&e)===e){u=void 0;var z=i.create,A=i.inst;u=z(),A.destroy=u}i=i.next}while(i!==v)}}catch(R){d2(a,a.return,R)}}function D3(e,a,i){try{var u=a.updateQueue,v=u!==null?u.lastEffect:null;if(v!==null){var z=v.next;u=z;do{if((u.tag&e)===e){var A=u.inst,R=A.destroy;if(R!==void 0){A.destroy=void 0,v=a;var D=i,J=R;try{J()}catch(h1){d2(v,D,h1)}}}u=u.next}while(u!==z)}}catch(h1){d2(a,a.return,h1)}}function vi(e){var a=e.updateQueue;if(a!==null){var i=e.stateNode;try{rl(a,i)}catch(u){d2(e,e.return,u)}}}function pi(e,a,i){i.props=C6(e.type,e.memoizedProps),i.state=e.memoizedState;try{i.componentWillUnmount()}catch(u){d2(e,a,u)}}function L8(e,a){try{var i=e.ref;if(i!==null){switch(e.tag){case 26:case 27:case 5:var u=e.stateNode;break;case 30:u=e.stateNode;break;default:u=e.stateNode}typeof i=="function"?e.refCleanup=i(u):i.current=u}}catch(v){d2(e,a,v)}}function G4(e,a){var i=e.ref,u=e.refCleanup;if(i!==null)if(typeof u=="function")try{u()}catch(v){d2(e,a,v)}finally{e.refCleanup=null,e=e.alternate,e!=null&&(e.refCleanup=null)}else if(typeof i=="function")try{i(null)}catch(v){d2(e,a,v)}else i.current=null}function gi(e){var a=e.type,i=e.memoizedProps,u=e.stateNode;try{t:switch(a){case"button":case"input":case"select":case"textarea":i.autoFocus&&u.focus();break t;case"img":i.src?u.src=i.src:i.srcSet&&(u.srcset=i.srcSet)}}catch(v){d2(e,e.return,v)}}function R9(e,a,i){try{var u=e.stateNode;Bv(u,e.type,i,a),u[e4]=a}catch(v){d2(e,e.return,v)}}function xi(e){return e.tag===5||e.tag===3||e.tag===26||e.tag===27&&G3(e.type)||e.tag===4}function E9(e){t:for(;;){for(;e.sibling===null;){if(e.return===null||xi(e.return))return null;e=e.return}for(e.sibling.return=e.return,e=e.sibling;e.tag!==5&&e.tag!==6&&e.tag!==18;){if(e.tag===27&&G3(e.type)||e.flags&2||e.child===null||e.tag===4)continue t;e.child.return=e,e=e.child}if(!(e.flags&2))return e.stateNode}}function T9(e,a,i){var u=e.tag;if(u===5||u===6)e=e.stateNode,a?(i.nodeType===9?i.body:i.nodeName==="HTML"?i.ownerDocument.body:i).insertBefore(e,a):(a=i.nodeType===9?i.body:i.nodeName==="HTML"?i.ownerDocument.body:i,a.appendChild(e),i=i._reactRootContainer,i!=null||a.onclick!==null||(a.onclick=e3));else if(u!==4&&(u===27&&G3(e.type)&&(i=e.stateNode,a=null),e=e.child,e!==null))for(T9(e,a,i),e=e.sibling;e!==null;)T9(e,a,i),e=e.sibling}function v5(e,a,i){var u=e.tag;if(u===5||u===6)e=e.stateNode,a?i.insertBefore(e,a):i.appendChild(e);else if(u!==4&&(u===27&&G3(e.type)&&(i=e.stateNode),e=e.child,e!==null))for(v5(e,a,i),e=e.sibling;e!==null;)v5(e,a,i),e=e.sibling}function zi(e){var a=e.stateNode,i=e.memoizedProps;try{for(var u=e.type,v=a.attributes;v.length;)a.removeAttributeNode(v[0]);X2(a,u,i),a[G2]=e,a[e4]=i}catch(z){d2(e,e.return,z)}}var h3=!1,T2=!1,_9=!1,bi=typeof WeakSet=="function"?WeakSet:Set,Z2=null;function ov(e,a){if(e=e.containerInfo,rc=E5,e=Nr(e),j7(e)){if("selectionStart"in e)var i={start:e.selectionStart,end:e.selectionEnd};else t:{i=(i=e.ownerDocument)&&i.defaultView||window;var u=i.getSelection&&i.getSelection();if(u&&u.rangeCount!==0){i=u.anchorNode;var v=u.anchorOffset,z=u.focusNode;u=u.focusOffset;try{i.nodeType,z.nodeType}catch{i=null;break t}var A=0,R=-1,D=-1,J=0,h1=0,f1=e,c1=null;e:for(;;){for(var o1;f1!==i||v!==0&&f1.nodeType!==3||(R=A+v),f1!==z||u!==0&&f1.nodeType!==3||(D=A+u),f1.nodeType===3&&(A+=f1.nodeValue.length),(o1=f1.firstChild)!==null;)c1=f1,f1=o1;for(;;){if(f1===e)break e;if(c1===i&&++J===v&&(R=A),c1===z&&++h1===u&&(D=A),(o1=f1.nextSibling)!==null)break;f1=c1,c1=f1.parentNode}f1=o1}i=R===-1||D===-1?null:{start:R,end:D}}else i=null}i=i||{start:0,end:0}}else i=null;for(lc={focusedElem:e,selectionRange:i},E5=!1,Z2=a;Z2!==null;)if(a=Z2,e=a.child,(a.subtreeFlags&1028)!==0&&e!==null)e.return=a,Z2=e;else for(;Z2!==null;){switch(a=Z2,z=a.alternate,e=a.flags,a.tag){case 0:if((e&4)!==0&&(e=a.updateQueue,e=e!==null?e.events:null,e!==null))for(i=0;i title"))),X2(z,u,i),z[G2]=e,$2(z),u=z;break t;case"link":var A=As("link","href",v).get(u+(i.href||""));if(A){for(var R=0;Rp2&&(A=p2,p2=D1,D1=A);var K=Br(R,D1),$=Br(R,p2);if(K&&$&&(o1.rangeCount!==1||o1.anchorNode!==K.node||o1.anchorOffset!==K.offset||o1.focusNode!==$.node||o1.focusOffset!==$.offset)){var W=f1.createRange();W.setStart(K.node,K.offset),o1.removeAllRanges(),D1>p2?(o1.addRange(W),o1.extend($.node,$.offset)):(W.setEnd($.node,$.offset),o1.addRange(W))}}}}for(f1=[],o1=R;o1=o1.parentNode;)o1.nodeType===1&&f1.push({element:o1,left:o1.scrollLeft,top:o1.scrollTop});for(typeof R.focus=="function"&&R.focus(),R=0;Ri?32:i,T.T=null,i=$9,$9=null;var z=P3,A=p3;if(O2=0,z0=P3=null,p3=0,(u2&6)!==0)throw Error(l(331));var R=u2;if(u2|=4,ji(z.current),Li(z,z.current,A,i),u2=R,F8(0,!1),A1&&typeof A1.onPostCommitFiberRoot=="function")try{A1.onPostCommitFiberRoot(u1,z)}catch{}return!0}finally{U.p=v,T.T=u,Ki(e,a)}}function Xi(e,a,i){a=b4(i,a),a=C9(e.stateNode,a,2),e=T3(e,a,2),e!==null&&(C2(e,2),Y4(e))}function d2(e,a,i){if(e.tag===3)Xi(e,e,i);else for(;a!==null;){if(a.tag===3){Xi(a,e,i);break}else if(a.tag===1){var u=a.stateNode;if(typeof a.type.getDerivedStateFromError=="function"||typeof u.componentDidCatch=="function"&&(I3===null||!I3.has(u))){e=b4(i,e),i=Wl(2),u=T3(a,i,2),u!==null&&(Jl(i,u,a,e),C2(u,2),Y4(u));break}}a=a.return}}function K9(e,a,i){var u=e.pingCache;if(u===null){u=e.pingCache=new dv;var v=new Set;u.set(a,v)}else v=u.get(a),v===void 0&&(v=new Set,u.set(a,v));v.has(i)||(O9=!0,v.add(i),e=gv.bind(null,e,a,i),a.then(e,e))}function gv(e,a,i){var u=e.pingCache;u!==null&&u.delete(a),e.pingedLanes|=e.suspendedLanes&i,e.warmLanes&=~i,g2===e&&(e2&i)===i&&(V2===4||V2===3&&(e2&62914560)===e2&&300>i1()-x5?(u2&2)===0&&b0(e,0):U9|=i,x0===e2&&(x0=0)),Y4(e)}function Wi(e,a){a===0&&(a=H3()),e=m6(e,a),e!==null&&(C2(e,a),Y4(e))}function xv(e){var a=e.memoizedState,i=0;a!==null&&(i=a.retryLane),Wi(e,i)}function zv(e,a){var i=0;switch(e.tag){case 31:case 13:var u=e.stateNode,v=e.memoizedState;v!==null&&(i=v.retryLane);break;case 19:u=e.stateNode;break;case 22:u=e.stateNode._retryCache;break;default:throw Error(l(314))}u!==null&&u.delete(a),Wi(e,i)}function bv(e,a){return j1(e,a)}var S5=null,M0=null,Q9=!1,A5=!1,X9=!1,Z3=0;function Y4(e){e!==M0&&e.next===null&&(M0===null?S5=M0=e:M0=M0.next=e),A5=!0,Q9||(Q9=!0,Mv())}function F8(e,a){if(!X9&&A5){X9=!0;do for(var i=!1,u=S5;u!==null;){if(e!==0){var v=u.pendingLanes;if(v===0)var z=0;else{var A=u.suspendedLanes,R=u.pingedLanes;z=(1<<31-x2(42|e)+1)-1,z&=v&~(A&~R),z=z&201326741?z&201326741|1:z?z|2:0}z!==0&&(i=!0,cs(u,z))}else z=e2,z=t2(u,u===g2?z:0,u.cancelPendingCommit!==null||u.timeoutHandle!==-1),(z&3)===0||r2(u,z)||(i=!0,cs(u,z));u=u.next}while(i);X9=!1}}function yv(){Ji()}function Ji(){A5=Q9=!1;var e=0;Z3!==0&&Nv()&&(e=Z3);for(var a=i1(),i=null,u=S5;u!==null;){var v=u.next,z=ts(u,a);z===0?(u.next=null,i===null?S5=v:i.next=v,v===null&&(M0=i)):(i=u,(e!==0||(z&3)!==0)&&(A5=!0)),u=v}O2!==0&&O2!==5||F8(e),Z3!==0&&(Z3=0)}function ts(e,a){for(var i=e.suspendedLanes,u=e.pingedLanes,v=e.expirationTimes,z=e.pendingLanes&-62914561;0R)break;var h1=D.transferSize,f1=D.initiatorType;h1&&us(f1)&&(D=D.responseEnd,A+=h1*(D"u"?null:document;function Ms(e,a,i){var u=w0;if(u&&typeof a=="string"&&a){var v=x4(a);v='link[rel="'+e+'"][href="'+v+'"]',typeof i=="string"&&(v+='[crossorigin="'+i+'"]'),ys.has(v)||(ys.add(v),e={rel:e,crossOrigin:i,href:a},u.querySelector(v)===null&&(a=u.createElement("link"),X2(a,"link",e),$2(a),u.head.appendChild(a)))}}function Ov(e){g3.D(e),Ms("dns-prefetch",e,null)}function Uv(e,a){g3.C(e,a),Ms("preconnect",e,a)}function Iv(e,a,i){g3.L(e,a,i);var u=w0;if(u&&e&&a){var v='link[rel="preload"][as="'+x4(a)+'"]';a==="image"&&i&&i.imageSrcSet?(v+='[imagesrcset="'+x4(i.imageSrcSet)+'"]',typeof i.imageSizes=="string"&&(v+='[imagesizes="'+x4(i.imageSizes)+'"]')):v+='[href="'+x4(e)+'"]';var z=v;switch(a){case"style":z=C0(e);break;case"script":z=S0(e)}A4.has(z)||(e=b({rel:"preload",href:a==="image"&&i&&i.imageSrcSet?void 0:e,as:a},i),A4.set(z,e),u.querySelector(v)!==null||a==="style"&&u.querySelector(_8(z))||a==="script"&&u.querySelector(q8(z))||(a=u.createElement("link"),X2(a,"link",e),$2(a),u.head.appendChild(a)))}}function Pv(e,a){g3.m(e,a);var i=w0;if(i&&e){var u=a&&typeof a.as=="string"?a.as:"script",v='link[rel="modulepreload"][as="'+x4(u)+'"][href="'+x4(e)+'"]',z=v;switch(u){case"audioworklet":case"paintworklet":case"serviceworker":case"sharedworker":case"worker":case"script":z=S0(e)}if(!A4.has(z)&&(e=b({rel:"modulepreload",href:e},a),A4.set(z,e),i.querySelector(v)===null)){switch(u){case"audioworklet":case"paintworklet":case"serviceworker":case"sharedworker":case"worker":case"script":if(i.querySelector(q8(z)))return}u=i.createElement("link"),X2(u,"link",e),$2(u),i.head.appendChild(u)}}}function $v(e,a,i){g3.S(e,a,i);var u=w0;if(u&&e){var v=Z6(u).hoistableStyles,z=C0(e);a=a||"default";var A=v.get(z);if(!A){var R={loading:0,preload:null};if(A=u.querySelector(_8(z)))R.loading=5;else{e=b({rel:"stylesheet",href:e,"data-precedence":a},i),(i=A4.get(z))&&fc(e,i);var D=A=u.createElement("link");$2(D),X2(D,"link",e),D._p=new Promise(function(J,h1){D.onload=J,D.onerror=h1}),D.addEventListener("load",function(){R.loading|=1}),D.addEventListener("error",function(){R.loading|=2}),R.loading|=4,j5(A,a,u)}A={type:"stylesheet",instance:A,count:1,state:R},v.set(z,A)}}}function Zv(e,a){g3.X(e,a);var i=w0;if(i&&e){var u=Z6(i).hoistableScripts,v=S0(e),z=u.get(v);z||(z=i.querySelector(q8(v)),z||(e=b({src:e,async:!0},a),(a=A4.get(v))&&mc(e,a),z=i.createElement("script"),$2(z),X2(z,"link",e),i.head.appendChild(z)),z={type:"script",instance:z,count:1,state:null},u.set(v,z))}}function Gv(e,a){g3.M(e,a);var i=w0;if(i&&e){var u=Z6(i).hoistableScripts,v=S0(e),z=u.get(v);z||(z=i.querySelector(q8(v)),z||(e=b({src:e,async:!0,type:"module"},a),(a=A4.get(v))&&mc(e,a),z=i.createElement("script"),$2(z),X2(z,"link",e),i.head.appendChild(z)),z={type:"script",instance:z,count:1,state:null},u.set(v,z))}}function ws(e,a,i,u){var v=(v=r1.current)?B5(v):null;if(!v)throw Error(l(446));switch(e){case"meta":case"title":return null;case"style":return typeof i.precedence=="string"&&typeof i.href=="string"?(a=C0(i.href),i=Z6(v).hoistableStyles,u=i.get(a),u||(u={type:"style",instance:null,count:0,state:null},i.set(a,u)),u):{type:"void",instance:null,count:0,state:null};case"link":if(i.rel==="stylesheet"&&typeof i.href=="string"&&typeof i.precedence=="string"){e=C0(i.href);var z=Z6(v).hoistableStyles,A=z.get(e);if(A||(v=v.ownerDocument||v,A={type:"stylesheet",instance:null,count:0,state:{loading:0,preload:null}},z.set(e,A),(z=v.querySelector(_8(e)))&&!z._p&&(A.instance=z,A.state.loading=5),A4.has(e)||(i={rel:"preload",as:"style",href:i.href,crossOrigin:i.crossOrigin,integrity:i.integrity,media:i.media,hrefLang:i.hrefLang,referrerPolicy:i.referrerPolicy},A4.set(e,i),z||Yv(v,e,i,A.state))),a&&u===null)throw Error(l(528,""));return A}if(a&&u!==null)throw Error(l(529,""));return null;case"script":return a=i.async,i=i.src,typeof i=="string"&&a&&typeof a!="function"&&typeof a!="symbol"?(a=S0(i),i=Z6(v).hoistableScripts,u=i.get(a),u||(u={type:"script",instance:null,count:0,state:null},i.set(a,u)),u):{type:"void",instance:null,count:0,state:null};default:throw Error(l(444,e))}}function C0(e){return'href="'+x4(e)+'"'}function _8(e){return'link[rel="stylesheet"]['+e+"]"}function Cs(e){return b({},e,{"data-precedence":e.precedence,precedence:null})}function Yv(e,a,i,u){e.querySelector('link[rel="preload"][as="style"]['+a+"]")?u.loading=1:(a=e.createElement("link"),u.preload=a,a.addEventListener("load",function(){return u.loading|=1}),a.addEventListener("error",function(){return u.loading|=2}),X2(a,"link",i),$2(a),e.head.appendChild(a))}function S0(e){return'[src="'+x4(e)+'"]'}function q8(e){return"script[async]"+e}function Ss(e,a,i){if(a.count++,a.instance===null)switch(a.type){case"style":var u=e.querySelector('style[data-href~="'+x4(i.href)+'"]');if(u)return a.instance=u,$2(u),u;var v=b({},i,{"data-href":i.href,"data-precedence":i.precedence,href:null,precedence:null});return u=(e.ownerDocument||e).createElement("style"),$2(u),X2(u,"style",v),j5(u,i.precedence,e),a.instance=u;case"stylesheet":v=C0(i.href);var z=e.querySelector(_8(v));if(z)return a.state.loading|=4,a.instance=z,$2(z),z;u=Cs(i),(v=A4.get(v))&&fc(u,v),z=(e.ownerDocument||e).createElement("link"),$2(z);var A=z;return A._p=new Promise(function(R,D){A.onload=R,A.onerror=D}),X2(z,"link",u),a.state.loading|=4,j5(z,i.precedence,e),a.instance=z;case"script":return z=S0(i.src),(v=e.querySelector(q8(z)))?(a.instance=v,$2(v),v):(u=i,(v=A4.get(z))&&(u=b({},i),mc(u,v)),e=e.ownerDocument||e,v=e.createElement("script"),$2(v),X2(v,"link",u),e.head.appendChild(v),a.instance=v);case"void":return null;default:throw Error(l(443,a.type))}else a.type==="stylesheet"&&(a.state.loading&4)===0&&(u=a.instance,a.state.loading|=4,j5(u,i.precedence,e));return a.instance}function j5(e,a,i){for(var u=i.querySelectorAll('link[rel="stylesheet"][data-precedence],style[data-precedence]'),v=u.length?u[u.length-1]:null,z=v,A=0;A title"):null)}function Kv(e,a,i){if(i===1||a.itemProp!=null)return!1;switch(e){case"meta":case"title":return!0;case"style":if(typeof a.precedence!="string"||typeof a.href!="string"||a.href==="")break;return!0;case"link":if(typeof a.rel!="string"||typeof a.href!="string"||a.href===""||a.onLoad||a.onError)break;switch(a.rel){case"stylesheet":return e=a.disabled,typeof a.precedence=="string"&&e==null;default:return!0}case"script":if(a.async&&typeof a.async!="function"&&typeof a.async!="symbol"&&!a.onLoad&&!a.onError&&a.src&&typeof a.src=="string")return!0}return!1}function Ls(e){return!(e.type==="stylesheet"&&(e.state.loading&3)===0)}function Qv(e,a,i,u){if(i.type==="stylesheet"&&(typeof u.media!="string"||matchMedia(u.media).matches!==!1)&&(i.state.loading&4)===0){if(i.instance===null){var v=C0(u.href),z=a.querySelector(_8(v));if(z){a=z._p,a!==null&&typeof a=="object"&&typeof a.then=="function"&&(e.count++,e=k5.bind(e),a.then(e,e)),i.state.loading|=4,i.instance=z,$2(z);return}z=a.ownerDocument||a,u=Cs(u),(v=A4.get(v))&&fc(u,v),z=z.createElement("link"),$2(z);var A=z;A._p=new Promise(function(R,D){A.onload=R,A.onerror=D}),X2(z,"link",u),i.instance=z}e.stylesheets===null&&(e.stylesheets=new Map),e.stylesheets.set(i,a),(a=i.state.preload)&&(i.state.loading&3)===0&&(e.count++,i=k5.bind(e),a.addEventListener("load",i),a.addEventListener("error",i))}}var vc=0;function Xv(e,a){return e.stylesheets&&e.count===0&&R5(e,e.stylesheets),0vc?50:800)+a);return e.unsuspend=i,function(){e.unsuspend=null,clearTimeout(u),clearTimeout(v)}}:null}function k5(){if(this.count--,this.count===0&&(this.imgCount===0||!this.waitingForImages)){if(this.stylesheets)R5(this,this.stylesheets);else if(this.unsuspend){var e=this.unsuspend;this.unsuspend=null,e()}}}var F5=null;function R5(e,a){e.stylesheets=null,e.unsuspend!==null&&(e.count++,F5=new Map,a.forEach(Wv,e),F5=null,k5.call(e))}function Wv(e,a){if(!(a.state.loading&4)){var i=F5.get(e);if(i)var u=i.get(null);else{i=new Map,F5.set(e,i);for(var v=e.querySelectorAll("link[data-precedence],style[data-precedence]"),z=0;z"u"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!="function"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(t)}catch(c){console.error(c)}}return t(),Cc.exports=pp(),Cc.exports}var xp=gp();var Js="popstate";function zp(t={}){function c(l,o){let{pathname:h,search:d,hash:m}=l.location;return va("",{pathname:h,search:d,hash:m},o.state&&o.state.usr||null,o.state&&o.state.key||"default")}function n(l,o){return typeof o=="string"?o:ut(o)}return yp(c,n,null,t)}function A2(t,c){if(t===!1||t===null||typeof t>"u")throw new Error(c)}function U4(t,c){if(!t){typeof console<"u"&&console.warn(c);try{throw new Error(c)}catch{}}}function bp(){return Math.random().toString(36).substring(2,10)}function to(t,c){return{usr:t.state,key:t.key,idx:c}}function va(t,c,n=null,l){return{pathname:typeof t=="string"?t:t.pathname,search:"",hash:"",...typeof c=="string"?Z0(c):c,state:n,key:c&&c.key||l||bp()}}function ut({pathname:t="/",search:c="",hash:n=""}){return c&&c!=="?"&&(t+=c.charAt(0)==="?"?c:"?"+c),n&&n!=="#"&&(t+=n.charAt(0)==="#"?n:"#"+n),t}function Z0(t){let c={};if(t){let n=t.indexOf("#");n>=0&&(c.hash=t.substring(n),t=t.substring(0,n));let l=t.indexOf("?");l>=0&&(c.search=t.substring(l),t=t.substring(0,l)),t&&(c.pathname=t)}return c}function yp(t,c,n,l={}){let{window:o=document.defaultView,v5Compat:h=!1}=l,d=o.history,m="POP",p=null,x=g();x==null&&(x=0,d.replaceState({...d.state,idx:x},""));function g(){return(d.state||{idx:null}).idx}function b(){m="POP";let C=g(),B=C==null?null:C-x;x=C,p&&p({action:m,location:L.location,delta:B})}function y(C,B){m="PUSH";let S=va(L.location,C,B);x=g()+1;let w=to(S,x),j=L.createHref(S);try{d.pushState(w,"",j)}catch(E){if(E instanceof DOMException&&E.name==="DataCloneError")throw E;o.location.assign(j)}h&&p&&p({action:m,location:L.location,delta:1})}function M(C,B){m="REPLACE";let S=va(L.location,C,B);x=g();let w=to(S,x),j=L.createHref(S);d.replaceState(w,"",j),h&&p&&p({action:m,location:L.location,delta:0})}function H(C){return Mp(C)}let L={get action(){return m},get location(){return t(o,d)},listen(C){if(p)throw new Error("A history only accepts one active listener");return o.addEventListener(Js,b),p=C,()=>{o.removeEventListener(Js,b),p=null}},createHref(C){return c(o,C)},createURL:H,encodeLocation(C){let B=H(C);return{pathname:B.pathname,search:B.search,hash:B.hash}},push:y,replace:M,go(C){return d.go(C)}};return L}function Mp(t,c=!1){let n="http://localhost";typeof window<"u"&&(n=window.location.origin!=="null"?window.location.origin:window.location.href),A2(n,"No window.location.(origin|href) available to create URL");let l=typeof t=="string"?t:ut(t);return l=l.replace(/ $/,"%20"),!c&&l.startsWith("//")&&(l=n+l),new URL(l,n)}function eh(t,c,n="/"){return wp(t,c,n,!1)}function wp(t,c,n,l){let o=typeof c=="string"?Z0(c):c,h=C3(o.pathname||"/",n);if(h==null)return null;let d=ch(t);Cp(d);let m=null;for(let p=0;m==null&&p{let g={relativePath:x===void 0?d.path||"":x,caseSensitive:d.caseSensitive===!0,childrenIndex:m,route:d};if(g.relativePath.startsWith("/")){if(!g.relativePath.startsWith(l)&&p)return;A2(g.relativePath.startsWith(l),`Absolute route path "${g.relativePath}" nested under path "${l}" is not valid. An absolute child route path must start with the combined path of all its parent routes.`),g.relativePath=g.relativePath.slice(l.length)}let b=M3([l,g.relativePath]),y=n.concat(g);d.children&&d.children.length>0&&(A2(d.index!==!0,`Index routes must not have child routes. Please remove all child routes from route path "${b}".`),ch(d.children,c,y,b,p)),!(d.path==null&&!d.index)&&c.push({path:b,score:jp(b,d.index),routesMeta:y})};return t.forEach((d,m)=>{if(d.path===""||!d.path?.includes("?"))h(d,m);else for(let p of ah(d.path))h(d,m,!0,p)}),c}function ah(t){let c=t.split("/");if(c.length===0)return[];let[n,...l]=c,o=n.endsWith("?"),h=n.replace(/\?$/,"");if(l.length===0)return o?[h,""]:[h];let d=ah(l.join("/")),m=[];return m.push(...d.map(p=>p===""?h:[h,p].join("/"))),o&&m.push(...d),m.map(p=>t.startsWith("/")&&p===""?"/":p)}function Cp(t){t.sort((c,n)=>c.score!==n.score?n.score-c.score:Np(c.routesMeta.map(l=>l.childrenIndex),n.routesMeta.map(l=>l.childrenIndex)))}var Sp=/^:[\w-]+$/,Ap=3,Hp=2,Lp=1,Vp=10,Bp=-2,eo=t=>t==="*";function jp(t,c){let n=t.split("/"),l=n.length;return n.some(eo)&&(l+=Bp),c&&(l+=Hp),n.filter(o=>!eo(o)).reduce((o,h)=>o+(Sp.test(h)?Ap:h===""?Lp:Vp),l)}function Np(t,c){return t.length===c.length&&t.slice(0,-1).every((l,o)=>l===c[o])?t[t.length-1]-c[c.length-1]:0}function kp(t,c,n=!1){let{routesMeta:l}=t,o={},h="/",d=[];for(let m=0;m{if(g==="*"){let H=m[y]||"";d=h.slice(0,h.length-H.length).replace(/(.)\/+$/,"$1")}const M=m[y];return b&&!M?x[g]=void 0:x[g]=(M||"").replace(/%2F/g,"/"),x},{}),pathname:h,pathnameBase:d,pattern:t}}function Fp(t,c=!1,n=!0){U4(t==="*"||!t.endsWith("*")||t.endsWith("/*"),`Route path "${t}" will be treated as if it were "${t.replace(/\*$/,"/*")}" because the \`*\` character must always follow a \`/\` in the pattern. To get rid of this warning, please change the route path to "${t.replace(/\*$/,"/*")}".`);let l=[],o="^"+t.replace(/\/*\*?$/,"").replace(/^\/*/,"/").replace(/[\\.*+^${}|()[\]]/g,"\\$&").replace(/\/:([\w-]+)(\?)?/g,(d,m,p)=>(l.push({paramName:m,isOptional:p!=null}),p?"/?([^\\/]+)?":"/([^\\/]+)")).replace(/\/([\w-]+)\?(\/|$)/g,"(/$1)?$2");return t.endsWith("*")?(l.push({paramName:"*"}),o+=t==="*"||t==="/*"?"(.*)$":"(?:\\/(.+)|\\/*)$"):n?o+="\\/*$":t!==""&&t!=="/"&&(o+="(?:(?=\\/|$))"),[new RegExp(o,c?void 0:"i"),l]}function Rp(t){try{return t.split("/").map(c=>decodeURIComponent(c).replace(/\//g,"%2F")).join("/")}catch(c){return U4(!1,`The URL path "${t}" could not be decoded because it is a malformed URL segment. This is probably due to a bad percent encoding (${c}).`),t}}function C3(t,c){if(c==="/")return t;if(!t.toLowerCase().startsWith(c.toLowerCase()))return null;let n=c.endsWith("/")?c.length-1:c.length,l=t.charAt(n);return l&&l!=="/"?null:t.slice(n)||"/"}var Ep=/^(?:[a-z][a-z0-9+.-]*:|\/\/)/i,Tp=t=>Ep.test(t);function _p(t,c="/"){let{pathname:n,search:l="",hash:o=""}=typeof t=="string"?Z0(t):t,h;if(n)if(Tp(n))h=n;else{if(n.includes("//")){let d=n;n=n.replace(/\/\/+/g,"/"),U4(!1,`Pathnames cannot have embedded double slashes - normalizing ${d} -> ${n}`)}n.startsWith("/")?h=co(n.substring(1),"/"):h=co(n,c)}else h=c;return{pathname:h,search:Op(l),hash:Up(o)}}function co(t,c){let n=c.replace(/\/+$/,"").split("/");return t.split("/").forEach(o=>{o===".."?n.length>1&&n.pop():o!=="."&&n.push(o)}),n.length>1?n.join("/"):"/"}function Lc(t,c,n,l){return`Cannot include a '${t}' character in a manually specified \`to.${c}\` field [${JSON.stringify(l)}]. Please separate it out to the \`to.${n}\` field. Alternatively you may provide the full path as a string in and the router will parse it for you.`}function qp(t){return t.filter((c,n)=>n===0||c.route.path&&c.route.path.length>0)}function nh(t){let c=qp(t);return c.map((n,l)=>l===c.length-1?n.pathname:n.pathnameBase)}function rh(t,c,n,l=!1){let o;typeof t=="string"?o=Z0(t):(o={...t},A2(!o.pathname||!o.pathname.includes("?"),Lc("?","pathname","search",o)),A2(!o.pathname||!o.pathname.includes("#"),Lc("#","pathname","hash",o)),A2(!o.search||!o.search.includes("#"),Lc("#","search","hash",o)));let h=t===""||o.pathname==="",d=h?"/":o.pathname,m;if(d==null)m=n;else{let b=c.length-1;if(!l&&d.startsWith("..")){let y=d.split("/");for(;y[0]==="..";)y.shift(),b-=1;o.pathname=y.join("/")}m=b>=0?c[b]:"/"}let p=_p(o,m),x=d&&d!=="/"&&d.endsWith("/"),g=(h||d===".")&&n.endsWith("/");return!p.pathname.endsWith("/")&&(x||g)&&(p.pathname+="/"),p}var M3=t=>t.join("/").replace(/\/\/+/g,"/"),Dp=t=>t.replace(/\/+$/,"").replace(/^\/*/,"/"),Op=t=>!t||t==="?"?"":t.startsWith("?")?t:"?"+t,Up=t=>!t||t==="#"?"":t.startsWith("#")?t:"#"+t;function Ip(t){return t!=null&&typeof t.status=="number"&&typeof t.statusText=="string"&&typeof t.internal=="boolean"&&"data"in t}Object.getOwnPropertyNames(Object.prototype).sort().join("\0");var lh=["POST","PUT","PATCH","DELETE"];new Set(lh);var Pp=["GET",...lh];new Set(Pp);var G0=f.createContext(null);G0.displayName="DataRouter";var Ze=f.createContext(null);Ze.displayName="DataRouterState";f.createContext(!1);var ih=f.createContext({isTransitioning:!1});ih.displayName="ViewTransition";var $p=f.createContext(new Map);$p.displayName="Fetchers";var Zp=f.createContext(null);Zp.displayName="Await";var W4=f.createContext(null);W4.displayName="Navigation";var wt=f.createContext(null);wt.displayName="Location";var S3=f.createContext({outlet:null,matches:[],isDataRoute:!1});S3.displayName="Route";var Ja=f.createContext(null);Ja.displayName="RouteError";function Gp(t,{relative:c}={}){A2(Ct(),"useHref() may be used only in the context of a component.");let{basename:n,navigator:l}=f.useContext(W4),{hash:o,pathname:h,search:d}=St(t,{relative:c}),m=h;return n!=="/"&&(m=h==="/"?n:M3([n,h])),l.createHref({pathname:m,search:d,hash:o})}function Ct(){return f.useContext(wt)!=null}function l6(){return A2(Ct(),"useLocation() may be used only in the context of a component."),f.useContext(wt).location}var sh="You should call navigate() in a React.useEffect(), not when your component is first rendered.";function oh(t){f.useContext(W4).static||f.useLayoutEffect(t)}function tn(){let{isDataRoute:t}=f.useContext(S3);return t?lg():Yp()}function Yp(){A2(Ct(),"useNavigate() may be used only in the context of a component.");let t=f.useContext(G0),{basename:c,navigator:n}=f.useContext(W4),{matches:l}=f.useContext(S3),{pathname:o}=l6(),h=JSON.stringify(nh(l)),d=f.useRef(!1);return oh(()=>{d.current=!0}),f.useCallback((p,x={})=>{if(U4(d.current,sh),!d.current)return;if(typeof p=="number"){n.go(p);return}let g=rh(p,JSON.parse(h),o,x.relative==="path");t==null&&c!=="/"&&(g.pathname=g.pathname==="/"?c:M3([c,g.pathname])),(x.replace?n.replace:n.push)(g,x.state,x)},[c,n,h,o,t])}f.createContext(null);function St(t,{relative:c}={}){let{matches:n}=f.useContext(S3),{pathname:l}=l6(),o=JSON.stringify(nh(n));return f.useMemo(()=>rh(t,JSON.parse(o),l,c==="path"),[t,o,l,c])}function Kp(t,c){return uh(t,c)}function uh(t,c,n,l,o){A2(Ct(),"useRoutes() may be used only in the context of a component.");let{navigator:h}=f.useContext(W4),{matches:d}=f.useContext(S3),m=d[d.length-1],p=m?m.params:{},x=m?m.pathname:"/",g=m?m.pathnameBase:"/",b=m&&m.route;{let S=b&&b.path||"";hh(x,!b||S.endsWith("*")||S.endsWith("*?"),`You rendered descendant (or called \`useRoutes()\`) at "${x}" (under ) but the parent route path has no trailing "*". This means if you navigate deeper, the parent won't match anymore and therefore the child routes will never render. -Please change the parent to .`)}let y=r6(),M;if(c){let S=typeof c=="string"?$0(c):c;A2(g==="/"||S.pathname?.startsWith(g),`When overriding the location using \`\` or \`useRoutes(routes, location)\`, the location pathname must begin with the portion of the URL pathname that was matched by all parent routes. The current pathname base is "${g}" but pathname "${S.pathname}" was given in the \`location\` prop.`),M=S}else M=y;let H=M.pathname||"/",L=H;if(g!=="/"){let S=g.replace(/^\//,"").split("/");L="/"+H.replace(/^\//,"").split("/").slice(S.length).join("/")}let C=Qu(t,{pathname:L});O4(b||C!=null,`No routes matched location "${M.pathname}${M.search}${M.hash}" `),O4(C==null||C[C.length-1].route.element!==void 0||C[C.length-1].route.Component!==void 0||C[C.length-1].route.lazy!==void 0,`Matched leaf route at location "${M.pathname}${M.search}${M.hash}" does not have an element or Component. This means it will render an with a null value by default resulting in an "empty" page.`);let B=Kp(C&&C.map(S=>Object.assign({},S,{params:Object.assign({},p,S.params),pathname:y3([g,h.encodeLocation?h.encodeLocation(S.pathname.replace(/\?/g,"%3F").replace(/#/g,"%23")).pathname:S.pathname]),pathnameBase:S.pathnameBase==="/"?g:y3([g,h.encodeLocation?h.encodeLocation(S.pathnameBase.replace(/\?/g,"%3F").replace(/#/g,"%23")).pathname:S.pathnameBase])})),d,n,i,u);return c&&B?f.createElement(M5.Provider,{value:{location:{pathname:"/",search:"",hash:"",state:null,key:"default",...M},navigationType:"POP"}},B):B}function $p(){let t=tg(),c=_p(t)?`${t.status} ${t.statusText}`:t instanceof Error?t.message:JSON.stringify(t),n=t instanceof Error?t.stack:null,i="rgba(200,200,200, 0.5)",u={padding:"0.5rem",backgroundColor:i},h={padding:"2px 4px",backgroundColor:i},d=null;return console.error("Error handled by React Router default ErrorBoundary:",t),d=f.createElement(f.Fragment,null,f.createElement("p",null,"💿 Hey developer 👋"),f.createElement("p",null,"You can provide a way better UX than this when your app throws errors by providing your own ",f.createElement("code",{style:h},"ErrorBoundary")," or"," ",f.createElement("code",{style:h},"errorElement")," prop on your route.")),f.createElement(f.Fragment,null,f.createElement("h2",null,"Unexpected Application Error!"),f.createElement("h3",{style:{fontStyle:"italic"}},c),n?f.createElement("pre",{style:u},n):null,d)}var Zp=f.createElement($p,null),Gp=class extends f.Component{constructor(t){super(t),this.state={location:t.location,revalidation:t.revalidation,error:t.error}}static getDerivedStateFromError(t){return{error:t}}static getDerivedStateFromProps(t,c){return c.location!==t.location||c.revalidation!=="idle"&&t.revalidation==="idle"?{error:t.error,location:t.location,revalidation:t.revalidation}:{error:t.error!==void 0?t.error:c.error,location:c.location,revalidation:t.revalidation||c.revalidation}}componentDidCatch(t,c){this.props.onError?this.props.onError(t,c):console.error("React Router caught the following error during render",t)}render(){return this.state.error!==void 0?f.createElement(C3.Provider,{value:this.props.routeContext},f.createElement(Qa.Provider,{value:this.state.error,children:this.props.component})):this.props.children}};function Yp({routeContext:t,match:c,children:n}){let i=f.useContext(Z0);return i&&i.static&&i.staticContext&&(c.route.errorElement||c.route.ErrorBoundary)&&(i.staticContext._deepestRenderedBoundaryId=c.route.id),f.createElement(C3.Provider,{value:t},n)}function Kp(t,c=[],n=null,i=null,u=null){if(t==null){if(!n)return null;if(n.errors)t=n.matches;else if(c.length===0&&!n.initialized&&n.matches.length>0)t=n.matches;else return null}let h=t,d=n?.errors;if(d!=null){let g=h.findIndex(b=>b.route.id&&d?.[b.route.id]!==void 0);A2(g>=0,`Could not find a matching route for errors on route IDs: ${Object.keys(d).join(",")}`),h=h.slice(0,Math.min(h.length,g+1))}let m=!1,p=-1;if(n)for(let g=0;g=0?h=h.slice(0,p+1):h=[h[0]];break}}}let x=n&&i?(g,b)=>{i(g,{location:n.location,params:n.matches?.[0]?.params??{},errorInfo:b})}:void 0;return h.reduceRight((g,b,y)=>{let M,H=!1,L=null,C=null;n&&(M=d&&b.route.id?d[b.route.id]:void 0,L=b.route.errorElement||Zp,m&&(p<0&&y===0?(lh("route-fallback",!1,"No `HydrateFallback` element provided to render during initial hydration"),H=!0,C=null):p===y&&(H=!0,C=b.route.hydrateFallbackElement||null)));let B=c.concat(h.slice(0,y+1)),S=()=>{let w;return M?w=L:H?w=C:b.route.Component?w=f.createElement(b.route.Component,null):b.route.element?w=b.route.element:w=g,f.createElement(Yp,{match:b,routeContext:{outlet:g,matches:B,isDataRoute:n!=null},children:w})};return n&&(b.route.ErrorBoundary||b.route.errorElement||y===0)?f.createElement(Gp,{location:n.location,revalidation:n.revalidation,component:L,error:M,children:S(),routeContext:{outlet:null,matches:B,isDataRoute:!0},onError:x}):S()},null)}function Wa(t){return`${t} must be used within a data router. See https://reactrouter.com/en/main/routers/picking-a-router.`}function Qp(t){let c=f.useContext(Z0);return A2(c,Wa(t)),c}function Xp(t){let c=f.useContext(Ie);return A2(c,Wa(t)),c}function Wp(t){let c=f.useContext(C3);return A2(c,Wa(t)),c}function Ja(t){let c=Wp(t),n=c.matches[c.matches.length-1];return A2(n.route.id,`${t} can only be used on routes that contain a unique "id"`),n.route.id}function Jp(){return Ja("useRouteId")}function tg(){let t=f.useContext(Qa),c=Xp("useRouteError"),n=Ja("useRouteError");return t!==void 0?t:c.errors?.[n]}function eg(){let{router:t}=Qp("useNavigate"),c=Ja("useNavigate"),n=f.useRef(!1);return nh(()=>{n.current=!0}),f.useCallback(async(u,h={})=>{O4(n.current,ah),n.current&&(typeof u=="number"?t.navigate(u):await t.navigate(u,{fromRouteId:c,...h}))},[t,c])}var to={};function lh(t,c,n){!c&&!to[t]&&(to[t]=!0,O4(!1,n))}f.memo(cg);function cg({routes:t,future:c,state:n,unstable_onError:i}){return rh(t,void 0,n,i,c)}function g3(t){A2(!1,"A is only ever to be used as the child of element, never rendered directly. Please wrap your in a .")}function ag({basename:t="/",children:c=null,location:n,navigationType:i="POP",navigator:u,static:h=!1}){A2(!w5(),"You cannot render a inside another . You should never have more than one in your app.");let d=t.replace(/^\/*/,"/"),m=f.useMemo(()=>({basename:d,navigator:u,static:h,future:{}}),[d,u,h]);typeof n=="string"&&(n=$0(n));let{pathname:p="/",search:x="",hash:g="",state:b=null,key:y="default"}=n,M=f.useMemo(()=>{let H=w3(p,d);return H==null?null:{location:{pathname:H,search:x,hash:g,state:b,key:y},navigationType:i}},[d,p,x,g,b,y,i]);return O4(M!=null,` is not able to match the URL "${p}${x}${g}" because it does not start with the basename, so the won't render anything.`),M==null?null:f.createElement(X4.Provider,{value:m},f.createElement(M5.Provider,{children:c,value:M}))}function ng({children:t,location:c}){return Pp(fa(t),c)}function fa(t,c=[]){let n=[];return f.Children.forEach(t,(i,u)=>{if(!f.isValidElement(i))return;let h=[...c,u];if(i.type===f.Fragment){n.push.apply(n,fa(i.props.children,h));return}A2(i.type===g3,`[${typeof i.type=="string"?i.type:i.type.name}] is not a component. All component children of must be a or `),A2(!i.props.index||!i.props.children,"An index route cannot have child routes.");let d={id:i.props.id||h.join("-"),caseSensitive:i.props.caseSensitive,element:i.props.element,Component:i.props.Component,index:i.props.index,path:i.props.path,middleware:i.props.middleware,loader:i.props.loader,action:i.props.action,hydrateFallbackElement:i.props.hydrateFallbackElement,HydrateFallback:i.props.HydrateFallback,errorElement:i.props.errorElement,ErrorBoundary:i.props.ErrorBoundary,hasErrorBoundary:i.props.hasErrorBoundary===!0||i.props.ErrorBoundary!=null||i.props.errorElement!=null,shouldRevalidate:i.props.shouldRevalidate,handle:i.props.handle,lazy:i.props.lazy};i.props.children&&(d.children=fa(i.props.children,h)),n.push(d)}),n}var de="get",fe="application/x-www-form-urlencoded";function Pe(t){return t!=null&&typeof t.tagName=="string"}function rg(t){return Pe(t)&&t.tagName.toLowerCase()==="button"}function lg(t){return Pe(t)&&t.tagName.toLowerCase()==="form"}function ig(t){return Pe(t)&&t.tagName.toLowerCase()==="input"}function sg(t){return!!(t.metaKey||t.altKey||t.ctrlKey||t.shiftKey)}function og(t,c){return t.button===0&&(!c||c==="_self")&&!sg(t)}var Ut=null;function ug(){if(Ut===null)try{new FormData(document.createElement("form"),0),Ut=!1}catch{Ut=!0}return Ut}var hg=new Set(["application/x-www-form-urlencoded","multipart/form-data","text/plain"]);function Ac(t){return t!=null&&!hg.has(t)?(O4(!1,`"${t}" is not a valid \`encType\` for \`
\`/\`\` and will default to "${fe}"`),null):t}function dg(t,c){let n,i,u,h,d;if(lg(t)){let m=t.getAttribute("action");i=m?w3(m,c):null,n=t.getAttribute("method")||de,u=Ac(t.getAttribute("enctype"))||fe,h=new FormData(t)}else if(rg(t)||ig(t)&&(t.type==="submit"||t.type==="image")){let m=t.form;if(m==null)throw new Error('Cannot submit a