UNPKG

billboard.js

Version:

Re-usable easy interface JavaScript chart library, based on D3 v4+

14 lines 450 kB
/*! * Copyright (c) 2017 ~ present NAVER Corp. * billboard.js project is licensed under the MIT license * * billboard.js, JavaScript chart library * https://naver.github.io/billboard.js/ * * @version 4.0.1 */(function(Vt,sn){if(typeof exports=="object"&&typeof module=="object")module.exports=sn(require("d3-axis"),require("d3-brush"),require("d3-drag"),require("d3-hierarchy"),require("d3-interpolate"),require("d3-scale"),require("d3-selection"),require("d3-shape"),require("d3-time-format"),require("d3-transition"),require("d3-zoom"));else if(typeof define=="function"&&define.amd)define(["d3-axis","d3-brush","d3-drag","d3-hierarchy","d3-interpolate","d3-scale","d3-selection","d3-shape","d3-time-format","d3-transition","d3-zoom"],sn);else{var Un=typeof exports=="object"?sn(require("d3-axis"),require("d3-brush"),require("d3-drag"),require("d3-hierarchy"),require("d3-interpolate"),require("d3-scale"),require("d3-selection"),require("d3-shape"),require("d3-time-format"),require("d3-transition"),require("d3-zoom")):sn(Vt.d3,Vt.d3,Vt.d3,Vt.d3,Vt.d3,Vt.d3,Vt.d3,Vt.d3,Vt.d3,Vt.d3,Vt.d3);for(var Kn in Un)(typeof exports=="object"?exports:Vt)[Kn]=Un[Kn]}})(this,function(Ua,Vt,sn,Un,Kn,tc,ec,nc,ic,ac,sc){return(function(){"use strict";var oc=[,,(function(q){q.exports=ec}),(function(q){q.exports=tc}),(function(q){q.exports=nc}),(function(q){q.exports=ic}),(function(q){q.exports=sn}),(function(q){q.exports=Vt}),(function(q){q.exports=ac}),(function(q){q.exports=sc}),(function(q){q.exports=Ua}),(function(q){q.exports=Kn}),(function(q){q.exports=Un})],Ka={};function _t(q){var jt=Ka[q];if(jt!==void 0)return jt.exports;var $=Ka[q]={exports:{}};return oc[q]($,$.exports,_t),$.exports}(function(){_t.d=function(q,jt){for(var $ in jt)_t.o(jt,$)&&!_t.o(q,$)&&Object.defineProperty(q,$,{enumerable:!0,get:jt[$]})}})(),(function(){_t.o=function(q,jt){return Object.prototype.hasOwnProperty.call(q,jt)}})(),(function(){_t.r=function(q){typeof Symbol!="undefined"&&Symbol.toStringTag&&Object.defineProperty(q,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(q,"__esModule",{value:!0})}})();var Pi={};return(function(){_t.r(Pi),_t.d(Pi,{bb:function(){return Kl},default:function(){return Kl}});var q={};_t.r(q),_t.d(q,{selection:function(){return Or},subchart:function(){return zr},zoom:function(){return Vr}});var jt={};_t.r(jt),_t.d(jt,{area:function(){return cl},areaLineRange:function(){return dl},areaSpline:function(){return hl},areaSplineRange:function(){return fl},areaStep:function(){return gl},areaStepRange:function(){return ul},bar:function(){return pl},bubble:function(){return xl},candlestick:function(){return yl},donut:function(){return El},funnel:function(){return $l},gauge:function(){return Fl},line:function(){return Ol},pie:function(){return Nl},polar:function(){return Gl},radar:function(){return Vl},scatter:function(){return Hl},spline:function(){return Bl},step:function(){return zl},treemap:function(){return Ul}});var $=_t(2);const F={AREA:"area",AREA_LINE_RANGE:"area-line-range",AREA_SPLINE:"area-spline",AREA_SPLINE_RANGE:"area-spline-range",AREA_STEP:"area-step",AREA_STEP_RANGE:"area-step-range",BAR:"bar",BUBBLE:"bubble",CANDLESTICK:"candlestick",DONUT:"donut",FUNNEL:"funnel",GAUGE:"gauge",LINE:"line",PIE:"pie",POLAR:"polar",RADAR:"radar",SCATTER:"scatter",SPLINE:"spline",STEP:"step",TREEMAP:"treemap"},rc={export:"exportApi",flow:"flow",xgrids:"grid",ygrids:"grid",regions:"regions",category:"category",categories:"category"},ue=10,rt=6,Ge=3,lc=rt+Ge,Za=1,qa={x:{start:"M0 -8.5 A6 6 0 0 0 -6.5 -3.5 V2.5 A6 6 0 0 0 0 8.5 Z M-2 -3.5 V3.5 M-4 -3.5 V3.5z",end:"M0 -8.5 A6 6 0 0 1 6.5 -3.5 V2.5 A6 6 0 0 1 0 8.5 Z M2 -3.5 V3.5 M4 -3.5 V3.5z"},y:{start:"M8.5 0 a6 6 0 0 0 -6 -6.5 H-2.5 a 6 6 0 0 0 -6 6.5 z m-5 -2 H-3.5 m7 -2 H-3.5z",end:"M8.5 0 a6 -6 0 0 1 -6 6.5 H-2.5 a 6 -6 0 0 1 -6 -6.5z m-5 2 H-3.5 m7 2 H-3.5z"}},Di={AREA:"initArea",AREA_LINE_RANGE:"initArea",AREA_SPLINE:"initArea",AREA_SPLINE_RANGE:"initArea",AREA_STEP:"initArea",AREA_STEP_RANGE:"initArea",BAR:"initBar",BUBBLE:"initCircle",CANDLESTICK:"initCandlestick",DONUT:"initArc",FUNNEL:"initFunnel",GAUGE:"initArc",LINE:"initLine",PIE:"initArc",POLAR:"initPolar",RADAR:"initCircle",SCATTER:"initCircle",SPLINE:"initLine",STEP:"initLine",TREEMAP:"initTreemap"},oe={Area:[F.AREA,F.AREA_SPLINE,F.AREA_SPLINE_RANGE,F.AREA_LINE_RANGE,F.AREA_STEP,F.AREA_STEP_RANGE],AreaRange:[F.AREA_SPLINE_RANGE,F.AREA_LINE_RANGE,F.AREA_STEP_RANGE],Arc:[F.PIE,F.DONUT,F.GAUGE,F.POLAR,F.RADAR],Line:[F.LINE,F.SPLINE,F.AREA,F.AREA_SPLINE,F.AREA_SPLINE_RANGE,F.AREA_LINE_RANGE,F.STEP,F.AREA_STEP,F.AREA_STEP_RANGE],Step:[F.STEP,F.AREA_STEP,F.AREA_STEP_RANGE],Spline:[F.SPLINE,F.AREA_SPLINE,F.AREA_SPLINE_RANGE]};var Pe=_t(3);const J=e=>e||e===0,O=e=>typeof e=="function",nt=e=>typeof e=="string",X=e=>typeof e=="number",yt=e=>typeof e=="undefined",dt=e=>typeof e!="undefined",We=e=>typeof e=="boolean",cc=e=>Math.ceil(e/10)*10,on=e=>Math.ceil(e)+.5,Ve=e=>e[1]-e[0],Ht=e=>typeof e=="object",dc=e=>{for(const t in e)return!1;return!0},Jt=e=>yt(e)||e===null||nt(e)&&e.length===0||Ht(e)&&!(e instanceof Date)&&dc(e)||X(e)&&isNaN(e),mt=e=>!Jt(e),st=e=>Array.isArray(e),Q=e=>e&&!(e!=null&&e.nodeType)&&Ht(e)&&!st(e);function uc(){return typeof globalThis=="object"&&globalThis!==null&&globalThis.Object===Object&&globalThis||typeof self=="object"&&self!==null&&self.Object===Object&&self||Function("return this")()}function hc(e){const t=typeof(e==null?void 0:e.requestAnimationFrame)=="function"&&typeof(e==null?void 0:e.cancelAnimationFrame)=="function",n=typeof(e==null?void 0:e.requestIdleCallback)=="function"&&typeof(e==null?void 0:e.cancelIdleCallback)=="function",i=s=>setTimeout(s,1),a=s=>clearTimeout(s);return[t?e.requestAnimationFrame:i,t?e.cancelAnimationFrame:a,n?e.requestIdleCallback:i,n?e.cancelIdleCallback:a]}const B=uc(),tt=B==null?void 0:B.document,[fc,R_,Ja,gc]=hc(B),pc=new Set(["span","div","p","br","b","i","em","small","strong","mark","u","s","sub","sup","h1","h2","h3","h4","h5","h6","ul","ol","li","dl","dt","dd","table","thead","tbody","tfoot","tr","th","td","caption","colgroup","col","hr","pre","code","blockquote","abbr","ins","del","a","img","figure","figcaption","svg","g","path","circle","ellipse","rect","line","polyline","polygon","text","tspan","textPath","use","defs","symbol","clipPath","mask","linearGradient","radialGradient","stop","pattern","marker","title","desc"]),xc=new Set(["class","id","style","title","lang","dir","href","src","alt","width","height","colspan","rowspan","scope","headers","d","points","x","y","x1","x2","y1","y2","cx","cy","r","rx","ry","dx","dy","viewBox","preserveAspectRatio","transform","fill","fill-opacity","fill-rule","stroke","stroke-width","stroke-opacity","stroke-linecap","stroke-linejoin","stroke-dasharray","stroke-dashoffset","opacity","clip-path","clip-rule","mask","font-family","font-size","font-weight","font-style","text-anchor","dominant-baseline","offset","stop-color","stop-opacity","gradientUnits","gradientTransform","spreadMethod","patternUnits","patternTransform","marker-start","marker-mid","marker-end","markerWidth","markerHeight","refX","refY","xlink:href"]),Zn=new Map;pc.forEach(e=>Zn.set(e.toLowerCase(),e));const qn=new Map;xc.forEach(e=>qn.set(e.toLowerCase(),e));const _c=new Set(["http:","https:","mailto:"]),mc=new Set(["href","src","xlink:href"]),vc=/^<\/?([a-zA-Z][a-zA-Z0-9]*)/,bc=/^<\/([a-zA-Z][a-zA-Z0-9]*)\s*>$/,yc=/^<([a-zA-Z][a-zA-Z0-9]*)([\s\S]*?)(\/?)>$/,Qa=/([a-zA-Z][\w:-]*)\s*(?:=\s*(?:"([^"]*)"|'([^']*)'|([^\s>]+)))?/g,ts=/url\s*\(\s*["']?([^"')]+)["']?\s*\)/gi,Tc=["expression(","behavior:","binding:","@import","@charset","-moz-binding:"];function Mi(e){return e.replace(/&colon;/gi,":").replace(/&newline;/gi,` `).replace(/&tab;/gi," ").replace(/&nbsp;/gi," ").replace(/&lt;/gi,"<").replace(/&gt;/gi,">").replace(/&amp;/gi,"&").replace(/&quot;/gi,'"').replace(/&apos;/gi,"'").replace(/&#(\d+);?/gi,(t,n)=>String.fromCharCode(parseInt(n,10))).replace(/&#x([0-9a-f]+);?/gi,(t,n)=>String.fromCharCode(parseInt(n,16)))}function es(e){const n=Mi(e).trim().replace(/[\s\u0000-\u001f]/g,"").toLowerCase();if(!n||n.startsWith("#"))return!0;const i=n.match(/^[^/?#]*:/);return i?_c.has(i[0]):!0}function wc(e){const n=Mi(e).replace(/[\u0000-\u001f]/g,"");ts.lastIndex=0;let i;for(;(i=ts.exec(n))!==null;)if(!es(i[1]))return null;const a=n.toLowerCase().replace(/\s/g,"");for(const s of Tc)if(a.includes(s))return null;return e}const Cc={'"':"&quot;","'":"&#39;","`":"&#96;"},Sc=/["'`]/g;function Ii(e){return e.replace(Sc,t=>Cc[t])}function Ac(e,t,n=!1){if(mc.has(e))return es(t)?n?Ii(t):t:null;if(e==="style"){const a=wc(t);return a===null?null:n?Ii(a):a}const i=Mi(t).toLowerCase().replace(/\s/g,"");return/\bon\w+=/.test(i)?null:n?Ii(t):t}function kc(e){const t=e.match(vc);return t?t[1].toLowerCase():null}function Lc(e){const t=kc(e);return t!==null&&Zn.has(t)}function Rc(e){var t,n,i;const a=e.match(bc);if(a){const p=a[1].toLowerCase();return`</${(t=Zn.get(p))!=null?t:p}>`}const s=e.match(yc);if(!s)return"";const[,o,r,l]=s,c=o.toLowerCase(),d=(n=Zn.get(c))!=null?n:c,u=[];Qa.lastIndex=0;let h;for(;(h=Qa.exec(r))!==null;){const p=h[1].toLowerCase(),x=h[2],_=h[3],v=h[4];if(p.startsWith("on"))continue;const m=(i=qn.get(p))!=null?i:p;let b,y;if(x!==void 0)b=x,y='"';else if(_!==void 0)b=_,y="'";else if(v!==void 0)b=v,y='"';else{qn.has(p)&&u.push(m);continue}if(qn.has(p)){const w=Ac(p,b,v!==void 0);w!==null&&u.push(`${m}=${y}${w}${y}`)}}const f=u.length>0?` ${u.join(" ")}`:"";return`<${d}${f}${l?"/>":">"}`}function me(e){return typeof e!="string"||!e||e.indexOf("<")===-1?e:e.replace(/<\/?[^>]*>|[^<>\s]+>/g,t=>t.startsWith("<!--")?"":t.startsWith("<")?Lc(t)?Rc(t):t.replace(/</g,"&lt;"):t.slice(0,-1)+"&gt;")}var Ec=Object.defineProperty,ns=Object.getOwnPropertySymbols,Pc=Object.prototype.hasOwnProperty,Dc=Object.prototype.propertyIsEnumerable,is=(e,t,n)=>t in e?Ec(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,as=(e,t)=>{for(var n in t||(t={}))Pc.call(t,n)&&is(e,n,t[n]);if(ns)for(var n of ns(t))Dc.call(t,n)&&is(e,n,t[n]);return e};function ss(e,t){for(let n=0;n<e.length;n++){const i=e[n];i!==null&&dt(i)&&t(i,n)}}function De(e,t,n){return dt(e[t])?e[t]:n}function Mc(e,t){for(const n in e)if(e[n]===t)return!0;return!1}function V(e,t,...n){const i=O(e);return i&&e.call(t,...n),i}function Jn(e,t){let n=0;const i=function(...a){!--n&&t.apply(this,a)};"duration"in e?e.each(()=>++n).on("end",i):(++n,e.call(i))}const Ft=e=>e.charAt(0).toUpperCase()+e.slice(1);function Ic(e,t="-"){return e.split(t).map((n,i)=>i?n.charAt(0).toUpperCase()+n.slice(1).toLowerCase():n.toLowerCase()).join("")}const He=e=>[].slice.call(e);function $c(...e){const t=n=>{if(st(n))return n.map(t);if(Q(n)&&n.constructor){const i=new n.constructor;for(const a in n)i[a]=t(n[a]);return i}return n};return e.map(n=>t(n)).reduce((n,i)=>as(as({},n),i))}function Tt(e={},t){st(t)&&t.forEach(n=>Tt(e,n));for(const n in t)/^\d+$/.test(n)||n in e||(e[n]=t[n]);return e}function $i(e){const t=e[0]instanceof Date,n=Array.from(new Set(t?e.map(Number):e));return t?n.map(i=>new Date(i)):n}function Fc(e){return e&&e.length?e.reduce((t,n)=>t.concat(n)):[]}function ve(e,...t){if(!t.length||t.length===1&&!t[0])return e;const n=t.shift();return Q(e)&&Q(n)&&Object.keys(n).forEach(i=>{if(!/^(__proto__|constructor|prototype)$/i.test(i)){const a=n[i];a instanceof Date?e[i]=new Date(a.getTime()):Q(a)?(!e[i]&&(e[i]={}),e[i]=ve(e[i],a)):e[i]=st(a)?a.concat():a}}),ve(e,...t)}function rn(e,t=!0){let n;return e[0]instanceof Date?n=t?(i,a)=>i-a:(i,a)=>a-i:t&&!e.every(isNaN)?n=(i,a)=>i-a:t||(n=(i,a)=>i>a&&-1||i<a&&1||i===a&&0),e.concat().sort(n)}function re(e,t){let n=t.filter(i=>mt(i));if(n.length)if(X(n[0])){let i=e==="min"?1/0:-1/0;for(const a of n)(e==="min"?a<i:a>i)&&(i=a);n=i}else n[0]instanceof Date&&(n=rn(n,e==="min")[0]);else n=void 0;return n}const Qn=(e,t,n=1)=>{const i=[],a=Math.max(0,Math.ceil((t-e)/n))|0;for(let s=0;s<a;s++)i.push(e+s*n);return i};let Oc=0;function he(e=!0){const t=++Oc;return e?String(t):t}function Fi(e,t,n,i,a){if(n>i)return-1;const s=Math.floor((n+i)/2);let{x:o,w:r=0}=e[s];return a&&(o=e[s].y,r=e[s].h),t>=o&&t<=o+r?s:t<o?Fi(e,t,n,s-1,a):Fi(e,t,s+1,i,a)}function Ye(e,t){return me(e.replace(/\{=([^}]+)\}/g,(n,i)=>{var a;return(a=t[i])!=null?a:""}))}function Nt(e){var t;let n;if(e instanceof Date)n=e;else if(nt(e)){const{config:i,format:a}=this;n=(t=a.dataTime(i.data_xFormat)(e))!=null?t:new Date(e)}else X(e)&&!isNaN(e)&&(n=new Date(+e));return(!n||isNaN(+n))&&console&&console.error&&console.error(`Failed to parse x '${e}' to Date object`),n}function os(e){if(Q(e)&&!nt(e)){const o=e;return{top:o.top||0,right:o.right||0,bottom:o.bottom||0,left:o.left||0}}const t=(nt(e)?e.trim().split(/\s+/):[e]).map(o=>+o||0),[n,i=n,a=n,s=i]=t;return{top:n,right:i,bottom:a,left:s}}function rs(e,t){t()===!1?fc(()=>rs(e,t)):e()}function ls(e,t=(n=>n)){const n=new Set;return ss(e,(i,a)=>{n.add(t(i,a))}),n}function cs(e,t,n=(i=>i)){const i=new Map;return ss(e,(a,s)=>{i.set(t(a,s),n(a,s))}),i}function Me(e="linear",t,n){const i={linear:Pe.scaleLinear,log:Pe.scaleSymlog,_log:Pe.scaleLog,time:Pe.scaleTime,utc:Pe.scaleUtc}[e]();return i.type=e,/_?log/.test(e)&&i.clamp(!0),i.range([t!=null?t:0,n!=null?n:1])}var Bc={getXScale(e,t,n,i){const a=this,s=a.state.loading!=="append"&&a.scale.zoom||Me(a.axis.getAxisType("x"),e,t);return a.getCustomizedXScale(n?s.domain(n):s,i)},getYScale(e,t,n,i,a){const o=this.axis.getAxisType(e);if(a&&a.type===o)return a.range([t,n]),i&&a.domain(i),a;const r=Me(o,t,n);return i&&r.domain(i),r},getYScaleById(e,t=!1){var n;const i=((n=this.axis)==null?void 0:n.getId(e))==="y2",a=t?i?"subY2":"subY":i?"y2":"y";return this.scale[a]},getCustomizedXScale(e,t){const n=this,i=()=>(t?t():n.axis.x.tickOffset())||(n.axis.isCategorized()?(e(1)-e(0))/2:0),a=n.config.axis_x_inverted,s=function(o){return e(o)+i()};for(const o in e)s[o]=e[o];return s.orgDomain=()=>e.domain(),s.orgScale=()=>e,n.axis.isCategorized()&&(s.domain=function(o){let r=o;return arguments.length?(e.domain(r),s):(r=this.orgDomain(),a?[r[0]+1,r[1]]:[r[0],r[1]+1])}),s},updateScales(e,t=!0){var n,i,a,s,o,r;const l=this,{axis:c,config:d,format:u,org:h,scale:f,state:{current:g,width:p,height:x,width2:_,height2:v,hasAxis:m,hasTreemap:b}}=l;if(m){const y=d.axis_rotated,T=l.getResettedPadding(1),w={x:y?T:0,y:y?0:x,subX:y?1:0,subY:y?0:v},C={x:y?x:p,y:y?p:T,subX:y?x:p,subY:y?_:1},A=t?(n=f.x)==null?void 0:n.orgDomain():f.zoom||(a=(i=f.x)==null?void 0:i.domain)==null?void 0:a.call(i),S=t?h.xDomain:f.zoom||(o=(s=f.subX)==null?void 0:s.domain)==null?void 0:o.call(s);f.x=l.getXScale(w.x,C.x,A,()=>c.x.tickOffset()),f.subX=l.getXScale(w.x,C.x,S,k=>{var L;return k%1?0:((L=c.subX)!=null?L:c.x).tickOffset()}),u.xAxisTick=c.getXAxisTickFormat(),u.subXAxisTick=c.getXAxisTickFormat(!0),c.setAxis("x",f.x,d.axis_x_tick_outer,e),d.subchart_show&&c.setAxis("subX",f.subX,d.axis_x_tick_outer,e),f.y=l.getYScale("y",w.y,C.y,f.y?f.y.domain():d.axis_y_default,f.y),f.subY=l.getYScale("y",w.subY,C.subY,f.subY?f.subY.domain():d.axis_y_default,f.subY),c.setAxis("y",f.y,d.axis_y_tick_outer,e),d.axis_y2_show&&(f.y2=l.getYScale("y2",w.y,C.y,f.y2?f.y2.domain():d.axis_y2_default,f.y2),f.subY2=l.getYScale("y2",w.subY,C.subY,f.subY2?f.subY2.domain():d.axis_y2_default,f.subY2),c.setAxis("y2",f.y2,d.axis_y2_tick_outer,e))}else if(b){const y=l.getCurrentPadding();f.x=(0,Pe.scaleLinear)().rangeRound([y.left,g.width-y.right]),f.y=(0,Pe.scaleLinear)().rangeRound([y.top,g.height-y.bottom])}else(r=l.updateArc)==null||r.call(l)},xx(e){const t=this,{config:n,scale:{x:i,zoom:a}}=t,s=n.zoom_enabled&&a?a:i;return e?s(J(e.x)?e.x:e):null},xv(e){const t=this,{axis:n,config:i,scale:{x:a,zoom:s}}=t,o=i.zoom_enabled&&s?s:a;let r=t.getBaseValue(e);return n.isTimeSeries()?r=Nt.call(t,r):n.isCategorized()&&nt(r)&&(r=i.axis_x_categories.indexOf(r)),o(r)},yv(e){const t=this,{scale:{y:n,y2:i}}=t;return(e.axis&&e.axis==="y2"?i:n)(t.getBaseValue(e))},subxx(e){return e?this.scale.subX(e.x):null}};const ds=1e5;function le(e){const t=/(\d+(?:\.\d+)?)px/.exec(e),n=parseFloat(t?t[1]:e);return Number.isFinite(n)?n:12}function Ut(e,t,n,i){return t.indices[n]||e.getShapeIndices(i)}function ln(e,t,n=[]){var i;const a=typeof t=="string"?t:t==null?void 0:t.id;return!((i=e.isGrouped)!=null&&i.call(e,a))||n.some(s=>s(e,t))}function Ie(e,t){var n;const i=typeof t=="string"?t:t==null?void 0:t.id;return i&&((n=e.data_types)==null?void 0:n[i])||e.data_type||F.LINE}function ti(e){const t=+e;return Number.isFinite(t)?t:null}function us(e){var t,n;const i=(n=(t=e.scale.zoom||e.scale.x)==null?void 0:t.domain)==null?void 0:n.call(t),a=ti(i==null?void 0:i[0]),s=ti(i==null?void 0:i[1]);return a===null||s===null?null:[Math.min(a,s),Math.max(a,s)]}function ei(e){return ti(e==null?void 0:e.x)}function zc(e,t,n){let i=0,a=e.length;for(;i<a;){const s=i+a>>1,o=ei(e[s]);if(o===null)return 0;(n?o<t:o>t)?i=s+1:a=s}return i}function Nc(e,t,n){let i=0,a=e.length;for(;i<a;){const s=i+a>>1,o=ei(e[s]);if(o===null)return e.length;(n?o<=t:o>=t)?i=s+1:a=s}return i}function be(e,t,n=1){const i=(t==null?void 0:t.values)||[],a={start:0,end:i.length},s=us(e);if(!i.length||!s)return a;const o=e.state,r=o._canvasVisibleRangeCache||(o._canvasVisibleRangeCache=new Map),l=[t.id,i.length,o.dataGeneration,s[0],s[1],n].join(":"),c=r.get(t.id);if((c==null?void 0:c.key)===l)return c.range;const d=ei(i[0]),u=ei(i[i.length-1]);if(d===null||u===null)return a;const h=d<=u,f=zc(i,s[0],h),g=Nc(i,s[1],h),p={start:Math.max(0,Math.min(f,g)-n),end:Math.min(i.length,Math.max(f,g)+n)};return r.set(t.id,{key:l,range:p}),p}function Kt(e,t){return Ie(e.config,t)===F.BAR}function Sn(e,t){return oe.Area.indexOf(Ie(e.config,t))>-1}function je(e,t){const n=Ie(e.config,t);return oe.Line.indexOf(n)>-1}function Ue(e,t){return Ie(e.config,t)===F.SCATTER}function Ke(e,t){return Ie(e.config,t)===F.BUBBLE}function Qt(e,t){return je(e,t)||Ue(e,t)||Ke(e,t)}function Xt(e,t){return Ie(e.config,t)===F.CANDLESTICK}function Oi(e,t){return Ie(e.config,t)===F.TREEMAP}function E_(e,t){const n=Ie(e,t);return n===F.BAR||oe.Area.indexOf(n)>-1}function Lt(e,t){const n=e.getBaseValue(t);return n!=null}function vt(e,t){return Number.isFinite(e)&&Number.isFinite(t)}function hs(e,t,n){const i=Math.ceil(n)+1,a=Math.max(1,Math.ceil(e)+i*2+1),s=Math.max(1,Math.ceil(t)+i*2+1);return{data:new Uint8Array(a*s),height:s,offset:i,width:a}}function fs(e,t,n){const i=Math.round(t)+e.offset,a=Math.round(n)+e.offset;if(i<0||i>=e.width||a<0||a>=e.height)return!1;const s=a*e.width+i;return e.data[s]?!1:(e.data[s]=1,!0)}function ni(e,t){const n=typeof e=="function"?e.call(t):e;return n!=null&&n.length?n:void 0}function gs(e,t,n){var i,a,s,o,r,l;if((a=(i=e.axis)==null?void 0:i.isTimeSeries)!=null&&a.call(i,n))return t instanceof Date?t:Nt.call(e,t);if(n==="x"&&((o=(s=e.axis)==null?void 0:s.isCategorized)!=null&&o.call(s))&&typeof t=="string"){const c=e.config.axis_x_categories.indexOf(t);return c>=0?c:t}return(l=(r=e.axis)==null?void 0:r.isLog)!=null&&l.call(r,n)&&t!==null&&t!==void 0?+t:t}function $e(e,t){return gs(e,t,"x")}function An(e,t,n="y"){return gs(e,t,n)}function ps(e,t,n="y"){return t.map(i=>An(e,i,n))}function Bi(e,t){return t.map(n=>$e(e,n)).filter(n=>{var i,a;return!(typeof n=="string"&&((a=(i=e.axis)==null?void 0:i.isCategorized)!=null&&a.call(i)))})}function Ze(e,t){const n=typeof t=="function"?t():t;return e.ticks?e.ticks(n):e.domain()}function xs(e,t){const[n,i]=e.domain(),a=+n,s=+i;if(t||!Number.isFinite(a)||!Number.isFinite(s)||s<=0)return Ze(e,t);const o=Me("_log").domain([a>0?a:1,s]).range(e.range());let r=o.ticks();for(let l=s.toFixed().length;r.length>15;l--)r=o.ticks(l);return r.length&&(r.splice(0,1,n),r.splice(r.length-1,1,i)),r}function kn(e,t){const n=+e,i=+t;return Number.isFinite(n)&&Number.isFinite(i)?Math.abs(n-i)<1e-6:e===t}function Xc(e,t){const[n,i]=t,a=e.slice();return n!==void 0&&!a.some(s=>kn(s,n))&&a.unshift(n),i!==void 0&&!a.some(s=>kn(s,i))&&a.push(i),a}function _s(e,t){const n=$e(e,t);return ti(n)}function zi(e){var t,n,i,a,s,o,r,l;const{scale:c}=e,d=(n=(t=c.zoom)==null?void 0:t.domain)==null?void 0:n.call(t),u=((a=(i=c.subX)==null?void 0:i.domain)==null?void 0:a.call(i))||((o=(s=c.x)==null?void 0:s.orgDomain)==null?void 0:o.call(s))||((l=(r=c.x)==null?void 0:r.domain)==null?void 0:l.call(r));return!(d!=null&&d.length)||!(u!=null&&u.length)?!1:!kn(d[0],u[0])||!kn(d[1],u[1])}function te(e){return zi(e)?e.scale.zoom:e.scale.x}function Gc(e,t,n=0){var i,a;const s=(a=(i=te(e)).domain)==null?void 0:a.call(i);if(!(s!=null&&s.length))return!0;const o=_s(e,t),r=+s[0],l=+s[1];return o===null||!Number.isFinite(r)||!Number.isFinite(l)?!0:o>=Math.min(r,l)-n&&o<=Math.max(r,l)+n}function Wc(e,t){const n=[t>0?Math.abs(e[t]-e[t-1]):1/0,t<e.length-1?Math.abs(e[t+1]-e[t]):1/0].filter(Number.isFinite),i=Math.min(...n);return Number.isFinite(i)?i/2:0}function ms(e,t){let n=0,i=e.length;for(;n<i;){const a=n+i>>1;e[a]<t?n=a+1:i=a}return n}function Vc(e,t){let n=0,i=e.length;for(;n<i;){const a=n+i>>1;e[a]<=t?n=a+1:i=a}return n}function Hc(e,t){var n;const{axis:i,state:a}=e,s=[a.dataGeneration,(n=i==null?void 0:i.isTimeSeries)!=null&&n.call(i)?1:0,t.map(c=>`${c.id}:${c.values.length}`).join(",")].join("|"),o=a._canvasXDataTickCache;if((o==null?void 0:o.key)===s)return o;const r=e.mapTargetsToUniqueXs(t),l={key:s,values:r,comparable:r.map(c=>{var d;return(d=_s(e,c))!=null?d:NaN})};return a._canvasXDataTickCache=l,l}function Yc(e,t){const{values:n,comparable:i}=t;if(!zi(e))return n;const a=us(e);if(!a||i.length!==n.length||!Number.isFinite(i[0]))return n.filter(d=>Gc(e,d));const[s,o]=a;let r=ms(i,s),l=Vc(i,o);const c=d=>{const u=ms(i,d);let h=-1,f=1/0;for(const g of[u-1,u]){const p=i[g],x=Math.abs(p-d);x<f&&(f=x,h=g)}h>-1&&h<i.length&&f<=Wc(i,h)+1e-6&&(r=Math.min(r,h),l=Math.max(l,h+1))};return c(s),c(o),n.slice(Math.max(0,r),Math.min(n.length,l))}function jc(e,t){return typeof e=="function"?`fn:${t}`:Array.isArray(e)?e.map(n=>n instanceof Date?+n:String(n)).join(","):""}function Uc(e,t){var n,i,a;const{config:s,state:o}=e,l=(((i=(n=te(e)).domain)==null?void 0:i.call(n))||[]).map(d=>d instanceof Date?+d:String(d)).join(","),c=s.axis_rotated?o.height:o.width;return[t?1:0,o.dataGeneration,l,c,s.axis_x_tick_fit?1:0,s.axis_x_tick_count||"",s.axis_x_tick_culling,s.axis_x_tick_culling_max||"",s.axis_x_tick_culling_reverse?1:0,((a=s.axis_x_categories)==null?void 0:a.length)||0,jc(s.axis_x_tick_values,o.redrawGeneration)].join("|")}function Ni(e,t,n,i=!1){var a;return(a=e.axis)!=null&&a.generateTickValues?e.axis.generateTickValues(t,n,i):t}function Kc(e,t){const[n,i]=e,a=[];if(!t||!Number.isFinite(t))return a;for(let s=Math.round(n);s<=i;s+=t)a.push(s);return a}function ii(e,t=!0){var n,i,a,s,o,r,l;const{axis:c,config:d}=e,u=te(e),h=((n=e.getTargetsToShow)==null?void 0:n.call(e))||e.filterTargetsToShow(),f=e.state._canvasXTickValuesCache||(e.state._canvasXTickValuesCache=new Map),g=Uc(e,t),p=f.get(g);if(p)return p;const x=m=>(f.set(g,m),m);if(!(h!=null&&h.length))return x([]);const _=ni(d.axis_x_tick_values,e.api);if(_){const m=Bi(e,_);return x(t?bs(e,m):m)}if(d.axis_x_tick_fit&&(h!=null&&h.length)&&e.mapTargetsToUniqueXs){const m=Hc(e,h),b=Yc(e,m),y=Ni(e,b,d.axis_x_tick_count,(i=c==null?void 0:c.isTimeSeries)==null?void 0:i.call(c));return x(t?bs(e,y,!0):y)}if(zi(e)&&!((a=c==null?void 0:c.isCategorized)!=null&&a.call(c))){const m=((o=(s=e.zoom)==null?void 0:s.getDomain)==null?void 0:o.call(s))||u.domain(),b=Xc(Ze(u,d.axis_x_tick_count||ue),m);return x(t?Ln(b,Gi(e)):b)}if((r=c==null?void 0:c.isCategorized)!=null&&r.call(c)&&((l=d.axis_x_categories)!=null&&l.length)){const m=d.axis_x_categories.map((b,y)=>y);return x(t?Ln(m,Gi(e)):m)}const v=Ze(u,d.axis_x_tick_count||ue);return x(t?Ln(v,Gi(e)):v)}function Zc(e){const{config:t,state:{height2:n,width2:i}}=e,a=t.axis_rotated?n:i;if(t.axis_x_tick_count)return t.axis_x_tick_count;if(t.axis_x_tick_culling!==!1)return Math.min(t.axis_x_tick_culling_max||ue,Math.max(2,Math.floor(a/70)))}function qc(e){var t,n,i,a;const{axis:s,config:o,scale:r}=e,l=r.subX,c=((t=e.getTargetsToShow)==null?void 0:t.call(e))||e.filterTargetsToShow(),d=Zc(e),u=g=>Ln(g,d);if(!l||!(c!=null&&c.length))return[];const h=ni(o.axis_x_tick_values,e.api);if(h)return u(Bi(e,h));if(o.axis_x_tick_fit&&e.mapTargetsToUniqueXs){const g=Ni(e,e.mapTargetsToUniqueXs(c),o.axis_x_tick_count,(n=s==null?void 0:s.isTimeSeries)==null?void 0:n.call(s));return u(g)}if((i=s==null?void 0:s.isCategorized)!=null&&i.call(s)&&((a=o.axis_x_categories)!=null&&a.length))return u(o.axis_x_categories.map((g,p)=>p));const f=Ze(l,o.axis_x_tick_count||ue);return u(f)}function Jc(e){var t,n;const i=te(e),a=((t=i.orgDomain)==null?void 0:t.call(i))||((n=i.domain)==null?void 0:n.call(i));if(!(a!=null&&a.length))return[];const s=+a[0],o=+a[a.length-1];if(!Number.isFinite(s)||!Number.isFinite(o))return[];const r=Math.ceil(Math.min(s,o)),l=Math.floor(Math.max(s,o)),c=Array.from({length:Math.max(0,l-r+1)},(d,u)=>r+u);return e.config.axis_x_tick_outer?c.slice(1,-1):c}function Xi(e,t,n=te(e)){var i,a,s,o,r;const l=n,c=$e(e,t);if((a=(i=e.axis)==null?void 0:i.isCategorized)!=null&&a.call(i)){const d=(s=l.orgScale)==null?void 0:s.call(l);if(d)return d(c);const u=((r=(o=e.axis.x)==null?void 0:o.tickOffset)==null?void 0:r.call(o))||(l(1)-l(0))/2;return l(c)-u}return l(c)}function Qc(e,t,n){if(t.length<2)return!1;const i=Math.max(1,n)/2,a=t.map(o=>Xi(e,o)).filter(Number.isFinite).sort((o,r)=>o-r);if(a.length<2)return!1;let s=a[0]+i;for(let o=1;o<a.length;o++){const r=a[o]-i,l=a[o]+i;if(r<=s+Za)return!0;s=Math.max(s,l)}return!1}function vs(e,t){const n=new Set;return t.filter(i=>{const a=Xi(e,i),s=Math.round(a);return!Number.isFinite(a)||n.has(s)?!1:(n.add(s),!0)})}function td(e,t,n=1){var i;const{axis:a,config:s}=e;if((i=a==null?void 0:a.isCategorized)!=null&&i.call(a)){const r=Jc(e);return vs(e,r)}if(s.axis_x_tick_culling===!1||s.axis_x_tick_culling_lines===!1)return t;const o=ii(e,!1);return Qc(e,o,n)?t:vs(e,o)}function ai(e,t="y",n,i=!0){var a,s,o;const{axis:r,config:l,scale:c}=e,d=`axis_${t}`,u=c[t],h=ni(l[`${d}_tick_values`],e.api),f=x=>i?ad(e,t,x):x;if(h)return f(ps(e,h,t));const g=Kc(u.domain(),l[`${d}_tick_stepSize`]);if(g.length)return f(g);const p=n!=null?n:l[`${d}_tick_count`];if((a=r==null?void 0:r.isTimeSeries)!=null&&a.call(r,t)&&l[`${d}_tick_time_value`])return f(Ze(u,l[`${d}_tick_time_value`]));if((s=r==null?void 0:r.isLog)!=null&&s.call(r,t))return f(xs(u,p));if(p){const x=u.domain();return f(Ni(e,x,x.every(_=>_===0)?1:p,(o=r==null?void 0:r.isTimeSeries)==null?void 0:o.call(r,t)))}return f(Ze(u,ue))}function ed(e,t,n){const i=t==="x"?te(e):e.scale[t],a=i!=null&&i.copy?i.copy():i;return n.domain&&(a!=null&&a.domain)&&a.domain(n.domain),a}function nd(e,t,n,i){var a,s,o;const r=i.tick||{},l=ni(r.values,e.api);return l?t==="x"?Bi(e,l):ps(e,l,t):t!=="x"&&((s=(a=e.axis)==null?void 0:a.isLog)!=null&&s.call(a,t))?xs(n,r.count):Ze(n,(o=r.count)!=null?o:ue)}function id(e,t){var n;const i=(n=t.tick)==null?void 0:n.format;return typeof i=="function"?i.bind(e.api):(a=>a)}function Ln(e,t){const n=e.length-1;if(t&&n>t){const i=e.length-1;return t<=1?[e[0]]:Array.from({length:t},(a,s)=>e[Math.round(s*i/(t-1))])}return e}function ad(e,t,n){const{config:i}=e,a=`axis_${t}_tick_culling`;if(!i[a])return n;const s=n.slice().sort((d,u)=>{const h=+d,f=+u,g=Number.isFinite(h)&&Number.isFinite(f)?h-f:String(d).localeCompare(String(u));return i[`${a}_reverse`]?-g:g}),o=s.length,r=i[`${a}_max`]||ue;let l=0;for(let d=1;d<o;d++)if(o/d<r){l=d;break}if(!l)return n;const c=new Set(s.filter((d,u)=>u%l===0));return n.filter(d=>c.has(d))}function bs(e,t,n=!1){const{config:i}=e;if(i.axis_x_tick_culling===!1)return t;const a=i.axis_x_tick_culling_max||ue,s=n?t:t.slice().sort((c,d)=>{const u=+c,h=+d;return Number.isFinite(u)&&Number.isFinite(h)?i.axis_x_tick_culling_reverse?h-u:u-h:i.axis_x_tick_culling_reverse?String(d).localeCompare(String(c)):String(c).localeCompare(String(d))}),o=s.length;let r=0;for(let c=1;c<o;c++)if(o/c<a){r=c;break}if(!r)return t;if(n)return t.filter((c,d)=>i.axis_x_tick_culling_reverse?(o-1-d)%r===0:d%r===0);const l=new Set(s.filter((c,d)=>d%r===0));return t.filter(c=>l.has(c))}function Gi(e){const{config:t,state:{height:n,width:i}}=e,a=t.axis_rotated?n:i;if(t.axis_x_tick_count)return t.axis_x_tick_count;if(t.axis_x_tick_culling!==!1)return Math.min(t.axis_x_tick_culling_max||ue,Math.max(2,Math.floor(a/70)))}function sd(e){var t,n;const{axis:i,config:a}=e,s=(n=(t=i==null?void 0:i.y)==null?void 0:t.getGeneratedTicks)==null?void 0:n.call(t,a.grid_y_ticks);return s!=null&&s.length?s:a.grid_y_ticks?Ln(ai(e,"y",void 0,!1),a.grid_y_ticks):ai(e,"y",void 0,!1)}var od=Object.defineProperty,rd=(e,t,n)=>t in e?od(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,ld=(e,t,n)=>rd(e,typeof t!="symbol"?t+"":t,n);class ys{constructor(t){ld(this,"ctx",t)}get context(){return this.ctx}withContext(t,n){const i=this.ctx;this.ctx=t;try{n()}finally{this.ctx=i}}withState(t){const{ctx:n}=this;n.save();try{t(n)}finally{n.restore()}}withTranslation(t,n,i){this.withState(a=>{a.translate(t,n),i(a)})}clipRect(t,n){this.withState(i=>{i.beginPath(),i.rect(t.x,t.y,t.w,t.h),i.clip(),n(i)})}measureText(t){return this.ctx.measureText(t)}traceLine(t,n,i,a){const{ctx:s}=this;s.moveTo(t,n),s.lineTo(i,a)}traceCrispLine(t,n,i,a,s){this.traceLine(this.crisp(t,s),this.crisp(n,s),this.crisp(i,s),this.crisp(a,s))}traceCircle(t,n,i){this.ctx.moveTo(t+i,n),this.ctx.arc(t,n,i,0,Math.PI*2)}strokePath(t,n){this.withStyle(n,i=>{i.beginPath(),t(i),i.stroke()})}fillPath(t,n){this.withStyle(n,i=>{i.beginPath(),t(i),i.fill()})}fillRect(t,n){this.withStyle(n,i=>{i.fillRect(t.x,t.y,t.w,t.h)})}fillRoundRect(t,n=0,i){const a=this.normalizeRect(t),s=this.getRectRadii(a,n);if(!s.tl&&!s.tr&&!s.br&&!s.bl){this.fillRect(a,i);return}this.fillPath(o=>{this.traceRoundRect(o,a,s)},i)}strokeRoundRect(t,n=0,i){const a=this.normalizeRect(t),s=this.getRectRadii(a,n);if(!s.tl&&!s.tr&&!s.br&&!s.bl){this.strokeRect(a,i);return}this.strokePath(o=>{this.traceRoundRect(o,a,s)},i)}strokeRect(t,n){this.withStyle(n,i=>{i.strokeRect(t.x,t.y,t.w,t.h)})}text(t,n,i,a){const s=(r,l,c)=>{(a==null?void 0:a.maxWidth)===void 0?r.fillText(t,l,c):r.fillText(t,l,c,a.maxWidth)},o=r=>{a!=null&&a.angle?(r.translate(n,i),r.rotate(a.angle*Math.PI/180),s(r,0,0)):s(r,n,i)};a!=null&&a.angle?this.withState(r=>{this.applyStyle(a),o(r)}):this.withStyle(a,o)}textLines(t,n,i,a){this.withState(s=>{const o=t.split(` `),r=le((a==null?void 0:a.font)||s.font),l=o.length>1?-((o.length-1)*r):0;this.applyStyle(a),s.translate(n,i),a!=null&&a.angle&&s.rotate(a.angle*Math.PI/180),o.forEach((c,d)=>{const u=l+d*r;(a==null?void 0:a.maxWidth)===void 0?s.fillText(c,0,u):s.fillText(c,0,u,a.maxWidth)})})}point(t,n,i,a,s){this.withStyle(s,o=>{const r=!(s!=null&&s.stroke)||s.fill!==void 0,l=(s==null?void 0:s.stroke)!==void 0;if(t==="rectangle"){const c=a*2,d={x:n-a,y:i-a,w:c,h:c};r&&o.fillRect(d.x,d.y,d.w,d.h),l&&o.strokeRect(d.x,d.y,d.w,d.h)}else o.beginPath(),o.arc(n,i,a,0,Math.PI*2),r&&o.fill(),l&&o.stroke()})}getRectRadii(t,n){const i=typeof n=="number"?{tl:n,tr:n,br:n,bl:n}:{tl:n.tl||0,tr:n.tr||0,br:n.br||0,bl:n.bl||0},a=Math.max(0,Math.min(Math.abs(t.w),Math.abs(t.h))/2);return{tl:Math.max(0,Math.min(i.tl,a)),tr:Math.max(0,Math.min(i.tr,a)),br:Math.max(0,Math.min(i.br,a)),bl:Math.max(0,Math.min(i.bl,a))}}traceRoundRect(t,n,i){const{x:a,y:s,w:o,h:r}=n,l=a+o,c=s+r;t.moveTo(a+i.tl,s),t.lineTo(l-i.tr,s),i.tr?t.quadraticCurveTo(l,s,l,s+i.tr):t.lineTo(l,s),t.lineTo(l,c-i.br),i.br?t.quadraticCurveTo(l,c,l-i.br,c):t.lineTo(l,c),t.lineTo(a+i.bl,c),i.bl?t.quadraticCurveTo(a,c,a,c-i.bl):t.lineTo(a,c),t.lineTo(a,s+i.tl),i.tl?t.quadraticCurveTo(a,s,a+i.tl,s):t.lineTo(a,s),t.closePath()}normalizeRect(t){const n=t.w<0?t.x+t.w:t.x,i=t.h<0?t.y+t.h:t.y;return{x:n,y:i,w:Math.abs(t.w),h:Math.abs(t.h)}}applyStyle(t){if(!t)return;const{ctx:n}=this;t.fill!==void 0&&(n.fillStyle=t.fill),t.stroke!==void 0&&(n.strokeStyle=t.stroke),t.lineWidth!==void 0&&(n.lineWidth=t.lineWidth),t.alpha!==void 0&&(n.globalAlpha=t.alpha),t.font!==void 0&&(n.font=t.font),t.textAlign!==void 0&&(n.textAlign=t.textAlign),t.textBaseline!==void 0&&(n.textBaseline=t.textBaseline),t.lineDash!==void 0&&n.setLineDash(t.lineDash)}withStyle(t,n){t?this.withState(i=>{this.applyStyle(t),n(i)}):n(this.ctx)}crisp(t,n){return n%2?Math.round(t)+.5:Math.round(t)}}var cd=Object.defineProperty,dd=Object.defineProperties,ud=Object.getOwnPropertyDescriptors,Ts=Object.getOwnPropertySymbols,hd=Object.prototype.hasOwnProperty,fd=Object.prototype.propertyIsEnumerable,Wi=(e,t,n)=>t in e?cd(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,gd=(e,t)=>{for(var n in t||(t={}))hd.call(t,n)&&Wi(e,n,t[n]);if(Ts)for(var n of Ts(t))fd.call(t,n)&&Wi(e,n,t[n]);return e},pd=(e,t)=>dd(e,ud(t)),Vi=(e,t,n)=>Wi(e,typeof t!="symbol"?t+"":t,n);const ws=20,Cs=15;function Hi(e){return e?-1:1}function xd(e,t){return e?t?-1:1:t?1:-1}function Yi(e,t,n){return{x:e.left-ws,y:0,w:t+ws*2,h:n}}function ji(e,t,n){return{x:0,y:e.top-Cs,w:t,h:n+Cs*2}}function _d(e,t){var n,i;const a=(i=(n=e.config.axis_tooltip)==null?void 0:n.backgroundColor)!=null?i:"black";return typeof a=="string"?a:(a==null?void 0:a[t])||null}function md(e,t,n){var i,a;const s=e.scale[t];if(!(s!=null&&s.invert))return null;const o=s.invert(n);if(o==null)return null;if(t==="x"&&((a=(i=e.axis)==null?void 0:i.isTimeSeries)!=null&&a.call(i)))return e.format.xAxisTick(o);const r=Number(o);return Number.isFinite(r)?r.toFixed(2):`${o}`}function vd(e,t){const{config:n,state:{height:i,margin:a,width:s}}=e,o=n.axis_rotated,r={x:a.left,y:a.top};return t==="x"?!o&&(r.y+=i):t==="y"?o&&(r.y+=i):o?r.y-=1:r.x+=s,r}function bd(e,t,n,i){return i?{x:e.x+n,y:e.y-t}:{x:e.x+t,y:e.y+n}}function Ss(e,t){const n=e?e(t):t;return n==null?"":String(n)}function Rn(e,t){return e[`${t}TickFont`]||e.labelFont}function Ui(e,t){const n=e.measureText("0"),i=(n.fontBoundingBoxAscent||0)+(n.fontBoundingBoxDescent||0),a=(n.actualBoundingBoxAscent||0)+(n.actualBoundingBoxDescent||0),s=(t||10)*(11.5/10);return Math.max(t,i,a,s)}function yd(e){return 11.5-2.5*(e/15)*(e>0?1:-1)}function Td(e){return 8*Math.sin(Math.PI*(e/180))}function Ki(e,t){if(typeof e=="number")return e;if(typeof e=="string"){const n=parseFloat(e);return Number.isFinite(n)?/em$/.test(e.trim())?n*t:n:0}return 0}function wd(e,t,n){if(!t)return[e];const i=n.measureText("0").width||5.5;function a(s,o){let r;for(let l=1;l<o.length;l++)if(o.charAt(l)===" "&&(r=l),t<i*(l+1)){const c=r||l;return a(s.concat(o.slice(0,c)),o.slice(r?r+1:l))}return s.concat(o)}return a([],e)}function Zi(e,t,n,i){var a,s;const o=e.config.axis_x_tick_width;if(o&&o>0)return o;if(n)return 95;if((s=(a=e.axis)==null?void 0:a.isCategorized)!=null&&s.call(a)&&t.length>1){const r=i($e(e,t[0])),l=i($e(e,t[1]));return Math.max(0,Math.abs(l-r)-12)}return 110}function As(e,t,n,i,a=[],s=!1,o=te(e),r){const l=n?n(i):i;if(l==null)return[""];if(Array.isArray(l))return l.map(d=>String(d));const c=String(l);return c.indexOf(` `)>-1?c.split(` `):e.config.axis_x_tick_multiline?wd(c,r!=null?r:Zi(e,a,s,o),t):[c]}function qi(e,t){const{isRotated:n,tickCount:i,tickIndex:a,tickRotate:s,tickTextDirection:o}=t,r=e.config.axis_x_tick_text_inner;let l=n?o>0?"left":"right":s?s>0?"left":"right":"center";return!n&&a===0&&(r===!0||r!=null&&r.first)?l="left":!n&&a===i-1&&(r===!0||r!=null&&r.last)&&(l="right"),l}function Cd(e,t){var n,i;return((n=e==null?void 0:e.indexOf("center"))!=null?n:-1)>-1?{x:t/2,align:"center"}:((i=e==null?void 0:e.indexOf("right"))!=null?i:-1)>-1?{x:t,align:"right"}:{x:0,align:"left"}}function Fe(e){return Number.isFinite(e)}function Ji(e,t,n){return Fe(e)&&e>=Math.min(t,n)&&e<=Math.max(t,n)}function ks(e){return e?-1:1}function Sd(e,t,n){return t?n?e.axis_y2_inner?1:-1:e.axis_y_inner?-1:1:n?e.axis_y2_inner?-1:1:e.axis_y_inner?1:-1}function Qi(e,t,n=te(e)){return n($e(e,t))}function Ad(e,t){var n,i;return(i=(n=e.axis)==null?void 0:n.isCategorized)!=null&&i.call(n)&&typeof t=="string"&&Number.isNaN(Number(t))?e.config.axis_x_categories.indexOf(t):$e(e,t)}function kd(e,t){var n,i;return!!((i=(n=e.axis)==null?void 0:n.isCategorized)!=null&&i.call(n)&&Number.isNaN(Number(t)))}function Ls(e,t,n,i){var a,s;if(t===void 0)return n;let o=te(e)(Ad(e,t));if(kd(e,t)){const r=te(e),l=((s=(a=e.axis.x)==null?void 0:a.tickOffset)==null?void 0:s.call(a))||(r(1)-r(0))/2;o+=l*(i==="start"?-1:1)}return o}function Rs(e,t,n="y"){return e.scale[n||"y"](An(e,t,n))}function Es(e,t,n){return e==="start"?t+4:e==="middle"?(t+n)/2:n-4}function Ps(e,t,n){return e==="start"?n-4:e==="middle"?(t+n)/2:t+4}function Ld(e,t){const{config:n,scale:i,state:{width:a,height:s}}=e,o=t.axis||"x",r=n.axis_rotated;if(o==="x"){const h=Ls(e,t.start,0,"start"),f=Ls(e,t.end,r?s:a,"end"),g=Math.min(h,f),p=Math.abs(f-h);return r?{x:0,y:g,w:a,h:p}:{x:g,y:0,w:p,h:s}}if(!i[o])return null;const l=t.start===void 0?r?0:s:Rs(e,t.start,o),c=t.end===void 0?r?a:0:Rs(e,t.end,o),d=Math.min(l,c),u=Math.abs(c-l);return r?{x:d,y:0,w:u,h:s}:{x:0,y:d,w:a,h:u}}class Rd{constructor(t,n){Vi(this,"engine",t),Vi(this,"theme",n),Vi(this,"painter"),this.painter=new ys(t.ctx)}get ctx(){return this.painter.context}withContext(t,n){this.painter.withContext(t,n)}draw(t){this.drawRegions(t),this.drawGrid(t),this.drawAxis(t)}drawAxis(t){const{config:n}=t;n.axis_x_show&&this.drawXAxis(t),n.axis_y_show&&this.drawYAxis(t),n.axis_y2_show&&t.scale.y2&&this.drawYAxis(t,"y2"),this.drawAdditionalAxes(t),this.drawAxisLabels(t)}drawSubXAxis(t){var n,i,a;const{ctx:s,painter:o,theme:{style:{axis:r}}}=this,{config:l,format:c,scale:d,state:{current:u,margin2:h,width2:f,height2:g}}=t;if(!l.subchart_show||!l.subchart_axis_x_show||!d.subX||f<=0||g<=0)return;const p=l.axis_rotated,x=o.crisp(h.left,r.lineWidth),_=o.crisp(h.top+g,r.lineWidth),v=h.left,m=h.left+f,b=h.top,y=h.top+g,T=p?b:v,w=p?y:m,C=qc(t),A=p?l.axis_x_tick_inner?1:-1:l.axis_x_tick_inner?-1:1,S=ks(p),k=Hi(p),L=l.axis_x_tick_text_position,R=p?0:((n=t.getAxisTickRotate)==null?void 0:n.call(t,"x"))||0,E=c.subXAxisTick||((a=(i=t.axis)==null?void 0:i.getXAxisTickFormat)==null?void 0:a.call(i,!0));o.clipRect(p?ji(h,u.width,g):pd(gd({},Yi(h,f,u.height-h.top)),{y:h.top}),()=>{s.strokeStyle=r.lineColor,s.lineWidth=r.lineWidth,o.strokePath(()=>{p?o.traceLine(x,b,x,y):o.traceLine(v,_,m,_),l.axis_x_tick_outer&&(p?(o.traceLine(x,b,x+rt*S,b),o.traceLine(x,y,x+rt*S,y)):(o.traceLine(v,_,v,_+rt*S),o.traceLine(m,_,m,_+rt*S)))});const P=Rn(r,"x");s.font=P,s.fillStyle=r.labelColor,s.textAlign=p?k>0?"left":"right":"center",s.textBaseline=p?"middle":k>0?"top":"bottom",s.strokeStyle=r.tickColor,s.lineWidth=r.tickWidth;const D=Ui(o,le(P)),z=Zi(t,C,p,d.subX);for(const I of C){const G=d.subX($e(t,I)),N=h.left+G,Z=h.top+G;if(!Ji(p?Z:N,T,w)||(l.subchart_axis_x_tick_show&&o.strokePath(()=>{p?o.traceLine(x,Z,x+rt*A,Z):o.traceLine(N,_,N,_+rt*A)}),!l.subchart_axis_x_tick_text_show))continue;const U=As(t,o,E,I,C,p,d.subX,z);let ct,ft;p?(ct=x+(rt+Ge)*k+(L.x||0),ft=Z+(L.y||0),s.textAlign=k>0?"left":"right",s.textBaseline="middle"):(ct=N+(L.x||0),ft=_+(rt+Ge)*k+(L.y||0),s.textAlign=R?R>0?"left":"right":"center",s.textBaseline=k>0?"top":"bottom"),o.withState(bt=>{bt.translate(ct,ft),R&&bt.rotate(R*Math.PI/180),U.forEach((It,Et)=>{bt.fillText(It,0,Et*D)})})}})}drawTitle(t){var n,i;const{ctx:a,painter:s,theme:{style:{title:o}}}=this,{config:r,state:{current:l}}=t;if(!r.title_text)return;const c=String(r.title_text).split(` `),d=le(o.font),u=d*1.5,{x:h,align:f}=Cd(r.title_position,l.width),g=(i=(n=t.getCanvasTitleHeight)==null?void 0:n.call(t))!=null?i:d,p=(r.title_padding.top||0)+g;s.withState(()=>{a.font=o.font,a.fillStyle=o.color,a.textAlign=f,a.textBaseline="alphabetic",c.forEach((x,_)=>{a.fillText(x,h,p+(_?d+(_-1)*u:0))})})}drawAxisLabels(t){const{ctx:n,painter:i,theme:{style:{axis:a}}}=this,{axis:s,config:o}=t,r=le(a.labelFont),l=["x","y","y2"],c={x:a.xLabelColor,y:a.yLabelColor,y2:a.y2LabelColor},d={start:"left",middle:"center",end:"right"};s&&i.withState(()=>{n.font=a.labelFont,n.textBaseline="alphabetic",l.forEach(u=>{const h=s.getLabelText(u);if(!h||!o[`axis_${u}_show`]||u==="y2"&&!t.scale.y2)return;const f=u==="x"&&o.axis_rotated||u!=="x"&&!o.axis_rotated,g=vd(t,u),p=s.xForAxisLabel(u)+Ki(s.dxForAxisLabel(u),r),x=Ki(s.dyForAxisLabel(u),r),{x:_,y:v}=bd(g,p,x,f),m=s.textAnchorForAxisLabel(u);n.fillStyle=c[u]||a.labelColor,n.textAlign=d[m]||"center",i.text(String(h),_,v,{angle:f?-90:0})})})}drawGrid(t){const{ctx:n,painter:i,theme:{style:{grid:a}}}=this,{config:s,scale:o,state:{height:r,margin:l,width:c}}=t;if(!a.lineColor)return;const d=s.axis_rotated,u=l.left,h=l.left+c,f=l.top,g=l.top+r;i.withState(()=>{n.strokeStyle=a.lineColor,n.lineWidth=a.lineWidth,a.dashArray.length&&n.setLineDash(a.dashArray),s.grid_x_show&&o.x&&i.strokePath(()=>{for(const p of ii(t)){const x=Qi(t,p);Fe(x)&&(d?i.traceCrispLine(u,l.top+x,h,l.top+x,a.lineWidth):i.traceCrispLine(l.left+x,f,l.left+x,g,a.lineWidth))}}),s.grid_y_show&&o.y&&i.strokePath(()=>{for(const p of sd(t)){const x=An(t,p),_=o.y(x);Fe(_)&&(d?i.traceCrispLine(l.left+_,f,l.left+_,g,a.lineWidth):i.traceCrispLine(u,l.top+_,h,l.top+_,a.lineWidth))}}),!s.grid_lines_front&&this.drawGridLines(t)})}drawRegions(t){const{ctx:n,painter:i,theme:{style:{region:a}}}=this,{config:s,state:{height:o,margin:r,width:l}}=t,c=s.regions||[];c.length&&i.clipRect({x:r.left,y:r.top,w:l,h:o},()=>{var d;n.fillStyle=a.fill,n.font=a.labelFont,n.textBaseline="top";for(const u of c){const h=Ld(t,u);if(!h||!Fe(h.x)||!Fe(h.y)||!h.w||!h.h)continue;const f=r.left+h.x,g=r.top+h.y,p=h.w,x=h.h;if(n.globalAlpha=Number.isFinite(u.opacity)?u.opacity:a.opacity,i.fillRect({x:f,y:g,w:p,h:x}),(d=u.label)!=null&&d.text){const _=u.label,v=_.center||"",m=String(_.text),b=i.measureText(m).width,y=parseFloat(n.font)||12;let T=f+(_.x||0),w=g+(_.y||0);v.indexOf("x")>-1&&(T+=(p-b)/2),v.indexOf("y")>-1&&(w+=(x-y)/2),i.text(m,T,w,{angle:_.rotated?-90:0,alpha:1,fill:_.color||a.labelColor})}}})}drawGridLines(t){const{ctx:n,painter:i,theme:{style:{axis:a,grid:s}}}=this,{config:o,scale:r,state:{height:l,margin:c,width:d}}=t,u=o.axis_rotated,h=c.left,f=c.left+d,g=c.top,p=c.top+l;s.lineColor&&i.withState(()=>{n.strokeStyle=s.lineColor,n.lineWidth=s.lineWidth,n.font=s.labelFont||a.labelFont,n.fillStyle=s.labelColor,n.textBaseline="middle",n.setLineDash([]);const x=(m,b,y,T=!1)=>{m&&i.text(m,b,y,{angle:T?-90:0})},_=m=>{if(m.value===void 0||!r.x)return;const b=Qi(t,m.value);if(Fe(b))if(u){const y=c.top+b;i.strokePath(()=>{i.traceLine(h,y,f,y)}),n.textAlign=m.position==="start"?"left":m.position==="middle"?"center":"right",x(m.text,Es(m.position,h,f),y-5)}else{const y=c.left+b;i.strokePath(()=>{i.traceLine(y,g,y,p)}),n.textAlign=m.position==="start"?"left":m.position==="middle"?"center":"right",x(m.text,y-5,Ps(m.position,g,p),!0)}},v=m=>{const b=m.axis==="y2"?r.y2:r.y,y=m.axis==="y2"?"y2":"y";if(m.value===void 0||!b)return;const T=An(t,m.value,y),w=b(T);if(Fe(w))if(u){const C=c.left+w;i.strokePath(()=>{i.traceLine(C,g,C,p)}),n.textAlign=m.position==="start"?"left":m.position==="middle"?"center":"right",x(m.text,C-5,Ps(m.position,g,p),!0)}else{const C=c.top+w;i.strokePath(()=>{i.traceLine(h,C,f,C)}),n.textAlign=m.position==="start"?"left":m.position==="middle"?"center":"right",x(m.text,Es(m.position,h,f),C-5)}};(o.grid_x_lines||[]).forEach(_),(o.grid_y_lines||[]).forEach(v)})}drawAdditionalAxes(t){["x","y","y2"].forEach(n=>{const i=t.config[`axis_${n}_axes`]||[];!i.length||!t.scale[n]||!t.config[`axis_${n}_show`]||i.forEach((a,s)=>{var o;const r=ed(t,n,a);if(!r)return;const l={scale:r,ticks:nd(t,n,r,a),format:id(t,a),index:s+1,outerTick:((o=a.tick)==null?void 0:o.outer)!==!1};n==="x"?this.drawXAxis(t,l):this.drawYAxis(t,n,l)})})}drawXAxis(t,n){var i;const{ctx:a,painter:s,theme:{style:{axis:o}}}=this,{axis:r,config:l,state:{current:c,margin:d,width:u,height:h}}=t,f=l.axis_rotated,g=n!=null&&n.index?t.getAxisSize("x")*n.index:0,p=(n==null?void 0:n.scale)||te(t),x=s.crisp(d.left-(f?g:0),o.lineWidth),_=s.crisp(d.top+h+(f?0:g),o.lineWidth),v=d.left,m=d.left+u,b=d.top,y=d.top+h,T=f?b:v,w=f?y:m,C=(n==null?void 0:n.ticks)||ii(t),A=(n==null?void 0:n.ticks)||td(t,C,o.tickWidth),S=(n==null?void 0:n.format)||r.getXAxisTickFormat(),k=n?n.outerTick:l.axis_x_tick_outer,L=f?l.axis_x_tick_inner?1:-1:l.axis_x_tick_inner?-1:1,R=ks(f),E=Hi(f),P=l.axis_x_tick_text_position,D=f?0:((i=t.getAxisTickRotate)==null?void 0:i.call(t,"x"))||0;s.clipRect(f?ji(d,c.width,h):Yi(d,u,c.height),()=>{if(a.strokeStyle=o.lineColor,a.lineWidth=o.lineWidth,s.strokePath(()=>{f?s.traceLine(x,b,x,y):s.traceLine(v,_,m,_),k&&(f?(s.traceLine(x,b,x+rt*R,b),s.traceLine(x,y,x+rt*R,y)):(s.traceLine(v,_,v,_+rt*R),s.traceLine(m,_,m,_+rt*R)))}),a.font=Rn(o,"x"),a.fillStyle=o.labelColor,a.textAlign=f?E>0?"left":"right":"center",a.textBaseline=f?"middle":E>0?"top":"bottom",a.strokeStyle=o.tickColor,a.lineWidth=o.tickWidth,l.axis_x_tick_show&&s.strokePath(()=>{for(const N of A){const Z=Xi(t,N,p),At=d.left+Z,U=d.top+Z;Ji(f?U:At,T,w)&&(f?s.traceLine(x,U,x+rt*L,U):s.traceLine(At,_,At,_+rt*L))}}),!n&&!l.axis_x_tick_text_show)return;const z=Rn(o,"x"),I=Ui(s,le(z)),G=Zi(t,C,f,p);C.forEach((N,Z)=>{this.drawXAxisTickText(t,N,S,o.labelColor,{isRotated:f,rangeEnd:w,rangeStart:T,tickCount:C.length,tickFont:z,tickIndex:Z,tickLineHeight:I,tickTextDirection:E,tickTextWidth:G,tickRotate:D,tickTextPosition:P,targetScale:p,ticks:C,x,y:_})})})}drawFocusedXAxisTick(t,n){var i;const{painter:a,theme:{style:{axis:s}}}=this,{axis:o,config:r,state:{current:l,margin:c,width:d,height:u}}=t,h=(i=n==null?void 0:n[0])==null?void 0:i.x;if(h===void 0||!o||!r.axis_x_show||!r.axis_x_tick_text_show||!s.activeLabelColor||s.activeLabelColor===s.labelColor)return;const f=ii(t),g=f.findIndex(w=>kn(w,h)),p=f[g];if(p===void 0)return;const x=r.axis_rotated,_=a.crisp(c.left,s.lineWidth),v=a.crisp(c.top+u,s.lineWidth),m=x?c.top:c.left,b=x?c.top+u:c.left+d,y=o.getXAxisTickFormat(),T=Hi(x);a.clipRect(x?ji(c,l.width,u):Yi(c,d,l.height),()=>{var w;this.drawXAxisTickText(t,p,y,s.activeLabelColor,{isRotated:x,rangeEnd:b,rangeStart:m,targetScale:te(t),tickCount:f.length,tickIndex:g,tickTextDirection:T,tickRotate:x?0:((w=t.getAxisTickRotate)==null?void 0:w.call(t,"x"))||0,tickTextPosition:r.axis_x_tick_text_position,ticks:f,x:_,y:v})})}drawAxisTooltip(t,n){const{ctx:i,painter:a,theme:{style:{axis:s,grid:o}}}=this,{config:r,state:{margin:l,width:c,height:d}}=t;if(!r.axis_tooltip||!n)return;const u=r.axis_rotated,h=n[0]-l.left,f=n[1]-l.top,g=h>=0&&h<=c,p=f>=0&&f<=d;if(!g&&!p)return;const x=l.left+h,_=l.top+f,v=le(s.labelFont),m=v||10,b=(y,T,w,C,A)=>{const S=_d(t,y),k=S&&md(t,y,T);if(!k)return;i.font=s.labelFont,i.textAlign=A,i.textBaseline="alphabetic";const L=i.measureText(k),R=L.width,E=L.actualBoundingBoxAscent||m*.8,P=L.actualBoundingBoxDescent||m*.2,D=Math.max(2,R*.15),z=Math.max(3,m*.25),I=A==="right"?w-R:A==="center"?w-R/2:w,G=C-E;i.fillStyle=S,i.fillRect(I-D,G-z,R+D*2,E+P+z*2),i.fillStyle="#fff",i.fillText(k,w,C)};a.withState(()=>{i.strokeStyle=o.lineColor,i.lineWidth=o.lineWidth,i.setLineDash([]),a.strokePath(()=>{g&&a.traceLine(x,l.top,x,l.top+d),p&&a.traceLine(l.left,_,l.left+c,_)}),i.setLineDash([]),u?(p&&r.axis_x_show&&b("x",f,l.left-v*.3,_+v*.4,"right"),g&&r.axis_y_show&&b("y",h,x-v*1.3,l.top+d+v*1.15,"left"),g&&r.axis_y2_show&&t.scale.y2&&b("y2",h,x-v*1.3,l.top-v*.4,"left")):(g&&r.axis_x_show&&b("x",h,x-v,l.top+d+v*1.15,"left"),p&&r.axis_y_show&&b("y",f,l.left-v*.4,_+v*.3,"right"),p&&r.axis_y2_show&&t.scale.y2&&b("y2",f,l.left+c+v*.4,_+v*.3,"left"))})}drawXAxisTickText(t,n,i,a,s){var o,r;const{ctx:l,painter:c,theme:{style:{axis:d}}}=this,{state:{margin:u}}=t,{isRotated:h,rangeEnd:f,rangeStart:g,tickTextDirection:p,tickRotate:x,tickTextPosition:_,targetScale:v,ticks:m,x:b,y}=s,T=Qi(t,n,v),w=u.left+T,C=u.top+T;if(!Ji(h?C:w,g,f))return;const S=(o=s.tickFont)!=null?o:Rn(d,"x");l.font=S,l.fillStyle=a;const k=As(t,c,i,n,m,h,v,s.tickTextWidth),L=(r=s.tickLineHeight)!=null?r:Ui(c,le(S));let R,E;if(h)R=b+(rt+Ge)*p+(_.x||0),E=C+(_.y||0),l.textAlign=qi(t,s),l.textBaseline="middle";else if(x){const P=le(S),D=_.y?Ki(_.y,P):.71*P,z=Td(x)+(_.x||0),I=yd(x)+D;l.textAlign=qi(t,s),l.textBaseline="alphabetic",c.withState(G=>{G.translate(w,y),G.rotate(x*Math.PI/180),k.forEach((N,Z)=>{G.fillText(N,z,I+Z*L)})});return}else R=w+(_.x||0),E=y+(rt+Ge)*p+(_.y||0),l.textAlign=qi(t,s),l.textBaseline=p>0?"top":"bottom";c.withState(P=>{P.translate(R,E),x&&P.rotate(x*Math.PI/180),k.forEach((D,z)=>{P.fillText(D,0,z*L)})})}drawYAxis(t,n="y",i){var a,s,o,r;const{ctx:l,painter:c,theme:{style:{axis:d}}}=this,{config:u,scale:h,state:{margin:f,width:g,height:p}}=t,x=`axis_${n}`,_=(i==null?void 0:i.scale)||h[n],v=n==="y2",m=u.axis_rotated,b=i!=null&&i.index?t.getAxisSize(n)*i.index:0,y=c.crisp(f.left+(v?g+(m?0:b):-b),d.lineWidth),T=c.crisp(f.top+(m?v?-b-1:p+b:0),d.lineWidth),w=f.left,C=f.left+g,A=f.top,S=f.top+p,k=(i==null?void 0:i.ticks)||ai(t,n),L=(i==null?void 0:i.ticks)||(u[`${x}_tick_culling`]&&u[`${x}_tick_culling_lines`]!==!1?ai(t,n,void 0,!1):k),R=(i==null?void 0:i.format)||((o=(s=(a=t.axis)==null?void 0:a[n])==null?void 0:s.tickFormat)==null?void 0:o.call(s))||((r=u[`${x}_tick_format`])==null?void 0:r.bind(t.api))||(G=>G),E=i?i.outerTick:u[`${x}_tick_outer`],P=m?v?u.axis_y2_tick_inner?1:-1:u.axis_y_tick_inner?-1:1:v?u.axis_y2_tick_inner?-1:1:u.axis_y_tick_inner?1:-1,D=Sd(u,m,v),z=xd(m,v),I=u[`${x}_tick_text_position`];c.withState(()=>{l.strokeStyle=d.lineColor,l.lineWidth=d.lineWidth,c.strokePath(()=>{m?c.traceLine(w,T,C,T):c.traceLine(y,A,y,S),E&&(m?(c.traceLine(w,T,w,T+rt*D),c.traceLine(C,T,C,T+rt*D)):(c.traceLine(y,A,y+rt*D,A),c.traceLine(y,S,y+rt*D,S)))});const G=Rn(d,n);l.font=G,l.fillStyle=d.labelColor,l.textAlign=m?"center":z>0?"left":"right",l.textBaseline=m?z>0?"top":"bottom":"middle",l.strokeStyle=d.tickColor,l.lineWidth=d.tickWidth;const N=[],Z=[],At=(U,ct)=>{const ft=An(t,U,n),bt=f.left+_(ft),It=f.top+_(ft);Fe(m?bt:It)&&ct.push({tick:U,tx:bt,ty:It})};for(const U of k)At(U,N);for(const U of L)At(U,Z);if((i||u[