MCPcopy Create free account
hub / github.com/Make-md/makemd / NBe

Function NBe

main.js:230–230  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

228 L ${B} ${F+I}
229 Z
230 `),M.attr("clip-path",`url(#${P})`)}}).on("mouseover",function(k,M){let O=vr(this).attr("fill");T.transition().duration(200).style("opacity",.9);let P="";if(Array.isArray(u.encoding.x))u.encoding.x.forEach(L=>{if(L.field){let I=M.data[L.field],R=t.tableProperties?.find(Q=>Q.name===L.field);P+=`<div>${R?cn(R,I,t.superstate):I}</div>`}});else if(u.encoding.x&&!Array.isArray(u.encoding.x)&&u.encoding.x.field){let L=u.encoding.x,I=M.data[L.field],R=t.tableProperties?.find(Q=>Q.name===L.field);P+=`<div>${R?cn(R,I,t.superstate):I}</div>`}P+='<div style="display: flex; align-items: center; gap: 8px; margin-top: 4px;">',P+=`<div style="width: 12px; height: 12px; background-color: ${O}; border-radius: 2px; flex-shrink: 0;"></div>`,P+="<div>";let _=M[1]-M[0],B=t.tableProperties?.find(L=>L.name===M.key);P+=`${B?cn(B,_,t.superstate):rn(_)}`,P+=` \u2022 ${M.key}`,P+=`<br/><span style="color: ${v("var(--mk-ui-text-secondary)")};">Total: ${rn(M[1])}</span>`,P+="</div>",P+="</div>",T.html(P).style("left",k.pageX+10+"px").style("top",k.pageY-28+"px"),vr(this).transition().duration(100).attr("opacity",(u.mark?.opacity||1)*.8)}).on("mousemove",function(k){T.style("left",k.pageX+10+"px").style("top",k.pageY-28+"px")}).on("mouseout",function(){T.transition().duration(500).style("opacity",0),vr(this).transition().duration(100).attr("opacity",u.mark?.opacity||1)}),(h||u.mark?.dataLabels?.show)&&D.selectAll(".stacked-bar-label").data(k=>k.map(M=>({...M,key:k.key}))).enter().append("text").attr("class","stacked-bar-label").attr("x",k=>{let M=a(k.data),E=r(M);return E!==void 0?E+r.bandwidth()/2:0}).attr("y",k=>{let M=(k[0]+k[1])/2;return n(M)}).attr("text-anchor","middle").attr("dominant-baseline","middle").style("font-size",`${u.mark?.dataLabels?.fontSize||11}px`).style("fill","white").style("font-weight","500").text(k=>{let M=k[1]-k[0];return M===0?"":rn(M)}).style("opacity",k=>n(k[0])-n(k[1])<20?0:1),m){let k=i.map((M,E)=>({label:M.field,color:A[E%A.length]}));s._legendItems=k}s.node().__barTooltip=T}static renderCanvas(t){if(!Sn(t))return;let{ctx:r,processedData:n,scales:i,config:a,graphArea:o,resolveColor:s}=t,l=i.get("x"),u=i.get("y");if(!l||!u)return;let c=m=>Array.isArray(a.encoding.x)?a.encoding.x.map(v=>String(m[v.field]||"")).join(" | "):a.encoding.x?String(m[(a.encoding.x&&!Array.isArray(a.encoding.x)?a.encoding.x.field:"")||""]):"",f=Array.isArray(a.encoding.y)?a.encoding.y:a.encoding.y?[a.encoding.y]:[],d=f.length>1,p=!!a.encoding.color?.field;(d||p?a.stacked!==!1:!1)&&(d||p)?this.renderStackedBarsCanvas(t,l,u,f,c):d||p?this.renderGroupedBarsCanvas(t,l,u,f,c):this.renderSingleBarsCanvas(t,l,u,f,c)}static renderSingleBarsCanvas(t,r,n,i,a){if(!Sn(t))return;let{ctx:o,processedData:s,scales:l,config:u,graphArea:c,resolveColor:f}=t,d=l.get("color"),p=u.encoding.color?.field,h=i[0]?.field,m=In(t.colorPaletteId,t.superstate);if(!h)return;let v=r.bandwidth?r.bandwidth():20,A=v*.1,x=v-A*2,g=4;s.forEach((w,b)=>{let y=a(w),S=Number(w[h])||0,T=r(y);if(T===void 0)return;let D=T+A,k=n(S),M=n(0),E=Math.abs(M-k),O=Math.min(k,M),P=u.mark,_=m[b%m.length],F=t.superstate?.assets?.getColorPalettes()?.find(L=>L.id===t.colorPaletteId);if(F?.colors)(F.colors.filter(I=>I.value&&(I.value.includes("linear-gradient")||I.value.includes("radial-gradient")||I.value.includes("conic-gradient")))||[]).length>0,_=m[b%m.length];else if(F?.gradients&&F.gradients.length>0){let L=F.gradients[b%F.gradients.length],I={type:L.type,colors:L.stops.map(J=>J.color),positions:L.stops.map(J=>J.position),angle:L.direction,centerX:L.center?.x||.5,centerY:L.center?.y||.5},R={x:D,y:O,width:x,height:E};_=_u.applyGradient(t,I,R)}else{let L=m[b%m.length];if(typeof u.mark?.fill=="string")L=u.mark.fill.startsWith("var(")?f(u.mark.fill):u.mark.fill;else if(p&&d)try{L=d(w[p])||m[0]}catch{L=m[0]}_=L}if(o.save(),o.globalAlpha=u.mark?.opacity||1,o.fillStyle=_,E>0){let L=Math.min(g,x/2,E/2);o.beginPath(),o.moveTo(D+L,O),o.lineTo(D+x-L,O),o.quadraticCurveTo(D+x,O,D+x,O+L),o.lineTo(D+x,O+E-L),o.quadraticCurveTo(D+x,O+E,D+x-L,O+E),o.lineTo(D+L,O+E),o.quadraticCurveTo(D,O+E,D,O+E-L),o.lineTo(D,O+L),o.quadraticCurveTo(D,O,D+L,O),o.closePath(),o.fill(),t.debugMode&&(o.save(),o.strokeStyle="red",o.lineWidth=2,o.setLineDash([3,3]),o.strokeRect(D-1,O-1,x+2,E+2),o.restore())}if(o.restore(),u.mark?.dataLabels?.show){o.save(),o.fillStyle=u.mark.dataLabels.color||"#374151",o.font=`500 ${u.mark.dataLabels.fontSize||11}px sans-serif`,o.textAlign="center",o.textBaseline="bottom";let L=rn(S);o.fillText(L,D+x/2,k-5),o.restore()}})}static renderGroupedBarsCanvas(t,r,n,i,a){if(!Sn(t))return;let{ctx:o,processedData:s,config:l,graphArea:u,resolveColor:c}=t,f=In(t.colorPaletteId,t.superstate),d=r.bandwidth?r.bandwidth():20,p=.05,h=d/i.length*(1-p),m=4;s.forEach(v=>{let A=a(v),x=r(A);x!==void 0&&i.forEach((g,w)=>{let b=v[g.field];if(b==null)return;let y=Number(b),S=x+(h+p*d/i.length)*w,T=n(y),D=n(0),k=Math.abs(D-T),M=Math.min(T,D);if(o.save(),o.globalAlpha=l.mark?.opacity||1,o.fillStyle=f[w%f.length]||"#3b82f6",o.beginPath(),o.moveTo(S+m,M),o.lineTo(S+h-m,M),o.quadraticCurveTo(S+h,M,S+h,M+m),o.lineTo(S+h,M+k),o.lineTo(S,M+k),o.lineTo(S,M+m),o.quadraticCurveTo(S,M,S+m,M),o.closePath(),o.fill(),t.debugMode&&(o.save(),o.strokeStyle="red",o.lineWidth=2,o.setLineDash([3,3]),o.strokeRect(S-1,M-1,h+2,k+2),o.restore()),o.restore(),l.mark?.dataLabels?.show){o.save(),o.fillStyle=l.mark.dataLabels.color||"#374151",o.font=`500 ${l.mark.dataLabels.fontSize||11}px sans-serif`,o.textAlign="center",o.textBaseline="bottom";let E=rn(y);o.fillText(E,S+h/2,T-5),o.restore()}})})}static renderStackedBarsCanvas(t,r,n,i,a){if(!Sn(t))return;let{ctx:o,processedData:s,config:l,graphArea:u,resolveColor:c}=t,f=In(t.colorPaletteId,t.superstate),d=r.bandwidth?r.bandwidth():20,p=4,h=fv().keys(i.map(v=>v.field)).value((v,A)=>Number(v[A])||0)(s),m=ip(h[h.length-1],v=>v[1])||0;n.domain([0,m]),h.forEach((v,A)=>{let x=f[A%f.length]||"#3b82f6";v.forEach(g=>{let w=a(g.data),b=r(w);if(b===void 0)return;let y=b,S=n(g[1]),T=n(g[0])-n(g[1]);if(!(T<=0)&&(o.save(),o.globalAlpha=l.mark?.opacity||1,o.fillStyle=x,A===h.length-1?(o.beginPath(),o.moveTo(y+p,S),o.lineTo(y+d-p,S),o.quadraticCurveTo(y+d,S,y+d,S+p),o.lineTo(y+d,S+T),o.lineTo(y,S+T),o.lineTo(y,S+p),o.quadraticCurveTo(y,S,y+p,S),o.closePath(),o.fill()):o.fillRect(y,S,d,T),t.debugMode&&(o.save(),o.strokeStyle="red",o.lineWidth=2,o.setLineDash([3,3]),o.strokeRect(y,S,d,T),o.restore()),o.restore(),l.mark?.dataLabels?.show&&T>20)){o.save(),o.fillStyle="white",o.font=`500 ${l.mark.dataLabels.fontSize||11}px sans-serif`,o.textAlign="center",o.textBaseline="middle";let D=g[1]-g[0],k=rn(D);o.fillText(k,y+d/2,S+T/2),o.restore()}})})}};var lF=class{static render(t,r,n){tn(t)?this.renderSVG(t,r,n):Sn(t)&&this.renderCanvas(t,r,n)}static renderSVG(t,r,n){if(!tn(t))return;let{gridGroup:i,graphArea:a,config:o,resolveColor:s,editMode:l,onElementSelect:u}=t;if(!o?.layout?.grid)return;let c=o.layout.grid.y!==void 0?o.layout.grid.y:!0,f=o.layout.grid.x||!1;if(!a||isNaN(a.bottom)||isNaN(a.height)||isNaN(a.left)||isNaN(a.width)){console.warn("Invalid graphArea values in GridlineUtility",a);return}if(f&&r){let d=i.append("g").attr("class","grid-x").attr("transform",`translate(0,${a.bottom})`),p=-a.height;if(!isFinite(p))return;r.bandwidth?d.call(Vy(r).tickSize(p).tickFormat(()=>"")):d.call(Vy(r).ticks(5).tickSize(p).tickFormat(()=>"")),d.selectAll("line").style("stroke",s(o?.layout?.grid?.color||"var(--mk-ui-border)")).style("stroke-dasharray",o?.layout?.grid?.strokeDasharray||"3,3").style("opacity",.5),d.select(".domain").remove()}if(c&&n){let d=i.append("g").attr("class","grid-y").attr("transform",`translate(${a.left},0)`),p=a.width;if(!isFinite(p))return;n.bandwidth?d.call(Ww(n).tickSize(-p).tickFormat(()=>"")):d.call(Ww(n).ticks(5).tickSize(-p).tickFormat(()=>"")),d.selectAll("line").style("stroke",s(o?.layout?.grid?.color||"var(--mk-ui-border)")).style("stroke-dasharray",o?.layout?.grid?.strokeDasharray||"3,3").style("opacity",.5),d.select(".domain").remove()}l&&u&&i.style("cursor","pointer").on("click",()=>{u({type:"grid"})})}static renderCanvas(t,r,n){if(!Sn(t))return;let{ctx:i,graphArea:a,config:o,resolveColor:s}=t;if(!o?.layout?.grid)return;let l=o.layout.grid.y!==void 0?o.layout.grid.y:!0,u=o.layout.grid.x||!1;if(!a||isNaN(a.bottom)||isNaN(a.height)||isNaN(a.left)||isNaN(a.width)||isNaN(a.top)||isNaN(a.right)){console.warn("Invalid graphArea values in GridlineUtility canvas",a);return}if(i.save(),i.strokeStyle=s(o?.layout?.grid?.color||"var(--mk-ui-border)"),i.globalAlpha=.5,i.lineWidth=1,o?.layout?.grid?.strokeDasharray){let c=o.layout.grid.strokeDasharray.split(",").map(Number);i.setLineDash(c)}if(u&&r){let c=r.ticks?r.ticks(5):r.domain();if(r.bandwidth){c.forEach((d,p)=>{if(p===0)return;let h=r(d);i.beginPath(),i.moveTo(h,a.top),i.lineTo(h,a.bottom),i.stroke()});let f=a.right;i.beginPath(),i.moveTo(f,a.top),i.lineTo(f,a.bottom),i.stroke()}else c.forEach(f=>{let d=r(f);i.beginPath(),i.moveTo(d,a.top),i.lineTo(d,a.bottom),i.stroke()})}l&&n&&(n.ticks?n.ticks(5):n.domain()).forEach(f=>{let d=n(f);i.beginPath(),i.moveTo(a.left,d),i.lineTo(a.right,d),i.stroke()}),i.restore()}};var uF=class{static render(t){tn(t)?this.renderSVG(t):Sn(t)&&this.renderCanvas(t)}static renderSVG(t){if(!tn(t))return;let{g:r,processedData:n,scales:i,config:a,graphArea:o,editMode:s,selectedElement:l,onElementSelect:u,showDataLabels:c,resolveColor:f}=t,d=i.get("x"),p=i.get("y");if(!d||!p)return;let h=Array.isArray(a.encoding.x)?a.encoding.x[0]:a.encoding.x,m=Array.isArray(a.encoding.y)?a.encoding.y[0]:a.encoding.y,v=a.encoding.color;if(!h?.field||!m?.field||!v?.field)return;let A=Array.from(new Set(n.map(O=>String(O[h.field])))),x=Array.from(new Set(n.map(O=>String(O[m.field])))),g,w;d.bandwidth?g=d.bandwidth():g=o.width/A.length,p.bandwidth?w=p.bandwidth():w=o.height/x.length;let b=n.map(O=>Number(O[v.field])||0),y=nd(b),S=a.scale?.color?.scheme||"viridis",T={viridis:p2,inferno:nF,magma:rF,plasma:iF,blues:KO,greens:JO,reds:ZO,warm:eF,cool:tF},D=d2().domain(y).interpolator(T[S]||p2),k=new Map;n.forEach(O=>{let P=`${O[h.field]}-${O[m.field]}`;k.set(P,O)});let M=r.selectAll(".heatmap-cell").data(n).enter().append("rect").attr("class","heatmap-cell").attr("x",O=>{if(d.bandwidth)return d(String(O[h.field]));{let P=A.indexOf(String(O[h.field]));return o.left+P*g}}).attr("y",O=>{if(p.bandwidth)return p(String(O[m.field]));{let P=x.indexOf(String(O[m.field]));return o.top+P*w}}).attr("width",g-1).attr("height",w-1).attr("fill",O=>{let P=Number(O[v.field])||0;return D(P)}).attr("stroke","white").attr("stroke-width",1),E=vr("body").append("div").attr("class","heatmap-tooltip").style("position","absolute").style("padding","8px").style("background","rgba(0, 0, 0, 0.8)").style("color","white").style("border-radius","4px").style("font-size","12px").style("pointer-events","none").style("opacity",0);M.on("mouseenter",function(O,P){vr(this).transition().duration(200).attr("stroke","black").attr("stroke-width",2),E.transition().duration(200).style("opacity",.9);let B=vr(this).attr("fill"),F="",L=P[h.field],I=t.tableProperties?.find(pe=>pe.name===h.field),R=I?cn(I,L,t.superstate):L;F+='<div style="display: flex; align-items: center; gap: 8px;">',F+=`<div style="width: 12px; height: 12px; background-color: ${B}; border-radius: 2px; flex-shrink: 0;"></div>`,F+=`<div>${R}</div>`,F+="</div>",F+='<div style="margin-left: 20px; margin-top: 4px;">';let J=P[m.field],Q=t.tableProperties?.find(pe=>pe.name===m.field);F+=`${Q?cn(Q,J,t.superstate):J}<br/>`;let ie=P[v.field],Ae=t.tableProperties?.find(pe=>pe.name===v.field);F+=`${Ae?cn(Ae,ie,t.superstate):ie}`,F+="</div>",E.html(F).style("left",O.pageX+10+"px").style("top",O.pageY-28+"px")}).on("mouseleave",function(){vr(this).transition().duration(200).attr("stroke","white").attr("stroke-width",1),E.transition().duration(500).style("opacity",0)}),s&&(M.style("cursor","pointer").on("click",function(O,P){u&&u({type:"series",id:`cell-${P[h.field]}-${P[m.field]}`})}),l?.type==="series"&&M.each(function(O){let P=`cell-${O[h.field]}-${O[m.field]}`;l.id===P&&vr(this).style("stroke","var(--mk-ui-accent)").style("stroke-width",3)})),(c||a.mark?.dataLabels?.show)&&r.selectAll(".heatmap-label").data(n).enter().append("text").attr("class","heatmap-label").attr("x",O=>{if(d.bandwidth)return d(String(O[h.field]))+g/2;{let P=A.indexOf(String(O[h.field]));return o.left+P*g+g/2}}).attr("y",O=>{if(p.bandwidth)return p(String(O[m.field]))+w/2;{let P=x.indexOf(String(O[m.field]));return o.top+P*w+w/2}}).attr("text-anchor","middle").attr("dominant-baseline","middle").style("font-size",`${a.mark?.dataLabels?.fontSize||10}px`).style("fill",O=>((Number(O[v.field])||0)-y[0])/(y[1]-y[0])>.5?"white":"black").text(O=>O[v.field]),r.node().__heatmapTooltip=E}static renderCanvas(t){if(!Sn(t))return;let{ctx:r,processedData:n,scales:i,config:a,graphArea:o,resolveColor:s}=t,l=i.get("x"),u=i.get("y");if(!l||!u)return;let c=Array.isArray(a.encoding.x)?a.encoding.x[0]:a.encoding.x,f=Array.isArray(a.encoding.y)?a.encoding.y[0]:a.encoding.y,d=a.encoding.color;if(!c?.field||!f?.field||!d?.field)return;let p=Array.from(new Set(n.map(y=>String(y[c.field])))),h=Array.from(new Set(n.map(y=>String(y[f.field])))),m,v;l.bandwidth?m=l.bandwidth():m=o.width/p.length,u.bandwidth?v=u.bandwidth():v=o.height/h.length;let A=n.map(y=>Number(y[d.field])||0),x=nd(A),g=a.scale?.color?.scheme||"viridis",w={viridis:p2,inferno:nF,magma:rF,plasma:iF,blues:KO,greens:JO,reds:ZO,warm:eF,cool:tF},b=d2().domain(x).interpolator(w[g]||p2);r.save(),n.forEach(y=>{let S,T;if(l.bandwidth)S=l(String(y[c.field]));else{let k=p.indexOf(String(y[c.field]));S=o.left+k*m}if(u.bandwidth)T=u(String(y[f.field]));else{let k=h.indexOf(String(y[f.field]));T=o.top+k*v}let D=Number(y[d.field])||0;if(r.fillStyle=b(D),r.fillRect(S,T,m-1,v-1),r.strokeStyle="white",r.lineWidth=1,r.strokeRect(S,T,m-1,v-1),a.mark?.dataLabels?.show){r.save();let k=(D-x[0])/(x[1]-x[0]);r.fillStyle=k>.5?"white":"black",r.font=`${a.mark?.dataLabels?.fontSize||10}px sans-serif`,r.textAlign="center",r.textBaseline="middle",r.fillText(String(D),S+m/2,T+v/2),r.restore()}}),r.restore()}};var cF=class{static render(t,r,n){if(r.length===0)return;let i=n?.position||t.config.layout?.legend?.position||"top",a=n?.align||t.config.layout?.legend?.align||"start",o=n?.titleHeight||0;tn(t)?this.renderSVG(t,r,i,a,o,n?.layoutPosition):Sn(t)&&this.renderCanvas(t,r,i,a,o,n?.layoutPosition)}static renderSVG(t,r,n,i,a,o){if(!tn(t))return;let{svg:s,actualDimensions:l,resolveColor:u,editMode:c,selectedElement:f,onElementSelect:d}=t;n==="left"||n==="right"?this.renderVerticalSVG(s,r,n,i,l,u,c,f,d,o):this.renderHorizontalSVG(s,r,n,i,l,a,u,c,f,d,o)}static renderCanvas(t,r,n,i,a,o){if(!Sn(t))return;let{ctx:s,width:l,height:u,resolveColor:c}=t,f=12,d=20,p=10;if(s.save(),s.font="12px sans-serif",o&&(s.rect(o.x,o.y,o.width,o.height),s.clip()),n==="top"||n==="bottom"){let v=[];r.forEach(T=>{let D=s.measureText(T.label),k=f+5+D.width;v.push(k)});let A=o?.width||l-2*p,x=[],g=[],w=0;v.forEach((T,D)=>{let k=g.length>0?T+d:T;w+k<=A||g.length===0?(g.push(D),w+=k):(x.push({items:g,width:w}),g=[D],w=T)}),g.length>0&&x.push({items:g,width:w});let b=x.length*20+(x.length-1)*5,y=o?o.x+p:p,S=o?o.y+p:n==="top"?a>0?a:p:u-p-b;x.forEach((T,D)=>{let k=S+D*25,M=0,E=A-2*p;switch(i){case"end":M=E-T.width;break;case"center":M=(E-T.width)/2;break;case"start":default:M=0;break}let O=y+M;T.items.forEach((P,_)=>{let B=r[P];s.fillStyle=B.color,s.fillRect(O,k,f,f),s.fillStyle=c("var(--mk-ui-text-secondary)"),s.textAlign="left",s.textBaseline="middle";let F=v[P]-f-10,L=B.label;if(s.measureText(L).width>F){let R=L.length;for(;R>0&&s.measureText(L.substring(0,R)+"...").width>F;)R--;L=L.substring(0,R)+"..."}s.fillText(L,O+f+5,k+f/2),O+=v[P]+(_<T.items.length-1?d:0)})})}else{let v=r.length*20+(r.length-1)*5,A=o?o.x+p:n==="left"?10:l-120,x;if(o){let g=o.height-2*p;switch(i){case"start":x=o.y+p;break;case"end":x=o.y+o.height-v-p;break;case"center":default:x=o.y+(o.height-v)/2;break}}else switch(i){case"start":x=p;break;case"end":x=u-v-p;break;case"center":default:x=u/2-v/2;break}r.forEach((g,w)=>{let b=x+w*25;s.fillStyle=g.color,s.fillRect(A,b,f,f),s.fillStyle=c("var(--mk-ui-text-secondary)"),s.textAlign="left",s.textBaseline="middle";let y=o?o.width-f-15:100,S=g.label;if(s.measureText(S).width>y){let D=S.length;for(;D>0&&s.measureText(S.substring(0,D)+"...").width>y;)D--;S=S.substring(0,D)+"..."}s.fillText(S,A+f+5,b+f/2)})}s.restore()}static renderVerticalSVG(t,r,n,i,a,o,s,l,u,c){let m=r.length*20+(r.length-1)*5;if(!a||isNaN(a.width)||isNaN(a.height))return;let v=c?c.x+10:n==="left"?10:a.width-120,A;if(c){let y=c.height-20;switch(i){case"start":A=c.y+10;break;case"end":A=c.y+c.height-m-10;break;case"center":default:A=c.y+(c.height-m)/2;break}}else switch(i){case"start":A=10;break;case"end":A=a.height-m-10;break;case"center":default:A=Math.max(10,a.height/2-m/2);break}if(isNaN(v)||isNaN(A))return;let x=`legend-clip-${Math.random().toString(36).substring(2,9)}`,g=c?c.width-2*10:110,w=c?c.height-2*10:m;t.append("defs").append("clipPath").attr("id",x).append("rect").attr("x",0).attr("y",0).attr("width",g).attr("height",w);let b=t.append("g").attr("class","legend").attr("transform",`translate(${v}, ${A})`).attr("clip-path",`url(#${x})`);s&&b.append("rect").attr("x",-10).attr("y",-10).attr("width",120).attr("height",m+2*10).attr("fill","transparent").attr("cursor","pointer").on("click",()=>{u&&u({type:"legend"})}),r.forEach((y,S)=>{let T=b.append("g").attr("transform",`translate(0, ${S*25})`);T.append("rect").attr("x",0).attr("y",0).attr("width",12).attr("height",12).attr("fill",y.color).attr("rx",2).attr("ry",2);let D=T.append("text").attr("x",12+5).attr("y",12/2).attr("dominant-baseline","middle").style("font-size","12px").style("fill",o("var(--mk-ui-text-secondary)")),k=g-12-10,M=y.label;D.text(M);let E=D.node();if(E&&E.getBBox().width>k){let P=0,_=M.length;for(;P<_;){let B=Math.floor((P+_+1)/2);D.text(M.substring(0,B)+"..."),(D.node()?.getBBox().width||0)<=k?P=B:_=B-1}D.text(M.substring(0,P)+"..."),D.append("title").text(M)}}),s&&l?.type==="legend"&&b.append("rect").attr("x",-10).attr("y",-10).attr("width",120).attr("height",m+2*10).attr("fill","none").attr("stroke","var(--mk-ui-accent)").attr("stroke-width",2).attr("stroke-dasharray","4,2").attr("pointer-events","none"),s&&b.style("cursor","pointer")}static renderHorizontalSVG(t,r,n,i,a,o,s,l,u,c,f){let A=[],x=t.append("g").style("visibility","hidden");r.forEach(_=>{let F=(x.append("text").style("font-size","12px").text(_.label).node()?.getBBox().width||0)+12+5;A.push(F)}),x.remove();let g=f?.width||a.width-2*10,w=[],b=[],y=0;A.forEach((_,B)=>{let F=b.length>0?_+20:_;y+F<=g||b.length===0?(b.push(B),y+=F):(w.push({items:b,width:y}),b=[B],y=_)}),b.length>0&&w.push({items:b,width:y});let S=w.length*20+(w.length-1)*5;if(!a||isNaN(a.width)||isNaN(a.height))return;let T=f?.width||a.width,D;f?D=f.x+10:D=10;let k=f?f.y+10:n==="top"?o>0?o+10:10:a.height-10-S;if(isNaN(D)||isNaN(k))return;let M=`legend-clip-${Math.random().toString(36).substring(2,9)}`,E=f?f.width-2*10:a.width-2*10,O=f?f.height-2*10:S;t.append("defs").append("clipPath").attr("id",M).append("rect").attr("x",0).attr("y",0).attr("width",E).attr("height",O);let P=t.append("g").attr("class","legend").attr("transform",`translate(${D}, ${k})`).attr("clip-path",`url(#${M})`);if(l){let _=Math.max(...w.map(B=>B.width));P.append("rect").attr("x",-10).attr("y",-10/2).attr("width",_+2*10).attr("height",S+10).attr("fill","transparent").attr("cursor","pointer").on("click",()=>{c&&c({type:"legend"})})}if(w.forEach((_,B)=>{let F=B*25,L=0,I=g-2*10;switch(i){case"end":L=I-_.width;break;case"center":L=(I-_.width)/2;break;case"start":default:L=0;break}let R=L;_.items.forEach((J,Q)=>{let q=r[J],ie=P.append("g").attr("transform",`translate(${R}, ${F})`);ie.append("rect").attr("x",0).attr("y",0).attr("width",12).attr("height",12).attr("fill",q.color).attr("rx",2).attr("ry",2),ie.append("text").attr("x",12+5).attr("y",12/2).attr("dominant-baseline","middle").style("font-size","12px").style("fill",s("var(--mk-ui-text-secondary)")).text(q.label),R+=A[J]+(Q<_.items.length-1?20:0)})}),l&&u?.type==="legend"){let _=Math.max(...w.map(B=>B.width));P.append("rect").attr("x",-10).attr("y",-10/2).attr("width",_+2*10).attr("height",S+10).attr("fill","none").attr("stroke","var(--mk-ui-accent)").attr("stroke-width",2).attr("stroke-dasharray","4,2").attr("pointer-events","none")}l&&P.style("cursor","pointer")}};var NBe=e=>{if(!e?.value)return[];let t=or(e.value);return t?.options?t.options.filter(r=>r?.value).map(r=>String(r.value)):[]},TBe=e=>!e||typeof e!="string"?!1:/\d{4}-\d{2}-\d{2}|\d{2}\/\d{2}\/\d{4}|\d{2}-\d{2}-\d{4}|\d{4}\/\d{2}\/\d{2}/.test(e)||/\w{3}\s+\d{1,2},?\s+\d{4}|\d{1,2}\s+\w{3}\s+\d{4}/.test(e),Zae=(e,t)=>{let r=String(e),n=String(t);if(TBe(r)||TBe(n)){let o=new Date(r),s=new Date(n);if(isNaN(o.getTime())&&isNaN(s.getTime()))return 0;if(isNaN(o.getTime()))return 1;if(isNaN(s.getTime()))return-1;if(!isNaN(o.getTime())&&!isNaN(s.getTime()))return o.getTime()-s.getTime()}let i=parseFloat(r),a=parseFloat(n);return!isNaN(i)&&!isNaN(a)?i-a:r.localeCompare(n,void 0,{numeric:!0,sensitivity:"base"})},eoe=(e,t,r,n,i,a)=>{let o=e[n],s=t[n];if(r==="temporal"){let l=o instanceof Date?o:new Date(String(o)),u=s instanceof Date?s:new Date(String(s));return l.getTime()-u.getTime()}if(r==="quantitative")return Number(o)-Number(s);if(a?.type==="option"||a?.type==="option-multi"){let l=NBe(a);if(l.length>0){let u=l.indexOf(String(o)),c=l.indexOf(String(s));if(u!==-1&&c!==-1)return u-c;if(u!==-1)return-1;if(c!==-1)return 1}}if(i&&i.domain){let l=i.domain(),u=l.indexOf(String(o)),c=l.indexOf(String(s));if(u!==-1&&c!==-1)return u-c}return Zae(o,s)},xm=(e,t)=>{if(t?.type==="option"||t?.type==="option-multi"){let r=NBe(t);if(r.length>0)return[...e].sort((n,i)=>{let a=r.indexOf(n),o=r.indexOf(i);return a!==-1&&o!==-1?a-o:a!==-1?-1:o!==-1?1:Zae(n,i)})}return[...e].sort(Zae)};var ib=class{static formatDateForTooltip(t,r){let n=t.getUTCHours()!==0||t.getUTCMinutes()!==0||t.getUTCSeconds()!==0;return r?.timeUnit==="hour"||n?ui("%b %d, %I:%M %p")(t):ui("%b %d")(t)}static render(t){tn(t)?this.renderSVG(t):Sn(t)&&this.renderCanvas(t)}static renderSVG(t){if(!tn(t))return;let{g:r,svg:n,processedData:i,transformedData:a,scales:o,config:s,editMode:l,selectedElement:u,onElementSelect:c,showDataLabels:f,showLegend:d,resolveColor:p,graphArea:h}=t;if(a?.type==="line"&&a.data){this.renderWithTransformedData(t,a.data);return}let m=o.get("x"),v=o.get("y");if(!m||!v)return;let A=Array.isArray(s.encoding.x)?s.encoding.x:[s.encoding.x],x=Array.isArray(s.encoding.y)?s.encoding.y:[s.encoding.y],g=[],w=o.get("color"),b=s.encoding.color?.field,y=(E,O)=>{if(!O||!O.field)return NaN;let P=E[O.field];if(P==null)return NaN;if(O.type==="quantitative"||O.type==="temporal"){let _=O.type==="temporal"?P instanceof Date?P:new Date(String(P)):Number(P);if(O.type==="temporal"&&_ instanceof Date&&isNaN(_.getTime()))return NaN;if(O.type==="quantitative"&&typeof _=="number"&&isNaN(_))return NaN;let B=m(_);return B===void 0||isNaN(B)?NaN:B}else{let _=m,B=_.bandwidth?_.bandwidth():0,F=_(String(P));return F===void 0||isNaN(F)?NaN:F+B/2}},S;if(b){let E=rv(i,P=>String(P[b]));Array.from(E.values()).some(P=>P.length>1)?S=E:S=new Map([["single",i]])}else x.length>1?(S=new Map,S.set("all",i)):S=new Map([["single",i]]);let T=0,D=In(t.colorPaletteId,t.superstate),k=bc("line-tooltip");S.forEach((E,O)=>{x.forEach((P,_)=>{let B=A[Math.min(_,A.length-1)];if(!B?.field||!P?.field)return;let F=lf().x(le=>y(le,B)).y(le=>{let pe=Number(le[P.field])||0,ae=v(pe);return ae!==void 0&&!isNaN(ae)?ae:0}).defined(le=>{let pe=y(le,B),ae=Number(le[P.field]);return le[P.field]!=null&&!isNaN(ae)&&!isNaN(pe)}).curve((s.mark?.interpolate||"linear")==="monotone"?cv:yc),L=E.filter(le=>{let pe=le[B.field],ae=le[P.field],oe=pe!=null&&ae!=null&&!isNaN(Number(ae));return oe}).sort((le,pe)=>eoe(le,pe,B.type,B.field,m));if((B.type==="ordinal"||B.type==="nominal")&&m.domain){let le=m.domain(),pe=new Set(L.map(oe=>String(oe[B.field]))),ae=le.filter(oe=>!pe.has(oe));if(ae.length>0){let oe=ae.map(ue=>{let Se={};return Se[B.field]=ue,Se[P.field]=0,b&&O!=="single"&&O!=="all"&&(Se[b]=O),Se});L=[...L,...oe],L.sort((ue,Se)=>{let H=le.indexOf(String(ue[B.field])),ye=le.indexOf(String(Se[B.field]));return H-ye})}}if(L.length===0)return;let I;if(typeof s.mark?.stroke=="string"?I=s.mark.stroke.startsWith("#")?s.mark.stroke:p(s.mark.stroke):b&&w?I=w(O)||D[0]:x.length>1?I=D[_%D.length]:T>0?I=D[T%D.length]:I=D[0],b&&O!=="all"||x.length>1){let le=b?O:P.field;g.find(pe=>pe.label===le)||g.push({label:le,color:I})}let R=null,J=s.mark?.strokeWidth!==void 0?Math.max(s.mark.strokeWidth,1):1;R=r.append("path").datum(L).attr("class",`line series-${T}`).attr("fill","none").attr("stroke",I).attr("stroke-width",J).attr("opacity",s.mark?.opacity||1).attr("d",F);let Q=F(L);l&&R&&(R.style("cursor","pointer").on("click",function(){c&&c({type:"series",id:`line-${T}`})}),u?.type==="series"&&u.id===`line-${T}`&&R.style("stroke-width",J+2).style("filter","drop-shadow(0 0 4px var(--mk-ui-accent))"));let q=s.mark?.point?.show||L.length===1,Ae=r.selectAll(`.point-hit-area-series-${T}`).data(L).enter().append("circle").attr("class",`point-hit-area point-hit-area-series-${T}`).attr("cx",le=>y(le,B)).attr("cy",le=>{let pe=Number(le[P.field])||0,ae=v(pe);return ae!==void 0&&!isNaN(ae)?ae:0}).attr("r",8).attr("fill","red").attr("fill-opacity",.2).attr("stroke","blue").attr("stroke-width",1).style("cursor","pointer");q&&r.selectAll(`.point-visible-series-${T}`).data(L).enter().append("circle").attr("class",`point-visible point-visible-series-${T}`).attr("cx",le=>y(le,B)).attr("cy",le=>{let pe=Number(le[P.field])||0,ae=v(pe);return ae!==void 0&&!isNaN(ae)?ae:0}).attr("r",s.mark?.point?.size||4).attr("fill",I).style("pointer-events","none"),Ae.on("mouseover",function(le,pe){vr(this).transition().duration(150).attr("r",10).attr("fill",I).attr("fill-opacity",.3),k.transition().duration(200).style("opacity",.9);let ae="";if(B.field){let H=pe[B.field],ye,ne=typeof H=="string"&&/^\d+$/.test(H);if(B.type==="temporal"||H instanceof Date||typeof H=="string"&&!ne&&!isNaN(Date.parse(String(H)))){let U=H instanceof Date?H:new Date(String(H));isNaN(U.getTime())?ye=String(H):ye=ib.formatDateForTooltip(U,B)}else{let U=t.tableProperties?.find(V=>V.name===B.field);ye=U?cn(U,H,t.superstate):String(H)}ae+=`<div style="font-weight: 600; margin-bottom: 4px;">${ye}</div>`}ae+='<div style="display: flex; align-items: center; gap: 8px;">',ae+=`<div style="width: 12px; height: 12px; background-color: ${I}; border-radius: 2px; flex-shrink: 0;"></div>`;let oe=pe[P.field],ue=t.tableProperties?.find(H=>H.name===P.field),Se=ue?cn(ue,oe,t.superstate):rn(Number(oe));if(b){let H=pe[b],ye=t.tableProperties?.find(z=>z.name===b);ae+=`<div><strong>${ye?cn(ye,H,t.superstate):String(H)}:</strong> ${Se}</div>`}else ae+=`<div><strong>${P.field}:</strong> ${Se}</div>`;ae+="</div>",k.html(ae).style("left",le.pageX+10+"px").style("top",le.pageY-28+"px")}).on("mousemove",function(le){k.style("left",le.pageX+10+"px").style("top",le.pageY-28+"px")}).on("mouseout",function(){vr(this).transition().duration(150).attr("r",8).attr("fill","transparent").attr("fill-opacity",0),k.transition().duration(500).style("opacity",0)}),l&&Ae.style("cursor","pointer"),(f||s.mark?.dataLabels?.show)&&L.length<50&&r.selectAll(`.label-series-${T}`).data(L).enter().append("text").attr("class",`label label-series-${T}`).attr("x",le=>y(le,B)).attr("y",le=>{let pe=Number(le[P.field])||0,ae=v(pe);return ae!==void 0&&!isNaN(ae)?ae-8:-8}).attr("text-anchor","middle").style("font-size",`${s.mark?.dataLabels?.fontSize||10}px`).style("fill",p(s.mark?.dataLabels?.color||"var(--mk-ui-text-primary)")).style("font-weight","500").text(le=>{let pe=Number(le[P.field])||0;return rn(pe)}),T++})}),g.length>0&&d&&(n._legendItems=g);let M=A[0];if(M&&(M.type==="temporal"||M.type==="nominal"||M.type==="ordinal")){let E=new Map;i.forEach(_=>{let B=_[M.field],F=B instanceof Date?B.getTime().toString():String(B);E.has(F)||E.set(F,[]),E.get(F).push(_)});let O=Array.from(E.keys()).sort(),P=O.length>1?Math.abs(m(O[1])-m(O[0])):50;E.forEach((_,B)=>{let F=_[0][M.field],L=m(F);r.append("rect").attr("class","x-value-hit-area").attr("x",L-P/2).attr("y",0).attr("width",P).attr("height",h.bottom-h.top).attr("fill","transparent").attr("pointer-events","all").style("cursor","crosshair").on("mouseover",function(I){k.transition().duration(200).style("opacity",.9);let R;if(M.type==="temporal"&&(F instanceof Date||!isNaN(Date.parse(String(F))))){let Q=F instanceof Date?F:new Date(String(F));R=ib.formatDateForTooltip(Q,M)}else{let Q=t.tableProperties?.find(q=>q.name===M.field);R=Q?cn(Q,F,t.superstate):String(F)}let J=`<div style="font-weight: 600; margin-bottom: 4px;">${R}</div>`;x.forEach(Q=>{_.forEach(q=>{let ie=q[Q.field];if(ie!=null){let Ae=t.tableProperties?.find(oe=>oe.name===Q.field),le=Ae?cn(Ae,ie,t.superstate):rn(Number(ie)),pe=s.encoding.color?.field;J+=`<div><strong>${pe?String(q[pe]):Q.field}:</strong> ${le}</div>`}})}),k.html(J).style("left",I.pageX+10+"px").style("top",I.pageY-28+"px")}).on("mousemove",function(I){k.style("left",I.pageX+10+"px").style("top",I.pageY-28+"px")}).on("mouseout",function(){k.transition().duration(500).style("opacity",0)})})}n.node().__lineTooltip=k}static renderCanvas(t){if(!Sn(t))return;let{ctx:r,processedData:n,scales:i,config:a,actualDimensions:o,resolveColor:s}=t,l=i.get("x"),u=i.get("y");if(!l||!u)return;let c=Array.isArray(a.encoding.x)?a.encoding.x:[a.encoding.x],f=Array.isArray(a.encoding.y)?a.encoding.y:[a.encoding.y],d=(x,g)=>{if(!g||!g.field)return NaN;let w=x[g.field];if(w==null)return NaN;if(g.type==="quantitative"||g.type==="temporal"){let b=g.type==="temporal"?w instanceof Date?w:new Date(String(w)):Number(w);if(g.type==="temporal"&&b instanceof Date&&isNaN(b.getTime()))return NaN;if(g.type==="quantitative"&&typeof b=="number"&&isNaN(b))return NaN;let y=l(b);return y!==void 0&&!isNaN(y)?y:NaN}else{let b=l,y=b.bandwidth?b.bandwidth():0,S=b(String(w));return S!==void 0&&!isNaN(S)?S+y/2:NaN}},p=i.get("color"),h=a.encoding.color?.field,m;h?m=rv(n,x=>String(x[h])):f.length>1?(m=new Map,m.set("all",n)):m=new Map([["single",n]]);let v=0,A=In(t.colorPaletteId,t.superstate);m.forEach((x,g)=>{f.forEach((w,b)=>{let y=c[Math.min(b,c.length-1)];if(!y?.field||!w?.field)return;let S=x.filter(k=>{let M=k[y.field],E=k[w.field];return M!=null&&E!=null&&!isNaN(Number(E))}).sort((k,M)=>eoe(k,M,y.type,y.field,l));if((y.type==="ordinal"||y.type==="nominal")&&l.domain){let k=l.domain(),M=new Set(S.map(O=>String(O[y.field]))),E=k.filter(O=>!M.has(O));if(E.length>0){let O=E.map(P=>{let _={};return _[y.field]=P,_[w.field]=0,h&&g!=="single"&&g!=="all"&&(_[h]=g),_});S=[...S,...O],S.sort((P,_)=>{let B=k.indexOf(String(P[y.field])),F=k.indexOf(String(_[y.field]));return B-F})}}if(S.length===0)return;let T;typeof a.mark?.stroke=="string"?T=a.mark.stroke.startsWith("#")?a.mark.stroke:s(a.mark.stroke):h&&p?T=p(g)||A[0]:f.length>1?T=A[b%A.length]:v>0?T=A[v%A.length]:T=A[0];let D=a.mark?.strokeWidth!==void 0?Math.max(a.mark.strokeWidth,1):1;{if(r.save(),r.strokeStyle=T,r.lineWidth=D,r.globalAlpha=a.mark?.opacity||1,r.beginPath(),(a.mark?.interpolate||"linear")!=="monotone"||S.length<2){let k=!0;S.forEach((M,E)=>{let O=d(M,y),P=Number(M[w.field])||0,_=u(P),B=_!==void 0&&!isNaN(_)?_:NaN;isNaN(O)||isNaN(B)||(k?(r.moveTo(O,B),k=!1):r.lineTo(O,B))})}else{let k=S.map(M=>{let E=d(M,y),O=Number(M[w.field])||0,P=u(O),_=P!==void 0&&!isNaN(P)?P:NaN;return{x:E,y:_}}).filter(M=>!isNaN(M.x)&&!isNaN(M.y));if(k.length===2)r.moveTo(k[0].x,k[0].y),r.lineTo(k[1].x,k[1].y);else if(k.length>2){r.moveTo(k[0].x,k[0].y);for(let M=0;M<k.length-1;M++){let E=k[Math.max(0,M-1)],O=k[M],P=k[M+1],_=k[Math.min(k.length-1,M+2)],B=O.x+(P.x-E.x)/6,F=O.y+(P.y-E.y)/6,L=P.x-(_.x-O.x)/6,I=P.y-(_.y-O.y)/6;r.bezierCurveTo(B,F,L,I,P.x,P.y)}}}S.length>0&&r.stroke(),r.restore()}a.mark?.point?.show&&S.forEach(k=>{let M=d(k,y),E=Number(k[w.field])||0,O=u(E),P=O!==void 0&&!isNaN(O)?O:NaN;isNaN(M)||isNaN(P)||(r.save(),r.fillStyle=T,r.beginPath(),r.arc(M,P,a.mark?.point?.size||4,0,2*Math.PI),r.fill(),r.restore())}),a.mark?.dataLabels?.show&&S.length<50&&(r.save(),r.fillStyle=s(a.mark.dataLabels.color||"var(--mk-ui-text-primary)"),r.font=`500 ${a.mark.dataLabels.fontSize||10}px sans-serif`,r.textAlign="center",r.textBaseline="bottom",S.forEach(k=>{let M=d(k,y),E=Number(k[w.field])||0,O=u(E),P=O!==void 0&&!isNaN(O)?O:NaN;if(isNaN(M)||isNaN(P))return;let _=rn(E);r.fillText(_,M,P-8)}),r.restore()),v++})})}static renderWithTransformedData(t,r){if(!tn(t))return;let{g:n,svg:i,scales:a,config:o,graphArea:s,editMode:l,selectedElement:u,onElementSelect:c,showDataLabels:f}=t,d=a.get("x"),p=a.get("y");if(!d||!p||!r.data||r.data.length===0)return;let h=In(t.colorPaletteId,t.superstate),m=a.get("color"),v=bc("line-tooltip-transformed"),A=lf().defined(w=>{let b=d(w.x),y=p(w.y);return b!=null&&!isNaN(b)&&y!=null&&!isNaN(y)}).x(w=>{let b=d;return b.bandwidth?b(w.x)+b.bandwidth()/2:b(w.x)}).y(w=>p(w.y)).curve(o.mark?.interpolate==="monotone"?h2:yc),x=new Map;r.data.forEach(w=>{let b=w.series||"default";x.has(b)||x.set(b,[]),x.get(b).push(w)});let g=0;x.forEach((w,b)=>{let y=[...w].sort((E,O)=>{let P=d;if(P.domain&&typeof P.domain=="function"){let _=P.domain(),B=_.indexOf(E.x),F=_.indexOf(O.x);if(B!==-1&&F!==-1)return B-F}return E.x<O.x?-1:E.x>O.x?1:0}),S;m&&o.encoding?.color?.field?S=m(b)||h[g%h.length]:S=h[g%h.length];let T=n.append("path").datum(y).attr("class","line").attr("d",A).attr("fill","none").attr("stroke",S).attr("stroke-width",o.mark?.strokeWidth||2).attr("opacity",o.mark?.opacity||1).style("cursor","pointer"),D=o.mark?.point&&(typeof o.mark.point=="boolean"?o.mark.point:o.mark.point?.show!==!1),k=o.mark?.size||4;n.selectAll(`.point-hit-${b}`).data(y).enter().append("circle").attr("class",`point-hit-${b}`).attr("cx",E=>{let O=d;return O.bandwidth?O(E.x)+O.bandwidth()/2:O(E.x)}).attr("cy",E=>p(E.y)).attr("r",D?k:8).attr("fill",D?S:"transparent").attr("fill-opacity",D?o.mark?.opacity||1:0).attr("stroke","none").style("cursor","pointer").on("mouseover",function(E,O){D?vr(this).transition().duration(150).attr("r",k+2):vr(this).transition().duration(150).attr("r",10).attr("fill",S).attr("fill-opacity",.3),v.transition().duration(200).style("opacity",.9);let P=`<div>${O.x}</div>`;P+='<div style="display: flex; align-items: center; gap: 8px; margin-top: 4px;">',P+=`<div style="width: 12px; height: 12px; background-color: ${S}; border-radius: 2px; flex-shrink: 0;"></div>`,P+=`<div>${rn(O.y)}</div>`,P+="</div>",v.html(P).style("left",E.pageX+10+"px").style("top",E.pageY-28+"px")}).on("mousemove",function(E){v.style("left",E.pageX+10+"px").style("top",E.pageY-28+"px")}).on("mouseout",function(){D?vr(this).transition().duration(150).attr("r",k):vr(this).transition().duration(150).attr("r",8).attr("fill","transparent").attr("fill-opacity",0),v.transition().duration(500).style("opacity",0)}),f&&n.selectAll(`.label-${b}`).data(y).enter().append("text").attr("class",`label-${b}`).attr("x",E=>{let O=d;return O.bandwidth?O(E.x)+O.bandwidth()/2:O(E.x)}).attr("y",E=>p(E.y)-5).attr("text-anchor","middle").attr("font-size","10px").attr("fill",S).text(E=>rn(E.y)),g++})}};var fF=class{static render(t){tn(t)?this.renderSVG(t):Sn(t)&&this.renderCanvas(t)}static renderSVG(t){if(!tn(t))return;let{g:r,svg:n,processedData:i,scales:a,config:o,graphArea:s,actualDimensions:l,editMode:u,selectedElement:c,onElementSelect:f,showDataLabels:d,resolveColor:p}=t,h=Array.isArray(o.encoding.y)?o.encoding.y[0]:o.encoding.y,m=Array.isArray(o.encoding.x)?o.encoding.x[0]:o.encoding.x,v=h?.field||o.encoding.angle?.field||o.encoding.theta?.field||"value",A=o.encoding.color?.field||m?.field||"category";if(!v)return;let x=(s.left+s.right)/2,g=(s.top+s.bottom)/2,w=Math.min(s.width,s.height)/2*.8,b=o.mark?.innerRadius||0,y=i,S=i.some(R=>{let J=R[v];return J!=null&&isNaN(+J)});if(S){let R=rv(i,J=>String(J[A]||N.labels.unknown));y=Array.from(R,([J,Q])=>({[A]:J,[v]:Q.length,_originalItems:Q}))}let T=nH().value(R=>Math.abs(Number(R[v])||0)).sort(null),D=oF().innerRadius(b*w).outerRadius(w),k=oF().innerRadius(w*.8).outerRadius(w*.8),M=a.get("color"),E=A,O=T(y),P=[],_=new Map;O.forEach((R,J)=>{let Q;if(M&&E)Q=M(R.data[E]);else{let ie=In(t.colorPaletteId,t.superstate);Q=ie[J%ie.length]}let q=String(R.data[E]);_.set(q,Q),P.find(ie=>ie.label===q)||P.push({label:q,color:Q})});let F=r.append("g").attr("class","pie-chart").attr("transform",`translate(${x}, ${g})`).selectAll(".slice").data(O).enter().append("g").attr("class","slice"),L=F.append("path").attr("d",D).attr("fill",(R,J)=>{let q=t.superstate?.assets?.getColorPalettes()?.find(le=>le.id===t.colorPaletteId);if(q?.colors){let le=q.colors.filter(pe=>pe.value&&(pe.value.includes("linear-gradient")||pe.value.includes("radial-gradient")||pe.value.includes("conic-gradient")))||[];if(le.length>0){let pe=le[J%le.length],ae=_u.parseCSSGradient(pe.value);if(ae)return _u.createSVGGradient(n,ae)}}let ie=String(R.data[E]),Ae=In(t.colorPaletteId,t.superstate);return _.get(ie)||Ae[J%Ae.length]}),I=bc("pie-tooltip");L.on("mouseenter",function(R,J){vr(this).transition().duration(200).attr("transform",function(ye){let[ne,z]=D.centroid(ye);return`translate(${ne*.1}, ${z*.1})`}),I.transition().duration(200).style("opacity",.9);let Q=wO(O,ye=>ye.value),q=(J.value/Q*100).toFixed(1),Ae=vr(this).attr("fill"),le="",pe=J.data[A],ae=t.tableProperties?.find(ye=>ye.name===A);le+=`<div>${ae?cn(ae,pe,t.superstate):pe}</div>`,le+='<div style="display: flex; align-items: center; gap: 8px; margin-top: 4px;">',le+=`<div style="width: 12px; height: 12px; background-color: ${Ae}; border-radius: 2px; flex-shrink: 0;"></div>`,le+="<div>";let ue=J.data[v],Se=t.tableProperties?.find(ye=>ye.name===v),H=Se?cn(Se,ue,t.superstate):ue;S?le+=`${H} ${ue===1?"occurrence":"occurrences"}`:le+=`${H}`,le+=` \u2022 ${q}%`,le+="</div>",le+="</div>",I.html(le).style("left",R.pageX+10+"px").style("top",R.pageY-28+"px")}).on("mouseleave",function(){vr(this).transition().duration(200).attr("transform","translate(0, 0)"),I.transition().duration(500).style("opacity",0)}),u&&(L.style("cursor","pointer").on("click",function(R,J){f&&f({type:"series",id:`slice-${J.data[E]}`})}),c?.type==="series"&&L.each(function(R){let J=`slice-${R.data[E]}`;c.id===J&&vr(this).style("filter","drop-shadow(0 0 4px var(--mk-ui-accent))")})),(d||o.mark?.dataLabels?.show)&&F.append("text").attr("transform",J=>`translate(${k.centroid(J)})`).attr("text-anchor","middle").style("font-size",`${o.mark?.dataLabels?.fontSize||12}px`).style("fill","white").style("font-weight","bold").text(J=>{let Q=((J.endAngle-J.startAngle)/(2*Math.PI)*100).toFixed(1);return o.mark?.dataLabels?.format==="percentage"?`${Q}%`:J.data[v]}),P.length>0&&t.showLegend!==!1&&(n._legendItems=P),n.node().__pieTooltip=I}static renderCanvas(t){if(!Sn(t))return;let{ctx:r,processedData:n,scales:i,config:a,graphArea:o,resolveColor:s}=t,l=Array.isArray(a.encoding.y)?a.encoding.y[0]:a.encoding.y,u=Array.isArray(a.encoding.x)?a.encoding.x[0]:a.encoding.x,c=l?.field||a.encoding.angle?.field||a.encoding.theta?.field||"value",f=a.encoding.color?.field||u?.field||"category";if(!c)return;let d=(o.left+o.right)/2,p=(o.top+o.bottom)/2,h=Math.min(o.width,o.height)/2*.8,m=(a.mark?.innerRadius||0)*h,v=n;if(n.some(y=>{let S=y[c];return S!=null&&isNaN(+S)})){let y=rv(n,S=>String(S[f]||N.labels.unknown));v=Array.from(y,([S,T])=>({[f]:S,[c]:T.length,_originalItems:T}))}let x=i.get("color"),g=f,w=v.reduce((y,S)=>y+Math.abs(Number(S[c])||0),0),b=-Math.PI/2;r.save(),v.forEach((y,S)=>{let T=Math.abs(Number(y[c])||0),D=T/w*2*Math.PI,k=b+D,M,O=t.superstate?.assets?.getColorPalettes()?.find(P=>P.id===t.colorPaletteId);if(O?.colors)if((O.colors.filter(_=>_.value&&(_.value.includes("linear-gradient")||_.value.includes("radial-gradient")||_.value.includes("conic-gradient")))||[]).length>0)M=In(t.colorPaletteId,t.superstate)[S%In(t.colorPaletteId,t.superstate).length];else if(x&&g)M=x(y[g]);else{let _=In(t.colorPaletteId,t.superstate);M=_[S%_.length]}else if(x&&g)M=x(y[g]);else{let P=In(t.colorPaletteId,t.superstate);M=P[S%P.length]}if(r.beginPath(),r.moveTo(d,p),r.arc(d,p,h,b,k),m>0&&r.arc(d,p,m,k,b,!0),r.closePath(),r.fillStyle=M,r.fill(),a.mark?.dataLabels?.show){let P=b+D/2,_=h*.8,B=d+Math.cos(P)*_,F=p+Math.sin(P)*_;r.save(),r.fillStyle="white",r.font=`bold ${a.mark?.dataLabels?.fontSize||12}px sans-serif`,r.textAlign="center",r.textBaseline="middle";let L=(T/w*100).toFixed(1),I=a.mark?.dataLabels?.format==="percentage"?`${L}%`:String(T);r.fillText(I,B,F),r.restore()}b=k}),r.restore()}};var dF=class{static render(t){tn(t)?this.renderSVG(t):Sn(t)&&this.renderCanvas(t)}static renderSVG(t){if(!tn(t))return;let{g:r,svg:n,processedData:i,transformedData:a,config:o,graphArea:s,editMode:l,selectedElement:u,onElementSelect:c,showDataLabels:f,showLegend:d,resolveColor:p,superstate:h,tableProperties:m}=t;if(a?.type==="radar"&&a.data){this.renderWithTransformedData(t,a.data);return}if(!i||i.length===0)return;let v=Array.isArray(o.encoding.x)?o.encoding.x[0]:o.encoding.x,A=Array.isArray(o.encoding.y)?o.encoding.y:o.encoding.y?[o.encoding.y]:[],x=o.encoding.color;if(!v?.field||A.length===0||!A[0]?.field)return;let g=s.left+(s.right-s.left)/2,w=s.top+(s.bottom-s.top)/2,b=Math.min(s.right-s.left,s.bottom-s.top)/2*.8,y=Array.from(new Set(i.map(L=>String(L[v.field])))),S=2*Math.PI/y.length,T=[];A.forEach(L=>{if(L.field){let I=i.map(R=>Number(R[L.field])).filter(R=>!isNaN(R));T.push(...I)}});let D=ip(T)||1,k=O6(T)||0,M=D-k,E=ap().domain([k,D]).range([0,b]),O=r.append("g").attr("class","radar-grid-layer"),P=r.append("g").attr("class","radar-data-layer"),_=5;for(let L=1;L<=_;L++){let I=b/_*L,R=[];y.forEach((q,ie)=>{let Ae=ie*S-Math.PI/2,le=g+Math.cos(Ae)*I,pe=w+Math.sin(Ae)*I;R.push({x:le,y:pe})});let J=lf().x(q=>q.x).y(q=>q.y).curve(K6);O.append("path").datum(R).attr("d",J).attr("fill","none").attr("stroke",p("var(--mk-ui-border)")).attr("stroke-width",1).attr("stroke-dasharray","3,3").attr("opacity",.5);let Q=k+M*L/_;O.append("text").attr("x",g+5).attr("y",w-I).attr("text-anchor","start").attr("dominant-baseline","middle").style("font-size","10px").style("fill",p("var(--mk-ui-text-secondary)")).style("opacity",.7).text(Q.toFixed(1))}y.forEach((L,I)=>{let R=I*S-Math.PI/2,J=g+Math.cos(R)*b,Q=w+Math.sin(R)*b;O.append("line").attr("class","radar-axis-line").attr("x1",g).attr("y1",w).attr("x2",J).attr("y2",Q).attr("stroke",p("var(--mk-ui-border)")).attr("stroke-width",1).attr("stroke-dasharray","2,2").attr("opacity",.3);let q=b+20,ie=g+Math.cos(R)*q,Ae=w+Math.sin(R)*q,le=m?.find(ae=>ae.name===v.field),pe=le&&h?cn(le,L,h):L;O.append("text").attr("x",ie).attr("y",Ae).attr("text-anchor","middle").attr("dominant-baseline","middle").style("font-size","12px").style("fill",p("var(--mk-ui-text-primary)")).text(pe)});let B=In(t.colorPaletteId,t.superstate);vr("body").selectAll(".radar-tooltip").remove();let F=vr("body").append("div").attr("class","radar-tooltip").style("position","absolute").style("padding","8px 12px").style("background",p("var(--mk-ui-background)")).style("color",p("var(--mk-ui-text-primary)")).style("border",`1px solid ${p("var(--mk-ui-border)")}`).style("border-radius","4px").style("font-size","12px").style("box-shadow","0 2px 8px rgba(0, 0, 0, 0.15)").style("pointer-events","none").style("opacity",0).style("z-index",1e4);if(A.forEach((L,I)=>{if(!L.field)return;let R=B[I%B.length],J=L.field,Q=[];y.forEach((pe,ae)=>{let oe=ae*S-Math.PI/2,ue=i.find(z=>String(z[v.field])===pe),Se=ue&&Number(ue[L.field])||0,H=E(Se),ye=g+Math.cos(oe)*H,ne=w+Math.sin(oe)*H;Q.push({category:pe,value:Se,angle:oe,x:ye,y:ne})});let ie=lf().x(pe=>pe.x).y(pe=>pe.y).curve(K6)(Q),Ae=A.length>1?.15:.2,le=A.length>1?.8:1;(o.mark?.strokeWidth===void 0||o.mark.strokeWidth>0)&&P.append("path").datum(Q).attr("class",`radar-outline series-${I}`).attr("d",ie).attr("fill","none").attr("stroke",R).attr("stroke-width",o.mark?.strokeWidth||2).attr("stroke-opacity",le).attr("stroke-linejoin","round").style("cursor",l?"pointer":"default"),P.append("path").datum(Q).attr("class",`radar-area series-${I}`).attr("d",ie).attr("fill",R).attr("fill-opacity",Ae).attr("stroke","none").style("cursor",l?"pointer":"default"),Q.forEach(pe=>{if(P.append("circle").attr("class",`radar-point series-${I}`).attr("cx",pe.x).attr("cy",pe.y).attr("r",4).attr("fill",R).style("cursor","pointer").on("mouseover",function(ae){F.style("display","block").transition().duration(200).style("opacity",.9);let oe=m?.find(ne=>ne.name===v.field),ue=m?.find(ne=>ne.name===L.field),Se=oe&&h?cn(oe,pe.category,h):pe.category,H=ue&&h?cn(ue,pe.value,h):pe.value.toString(),ye="";ye+=`<div>${Se}</div>`,ye+='<div style="display: flex; align-items: center; gap: 8px; margin-top: 4px;">',ye+=`<div style="width: 12px; height: 12px; background-color: ${R}; border-radius: 2px; flex-shrink: 0;"></div>`,ye+="<div>",A.length>1&&(ye+=`${J} \u2022 `),ye+=`${H}`,ye+="</div>",ye+="</div>",F.html(ye).style("left",ae.pageX+10+"px").style("top",ae.pageY-28+"px")}).on("mousemove",function(ae){F.style("left",ae.pageX+10+"px").style("top",ae.pageY-28+"px")}).on("mouseout",function(){F.transition().duration(200).style("opacity",0).on("end",function(){F.style("display","none")})}),f){let ae=m?.find(ue=>ue.name===L.field),oe=ae&&h?cn(ae,pe.value,h):pe.value.toString();P.append("text").attr("x",pe.x).attr("y",pe.y-8).attr("text-anchor","middle").style("font-size","10px").style("fill",p("var(--mk-ui-text-primary)")).style("font-weight","500").text(oe)}})}),A.length>1&&d){let L=[];A.forEach((I,R)=>{if(I.field){let J=B[R%B.length];L.push({label:I.field,color:J})}}),n._legendItems=L}n.node().__radarTooltip=F}static renderCanvas(t){if(!Sn(t))return;let{ctx:r,processedData:n,config:i,graphArea:a,resolveColor:o}=t;if(!n||n.length===0)return;let s=Array.isArray(i.encoding.x)?i.encoding.x[0]:i.encoding.x,l=Array.isArray(i.encoding.y)?i.encoding.y:i.encoding.y?[i.encoding.y]:[],u=i.encoding.color;if(!s?.field||l.length===0||!l[0]?.field)return;let c=a.left+(a.right-a.left)/2,f=a.top+(a.bottom-a.top)/2,d=Math.min(a.right-a.left,a.bottom-a.top)/2*.8,p=Array.from(new Set(n.map(b=>String(b[s.field])))),h=2*Math.PI/p.length,m=[];l.forEach(b=>{if(b.field){let y=n.map(S=>Number(S[b.field])).filter(S=>!isNaN(S));m.push(...y)}});let v=ip(m)||1,A=O6(m)||0,x=ap().domain([A,v]).range([0,d]);r.save();let g=5;r.strokeStyle=o("var(--mk-ui-border)"),r.setLineDash([3,3]),r.globalAlpha=.5;for(let b=1;b<=g;b++){let y=d/g*b;r.beginPath(),p.forEach((S,T)=>{let D=T*h-Math.PI/2,k=c+Math.cos(D)*y,M=f+Math.sin(D)*y;T===0?r.moveTo(k,M):r.lineTo(k,M)}),r.closePath(),r.stroke()}r.setLineDash([]),r.globalAlpha=.7,p.forEach((b,y)=>{let S=y*h-Math.PI/2,T=c+Math.cos(S)*d,D=f+Math.sin(S)*d;r.beginPath(),r.moveTo(c,f),r.lineTo(T,D),r.stroke()}),r.globalAlpha=1,r.fillStyle=o("var(--mk-ui-text-primary)"),r.font="12px sans-serif",r.textAlign="center",r.textBaseline="middle",p.forEach((b,y)=>{let S=y*h-Math.PI/2,T=d+20,D=c+Math.cos(S)*T,k=f+Math.sin(S)*T;r.fillText(b,D,k)});let w=In(t.colorPaletteId,t.superstate);l.forEach((b,y)=>{if(!b.field)return;let S=w[y%w.length],T=[];p.forEach((D,k)=>{let M=k*h-Math.PI/2,E=n.find(F=>String(F[s.field])===D),O=E&&Number(E[b.field])||0,P=x(O),_=c+Math.cos(M)*P,B=f+Math.sin(M)*P;T.push({x:_,y:B,value:O})}),r.globalAlpha=l.length>1?.15:.2,r.fillStyle=S,r.beginPath(),T.forEach((D,k)=>{k===0?r.moveTo(D.x,D.y):r.lineTo(D.x,D.y)}),r.closePath(),r.fill(),(i.mark?.strokeWidth===void 0||i.mark.strokeWidth>0)&&(r.globalAlpha=1,r.strokeStyle=S,r.lineWidth=i.mark?.strokeWidth||2,r.stroke()),r.fillStyle=S,T.forEach(D=>{r.beginPath(),r.arc(D.x,D.y,4,0,2*Math.PI),r.fill()})}),r.restore()}static renderWithTransformedData(t,r){if(!tn(t))return;let{g:n,svg:i,config:a,graphArea:o,showDataLabels:s,colorPaletteId:l,superstate:u}=t;if(!r.data||r.data.length===0)return;let c=o.left+o.width/2,f=o.top+o.height/2,d=Math.min(o.width,o.height)/2-40,p=In(l,u),h=Math.PI*2/r.axes.length,m=ap().domain([0,r.maxValue]).range([0,d]),v=lf().x((b,y)=>{let S=r.axes.indexOf(b.axis),T=h*S-Math.PI/2;return m(b.value)*Math.cos(T)}).y((b,y)=>{let S=r.axes.indexOf(b.axis),T=h*S-Math.PI/2;return m(b.value)*Math.sin(T)}).curve(K6),A=5;for(let b=1;b<=A;b++){let y=d/A*b;n.append("circle").attr("cx",c).attr("cy",f).attr("r",y).attr("fill","none").attr("stroke","var(--mk-ui-border)").attr("stroke-width",.5).attr("opacity",.5)}r.axes.forEach((b,y)=>{let S=h*y-Math.PI/2,T=c+d*Math.cos(S),D=f+d*Math.sin(S);n.append("line").attr("x1",c).attr("y1",f).attr("x2",T).attr("y2",D).attr("stroke","var(--mk-ui-border)").attr("stroke-width",.5).attr("opacity",.5);let k=c+(d+20)*Math.cos(S),M=f+(d+20)*Math.sin(S);n.append("text").attr("x",k).attr("y",M).attr("text-anchor","middle").attr("dominant-baseline","middle").attr("font-size","11px").attr("fill","var(--mk-ui-text-secondary)").text(b)});let x=new Map;r.data.forEach(b=>{x.has(b.series)||x.set(b.series,[]),x.get(b.series).push(b)});let g=vr("body").append("div").attr("class","radar-tooltip").style("position","absolute").style("padding","8px 12px").style("background","var(--mk-ui-background-contrast)").style("color","var(--mk-ui-text-primary)").style("border","1px solid var(--mk-ui-border)").style("border-radius","4px").style("font-size","12px").style("box-shadow","0 2px 8px rgba(0, 0, 0, 0.15)").style("pointer-events","none").style("opacity",0).style("z-index",1e4),w=0;x.forEach((b,y)=>{let S=r.axes.map(k=>b.find(E=>E.axis===k)||{axis:k,value:0,series:y}),T=p[w%p.length],D=n.append("g").attr("transform",`translate(${c}, ${f})`);D.append("path").datum(S).attr("d",v).attr("fill",T).attr("fill-opacity",.3).attr("stroke",T).attr("stroke-width",2).style("cursor","pointer").on("mouseover",function(k){vr(this).transition().duration(150).attr("fill-opacity",.5),g.transition().duration(200).style("opacity",.9);let M=`
231 <div><strong>${y}</strong></div>
232 ${S.map(E=>`<div>${E.axis}: ${E.value.toFixed(1)}</div>`).join("")}
233 `;g.html(M).style("left",k.pageX+10+"px").style("top",k.pageY-28+"px")}).on("mousemove",function(k){g.style("left",k.pageX+10+"px").style("top",k.pageY-28+"px")}).on("mouseout",function(){vr(this).transition().duration(150).attr("fill-opacity",.3),g.transition().duration(500).style("opacity",0)}),S.forEach((k,M)=>{let E=r.axes.indexOf(k.axis),O=h*E-Math.PI/2,P=m(k.value)*Math.cos(O),_=m(k.value)*Math.sin(O);D.append("circle").attr("cx",P).attr("cy",_).attr("r",4).attr("fill",T).attr("stroke","white").attr("stroke-width",1).style("cursor","pointer"),s&&D.append("text").attr("x",P).attr("y",_-8).attr("text-anchor","middle").attr("font-size","10px").attr("fill","var(--mk-ui-text-primary)").text(k.value.toFixed(1))}),w++}),i.node().__radarTooltip=g}};var pF=class{static render(t){tn(t)?this.renderSVG(t):Sn(t)&&this.renderCanvas(t)}static renderSVG(t){if(!tn(t))return;let{g:r,svg:n,processedData:i,transformedData:a,scales:o,config:s,graphArea:l,editMode:u,selectedElement:c,onElementSelect:f,showDataLabels:d,showLegend:p,resolveColor:h}=t;if(a?.type==="scatter"&&a.data){this.renderWithTransformedData(t,a.data);return}let m=o.get("x"),v=o.get("y");if(!m||!v)return;let A=Array.isArray(s.encoding.x)?s.encoding.x:s.encoding.x?[s.encoding.x]:[],x=Array.isArray(s.encoding.y)?s.encoding.y:s.encoding.y?[s.encoding.y]:[];if(A.length===0||x.length===0)return;let g=In(t.colorPaletteId,t.superstate),w=o.get("color"),b=o.get("size"),y=s.encoding.color?.field,S=s.encoding.size?.field,T=s.mark?.size||4,D=(_,B)=>{let F=_[B.field];if(B.type==="quantitative")return m(Number(F));if(B.type==="temporal"){let L=F instanceof Date?F:new Date(String(F));return m(L)}else{let L=m,I=L.bandwidth?L.bandwidth():0,R=L(String(F));return R!==void 0?R+I/2:0}},k=(_,B)=>{let F=_[B.field];if(B.type==="quantitative")return v(Number(F));if(B.type==="temporal"){let L=F instanceof Date?F:new Date(String(F));return v(L)}else{let L=v,I=L.bandwidth?L.bandwidth():0,R=L(String(F));return R!==void 0?R+I/2:0}},M=[],E=new Map;y&&w&&Array.from(new Set(i.map(B=>String(B[y])))).forEach(B=>{let F=w(B);E.set(B,F),M.push({label:B,color:F})}),!t.showYAxis&&s.chartType==="scatter"&&r.append("line").attr("class","left-border").attr("x1",l.left).attr("y1",l.top).attr("x2",l.left).attr("y2",l.bottom).style("stroke",h("var(--mk-ui-border)")).style("stroke-width",1).style("opacity",.3);let O=bc("scatter-tooltip"),P=0;if(A.forEach((_,B)=>{x.forEach((F,L)=>{if(!_?.field||!F?.field)return;let I=g[P%g.length],R=i.filter(Q=>Q[_.field]!=null&&Q[F.field]!=null);r.selectAll(`.dot-${B}-${L}`).data(R).enter().append("circle").attr("class",`dot dot-${B}-${L}`).attr("cx",Q=>D(Q,_)).attr("cy",Q=>k(Q,F)).attr("r",Q=>S&&b?b(Q[S]):T).attr("fill",Q=>y&&w?w(Q[y]):I).attr("fill-opacity",s.mark?.fillOpacity||.7).attr("stroke","none").attr("stroke-width",0).style("cursor","pointer").style("pointer-events","all").on("click",function(Q,q){}).on("mouseover",function(Q,q){vr(this).transition().duration(150).attr("r",function(){return Number(vr(this).attr("r"))*1.2}).attr("fill-opacity",1),O.transition().duration(200).style("opacity",.9);let ie="",le=vr(this).attr("fill"),pe=q[_.field],ae,oe=typeof pe=="string"&&/^\d+$/.test(pe);if(_.type==="temporal"||pe instanceof Date||typeof pe=="string"&&!oe&&!isNaN(Date.parse(String(pe)))){let ne=pe instanceof Date?pe:new Date(String(pe));isNaN(ne.getTime())?ae=String(pe):ae=ui("%b %d")(ne)}else{let ne=t.tableProperties?.find(z=>z.name===_.field);ae=ne?cn(ne,pe,t.superstate):String(pe)}ie+=`<div style="font-weight: 600; margin-bottom: 4px;">${ae}</div>`,ie+='<div style="display: flex; align-items: center; gap: 8px;">',ie+=`<div style="width: 12px; height: 12px; background-color: ${le}; border-radius: 2px; flex-shrink: 0;"></div>`;let Se=q[F.field],H=t.tableProperties?.find(ne=>ne.name===F.field),ye=H?cn(H,Se,t.superstate):rn(Number(Se));if(ie+=`<div><strong>${F.field}:</strong> ${ye}</div>`,ie+="</div>",y){let ne=q[y],z=t.tableProperties?.find(V=>V.name===y),U=z?cn(z,ne,t.superstate):String(ne);ie+=`<div style="margin-top: 4px;"><strong>${y}:</strong> ${U}</div>`}if(S){let ne=q[S],z=t.tableProperties?.find(V=>V.name===S),U=z?cn(z,ne,t.superstate):rn(Number(ne));ie+=`<div style="margin-top: 4px;"><strong>${S}:</strong> ${U}</div>`}O.html(ie).style("left",Q.pageX+10+"px").style("top",Q.pageY-28+"px")}).on("mousemove",function(Q){O.style("left",Q.pageX+10+"px").style("top",Q.pageY-28+"px")}).on("mouseout",function(Q,q){vr(this).transition().duration(150).attr("r",()=>S&&b?b(q[S]):T).attr("fill-opacity",s.mark?.fillOpacity||.7),O.transition().duration(500).style("opacity",0)}),P++})}),u&&(r.selectAll(".dot").on("click",function(_,B){if(f){let L=vr(this).attr("class").match(/dot-(\d+)-(\d+)/),I=L?parseInt(L[1]):0,R=L?parseInt(L[2]):0,J=A[I],Q=x[R];f({type:"series",id:`point-${B[J.field]}-${B[Q.field]}`})}}),c?.type==="series"&&r.selectAll(".dot").each(function(_){let F=vr(this).attr("class").match(/dot-(\d+)-(\d+)/),L=F?parseInt(F[1]):0,I=F?parseInt(F[2]):0,R=A[L],J=x[I],Q=`point-${_[R.field]}-${_[J.field]}`;c.id===Q&&vr(this).style("stroke","var(--mk-ui-accent)").style("stroke-width",3).style("stroke-dasharray","4,2")})),(d||s.mark?.dataLabels?.show)&&i.length<100){let _=0;A.forEach((B,F)=>{x.forEach((L,I)=>{!B?.field||!L?.field||(r.selectAll(`.scatter-label-${F}-${I}`).data(i.filter(R=>R[B.field]!=null&&R[L.field]!=null)).enter().append("text").attr("class",`scatter-label scatter-label-${F}-${I}`).attr("x",R=>D(R,B)).attr("y",R=>{let J=k(R,L),Q=S&&b?b(R[S]):T;return J-Q-5}).attr("text-anchor","middle").style("font-size",`${s.mark?.dataLabels?.fontSize||10}px`).style("fill",h(s.mark?.dataLabels?.color||"var(--mk-ui-text-primary)")).style("font-weight","500").text(R=>{let J=R[B.field],Q=R[L.field],q=typeof J=="number"?rn(J):J,ie=typeof Q=="number"?rn(Q):Q;return`(${q}, ${ie})`}),_++)})})}if(p){if(M.length>0)n._legendItems=M;else if(A.length>1||x.length>1){let _=[],B=0;A.forEach((F,L)=>{x.forEach((I,R)=>{if(!F?.field||!I?.field)return;let J=g[B%g.length],Q=A.length>1&&x.length>1?`${F.field} vs ${I.field}`:A.length>1?F.field:I.field;_.push({label:Q,color:J}),B++})}),n._legendItems=_}}n.node().__scatterTooltip=O}static renderCanvas(t){if(!Sn(t))return;let{ctx:r,processedData:n,scales:i,config:a,graphArea:o,resolveColor:s}=t,l=i.get("x"),u=i.get("y");if(!l||!u)return;let c=Array.isArray(a.encoding.x)?a.encoding.x:a.encoding.x?[a.encoding.x]:[],f=Array.isArray(a.encoding.y)?a.encoding.y:a.encoding.y?[a.encoding.y]:[];if(c.length===0||f.length===0)return;let d=In(t.colorPaletteId,t.superstate),p=i.get("color"),h=i.get("size"),m=a.encoding.color?.field,v=a.encoding.size?.field,A=a.mark?.size||4,x=(b,y)=>{let S=b[y.field];if(y.type==="quantitative")return l(Number(S));if(y.type==="temporal"){let T=S instanceof Date?S:new Date(String(S));return l(T)}else{let T=l,D=T.bandwidth?T.bandwidth():0,k=T(String(S));return k!==void 0?k+D/2:0}},g=(b,y)=>{let S=b[y.field];if(y.type==="quantitative")return u(Number(S));if(y.type==="temporal"){let T=S instanceof Date?S:new Date(String(S));return u(T)}else{let T=u,D=T.bandwidth?T.bandwidth():0,k=T(String(S));return k!==void 0?k+D/2:0}};!t.showYAxis&&a.chartType==="scatter"&&(r.save(),r.strokeStyle=s("var(--mk-ui-border)"),r.lineWidth=1,r.globalAlpha=.3,r.beginPath(),r.moveTo(o.left,o.top),r.lineTo(o.left,o.bottom),r.stroke(),r.restore());let w=0;c.forEach((b,y)=>{f.forEach((S,T)=>{if(!b?.field||!S?.field)return;let D=d[w%d.length];n.forEach(k=>{let M=k[b.field],E=k[S.field];if(M==null||E==null)return;let O=x(k,b),P=g(k,S),_=v&&h?h(k[v]):A,B=D;m&&p&&(B=p(k[m]));let F="none";a.mark?.stroke?F=s(a.mark.stroke):m&&p&&(F=p(k[m])),r.save(),r.globalAlpha=a.mark?.fillOpacity||.7,r.fillStyle=B,r.beginPath(),r.arc(O,P,_,0,2*Math.PI),r.fill(),F!=="none"&&(r.globalAlpha=a.mark?.strokeOpacity||1,r.strokeStyle=F,r.lineWidth=a.mark?.strokeWidth||1,r.stroke()),t.debugMode&&(r.save(),r.strokeStyle="red",r.lineWidth=2,r.setLineDash([3,3]),r.strokeRect(O-_-2,P-_-2,(_+2)*2,(_+2)*2),r.restore()),r.restore()}),w++})}),a.mark?.dataLabels?.show&&n.length<100&&(r.save(),r.fillStyle=s(a.mark.dataLabels.color||"var(--mk-ui-text-primary)"),r.font=`500 ${a.mark.dataLabels.fontSize||10}px sans-serif`,r.textAlign="center",r.textBaseline="bottom",c.forEach((b,y)=>{f.forEach((S,T)=>{!b?.field||!S?.field||n.forEach(D=>{let k=D[b.field],M=D[S.field];if(k==null||M==null)return;let E=x(D,b),O=g(D,S),P=v&&h?h(D[v]):A,_=typeof k=="number"?rn(k):k,B=typeof M=="number"?rn(M):M;r.fillText(`(${_}, ${B})`,E,O-P-5)})})}),r.restore())}static renderWithTransformedData(t,r){if(!tn(t))return;let{g:n,svg:i,scales:a,config:o,graphArea:s,editMode:l,selectedElement:u,onElementSelect:c,showDataLabels:f}=t,d=a.get("x"),p=a.get("y"),h=a.get("color"),m=a.get("size");if(!d||!p)return;if(!r.data||r.data.length===0){n.append("text").attr("x",s.left+s.width/2).attr("y",s.top+s.height/2).attr("text-anchor","middle").attr("fill","var(--mk-ui-text-secondary)").style("font-size","14px").text("No data points to display");return}let v=In(t.colorPaletteId,t.superstate),A=o.mark?.size||4,x=bc("scatter-tooltip"),g=r.xCategoricalMap&&r.xCategoricalMap.size>0,w=r.yCategoricalMap&&r.yCategoricalMap.size>0,b=T=>{if(g&&T.metadata){let D=Array.isArray(o.encoding.x)?o.encoding.x[0]?.field:o.encoding.x?.field,k=T.metadata[D||"x"];if(k!==void 0){let M=d(k);return d.bandwidth?M+d.bandwidth()/2:M}}return d(T.x)},y=T=>{if(w&&T.metadata){let D=Array.isArray(o.encoding.y)?o.encoding.y[0]?.field:o.encoding.y?.field,k=T.metadata[D||"y"];if(k!==void 0){let M=p(k);return p.bandwidth?M+p.bandwidth()/2:M}}return p(T.y)};n.selectAll(".scatter-point").data(r.data).enter().append("circle").attr("class","scatter-point").attr("cx",T=>{let D=b(T);return D==null||isNaN(D)?0:D}).attr("cy",T=>{let D=y(T);return D==null||isNaN(D)?0:D}).attr("r",T=>T.size!==void 0&&m?Math.max(2,Math.sqrt(m(T.size)*10)):A).attr("fill",(T,D)=>{if(h&&T.series)return h(T.series);let k=r.series?.indexOf(T.series||"default")||0;return v[k%v.length]}).attr("opacity",o.mark?.opacity||.7).style("cursor","pointer").style("pointer-events","all").on("click",function(T,D){}).on("mouseover",function(T,D){vr(this).transition().duration(150).attr("opacity",1).attr("r",function(){return Number(vr(this).attr("r"))*1.2}),x.transition().duration(200).style("opacity",.9);let k=Array.isArray(o.encoding.x)?o.encoding.x[0]?.field:o.encoding.x?.field,M=Array.isArray(o.encoding.y)?o.encoding.y[0]?.field:o.encoding.y?.field,E=Array.isArray(o.encoding.x)?o.encoding.x[0]:o.encoding.x,O=Array.isArray(o.encoding.y)?o.encoding.y[0]:o.encoding.y,P;if(E?.type==="temporal"||D.x instanceof Date){let F=D.x instanceof Date?D.x:new Date(Number(D.x));isNaN(F.getTime())?P=String(D.x):P=ui("%b %d")(F)}else if(D.metadata&&k&&D.metadata[k]!==void 0){let F=t.tableProperties?.find(L=>L.name===k);P=F&&t.superstate?cn(F,D.metadata[k],t.superstate):rn(Number(D.x))}else P=rn(Number(D.x));let _;if(O?.type==="temporal"||D.y instanceof Date){let F=D.y instanceof Date?D.y:new Date(Number(D.y));isNaN(F.getTime())?_=String(D.y):_=ui("%b %d")(F)}else if(D.metadata&&M&&D.metadata[M]!==void 0){let F=t.tableProperties?.find(L=>L.name===M);_=F&&t.superstate?cn(F,D.metadata[M],t.superstate):rn(Number(D.y))}else _=rn(Number(D.y));let B=`

Callers 2

eoeFunction · 0.85
xmFunction · 0.85

Calls 3

orFunction · 0.85
filterMethod · 0.80
mapMethod · 0.45

Tested by

no test coverage detected