chartgpu 0.1.0 → 0.1.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (59) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +141 -9
  3. package/dist/ChartGPU.d.ts +5 -3
  4. package/dist/ChartGPU.d.ts.map +1 -1
  5. package/dist/assets/ChartGPU-zgkjfPqp.js +15 -0
  6. package/dist/assets/GPUContext-CgqhC6W6.js +1 -0
  7. package/dist/assets/basic-line-DfRo2Pom.js +1 -0
  8. package/dist/assets/chart-sync-Bjf8c5Oo.js +1 -0
  9. package/dist/assets/createChartSync-BUGadH_x.js +1 -0
  10. package/dist/assets/createDataZoomSlider-DLbAKjVh.js +162 -0
  11. package/dist/assets/data-update-animation-BYhFrQqE.js +1 -0
  12. package/dist/assets/grid-test-6lXNOD1c.js +1 -0
  13. package/dist/assets/grouped-bar-pr-ZGxGI.js +1 -0
  14. package/dist/assets/hello-world-B3dB8WNo.js +9 -0
  15. package/dist/assets/interactive-aPGxN-b-.js +14 -0
  16. package/dist/assets/live-streaming-N4vKWEcJ.js +1 -0
  17. package/dist/assets/million-points-DVnJu39j.js +1 -0
  18. package/dist/assets/pie-BR5SmRvW.js +1 -0
  19. package/dist/assets/pie-c06rKDKR.js +321 -0
  20. package/dist/assets/sampling-F-iafT6-.js +1 -0
  21. package/dist/assets/scales-D-5MHN10.js +37 -0
  22. package/dist/assets/scatter-CVFSpSfu.js +1 -0
  23. package/dist/components/formatTooltip.d.ts +7 -0
  24. package/dist/components/formatTooltip.d.ts.map +1 -1
  25. package/dist/config/OptionResolver.d.ts +21 -2
  26. package/dist/config/OptionResolver.d.ts.map +1 -1
  27. package/dist/config/defaults.d.ts +16 -0
  28. package/dist/config/defaults.d.ts.map +1 -1
  29. package/dist/config/types.d.ts +49 -4
  30. package/dist/config/types.d.ts.map +1 -1
  31. package/dist/core/createRenderCoordinator.d.ts +2 -2
  32. package/dist/core/createRenderCoordinator.d.ts.map +1 -1
  33. package/dist/data/ohlcSample.d.ts +21 -0
  34. package/dist/data/ohlcSample.d.ts.map +1 -0
  35. package/dist/examples/basic-line/index.html +90 -0
  36. package/dist/examples/chart-sync/index.html +102 -0
  37. package/dist/examples/data-update-animation/index.html +193 -0
  38. package/dist/examples/grid-test/index.html +90 -0
  39. package/dist/examples/grouped-bar/index.html +91 -0
  40. package/dist/examples/hello-world/index.html +32 -0
  41. package/dist/examples/index.html +142 -0
  42. package/dist/examples/interactive/index.html +101 -0
  43. package/dist/examples/live-streaming/index.html +150 -0
  44. package/dist/examples/million-points/index.html +220 -0
  45. package/dist/examples/pie/index.html +132 -0
  46. package/dist/examples/sampling/index.html +249 -0
  47. package/dist/examples/scatter/index.html +91 -0
  48. package/dist/index.d.ts +3 -3
  49. package/dist/index.d.ts.map +1 -1
  50. package/dist/index.js +4035 -2996
  51. package/dist/index.js.map +1 -1
  52. package/dist/interaction/createInsideZoom.d.ts.map +1 -1
  53. package/dist/interaction/findCandlestick.d.ts +41 -0
  54. package/dist/interaction/findCandlestick.d.ts.map +1 -0
  55. package/dist/renderers/createAxisRenderer.d.ts +1 -1
  56. package/dist/renderers/createAxisRenderer.d.ts.map +1 -1
  57. package/dist/renderers/createCandlestickRenderer.d.ts +19 -0
  58. package/dist/renderers/createCandlestickRenderer.d.ts.map +1 -0
  59. package/package.json +3 -1
@@ -0,0 +1,162 @@
1
+ import{d as Vt,e as he,p as Qt,w as $t,c as Ti,b as cr,a as ke,f as Ci}from"./scales-D-5MHN10.js";import{a as ur,l as fr,s as mr,p as dr}from"./pie-c06rKDKR.js";const on=4;function Dn(t){return t+3&-4}function Ai(t){if(!Number.isFinite(t)||t<=0)return 1;const n=Math.ceil(t);return 2**Math.ceil(Math.log2(n))}function hr(t,n){const e=Math.max(on,Dn(n)),r=Math.max(on,Ai(e));return Math.max(t,r)}function pr(t){return Array.isArray(t)}function pn(t){const n=new ArrayBuffer(t.length*2*4),e=new Float32Array(n);for(let r=0;r<t.length;r++){const i=t[r],s=pr(i)?i[0]:i.x,o=pr(i)?i[1]:i.y;e[r*2+0]=s,e[r*2+1]=o}return{buffer:n,f32:e}}function li(t,n){let e=t>>>0;for(let r=0;r<n.length;r++)e^=n[r],e=Math.imul(e,16777619)>>>0;return e>>>0}function br(t){const n=new Uint32Array(t.buffer,t.byteOffset,t.byteLength/4);return li(2166136261,n)}function Bi(t){const n=new Map;let e=!1;const r=()=>{if(e)throw new Error("DataStore is disposed.")},i=l=>{r();const w=n.get(l);if(!w)throw new Error(`Series ${l} has no data. Call setSeries(${l}, data) first.`);return w};return{setSeries:(l,w)=>{r();const S=pn(w),R=w.length,T=br(S.f32),v=Dn(S.f32.byteLength),h=Math.max(on,v),F=n.get(l);if(F&&F.pointCount===R&&F.hash32===T)return;let m=(F==null?void 0:F.buffer)??null,p=(F==null?void 0:F.capacityBytes)??0;if(!m||h>p){const x=t.limits.maxBufferSize;if(h>x)throw new Error(`DataStore.setSeries(${l}): required buffer size ${h} exceeds device.limits.maxBufferSize (${x}).`);if(m)try{m.destroy()}catch{}const N=hr(p,h);N>x?p=h:p=N,m=t.createBuffer({size:p,usage:GPUBufferUsage.VERTEX|GPUBufferUsage.COPY_DST})}S.f32.byteLength>0&&t.queue.writeBuffer(m,0,S.buffer),n.set(l,{buffer:m,capacityBytes:p,pointCount:R,hash32:T,data:w.length===0?[]:w.slice()})},appendSeries:(l,w)=>{if(r(),!w||w.length===0)return;const S=i(l),R=S.pointCount,T=R+w.length,v=pn(w),h=v.f32.byteLength,F=Dn(T*2*4),d=Math.max(on,F);let m=S.buffer,p=S.capacityBytes;const x=S.data;x.push(...w);const N=t.limits.maxBufferSize;if(d>p){if(d>N)throw new Error(`DataStore.appendSeries(${l}): required buffer size ${d} exceeds device.limits.maxBufferSize (${N}).`);try{m.destroy()}catch{}const I=hr(p,d);p=I>N?d:I,m=t.createBuffer({size:p,usage:GPUBufferUsage.VERTEX|GPUBufferUsage.COPY_DST});const y=pn(x);y.f32.byteLength>0&&t.queue.writeBuffer(m,0,y.buffer),n.set(l,{buffer:m,capacityBytes:p,pointCount:T,hash32:br(y.f32),data:x});return}if(h>0){const I=R*2*4;t.queue.writeBuffer(m,I,v.buffer)}const M=new Uint32Array(v.f32.buffer,v.f32.byteOffset,v.f32.byteLength/4),C=li(S.hash32,M);n.set(l,{buffer:m,capacityBytes:p,pointCount:T,hash32:C,data:x})},removeSeries:l=>{r();const w=n.get(l);if(w){try{w.buffer.destroy()}catch{}n.delete(l)}},getSeriesBuffer:l=>i(l).buffer,getSeriesPointCount:l=>i(l).pointCount,getSeriesData:l=>i(l).data,dispose:()=>{if(!e){e=!0;for(const l of n.values())try{l.buffer.destroy()}catch{}n.clear()}}}}function se(t){return Array.isArray(t)}function Ri(t,n){const e=t.length>>>1,r=e-1;if(n<=0||e===0)return new Int32Array(0);if(n===1)return new Int32Array([0]);if(n===2)return e>=2?new Int32Array([0,r]):new Int32Array([0]);if(e<=n){const b=new Int32Array(e);for(let f=0;f<e;f++)b[f]=f;return b}const i=new Int32Array(n);i[0]=0,i[n-1]=r;const s=(e-2)/(n-2);let o=0,c=1;const u=t[r*2+0],a=t[r*2+1];for(let b=0;b<n-2;b++){let f=Math.floor(s*b)+1,l=Math.min(Math.floor(s*(b+1))+1,r);f>=l&&(f=Math.min(f,r-1),l=Math.min(f+1,r));const w=Math.floor(s*(b+1))+1,S=Math.min(Math.floor(s*(b+2))+1,r);let R=u,T=a;if(w<S){let m=0,p=0,x=0;for(let N=w;N<S;N++)m+=t[N*2+0],p+=t[N*2+1],x++;x>0&&(R=m/x,T=p/x)}const v=t[o*2+0],h=t[o*2+1];let F=-1,d=f;for(let m=f;m<l;m++){const p=t[m*2+0],x=t[m*2+1],N=(v-R)*(x-h)-(v-p)*(T-h),M=N<0?-N:N;M>F&&(F=M,d=m)}i[c++]=d,o=d}return i}function Pi(t,n){const e=t.length,r=e-1;if(n<=0||e===0)return new Int32Array(0);if(n===1)return new Int32Array([0]);if(n===2)return e>=2?new Int32Array([0,r]):new Int32Array([0]);if(e<=n){const f=new Int32Array(e);for(let l=0;l<e;l++)f[l]=l;return f}const i=new Int32Array(n);i[0]=0,i[n-1]=r;const s=(e-2)/(n-2);let o=0,c=1;const u=t[r],a=se(u)?u[0]:u.x,b=se(u)?u[1]:u.y;for(let f=0;f<n-2;f++){let l=Math.floor(s*f)+1,w=Math.min(Math.floor(s*(f+1))+1,r);l>=w&&(l=Math.min(l,r-1),w=Math.min(l+1,r));const S=Math.floor(s*(f+1))+1,R=Math.min(Math.floor(s*(f+2))+1,r);let T=a,v=b;if(S<R){let x=0,N=0,M=0;for(let C=S;C<R;C++){const I=t[C],y=se(I)?I[0]:I.x,A=se(I)?I[1]:I.y;x+=y,N+=A,M++}M>0&&(T=x/M,v=N/M)}const h=t[o],F=se(h)?h[0]:h.x,d=se(h)?h[1]:h.y;let m=-1,p=l;for(let x=l;x<w;x++){const N=t[x],M=se(N)?N[0]:N.x,C=se(N)?N[1]:N.y,I=(F-T)*(C-d)-(F-M)*(v-d),y=I<0?-I:I;y>m&&(m=y,p=x)}i[c++]=p,o=p}return i}function Ei(t,n){const e=Math.floor(n);if(t instanceof Float32Array){const o=t.length>>>1;if(e<=0||o===0)return new Float32Array(0);if(o<=e)return t;const c=Ri(t,e),u=new Float32Array(c.length*2);for(let a=0;a<c.length;a++){const b=c[a];u[a*2+0]=t[b*2+0],u[a*2+1]=t[b*2+1]}return u}const r=t.length;if(e<=0||r===0)return[];if(r<=e)return t;const i=Pi(t,e),s=new Array(i.length);for(let o=0;o<i.length;o++)s[o]=t[i[o]];return s}function ci(t){return Array.isArray(t)}function yr(t){return ci(t)?{x:t[0],y:t[1]}:{x:t.x,y:t.y}}function Di(t){return ci(t)?t[2]:t.size}function ui(t){const n=Math.floor(t);return Number.isFinite(n)?n:0}function bn(t,n,e){const r=t.length,i=ui(n);if(i<=0||r===0)return[];if(i===1)return[t[0]];if(i===2)return r>=2?[t[0],t[r-1]]:[t[0]];if(r<=i)return t;const s=r-1,o=new Array(i);o[0]=t[0],o[i-1]=t[s];const c=(r-2)/(i-2);for(let u=0;u<i-2;u++){let a=Math.floor(c*u)+1,b=Math.min(Math.floor(c*(u+1))+1,s);a>=b&&(a=Math.min(a,s-1),b=Math.min(a+1,s));let f=null;if(e==="average"){let l=0,w=0,S=0,R=0,T=0;for(let v=a;v<b;v++){const h=t[v],{x:F,y:d}=yr(h);if(!Number.isFinite(F)||!Number.isFinite(d))continue;l+=F,w+=d,R++;const m=Di(h);typeof m=="number"&&Number.isFinite(m)&&(S+=m,T++)}if(R>0){const v=l/R,h=w/R;T>0?f=[v,h,S/T]:f=[v,h]}}else{let l=e==="max"?Number.NEGATIVE_INFINITY:Number.POSITIVE_INFINITY;for(let w=a;w<b;w++){const S=t[w],{y:R}=yr(S);Number.isFinite(R)&&(e==="max"?R>l&&(l=R,f=S):R<l&&(l=R,f=S))}}o[u+1]=f??t[a]}return o}function Ie(t,n,e){const r=ui(e);if(n==="none"||!(r>0)||t.length<=r)return t;switch(n){case"lttb":return Ei(t,r);case"average":return bn(t,r,"average");case"max":return bn(t,r,"max");case"min":return bn(t,r,"min");default:return t}}const Li="bgra8unorm",gr=t=>Math.min(1,Math.max(0,t)),_i=t=>Qt(t)??[0,0,0,1],Gi=t=>Array.isArray(t),fi=t=>Gi(t)?{x:t[0],y:t[1]}:{x:t.x,y:t.y},Ui=t=>{let n=Number.POSITIVE_INFINITY,e=Number.NEGATIVE_INFINITY,r=Number.POSITIVE_INFINITY,i=Number.NEGATIVE_INFINITY;for(let s=0;s<t.length;s++){const{x:o,y:c}=fi(t[s]);!Number.isFinite(o)||!Number.isFinite(c)||(o<n&&(n=o),o>e&&(e=o),c<r&&(r=c),c>i&&(i=c))}return!Number.isFinite(n)||!Number.isFinite(e)||!Number.isFinite(r)||!Number.isFinite(i)?{xMin:0,xMax:1,yMin:0,yMax:1}:(n===e&&(e=n+1),r===i&&(i=r+1),{xMin:n,xMax:e,yMin:r,yMax:i})},xr=(t,n,e)=>{const r=t.scale(n),i=t.scale(e);if(!Number.isFinite(n)||!Number.isFinite(e)||n===e||!Number.isFinite(r)||!Number.isFinite(i))return{a:0,b:Number.isFinite(r)?r:0};const s=(i-r)/(e-n),o=r-s*n;return{a:Number.isFinite(s)?s:0,b:Number.isFinite(o)?o:0}},Xi=(t,n,e,r,i)=>{t[0]=n,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=r,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=e,t[13]=i,t[14]=0,t[15]=1},Vi=t=>{const n=t.length,e=new Float32Array(n*2*2);let r=0;for(let i=0;i<n;i++){const{x:s,y:o}=fi(t[i]);e[r++]=s,e[r++]=o,e[r++]=s,e[r++]=o}return e};function $i(t,n){let e=!1;const r=(n==null?void 0:n.targetFormat)??Li,i=t.createBindGroupLayout({entries:[{binding:0,visibility:GPUShaderStage.VERTEX,buffer:{type:"uniform"}},{binding:1,visibility:GPUShaderStage.FRAGMENT,buffer:{type:"uniform"}}]}),s=Vt(t,96,{label:"areaRenderer/vsUniforms"}),o=Vt(t,16,{label:"areaRenderer/fsUniforms"}),c=new ArrayBuffer(96),u=new Float32Array(c),a=new Float32Array(4),b=t.createBindGroup({layout:i,entries:[{binding:0,resource:{buffer:s}},{binding:1,resource:{buffer:o}}]}),f=he(t,{label:"areaRenderer/pipeline",bindGroupLayouts:[i],vertex:{code:ur,label:"area.wgsl",buffers:[{arrayStride:8,stepMode:"vertex",attributes:[{shaderLocation:0,format:"float32x2",offset:0}]}]},fragment:{code:ur,label:"area.wgsl",formats:r,blend:{color:{operation:"add",srcFactor:"src-alpha",dstFactor:"one-minus-src-alpha"},alpha:{operation:"add",srcFactor:"one",dstFactor:"one-minus-src-alpha"}}},primitive:{topology:"triangle-strip",cullMode:"none"},multisample:{count:1}});let l=null,w=0;const S=()=>{if(e)throw new Error("AreaRenderer is disposed.")},R=(F,d,m,p,x)=>{Xi(u,F,d,m,p),u[16]=x,u[17]=0,u[18]=0,u[19]=0,u[20]=0,u[21]=0,u[22]=0,u[23]=0,$t(t,s,c)};return{prepare:(F,d,m,p,x)=>{S();const N=Vi(d),M=N.byteLength,C=Math.max(4,M);if(!l||l.size<C){if(l)try{l.destroy()}catch{}l=t.createBuffer({label:"areaRenderer/vertexBuffer",size:C,usage:GPUBufferUsage.VERTEX|GPUBufferUsage.COPY_DST})}N.byteLength>0&&t.queue.writeBuffer(l,0,N.buffer,0,N.byteLength),w=N.length/2;const{xMin:I,xMax:y,yMin:A,yMax:P}=Ui(d),{a:_,b:L}=xr(m,I,y),{a:D,b:V}=xr(p,A,P),$=Number.isFinite(x??Number.NaN)?x:Number.isFinite(A)?A:0;R(_,L,D,V,$);const[k,Q,it,X]=_i(F.areaStyle.color),nt=gr(F.areaStyle.opacity);a[0]=k,a[1]=Q,a[2]=it,a[3]=gr(X*nt),$t(t,o,a)},render:F=>{S(),!(!l||w<4)&&(F.setPipeline(f),F.setBindGroup(0,b),F.setVertexBuffer(0,l),F.draw(w))},dispose:()=>{if(!e){if(e=!0,l)try{l.destroy()}catch{}l=null,w=0;try{s.destroy()}catch{}try{o.destroy()}catch{}}}}}const ki="bgra8unorm",Fr=t=>Math.min(1,Math.max(0,t)),Yi=t=>Qt(t)??[0,0,0,1],Wi=t=>Array.isArray(t),zi=t=>Wi(t)?{x:t[0],y:t[1]}:{x:t.x,y:t.y},Hi=t=>{let n=Number.POSITIVE_INFINITY,e=Number.NEGATIVE_INFINITY,r=Number.POSITIVE_INFINITY,i=Number.NEGATIVE_INFINITY;for(let s=0;s<t.length;s++){const{x:o,y:c}=zi(t[s]);!Number.isFinite(o)||!Number.isFinite(c)||(o<n&&(n=o),o>e&&(e=o),c<r&&(r=c),c>i&&(i=c))}return!Number.isFinite(n)||!Number.isFinite(e)||!Number.isFinite(r)||!Number.isFinite(i)?{xMin:0,xMax:1,yMin:0,yMax:1}:(n===e&&(e=n+1),r===i&&(i=r+1),{xMin:n,xMax:e,yMin:r,yMax:i})},Nr=(t,n,e)=>{const r=t.scale(n),i=t.scale(e);if(!Number.isFinite(n)||!Number.isFinite(e)||n===e||!Number.isFinite(r)||!Number.isFinite(i))return{a:0,b:Number.isFinite(r)?r:0};const s=(i-r)/(e-n),o=r-s*n;return{a:Number.isFinite(s)?s:0,b:Number.isFinite(o)?o:0}},Oi=(t,n,e,r,i)=>{t[0]=n,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=r,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=e,t[13]=i,t[14]=0,t[15]=1};function qi(t,n){let e=!1;const r=(n==null?void 0:n.targetFormat)??ki,i=t.createBindGroupLayout({entries:[{binding:0,visibility:GPUShaderStage.VERTEX,buffer:{type:"uniform"}},{binding:1,visibility:GPUShaderStage.FRAGMENT,buffer:{type:"uniform"}}]}),s=Vt(t,64,{label:"lineRenderer/vsUniforms"}),o=Vt(t,16,{label:"lineRenderer/fsUniforms"}),c=new ArrayBuffer(64),u=new Float32Array(c),a=new Float32Array(4),b=t.createBindGroup({layout:i,entries:[{binding:0,resource:{buffer:s}},{binding:1,resource:{buffer:o}}]}),f=he(t,{label:"lineRenderer/pipeline",bindGroupLayouts:[i],vertex:{code:fr,label:"line.wgsl",buffers:[{arrayStride:8,stepMode:"vertex",attributes:[{shaderLocation:0,format:"float32x2",offset:0}]}]},fragment:{code:fr,label:"line.wgsl",formats:r,blend:{color:{operation:"add",srcFactor:"src-alpha",dstFactor:"one-minus-src-alpha"},alpha:{operation:"add",srcFactor:"one",dstFactor:"one-minus-src-alpha"}}},primitive:{topology:"line-strip",cullMode:"none"},multisample:{count:1}});let l=null,w=0;const S=()=>{if(e)throw new Error("LineRenderer is disposed.")};return{prepare:(h,F,d,m)=>{S(),l=F,w=h.data.length;const{xMin:p,xMax:x,yMin:N,yMax:M}=Hi(h.data),{a:C,b:I}=Nr(d,p,x),{a:y,b:A}=Nr(m,N,M);Oi(u,C,I,y,A),$t(t,s,c);const[P,_,L,D]=Yi(h.color),V=Fr(h.lineStyle.opacity);a[0]=P,a[1]=_,a[2]=L,a[3]=Fr(D*V),$t(t,o,a)},render:h=>{S(),!(!l||w<2)&&(h.setPipeline(f),h.setBindGroup(0,b),h.setVertexBuffer(0,l),h.draw(w))},dispose:()=>{if(!e){e=!0,l=null,w=0;try{s.destroy()}catch{}try{o.destroy()}catch{}}}}}const wr=`// bar.wgsl
2
+ // Instanced bar/rect shader:
3
+ // - Per-instance vertex input:
4
+ // - rect = vec4<f32>(x, y, width, height) in CLIP space
5
+ // - color = vec4<f32>(r, g, b, a) in [0..1]
6
+ // - Draw call: draw(6, instanceCount) using triangle-list expansion in VS
7
+ // - Uniforms:
8
+ // - @group(0) @binding(0): VSUniforms { transform }
9
+
10
+ struct VSUniforms {
11
+ transform: mat4x4<f32>,
12
+ };
13
+
14
+ @group(0) @binding(0) var<uniform> vsUniforms: VSUniforms;
15
+
16
+ struct VSIn {
17
+ // rect.xy = origin, rect.zw = size (width, height)
18
+ @location(0) rect: vec4<f32>,
19
+ @location(1) color: vec4<f32>,
20
+ };
21
+
22
+ struct VSOut {
23
+ @builtin(position) clipPosition: vec4<f32>,
24
+ @location(0) color: vec4<f32>,
25
+ };
26
+
27
+ @vertex
28
+ fn vsMain(in: VSIn, @builtin(vertex_index) vertexIndex: u32) -> VSOut {
29
+ // Fixed local corners for 2 triangles (triangle-list).
30
+ let corners = array<vec2<f32>, 6>(
31
+ vec2<f32>(0.0, 0.0),
32
+ vec2<f32>(1.0, 0.0),
33
+ vec2<f32>(0.0, 1.0),
34
+ vec2<f32>(0.0, 1.0),
35
+ vec2<f32>(1.0, 0.0),
36
+ vec2<f32>(1.0, 1.0)
37
+ );
38
+
39
+ // Normalize negative width/height by computing min/max extents.
40
+ let p0 = in.rect.xy;
41
+ let p1 = in.rect.xy + in.rect.zw;
42
+ let rectMin = min(p0, p1);
43
+ let rectMax = max(p0, p1);
44
+ let rectSize = rectMax - rectMin;
45
+
46
+ let corner = corners[vertexIndex];
47
+ let pos = rectMin + corner * rectSize;
48
+
49
+ var out: VSOut;
50
+ out.clipPosition = vsUniforms.transform * vec4<f32>(pos, 0.0, 1.0);
51
+ out.color = in.color;
52
+ return out;
53
+ }
54
+
55
+ @fragment
56
+ fn fsMain(in: VSOut) -> @location(0) vec4<f32> {
57
+ return in.color;
58
+ }
59
+
60
+ `,ji="bgra8unorm",Zi=.1,Ki=.2,Qe=32,yn=Qe/4,gn=t=>Math.min(1,Math.max(0,t)),Ji=t=>Qt(t)??[0,0,0,1],Mr=t=>{if(!Number.isFinite(t)||t<=0)return 1;const n=Math.ceil(t);return 2**Math.ceil(Math.log2(n))},Qi=()=>{const t=new ArrayBuffer(64);return new Float32Array(t).set([1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1]),t},ts=t=>{const n=t.trim().match(/^(\d+(?:\.\d+)?)%$/);if(!n)return null;const e=Number(n[1])/100;return Number.isFinite(e)?e:null},Ir=t=>{if(typeof t!="string")return"";const n=t.trim();return n.length>0?n:""},es=t=>Array.isArray(t),xn=t=>es(t)?{x:t[0],y:t[1]}:{x:t.x,y:t.y},ns=t=>{const n=window.devicePixelRatio||1;if(!(n>0))return null;const e=t.canvasWidth/n,r=t.canvasHeight/n,i=e-t.left-t.right,s=r-t.top-t.bottom;return!(i>0)||!(s>0)?null:{plotWidthCss:i,plotHeightCss:s}},rs=t=>{const{left:n,right:e,top:r,bottom:i,canvasWidth:s,canvasHeight:o}=t,c=window.devicePixelRatio||1,u=n*c,a=s-e*c,b=r*c,f=o-i*c,l=u/s*2-1,w=a/s*2-1,S=1-b/o*2,R=1-f/o*2;return{left:l,right:w,top:S,bottom:R}},is=(t,n,e,r)=>{if(Number.isFinite(n)&&n>0){const c=t.scale(0),u=t.scale(0+n),a=Math.abs(u-c);if(Number.isFinite(a)&&a>0)return a}const i=Math.abs(e.right-e.left);if(!(i>0))return 0;const s=Math.max(1,Math.floor(r));return i/s};function ss(t,n){let e=!1;const r=(n==null?void 0:n.targetFormat)??ji,i=t.createBindGroupLayout({entries:[{binding:0,visibility:GPUShaderStage.VERTEX,buffer:{type:"uniform"}}]}),s=Vt(t,64,{label:"barRenderer/vsUniforms"});$t(t,s,Qi());const o=t.createBindGroup({layout:i,entries:[{binding:0,resource:{buffer:s}}]}),c=he(t,{label:"barRenderer/pipeline",bindGroupLayouts:[i],vertex:{code:wr,label:"bar.wgsl",buffers:[{arrayStride:Qe,stepMode:"instance",attributes:[{shaderLocation:0,format:"float32x4",offset:0},{shaderLocation:1,format:"float32x4",offset:16}]}]},fragment:{code:wr,label:"bar.wgsl",formats:r,blend:{color:{operation:"add",srcFactor:"src-alpha",dstFactor:"one-minus-src-alpha"},alpha:{operation:"add",srcFactor:"one",dstFactor:"one-minus-src-alpha"}}},primitive:{topology:"triangle-list",cullMode:"none"},multisample:{count:1}});let u=null,a=0,b=new ArrayBuffer(0),f=new Float32Array(b);const l=[],w=()=>{if(e)throw new Error("BarRenderer is disposed.")},S=p=>{if(p<=f.length)return;const x=Math.max(8,Mr(p));b=new ArrayBuffer(x*4),f=new Float32Array(b)},R=p=>{l.length=0;for(let N=0;N<p.length;N++){const M=p[N].data;for(let C=0;C<M.length;C++){const{x:I}=xn(M[C]);Number.isFinite(I)&&l.push(I)}}if(l.length<2)return 1;l.sort((N,M)=>N-M);let x=Number.POSITIVE_INFINITY;for(let N=1;N<l.length;N++){const M=l[N]-l[N-1];M>0&&M<x&&(x=M)}return Number.isFinite(x)&&x>0?x:1},T=p=>{let x,N,M;for(let C=0;C<p.length;C++){const I=p[C];x===void 0&&I.barWidth!==void 0&&(x=I.barWidth),N===void 0&&I.barGap!==void 0&&(N=I.barGap),M===void 0&&I.barCategoryGap!==void 0&&(M=I.barCategoryGap)}return{barWidth:x,barGap:N,barCategoryGap:M}},v=p=>{let x=Number.POSITIVE_INFINITY,N=Number.NEGATIVE_INFINITY;for(let M=0;M<p.length;M++){const C=p[M].data;for(let I=0;I<C.length;I++){const{y}=xn(C[I]);Number.isFinite(y)&&(y<x&&(x=y),y>N&&(N=y))}}return!Number.isFinite(x)||!Number.isFinite(N)||x<=0&&0<=N?0:Math.abs(x)<Math.abs(N)?x:N},h=(p,x,N)=>{const M=x.invert(N.bottom),C=x.invert(N.top),I=Math.min(M,C),y=Math.max(M,C);return!Number.isFinite(I)||!Number.isFinite(y)?v(p):I<=0&&0<=y?0:I>0?I:y<0?y:v(p)};return{prepare:(p,x,N,M,C)=>{if(w(),p.length===0){a=0;return}const I=ns(C);if(!I){a=0;return}const y=rs(C),A=y.right-y.left,P=I.plotWidthCss>0?A/I.plotWidthCss:0,_=new Map,L=new Array(p.length);let D=0;for(let J=0;J<p.length;J++){const xt=Ir(p[J].stack);if(xt!==""){const St=_.get(xt);if(St!==void 0)L[J]=St;else{const At=D++;_.set(xt,At),L[J]=At}}else L[J]=D++}D=Math.max(1,D);const V=R(p),$=T(p),k=gn($.barGap??Zi),Q=gn($.barCategoryGap??Ki);let it=1;for(let J=0;J<p.length;J++)it=Math.max(it,Math.floor(p[J].data.length));const X=is(N,V,y,it),nt=Math.max(0,X*(1-Q));let pt=0;const vt=$.barWidth;if(typeof vt=="number")pt=Math.max(0,vt)*P;else if(typeof vt=="string"){const J=ts(vt);pt=J==null?0:nt*gn(J)}if(!(pt>0)){const J=D+Math.max(0,D-1)*k;pt=J>0?nt/J:0}pt=Math.min(pt,nt);const Mt=pt*k,mt=D*pt+Math.max(0,D-1)*Mt;let bt=h(p,M,y),Nt=M.scale(bt);if(!Number.isFinite(Nt)){const J=v(p);if(bt=J,Nt=M.scale(J),Number.isFinite(Nt)||(bt=0,Nt=M.scale(0)),!Number.isFinite(Nt)){a=0;return}}let It=0;for(let J=0;J<p.length;J++)It+=Math.max(0,p[J].data.length);S(It*yn);const j=f;let gt=0;const Tt=new Map;for(let J=0;J<p.length;J++){const xt=p[J],St=xt.data,[At,qt,Pt,jt]=Ji(xt.color),te=Ir(xt.stack),oe=L[J]??0;for(let ee=0;ee<St.length;ee++){const{x:ae,y:Gt}=xn(St[ee]),pe=N.scale(ae);if(!Number.isFinite(pe)||!Number.isFinite(Gt))continue;const be=pe-mt/2+oe*(pt+Mt);let Ge=Nt,Se=0;if(te!==""){let K=Tt.get(te);K||(K=new Map,Tt.set(te,K));let wt;Number.isFinite(X)&&X>0&&Number.isFinite(pe)?wt=Math.round((pe-y.left)/X):Number.isFinite(V)&&V>0?wt=Math.round(ae/V):wt=Math.round(ae*1e6);let Bt=K.get(wt);Bt||(Bt={posSum:bt,negSum:bt},K.set(wt,Bt));let Et,kt;Gt>=0?(Et=Bt.posSum,kt=Et+Gt,Bt.posSum=kt):(Et=Bt.negSum,kt=Et+Gt,Bt.negSum=kt);const ve=M.scale(Et),Ue=M.scale(kt);if(!Number.isFinite(ve)||!Number.isFinite(Ue))continue;Ge=ve,Se=Ue-ve}else{const K=M.scale(Gt);if(!Number.isFinite(K))continue;Se=K-Nt}j[gt+0]=be,j[gt+1]=Ge,j[gt+2]=pt,j[gt+3]=Se,j[gt+4]=At,j[gt+5]=qt,j[gt+6]=Pt,j[gt+7]=jt,gt+=yn}}a=gt/yn;const Ct=Math.max(4,a*Qe);if(!u||u.size<Ct){const J=Math.max(Math.max(4,Mr(Ct)),u?u.size:0);if(u)try{u.destroy()}catch{}u=t.createBuffer({label:"barRenderer/instanceBuffer",size:J,usage:GPUBufferUsage.VERTEX|GPUBufferUsage.COPY_DST})}a>0&&t.queue.writeBuffer(u,0,b,0,a*Qe)},render:p=>{w(),!(!u||a===0)&&(p.setPipeline(c),p.setBindGroup(0,o),p.setVertexBuffer(0,u),p.draw(6,a))},dispose:()=>{if(!e){if(e=!0,u)try{u.destroy()}catch{}u=null,a=0;try{s.destroy()}catch{}}}}}const os="bgra8unorm",Fn=4,tn=16,Nn=tn/4,as=t=>Math.min(1,Math.max(0,t)),Ye=(t,n,e)=>Math.min(e,Math.max(n,t|0)),ls=t=>Qt(t)??[0,0,0,1],Sr=t=>{if(!Number.isFinite(t)||t<=0)return 1;const n=Math.ceil(t);return 2**Math.ceil(Math.log2(n))},Un=t=>Array.isArray(t),mi=t=>Un(t)?{x:t[0],y:t[1]}:{x:t.x,y:t.y},cs=t=>{if(Un(t)){const e=t[2];return typeof e=="number"&&Number.isFinite(e)?e:null}const n=t.size;return typeof n=="number"&&Number.isFinite(n)?n:null},us=t=>Un(t)?t:[t.x,t.y,t.size],fs=t=>{let n=Number.POSITIVE_INFINITY,e=Number.NEGATIVE_INFINITY,r=Number.POSITIVE_INFINITY,i=Number.NEGATIVE_INFINITY;for(let s=0;s<t.length;s++){const{x:o,y:c}=mi(t[s]);!Number.isFinite(o)||!Number.isFinite(c)||(o<n&&(n=o),o>e&&(e=o),c<r&&(r=c),c>i&&(i=c))}return!Number.isFinite(n)||!Number.isFinite(e)||!Number.isFinite(r)||!Number.isFinite(i)?{xMin:0,xMax:1,yMin:0,yMax:1}:(n===e&&(e=n+1),r===i&&(i=r+1),{xMin:n,xMax:e,yMin:r,yMax:i})},vr=(t,n,e)=>{const r=t.scale(n),i=t.scale(e);if(!Number.isFinite(n)||!Number.isFinite(e)||n===e||!Number.isFinite(r)||!Number.isFinite(i))return{a:0,b:Number.isFinite(r)?r:0};const s=(i-r)/(e-n),o=r-s*n;return{a:Number.isFinite(s)?s:0,b:Number.isFinite(o)?o:0}},ms=(t,n,e,r,i)=>{t[0]=n,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=r,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=e,t[13]=i,t[14]=0,t[15]=1},ds=t=>{const n=window.devicePixelRatio||1,{canvasWidth:e,canvasHeight:r}=t,i=t.left*n,s=e-t.right*n,o=t.top*n,c=r-t.bottom*n,u=Ye(Math.floor(i),0,Math.max(0,e)),a=Ye(Math.floor(o),0,Math.max(0,r)),b=Ye(Math.ceil(s),0,Math.max(0,e)),f=Ye(Math.ceil(c),0,Math.max(0,r)),l=Math.max(0,b-u),w=Math.max(0,f-a);return{x:u,y:a,w:l,h:w}};function hs(t,n){let e=!1;const r=(n==null?void 0:n.targetFormat)??os,i=t.createBindGroupLayout({entries:[{binding:0,visibility:GPUShaderStage.VERTEX,buffer:{type:"uniform"}},{binding:1,visibility:GPUShaderStage.FRAGMENT,buffer:{type:"uniform"}}]}),s=Vt(t,80,{label:"scatterRenderer/vsUniforms"}),o=Vt(t,16,{label:"scatterRenderer/fsUniforms"}),c=new ArrayBuffer(80),u=new Float32Array(c),a=new Float32Array(4),b=t.createBindGroup({layout:i,entries:[{binding:0,resource:{buffer:s}},{binding:1,resource:{buffer:o}}]}),f=he(t,{label:"scatterRenderer/pipeline",bindGroupLayouts:[i],vertex:{code:mr,label:"scatter.wgsl",buffers:[{arrayStride:tn,stepMode:"instance",attributes:[{shaderLocation:0,format:"float32x2",offset:0},{shaderLocation:1,format:"float32",offset:8}]}]},fragment:{code:mr,label:"scatter.wgsl",formats:r,blend:{color:{operation:"add",srcFactor:"src-alpha",dstFactor:"one-minus-src-alpha"},alpha:{operation:"add",srcFactor:"one",dstFactor:"one-minus-src-alpha"}}},primitive:{topology:"triangle-list",cullMode:"none"},multisample:{count:1}});let l=null,w=0,S=new ArrayBuffer(0),R=new Float32Array(S),T=0,v=0,h=[1,1],F=null;const d=()=>{if(e)throw new Error("ScatterRenderer is disposed.")},m=C=>{if(C<=R.length)return;const I=Math.max(8,Sr(C));S=new ArrayBuffer(I*4),R=new Float32Array(S)},p=(C,I,y,A,P,_)=>{const L=Number.isFinite(P)&&P>0?P:1,D=Number.isFinite(_)&&_>0?_:1;ms(u,C,I,y,A),u[16]=L,u[17]=D,u[18]=0,u[19]=0,$t(t,s,c),h=[L,D]};return{prepare:(C,I,y,A,P)=>{d();const{xMin:_,xMax:L,yMin:D,yMax:V}=fs(I),{a:$,b:k}=vr(y,_,L),{a:Q,b:it}=vr(A,D,V);P?(T=P.canvasWidth,v=P.canvasHeight,p($,k,Q,it,P.canvasWidth,P.canvasHeight),F=ds(P)):(p($,k,Q,it,h[0],h[1]),F=null);const[X,nt,pt,vt]=ls(C.color);a[0]=X,a[1]=nt,a[2]=pt,a[3]=as(vt),$t(t,o,a);const Mt=window.devicePixelRatio||1,mt=Mt>0&&Number.isFinite(Mt),bt=C.symbolSize,Nt=typeof bt=="function"?Tt=>{const Ct=bt(us(Tt));return typeof Ct=="number"&&Number.isFinite(Ct)?Ct:Fn}:typeof bt=="number"&&Number.isFinite(bt)?()=>bt:()=>Fn;m(I.length*Nn);const It=R;let j=0;for(let Tt=0;Tt<I.length;Tt++){const Ct=I[Tt],{x:J,y:xt}=mi(Ct);if(!Number.isFinite(J)||!Number.isFinite(xt))continue;const St=cs(Ct)??Nt(Ct),At=Number.isFinite(St)?Math.max(0,St):Fn,qt=mt?At*Mt:At;qt>0&&(It[j+0]=J,It[j+1]=xt,It[j+2]=qt,It[j+3]=0,j+=Nn)}w=j/Nn;const gt=Math.max(4,w*tn);if(!l||l.size<gt){const Tt=Math.max(Math.max(4,Sr(gt)),l?l.size:0);if(l)try{l.destroy()}catch{}l=t.createBuffer({label:"scatterRenderer/instanceBuffer",size:Tt,usage:GPUBufferUsage.VERTEX|GPUBufferUsage.COPY_DST})}l&&w>0&&t.queue.writeBuffer(l,0,S,0,w*tn)},render:C=>{d(),!(!l||w===0)&&(F&&T>0&&v>0&&C.setScissorRect(F.x,F.y,F.w,F.h),C.setPipeline(f),C.setBindGroup(0,b),C.setVertexBuffer(0,l),C.draw(6,w),F&&T>0&&v>0&&C.setScissorRect(0,0,T,v))},dispose:()=>{if(!e){if(e=!0,l)try{l.destroy()}catch{}l=null,w=0;try{s.destroy()}catch{}try{o.destroy()}catch{}T=0,v=0,h=[1,1],F=null}}}}const ps="bgra8unorm",en=40,wn=en/4,Pe=Math.PI*2,Tr=t=>Math.min(1,Math.max(0,t)),We=(t,n,e)=>Math.min(e,Math.max(n,t|0)),Cr=t=>{if(!Number.isFinite(t)||t<=0)return 1;const n=Math.ceil(t);return 2**Math.ceil(Math.log2(n))},Ar=t=>{if(!Number.isFinite(t))return 0;const n=t%Pe;return n<0?n+Pe:n},bs=(t,n)=>{const e=Qt(t);if(e)return[e[0],e[1],e[2],Tr(e[3])];const r=Qt(n);return r?[r[0],r[1],r[2],Tr(r[3])]:[0,0,0,1]},Ee=(t,n)=>{if(typeof t=="number")return Number.isFinite(t)?t:null;if(typeof t!="string")return null;const e=t.trim();if(e.length===0)return null;if(e.endsWith("%")){const i=Number.parseFloat(e.slice(0,-1));return Number.isFinite(i)?i/100*n:null}const r=Number.parseFloat(e);return Number.isFinite(r)?r:null},ys=(t,n,e)=>{const r=(t==null?void 0:t[0])??"50%",i=(t==null?void 0:t[1])??"50%",s=Ee(r,n),o=Ee(i,e);return{x:Number.isFinite(s)?s:n*.5,y:Number.isFinite(o)?o:e*.5}},gs=t=>Array.isArray(t),xs=(t,n)=>{if(t==null)return{inner:0,outer:n*.7};if(gs(t)){const i=Ee(t[0],n),s=Ee(t[1],n),o=Math.max(0,Number.isFinite(i)?i:0),c=Math.max(o,Number.isFinite(s)?s:n*.7);return{inner:o,outer:Math.min(n,c)}}const e=Ee(t,n),r=Math.max(0,Number.isFinite(e)?e:n*.7);return{inner:0,outer:Math.min(n,r)}},Fs=t=>{const n=window.devicePixelRatio||1,{canvasWidth:e,canvasHeight:r}=t,i=t.left*n,s=e-t.right*n,o=t.top*n,c=r-t.bottom*n,u=We(Math.floor(i),0,Math.max(0,e)),a=We(Math.floor(o),0,Math.max(0,r)),b=We(Math.ceil(s),0,Math.max(0,e)),f=We(Math.ceil(c),0,Math.max(0,r)),l=Math.max(0,b-u),w=Math.max(0,f-a);return{x:u,y:a,w:l,h:w}},Ns=new Float32Array([1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1]);function ws(t,n){let e=!1;const r=(n==null?void 0:n.targetFormat)??ps,i=t.createBindGroupLayout({entries:[{binding:0,visibility:GPUShaderStage.VERTEX,buffer:{type:"uniform"}}]}),s=Vt(t,80,{label:"pieRenderer/vsUniforms"}),o=new ArrayBuffer(80),c=new Float32Array(o),u=t.createBindGroup({layout:i,entries:[{binding:0,resource:{buffer:s}}]}),a=he(t,{label:"pieRenderer/pipeline",bindGroupLayouts:[i],vertex:{code:dr,label:"pie.wgsl",buffers:[{arrayStride:en,stepMode:"instance",attributes:[{shaderLocation:0,format:"float32x2",offset:0},{shaderLocation:1,format:"float32",offset:8},{shaderLocation:2,format:"float32",offset:12},{shaderLocation:3,format:"float32x2",offset:16},{shaderLocation:4,format:"float32x4",offset:24}]}]},fragment:{code:dr,label:"pie.wgsl",formats:r,blend:{color:{operation:"add",srcFactor:"src-alpha",dstFactor:"one-minus-src-alpha"},alpha:{operation:"add",srcFactor:"one",dstFactor:"one-minus-src-alpha"}}},primitive:{topology:"triangle-list",cullMode:"none"},multisample:{count:1}});let b=null,f=0,l=new ArrayBuffer(0),w=new Float32Array(l),S=0,R=0,T=null;const v=()=>{if(e)throw new Error("PieRenderer is disposed.")},h=x=>{if(x<=w.length)return;const N=Math.max(8,Cr(x));l=new ArrayBuffer(N*4),w=new Float32Array(l)},F=(x,N)=>{const M=Number.isFinite(x)&&x>0?x:1,C=Number.isFinite(N)&&N>0?N:1;c.set(Ns,0),c[16]=M,c[17]=C,c[18]=0,c[19]=0,$t(t,s,o)};return{prepare:(x,N)=>{var Ct;v();const M=window.devicePixelRatio||1,C=M>0&&Number.isFinite(M)?M:1;S=N.canvasWidth,R=N.canvasHeight,F(N.canvasWidth,N.canvasHeight),T=Fs(N);const I=N.canvasWidth/C,y=N.canvasHeight/C;if(!(I>0)||!(y>0)){f=0;return}const A=I-N.left-N.right,P=y-N.top-N.bottom;if(!(A>0)||!(P>0)){f=0;return}const _=.5*Math.min(A,P);if(!(_>0)){f=0;return}const L=ys(x.center,A,P),D=N.left+L.x,V=N.top+L.y,$=D/I*2-1,k=1-V/y*2;if(!Number.isFinite($)||!Number.isFinite(k)){f=0;return}const Q=xs(x.radius,_),it=Math.max(0,Math.min(Q.inner,Q.outer)),X=Math.max(it,Q.outer),nt=it*C,pt=X*C;if(!(pt>0)){f=0;return}let vt=0,Mt=0;for(let J=0;J<x.data.length;J++){const xt=(Ct=x.data[J])==null?void 0:Ct.value;typeof xt=="number"&&Number.isFinite(xt)&&xt>0&&(vt+=xt,Mt++)}if(!(vt>0)||Mt===0){f=0;return}h(Mt*wn);const mt=w,bt=typeof x.startAngle=="number"&&Number.isFinite(x.startAngle)?x.startAngle:90;let Nt=Ar(bt*Math.PI/180),It=0,j=0,gt=0;for(let J=0;J<x.data.length;J++){const xt=x.data[J],St=xt==null?void 0:xt.value;if(typeof St!="number"||!Number.isFinite(St)||St<=0)continue;gt++;const At=gt===Mt;let Pt=St/vt*Pe;if(At?Pt=Math.max(0,Pe-It):Pt=Math.max(0,Math.min(Pe,Pt)),It+=Pt,!(Pt>0))continue;const jt=Nt,te=Ar(Nt+Pt);Nt=te;const[oe,ee,ae,Gt]=bs(xt.color,x.color);mt[j+0]=$,mt[j+1]=k,mt[j+2]=jt,mt[j+3]=te,mt[j+4]=nt,mt[j+5]=pt,mt[j+6]=oe,mt[j+7]=ee,mt[j+8]=ae,mt[j+9]=Gt,j+=wn}f=j/wn;const Tt=Math.max(4,f*en);if(!b||b.size<Tt){const J=Math.max(Math.max(4,Cr(Tt)),b?b.size:0);if(b)try{b.destroy()}catch{}b=t.createBuffer({label:"pieRenderer/instanceBuffer",size:J,usage:GPUBufferUsage.VERTEX|GPUBufferUsage.COPY_DST})}b&&f>0&&t.queue.writeBuffer(b,0,l,0,f*en)},render:x=>{v(),!(!b||f===0)&&(T&&S>0&&R>0&&x.setScissorRect(T.x,T.y,T.w,T.h),x.setPipeline(a),x.setBindGroup(0,u),x.setVertexBuffer(0,b),x.draw(6,f),T&&S>0&&R>0&&x.setScissorRect(0,0,S,R))},dispose:()=>{if(!e){if(e=!0,b)try{b.destroy()}catch{}b=null,f=0;try{s.destroy()}catch{}S=0,R=0,T=null}}}}const Br=`// crosshair.wgsl
61
+ // Minimal crosshair line shader:
62
+ // - Vertex input: vec2<f32> position in clip-space coordinates
63
+ // - VS uniform: transform mat4 (identity)
64
+ // - FS uniform: solid RGBA color
65
+
66
+ struct VSUniforms {
67
+ transform: mat4x4<f32>,
68
+ };
69
+
70
+ @group(0) @binding(0) var<uniform> vsUniforms: VSUniforms;
71
+
72
+ struct FSUniforms {
73
+ color: vec4<f32>,
74
+ };
75
+
76
+ @group(0) @binding(1) var<uniform> fsUniforms: FSUniforms;
77
+
78
+ struct VSIn {
79
+ @location(0) position: vec2<f32>,
80
+ };
81
+
82
+ struct VSOut {
83
+ @builtin(position) clipPosition: vec4<f32>,
84
+ };
85
+
86
+ @vertex
87
+ fn vsMain(in: VSIn) -> VSOut {
88
+ var out: VSOut;
89
+ out.clipPosition = vsUniforms.transform * vec4<f32>(in.position, 0.0, 1.0);
90
+ return out;
91
+ }
92
+
93
+ @fragment
94
+ fn fsMain() -> @location(0) vec4<f32> {
95
+ return fsUniforms.color;
96
+ }
97
+
98
+ `,Ms=t=>t+3&-4,Is=1024,Ss=128,vs=16384,Ts=t=>{if(t.byteOffset&3)throw new Error("createStreamBuffer.write: data.byteOffset must be 4-byte aligned.");return new Uint32Array(t.buffer,t.byteOffset,t.byteLength>>>2)};function Cs(t,n){if(!Number.isFinite(n)||n<=0)throw new Error(`createStreamBuffer(maxSize): maxSize (bytes) must be a positive number. Received: ${String(n)}`);const e=Math.max(4,Math.floor(n)),r=Ms(e),i=t.limits.maxBufferSize;if(r>i)throw new Error(`createStreamBuffer(maxSize): requested size ${r} bytes exceeds device.limits.maxBufferSize (${i}).`);const s=r>>>2,o=h=>({buffer:t.createBuffer({label:h,size:r,usage:GPUBufferUsage.VERTEX|GPUBufferUsage.COPY_DST}),mirror:new Uint32Array(s)}),c=[o("streamBuffer/a"),o("streamBuffer/b")];let u=!1,a=0,b=0;const f=()=>{if(u)throw new Error("createStreamBuffer: StreamBuffer is disposed.")},l=(h,F,d)=>{const m=c[h],p=m.mirror;if(d<0||d>F.length)throw new Error("createStreamBuffer.write: internal error (invalid usedWords).");if(d===0)return;const x=d<<2;t.queue.writeBuffer(m.buffer,0,F.buffer,F.byteOffset,x),p.set(F.subarray(0,d),0)},w=(h,F,d)=>{const m=c[h],p=m.mirror;if(d<0||d>F.length)throw new Error("createStreamBuffer.write: internal error (invalid usedWords).");const x=d<<2;if(x>0&&x<=Is){l(h,F,d);return}const N=[];let M=0,C=0,I=0;for(;I<d;){for(;I<d&&p[I]===F[I];)I++;if(I>=d)break;const y=I;for(I++;I<d&&p[I]!==F[I];)I++;const A=I;if(N.push([y,A]),M++,C+=A-y,M>Ss||C>vs){l(h,F,d);return}}for(let y=0;y<N.length;y++){const[A,P]=N[y],_=A<<2,L=P-A<<2;t.queue.writeBuffer(m.buffer,_,F.buffer,F.byteOffset+_,L),p.set(F.subarray(A,P),A)}};return{write:h=>{if(f(),h.length&1)throw new Error("createStreamBuffer.write: data length must be even (vec2<f32> vertices).");const F=h.byteLength;if(F>r)throw new Error(`createStreamBuffer.write: data.byteLength (${F}) exceeds capacity (${r}). Increase maxSize.`);const d=h.length>>>1;if(F===0){b=d;return}const m=Ts(h),p=1-a;w(p,m,m.length),a=p,b=d},getBuffer:()=>(f(),c[a].buffer),getVertexCount:()=>(f(),b),dispose:()=>{if(!u){u=!0,b=0;for(const h of c)try{h.buffer.destroy()}catch{}}}}}const As="bgra8unorm",Bs=[1,1,1,.8],Rs=8,Ps=6,Es=4,di=8192,Ds=()=>{const t=new ArrayBuffer(64);return new Float32Array(t).set([1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1]),t},Ls=t=>Number.isFinite(t.left)&&Number.isFinite(t.right)&&Number.isFinite(t.top)&&Number.isFinite(t.bottom)&&Number.isFinite(t.canvasWidth)&&Number.isFinite(t.canvasHeight),ze=(t,n,e)=>Math.min(e,Math.max(n,t|0)),_s=(t,n)=>{if(!Number.isFinite(t)||t<0)throw new Error("CrosshairRenderer.prepare: lineWidth must be a finite non-negative number.");if(t===0)return[];const e=t*n,r=Math.max(1,Math.min(Rs,Math.round(e))),i=(r-1)/2,s=[];for(let o=0;o<r;o++)s.push(o-i);return s},Fe=(t,n)=>t/n*2-1,Ne=(t,n)=>1-t/n*2,He=(t,n)=>{t.push(n[0],n[1],n[2],n[3])},Rr=(t,n)=>{if(!Number.isFinite(t)||!Number.isFinite(n))return[];const e=Math.min(t,n),r=Math.max(t,n);if(r<=e)return[];const i=Ps,o=i+Es;if(!Number.isFinite(o))return[];const c=Math.ceil((r-e)/o);if(!Number.isFinite(c)||c<=0)return[];const u=[];let a=e;for(;a<r;){const b=a,f=Math.min(a+i,r);f>b&&u.push([b,f]),a+=o}return u},Gs=(t,n,e,r)=>{if(!Number.isFinite(t)||!Number.isFinite(n))throw new Error("CrosshairRenderer.prepare: x and y must be finite numbers.");if(!Ls(e))throw new Error("CrosshairRenderer.prepare: gridArea dimensions must be finite numbers.");if(e.canvasWidth<=0||e.canvasHeight<=0)throw new Error("CrosshairRenderer.prepare: canvas dimensions must be positive.");if(e.left<0||e.right<0||e.top<0||e.bottom<0)throw new Error("CrosshairRenderer.prepare: gridArea margins must be non-negative.");const{canvasWidth:i,canvasHeight:s}=e,o=window.devicePixelRatio||1,c=e.left*o,u=i-e.right*o,a=e.top*o,b=s-e.bottom*o,f=ze(Math.floor(c),0,Math.max(0,i)),l=ze(Math.floor(a),0,Math.max(0,s)),w=ze(Math.ceil(u),0,Math.max(0,i)),S=ze(Math.ceil(b),0,Math.max(0,s)),R=Math.max(0,w-f),T=Math.max(0,S-l),v=t*o,h=n*o,F=_s(r.lineWidth,o);if(F.length===0||!r.showX&&!r.showY)return{vertices:new Float32Array(0),scissor:{x:f,y:l,w:R,h:T}};const d=[],m=r.showX?Rr(a,b):[],p=r.showY?Rr(c,u):[],N=((r.showX?m.length:0)+(r.showY?p.length:0))*F.length*2,M=N>0&&N<=di,C=A=>{const P=Fe(A,i),_=Ne(a,s),L=Ne(b,s);He(d,[P,_,P,L])},I=A=>{const P=Ne(A,s),_=Fe(c,i),L=Fe(u,i);He(d,[_,P,L,P])};if(r.showX)for(let A=0;A<F.length;A++){const P=v+F[A];if(!M){C(P);continue}const _=Fe(P,i);for(let L=0;L<m.length;L++){const[D,V]=m[L],$=Ne(D,s),k=Ne(V,s);He(d,[_,$,_,k])}}if(r.showY)for(let A=0;A<F.length;A++){const P=h+F[A];if(!M){I(P);continue}const _=Ne(P,s);for(let L=0;L<p.length;L++){const[D,V]=p[L],$=Fe(D,i),k=Fe(V,i);He(d,[$,_,k,_])}}return{vertices:new Float32Array(d),scissor:{x:f,y:l,w:R,h:T}}};function Us(t,n){let e=!1,r=!0;const i=(n==null?void 0:n.targetFormat)??As,s=t.createBindGroupLayout({entries:[{binding:0,visibility:GPUShaderStage.VERTEX,buffer:{type:"uniform"}},{binding:1,visibility:GPUShaderStage.FRAGMENT,buffer:{type:"uniform"}}]}),o=Vt(t,64,{label:"crosshairRenderer/vsUniforms"}),c=Vt(t,16,{label:"crosshairRenderer/fsUniforms"}),u=t.createBindGroup({layout:s,entries:[{binding:0,resource:{buffer:o}},{binding:1,resource:{buffer:c}}]}),a=he(t,{label:"crosshairRenderer/pipeline",bindGroupLayouts:[s],vertex:{code:Br,label:"crosshair.wgsl",buffers:[{arrayStride:8,stepMode:"vertex",attributes:[{shaderLocation:0,format:"float32x2",offset:0}]}]},fragment:{code:Br,label:"crosshair.wgsl",formats:i,blend:{color:{operation:"add",srcFactor:"src-alpha",dstFactor:"one-minus-src-alpha"},alpha:{operation:"add",srcFactor:"one",dstFactor:"one-minus-src-alpha"}}},primitive:{topology:"line-list",cullMode:"none"},multisample:{count:1}}),b=Cs(t,di*8);let f=0,l=0,w=0,S={x:0,y:0,w:0,h:0};const R=()=>{if(e)throw new Error("CrosshairRenderer is disposed.")};return{prepare:(d,m,p,x)=>{if(R(),typeof x.showX!="boolean"||typeof x.showY!="boolean")throw new Error("CrosshairRenderer.prepare: showX/showY must be boolean.");if(typeof x.color!="string")throw new Error("CrosshairRenderer.prepare: color must be a string.");if(!Number.isFinite(x.lineWidth)||x.lineWidth<0)throw new Error("CrosshairRenderer.prepare: lineWidth must be a finite non-negative number.");const{vertices:N,scissor:M}=Gs(d,m,p,x);N.byteLength===0?f=0:(b.write(N),f=b.getVertexCount()),$t(t,o,Ds());const C=Qt(x.color)??Bs,I=new ArrayBuffer(4*4);new Float32Array(I).set([C[0],C[1],C[2],C[3]]),$t(t,c,I),l=p.canvasWidth,w=p.canvasHeight,S=M},render:d=>{R(),r&&f!==0&&(l<=0||w<=0||(d.setScissorRect(S.x,S.y,S.w,S.h),d.setPipeline(a),d.setBindGroup(0,u),d.setVertexBuffer(0,b.getBuffer()),d.draw(f),d.setScissorRect(0,0,l,w)))},setVisible:d=>{R(),r=!!d},dispose:()=>{if(!e){e=!0;try{o.destroy()}catch{}try{c.destroy()}catch{}b.dispose(),f=0,l=0,w=0,S={x:0,y:0,w:0,h:0}}}}}const Pr=`// highlight.wgsl
99
+ // Draws an anti-aliased ring highlight around a point.
100
+ //
101
+ // Contract:
102
+ // - \`@builtin(position)\` in the fragment stage is framebuffer-space pixels.
103
+ // - The renderer supplies \`center\` and ring sizes in *device pixels*.
104
+
105
+ struct Uniforms {
106
+ center: vec2<f32>,
107
+ radius: f32,
108
+ thickness: f32,
109
+ color: vec4<f32>,
110
+ outlineColor: vec4<f32>,
111
+ };
112
+
113
+ @group(0) @binding(0) var<uniform> u: Uniforms;
114
+
115
+ struct VSOut {
116
+ @builtin(position) position: vec4<f32>,
117
+ };
118
+
119
+ @vertex
120
+ fn vsMain(@builtin(vertex_index) vertexIndex: u32) -> VSOut {
121
+ // Fullscreen triangle.
122
+ // Covers clip-space [-1,1] with 3 verts: (-1,-1), (3,-1), (-1,3)
123
+ let positions = array<vec2<f32>, 3>(
124
+ vec2<f32>(-1.0, -1.0),
125
+ vec2<f32>(3.0, -1.0),
126
+ vec2<f32>(-1.0, 3.0)
127
+ );
128
+
129
+ var out: VSOut;
130
+ out.position = vec4<f32>(positions[vertexIndex], 0.0, 1.0);
131
+ return out;
132
+ }
133
+
134
+ fn ringCoverage(distancePx: f32, radiusPx: f32, thicknessPx: f32) -> f32 {
135
+ let aa = 1.0; // ~1px antialias band (device pixels)
136
+ let halfT = max(0.5, thicknessPx * 0.5);
137
+ let a0 = smoothstep(radiusPx - halfT - aa, radiusPx - halfT + aa, distancePx);
138
+ let a1 = smoothstep(radiusPx + halfT - aa, radiusPx + halfT + aa, distancePx);
139
+ return clamp(a0 - a1, 0.0, 1.0);
140
+ }
141
+
142
+ @fragment
143
+ fn fsMain(@builtin(position) fragPos: vec4<f32>) -> @location(0) vec4<f32> {
144
+ let d = distance(fragPos.xy, u.center);
145
+
146
+ let ring = ringCoverage(d, u.radius, u.thickness);
147
+ let outline = ringCoverage(d, u.radius, u.thickness + 2.0);
148
+
149
+ let cover = max(ring, outline);
150
+ if (cover <= 0.0) {
151
+ discard;
152
+ }
153
+
154
+ // Blend between outline and ring color based on relative coverage,
155
+ // then apply total coverage as alpha.
156
+ let t = clamp(select(0.0, ring / cover, cover > 0.0), 0.0, 1.0);
157
+ let rgb = mix(u.outlineColor.rgb, u.color.rgb, t);
158
+ let a = mix(u.outlineColor.a, u.color.a, t) * cover;
159
+ return vec4<f32>(rgb, a);
160
+ }
161
+
162
+ `,Xs="bgra8unorm",Vs=[1,1,1,1],Oe=t=>Math.min(1,Math.max(0,t)),qe=(t,n,e)=>Math.min(e,Math.max(n,t|0)),$s=t=>Number.isFinite(t.x)&&Number.isFinite(t.y)&&Number.isFinite(t.w)&&Number.isFinite(t.h),ks=(t,n)=>{const e=Number.isFinite(n)?n:1;return[Oe(t[0]*e),Oe(t[1]*e),Oe(t[2]*e),Oe(t[3])]},Ys=t=>.2126*t[0]+.7152*t[1]+.0722*t[2];function Ws(t,n){let e=!1,r=!0;const i=(n==null?void 0:n.targetFormat)??Xs,s=t.createBindGroupLayout({entries:[{binding:0,visibility:GPUShaderStage.FRAGMENT,buffer:{type:"uniform"}}]}),o=Vt(t,48,{label:"highlightRenderer/uniforms"}),c=t.createBindGroup({layout:s,entries:[{binding:0,resource:{buffer:o}}]}),u=he(t,{label:"highlightRenderer/pipeline",bindGroupLayouts:[s],vertex:{code:Pr,label:"highlight.wgsl"},fragment:{code:Pr,label:"highlight.wgsl",formats:i,blend:{color:{operation:"add",srcFactor:"src-alpha",dstFactor:"one-minus-src-alpha"},alpha:{operation:"add",srcFactor:"one",dstFactor:"one-minus-src-alpha"}}},primitive:{topology:"triangle-list",cullMode:"none"},multisample:{count:1}});let a=0,b=0,f={x:0,y:0,w:0,h:0},l=!1;const w=()=>{if(e)throw new Error("HighlightRenderer is disposed.")};return{prepare:(h,F,d)=>{if(w(),!Number.isFinite(h.centerDeviceX)||!Number.isFinite(h.centerDeviceY))throw new Error("HighlightRenderer.prepare: point center must be finite.");if(!Number.isFinite(h.canvasWidth)||!Number.isFinite(h.canvasHeight)||h.canvasWidth<=0||h.canvasHeight<=0)throw new Error("HighlightRenderer.prepare: canvasWidth/canvasHeight must be positive finite numbers.");if(!$s(h.scissor))throw new Error("HighlightRenderer.prepare: scissor must be finite.");if(!Number.isFinite(d)||d<0)throw new Error("HighlightRenderer.prepare: size must be a finite non-negative number.");const m=window.devicePixelRatio||1,p=d*m,x=Math.max(1,p*1.5),N=Math.max(1,Math.round(Math.max(2,x*.25))),M=Qt(F)??Vs,C=ks(M,1.25),y=Ys(M)>.7?[0,0,0,.9]:[1,1,1,.9],A=new ArrayBuffer(12*4);new Float32Array(A).set([h.centerDeviceX,h.centerDeviceY,x,N,C[0],C[1],C[2],1,y[0],y[1],y[2],y[3]]),$t(t,o,A),a=h.canvasWidth,b=h.canvasHeight;const P=qe(Math.floor(h.scissor.x),0,Math.max(0,h.canvasWidth)),_=qe(Math.floor(h.scissor.y),0,Math.max(0,h.canvasHeight)),L=qe(Math.ceil(h.scissor.x+h.scissor.w),0,Math.max(0,h.canvasWidth)),D=qe(Math.ceil(h.scissor.y+h.scissor.h),0,Math.max(0,h.canvasHeight));f={x:P,y:_,w:Math.max(0,L-P),h:Math.max(0,D-_)},l=!0},render:h=>{w(),r&&l&&(a<=0||b<=0||f.w===0||f.h===0||(h.setScissorRect(f.x,f.y,f.w,f.h),h.setPipeline(u),h.setBindGroup(0,c),h.draw(3),h.setScissorRect(0,0,a,b)))},setVisible:h=>{w(),r=!!h},dispose:()=>{if(!e){e=!0;try{o.destroy()}catch{}a=0,b=0,f={x:0,y:0,w:0,h:0},l=!1}}}}const zs=6,Hs=500;function Os(t,n){let e=!1,r=n;const i={mousemove:new Set,click:new Set,mouseleave:new Set};let s=null,o=null;const c=d=>{const m=t.getBoundingClientRect();if(m.width===0||m.height===0)return null;const p=d.clientX-m.left,x=d.clientY-m.top,N=r.left,M=r.top,C=m.width-r.left-r.right,I=m.height-r.top-r.bottom,y=p-N,A=x-M,P=y>=0&&y<=C&&A>=0&&A<=I;return{x:p,y:x,gridX:y,gridY:A,plotWidthCss:C,plotHeightCss:I,isInGrid:P,originalEvent:d}},u=(d,m)=>{const p=c(m);if(p)for(const x of i[d])x(p)},a=d=>{s&&d.isPrimary&&d.pointerId===s.pointerId&&(s=null)},b=d=>{e||u("mousemove",d)},f=d=>{e||(a(d),u("mouseleave",d))},l=d=>{e||(a(d),u("mouseleave",d))},w=d=>{if(!e){if(o===d.pointerId){o=null;return}a(d),u("mouseleave",d)}},S=d=>{if(e||!d.isPrimary||d.pointerType==="mouse"&&d.button!==0)return;const m=t.getBoundingClientRect();if(!(m.width===0||m.height===0)){s={pointerId:d.pointerId,startClientX:d.clientX,startClientY:d.clientY,startTimeMs:d.timeStamp};try{t.setPointerCapture(d.pointerId)}catch{}}},R=d=>{if(e||!d.isPrimary||!s||d.pointerId!==s.pointerId)return;const m=d.timeStamp-s.startTimeMs,p=d.clientX-s.startClientX,x=d.clientY-s.startClientY,N=p*p+x*x;s=null;try{t.hasPointerCapture(d.pointerId)&&(o=d.pointerId,t.releasePointerCapture(d.pointerId))}catch{}const M=zs;m<=Hs&&N<=M*M&&u("click",d)};return t.addEventListener("pointermove",b,{passive:!0}),t.addEventListener("pointerleave",f,{passive:!0}),t.addEventListener("pointercancel",l,{passive:!0}),t.addEventListener("lostpointercapture",w,{passive:!0}),t.addEventListener("pointerdown",S,{passive:!0}),t.addEventListener("pointerup",R,{passive:!0}),{canvas:t,on:(d,m)=>{e||i[d].add(m)},off:(d,m)=>{i[d].delete(m)},updateGridArea:d=>{r=d},dispose:()=>{e||(e=!0,s=null,o=null,t.removeEventListener("pointermove",b),t.removeEventListener("pointerleave",f),t.removeEventListener("pointercancel",l),t.removeEventListener("lostpointercapture",w),t.removeEventListener("pointerdown",S),t.removeEventListener("pointerup",R),i.mousemove.clear(),i.click.clear(),i.mouseleave.clear())}}}const Er=(t,n,e)=>Math.min(e,Math.max(n,t)),qs=(t,n)=>{const e=t.deltaY;if(!Number.isFinite(e)||e===0)return 0;switch(t.deltaMode){case WheelEvent.DOM_DELTA_PIXEL:return e;case WheelEvent.DOM_DELTA_LINE:return e*16;case WheelEvent.DOM_DELTA_PAGE:return e*(Number.isFinite(n)&&n>0?n:800);default:return e}},js=t=>{const n=Math.abs(t);if(!Number.isFinite(n)||n===0)return 1;const e=Math.min(n,200);return Math.exp(e*.002)},Zs=t=>t.pointerType==="mouse"&&(t.buttons&4)!==0,Ks=t=>t.pointerType==="mouse"&&t.shiftKey&&(t.buttons&1)!==0;function Js(t,n){let e=!1,r=!1,i=null,s=!1,o=0;const c=()=>{s=!1,o=0},u=S=>{if(i=S,!r)return;const R=S.originalEvent;if(!(S.isInGrid&&(Ks(R)||Zs(R)))){c();return}const v=S.plotWidthCss;if(!(v>0)||!Number.isFinite(v)){c();return}if(!s){s=!0,o=S.gridX;return}const h=S.gridX-o;if(o=S.gridX,!Number.isFinite(h)||h===0)return;const{start:F,end:d}=n.getRange(),m=d-F;if(!Number.isFinite(m)||m===0)return;const p=-(h/v)*m;!Number.isFinite(p)||p===0||n.pan(p)},a=S=>{i=null,c()},b=S=>{if(!r||e)return;const R=i;if(!R||!R.isInGrid)return;const T=R.plotWidthCss,v=R.plotHeightCss;if(!(T>0)||!(v>0))return;const h=qs(S,v);if(h===0)return;const F=js(h);if(!(F>1))return;const{start:d,end:m}=n.getRange(),p=m-d;if(!Number.isFinite(p)||p===0)return;const x=Er(R.gridX/T,0,1),N=Er(d+x*p,0,100);S.preventDefault(),h<0?n.zoomIn(N,F):n.zoomOut(N,F)},f=()=>{e||r||(r=!0,t.on("mousemove",u),t.on("mouseleave",a),t.canvas.addEventListener("wheel",b,{passive:!1}))},l=()=>{e||!r||(r=!1,t.off("mousemove",u),t.off("mouseleave",a),t.canvas.removeEventListener("wheel",b),i=null,c())};return{enable:f,disable:l,dispose:()=>{e||(l(),e=!0)}}}const Dr=0,Lr=100,Jt=(t,n,e)=>Math.min(e,Math.max(n,t)),Mn=t=>Jt(t,0,1),_r=t=>Object.is(t,-0)?0:t,Qs=t=>({start:t.start,end:t.end});function to(t,n){let e=0,r=100,i=null;const s=new Set,o=(()=>{const h=Number.isFinite(Dr)?Dr:0;return Jt(h,0,100)})(),c=(()=>{const h=Number.isFinite(Lr)?Lr:100;return Jt(h,0,100)})(),u=Math.min(o,c),a=Math.max(o,c),b=()=>{const h={start:e,end:r};if(i!==null&&i.start===h.start&&i.end===h.end)return;i=Qs(h);const F=Array.from(s);for(const d of F)d({start:e,end:r})},f=(h,F,d)=>{if(!Number.isFinite(h)||!Number.isFinite(F))return;let m=h,p=F;if(m>p){const M=m;m=p,p=M}let x=p-m;if(!Number.isFinite(x)||x<0)return;const N=Jt(x,u,a);if(N!==x){const M=d!=null&&d.anchor&&Number.isFinite(d.anchor.center)?Jt(d.anchor.center,0,100):(m+p)*.5,C=d!=null&&d.anchor&&Number.isFinite(d.anchor.ratio)?Mn(d.anchor.ratio):.5;m=M-C*N,p=m+N,x=N}if(x>100&&(m=0,p=100,x=100),m<0){const M=-m;m+=M,p+=M}if(p>100){const M=p-100;m-=M,p-=M}m=Jt(m,0,100),p=Jt(p,0,100),m=_r(m),p=_r(p),!(m===e&&p===r)&&(e=m,r=p,(d==null?void 0:d.emit)!==!1&&b())};return f(t,n,{emit:!1}),{getRange:()=>({start:e,end:r}),setRange:(h,F)=>{f(h,F)},zoomIn:(h,F)=>{if(!Number.isFinite(h)||!Number.isFinite(F)||F<=1)return;const d=Jt(h,0,100),m=r-e,p=m===0?.5:Mn((d-e)/m),x=m/F,N=d-p*x,M=N+x;f(N,M,{anchor:{center:d,ratio:p}})},zoomOut:(h,F)=>{if(!Number.isFinite(h)||!Number.isFinite(F)||F<=1)return;const d=Jt(h,0,100),m=r-e,p=m===0?.5:Mn((d-e)/m),x=m*F,N=d-p*x,M=N+x;f(N,M,{anchor:{center:d,ratio:p}})},pan:h=>{Number.isFinite(h)&&f(e+h,r+h)},onChange:h=>(s.add(h),()=>{s.delete(h)})}}const Gr=20,eo=.1,no=.2,De=4,Ur=new WeakMap;function ro(t,n,e){return t>=e.left&&t<=e.right&&n>=e.top&&n<=e.bottom}const In=t=>Math.min(1,Math.max(0,t)),io=t=>{const n=t.trim().match(/^(\d+(?:\.\d+)?)%$/);if(!n)return null;const e=Number(n[1])/100;return Number.isFinite(e)?e:null},so=t=>{if(typeof t!="string")return"";const n=t.trim();return n.length>0?n:""},Xn=t=>Array.isArray(t),_e=t=>Xn(t)?{x:t[0],y:t[1]}:{x:t.x,y:t.y},hi=t=>{if(Xn(t)){const e=t[2];return typeof e=="number"&&Number.isFinite(e)?e:null}const n=t.size;return typeof n=="number"&&Number.isFinite(n)?n:null},oo=t=>Xn(t)?t:[t.x,t.y,t.size],ao=(t,n)=>{try{const e=t(n);return typeof e=="number"&&Number.isFinite(e)?e:null}catch{return null}},Be=(t,n)=>{const e=hi(n);if(e!=null)return Math.max(0,e);const r=t.symbolSize;if(typeof r=="number")return Number.isFinite(r)?Math.max(0,r):De;if(typeof r=="function"){const i=ao(r,oo(n));return i==null?De:Math.max(0,i)}return De},lo=t=>{const n=Ur.get(t);if(n!==void 0)return n;const e=t.data,r=t.symbolSize;let i=0;if(typeof r!="function"){const s=typeof r=="number"&&Number.isFinite(r)?Math.max(0,r):De;let o=0,c=!1;for(let u=0;u<e.length;u++){const a=hi(e[u]);if(a==null)c=!0;else{const b=Math.max(0,a);b>o&&(o=b)}}i=c?Math.max(o,s):o}else for(let s=0;s<e.length;s++){const o=Be(t,e[s]);o>i&&(i=o)}return i=Number.isFinite(i)?Math.max(0,i):De,Ur.set(t,i),i};function co(t){const n=new Map,e=new Array(t.length),r=new Array(t.length);let i=0;for(let s=0;s<t.length;s++){const o=so(t[s].stack);if(r[s]=o,o!==""){const c=n.get(o);if(c!==void 0)e[s]=c;else{const u=i++;n.set(o,u),e[s]=u}}else e[s]=i++}return{clusterIndexBySeries:e,clusterCount:Math.max(1,i),stackIdBySeries:r}}function uo(t){const n=[];for(let r=0;r<t.length;r++){const i=t[r].data;for(let s=0;s<i.length;s++){const{x:o}=_e(i[s]);Number.isFinite(o)&&n.push(o)}}if(n.length<2)return 1;n.sort((r,i)=>r-i);let e=Number.POSITIVE_INFINITY;for(let r=1;r<n.length;r++){const i=n[r]-n[r-1];i>0&&i<e&&(e=i)}return Number.isFinite(e)&&e>0?e:1}function fo(t,n,e){if(Number.isFinite(e)&&e>0){const o=n.scale(0),c=n.scale(0+e),u=Math.abs(c-o);if(Number.isFinite(u)&&u>0)return u}const r=[];for(let s=0;s<t.length;s++){const o=t[s].data;for(let c=0;c<o.length;c++){const{x:u}=_e(o[c]);if(!Number.isFinite(u))continue;const a=n.scale(u);Number.isFinite(a)&&r.push(a)}}if(r.length<2)return 0;r.sort((s,o)=>s-o);let i=Number.POSITIVE_INFINITY;for(let s=1;s<r.length;s++){const o=r[s]-r[s-1];o>0&&o<i&&(i=o)}return Number.isFinite(i)&&i>0?i:0}const mo=t=>{let n,e,r;for(let i=0;i<t.length;i++){const s=t[i];n===void 0&&s.barWidth!==void 0&&(n=s.barWidth),e===void 0&&s.barGap!==void 0&&(e=s.barGap),r===void 0&&s.barCategoryGap!==void 0&&(r=s.barCategoryGap)}return{barWidth:n,barGap:e,barCategoryGap:r}};function pi(t,n){const e=co(t),r=e.clusterCount,i=uo(t),s=fo(t,n,i),o=mo(t),c=In(o.barGap??eo),u=In(o.barCategoryGap??no),a=Math.max(0,s*(1-u));let b=0;const f=o.barWidth;if(typeof f=="number")b=Math.max(0,f);else if(typeof f=="string"){const S=io(f);b=S==null?0:a*In(S)}if(!(b>0)){const S=r+Math.max(0,r-1)*c;b=S>0?a/S:0}b=Math.min(b,a);const l=b*c,w=r*b+Math.max(0,r-1)*l;return{categoryStep:i,categoryWidthPx:s,barWidthPx:b,gapPx:l,clusterWidthPx:w,clusterSlots:e}}const Sn=t=>{let n=Number.POSITIVE_INFINITY,e=Number.NEGATIVE_INFINITY;for(let r=0;r<t.length;r++){const i=t[r].data;for(let s=0;s<i.length;s++){const{y:o}=_e(i[s]);Number.isFinite(o)&&(o<n&&(n=o),o>e&&(e=o))}}return!Number.isFinite(n)||!Number.isFinite(e)||n<=0&&0<=e?0:Math.abs(n)<Math.abs(e)?n:e};function ho(t,n){let e=0;for(let r=0;r<t.length;r++){const i=t[r].data;for(let s=0;s<i.length;s++){const{y:o}=_e(i[s]);if(!Number.isFinite(o))continue;const c=n.scale(o);Number.isFinite(c)&&c>e&&(e=c)}}return Math.max(0,e)}function po(t,n,e){const r=n.invert(e),i=n.invert(0),s=Math.min(r,i),o=Math.max(r,i);let c;!Number.isFinite(s)||!Number.isFinite(o)?c=Sn(t):s<=0&&0<=o?c=0:s>0?c=s:o<0?c=o:c=Sn(t);let u=n.scale(c);return Number.isFinite(u)||(c=Sn(t),u=n.scale(c)),Number.isFinite(u)||(c=0,u=n.scale(0)),{baselineDomain:c,baselinePx:u}}function bo(t,n,e,r){return Number.isFinite(n)&&n>0&&Number.isFinite(t)?Math.round(t/n):Number.isFinite(r)&&r>0&&Number.isFinite(e)?Math.round(e/r):Math.round(e*1e6)}const yo=(t,n)=>{let e=0,r=t.length;for(;e<r;){const i=e+r>>>1;t[i][0]<n?e=i+1:r=i}return e},go=(t,n)=>{let e=0,r=t.length;for(;e<r;){const i=e+r>>>1;t[i].x<n?e=i+1:r=i}return e};function Xr(t,n,e,r,i,s=Gr){var R;if(!Number.isFinite(n)||!Number.isFinite(e))return null;const o=Number.isFinite(s)?Math.max(0,s):Gr,c=o*o,u=r.invert(n);if(!Number.isFinite(u))return null;let a=-1,b=-1,f=null,l=Number.POSITIVE_INFINITY;const w=[],S=[];for(let T=0;T<t.length;T++){const v=t[T];(v==null?void 0:v.type)==="bar"&&(w.push(v),S.push(T))}if(w.length>0){const T=pi(w,r);if(T.barWidthPx>0&&T.clusterWidthPx>=0){const v=ho(w,i),{baselineDomain:h,baselinePx:F}=po(w,i,v),{clusterSlots:d,barWidthPx:m,gapPx:p,clusterWidthPx:x,categoryWidthPx:N,categoryStep:M}=T,C=new Map;let I=null;for(let y=0;y<w.length;y++){const A=w[y],P=S[y]??-1;if(P<0)continue;const _=A.data,L=d.clusterIndexBySeries[y]??0,D=d.stackIdBySeries[y]??"";for(let V=0;V<_.length;V++){const{x:$,y:k}=_e(_[V]);if(!Number.isFinite($)||!Number.isFinite(k))continue;const Q=r.scale($);if(!Number.isFinite(Q))continue;const it=Q-x/2+L*(m+p),X=it+m;let nt=h,pt=k;if(D!==""){let Nt=C.get(D);Nt||(Nt=new Map,C.set(D,Nt));const It=bo(Q,N,$,M);let j=Nt.get(It);j||(j={posSum:h,negSum:h},Nt.set(It,j)),k>=0?(nt=j.posSum,pt=nt+k,j.posSum=pt):(nt=j.negSum,pt=nt+k,j.negSum=pt)}else nt=h,pt=k;const vt=D!==""?i.scale(nt):F,Mt=i.scale(pt);if(!Number.isFinite(vt)||!Number.isFinite(Mt))continue;const mt={left:it,right:X,top:Math.min(vt,Mt),bottom:Math.max(vt,Mt)};if(!ro(n,e,mt))continue;(I===null||mt.top<I.top||mt.top===I.top&&P>I.seriesIndex)&&(I={seriesIndex:P,dataIndex:V,top:mt.top})}}if(I){const y=(R=t[I.seriesIndex])==null?void 0:R.data[I.dataIndex];if(y)return{seriesIndex:I.seriesIndex,dataIndex:I.dataIndex,point:y,distance:0}}}}for(let T=0;T<t.length;T++){const v=t[T];if(v.type==="pie")continue;const h=v.data,F=h.length;if(F===0)continue;const d=v.type==="scatter",m=d?v:null,p=m?lo(m):0,x=d?(o+p)*(o+p):c,N=h[0];if(Array.isArray(N)){const C=h,I=yo(C,u);let y=I-1,A=I;for(;y>=0||A<F;){const P=Math.min(l,x);let _=Number.POSITIVE_INFINITY;if(y>=0){const D=C[y][0];if(Number.isFinite(D)){const V=r.scale(D);if(Number.isFinite(V)){const $=V-n;_=$*$}}}let L=Number.POSITIVE_INFINITY;if(A<F){const D=C[A][0];if(Number.isFinite(D)){const V=r.scale(D);if(Number.isFinite(V)){const $=V-n;L=$*$}}}if(_>P&&L>P)break;if(_<=L&&_<=P&&y>=0){const D=C[y][1];if(Number.isFinite(D)){const V=i.scale(D);if(Number.isFinite(V)){const $=V-e,k=_+$*$,Q=h[y],it=m?(()=>{const X=Be(m,Q),nt=o+X;return nt*nt})():c;k<=it&&(k<l||k===l&&(f===null||T<a||T===a&&y<b))&&(l=k,a=T,b=y,f=Q)}}y--}else _<=L&&y--;if(L<=_&&L<=P&&A<F){const D=C[A][1];if(Number.isFinite(D)){const V=i.scale(D);if(Number.isFinite(V)){const $=V-e,k=L+$*$,Q=h[A],it=m?(()=>{const X=Be(m,Q),nt=o+X;return nt*nt})():c;k<=it&&(k<l||k===l&&(f===null||T<a||T===a&&A<b))&&(l=k,a=T,b=A,f=Q)}}A++}else L<_&&A++}}else{const C=h,I=go(C,u);let y=I-1,A=I;for(;y>=0||A<F;){const P=Math.min(l,x);let _=Number.POSITIVE_INFINITY;if(y>=0){const D=C[y].x;if(Number.isFinite(D)){const V=r.scale(D);if(Number.isFinite(V)){const $=V-n;_=$*$}}}let L=Number.POSITIVE_INFINITY;if(A<F){const D=C[A].x;if(Number.isFinite(D)){const V=r.scale(D);if(Number.isFinite(V)){const $=V-n;L=$*$}}}if(_>P&&L>P)break;if(_<=L&&_<=P&&y>=0){const D=C[y].y;if(Number.isFinite(D)){const V=i.scale(D);if(Number.isFinite(V)){const $=V-e,k=_+$*$,Q=h[y],it=m?(()=>{const X=Be(m,Q),nt=o+X;return nt*nt})():c;k<=it&&(k<l||k===l&&(f===null||T<a||T===a&&y<b))&&(l=k,a=T,b=y,f=Q)}}y--}else _<=L&&y--;if(L<=_&&L<=P&&A<F){const D=C[A].y;if(Number.isFinite(D)){const V=i.scale(D);if(Number.isFinite(V)){const $=V-e,k=L+$*$,Q=h[A],it=m?(()=>{const X=Be(m,Q),nt=o+X;return nt*nt})():c;k<=it&&(k<l||k===l&&(f===null||T<a||T===a&&A<b))&&(l=k,a=T,b=A,f=Q)}}A++}else L<_&&A++}}}return f===null||!Number.isFinite(l)?null:{seriesIndex:a,dataIndex:b,point:f,distance:Math.sqrt(l)}}const vn=new WeakMap,Vr=(t,n)=>{if(vn.has(t))return vn.get(t);let e=!1;if(n){const r=t;for(let i=0;i<r.length;i++){const s=r[i][0];if(Number.isNaN(s)){e=!0;break}}}else{const r=t;for(let i=0;i<r.length;i++){const s=r[i].x;if(Number.isNaN(s)){e=!0;break}}}return vn.set(t,e),e},xo=(t,n)=>{const e=[];for(let u=0;u<t.length;u++){const a=t[u];(a==null?void 0:a.type)==="bar"&&e.push({globalSeriesIndex:u,s:a})}if(e.length===0)return null;const r=pi(e.map(u=>u.s),n),i=r.barWidthPx,s=r.gapPx,o=r.clusterWidthPx;if(!Number.isFinite(i)||!(i>0))return null;const c=new Map;for(let u=0;u<e.length;u++){const a=e[u].globalSeriesIndex,b=r.clusterSlots.clusterIndexBySeries[u]??0;c.set(a,b)}return{barWidth:i,gap:s,clusterWidth:o,clusterIndexByGlobalSeriesIndex:c}},$r=(t,n)=>{let e=0,r=t.length;for(;e<r;){const i=e+r>>>1;t[i][0]<n?e=i+1:r=i}return e},kr=(t,n)=>{let e=0,r=t.length;for(;e<r;){const i=e+r>>>1;t[i].x<n?e=i+1:r=i}return e};function Yr(t,n,e,r){if(!Number.isFinite(n))return[];const i=Number.POSITIVE_INFINITY,s=i*i,o=e.invert(n);if(!Number.isFinite(o))return[];const c=[],u=xo(t,e);for(let a=0;a<t.length;a++){const b=t[a];if(b.type==="pie")continue;const f=b.data,l=f.length;if(l===0)continue;const w=f[0],S=Array.isArray(w);if(b.type==="bar"&&u){const F=u.clusterIndexByGlobalSeriesIndex.get(a);if(F!==void 0){const{barWidth:d,gap:m,clusterWidth:p}=u,x=-p/2+F*(d+m),N=0;if(Number.isFinite(d)&&d>0&&Number.isFinite(x)){let M=-1;const C=I=>{if(!Number.isFinite(I))return!1;const y=I+x,A=y+d;return n>=y-N&&n<A+N};if(Vr(f,S))if(S){const I=f;for(let y=0;y<l;y++){const A=I[y][0];if(!Number.isFinite(A))continue;const P=e.scale(A);C(P)&&(M=M<0?y:Math.min(M,y))}}else{const I=f;for(let y=0;y<l;y++){const A=I[y].x;if(!Number.isFinite(A))continue;const P=e.scale(A);C(P)&&(M=M<0?y:Math.min(M,y))}}else{const I=e.invert(n-x);if(Number.isFinite(I)){const y=S?$r(f,I):kr(f,I),A=P=>{if(P<0||P>=l)return null;const _=S?f[P][0]:f[P].x;if(!Number.isFinite(_))return null;const L=e.scale(_);return Number.isFinite(L)?L:null};for(let P=y-1;P>=0;P--){const _=A(P);if(_===null)continue;const L=_+x,D=L+d;if(D+N<=n)break;n>=L-N&&n<D+N&&(M=M<0?P:Math.min(M,P))}for(let P=y;P<l;P++){const _=A(P);if(_===null)continue;const L=_+x;if(L-N>n)break;const D=L+d;n<D+N&&(M=M<0?P:Math.min(M,P))}}}if(M>=0){c.push({seriesIndex:a,dataIndex:M,point:f[M]});continue}}}}let R=-1,T=null,v=s;const h=(F,d)=>{!Number.isFinite(d)||!(d<v||d===v&&(R<0||F<R))||(v=d,R=F,T=f[F])};if(Vr(f,S))if(S){const F=f;for(let d=0;d<l;d++){const m=F[d][0];if(!Number.isFinite(m))continue;const p=e.scale(m);if(!Number.isFinite(p))continue;const x=p-n;h(d,x*x)}}else{const F=f;for(let d=0;d<l;d++){const m=F[d].x;if(!Number.isFinite(m))continue;const p=e.scale(m);if(!Number.isFinite(p))continue;const x=p-n;h(d,x*x)}}else if(S){const F=f,d=$r(F,o);let m=d-1,p=d;const x=N=>{const M=F[N][0];if(!Number.isFinite(M))return null;const C=e.scale(M);if(!Number.isFinite(C))return null;const I=C-n;return I*I};for(;m>=0||p<l;){for(;m>=0&&x(m)===null;)m--;for(;p<l&&x(p)===null;)p++;if(m<0&&p>=l)break;const N=m>=0?x(m)??Number.POSITIVE_INFINITY:Number.POSITIVE_INFINITY,M=p<l?x(p)??Number.POSITIVE_INFINITY:Number.POSITIVE_INFINITY;if(N>v&&M>v)break;N<=M?(m>=0&&N<=v&&h(m,N),m--,p<l&&M<=v&&M===N&&(h(p,M),p++)):(p<l&&M<=v&&h(p,M),p++)}}else{const F=f,d=kr(F,o);let m=d-1,p=d;const x=N=>{const M=F[N].x;if(!Number.isFinite(M))return null;const C=e.scale(M);if(!Number.isFinite(C))return null;const I=C-n;return I*I};for(;m>=0||p<l;){for(;m>=0&&x(m)===null;)m--;for(;p<l&&x(p)===null;)p++;if(m<0&&p>=l)break;const N=m>=0?x(m)??Number.POSITIVE_INFINITY:Number.POSITIVE_INFINITY,M=p<l?x(p)??Number.POSITIVE_INFINITY:Number.POSITIVE_INFINITY;if(N>v&&M>v)break;N<=M?(m>=0&&N<=v&&h(m,N),m--,p<l&&M<=v&&M===N&&(h(p,M),p++)):(p<l&&M<=v&&h(p,M),p++)}}T!==null&&c.push({seriesIndex:a,dataIndex:R,point:T})}return c}const me=Math.PI*2,Tn=t=>{if(!Number.isFinite(t))return 0;const n=t%me;return n<0?n+me:n};function Wr(t,n,e,r,i){var F;if(!Number.isFinite(t)||!Number.isFinite(n)||!Number.isFinite(r.x)||!Number.isFinite(r.y))return null;const s=Number.isFinite(i.inner)?Math.max(0,i.inner):0,o=Number.isFinite(i.outer)?Math.max(0,i.outer):0;if(!(o>0))return null;const c=t-r.x,u=r.y-n,a=Math.hypot(c,u);if(!Number.isFinite(a)||a<=s||a>o)return null;const b=Tn(Math.atan2(u,c)),f=e.series,l=f.data;let w=0,S=0;for(let d=0;d<l.length;d++){const m=(F=l[d])==null?void 0:F.value;typeof m=="number"&&Number.isFinite(m)&&m>0&&(w+=m,S++)}if(!(w>0)||S===0)return null;const R=typeof f.startAngle=="number"&&Number.isFinite(f.startAngle)?f.startAngle:90;let T=Tn(R*Math.PI/180),v=0,h=0;for(let d=0;d<l.length;d++){const m=l[d],p=m==null?void 0:m.value;if(typeof p!="number"||!Number.isFinite(p)||p<=0)continue;h++;const x=h===S;let M=p/w*me;if(x?M=Math.max(0,me-v):M=Math.max(0,Math.min(me,M)),v+=M,!(M>0))continue;const C=T,I=Tn(T+M);T=I;let y=I-C;y<0&&(y+=me);let A=b-C;if(A<0&&(A+=me),A<=y)return{seriesIndex:e.seriesIndex,dataIndex:d,slice:m}}return null}const Fo=t=>{switch(t){case"start":return{translateX:"0%",originX:"0%"};case"middle":return{translateX:"-50%",originX:"50%"};case"end":return{translateX:"-100%",originX:"100%"}}};function No(t){const e=getComputedStyle(t).position==="static",r=e?t.style.position:null;e&&(t.style.position="relative");const i=document.createElement("div");i.style.position="absolute",i.style.inset="0",i.style.pointerEvents="none",i.style.overflow="hidden",t.appendChild(i);let s=!1;return{clear:()=>{s||i.replaceChildren()},addLabel:(a,b,f,l)=>{if(s)return document.createElement("span");const w=document.createElement("span");w.textContent=a,w.style.position="absolute",w.style.left=`${b}px`,w.style.top=`${f}px`,w.style.pointerEvents="none",w.style.userSelect="none",w.style.whiteSpace="nowrap",w.style.lineHeight="1",(l==null?void 0:l.fontSize)!=null&&(w.style.fontSize=`${l.fontSize}px`),(l==null?void 0:l.color)!=null&&(w.style.color=l.color);const S=(l==null?void 0:l.rotation)??0,R=(l==null?void 0:l.anchor)??"start",{translateX:T,originX:v}=Fo(R);return w.style.transformOrigin=`${v} 50%`,w.style.transform=`translateX(${T}) translateY(-50%) rotate(${S}deg)`,i.appendChild(w),w},dispose:()=>{if(!s){s=!0;try{i.remove()}finally{r!==null&&(t.style.position=r)}}}}}const wo=(t,n)=>{var r;const e=(r=t.name)==null?void 0:r.trim();return e||`Series ${n+1}`},Mo=(t,n,e)=>{var s;const r=(s=t.color)==null?void 0:s.trim();if(r)return r;const i=e.colorPalette;return i.length>0?i[n%i.length]??"#000000":"#000000"},Io=(t,n)=>{const e=t==null?void 0:t.trim();return e||`Slice ${n+1}`},So=(t,n,e,r)=>{const i=t==null?void 0:t.trim();if(i)return i;const s=r.colorPalette,o=s.length;return o>0?s[(n+e)%o]??"#000000":"#000000"};function vo(t,n="right"){const r=getComputedStyle(t).position==="static",i=r?t.style.position:null;r&&(t.style.position="relative");const s=document.createElement("div");s.style.position="absolute",s.style.pointerEvents="none",s.style.userSelect="none",s.style.boxSizing="border-box",s.style.padding="8px",s.style.borderRadius="8px",s.style.borderStyle="solid",s.style.borderWidth="1px",s.style.maxHeight="calc(100% - 16px)",s.style.overflow="auto";const o=document.createElement("div");o.style.display="flex",o.style.gap="8px",s.appendChild(o),(f=>{switch(s.style.top="",s.style.right="",s.style.bottom="",s.style.left="",s.style.maxWidth="",o.style.flexDirection="",o.style.flexWrap="",o.style.alignItems="",f){case"right":{s.style.top="8px",s.style.right="8px",s.style.maxWidth="40%",o.style.flexDirection="column",o.style.flexWrap="nowrap",o.style.alignItems="flex-start";return}case"left":{s.style.top="8px",s.style.left="8px",s.style.maxWidth="40%",o.style.flexDirection="column",o.style.flexWrap="nowrap",o.style.alignItems="flex-start";return}case"top":{s.style.top="8px",s.style.left="8px",s.style.right="8px",o.style.flexDirection="row",o.style.flexWrap="wrap",o.style.alignItems="center";return}case"bottom":{s.style.bottom="8px",s.style.left="8px",s.style.right="8px",o.style.flexDirection="row",o.style.flexWrap="wrap",o.style.alignItems="center";return}}})(n),t.appendChild(s);let u=!1;return{update:(f,l)=>{if(u)return;s.style.color=l.textColor,s.style.background=l.backgroundColor,s.style.borderColor=l.axisLineColor,s.style.fontFamily=l.fontFamily,s.style.fontSize=`${l.fontSize}px`;const w=[];for(let S=0;S<f.length;S++){const R=f[S];if(R.type==="pie")for(let T=0;T<R.data.length;T++){const v=R.data[T],h=document.createElement("div");h.style.display="flex",h.style.alignItems="center",h.style.gap="6px",h.style.lineHeight="1.1",h.style.whiteSpace="nowrap";const F=document.createElement("div");F.style.width="10px",F.style.height="10px",F.style.borderRadius="2px",F.style.flex="0 0 auto",F.style.background=So(v==null?void 0:v.color,S,T,l),F.style.border=`1px solid ${l.axisLineColor}`;const d=document.createElement("span");d.textContent=Io(v==null?void 0:v.name,T),h.appendChild(F),h.appendChild(d),w.push(h)}else{const T=document.createElement("div");T.style.display="flex",T.style.alignItems="center",T.style.gap="6px",T.style.lineHeight="1.1",T.style.whiteSpace="nowrap";const v=document.createElement("div");v.style.width="10px",v.style.height="10px",v.style.borderRadius="2px",v.style.flex="0 0 auto",v.style.background=Mo(R,S,l),v.style.border=`1px solid ${l.axisLineColor}`;const h=document.createElement("span");h.textContent=wo(R,S),T.appendChild(v),T.appendChild(h),w.push(T)}}o.replaceChildren(...w)},dispose:()=>{if(!u){u=!0;try{s.remove()}finally{i!==null&&(t.style.position=i)}}}}}const zr=(t,n,e)=>e<n||t<n?n:t>e?e:t;function Hr(t){const e=getComputedStyle(t).position==="static",r=e?t.style.position:null;e&&(t.style.position="relative");const i=document.createElement("div");i.style.position="absolute",i.style.left="0",i.style.top="0",i.style.pointerEvents="none",i.style.userSelect="none",i.style.boxSizing="border-box",i.style.zIndex="var(--chartgpu-tooltip-z, 10)",i.style.padding="var(--chartgpu-tooltip-padding, 6px 8px)",i.style.borderRadius="var(--chartgpu-tooltip-radius, 8px)",i.style.borderStyle="solid",i.style.borderWidth="var(--chartgpu-tooltip-border-width, 1px)",i.style.borderColor="var(--chartgpu-tooltip-border, rgba(224,224,224,0.35))",i.style.boxShadow="var(--chartgpu-tooltip-shadow, 0 6px 18px rgba(0,0,0,0.35))",i.style.maxWidth="var(--chartgpu-tooltip-max-width, min(320px, 100%))",i.style.overflow="hidden",i.style.fontFamily='var(--chartgpu-tooltip-font-family, system-ui, -apple-system, "Segoe UI", Roboto, Helvetica, Arial, "Apple Color Emoji", "Segoe UI Emoji")',i.style.fontSize="var(--chartgpu-tooltip-font-size, 12px)",i.style.lineHeight="var(--chartgpu-tooltip-line-height, 1.2)",i.style.color="var(--chartgpu-tooltip-color, #e0e0e0)",i.style.background="var(--chartgpu-tooltip-bg, rgba(26,26,46,0.95))",i.style.whiteSpace="normal",i.style.opacity="0",i.style.transitionProperty="opacity";const s=140;i.style.transitionDuration=`${s}ms`,i.style.transitionTimingFunction="ease",i.style.willChange="opacity",i.style.display="none",i.style.visibility="hidden",i.setAttribute("role","tooltip"),t.appendChild(i);let o=!1,c=0,u=null,a=null;const b=()=>{u!=null&&(window.clearTimeout(u),u=null),a!=null&&(window.cancelAnimationFrame(a),a=null)},f=()=>i.style.display==="none"||i.style.visibility==="hidden",l=()=>{const T=i.style.visibility;i.style.visibility="hidden";const v=i.offsetWidth,h=i.offsetHeight;return i.style.visibility=T,{width:v,height:h}};return{show:(T,v,h)=>{if(o)return;c+=1,b();const F=f();i.innerHTML=h;const d=12,m=12,p=8;i.style.display="block",i.style.visibility="hidden";const{width:x,height:N}=l(),M=t.clientWidth,C=t.clientHeight;let I=T+d,y=v+m;if(I+x>M-p&&(I=T-d-x),y+N>C-p&&(y=v-m-N),I=zr(I,p,M-p-x),y=zr(y,p,C-p-N),i.style.left=`${I}px`,i.style.top=`${y}px`,i.style.visibility="visible",F){i.style.opacity="0";const A=c;a=window.requestAnimationFrame(()=>{a=null,!o&&A===c&&(i.style.opacity="1")})}else i.style.opacity="1"},hide:()=>{if(o)return;if(c+=1,b(),i.style.display==="none"||i.style.visibility==="hidden"){i.style.opacity="0",i.style.visibility="hidden",i.style.display="none";return}i.style.opacity="0";const T=c;u=window.setTimeout(()=>{u=null,!o&&T===c&&(i.style.visibility="hidden",i.style.display="none")},s+50)},dispose:()=>{if(!o){o=!0;try{b(),i.remove()}finally{r!==null&&(t.style.position=r)}}}}}const To="—";function nn(t){return t.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;").replace(/'/g,"&#39;")}function Ln(t){if(!Number.isFinite(t))return To;const r=(Object.is(t,-0)?0:t).toFixed(2).replace(/\.?0+$/,"");return r==="-0"?"0":r}function Co(t){const n=t.seriesName.trim();return n.length>0?n:`Series ${t.seriesIndex+1}`}function Ao(t){const n=t.trim();return n.length===0?"#888":/^#[0-9a-fA-F]{3}$/.test(n)||/^#[0-9a-fA-F]{6}$/.test(n)||/^#[0-9a-fA-F]{8}$/.test(n)||/^rgba?\(\s*\d{1,3}\s*(?:,\s*|\s+)\d{1,3}\s*(?:,\s*|\s+)\d{1,3}(?:\s*(?:,\s*|\/\s*)(?:0|1|0?\.\d+))?\s*\)$/.test(n)||/^[a-zA-Z]+$/.test(n)?n:"#888"}function bi(t,n){const e=nn(Co(t)),r=nn(n);return['<div style="display:flex;align-items:center;justify-content:space-between;gap:12px;">','<span style="display:flex;align-items:center;gap:8px;min-width:0;">',`<span style="width:8px;height:8px;border-radius:999px;flex:0 0 auto;background-color:${nn(Ao(t.color))};"></span>`,`<span style="overflow:hidden;text-overflow:ellipsis;white-space:nowrap;">${e}</span>`,"</span>",`<span style="font-variant-numeric:tabular-nums;white-space:nowrap;">${r}</span>`,"</div>"].join("")}function je(t){return bi(t,Ln(t.value[1]))}function Or(t){if(t.length===0)return"";const n=`x: ${Ln(t[0].value[0])}`,e=`<div style="margin:0 0 6px 0;font-weight:600;font-variant-numeric:tabular-nums;white-space:nowrap;">${nn(n)}</div>`,r=t.map(i=>bi(i,Ln(i.value[1]))).join('<div style="height:4px;"></div>');return`${e}${r}`}const Bo=t=>Number.isFinite(t)?t:0,Ro=t=>Number.isFinite(t)?t:null;function qr(){const t=new Map;function n(s,o,c,u,a,b){const f=Symbol("Animation");if(Array.isArray(s)||Array.isArray(o)){if(!Array.isArray(s)||!Array.isArray(o))throw new Error('Array animation requires both "from" and "to" to be arrays');if(s.length!==o.length)throw new Error(`Array animation length mismatch: from.length=${s.length}, to.length=${o.length}`);const l=new Array(s.length);return t.set(f,{kind:"array",from:s,to:o,duration:c,easing:u,onUpdate:a,onComplete:b,startTime:null,out:l}),f}return t.set(f,{kind:"scalar",from:s,to:o,duration:c,easing:u,onUpdate:a,onComplete:b,startTime:null}),f}function e(s){t.delete(s)}function r(){t.clear()}function i(s){var u;const o=Ro(s);if(o===null)return;const c=Array.from(t.keys());for(const a of c){const b=t.get(a);if(!b)continue;const f=b.startTime??o;b.startTime===null&&t.set(a,{...b,startTime:f});const l=Bo(b.duration),w=Math.max(0,o-f),S=l<=0||w>=l,R=l<=0?1:w/l,T=S?1:b.easing(R);if(b.kind==="scalar"){const v=b.from+(b.to-b.from)*T;if(b.onUpdate(v),!t.has(a))continue}else{const v=b.out.length;for(let h=0;h<v;h++){const F=b.from[h]??0,d=b.to[h]??0;b.out[h]=F+(d-F)*T}if(b.onUpdate(b.out),!t.has(a))continue}S&&((u=b.onComplete)==null||u.call(b),t.delete(a))}}return{animate:n,cancel:e,cancelAll:r,update:i}}const ln=t=>Number.isNaN(t)||t<=0?0:t>=1?1:t;function jr(t){return ln(t)}function Po(t){const e=1-ln(t);return 1-e*e*e}function Eo(t){const n=ln(t);if(n<.5)return 4*n*n*n;const e=-2*n+2;return 1-e*e*e/2}function Do(t){const n=ln(t),e=7.5625,r=2.75;if(n<1/r)return e*n*n;if(n<2/r){const s=n-1.5/r;return e*s*s+.75}if(n<2.5/r){const s=n-2.25/r;return e*s*s+.9375}const i=n-2.625/r;return e*i*i+.984375}function Lo(t){switch(t){case"linear":return jr;case"cubicOut":return Po;case"cubicInOut":return Eo;case"bounceOut":return Do;default:return jr}}const _o="bgra8unorm",Zr=5,Kr=6,Ze=4,Go=1,Uo=4,Xo=2e4,Cn=t=>{throw new Error(`RenderCoordinator: unreachable value: ${String(t)}`)},rn=t=>Array.isArray(t),Ot=t=>rn(t)?{x:t[0],y:t[1]}:{x:t.x,y:t.y},_n=t=>{let n=Number.POSITIVE_INFINITY,e=Number.NEGATIVE_INFINITY,r=Number.POSITIVE_INFINITY,i=Number.NEGATIVE_INFINITY;for(let s=0;s<t.length;s++){const{x:o,y:c}=Ot(t[s]);!Number.isFinite(o)||!Number.isFinite(c)||(o<n&&(n=o),o>e&&(e=o),c<r&&(r=c),c>i&&(i=c))}return!Number.isFinite(n)||!Number.isFinite(e)||!Number.isFinite(r)||!Number.isFinite(i)?null:(n===e&&(e=n+1),r===i&&(i=r+1),{xMin:n,xMax:e,yMin:r,yMax:i})},Vo=(t,n)=>{if(n.length===0)return t;let e=t;if(!e){const c=_n(n);if(!c)return t;e=c}let r=e.xMin,i=e.xMax,s=e.yMin,o=e.yMax;for(let c=0;c<n.length;c++){const{x:u,y:a}=Ot(n[c]);!Number.isFinite(u)||!Number.isFinite(a)||(u<r&&(r=u),u>i&&(i=u),a<s&&(s=a),a>o&&(o=a))}return r===i&&(i=r+1),s===o&&(o=s+1),{xMin:r,xMax:i,yMin:s,yMax:o}},yi=(t,n)=>{let e=Number.POSITIVE_INFINITY,r=Number.NEGATIVE_INFINITY,i=Number.POSITIVE_INFINITY,s=Number.NEGATIVE_INFINITY;for(let o=0;o<t.length;o++){const c=t[o];if(c.type==="pie")continue;const u=(n==null?void 0:n[o])??null;if(u){const f=u;if(Number.isFinite(f.xMin)&&Number.isFinite(f.xMax)&&Number.isFinite(f.yMin)&&Number.isFinite(f.yMax)){f.xMin<e&&(e=f.xMin),f.xMax>r&&(r=f.xMax),f.yMin<i&&(i=f.yMin),f.yMax>s&&(s=f.yMax);continue}}const a=c.rawBounds;if(a){const f=a;if(Number.isFinite(f.xMin)&&Number.isFinite(f.xMax)&&Number.isFinite(f.yMin)&&Number.isFinite(f.yMax)){f.xMin<e&&(e=f.xMin),f.xMax>r&&(r=f.xMax),f.yMin<i&&(i=f.yMin),f.yMax>s&&(s=f.yMax);continue}}const b=c.data;for(let f=0;f<b.length;f++){const{x:l,y:w}=Ot(b[f]);!Number.isFinite(l)||!Number.isFinite(w)||(l<e&&(e=l),l>r&&(r=l),w<i&&(i=w),w>s&&(s=w))}}return!Number.isFinite(e)||!Number.isFinite(r)||!Number.isFinite(i)||!Number.isFinite(s)?{xMin:0,xMax:1,yMin:0,yMax:1}:(e===r&&(r=e+1),i===s&&(s=i+1),{xMin:e,xMax:r,yMin:i,yMax:s})},cn=(t,n)=>{let e=t,r=n;if((!Number.isFinite(e)||!Number.isFinite(r))&&(e=0,r=1),e===r)r=e+1;else if(e>r){const i=e;e=r,r=i}return{min:e,max:r}},Jr=(t,n)=>{const e=t.canvas;if(!e)throw new Error("RenderCoordinator: gpuContext.canvas is required.");return{left:n.grid.left,right:n.grid.right,top:n.grid.top,bottom:n.grid.bottom,canvasWidth:e.width,canvasHeight:e.height}},$o=t=>{const n=Math.max(0,Math.min(255,Math.round(t[0]*255))),e=Math.max(0,Math.min(255,Math.round(t[1]*255))),r=Math.max(0,Math.min(255,Math.round(t[2]*255))),i=Math.max(0,Math.min(1,t[3]));return`rgba(${n},${e},${r},${i})`},Qr=(t,n)=>{const e=Qt(t);if(!e)return t;const r=Math.max(0,Math.min(1,e[3]*n));return $o([e[0],e[1],e[2],r])},ko=t=>{const{left:n,right:e,top:r,bottom:i,canvasWidth:s,canvasHeight:o}=t,c=window.devicePixelRatio||1,u=n*c,a=s-e*c,b=r*c,f=o-i*c,l=u/s*2-1,w=a/s*2-1,S=1-b/o*2,R=1-f/o*2;return{left:l,right:w,top:S,bottom:R}},Ht=t=>Math.min(1,Math.max(0,t)),de=(t,n,e)=>Math.min(e,Math.max(n,t|0)),an=(t,n,e)=>t+(n-t)*Ht(e),Ke=(t,n,e)=>cn(an(t.min,n.min,e),an(t.max,n.max,e)),ti=t=>{const n=window.devicePixelRatio||1,{canvasWidth:e,canvasHeight:r}=t,i=t.left*n,s=e-t.right*n,o=t.top*n,c=r-t.bottom*n,u=de(Math.floor(i),0,Math.max(0,e)),a=de(Math.floor(o),0,Math.max(0,r)),b=de(Math.ceil(s),0,Math.max(0,e)),f=de(Math.ceil(c),0,Math.max(0,r)),l=Math.max(0,b-u),w=Math.max(0,f-a);return{x:u,y:a,w:l,h:w}},An=(t,n)=>(t+1)/2*n,Bn=(t,n)=>(1-t)/2*n,Yo=t=>Array.isArray(t),Wo=t=>t.length>0&&Yo(t[0]),zo=(t,n)=>{let e=Number.NEGATIVE_INFINITY;if(n){const i=t;for(let s=0;s<i.length;s++){const o=i[s][0];if(!Number.isFinite(o)||o<e)return!1;e=o}return!0}const r=t;for(let i=0;i<r.length;i++){const s=r[i].x;if(!Number.isFinite(s)||s<e)return!1;e=s}return!0},Ho=(t,n)=>{let e=0,r=t.length;for(;e<r;){const i=e+r>>>1;t[i][0]<n?e=i+1:r=i}return e},Oo=(t,n)=>{let e=0,r=t.length;for(;e<r;){const i=e+r>>>1;t[i][0]<=n?e=i+1:r=i}return e},qo=(t,n)=>{let e=0,r=t.length;for(;e<r;){const i=e+r>>>1;t[i].x<n?e=i+1:r=i}return e},jo=(t,n)=>{let e=0,r=t.length;for(;e<r;){const i=e+r>>>1;t[i].x<=n?e=i+1:r=i}return e},Zo=(t,n,e)=>{const r=t.length;if(r===0||!Number.isFinite(n)||!Number.isFinite(e))return t;const i=Wo(t);if(zo(t,i)){const c=i?Ho(t,n):qo(t,n),u=i?Oo(t,e):jo(t,e);return c<=0&&u>=r?t:u<=c?[]:t.slice(c,u)}const o=[];for(let c=0;c<r;c++){const u=t[c],{x:a}=Ot(u);Number.isFinite(a)&&a>=n&&a<=e&&o.push(u)}return o},Le=(t,n)=>{if(typeof t=="number")return Number.isFinite(t)?t:null;if(typeof t!="string")return null;const e=t.trim();if(e.length===0)return null;if(e.endsWith("%")){const i=Number.parseFloat(e.slice(0,-1));return Number.isFinite(i)?i/100*n:null}const r=Number.parseFloat(e);return Number.isFinite(r)?r:null},ei=(t,n,e)=>{const r=(t==null?void 0:t[0])??"50%",i=(t==null?void 0:t[1])??"50%",s=Le(r,n),o=Le(i,e);return{x:Number.isFinite(s)?s:n*.5,y:Number.isFinite(o)?o:e*.5}},Ko=t=>Array.isArray(t),Rn=(t,n)=>{if(t==null)return{inner:0,outer:n*.7};if(Ko(t)){const i=Le(t[0],n),s=Le(t[1],n),o=Math.max(0,Number.isFinite(i)?i:0),c=Math.max(o,Number.isFinite(s)?s:n*.7);return{inner:o,outer:Math.min(n,c)}}const e=Le(t,n),r=Math.max(0,Number.isFinite(e)?e:n*.7);return{inner:0,outer:Math.min(n,r)}},Jo=6,Qo=(t,n=Jo)=>{const e=Math.abs(t);if(!Number.isFinite(e)||e===0)return 0;for(let r=0;r<=n;r++){const i=e*10**r,s=Math.round(i),o=Math.abs(i-s),c=1e-9*Math.max(1,Math.abs(i));if(o<=c)return r}return Math.max(0,Math.min(n,Math.ceil(-Math.log10(e))+1))},ni=t=>{const n=Qo(t);return new Intl.NumberFormat(void 0,{maximumFractionDigits:n})},ri=(t,n)=>{if(!Number.isFinite(n))return null;const e=Math.abs(n)<1e-12?0:n,r=t.format(e);return r==="NaN"?null:r},we=(t,n)=>{const e=yi(t.series,n),r=t.xAxis.min??e.xMin,i=t.xAxis.max??e.xMax;return cn(r,i)},Pn=(t,n)=>{const e=yi(t.series,n),r=t.yAxis.min??e.yMin,i=t.yAxis.max??e.yMax;return cn(r,i)},Me=(t,n)=>{if(!n)return{...t,spanFraction:1};const e=t.max-t.min;if(!Number.isFinite(e)||e===0)return{...t,spanFraction:1};const r=n.start,i=n.end,s=t.min+r/100*e,o=t.min+i/100*e,c=cn(s,o),u=(i-r)/100,a=Number.isFinite(u)?Math.max(0,Math.min(1,u)):1;return{min:c.min,max:c.max,spanFraction:a}},gi=t=>{if(t===!1||t==null)return null;const n=t===!0?{}:t;if(!n)return null;const e=n.duration??300,r=n.delay??0,i=Number.isFinite(e)?Math.max(0,e):300,s=Number.isFinite(r)?Math.max(0,r):0;return{durationMs:i,delayMs:s,easing:Lo(n.easing)}},ta=t=>gi(t),ea=t=>gi(t),ii=t=>{let n=Number.POSITIVE_INFINITY,e=Number.NEGATIVE_INFINITY;for(let r=0;r<t.length;r++){const i=t[r].data;for(let s=0;s<i.length;s++){const{y:o}=Ot(i[s]);Number.isFinite(o)&&(o<n&&(n=o),o>e&&(e=o))}}return!Number.isFinite(n)||!Number.isFinite(e)||n<=0&&0<=e?0:Math.abs(n)<Math.abs(e)?n:e},na=(t,n,e)=>{const r=n.invert(e.bottom),i=n.invert(e.top),s=Math.min(r,i),o=Math.max(r,i);return!Number.isFinite(s)||!Number.isFinite(o)?ii(t):s<=0&&0<=o?0:s>0?s:o<0?o:ii(t)},ra=(t,n,e,r)=>{const i=Ht(r);if(i>=1)return t;const s=na(e,t,n),o=t.scale(s),c={domain(u,a){return t.domain(u,a),c},range(u,a){return t.range(u,a),c},scale(u){const a=t.scale(u);return!Number.isFinite(a)||!Number.isFinite(o)?a:o+(a-o)*i},invert(u){return t.invert(u)}};return c};function Sa(t,n,e){var qn;if(!t.initialized)throw new Error("RenderCoordinator: gpuContext must be initialized.");const r=t.device;if(!r)throw new Error("RenderCoordinator: gpuContext.device is required.");if(!t.canvas)throw new Error("RenderCoordinator: gpuContext.canvas is required.");if(!t.canvasContext)throw new Error("RenderCoordinator: gpuContext.canvasContext is required.");const i=t.preferredFormat??_o,s=t.canvas.parentElement,o=s?No(s):null,c=s?vo(s,"right"):null;let u=!1,a=n,b=n.series.length,f="pending",l=0;const w=qr();let S=null,R=!1;const T=qr();let v=null,h=1,F=null;const d={cartesianDataBySeriesIndex:[],pieDataBySeriesIndex:[]},m=()=>{d.cartesianDataBySeriesIndex.length=0,d.pieDataBySeriesIndex.length=0},p=(g,B,E,G)=>{if(g.length!==B.length)return null;const W=B.length;if(W===0)return G??[];const Z=G&&G.length===W?G:(()=>{const H=new Array(W);for(let z=0;z<W;z++){const O=B[z],{x:st}=Ot(O),et=rn(O)?O[2]:O==null?void 0:O.size;H[z]=rn(O)?et==null?[st,0]:[st,0,et]:et==null?{x:st,y:0}:{x:st,y:0,size:et}}return H})(),tt=Ht(E);for(let H=0;H<W;H++){const z=Ot(g[H]).y,O=Ot(B[H]).y,st=Number.isFinite(z)&&Number.isFinite(O)?an(z,O,tt):O,et=Z[H];rn(et)?et[1]=st:et.y=st}return Z},x=(g,B,E,G)=>{var O,st;const W=g.data,Z=B.data;if(W.length!==Z.length)return B;const tt=Z.length,H=G&&G.length===tt?G:(()=>{const et=new Array(tt);for(let q=0;q<tt;q++)et[q]={...Z[q],value:0};return et})(),z=Ht(E);for(let et=0;et<tt;et++){const q=(O=W[et])==null?void 0:O.value,ot=(st=Z[et])==null?void 0:st.value,at=typeof q=="number"&&typeof ot=="number"&&Number.isFinite(q)&&Number.isFinite(ot)?Math.max(0,an(q,ot,z)):typeof ot=="number"&&Number.isFinite(ot)?ot:0;H[et].value=at}return{...B,data:H}},N=(g,B,E,G)=>{if(g.length!==B.length)return B;const W=new Array(B.length);for(let Z=0;Z<B.length;Z++){const tt=g[Z],H=B[Z];if(tt.type!==H.type){W[Z]=H;continue}if(H.type==="pie"){const at=(G==null?void 0:G.pieDataBySeriesIndex[Z])??null,_t=x(tt,H,E,at);G&&(G.pieDataBySeriesIndex[Z]=_t.data),W[Z]=_t;continue}const z=tt,O=H,st=z.data,et=O.data;if(st.length!==et.length){W[Z]=H;continue}if(et.length>Xo){W[Z]=H;continue}const q=(G==null?void 0:G.cartesianDataBySeriesIndex[Z])??null,ot=p(st,et,E,q);if(!ot){W[Z]=H;continue}G&&(G.cartesianDataBySeriesIndex[Z]=ot),W[Z]={...H,data:ot}}return W},M=(g,B,E)=>{const G=Ke(g.from.xBaseDomain,g.to.xBaseDomain,B),W=Me(G,E),Z=Ke(g.from.yBaseDomain,g.to.yBaseDomain,B),tt=N(g.from.series,g.to.series,B,null);return{xBaseDomain:G,xVisibleDomain:{min:W.min,max:W.max},yBaseDomain:Z,series:tt}},C=new Set;let I=new Array(n.series.length).fill(null),y=new Array(n.series.length).fill(null),A=a.series,P=a.series,_=!1,L=null,D=null,V=null,$=!1;const k=new Map;let Q=new Array(a.series.length).fill("unknown");const it=new Set;let X=s&&((qn=a.tooltip)==null?void 0:qn.show)!==!1?Hr(s):null;c==null||c.update(a.series,a.theme);let nt=Bi(r);const pt=Ti(r,{targetFormat:i}),vt=cr(r,{targetFormat:i}),Mt=cr(r,{targetFormat:i}),mt=Us(r,{targetFormat:i});mt.setVisible(!1);const bt=Ws(r,{targetFormat:i});bt.setVisible(!1);const Nt=Jr(t,a),It=Os(t.canvas,Nt);let j={source:"mouse",x:0,y:0,gridX:0,gridY:0,isInGrid:!1,hasPointer:!1},gt=null,Tt;const Ct=new Set;let J=null;const xt=(g,B)=>{const E=Array.from(Ct);for(const G of E)G(g,B)},St=(g,B)=>{const E=g!==null&&Number.isFinite(g)?g:null;gt===E&&Tt===B||(gt=E,Tt=B,xt(gt,Tt))},At=()=>{var g;(g=e==null?void 0:e.onRequestRender)==null||g.call(e)},qt=g=>g?Number.isFinite(g.start)&&Number.isFinite(g.end)&&g.start<=0&&g.end>=100:!0,Pt=()=>{L!==null&&(cancelAnimationFrame(L),L=null),D!==null&&(clearTimeout(D),D=null),_=!1},jt=()=>{V!==null&&(clearTimeout(V),V=null)},te=()=>{if(k.size===0)return!1;it.clear();const g=(K==null?void 0:K.getRange())??null,B=qt(g),E=a.autoScroll===!0&&K!=null&&a.xAxis.min==null&&a.xAxis.max==null,G=we(a,y),W=g?Me(G,g):null;let Z=!1;for(const[H,z]of k){if(z.length===0)continue;const O=a.series[H];if(!O||O.type==="pie")continue;Z=!0;let st=I[H];if(!st){const et=O.rawData??O.data;st=et.length===0?[]:et.slice(),I[H]=st,y[H]=O.rawBounds??_n(st)}if(O.type==="line"&&O.sampling==="none"&&B&&Q[H]==="fullRawLine")try{nt.appendSeries(H,z),it.add(H)}catch{}st.push(...z),y[H]=Vo(y[H],z)}if(k.clear(),!Z)return!1;if(E&&g&&W){const H=g;if(H.end>=99.5){const z=H.end-H.start;K.setRange(100-z,100)}else{const z=we(a,y),O=z.max-z.min;if(Number.isFinite(O)&&O>0){const st=(W.min-z.min)/O*100,et=(W.max-z.min)/O*100,q=Math.max(0,Math.min(100,st)),ot=Math.max(0,Math.min(100,et));K.setRange(q,ot)}}}un();const tt=(K==null?void 0:K.getRange())??null;return(tt==null||qt(tt))&&(P=A),!0},oe=g=>{if(u)return;const B=(g==null?void 0:g.requestRenderAfter)??!0,E=te(),G=(K==null?void 0:K.getRange())??null,W=qt(G),Z=G!=null&&!W;let tt=!1;$?($=!1,jt(),!G||W?P=A:Xe(),tt=!0):E&&Z&&($=!1,jt(),Xe(),tt=!0),(E||tt)&&B&&At()},ee=g=>{u||_||(L!==null&&(cancelAnimationFrame(L),L=null),D!==null&&(clearTimeout(D),D=null),_=!0,L=requestAnimationFrame(()=>{if(L=null,u){Pt();return}D!==null&&(clearTimeout(D),D=null),_=!1,oe()}),D=window.setTimeout(()=>{if(u){Pt();return}_&&(L!==null&&(cancelAnimationFrame(L),L=null),_=!1,D=null,oe())},16))},ae=()=>{u||(jt(),$=!1,V=window.setTimeout(()=>{V=null,!u&&($=!0,ee())},100))},Gt=(g,B)=>{const E=g.getBoundingClientRect();if(!(E.width>0)||!(E.height>0))return null;const G=E.width-B.left-B.right,W=E.height-B.top-B.bottom;return!(G>0)||!(W>0)?null:{plotWidthCss:G,plotHeightCss:W}},pe=(g,B)=>{const E=t.canvas;if(!E)return null;const G=Gt(E,g);if(!G)return null;const W=ke().domain(B.xDomain.min,B.xDomain.max).range(0,G.plotWidthCss),Z=ke().domain(B.yDomain.min,B.yDomain.max).range(G.plotHeightCss,0);return{xScale:W,yScale:Z,plotWidthCss:G.plotWidthCss,plotHeightCss:G.plotHeightCss}},be=(g,B,E)=>{const G=a.series[g],{x:W,y:Z}=Ot(E);return{seriesName:(G==null?void 0:G.name)??"",seriesIndex:g,dataIndex:B,value:[W,Z],color:(G==null?void 0:G.color)??"#888"}},Ge=g=>{if(j={source:"mouse",x:g.x,y:g.y,gridX:g.gridX,gridY:g.gridY,isInGrid:g.isInGrid,hasPointer:!0},g.isInGrid&&J){const B=J.xScale.invert(g.gridX);St(Number.isFinite(B)?B:null,"mouse")}else g.isInGrid||St(null,"mouse");mt.setVisible(g.isInGrid),At()},Se=g=>{j.source==="mouse"&&(j={...j,isInGrid:!1,hasPointer:!1},mt.setVisible(!1),X==null||X.hide(),St(null,"mouse"),At())};It.on("mousemove",Ge),It.on("mouseleave",Se);let K=null,wt=null,Bt=null,Et=null;const kt=new Set,ve=g=>{const B=Array.from(kt);for(const E of B)E(g)},Ue=g=>{var tt,H;const B=(tt=g.dataZoom)==null?void 0:tt.find(z=>(z==null?void 0:z.type)==="inside"),E=(H=g.dataZoom)==null?void 0:H.find(z=>(z==null?void 0:z.type)==="slider"),G=B??E;if(!G)return null;const W=Number.isFinite(G.start)?G.start:0,Z=Number.isFinite(G.end)?G.end:100;return{start:W,end:Z,hasInside:!!B}},Vn=()=>{const g=Ue(a);if(!g){wt==null||wt.dispose(),wt=null,Bt==null||Bt(),Bt=null,K=null,Et=null;return}K?(Et==null||Et.start!==g.start||Et.end!==g.end)&&(K.setRange(g.start,g.end),Et={start:g.start,end:g.end}):(K=to(g.start,g.end),Et={start:g.start,end:g.end},Bt=K.onChange(B=>{At(),ae(),ve({start:B.start,end:B.end})})),g.hasInside?wt||(wt=Js(It,K),wt.enable()):(wt==null||wt.dispose(),wt=null)},$n=()=>{const g=a.series.length;I=new Array(g).fill(null),y=new Array(g).fill(null),k.clear();for(let B=0;B<g;B++){const E=a.series[B];if(E.type==="pie")continue;const G=E.rawData??E.data,W=G.length===0?[]:G.slice();I[B]=W,y[B]=E.rawBounds??_n(W)}},un=()=>{const g=new Array(a.series.length);for(let B=0;B<a.series.length;B++){const E=a.series[B];if(E.type==="pie"){g[B]=E;continue}const G=I[B]??E.rawData??E.data,W=y[B]??E.rawBounds??void 0,Z=Ie(G,E.sampling,E.samplingThreshold);g[B]={...E,rawData:G,rawBounds:W,data:Z}}A=g};function Xe(){const g=(K==null?void 0:K.getRange())??null,B=we(a,y),E=Me(B,g),G=2,W=2e5,Z=32,tt=Math.max(.001,Math.min(1,E.spanFraction)),H=new Array(A.length);for(let z=0;z<A.length;z++){const O=A[z];if(O.type==="pie"){H[z]=O;continue}const st=I[z]??O.rawData??O.data;if(g==null||Number.isFinite(g.start)&&Number.isFinite(g.end)&&g.start<=0&&g.end>=100){H[z]=O;continue}const q=Zo(st,E.min,E.max),ot=O.sampling,at=O.samplingThreshold,_t=Number.isFinite(at)?Math.max(1,at|0):1,ne=Math.min(W,Math.max(G,_t*Z)),ht=de(Math.round(_t/tt),G,ne),re=Ie(q,ot,ht);H[z]={...O,data:re}}P=H}Vn(),$n(),un(),Xe();const Ut=[],Yt=[],Zt=[],Wt=[],fn=ss(r,{targetFormat:i}),kn=g=>{for(;Ut.length>g;){const B=Ut.pop();B==null||B.dispose()}for(;Ut.length<g;)Ut.push($i(r,{targetFormat:i}))},Yn=g=>{for(;Yt.length>g;){const B=Yt.pop();B==null||B.dispose()}for(;Yt.length<g;)Yt.push(qi(r,{targetFormat:i}))},Wn=g=>{for(;Zt.length>g;){const B=Zt.pop();B==null||B.dispose()}for(;Zt.length<g;)Zt.push(hs(r,{targetFormat:i}))},zn=g=>{for(;Wt.length>g;){const B=Wt.pop();B==null||B.dispose()}for(;Wt.length<g;)Wt.push(ws(r,{targetFormat:i}))};kn(a.series.length),Yn(a.series.length),Wn(a.series.length),zn(a.series.length);const le=()=>{if(u)throw new Error("RenderCoordinator is disposed.")},Hn=()=>{if(v)try{T.cancel(v)}catch{}v=null,h=1,F=null,m()},On=(g,B)=>g.min===B.min&&g.max===B.max,xi=(g,B)=>{if(g.length!==B.length)return!0;for(let E=0;E<g.length;E++){const G=g[E],W=B[E];if(G.type!==W.type)return!0;if(G.type==="pie"){const Z=G,tt=W;if(Z.data!==tt.data||Z.data.length!==tt.data.length)return!0}else{const Z=G,tt=W,H=Z.rawData??Z.data,z=tt.rawData??tt.data;if(H!==z||H.length!==z.length)return!0}}return!1},Fi=g=>{var ne;le();const B=(K==null?void 0:K.getRange())??null,E=(()=>{if(F&&v){try{T.update(performance.now())}catch{}return M(F,h,B)}const ht=we(a,y),re=Me(ht,B),ye=Pn(a,y);return{xBaseDomain:ht,xVisibleDomain:{min:re.min,max:re.max},yBaseDomain:ye,series:P}})();Hn();const G=xi(a.series,g.series);if(a=g,A=g.series,P=g.series,Q=new Array(g.series.length).fill("unknown"),c==null||c.update(g.series,g.theme),Vn(),jt(),$=!1,Pt(),$n(),un(),Xe(),s){const ht=((ne=a.tooltip)==null?void 0:ne.show)!==!1;ht&&!X&&(X=Hr(s)),!ht&&X&&X.hide()}else X==null||X.hide();const W=g.series.length;if(kn(W),Yn(W),Wn(W),zn(W),W<b)for(let ht=W;ht<b;ht++)nt.removeSeries(ht);if(b=W,a.animation===!1&&f==="running"&&(w.cancelAll(),S=null,f="done",l=1),a.animation===!1){Hn();return}const Z=(K==null?void 0:K.getRange())??null,tt=we(a,y),H=Me(tt,Z),z=Pn(a,y),O=P,st=!On(E.xBaseDomain,tt)||!On(E.yBaseDomain,z);if(!(R&&(st||G)))return;const q=ea(a.animation);if(!q)return;F={from:{xBaseDomain:E.xBaseDomain,xVisibleDomain:E.xVisibleDomain,yBaseDomain:E.yBaseDomain,series:E.series},to:{xBaseDomain:tt,xVisibleDomain:{min:H.min,max:H.max},yBaseDomain:z,series:O}},m();const ot=q.delayMs+q.durationMs,at=ht=>{const re=Ht(ht);if(!(ot>0))return 1;const ye=re*ot;if(ye<=q.delayMs)return 0;if(!(q.durationMs>0))return 1;const Ve=(ye-q.delayMs)/q.durationMs;return q.easing(Ve)};h=0;const _t=T.animate(0,1,ot,at,ht=>{u||v!==_t||(h=Ht(ht),h<1&&At())},()=>{u||v!==_t||(h=1,F=null,v=null,m())});v=_t},Ni=(g,B)=>{if(le(),!Number.isFinite(g)||g<0||g>=a.series.length||!B||B.length===0)return;if(a.series[g].type==="pie"){C.has(g)||(C.add(g),console.warn(`RenderCoordinator.appendData(${g}, ...): pie series are not supported by streaming append.`));return}const G=k.get(g);G?G.push(...B):k.set(g,Array.from(B)),ee()},wi=g=>{switch(g.type){case"area":return!0;case"line":return g.areaStyle!=null;case"bar":return!1;case"scatter":return!1;case"pie":return!1;default:return Cn(g)}};return{setOptions:Fi,appendData:Ni,getInteractionX:()=>gt,setInteractionX:(g,B)=>{le();const E=g!==null&&Number.isFinite(g)?g:null;j={...j,source:E===null?"mouse":"sync"},St(E,B),E===null&&j.hasPointer===!1&&(mt.setVisible(!1),bt.setVisible(!1),X==null||X.hide()),At()},onInteractionXChange:g=>(le(),Ct.add(g),()=>{Ct.delete(g)}),getZoomRange:()=>(K==null?void 0:K.getRange())??null,setZoomRange:(g,B)=>{le(),K&&K.setRange(g,B)},onZoomRangeChange:g=>(le(),kt.add(g),()=>{kt.delete(g)}),render:()=>{var jn,Zn,Kn,Jn,Qn,tr,er,nr;if(le(),!t.canvasContext||!t.canvas)return;(k.size>0||$)&&(Pt(),oe({requestRenderAfter:!1}));const g=a.series.some(U=>U.type!=="pie"),B=P;if(f!=="done"){const U=ta(a.animation),Y=(()=>{for(let ct=0;ct<B.length;ct++){const ft=B[ct];switch(ft.type){case"pie":{if(ft.data.some(dt=>typeof(dt==null?void 0:dt.value)=="number"&&Number.isFinite(dt.value)&&dt.value>0))return!0;break}case"line":case"area":case"bar":case"scatter":{if(ft.data.length>0)return!0;break}default:Cn(ft)}}return!1})();if(f==="pending"&&U&&Y){const ct=U.delayMs+U.durationMs,ft=dt=>{const ut=Ht(dt);if(!(ct>0))return 1;const rt=ut*ct;if(rt<=U.delayMs)return 0;if(!(U.durationMs>0))return 1;const lt=(rt-U.delayMs)/U.durationMs;return U.easing(lt)};l=0,f="running",S=w.animate(0,1,ct,ft,dt=>{u||f!=="running"||(l=Ht(dt),l<1&&At())},()=>{u||(f="done",l=1,S=null)})}w.update(performance.now())}F!==null&&v&&T.update(performance.now());const E=Jr(t,a);It.updateGridArea(E);const G=(K==null?void 0:K.getRange())??null,W=F?Ht(h):1,Z=F?Ke(F.from.xBaseDomain,F.to.xBaseDomain,W):we(a,y),tt=F?Ke(F.from.yBaseDomain,F.to.yBaseDomain,W):Pn(a,y),H=Me(Z,G),z=ko(E),O=ti(E),st=ke().domain(H.min,H.max).range(z.left,z.right),et=ke().domain(tt.min,tt.max).range(z.bottom,z.top),q=pe(E,{xDomain:{min:H.min,max:H.max},yDomain:tt});J=q;const ot=F&&W<1?N(F.from.series,F.to.series,W,d):P;if(j.source==="mouse"&&j.hasPointer&&j.isInGrid&&q){const U=q.xScale.invert(j.gridX);St(Number.isFinite(U)?U:null,"mouse")}let at=j;if(j.source==="sync")if(gt===null||!q)at={...j,hasPointer:!1,isInGrid:!1};else{const U=q.xScale.scale(gt),Y=q.plotHeightCss*.5,ct=Number.isFinite(U)&&Number.isFinite(Y)&&U>=0&&U<=q.plotWidthCss&&Y>=0&&Y<=q.plotHeightCss;at={source:"sync",gridX:Number.isFinite(U)?U:0,gridY:Number.isFinite(Y)?Y:0,x:E.left+(Number.isFinite(U)?U:0),y:E.top+(Number.isFinite(Y)?Y:0),isInGrid:ct,hasPointer:ct}}if(pt.prepare(E,{color:a.theme.gridLineColor}),g&&(vt.prepare(a.xAxis,st,"x",E,a.theme.axisLineColor,a.theme.axisTickColor),Mt.prepare(a.yAxis,et,"y",E,a.theme.axisLineColor,a.theme.axisTickColor)),at.hasPointer&&at.isInGrid){const U={showX:!0,showY:at.source!=="sync",color:Qr(a.theme.axisLineColor,.6),lineWidth:Go};mt.prepare(at.x,at.y,E,U),mt.setVisible(!0)}else mt.setVisible(!1);if(at.source==="mouse"&&at.hasPointer&&at.isInGrid)if(q){const U=Xr(ot,at.gridX,at.gridY,q.xScale,q.yScale);if(U){const{x:Y,y:ct}=Ot(U.point),ft=q.xScale.scale(Y),dt=q.yScale.scale(ct);if(Number.isFinite(ft)&&Number.isFinite(dt)){const ut=window.devicePixelRatio||1,rt=E.left+ft,lt=E.top+dt,yt=ti(E),Ft={centerDeviceX:rt*ut,centerDeviceY:lt*ut,canvasWidth:E.canvasWidth,canvasHeight:E.canvasHeight,scissor:yt},Kt=((jn=a.series[U.seriesIndex])==null?void 0:jn.color)??"#888";bt.prepare(Ft,Kt,Uo),bt.setVisible(!0)}else bt.setVisible(!1)}else bt.setVisible(!1)}else bt.setVisible(!1);else bt.setVisible(!1);if(X&&at.hasPointer&&at.isInGrid){const U=t.canvas;if(q&&U&&((Zn=a.tooltip)==null?void 0:Zn.show)!==!1){const Y=(Kn=a.tooltip)==null?void 0:Kn.formatter,ct=((Jn=a.tooltip)==null?void 0:Jn.trigger)??"item",ft=U.offsetLeft+at.x,dt=U.offsetTop+at.y;if(at.source==="sync"){const ut=Yr(ot,at.gridX,q.xScale);if(ut.length===0)X.hide();else if(ct==="axis"){const rt=ut.map(yt=>be(yt.seriesIndex,yt.dataIndex,yt.point)),lt=Y?Y(rt):Or(rt);lt?X.show(ft,dt,lt):X.hide()}else{const rt=ut[0],lt=be(rt.seriesIndex,rt.dataIndex,rt.point),yt=Y?Y(lt):je(lt);yt?X.show(ft,dt,yt):X.hide()}}else if(ct==="axis"){const ut=(()=>{const rt=q.plotWidthCss,lt=q.plotHeightCss,yt=.5*Math.min(rt,lt);if(!(yt>0))return null;for(let Ft=a.series.length-1;Ft>=0;Ft--){const Kt=ot[Ft];if(Kt.type!=="pie")continue;const Xt=Kt,ge=ei(Xt.center,rt,lt),Te=Rn(Xt.radius,yt),ce=Wr(at.gridX,at.gridY,{seriesIndex:Ft,series:Xt},ge,Te);if(ce)return ce}return null})();if(ut){const rt={seriesName:ut.slice.name,seriesIndex:ut.seriesIndex,dataIndex:ut.dataIndex,value:[0,ut.slice.value],color:ut.slice.color},lt=Y?Y([rt]):je(rt);lt?X.show(ft,dt,lt):X.hide()}else{const rt=Yr(ot,at.gridX,q.xScale);if(rt.length===0)X.hide();else{const lt=rt.map(Ft=>be(Ft.seriesIndex,Ft.dataIndex,Ft.point)),yt=Y?Y(lt):Or(lt);yt?X.show(ft,dt,yt):X.hide()}}}else{const ut=(()=>{const rt=q.plotWidthCss,lt=q.plotHeightCss,yt=.5*Math.min(rt,lt);if(!(yt>0))return null;for(let Ft=a.series.length-1;Ft>=0;Ft--){const Kt=ot[Ft];if(Kt.type!=="pie")continue;const Xt=Kt,ge=ei(Xt.center,rt,lt),Te=Rn(Xt.radius,yt),ce=Wr(at.gridX,at.gridY,{seriesIndex:Ft,series:Xt},ge,Te);if(ce)return ce}return null})();if(ut){const rt={seriesName:ut.slice.name,seriesIndex:ut.seriesIndex,dataIndex:ut.dataIndex,value:[0,ut.slice.value],color:ut.slice.color},lt=Y?Y(rt):je(rt);lt?X.show(ft,dt,lt):X.hide()}else{const rt=Xr(ot,at.gridX,at.gridY,q.xScale,q.yScale);if(!rt)X.hide();else{const lt=be(rt.seriesIndex,rt.dataIndex,rt.point),yt=Y?Y(lt):je(lt);yt?X.show(ft,dt,yt):X.hide()}}}}else X.hide()}else X==null||X.hide();const _t=a.yAxis.min??tt.min,ne=[],ht=f==="running"?Ht(l):1;for(let U=0;U<ot.length;U++){const Y=ot[U];switch(Y.type){case"area":{const ct=Y.baseline??_t;Ut[U].prepare(Y,Y.data,st,et,ct);break}case"line":{it.has(U)||nt.setSeries(U,Y.data);const ct=nt.getSeriesBuffer(U);Yt[U].prepare(Y,ct,st,et);const ft=(K==null?void 0:K.getRange())??null;if((ft==null||Number.isFinite(ft.start)&&Number.isFinite(ft.end)&&ft.start<=0&&ft.end>=100)&&Y.sampling==="none"?Q[U]="fullRawLine":Q[U]="other",Y.areaStyle){const ut={type:"area",name:Y.name,rawData:Y.data,data:Y.data,color:Y.areaStyle.color,areaStyle:Y.areaStyle,sampling:Y.sampling,samplingThreshold:Y.samplingThreshold};Ut[U].prepare(ut,ut.data,st,et,_t)}break}case"bar":{ne.push(Y);break}case"scatter":{const ct=ht<1?{...Y,color:Qr(Y.color,ht)}:Y;Zt[U].prepare(ct,Y.data,st,et,E);break}case"pie":{if(ht<1){const ct=t.canvas,ft=(q==null?void 0:q.plotWidthCss)??(ct?(Qn=Gt(ct,E))==null?void 0:Qn.plotWidthCss:null),dt=(q==null?void 0:q.plotHeightCss)??(ct?(tr=Gt(ct,E))==null?void 0:tr.plotHeightCss:null),ut=typeof ft=="number"&&typeof dt=="number"?.5*Math.min(ft,dt):0;if(ut>0){const rt=Rn(Y.radius,ut),lt=Math.max(0,rt.inner)*ht,yt=Math.max(lt,rt.outer)*ht,Ft={...Y,radius:[lt,yt]};Wt[U].prepare(Ft,E);break}}Wt[U].prepare(Y,E);break}default:Cn(Y)}}const re=ht<1?ra(et,z,ne,ht):et;fn.prepare(ne,nt,st,re,E);const ye=t.canvasContext.getCurrentTexture().createView(),Ve=r.createCommandEncoder({label:"renderCoordinator/commandEncoder"}),Mi=Ci(a.theme.backgroundColor,{r:0,g:0,b:0,a:1}),Rt=Ve.beginRenderPass({label:"renderCoordinator/renderPass",colorAttachments:[{view:ye,clearValue:Mi,loadOp:"clear",storeOp:"store"}]});pt.render(Rt);for(let U=0;U<ot.length;U++)ot[U].type==="pie"&&Wt[U].render(Rt);for(let U=0;U<ot.length;U++)if(wi(ot[U]))if(ht<1){const Y=de(Math.floor(O.w*ht),0,O.w);Y>0&&O.h>0&&(Rt.setScissorRect(O.x,O.y,Y,O.h),Ut[U].render(Rt),Rt.setScissorRect(0,0,E.canvasWidth,E.canvasHeight))}else Ut[U].render(Rt);fn.render(Rt);for(let U=0;U<ot.length;U++)ot[U].type==="scatter"&&Zt[U].render(Rt);for(let U=0;U<ot.length;U++)if(ot[U].type==="line")if(ht<1){const Y=de(Math.floor(O.w*ht),0,O.w);Y>0&&O.h>0&&(Rt.setScissorRect(O.x,O.y,Y,O.h),Yt[U].render(Rt),Rt.setScissorRect(0,0,E.canvasWidth,E.canvasHeight))}else Yt[U].render(Rt);if(bt.render(Rt),g&&(vt.render(Rt),Mt.render(Rt)),mt.render(Rt),Rt.end(),r.queue.submit([Ve.finish()]),R=!0,o&&s){const U=t.canvas,Y=U.clientWidth,ct=U.clientHeight;if(Y<=0||ct<=0)return;const ft=U.offsetLeft,dt=U.offsetTop,ut=An(z.left,Y),rt=An(z.right,Y),lt=Bn(z.top,ct),yt=Bn(z.bottom,ct);if(o.clear(),!g)return;const Ft=Zr,Kt=a.xAxis.tickLength??Kr,Xt=a.xAxis.min??st.invert(z.left),ge=a.xAxis.max??st.invert(z.right),Te=(ge-Xt)/(Ft-1),ce=ni(Te),rr=yt+Kt+Ze+a.theme.fontSize*.5;for(let Dt=0;Dt<Ft;Dt++){const ue=Dt/(Ft-1),zt=Xt+ue*(ge-Xt),Ce=st.scale(zt),fe=An(Ce,Y),xe=Dt===0?"start":Dt===Ft-1?"end":"middle",ie=ri(ce,zt);if(ie==null)continue;const lr=o.addLabel(ie,ft+fe,dt+rr,{fontSize:a.theme.fontSize,color:a.theme.textColor,anchor:xe});lr.dir="auto",lr.style.fontFamily=a.theme.fontFamily}const mn=Zr,Ii=a.yAxis.tickLength??Kr,dn=a.yAxis.min??et.invert(z.bottom),ir=a.yAxis.max??et.invert(z.top),Si=(ir-dn)/(mn-1),vi=ni(Si),sr=ut-Ii-Ze,hn=[];for(let Dt=0;Dt<mn;Dt++){const ue=Dt/(mn-1),zt=dn+ue*(ir-dn),Ce=et.scale(zt),fe=Bn(Ce,ct),xe=ri(vi,zt);if(xe==null)continue;const ie=o.addLabel(xe,ft+sr,dt+fe,{fontSize:a.theme.fontSize,color:a.theme.textColor,anchor:"end"});ie.dir="auto",ie.style.fontFamily=a.theme.fontFamily,hn.push(ie)}const $e=Math.max(a.theme.fontSize+1,Math.round(a.theme.fontSize*1.15)),or=((er=a.xAxis.name)==null?void 0:er.trim())??"";if(or.length>0){const Dt=(ut+rt)/2,ue=rr+a.theme.fontSize*.5+Ze+$e*.5,zt=o.addLabel(or,ft+Dt,dt+ue,{fontSize:$e,color:a.theme.textColor,anchor:"middle"});zt.dir="auto",zt.style.fontFamily=a.theme.fontFamily,zt.style.fontWeight="600"}const ar=((nr=a.yAxis.name)==null?void 0:nr.trim())??"";if(ar.length>0){const Dt=hn.length===0?0:hn.reduce((xe,ie)=>Math.max(xe,ie.getBoundingClientRect().width),0),ue=(lt+yt)/2,Ce=sr-Dt-Ze-$e*.5,fe=o.addLabel(ar,ft+Ce,dt+ue,{fontSize:$e,color:a.theme.textColor,anchor:"middle",rotation:-90});fe.dir="auto",fe.style.fontFamily=a.theme.fontFamily,fe.style.fontWeight="600"}}},dispose:()=>{if(!u){u=!0;try{S&&w.cancel(S),w.cancelAll()}catch{}S=null,f="done",l=1;try{v&&T.cancel(v),T.cancelAll()}catch{}v=null,h=1,F=null,Pt(),jt(),$=!1,k.clear(),wt==null||wt.dispose(),wt=null,Bt==null||Bt(),Bt=null,K=null,Et=null,kt.clear(),It.dispose(),mt.dispose(),bt.dispose();for(let g=0;g<Ut.length;g++)Ut[g].dispose();Ut.length=0;for(let g=0;g<Yt.length;g++)Yt[g].dispose();Yt.length=0;for(let g=0;g<Zt.length;g++)Zt[g].dispose();Zt.length=0;for(let g=0;g<Wt.length;g++)Wt[g].dispose();Wt.length=0,fn.dispose(),pt.dispose(),vt.dispose(),Mt.dispose(),nt.dispose(),X==null||X.dispose(),X=null,c==null||c.dispose(),o==null||o.dispose()}}}}const ia={left:60,right:20,top:40,bottom:40},sn=["#5470C6","#91CC75","#FAC858","#EE6666","#73C0DE","#3BA272","#FC8452","#9A60B4","#EA7CCC"],si={width:2,opacity:1},oi={opacity:.25},Lt={grid:ia,xAxis:{type:"value"},yAxis:{type:"value"},autoScroll:!1,palette:sn},sa=["#00E5FF","#FF2D95","#B026FF","#00F5A0","#FFD300","#FF6B00","#4D5BFF","#FF3D3D"],oa={backgroundColor:"#1a1a2e",textColor:"#e0e0e0",axisLineColor:"rgba(224,224,224,0.35)",axisTickColor:"rgba(224,224,224,0.55)",gridLineColor:"rgba(255,255,255,0.1)",colorPalette:[...sa],fontFamily:'system-ui, -apple-system, "Segoe UI", Roboto, Helvetica, Arial, "Apple Color Emoji", "Segoe UI Emoji"',fontSize:12},aa=["#1F77B4","#FF7F0E","#2CA02C","#D62728","#9467BD","#8C564B","#E377C2","#17BECF"],la={backgroundColor:"#ffffff",textColor:"#333333",axisLineColor:"rgba(0,0,0,0.35)",axisTickColor:"rgba(0,0,0,0.55)",gridLineColor:"rgba(0,0,0,0.1)",colorPalette:[...aa],fontFamily:'system-ui, -apple-system, "Segoe UI", Roboto, Helvetica, Arial, "Apple Color Emoji", "Segoe UI Emoji"',fontSize:12};function En(t){return t==="dark"?oa:la}const ca=t=>{if(!Array.isArray(t))return;const n=[];for(const e of t){if(e===null||typeof e!="object"||Array.isArray(e))continue;const r=e,i=r.type;if(i!=="inside"&&i!=="slider")continue;const s=r.xAxisIndex,o=r.start,c=r.end,u=r.minSpan,a=r.maxSpan,b=typeof s=="number"&&Number.isFinite(s)?s:void 0,f=typeof o=="number"&&Number.isFinite(o)?o:void 0,l=typeof c=="number"&&Number.isFinite(c)?c:void 0,w=typeof u=="number"&&Number.isFinite(u)?u:void 0,S=typeof a=="number"&&Number.isFinite(a)?a:void 0;n.push({type:i,xAxisIndex:b,start:f,end:l,minSpan:w,maxSpan:S})}return n},Re=t=>Array.isArray(t)?t.filter(n=>typeof n=="string").map(n=>n.trim()).filter(n=>n.length>0):[],ua=t=>{const n=En("dark");if(typeof t=="string"){const c=t.trim().toLowerCase();return En(c==="light"?"light":"dark")}if(t===null||typeof t!="object"||Array.isArray(t))return n;const e=t,r=c=>{const u=e[c];if(typeof u!="string")return;const a=u.trim();return a.length>0?a:void 0},i=e.fontSize,s=typeof i=="number"&&Number.isFinite(i)?i:void 0,o=Re(e.colorPalette);return{backgroundColor:r("backgroundColor")??n.backgroundColor,textColor:r("textColor")??n.textColor,axisLineColor:r("axisLineColor")??n.axisLineColor,axisTickColor:r("axisTickColor")??n.axisTickColor,gridLineColor:r("gridLineColor")??n.gridLineColor,colorPalette:o.length>0?o:Array.from(n.colorPalette),fontFamily:r("fontFamily")??n.fontFamily,fontSize:s??n.fontSize}},Ae=t=>{if(typeof t!="string")return;const n=t.trim();return n.length>0?n:void 0},fa=t=>{if(typeof t!="string")return;const n=t.trim().toLowerCase();return n==="none"||n==="lttb"||n==="average"||n==="max"||n==="min"?n:void 0},ma=t=>{if(typeof t!="number"||!Number.isFinite(t))return;const n=Math.floor(t);return n>0?n:void 0},ai=t=>Array.isArray(t),Je=t=>{let n=Number.POSITIVE_INFINITY,e=Number.NEGATIVE_INFINITY,r=Number.POSITIVE_INFINITY,i=Number.NEGATIVE_INFINITY;for(let s=0;s<t.length;s++){const o=t[s],c=ai(o)?o[0]:o.x,u=ai(o)?o[1]:o.y;!Number.isFinite(c)||!Number.isFinite(u)||(c<n&&(n=c),c>e&&(e=c),u<r&&(r=u),u>i&&(i=u))}if(!(!Number.isFinite(n)||!Number.isFinite(e)||!Number.isFinite(r)||!Number.isFinite(i)))return n===e&&(e=n+1),r===i&&(i=r+1),{xMin:n,xMax:e,yMin:r,yMax:i}},da=t=>{throw new Error(`Unhandled series type: ${(t==null?void 0:t.type)??"unknown"}`)};function va(t={}){var v,h,F,d;const n=ua(t.theme),e=t.autoScroll,r=typeof e=="boolean"?e:Lt.autoScroll,i=t.animation,o=(typeof i=="boolean"||i!==null&&typeof i=="object"&&!Array.isArray(i)?i:void 0)??!0,c=Re(t.palette),u=c.length>0?{...n,colorPalette:c}:n,a=Re(u.colorPalette),b=a.length>0?a:Re(Lt.palette??sn).length>0?Re(Lt.palette??sn):Array.from(sn),f=b.length>0?b:["#000000"],l={...u,colorPalette:f.slice()},w={left:((v=t.grid)==null?void 0:v.left)??Lt.grid.left,right:((h=t.grid)==null?void 0:h.right)??Lt.grid.right,top:((F=t.grid)==null?void 0:F.top)??Lt.grid.top,bottom:((d=t.grid)==null?void 0:d.bottom)??Lt.grid.bottom},S=t.xAxis?{...Lt.xAxis,...t.xAxis,type:t.xAxis.type??Lt.xAxis.type}:{...Lt.xAxis},R=t.yAxis?{...Lt.yAxis,...t.yAxis,type:t.yAxis.type??Lt.yAxis.type}:{...Lt.yAxis},T=(t.series??[]).map((m,p)=>{var y,A,P,_,L;const x=Ae(m.color),N=l.colorPalette[p%l.colorPalette.length],M=x??N,C=fa(m.sampling)??"lttb",I=ma(m.samplingThreshold)??5e3;switch(m.type){case"area":{const V=Ae((y=m.areaStyle)==null?void 0:y.color)??x??N,$={opacity:((A=m.areaStyle)==null?void 0:A.opacity)??oi.opacity,color:V},k=Je(m.data);return{...m,rawData:m.data,data:Ie(m.data,C,I),color:V,areaStyle:$,sampling:C,samplingThreshold:I,rawBounds:k}}case"line":{const V=Ae((P=m.lineStyle)==null?void 0:P.color)??x??N,$={width:((_=m.lineStyle)==null?void 0:_.width)??si.width,opacity:((L=m.lineStyle)==null?void 0:L.opacity)??si.opacity,color:V},{areaStyle:k,...Q}=m,it=Je(m.data),X=Ie(m.data,C,I);return{...Q,rawData:m.data,data:X,color:V,lineStyle:$,...m.areaStyle?{areaStyle:{opacity:m.areaStyle.opacity??oi.opacity,color:Ae(m.areaStyle.color)??V}}:{},sampling:C,samplingThreshold:I,rawBounds:it}}case"bar":{const D=Je(m.data);return{...m,rawData:m.data,data:Ie(m.data,C,I),color:M,sampling:C,samplingThreshold:I,rawBounds:D}}case"scatter":{const D=Je(m.data);return{...m,rawData:m.data,data:Ie(m.data,C,I),color:M,sampling:C,samplingThreshold:I,rawBounds:D}}case"pie":{const{sampling:D,samplingThreshold:V,...$}=m,k=(m.data??[]).map((Q,it)=>{const X=Ae(Q==null?void 0:Q.color),nt=l.colorPalette[(p+it)%l.colorPalette.length];return{...Q,color:X??nt}});return{...$,color:M,data:k}}default:return da(m)}});return{grid:w,xAxis:S,yAxis:R,autoScroll:r,dataZoom:ca(t.dataZoom),animation:o,theme:l,palette:l.colorPalette,series:T}}const Gn=(t,n,e)=>Math.min(e,Math.max(n,t)),ha=t=>{let{start:n,end:e}=t;if(n>e){const r=n;n=e,e=r}return{start:Gn(n,0,100),end:Gn(e,0,100)}};function Ta(t,n,e){const r=(e==null?void 0:e.height)??32,i=(e==null?void 0:e.marginTop)??8,s=(e==null?void 0:e.zIndex)??4,o=(e==null?void 0:e.showPreview)??!1,c=document.createElement("div");c.style.display="block",c.style.width="100%",c.style.height=`${r}px`,c.style.marginTop=`${i}px`,c.style.boxSizing="border-box",c.style.position="relative",c.style.zIndex=`${s}`,c.style.userSelect="none",c.style.touchAction="none";const u=document.createElement("div");u.style.position="relative",u.style.height="100%",u.style.width="100%",u.style.boxSizing="border-box",u.style.borderRadius="8px",u.style.borderStyle="solid",u.style.borderWidth="1px",u.style.overflow="hidden",c.appendChild(u);const a=document.createElement("div");a.style.position="absolute",a.style.inset="0",a.style.pointerEvents="none",a.style.opacity="0.4",a.style.display=o?"block":"none",u.appendChild(a);const b=document.createElement("div");b.style.position="absolute",b.style.top="0",b.style.bottom="0",b.style.left="0%",b.style.width="100%",b.style.boxSizing="border-box",b.style.cursor="grab",u.appendChild(b);const f=document.createElement("div");f.style.position="absolute",f.style.left="0",f.style.top="0",f.style.bottom="0",f.style.width="10px",f.style.cursor="ew-resize",b.appendChild(f);const l=document.createElement("div");l.style.position="absolute",l.style.right="0",l.style.top="0",l.style.bottom="0",l.style.width="10px",l.style.cursor="ew-resize",b.appendChild(l);const w=document.createElement("div");w.style.position="absolute",w.style.left="10px",w.style.right="10px",w.style.top="0",w.style.bottom="0",w.style.cursor="grab",b.appendChild(w),t.appendChild(c);let S=!1,R=null;const T=y=>{const A=ha(y),P=Gn(A.end-A.start,0,100);b.style.left=`${A.start}%`,b.style.width=`${P}%`},v=()=>{const y=u.getBoundingClientRect().width;return Number.isFinite(y)&&y>0?y:null},h=y=>{const A=v();if(A===null)return null;const P=y/A*100;return Number.isFinite(P)?P:null},F=(y,A)=>{try{y.setPointerCapture(A)}catch{}},d=(y,A)=>{try{y.releasePointerCapture(A)}catch{}},m=(y,A)=>{if(S||y.button!==0)return;y.preventDefault(),R==null||R(),R=null;const P=y.clientX,_=n.getRange(),L=y.currentTarget instanceof Element?y.currentTarget:b;F(L,y.pointerId),A==="pan-window"&&(b.style.cursor="grabbing",w.style.cursor="grabbing");const D=Q=>{if(S||Q.pointerId!==y.pointerId)return;Q.preventDefault();const it=h(Q.clientX-P);if(it!==null)switch(A){case"left-handle":{const X=Math.min(_.end,_.start+it);n.setRange(X,_.end);return}case"right-handle":{const X=Math.max(_.start,_.end+it);n.setRange(_.start,X);return}case"pan-window":{n.pan(it);return}}};let V=!1;const $=()=>{V||(V=!0,window.removeEventListener("pointermove",D),window.removeEventListener("pointerup",k),window.removeEventListener("pointercancel",k),A==="pan-window"&&(b.style.cursor="grab",w.style.cursor="grab"),d(L,y.pointerId),R===$&&(R=null))},k=Q=>{Q.pointerId===y.pointerId&&$()};R=$,window.addEventListener("pointermove",D,{passive:!1}),window.addEventListener("pointerup",k,{passive:!0}),window.addEventListener("pointercancel",k,{passive:!0})},p=y=>m(y,"left-handle"),x=y=>m(y,"right-handle"),N=y=>m(y,"pan-window");f.addEventListener("pointerdown",p,{passive:!1}),l.addEventListener("pointerdown",x,{passive:!1}),w.addEventListener("pointerdown",N,{passive:!1});const M=n.onChange(y=>{S||T(y)});return T(n.getRange()),{update:y=>{if(S)return;u.style.background=y.backgroundColor,u.style.borderColor=y.axisLineColor,a.style.background=y.gridLineColor,b.style.background=y.gridLineColor,b.style.border=`1px solid ${y.axisTickColor}`,b.style.borderRadius="8px",b.style.boxSizing="border-box";const A=`1px solid ${y.axisLineColor}`;f.style.background=y.axisTickColor,f.style.borderRight=A,l.style.background=y.axisTickColor,l.style.borderLeft=A,w.style.background="transparent",w.style.backgroundImage="linear-gradient(90deg, rgba(255,255,255,0.0) 0, rgba(255,255,255,0.0) 42%, rgba(255,255,255,0.18) 42%, rgba(255,255,255,0.18) 46%, rgba(255,255,255,0.0) 46%, rgba(255,255,255,0.0) 54%, rgba(255,255,255,0.18) 54%, rgba(255,255,255,0.18) 58%, rgba(255,255,255,0.0) 58%, rgba(255,255,255,0.0) 100%)",w.style.mixBlendMode="normal"},dispose:()=>{if(!S){S=!0,R==null||R(),R=null;try{M()}catch{}f.removeEventListener("pointerdown",p),l.removeEventListener("pointerdown",x),w.removeEventListener("pointerdown",N),c.remove()}}}}export{Sa as a,Ta as b,Os as c,oa as d,Xr as e,Wr as f,va as r};
@@ -0,0 +1 @@
1
+ import"./GPUContext-CgqhC6W6.js";import{d as D}from"./createDataZoomSlider-DLbAKjVh.js";import{C as E}from"./ChartGPU-zgkjfPqp.js";import"./scales-D-5MHN10.js";import"./pie-c06rKDKR.js";const x=e=>{const t=document.getElementById("error");t&&(t.textContent=e,t.style.display="block")},u=e=>{const t=document.getElementById("status");t&&(t.textContent=e)},w=e=>{let t=e>>>0||1;return()=>(t=1664525*t+1013904223>>>0,t/4294967295)},P=(e,t,n)=>Math.max(t,Math.min(n,e)),I={...D,backgroundColor:"#0f0f14",gridLineColor:"rgba(255,255,255,0.06)",axisLineColor:"rgba(224,224,224,0.14)",axisTickColor:"rgba(224,224,224,0.22)",textColor:"rgba(224,224,224,0.78)"},U=[{name:"Compute",color:"#00E5FF",base:42},{name:"Memory",color:"#FF2D95",base:30},{name:"Raster",color:"#B026FF",base:18},{name:"Upload",color:"#00F5A0",base:12},{name:"Sync",color:"#FFD300",base:9},{name:"Other",color:"#FF6B00",base:6}],C=(e,t,n)=>{const o=Math.max(8,Math.floor(e)),r=new Array(o),a=new Array(o),d=Math.PI*2;for(let i=0;i<o;i++){const c=i/(o-1),l=i,f=(t()-.5)*.18,s=n.offset+Math.sin(c*d+n.phase)*n.amplitude+f,m=n.offset*.4+Math.cos(c*d*.75+n.phase*.6)*(n.amplitude*.9)+(t()-.5)*.35;a[i]=[l,s],r[i]=[l,m]}return{bars:r,line:a}},A=e=>U.map(t=>{const n=.35+e()*1.65,o=Math.max(.1,t.base*n);return{name:t.name,value:o,color:t.color}}),z=e=>e?{duration:700,easing:"cubicInOut",delay:0}:!1,F=(e,t)=>{const n=e.line.length;return{grid:{left:70,right:120,top:24,bottom:56},xAxis:{type:"value",min:0,max:Math.max(1,n-1),name:"Index (match-by-index)"},yAxis:{type:"value",name:"Value (auto domain)"},theme:I,tooltip:{show:!0,trigger:"axis"},animation:t,series:[{type:"bar",name:"Bars",data:e.bars,color:"#4a9eff",barWidth:"72%",barGap:.2,barCategoryGap:.25},{type:"line",name:"Line",data:e.line,color:"#ff4ab0",lineStyle:{width:2,opacity:1}}]}},L=(e,t)=>({grid:{left:24,right:120,top:24,bottom:24},xAxis:{type:"value",min:0,max:1,tickLength:0,name:""},yAxis:{type:"value",min:0,max:1,tickLength:0,name:""},theme:I,tooltip:{show:!0,trigger:"item"},animation:t,series:[{type:"pie",name:"Breakdown",color:"#00E5FF",radius:["36%","74%"],center:["50%","50%"],startAngle:90,data:e}]}),H=(e,t)=>{let n=null;const o=()=>{n===null&&(n=requestAnimationFrame(()=>{n=null;for(const a of t)a.resize()}))},r=new ResizeObserver(()=>o());for(const a of e)r.observe(a);return r};async function M(){const e=document.getElementById("chart-cartesian"),t=document.getElementById("chart-pie");if(!(e instanceof HTMLElement)||!(t instanceof HTMLElement))throw new Error("Chart containers not found");const n=document.getElementById("btn-update"),o=document.getElementById("toggle-animate"),r=document.getElementById("toggle-auto");if(!(n instanceof HTMLButtonElement))throw new Error("Update button not found");if(!(o instanceof HTMLInputElement))throw new Error("Animate toggle not found");if(!(r instanceof HTMLInputElement))throw new Error("Auto toggle not found");const a=w(1),d=C(64,a,{phase:0,amplitude:1.2,offset:0}),i=A(a),c=await E.create(e,F(d,!1)),l=await E.create(t,L(i,!1)),f=H([e,t],[c,l]);c.resize(),l.resize();let s=0;const m=B=>{s++;const p=w(1e3+s*97),v=s*.7,g=.9+s%4*.65,b=(s%2===0?-.35:.55)+(p()-.5)*.15,O=C(64,p,{phase:v,amplitude:g,offset:b}),S=A(p),y=z(o.checked);c.setOption(F(O,y)),l.setOption(L(S,y));const T=o.checked?"animated":"instant";u(`Updated (${B}, ${T}) · step ${s} · amp ${g.toFixed(2)} · offset ${P(b,-5,5).toFixed(2)}`)};n.addEventListener("click",()=>m("manual")),o.addEventListener("change",()=>{u(o.checked?"Animations enabled (next update).":"Animations disabled (next update).")}),u("Initial render (animation off)."),r.checked&&(u("Initial render (animation off). Auto update scheduled…"),window.setTimeout(()=>m("auto"),1e3));let h=!1;const k=()=>{h||(h=!0,f.disconnect(),c.dispose(),l.dispose())};window.addEventListener("beforeunload",k)}document.readyState==="loading"?document.addEventListener("DOMContentLoaded",()=>{M().catch(e=>{console.error(e),x(e instanceof Error?e.message:String(e))})}):M().catch(e=>{console.error(e),x(e instanceof Error?e.message:String(e))});
@@ -0,0 +1 @@
1
+ import{g as D,c as k,i as A}from"./GPUContext-CgqhC6W6.js";import{c as O,a as C,b as z}from"./scales-D-5MHN10.js";async function P(){var E;const s=document.getElementById("canvas");if(!s)throw new Error("Canvas element not found");const d=document.getElementById("horizontal"),p=document.getElementById("vertical"),g=document.getElementById("horizontal-value"),h=document.getElementById("vertical-value");if(!d||!p||!g||!h)throw new Error("Control elements not found");let n=null,f=null,t=null,o=null,a=null,i=parseInt(d.value,10),l=parseInt(p.value,10);try{let r=function(){if(!n||!t)return;const m=D(n).createView(),y=c.createCommandEncoder(),R={colorAttachments:[{view:m,clearValue:{r:.1,g:.1,b:.15,a:1},loadOp:"clear",storeOp:"store"}]},v=y.beginRenderPass(R);t.render(v),o==null||o.render(v),a==null||a.render(v),v.end(),c.queue.submit([y.finish()]),f=requestAnimationFrame(r)};const x=k(s);n=await A(x);const w=n.device;if(!w)throw new Error("WebGPU device not available after GPUContext initialization.");const c=w;t=O(c,{targetFormat:n.preferredFormat??"bgra8unorm"});const e={left:60,right:20,top:40,bottom:40,canvasWidth:s.width,canvasHeight:s.height},u=window.devicePixelRatio||1,I=e.left*u,L=e.canvasWidth-e.right*u,G=e.top*u,S=e.canvasHeight-e.bottom*u,W=I/e.canvasWidth*2-1,B=L/e.canvasWidth*2-1,F=1-G/e.canvasHeight*2,U=1-S/e.canvasHeight*2,V=C().domain(0,100).range(W,B),H=C().domain(0,100).range(U,F);o=z(c),a=z(c),t.prepare(e,{horizontal:i,vertical:l}),o.prepare({type:"value",tickLength:6},V,"x",e),a.prepare({type:"value",tickLength:6},H,"y",e);const b=()=>{g.textContent=i.toString(),h.textContent=l.toString()};d.addEventListener("input",()=>{i=parseInt(d.value,10),b(),t&&t.prepare(e,{horizontal:i,vertical:l})}),p.addEventListener("input",()=>{l=parseInt(p.value,10),b(),t&&t.prepare(e,{horizontal:i,vertical:l})}),r(),window.addEventListener("beforeunload",()=>{var m;f!==null&&cancelAnimationFrame(f),t&&t.dispose(),o&&o.dispose(),a&&a.dispose(),n&&((m=n.device)==null||m.destroy())})}catch(r){console.error("Failed to initialize WebGPU:",r),r instanceof Error?alert(`WebGPU Error: ${r.message}`):alert("Failed to initialize WebGPU. Please check browser compatibility."),t&&t.dispose(),o&&o.dispose(),a&&a.dispose(),n&&((E=n.device)==null||E.destroy())}}document.readyState==="loading"?document.addEventListener("DOMContentLoaded",P):P();
@@ -0,0 +1 @@
1
+ import"./GPUContext-CgqhC6W6.js";import{C as f}from"./ChartGPU-zgkjfPqp.js";import"./createDataZoomSlider-DLbAKjVh.js";import"./scales-D-5MHN10.js";import"./pie-c06rKDKR.js";const c=e=>{const t=document.getElementById("error");t&&(t.textContent=e,t.style.display="block")},s=(e,t)=>e.map((a,o)=>[a,t[o]??0]);async function d(){const e=document.getElementById("chart");if(!e)throw new Error("Chart container not found");const t=[0,1,2,3,4,5],a=s(t,[8,6,-3,5,2,-2]),o=s(t,[5,-1,-2,3,-4,1]),m=s(t,[2,3,1,-2,6,-5]),l={grid:{left:70,right:24,top:24,bottom:56},xAxis:{type:"value",min:-.75,max:5.75,name:"Category (x)"},yAxis:{type:"value",min:-6,max:10,name:"Value (y)"},palette:["#4a9eff","#ff4ab0","#40d17c"],tooltip:{show:!0,trigger:"axis"},animation:{duration:900,easing:"cubicOut",delay:0},series:[{type:"bar",name:"Series A",data:a,color:"#4a9eff",stack:"s1",barWidth:"70%",barGap:.25,barCategoryGap:.35},{type:"bar",name:"Series B",data:o,color:"#ff4ab0",stack:"s1"},{type:"bar",name:"Series C",data:m,color:"#40d17c"}]},n=await f.create(e,l);let r=!1;const i=new ResizeObserver(()=>{r||(r=!0,requestAnimationFrame(()=>{r=!1,n.resize()}))});i.observe(e),n.resize(),window.addEventListener("beforeunload",()=>{i.disconnect(),n.dispose()})}document.readyState==="loading"?document.addEventListener("DOMContentLoaded",()=>{d().catch(e=>{console.error(e),c(e instanceof Error?e.message:String(e))})}):d().catch(e=>{console.error(e),c(e instanceof Error?e.message:String(e))});
@@ -0,0 +1,9 @@
1
+ import{G as W}from"./GPUContext-CgqhC6W6.js";import{l as G,a as U,s as F,p as j}from"./pie-c06rKDKR.js";function x(e,r,f){e=(e%360+360)%360,r=r/100,f=f/100;const s=(1-Math.abs(2*f-1))*r,c=s*(1-Math.abs(e/60%2-1)),d=f-s/2;let l=0,n=0,i=0;return e>=0&&e<60?(l=s,n=c,i=0):e>=60&&e<120?(l=c,n=s,i=0):e>=120&&e<180?(l=0,n=s,i=c):e>=180&&e<240?(l=0,n=c,i=s):e>=240&&e<300?(l=c,n=0,i=s):e>=300&&e<360&&(l=s,n=0,i=c),[l+d,n+d,i+d]}async function C(){var s,c,d,l;const e=document.getElementById("canvas");if(!e)throw new Error("Canvas element not found");let r=null,f=null;try{let n=function(){if(!r)return;const a=(performance.now()-P)/E*360%360,[o,t,v]=x(a,M,I);r.clearScreen(o,t,v,S),f=requestAnimationFrame(n)};r=await W.create(e);const i=r.device;if(!i)throw new Error("WebGPU device not available after GPUContext initialization");const g=i.createShaderModule({code:G,label:"line.wgsl"}),p=(s=g.getCompilationInfo)==null?void 0:s.bind(g);if(p){const a=(await p()).messages.filter(o=>o.type==="error");if(a.length>0){const o=a.map(t=>`${t.lineNum??0}:${t.linePos??0} ${t.message}`).join(`
2
+ `);throw new Error(`line.wgsl compilation failed:
3
+ ${o}`)}}const w=i.createShaderModule({code:U,label:"area.wgsl"}),u=(c=w.getCompilationInfo)==null?void 0:c.bind(w);if(u){const a=(await u()).messages.filter(o=>o.type==="error");if(a.length>0){const o=a.map(t=>`${t.lineNum??0}:${t.linePos??0} ${t.message}`).join(`
4
+ `);throw new Error(`area.wgsl compilation failed:
5
+ ${o}`)}}const b=i.createShaderModule({code:F,label:"scatter.wgsl"}),$=(d=b.getCompilationInfo)==null?void 0:d.bind(b);if($){const a=(await $()).messages.filter(o=>o.type==="error");if(a.length>0){const o=a.map(t=>`${t.lineNum??0}:${t.linePos??0} ${t.message}`).join(`
6
+ `);throw new Error(`scatter.wgsl compilation failed:
7
+ ${o}`)}}const h=i.createShaderModule({code:j,label:"pie.wgsl"}),y=(l=h.getCompilationInfo)==null?void 0:l.bind(h);if(y){const a=(await y()).messages.filter(o=>o.type==="error");if(a.length>0){const o=a.map(t=>`${t.lineNum??0}:${t.linePos??0} ${t.message}`).join(`
8
+ `);throw new Error(`pie.wgsl compilation failed:
9
+ ${o}`)}}const P=performance.now(),E=4e3,M=100,I=50,S=1;n(),window.addEventListener("beforeunload",()=>{f!==null&&cancelAnimationFrame(f),r&&r.destroy()})}catch(n){console.error("Failed to initialize WebGPU:",n),n instanceof Error?alert(`WebGPU Error: ${n.message}`):alert("Failed to initialize WebGPU. Please check browser compatibility."),r&&r.destroy()}}document.readyState==="loading"?document.addEventListener("DOMContentLoaded",C):C();
@@ -0,0 +1,14 @@
1
+ import"./GPUContext-CgqhC6W6.js";import{C as x}from"./ChartGPU-zgkjfPqp.js";import{c as E}from"./createChartSync-BUGadH_x.js";import"./createDataZoomSlider-DLbAKjVh.js";import"./scales-D-5MHN10.js";import"./pie-c06rKDKR.js";const w=t=>{const e=document.getElementById("error");e&&(e.textContent=t,e.style.display="block")},v=t=>t.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;").replace(/'/g,"&#39;"),k=new Intl.DateTimeFormat(void 0,{year:"numeric",month:"short",day:"2-digit",hour:"2-digit",minute:"2-digit",second:"2-digit"}),F=new Intl.NumberFormat(void 0,{maximumFractionDigits:4}),P=t=>{const e=t[0];if(!e)return"";const c=e.value[0],a=k.format(new Date(c)),o=t.map(n=>{const l=v(n.seriesName),d=n.value[1],m=Number.isFinite(d)?F.format(d):"—";return`
2
+ <div style="display:flex;align-items:center;justify-content:space-between;gap:12px;min-width:220px;">
3
+ <div style="display:flex;align-items:center;gap:8px;min-width:0;">
4
+ <span style="width:10px;height:10px;border-radius:2px;background:${n.color};display:inline-block;flex:0 0 auto;"></span>
5
+ <span style="overflow:hidden;text-overflow:ellipsis;white-space:nowrap;">${l}</span>
6
+ </div>
7
+ <div style="font-variant-numeric: tabular-nums; opacity:0.95;">${m}</div>
8
+ </div>
9
+ `.trim()}).join("");return`
10
+ <div style="display:flex;flex-direction:column;gap:8px;">
11
+ <div style="font-weight:600; opacity:0.95;">${v(a)}</div>
12
+ <div style="display:flex;flex-direction:column;gap:6px;">${o}</div>
13
+ </div>
14
+ `.trim()},y=(t,e)=>{const c=Math.max(2,Math.floor(t)),a=new Array(c);for(let o=0;o<c;o++){const n=e.startMs+o*e.stepMs,l=e.fn(o);a[o]=[n,l]}return a},B=(t,e)=>{let c=null;const a=()=>{c===null&&(c=requestAnimationFrame(()=>{c=null;for(const n of e)n.resize()}))},o=new ResizeObserver(()=>a());for(const n of t)o.observe(n);return o},M=(t,e,c,a)=>{const o=i=>Array.isArray(i)&&i.length>=2,n=i=>o(i)?i[0]:i.x,l=e[0],d=e.length>0?e[e.length-1]:void 0,m=l?n(l):Date.now(),h=d?n(d):m+1;return{grid:{left:70,right:24,top:24,bottom:40},xAxis:{type:"time",min:m,max:h,name:"Time"},yAxis:{type:"value",name:t},palette:a,tooltip:{trigger:"axis",formatter:P},dataZoom:[{type:"inside"},{type:"slider"}],animation:{duration:900,easing:"cubicOut",delay:0},series:[{type:"line",name:`${t} A`,data:e,color:a[0],areaStyle:{opacity:.22},lineStyle:{width:2,opacity:1}},{type:"line",name:`${t} B`,data:c,color:a[1],areaStyle:{opacity:.16},lineStyle:{width:2,opacity:1}}]}};async function b(){const t=document.querySelector("#chart-top"),e=document.querySelector("#chart-bottom");if(!(t instanceof HTMLElement)||!(e instanceof HTMLElement))throw new Error("Chart containers not found");const a=Date.now()-1e3*60*60*24*14,o=800,n=1e3*60*30,l=y(o,{startMs:a,stepMs:n,fn:r=>{const s=r/(o-1),p=Math.sin(s*Math.PI*8),f=s*1.2;return 40+12*p+18*f}}),d=y(o,{startMs:a,stepMs:n,fn:r=>{const s=r/(o-1),p=Math.cos(s*Math.PI*6+.7),f=Math.max(0,Math.sin(s*Math.PI*18))*10;return 30+10*p+f+s*10}}),m=y(o,{startMs:a,stepMs:n,fn:r=>{const s=r/(o-1);return 120+35*(Math.sin(s*Math.PI*10)*Math.cos(s*Math.PI*3))-s*20}}),h=y(o,{startMs:a,stepMs:n,fn:r=>{const s=r/(o-1),p=Math.sin(s*Math.PI*2.5+1.1),f=Math.pow(s,2)*25;return 95+22*p+f}}),i=await x.create(t,M("Top",l,d,["#4a9eff","#ff4ab0"])),u=await x.create(e,M("Bottom",m,h,["#40d17c","#ffd166"]));i.on("click",r=>console.log("[top click]",r)),u.on("click",r=>console.log("[bottom click]",r));const T=E([i,u]),I=B([t,e],[i,u]);i.resize(),u.resize();let g=!1;const S=()=>{g||(g=!0,I.disconnect(),T(),i.dispose(),u.dispose())};window.addEventListener("beforeunload",S)}document.readyState==="loading"?document.addEventListener("DOMContentLoaded",()=>{b().catch(t=>{console.error(t),w(t instanceof Error?t.message:String(t))})}):b().catch(t=>{console.error(t),w(t instanceof Error?t.message:String(t))});
@@ -0,0 +1 @@
1
+ import"./GPUContext-CgqhC6W6.js";import{C as k}from"./ChartGPU-zgkjfPqp.js";import"./createDataZoomSlider-DLbAKjVh.js";import"./scales-D-5MHN10.js";import"./pie-c06rKDKR.js";const y=t=>{const o=document.getElementById("error");o&&(o.textContent=t,o.style.display="block")},E=(t,o)=>{const a=document.getElementById(t);a&&(a.textContent=o)},T=t=>new Intl.NumberFormat(void 0).format(Math.max(0,Math.floor(t))),C=t=>t?`${t.start.toFixed(1)}% → ${t.end.toFixed(1)}%`:"—",L={pointsPerTick:12,tickMs:60,maxPoints:25e3},x=(t,o)=>({grid:{left:70,right:24,top:24,bottom:44},xAxis:{type:"value",name:"t"},yAxis:{type:"value",name:"value"},tooltip:{trigger:"axis"},autoScroll:o,dataZoom:[{type:"inside"},{type:"slider",start:70,end:100}],palette:["#4a9eff"],animation:!1,series:[{type:"line",name:"stream",data:t,color:"#4a9eff",lineStyle:{width:2,opacity:1},sampling:"lttb",samplingThreshold:2500}]}),B=(t,o)=>{let a=null;const r=new ResizeObserver(()=>{a===null&&(a=requestAnimationFrame(()=>{a=null,o.resize()}))});return r.observe(t),r},w=t=>{const o=Math.max(2,Math.floor(t)),a=new Array(o);for(let r=0;r<o;r++){const e=r*.02,i=Math.sin(e)*.8+Math.sin(e*.23+1.2)*.25;a[r]=[e,i]}return a};async function M(){const t=document.getElementById("chart"),o=document.getElementById("autoScroll"),a=document.getElementById("reset");if(!(t instanceof HTMLElement))throw new Error("Chart container not found");if(!(o instanceof HTMLInputElement))throw new Error("autoScroll control not found");if(!(a instanceof HTMLButtonElement))throw new Error("reset control not found");let r=L,e=w(800),i=(()=>{const n=e[e.length-1];if(!n)return 0;const s=Array.isArray(n)?n[0]:n.x;return Number.isFinite(s)?s:0})(),m=!0;o.checked=m;let u=x(e,m);const l=await k.create(t,u),v=B(t,l);l.resize();const f=()=>{u=x(e,m),l.setOption(u)};o.addEventListener("change",()=>{m=o.checked===!0,f()});const A=()=>{e=w(800);const n=e[e.length-1],s=n?Array.isArray(n)?n[0]:n.x:0;i=Number.isFinite(s)?s:0,f()};a.addEventListener("click",A);let c=null;const I=()=>{c===null&&(c=window.setInterval(()=>{const n=new Array(r.pointsPerTick);for(let s=0;s<r.pointsPerTick;s++){i+=.02;const b=Math.sin(i)*.8+Math.sin(i*.23+1.2)*.25+Math.sin(i*2.1)*.08+(Math.random()-.5)*.04;n[s]=[i,b]}l.appendData(0,n),e.push(...n),e.length>r.maxPoints&&(e=e.slice(e.length-r.maxPoints),f())},r.tickMs))},F=()=>{c!==null&&(window.clearInterval(c),c=null)};I();let d=null,h="";const p=()=>{const n=l.getZoomRange(),s=`${e.length}:${n?`${n.start.toFixed(2)}:${n.end.toFixed(2)}`:"null"}`;s!==h&&(h=s,E("pointCount",T(e.length)),E("zoomRange",C(n))),d=requestAnimationFrame(p)};d=requestAnimationFrame(p);let g=!1;const S=()=>{g||(g=!0,F(),d!==null&&cancelAnimationFrame(d),v.disconnect(),l.dispose())};window.addEventListener("beforeunload",S)}document.readyState==="loading"?document.addEventListener("DOMContentLoaded",()=>{M().catch(t=>{console.error(t),y(t instanceof Error?t.message:String(t))})}):M().catch(t=>{console.error(t),y(t instanceof Error?t.message:String(t))});
@@ -0,0 +1 @@
1
+ import{G as he}from"./GPUContext-CgqhC6W6.js";import{r as fe,a as j,b as pe}from"./createDataZoomSlider-DLbAKjVh.js";import"./scales-D-5MHN10.js";import"./pie-c06rKDKR.js";const N=s=>{const o=document.getElementById("error");o&&(o.textContent=s,o.style.display="block")},S=(s,o)=>{const r=document.getElementById(s);r&&(r.textContent=o)},J=(()=>{const s=new Intl.NumberFormat(void 0);return o=>s.format(Math.max(0,Math.floor(o)))})(),_=1e6,ge=_-1,ee=32,te=8,ne=ee+te,K=8192,Te=(s,o,r)=>Math.min(r,Math.max(o,s)),Me=s=>{var o;return((o=s.dataZoom)==null?void 0:o.some(r=>(r==null?void 0:r.type)==="slider"))??!1},Q=s=>{const o={...fe(s),tooltip:s.tooltip};return Me(s)?{...o,grid:{...o.grid,bottom:o.grid.bottom+ne}}:o},ye=()=>{const s=new Array(_),o=.012,r=.0017,a=.35;let t=305419896;const e=()=>(t^=t<<13,t^=t>>>17,t^=t<<5,(t>>>0)/4294967296);let l=Number.POSITIVE_INFINITY,c=Number.NEGATIVE_INFINITY;for(let m=0;m<_;m++){const p=m,g=Math.sin(m*o)*.95+Math.sin(m*r+1.1)*.6+(e()-.5)*a;g<l&&(l=g),g>c&&(c=g),s[m]=[p,g]}(!Number.isFinite(l)||!Number.isFinite(c))&&(l=-2,c=2);const d=.05*(c-l||1);return{data:s,yMin:l-d,yMax:c+d}},Ee=(s,o)=>{const e=Math.max(.001,Math.min(1,o)),l=Number.isFinite(s)?Math.max(1,s|0):1,c=Math.min(2e5,Math.max(2,l*32)),d=Math.round(l/e);return Te(d|0,2,c)},Ie=(s,o,r,a)=>{const t=(o==null?void 0:o.start)??0,e=(o==null?void 0:o.end)??100,l=Math.max(0,Math.min(1,(e-t)/100)),c=Math.max(2,Math.floor(s*l));if(r==="none")return c;const d=Ee(a,l);return Math.min(c,d)},P=s=>{const o=new Float64Array(Math.max(1,s|0));let r=0,a=0,t=0;return{push(e){const l=Number.isFinite(e)?e:0;if(a<o.length){o[r]=l,t+=l,a++,r=(r+1)%o.length;return}const c=o[r];o[r]=l,t+=l-c,r=(r+1)%o.length},mean(){return a===0?0:t/a}}};async function z(){var Y;const s=document.getElementById("chart");if(!(s instanceof HTMLElement))throw new Error("Chart container (#chart) not found");const o=document.getElementById("samplingEnabled"),r=document.getElementById("resetZoom");if(!(o instanceof HTMLInputElement))throw new Error("samplingEnabled checkbox not found");if(!(r instanceof HTMLButtonElement))throw new Error("resetZoom button not found");S("pointCount",J(_));const a=document.createElement("canvas");a.style.display="block",a.style.width="100%",a.style.height="100%",s.appendChild(a);let t=null,e=null,l=null,c=null,d=null,m=null,p=null,g=null;const{data:se,yMin:oe,yMax:ae}=ye(),L=n=>({grid:{left:70,right:24,top:24,bottom:44},xAxis:{type:"value",min:0,max:ge,name:"Index"},yAxis:{type:"value",min:oe,max:ae,name:"Value"},tooltip:{show:!1},dataZoom:[{type:"inside"},{type:"slider"}],palette:["#4a9eff"],animation:!1,series:[{type:"line",name:"1,000,000 points",data:se,color:"#4a9eff",lineStyle:{width:1,opacity:1},sampling:n,samplingThreshold:K}]});let v=o.checked?"lttb":"none",R=L(v),y=Q(R);const re=()=>{if(d)return d;try{window.getComputedStyle(s).position==="static"&&(s.style.position="relative")}catch{}const n=document.createElement("div");return n.style.position="absolute",n.style.left="0",n.style.right="0",n.style.bottom="0",n.style.height=`${ne}px`,n.style.paddingTop=`${te}px`,n.style.boxSizing="border-box",n.style.pointerEvents="auto",n.style.zIndex="5",s.appendChild(n),d=n,n},ie=()=>{m==null||m.dispose(),m=null,d==null||d.remove(),d=null,p==null||p(),p=null},le=()=>({getRange:()=>(e==null?void 0:e.getZoomRange())??{start:0,end:100},setRange:(h,f)=>e==null?void 0:e.setZoomRange(h,f),pan:h=>{const f=e==null?void 0:e.getZoomRange();!f||!Number.isFinite(h)||e==null||e.setZoomRange(f.start+h,f.end+h)},zoomIn:()=>{},zoomOut:()=>{},onChange:h=>(e==null?void 0:e.onZoomRangeChange(h))??(()=>{})}),D=()=>{if(!(!e||!e.getZoomRange())){if(!m){const i=re();m=pe(i,le(),{height:ee,marginTop:0})}m.update(y.theme)}},b=()=>{var $;const n=a.getBoundingClientRect(),i=window.devicePixelRatio||1,u=(($=t==null?void 0:t.device)==null?void 0:$.limits.maxTextureDimension2D)??8192,E=Math.min(u,Math.max(1,Math.round(n.width*i))),I=Math.min(u,Math.max(1,Math.round(n.height*i))),M=a.width!==E||a.height!==I;M&&(a.width=E,a.height=I);const h=t==null?void 0:t.device,f=t==null?void 0:t.canvasContext,T=t==null?void 0:t.preferredFormat;!h||!f||!T||!(M||!c||c.width!==a.width||c.height!==a.height||c.format!==T)||(f.configure({device:h,format:T,alphaMode:"opaque"}),c={width:a.width,height:a.height,format:T},e&&l!==T&&(e.dispose(),e=j(t,y),l=T,D()))},ce=()=>{if(!t)return;const n=(e==null?void 0:e.getZoomRange())??null;e==null||e.dispose(),e=j(t,y),l=t.preferredFormat,n&&e.setZoomRange(n.start,n.end),p==null||p(),p=e.onZoomRangeChange(i=>{g={start:i.start,end:i.end}}),g=e.getZoomRange(),D()},me=(()=>{let n=null;const i=()=>{n===null&&(n=requestAnimationFrame(()=>{n=null,b()}))},u=new ResizeObserver(()=>i());return u.observe(s),u})();let w=null;const G=P(60),C=P(60),U=P(60);let A=!1,k=0,F=0,B=0,X="",q="",H="",V="";const de=n=>{if(n-B<250)return;B=n;const i=G.mean(),u=i>0?1e3/i:0,E=C.mean(),I=U.mean(),M=u>0?u.toFixed(1):"—",h=E>0?E.toFixed(2):"—",f=I>0?I.toFixed(2):"—",T=Ie(_,g,v,K),x=J(T);M!==q&&(q=M,S("fps",M)),h!==H&&(H=h,S("renderTimeMs",h)),f!==V&&(V=f,S("gpuTimeMs",f)),x!==X&&(X=x,S("renderedPointCount",x))},ue=n=>{const i=t==null?void 0:t.device;i&&(A||(A=!0,k=n,i.queue.onSubmittedWorkDone().then(()=>{if(A=!1,(t==null?void 0:t.device)!==i)return;const u=performance.now();U.push(u-k)}).catch(()=>{A=!1})))},W=n=>{if(w=requestAnimationFrame(W),F>0&&G.push(n-F),F=n,e&&(t!=null&&t.device)){const i=performance.now();e.render();const u=performance.now();C.push(u-i),ue(u)}de(n)};let O=!1;const Z=()=>{O||(O=!0,w!==null&&cancelAnimationFrame(w),me.disconnect(),ie(),e==null||e.dispose(),e=null,t==null||t.destroy(),t=null,a.remove())};try{b(),t=await he.create(a),(Y=t.device)==null||Y.lost.then(n=>{O||(n.reason!=="destroyed"&&console.warn("WebGPU device lost:",n),N("WebGPU device lost. This benchmark will stop."),Z())}),b(),ce(),o.addEventListener("change",()=>{const n=o.checked?"lttb":"none";if(n===v)return;v=n,R=L(v),y=Q(R);const i=(e==null?void 0:e.getZoomRange())??null;e==null||e.setOptions(y),i&&(e==null||e.setZoomRange(i.start,i.end)),m==null||m.update(y.theme)}),r.addEventListener("click",()=>{e==null||e.setZoomRange(0,100)}),w=requestAnimationFrame(W),window.addEventListener("beforeunload",Z)}catch(n){throw Z(),n}}document.readyState==="loading"?document.addEventListener("DOMContentLoaded",()=>{z().catch(s=>{console.error(s),N(s instanceof Error?s.message:String(s))})}):z().catch(s=>{console.error(s),N(s instanceof Error?s.message:String(s))});
@@ -0,0 +1 @@
1
+ import"./GPUContext-CgqhC6W6.js";import{d}from"./createDataZoomSlider-DLbAKjVh.js";import{C as i}from"./ChartGPU-zgkjfPqp.js";import"./scales-D-5MHN10.js";import"./pie-c06rKDKR.js";const s=e=>{const t=document.getElementById("error");t&&(t.textContent=e,t.style.display="block")},u=(e,t)=>{let o=null;const r=()=>{o===null&&(o=requestAnimationFrame(()=>{o=null;for(const n of t)n.resize()}))},a=new ResizeObserver(()=>r());for(const n of e)a.observe(n);return a},f={...d,backgroundColor:"#0f0f14",gridLineColor:"rgba(255,255,255,0.06)",axisLineColor:"rgba(224,224,224,0.14)",axisTickColor:"rgba(224,224,224,0.22)",textColor:"rgba(224,224,224,0.78)"},g=[{name:"Compute",value:42,color:"#00E5FF"},{name:"Memory",value:30,color:"#FF2D95"},{name:"Raster",value:18,color:"#B026FF"},{name:"Upload",value:12,color:"#00F5A0"},{name:"Sync",value:9,color:"#FFD300"},{name:"Other",value:6,color:"#FF6B00"}],c=(e,t)=>({grid:{left:24,right:120,top:24,bottom:24},xAxis:{type:"value",min:0,max:1,tickLength:0,name:""},yAxis:{type:"value",min:0,max:1,tickLength:0,name:""},tooltip:{show:!0,trigger:"item"},theme:f,animation:{duration:900,easing:"cubicOut",delay:0},series:[{type:"pie",name:e,color:"#00E5FF",radius:t,center:["50%","50%"],startAngle:90,data:g}]});async function l(){const e=document.getElementById("chart-pie"),t=document.getElementById("chart-donut");if(!(e instanceof HTMLElement)||!(t instanceof HTMLElement))throw new Error("Chart containers not found");const o=await i.create(e,c("Pie (inner = 0)",[0,"72%"])),r=await i.create(t,c("Donut (inner > 0)",["40%","72%"])),a=u([e,t],[o,r]);o.resize(),r.resize();let n=!1;const m=()=>{n||(n=!0,a.disconnect(),o.dispose(),r.dispose())};window.addEventListener("beforeunload",m)}document.readyState==="loading"?document.addEventListener("DOMContentLoaded",()=>{l().catch(e=>{console.error(e),s(e instanceof Error?e.message:String(e))})}):l().catch(e=>{console.error(e),s(e instanceof Error?e.message:String(e))});