@kortexya/nodus 0.1.5 → 0.1.6

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 (35) hide show
  1. package/assets/hypergraphWorker-D-ulsXRM.js +1 -0
  2. package/assets/layoutWorker-C9xWGcvY.js +285 -0
  3. package/assets/nodus_wasm-DxYJZXfN.js +1 -0
  4. package/nodus.src.bundle.js +4177 -6075
  5. package/nodus_render_wasm-C4PGMrSp.js +2617 -0
  6. package/nodus_wasm-PO2Iq59v.js +2883 -0
  7. package/package.json +1 -1
  8. package/types/algorithms/force/SEC.d.ts +8 -8
  9. package/types/geometry/index.d.ts +3 -1
  10. package/types/hypergraph/Hypergraph.d.ts +9 -1
  11. package/types/hypergraph/index.d.ts +1 -4
  12. package/types/hypergraph/layout/Optimizer.d.ts +33 -1
  13. package/types/hypergraph/render/Interaction.d.ts +7 -0
  14. package/types/hypergraph/render/PolygonRenderer.d.ts +12 -0
  15. package/types/hypergraph/types.d.ts +16 -0
  16. package/types/internals/Hypergraph.d.ts +5 -0
  17. package/types/internals/Tooltip.d.ts +9 -1
  18. package/types/internals/TooltipPrimitives.d.ts +2 -0
  19. package/types/internals/algorithmExports.d.ts +4 -2
  20. package/types/internals/algorithmHelpers.d.ts +1 -11
  21. package/types/internals/helpers.d.ts +0 -1
  22. package/types/internals/labels/helpers.d.ts +6 -2
  23. package/types/internals/rendering/float16.d.ts +2 -1
  24. package/types/internals/rendering/packing.d.ts +5 -5
  25. package/types/modules/ToolsAPI.d.ts +1 -0
  26. package/types/tools/TooltipAPI.d.ts +13 -0
  27. package/assets/hypergraphWorker-DV0aFI3L.js +0 -1
  28. package/assets/layoutWorker-DwDJwbgr.js +0 -285
  29. package/assets/nodus_wasm-C0vDfO5K.js +0 -1
  30. package/nodus_render_wasm-Bs6hlsx-.js +0 -2617
  31. package/nodus_wasm-DKYQVSUZ.js +0 -2789
  32. package/types/algorithms/hierarchical/sugiyama.d.ts +0 -144
  33. package/types/hypergraph/layout/Adam.d.ts +0 -12
  34. package/types/hypergraph/layout/Energy.d.ts +0 -55
  35. package/types/hypergraph/layout/LBFGS.d.ts +0 -32
@@ -1,285 +0,0 @@
1
- const e=[`geometry`,`graph`,`attr`,`spatial`,`transform`,`layout`,`hyper`,`render`];function t(){let t={};for(let n of e)t[n]=`ts`;return t}let n=t();function r(r){if(n=t(),r){if(r.all===`ts`||r.all===`wasm`)for(let t of e)n[t]=r.all;for(let t of e){let e=r[t];(e===`ts`||e===`wasm`)&&(n[t]=e)}}}function i(e){return n[e]===`wasm`}let a=null;function o(){return a}function s(e){a=e}let c=null;function l(){return c||=new m(42),c}function u(e){let t=o();if(t&&t.alea_set_seed){typeof e==`number`?t.alea_set_seed(e):t.alea_set_seed_str(String(e));return}c=new m(e)}function d(){let e=o();return e&&e.alea_next?e.alea_next():l().next()}function f(){return 1e-6*(d()-.5)}function p(){let e=4022871197;return t=>{let n=t.toString();for(let t=0;t<n.length;t++){e+=n.charCodeAt(t);let r=.02519603282416938*e;e=r>>>0,r-=e,r*=e,e=r>>>0,r-=e,e+=r*4294967296}return(e>>>0)*23283064365386963e-26}}var m=class{c=1;s0;s1;s2;constructor(e){let t=p();this.s0=t(` `),this.s1=t(` `),this.s2=t(` `),this.s0-=t(e),this.s0<0&&(this.s0+=1),this.s1-=t(e),this.s1<0&&(this.s1+=1),this.s2-=t(e),this.s2<0&&(this.s2+=1)}next(){let e=2091639*this.s0+this.c*23283064365386963e-26;return this.s0=this.s1,this.s1=this.s2,this.s2=e-(this.c=e|0)}nextDouble(){return this.next()+(this.next()*2097152|0)*11102230246251565e-32}nextInt32(){return this.next()*4294967296|0}};function h(e,t,n){let{sources:r,targets:i,degrees:a,nodeIds:o,edgeIds:s}=n,c={};for(let t=0;t<e.length;t++)c[t]=o[t]=t;for(let e=0;e<t.length;e++){let{source:n,target:o}=t[e],l=c[n],u=c[o];s[e]=e,r[e]=l,i[e]=u,a[l]++,a[u]++}}function g(e){let{nodeIds:t,edgeIds:n,sources:r,targets:i,degrees:a,layer:o,layers:s,component:c,components:l,cluster:u,parent:d}=e,f=0,p=1,m=new Uint32Array(t.length);for(let e=0;e<t.length;e++)m[e]=a[e];let h=Array(t.length);for(let e=0;e<n.length;e++){let t=n[e],a=r[t],o=i[t];h[a]=h[a]||[],h[o]=h[o]||[],h[a].push(o),h[o].push(a)}let g=new Uint8Array(t.length);d.fill(-1);let _=0;for(let e=0;e<t.length;e++)if(g[e]===0){let t=[e];for(;t.length!==0;){let e=t.pop();if(g[e]===0&&h[e]!==void 0){let n=h[e];for(let e=0;e<n.length;e++)t.push(n[e])}g[e]=1,c[e]=_}_++}let v=Array(t.length);for(let e=0;e<t.length;e++)o[e]=0,v[e]=e;for(;v.length!==0;){let e=[],t=[];for(let n=0;n<v.length;n++)m[v[n]]<=f&&(e.push(n),t.push(v[n]));for(let e=0;e<t.length;e++){let n=t[e];o[n]=p;let r=h[n];if(r)for(let e=0;e<r.length;e++)m[r[e]]--}for(let e=0;e<t.length;e++){let n=t[e],r=h[n];if(r)for(let e=0;e<r.length;e++){let t=r[e],i=o[t];if(i===void 0||i>p){d[n]=t;break}}}e.reverse();for(let t=0;t<e.length;t++)v.splice(e[t],1);if(p+=1,v.length>0){let e=1/0;for(let t=0;t<v.length;t++){let n=m[v[t]];n<e&&(e=n)}e>=f+1&&(f=e,p=1)}}g.fill(0);for(let e=0;e<t.length;e++){let n=t[e],r=o[n];if(d[n]===-1||o[d[n]]===r){let e=[n];for(g.fill(0);e.length!==0;){let t=e.pop();if(g[t])continue;if(o[t]>r){d[n]=t;break}g[t]=1;let i=h[t];if(i)for(let t=0;t<i.length;t++)e.push(i[t])}}}for(let e=0;e<t.length;e++){let n=t[e],r=c[n];l[r]=l[r]||[],l[r].push(n);let i=o[n]-1;s[i]=s[i]||[],s[i].push(n),u[n]=d[n]}}function _(e,t,n){if(i(`layout`)){let r=o();if(r&&r.force_topology){let i=e.length,a=t.length,{sources:o,targets:s,degrees:c,nodeIds:l,edgeIds:u,layer:d,parent:f,cluster:p,component:m,components:h,layers:g}=n,_=new Uint32Array(a),v=new Uint32Array(a);for(let e=0;e<a;e++)_[e]=t[e].source,v[e]=t[e].target;for(let e=0;e<i;e++)l[e]=e;c.fill(0);for(let e=0;e<a;e++)u[e]=e,o[e]=_[e],s[e]=v[e],c[_[e]]++,c[v[e]]++;let y=r.force_topology(i,_,v);for(let e=0;e<i;e++){m[e]=y[e],d[e]=y[i+e];let t=y[2*i+e];f[e]=t===4294967295?-1:t}for(let e=0;e<i;e++){let t=m[e];h[t]=h[t]||[],h[t].push(e);let n=d[e]-1;g[n]=g[n]||[],g[n].push(e),p[e]=f[e]}return}}h(e,t,n),g(n)}var v=class{X;Y;R;fx;fy;vx;vy;pinned;masses;weights;lengths;sources;targets;degrees;layer;parent;cluster;component;components;layers;nodeIds;edgeIds;groups;maxR;cellSize;cells;hasGroups;movements;surfaces;movementsPrev;surfacesPrev;bucketSize=0;constructor(e,t=!0,n){let r=e.nodes.length,i=e.edges.length;if(u(r+i),this.X=new Float64Array(r),this.Y=new Float64Array(r),this.R=new Float64Array(r),this.fx=new Float32Array(r),this.fy=new Float32Array(r),this.vx=new Float32Array(r),this.vy=new Float32Array(r),this.pinned=new Uint8Array(r),this.masses=new Float32Array(r),this.weights=new Float32Array(i),this.lengths=new Float32Array(i),this.sources=new Uint32Array(i),this.targets=new Uint32Array(i),this.degrees=new Uint32Array(r),this.layer=new Uint32Array(r),this.parent=new Int32Array(r),this.cluster=new Int32Array(r),this.component=new Uint32Array(r),this.components=[],this.layers=[],this.nodeIds=Array(r),this.edgeIds=Array(i),this.groups=n&&n.groups||[],this.maxR=new Float32Array(Math.max(this.groups.length,1)),this.cellSize=0,this.cells=[],this.hasGroups=this.groups.length>0,this.hasGroups){this.nodeToGroup=new Int32Array(r);for(let t=0;t<this.groups.length;t++){let n=this.groups[t];this.cells[t]={minX:1/0,minY:1/0,maxX:-1/0,maxY:-1/0,ox:0,oy:0,cx:0,cy:0},this.maxR[t]=0;for(let r=0;r<n.length;r++){let i=n[r];this.nodeToGroup[i]=t,this.maxR[t]=Math.max(this.maxR[t],e.nodes[i].r)}}}t&&_(e.nodes,e.edges,this),this.movements=Array(this.layers.length).fill(0),this.surfaces=Array(this.layers.length).fill(0),this.movementsPrev=Array(this.layers.length).fill(0),this.surfacesPrev=Array(this.layers.length).fill(0)}nodeToGroup;updateGroups(){if(!this.hasGroups){this.cellSize=1/0;return}let{X:e,Y:t,groups:n,cells:r,maxR:i}=this,a=0;n.forEach((n,o)=>{let s=r[o];s.minX=1/0,s.minY=1/0,s.maxX=-1/0,s.maxY=-1/0,n.forEach(n=>{let r=e[n],i=t[n];s.minX=Math.min(r,s.minX),s.minY=Math.min(i,s.minY),s.maxX=Math.max(r,s.maxX),s.maxY=Math.max(i,s.maxY)});let c=i[o];s.minX-=c,s.minY-=c,s.maxX+=c,s.maxY+=c;let l=Math.abs(s.maxX-s.minX),u=Math.abs(s.maxY-s.minY);a=Math.max(a,l,u),s.cx=(s.maxX+s.minX)/2,s.cy=(s.maxY+s.minY)/2}),a=Math.ceil(a*2+1),this.cellSize=a;let o=Math.ceil(Math.sqrt(n.length)),s=o*a/2,c=a/2;for(let i=0;i<n.length;i++){let l=n[i],u=i%o,d=Math.floor(i/o),f=r[i],p=(u+.5)*a-s,m=(d+.5)*a-s,h=p-f.cx,g=m-f.cy;f.cx=p,f.cy=m,f.minX=p-c,f.minY=m-c,f.maxX=p+c,f.maxY=m+c;for(let n of l)e[n]+=h,t[n]+=g}}},y=class{left=null;right=null;data=null;code=null;cx=0;cy=0;r=0;mass=0;constructor(e,t,n,r){this.code=e,this.data=t,this.left=n,this.right=r}};const b=Math.clz32||function(e){let t=1<<31;for(let n=0;n<31;n+=1){if(t&e)return n;t>>>=1}return 32};function x(e,t,n,r){let i=t[e[n]],a=t[e[r]];if(i===a)return n;let o=b(i^a),s=n,c=r-n;do{c=c+1>>1;let n=s+c;if(n<r){let r=t[e[n]];b(i^r)>o&&(s=n)}}while(c>1);return s}function S(e,t,n,r,i){let a=new y(null,null,null,null),o=[a],s=[r,i];for(;o.length!==0;){let r=s.pop(),i=s.pop(),a=o.pop();if(r-i===0)a.code=n[i],a.data=e[t[i]];else{let e=x(t,n,i,r);a.code=e,i<=e&&(a.left=new y(null,null,null,null),o.push(a.left),s.push(i,e)),r>e&&(a.right=new y(null,null,null,null),o.push(a.right),s.push(e+1,r))}}return a}function C(e,t,n,r,i,a){let o=new y(null,null,null,null),s=[o],c=[r,i];for(;s.length!==0;){let r=c.pop(),i=c.pop(),o=s.pop();if(r-i<a){let a=Array(r-i+1);for(let n=i,o=0;n<=r;n++,o++)a[o]=e[t[n]];o.code=n[i],o.data=a}else{let e=x(t,n,i,r);o.code=e,i<=e&&(o.left=new y(null,null,null,null),s.push(o.left),c.push(i,e)),r>e&&(o.right=new y(null,null,null,null),s.push(o.right),c.push(e+1,r))}}return o}function w(e,t){let n=e^t,r=65535^n,i=65535^(e|t),a=e&(65535^t),o=n|r>>1,s=n>>1^n,c=i>>1^r&a>>1^i,l=n&i>>1^a>>1^a;n=o,r=s,i=c,a=l,o=n&n>>2^r&r>>2,s=n&r>>2^r&(n^r)>>2,c^=n&i>>2^r&a>>2,l^=r&i>>2^(n^r)&a>>2,n=o,r=s,i=c,a=l,o=n&n>>4^r&r>>4,s=n&r>>4^r&(n^r)>>4,c^=n&i>>4^r&a>>4,l^=r&i>>4^(n^r)&a>>4,n=o,r=s,i=c,a=l,c^=n&i>>8^r&a>>8,l^=r&i>>8^(n^r)&a>>8,n=c^c>>1,r=l^l>>1;let u=e^t,d=r|65535^(u|n);return u=16711935&(u|u<<8),u=252645135&(u|u<<4),u=858993459&(u|u<<2),u=1431655765&(u|u<<1),d=16711935&(d|d<<8),d=252645135&(d|d<<4),d=858993459&(d|d<<2),d=1431655765&(d|d<<1),(d<<1|u)>>>0}const T=[0,1],E=[0,2];for(let e=4;e<65535;e<<=2)for(let t=0,n=T.length;t<n;t++)T.push(T[t]|e),E.push((T[t]|e)<<1);function D(e,t){return(E[255&t]|T[255&e])+65536*(E[t>>8&255]|T[e>>8&255])+4294967296*(E[t>>16&255]|T[e>>16&255])}const O=new Uint32Array(1024);function k(e,t){if(i(`spatial`)){let n=o();if(n){e.set(n.spatial_radix_sort(t));return}}let n=t.length,r=new Uint32Array(n);for(let e=0;e<1024;e++)O[e]=0;for(let e=0;e<n;e++){let n=t[e];O[n&255]++,O[256+(n>>8&255)]++,O[512+(n>>16&255)]++,O[768+(n>>24&255)]++}for(let e=0;e<4;e++){let t=0,n=0,r=256*e;for(let e=0;e<256;e++)t=O[e+r],O[e+r]=n,n+=t}for(let e=0;e<n;e++){let n=t[e];r[O[n&255]++]=e}for(let i=0;i<n;i++){let n=r[i],a=t[n];e[O[256+(a>>8&255)]++]=n}for(let i=0;i<n;i++){let n=e[i],a=t[n];r[O[512+(a>>16&255)]++]=n}for(let i=0;i<n;i++){let n=r[i],a=t[n];e[O[768+(a>>24&255)]++]=n}}var A=class{bucketSize=0;_root=null;_minX=0;_minY=0;_maxX=0;_maxY=0;_hw=0;_hh=0;constructor(e,t){let{getX:n,getY:r,bucketSize:a=0,sfc:s=1}=t;this.bucketSize=a;let c=e.length,l=new Uint32Array(c),u=1/0,d=1/0,f=-1/0,p=-1/0,m=new Uint32Array(c),h=new Float64Array(c),g=new Float64Array(c);for(let t=0;t<c;t++){let i=e[t],a=n(i),o=r(i);a<u&&(u=a),o<d&&(d=o),a>f&&(f=a),o>p&&(p=o),h[t]=a,g[t]=o,m[t]=t}this._minX=u,this._minY=d,this._maxX=f,this._maxY=p;let _=65535/Math.max(f-u,1),v=65535/Math.max(p-d,1);this._hw=_,this._hh=v;let y=i(`spatial`)?o():null;if(y&&c>0){let e=y.spatial_bvh_codes_sorted(h,g,u,d,_,v,s);l.set(e.subarray(0,c)),m.set(e.subarray(c))}else{let e=s===1?w:D;for(let t=0;t<c;t++)l[t]=e(_*(h[t]-u),v*(g[t]-d));k(m,l)}this._root=a===0?S(e,m,l,0,c-1):C(e,m,l,0,c-1,a)}get root(){return this._root}preOrder(e){let t=[this._root];for(;t.length!==0;){let n=t.pop();n&&(e(n)||(n.right&&t.push(n.right),n.left&&t.push(n.left)))}return this}postOrder(e){let t=[],n=null,r=this._root;for(;t.length!==0||r;)if(r)t.push(r),r=r.left;else{let i=t[t.length-1];i.right&&n!==i.right?r=i.right:(e(i),n=t.pop())}return this}};function j(e,t,n){return{x:e,y:t,r:n}}function M(e,t,n,r,i,a){let o=r-e,s=i-t,c=a-n,l=Math.sqrt(o*o+s*s);return{x:(e+r+o/l*c)/2,y:(t+i+s/l*c)/2,r:(l+n+a)/2}}function N(e,t,n,r,i,a,o,s,c){let l=(e+r+o)/3,u=(t+i+s)/3,d=e-l,f=t-u,p=r-l,m=i-u,h=o-l,g=s-u,_=d-p,v=d-h,y=f-m,b=f-g,x=a-n,S=c-n,C=d*d+f*f-n*n,w=C-p*p-m*m+a*a,T=C-h*h-g*g+c*c,E=v*y-_*b,D=(y*T-b*w)/(2*E)-d,O=(b*x-y*S)/E,k=(_*T-v*w)/(2*E)-f,A=(v*x-_*S)/E,j=O*O+A*A-1,M=2*(n+D*O+k*A),N=D*D+k*k-n*n,P=-(Math.abs(j)>1e-6?(M+Math.sqrt(M*M-4*j*N))/(2*j):N/M);return{x:l+d+D+O*P,y:u+f+k+A*P,r:P}}function P(e,t,n,r){let i=e.r-r,a=t-e.x,o=n-e.y;return i>=0&&i*i>a*a+o*o}function ee(e,t,n,r){let i=e.r-r+1e-6,a=t-e.x,o=n-e.y;return i>0&&i*i>a*a+o*o}function F(e,t,n,r,i){for(let a=0;a<t.length;++a)if(!ee(e,n(t[a]),r(t[a]),i(t[a])))return!1;return!0}function I(e,t,n,r){return e.length===1?j(t(e[0]),n(e[0]),r(e[0])):e.length===2?M(t(e[0]),n(e[0]),r(e[0]),t(e[1]),n(e[1]),r(e[1])):N(t(e[0]),n(e[0]),r(e[0]),t(e[1]),n(e[1]),r(e[1]),t(e[2]),n(e[2]),r(e[2]))}function te(e){for(let t=e.length-1;t>=0;t--){let n=Math.floor(Math.random()*(t+1));n=Math.max(Math.min(n,t),0);let r=e[t];e[t]=e[n],e[n]=r}return e}function ne(e,t,n,r){let i=te(e.slice()),a=i.length,o,s=[],c=0;for(;c<a;){let e=i[c];o&&ee(o,t(e),n(e),r(e))?c++:(s=re(s,e,t,n,r),o=I(s,t,n,r),c=0)}return o}function re(e,t,n,r,i){let a=n(t),o=r(t),s=i(t),c={x:a,y:o,r:s};if(F(c,e,n,r,i))return[t];for(let l=0;l<e.length;++l){let u=e[l],d=M(n(u),r(u),i(u),a,o,s);if(!P(c,n(u),r(u),i(u))&&F(d,e,n,r,i))return[u,t]}for(let c=0;c<e.length-1;c++)for(let l=c+1;l<e.length;l++){let u=e[c],d=e[l],f=N(n(u),r(u),i(u),n(d),r(d),i(d),a,o,s);if(!P(M(n(u),r(u),i(u),n(d),r(d),i(d)),a,o,s)&&!P(M(n(u),r(u),i(u),a,o,s),n(d),r(d),i(d))&&!P(M(n(d),r(d),i(d),a,o,s),n(u),r(u),i(u))&&F(f,e,n,r,i))return[u,d,t]}throw Error(`SEC extend failed`)}const L=Object.freeze({wasmOnly:!0});function ie(e,t,n,r){let{X:i,Y:a,fx:s,fy:c,masses:l}=n,{charge:u}=r,d=o(),f=t instanceof Uint32Array?t:Uint32Array.from(t),p=i instanceof Float64Array?i:Float64Array.from(i),m=a instanceof Float64Array?a:Float64Array.from(a);d.force_repulsion(e,u,f,p,m,l,s,c)}function ae(e,t,n,r,a){let{X:s,Y:c,R:l,fx:u,fy:d,masses:p}=r,{charge:m,theta:h,bucketSize:g}=a,_=t.length;if(i(`layout`)&&(g||0)===0&&s instanceof Float64Array&&c instanceof Float64Array){let i=o();if(i){let a=t instanceof Uint32Array?t:Uint32Array.from(t),o=l instanceof Float64Array?l:Float64Array.from(l),f=r.cellSize;return i.force_repulsion_bh(e,m,h,f,1,a,s,c,o,p,u,d),n??L}}let v=new A(t.map(e=>({id:e,x:s[e],y:c[e],r:l[e],mass:p[e]})),{getX:e=>e.x,getY:e=>e.y,bucketSize:g||0});v.postOrder(e=>{if(e.data!==null&&!Array.isArray(e.data))e.cx=e.data.x,e.cy=e.data.y,e.r=e.data.r,e.mass=e.data.mass;else if(Array.isArray(e.data)){let t=e.data,n=t.map(e=>e.id),r=new Map;for(let e of t)r.set(e.id,e);let i=ne(n,e=>r.get(e).x,e=>r.get(e).y,e=>r.get(e).r);e.cx=i.x,e.cy=i.y,e.r=i.r;let a=0;for(let e=0;e<t.length;e++)a+=t[e].mass;e.mass=a}else if(e.left&&e.right){let t=e.left.cx,n=e.left.cy,r=e.right.cx,i=e.right.cy,a=e.left.r,o=e.right.r,s=r-t,c=i-n,l=o-a,u=Math.sqrt(s*s+c*c);e.cx=(t+r+s/u*l)/2,e.cy=(n+i+c/u*l)/2,e.r=(u+a+o)/2,e.mass=e.left.mass+e.right.mass}else{let t=e.left||e.right;e.cx=t.cx,e.cy=t.cy,e.r=t.r,e.mass=t.mass}});let y=r.cellSize;for(let n=0;n<_;n++){let r=t[n],i=s[r],a=c[r],o=l[r],g=p[r];v.preOrder(t=>{let n=i-t.cx||f(),s=a-t.cy||f(),c=n*n+s*s,l=o+t.r,p=t.data;if(p!==null){if(!Array.isArray(p)){if(p.id===r)return!1;if(c<1&&(c=Math.sqrt(c)),c>(y/2)**2)return!0;let t=e*(m*p.mass*g)/c;return u[r]+=n*t/g,d[r]+=s*t/g,!0}for(let t=0;t<p.length;t++){let n=p[t];if(n.id===r)continue;let o=i-n.x||f(),s=a-n.y||f(),c=o*o+s*s;c<1&&(c=Math.sqrt(c));let l=e*(m*n.mass*g)/c;u[r]+=o*l/g,d[r]+=s*l/g}return!0}let _=l/h;if(c>_*_){if(c<1&&(c=Math.sqrt(c)),c>(y/2)**2)return!0;let i=e*(m*t.mass*g)/c;return u[r]+=n*i/g,d[r]+=s*i/g,!0}return!1})}return v}function oe(e,t,n,r,a){let{X:s,Y:c,R:l,fx:u,fy:d}=r,{elasticity:p,margin:m}=a,h=t.length;if(i(`layout`)&&(a.bucketSize||0)===0&&s instanceof Float64Array&&c instanceof Float64Array){let e=o();if(e){let n=t instanceof Uint32Array?t:Uint32Array.from(t),i=l instanceof Float64Array?l:Float64Array.from(l),a=r.masses,o=!!r.hasGroups,f=o?r.nodeToGroup:new Int32Array;e.force_collision(p,m,1,n,s,c,i,a,u,d,o,f);return}}let g=!!r.hasGroups,_=r.nodeToGroup;for(let e=0;e<h;e++){let r=t[e],i=s[r]+u[r],a=c[r]+d[r],o=l[r];n.preOrder(e=>{let t=e.data;if(t===null){let t=e.cx-i,n=e.cy-a,r=e.r+o;return t*t+n*n>r*r}if(Array.isArray(t)){for(let e=0;e<t.length;e++){let n=t[e];if(n.id<=r)continue;let s=i-n.x-u[n.id],c=a-n.y-d[n.id],l=n.r,h=o+l+m,g=s*s+c*c;if(g<h*h){s===0&&(s=f(),g+=s*s),c===0&&(c=f(),g+=c*c);let e=Math.sqrt(g),t=(h-e)*p/e,i=l/h;u[r]+=s*t*i,d[r]+=c*t*i,u[n.id]-=s*t*(1-i),d[n.id]-=c*t*(1-i)}}return!0}let n=t.id;if(g&&_[r]!==_[n])return;if(n<=r)return!0;let h=i-s[n],v=a-c[n],y=l[n],b=o+y+m,x=h*h+v*v;if(x<b*b){h===0&&(h=f(),x+=h*h),v===0&&(v=f(),x+=v*v);let e=Math.sqrt(x),t=(b-e)*p/e,i=y/b;u[r]+=h*t*i,d[r]+=v*t*i,u[n]-=h*t*(1-i),d[n]-=v*t*(1-i)}return!0})}}function se(e,t,n,r){let{X:i,Y:a,fx:s,fy:c}=n,l=n.nodeToGroup,u=n.cells,d=n.hasGroups,{gravity:f,cx:p=0,cy:m=0}=r,h=o(),g=t instanceof Uint32Array?t:Uint32Array.from(t),_=i instanceof Float64Array?i:Float64Array.from(i),v=a instanceof Float64Array?a:Float64Array.from(a),y=new Int32Array,b=new Float64Array,x=new Float64Array;d&&(y=l instanceof Int32Array?l:Int32Array.from(l),b=Float64Array.from(u.map(e=>e.cx)),x=Float64Array.from(u.map(e=>e.cy))),h.force_center(e,f,p,m,g,_,v,s,c,!!d,y,b,x)}function ce(e,t,n,r){let{X:a,Y:s,fx:c,fy:l,pinned:u,layer:d,layers:f,movements:p,surfaces:m}=n,{maxDisplacement:h}=r,g=e.length;if(i(`layout`)&&a instanceof Float64Array&&s instanceof Float64Array){let r=o();if(r){let i=e instanceof Uint32Array?e:Uint32Array.from(e),o=f.length,g=new Uint32Array(o+1),_=0;for(let e=0;e<o;e++)g[e]=_,_+=f[e].length;g[o]=_;let v=new Uint32Array(_),y=0;for(let e=0;e<o;e++){let t=f[e];for(let e=0;e<t.length;e++)v[y++]=t[e]}let b=Float64Array.from(p),x=new Float64Array(Math.max(m.length,o));for(let e=0;e<m.length;e++)x[e]=m[e];let S=r.force_velocity_verlet(i,t,h,a,s,c,l,u,d,g,v,b,x);for(let e=0;e<p.length;e++)p[e]=b[e];for(let e=0;e<m.length;e++)m[e]=x[e];return n.updateGroups(),S}}p.fill(0);let _=0,v=1/0,y=1/0,b=-1/0,x=-1/0,S=h*h;for(let n=0;n<g;n++){let r=e[n],i=d[r],o=c[r]*=t,f=l[r]*=t,m=a[r],g=s[r];if(o*o+f*f>S){let e=Math.sqrt(o*o+f*f)/h;f/=e,o/=e}u[r]||(a[r]+=o,s[r]+=f);let C=Math.sqrt(o*o+f*f);u[r]||(m<v&&(v=m),g<y&&(y=g),m>v&&(b=m),g>y&&(x=g),i>=1&&i-1<p.length&&(p[i-1]+=C)),_+=i*C}let C=Math.max(b-v,0)*Math.max(x-y,0)||1;for(let e=0;e<f.length;e++){let t=f[e],n=t.length,r=1/0,i=1/0,o=-1/0,c=-1/0,l=0;for(let e=0;e<n;e++){let n=t[e];if(u[n])continue;let d=a[n],f=s[n];d<r&&(r=d),f<i&&(i=f),d>o&&(o=d),f>c&&(c=f),l++}let d=o-r,h=c-i;m[e]=Math.max(1,Math.sqrt(d*d+h*h));let g=l===0?0:p[e]/l;p[e]=g>l?g/C:0}return n.updateGroups(),_}function le(e,t,n,r){let{sources:i,targets:a,X:s,Y:c,R:l,fx:u,fy:d,degrees:f,masses:p,weights:m}=n,{edgeStrength:h,edgeLength:g}=r,_=o(),v=t instanceof Uint32Array?t:Uint32Array.from(t),y=s instanceof Float64Array?s:Float64Array.from(s),b=c instanceof Float64Array?c:Float64Array.from(c),x=l instanceof Float64Array?l:Float64Array.from(l);_.force_attraction(e,h,g,v,i,a,y,b,x,u,d,f,p,m)}function ue(e,t){return e<t?e*t+(t-e-1)**2/4:e*t+(e-t-1)**2/4}function de(e,t){return(e+t)*(e+t+1)/2+t}function fe(e,t=0,n=.5){let{edgeIds:r,sources:i,targets:a,pinned:o,degrees:s,X:c,Y:l,R:u}=e,d={},f={};for(let e of r){let t=i[e],n=a[e];t!==n&&(d[t]=d[t]||{},d[n]=d[n]||{},d[t][n]=!0,d[n][t]=!0)}Object.keys(d).forEach(e=>{let t=Number(e),n=Object.keys(d[t]).map(Number);if(n.length===2){let[e,r]=n,i=ue(e,r);i in f||(f[i]=[e,r]),o[t]||f[i].push(t)}}),Object.keys(f).forEach(e=>{let[r,i,...a]=f[Number(e)];if(a.length<3)return;let o=c[r],d=l[r],p=c[i],m=l[i],h=s[r],g=.25+.5*h/(h+s[i]),_=o+(p-o)*g,v=d+(m-d)*g,y=-(m-d),b=p-o,x=Math.sqrt((o-p)**2+(d-m)**2);y=-2*y/x,b=-2*b/x;let S=Math.acos(y/Math.sqrt(y*y+b*b));t>0&&(S<t||S>Math.PI-t&&S<=Math.PI?(y=2*Math.cos(Math.PI-t),b=2*Math.sin(Math.PI-t)):(S>2*Math.PI-t||S>=Math.PI&&S<Math.PI+t)&&(y=2*Math.cos(t),b=2*Math.sin(t)));let C=0,w=1;a.sort((e,t)=>u[t]-u[e]);let T=0,E=0,D=Math.max(u[a[0]],u[a[1]])/2;a.length%2==1&&(C=1,_-=y*D,v-=b*D);let O=1+n;for(let e=0;e<a.length;e++){let t=(C+e)%2==1,n=a[e],r=e>=2?u[n]:D,i=(t?T:E)+r;c[n]=_+y*w*i,l[n]=v+b*w*i,t?T+=r*O:E+=r*O,w=-w}})}function pe(e){let t=0,n=0;for(let r of e)t+=r.w*r.h,n=Math.max(n,r.w);e.sort((e,t)=>t.h-e.h);let r=[{x:0,y:0,w:Math.max(Math.ceil(Math.sqrt(t/.95)),n),h:1/0}],i=0,a=0;for(let t of e)for(let e=r.length-1;e>=0;e--){let n=r[e];if(!(t.w>n.w||t.h>n.h)){if(t.x=n.x,t.y=n.y,a=Math.max(a,t.y+t.h),i=Math.max(i,t.x+t.w),t.w===n.w&&t.h===n.h){let t=r.pop();e<r.length&&(r[e]=t)}else t.h===n.h?(n.x+=t.w,n.w-=t.w):t.w===n.w?(n.y+=t.h,n.h-=t.h):(r.push({x:n.x+t.w,y:n.y,w:n.w-t.w,h:t.h}),n.y+=t.h,n.h-=t.h);break}}}function me(e,t=1){if(i(`layout`)){let n=o();if(n&&n.pack_boxpack){let r=e.length,i=new Float64Array(r),a=new Float64Array(r),o=new Float64Array(r);for(let t=0;t<r;t++)i[t]=e[t].w,a[t]=e[t].h,o[t]=e[t].maxr;let s=n.pack_boxpack(i,a,o,t);for(let n=0;n<r;n++)e[n].w+=e[n].maxr+t,e[n].h+=e[n].maxr+t,e[n].x=s[2*n],e[n].y=s[2*n+1];return}}return pe(e.map(e=>(e.w+=e.maxr+t,e.h+=e.maxr+t,e)).sort((e,t)=>e.w*e.h-t.w*t.h))}var he=class{ids=[];xmin=1/0;ymin=1/0;xmax=-1/0;ymax=-1/0;x=0;y=0;w=0;h=0;cx=0;cy=0;radius=0;mx=0;my=0;m=0;maxr=0;add(e,t,n,r){this.ids.push(e),t-r<this.xmin&&(this.xmin=t-r),n-r<this.ymin&&(this.ymin=n-r),t+r>this.xmax&&(this.xmax=t+r),n+r>this.ymax&&(this.ymax=n+r),r>this.maxr&&(this.maxr=r),this.mx+=r*t,this.my+=r*n,this.m+=r}measure(e=0){return this.w=this.xmax-this.xmin+2*e,this.h=this.ymax-this.ymin+2*e,this.cx=this.mx/this.m,this.cy=this.my/this.m,this.x=this.xmin,this.y=this.ymin,this.radius=Math.sqrt(this.w*this.w+this.h*this.h)/2,this}};function ge(e,t=20,n,r,i){for(let a of e){let{x:e,y:o,r:s}=ne(a.ids,(e=>n[e]),(e=>r[e]),(e=>i[e]));a.cx=e,a.cy=o,a.radius=s+t}let a=e.slice().sort((e,t)=>e.radius-t.radius),o=a.map(e=>({x:e.cx,y:e.cy,r:e.radius})),s=a.pop(),c=3*Math.PI/2,l=s.radius,u=2*Math.PI,d=s.cx,f=s.cy,p=[s];for(;a.length!==0;){let e=a[a.length-1],t=l+e.radius,n=d+Math.cos(c)*t,r=f+Math.sin(c)*t;p.some(t=>{let i=t.cx-n,a=t.cy-r;return Math.sqrt(i*i+a*a)<t.radius+e.radius})?l+=1:(e.x=n-e.w/2,e.y=r-e.h/2,e.cx=n,e.cy=r,o[a.length-1].x=n,o[a.length-1].y=r,p.push(a.pop()),c+=(2*e.radius+1)/t*1%u)}}function _e(e,t,n,r){let i=0,a=[];return r.forEach((r,o)=>{let s=new he;r.forEach(r=>s.add(r,e[r],t[r],n[r])),a.push(s.measure()),r.length>a[i].ids.length&&(i=o)}),{boxes:a,biggest:i}}function ve(e,t,n){let{X:r,Y:i,R:a,components:o,pinned:s,degrees:c,sources:l,targets:u,edgeIds:d}=t,{update:f,onUpdate:p,placement:m,placementOffset:h,alignSiblings:g,siblingsMinAngle:_,siblingsOffset:v}=n;if(g&&(fe({X:r,Y:i,R:a,degrees:c,pinned:s,sources:l,targets:u,edgeIds:d},_,v),f(e,r,i)),m){let{boxes:t,biggest:n}=_e(r,i,a,o);if(m===`spiral`)ge(t,h,r,i,a);else if(m===`box`)me(t,h);else return;let s=t[n].xmin-t[n].x,c=t[n].ymin-t[n].y;for(let e of t){let t=e.xmin-e.x-s,n=e.ymin-e.y-c;for(let a of e.ids)r[a]-=t,i[a]-=n}f(e,r,i),p()}}let ye=function(e){return e[e.verlet=0]=`verlet`,e[e.euler=1]=`euler`,e}({});const be={movementRatio:7e-8,surfaceRatio:.0025};function xe(e,t){return .003*e**2+(t+1)}var Se=class{onUpdate=()=>{};update=()=>{};onEnd=()=>{};charge=10;maxIterations=200;minMovement=.1;edgeLength=30;edgeStrength=3;friction=.1;elasticity=.9;margin=1;cx=void 0;cy=void 0;gravity=.01;theta=.34;batch;inertia=.9;integrator=ye.verlet;multilevel=!1;placement=`none`;placementOffset=10;alignSiblings=!1;bucketSize;maxDisplacement=1e3;siblingsMinAngle=0;siblingsOffset=.15;steps=200;scaling=1;defaultRadius=1;autoStop=be;gpuAcceleration=!0;barnesHutOptimization=!0;constructor(e={}){`autoStop`in e&&(e.autoStop&&typeof e.autoStop==`boolean`?this.autoStop=be:e.autoStop&&(this.autoStop={...be,...e.autoStop}));for(let t in e)e[t]!==void 0&&(this[t]=e[t])}};function Ce(e,t,n,r,i,a){let{X:o,Y:s,nodeIds:c,edgeIds:l,layers:u,movements:d,movementsPrev:f,surfaces:p,surfacesPrev:m}=n,{steps:h,minMovement:g,update:_,onUpdate:v,autoStop:y}=r,b=r.batch??1,x=0,S=1,C=1-.05**(1/h),w=!1,T=r.nextTick||(e=>setTimeout(e,0)),E=r.cancelTick||(e=>clearTimeout(e)),D=r.chunkPeriod??250,O=null,k=()=>{w=!0,O!=null&&(E(O),O=null),_(e,o,s),v(n),a(x)},A=!1,j=()=>{S+=(.001-S)*C;let t=i(S,c,l),r=u.length,a=!0,T=!0;if(y){let{movementRatio:e,surfaceRatio:t}=y;for(let n=0;n<r;n++)T&&Math.abs(1-p[n]/m[n])>t&&(T=!1),a&&Math.abs(d[n]-f[n])>e&&(a=!1)}else a=T=!1;a&&T&&!A&&(C=1-.001**(1/Math.max(10,x)),A=!0);let E=w||S<.05||t!==0&&t<=g;if(x%b===0&&(_(e,o,s),v(n)),++x>=h||E)return k(),!0;for(let e=0;e<r;e++)f[e]=d[e],m[e]=p[e];return!1};function M(){let e=performance.now()+D;for(;!w&&performance.now()<e;)if(j())return;w||(O=T(M))}return{start(){return O=T(M),this},stop(){return w||k(),this},get iterations(){return x}}}function we(e,t,n,r,i,a){let{X:o,Y:s,R:c,degrees:l,nodeIds:u,edgeIds:f,layers:p,layer:m,cluster:h,masses:g,weights:_,sources:v,targets:y}=n,{cx:b,cy:x}=r,{update:S,onUpdate:C,steps:w,minMovement:T}=r,E=r.batch??1;if(b===void 0||x===void 0){let e=0,t=0,i=n.X.length;for(let r=0;r<i;r++)e+=n.X[r],t+=n.Y[r];i>0?(b=e/i,x=t/i):(b=0,x=0),r.cx=b,r.cy=x}let D=[...p],O=0,k=1,A=!1,j=()=>{A=!0,S(e,o,s),C(n),a(O)},M={};for(let t=0;t<e.length;t++)M[Number(e[t].id)||t]=t;let N=new Map;for(let e=0;e<f.length;e++){let t=f[e];N.set(de(v[t],y[t]),t)}for(let e=0;e<p.length;e++){let n=p[e],r=e;for(let e=0;e<n.length;e++){let t=n[e],r=h[t];r!==-1&&(g[r]+=g[t])}for(let e=0;e<t.length;e++){let n=t[e],i=n.source,a=n.target,o=_[M[Number(n.id)||e]];if(m[i]===r&&m[a]===r){let e=h[i],t=h[a];if(e!==t&&e!==-1&&t!==-1){let n=N.get(de(e,t));n!==void 0&&(_[n]+=o)}}}}u.length=0,f.length=0;let P=1-.1**(1/w/2),ee=.9/w,F=null,I=.5,te=()=>{k+=(0-k)*P;let r=i(k,u,f),a=k<=I||r<T;if(O===0||a){let e=D.pop();if(e){F&&(I=F.reduce((e,t)=>Math.max(e,Math.abs(b-o[t]),Math.abs(x-s[t])),0)),u.push(...e);for(let t=0;t<e.length;t++){let n=e[t],r=h[n];if(r!==-1){let e=l[n]>1?2:1,t=c[r]+c[n];g[r]-=g[n],o[n]=o[r]+e*t*(2*d()-1),s[n]=s[r]+e*t*(2*d()-1)}else F&&(o[n]=b+2*I*(1-2*d()),s[n]=x+2*I*(1-2*d()))}F=e;let n=u.reduce((e,t)=>(e[t]=!0,e),{});f.length=0;for(let e=0;e<t.length;e++){let{source:r,target:i,id:a}=t[e];n[r]&&n[i]&&f.push(M[Number(a)||e])}a=!1,D.length===0?(k=.2,I=.1):(k=.1+2*ee,I=.1)}}if(O%E===0&&(S(e,o,s),C(n)),++O>=1/0||a)return j();ie(oe)},ne=r,re=ne.chunkPeriod??250,L=null,ie=ne.nextTick||(e=>setTimeout(e,0)),ae=ne.cancelTick||(e=>clearTimeout(e));function oe(){let e=performance.now()+re;for(;!A&&performance.now()<e;)if(te(),A)return;A||(L=ie(oe))}return{start(){return L=ie(oe),this},stop(){return A=!0,L!=null&&(ae(L),L=null),this},get iterations(){return O}}}function Te(e,t={}){let n=new v(e,!0,t),r=new Se(t);n.nodeIds,n.edgeIds;let a=Math.PI*(3-Math.sqrt(5)),s=e.nodes.length;for(let t=0;t<e.edges.length;t++){let r=e.edges[t],i=n.sources[t],a=n.targets[t];n.weights[t]=r.weight===void 0?1:r.weight,n.edgeIds[t]=t,n.degrees[i]++,n.degrees[a]++}r.bucketSize===void 0&&(r.bucketSize=s>0?Math.floor(Math.log(s)):0),n.bucketSize=r.bucketSize;for(let t=0;t<s;t++){let i=e.nodes[t],o=i.x,s=i.y,c=i.r,l=i.mass===void 0?1:i.mass;if(l=Math.max(l*xe(c||r.defaultRadius,n.degrees[t]),.001),isNaN(o)||isNaN(s)){let e=5*Math.sqrt(t),n=t*a;o=e*Math.cos(n),s=e*Math.sin(n)}n.X[t]=o,n.Y[t]=s,n.R[t]=c||r.defaultRadius,n.pinned[t]=+!!i.pinned,n.masses[t]=l*r.scaling,n.nodeIds[t]=t}if(s>1){let e=1/0,t=-1/0,r=1/0,i=-1/0,o=0;for(let a=0;a<s;a++)n.X[a]<e&&(e=n.X[a]),n.X[a]>t&&(t=n.X[a]),n.Y[a]<r&&(r=n.Y[a]),n.Y[a]>i&&(i=n.Y[a]),n.R[a]>o&&(o=n.R[a]);if(t-e<2*o||i-r<2*o){let o=(e+t)/2,c=(r+i)/2;for(let e=0;e<s;e++){if(n.pinned[e])continue;let t=5*Math.sqrt(e),r=e*a;n.X[e]=o+t*Math.cos(r),n.Y[e]=c+t*Math.sin(r)}}}n.updateGroups();let c=null;if(r.cx===void 0||r.cy===void 0){let e=0,t=0;for(let r=0;r<s;r++)e+=n.X[r],t+=n.Y[r];s>0?(r.cx=e/s,r.cy=t/s):(r.cx=0,r.cy=0)}let l=null,u=null,d=null,f=!1,p=()=>{if(r.multilevel||n.hasGroups||(r.bucketSize||0)!==0||!(n.X instanceof Float64Array)||!(n.Y instanceof Float64Array)||!i(`layout`))return null;let e=o();if(!e||!e.ForceSim)return null;let t=n.layers,a=t.length,s=new Uint32Array(a+1),c=0;for(let e=0;e<a;e++)s[e]=c,c+=t[e].length;s[a]=c;let l=new Uint32Array(c),f=0;for(let e=0;e<a;e++){let n=t[e];for(let e=0;e<n.length;e++)l[f++]=n[e]}return u=new Float64Array(n.movements.length),d=new Float64Array(n.surfaces.length),new e.ForceSim(Uint32Array.from(n.nodeIds),Uint32Array.from(n.edgeIds),n.sources,n.targets,n.X,n.Y,n.R,n.fx,n.fy,n.masses,n.weights,n.degrees,n.pinned,n.layer,s,l,Float64Array.from(n.movements),Float64Array.from(n.surfaces))},m=()=>{l&&=(l.free(),null)},h=(e,t,i)=>{if(t.length<=1)return 0;if(l&&(r.bucketSize||0)!==0&&m(),l){r.barnesHutOptimization&&(f=!0);let t=l.step(e,r.charge,r.theta,n.cellSize,r.edgeStrength,r.edgeLength,r.elasticity,r.margin,r.gravity,r.cx??0,r.cy??0,r.inertia,r.maxDisplacement,r.barnesHutOptimization,f&&r.elasticity!==0,n.X,n.Y,u,d),i=u,a=d;for(let e=0;e<n.movements.length;e++)n.movements[e]=i[e];for(let e=0;e<n.surfaces.length;e++)n.surfaces[e]=a[e];return n.updateGroups(),t}return r.barnesHutOptimization?c=ae(e,t,c,n,r):ie(e,t,n,r),le(e,i,n,r),c&&r.elasticity!==0&&oe(0,t,c,n,r),se(e,t,n,r),ce(t,r.inertia,n,r)},g;return{setOptions(e){return r=new Se({...r,...e}),this},setGraph(e){return m(),n=new v(e,!0,t),this},start(){return m(),f=!1,l=p(),g=(r.multilevel?we:Ce)(e.nodes,e.edges,n,r,h,e=>{m(),ve(n.nodeIds,n,r),r.onEnd(e);let i=t.groups;if(i)for(let e=0;e<i.length;e++){let r=i[e],a=0,o=0;for(let e of r)a+=n.X[e],o+=n.Y[e];a/=r.length,o/=r.length,t.cx&&(a-=t.cx),t.cy&&(o-=t.cy);for(let e of r)n.X[e]-=a,n.Y[e]-=o}}),g.start(),this},stop(){return g&&g.stop(),this},iterations(){return g?g.iterations:0},data(){return n}}}const Ee={duration:1e3,alpha:.005},De=()=>{},Oe=(e,t,n)=>{},ke=e=>typeof requestAnimationFrame<`u`?requestAnimationFrame(e):setTimeout(e,16),Ae=e=>typeof cancelAnimationFrame<`u`?cancelAnimationFrame(e):clearTimeout(e);var je=class{onUpdate=De;update=Oe;nextTick=ke;cancelTick=Ae;onEnd=De;charge=10;maxIterations=200;minMovement=.1;edgeLength=30;edgeStrength=3;friction=.1;elasticity=.9;margin=1;cx=void 0;cy=void 0;gravity=.01;theta=.34;batch=void 0;inertia=.9;integrator=0;multilevel=!1;placement=`none`;placementOffset=10;alignSiblings=!1;bucketSize=void 0;maxDisplacement=1e3;siblingsMinAngle=0;siblingsOffset=.15;steps=200;scaling=1;defaultRadius=1;autoStop=Ee;gpuAcceleration=!0;barnesHutOptimization=!0;order;depth;sortingMethod;groups;constructor(e={}){`autoStop`in e&&e.autoStop&&(typeof e.autoStop==`boolean`?e.autoStop=Ee:e.autoStop={...e.autoStop,...Ee});for(let t in e)(e[t]!==void 0||t===`order`||t===`depth`)&&(this[t]=e[t])}};const Me={charge:10,edgeStrength:.5,edgeLength:30,elasticity:.9,margin:1,gravity:.01,inertia:.9,maxDisplacement:1e3,steps:200},Ne=new Float32Array([-1,-1,1,-1,-1,1,-1,1,1,-1,1,1]);function Pe(){return{[WebGL2RenderingContext.FLOAT]:`uniform1f`,[WebGL2RenderingContext.FLOAT_VEC2]:`uniform2fv`,[WebGL2RenderingContext.FLOAT_VEC3]:`uniform3fv`,[WebGL2RenderingContext.FLOAT_VEC4]:`uniform4fv`,[WebGL2RenderingContext.INT]:`uniform1i`,[WebGL2RenderingContext.INT_VEC2]:`uniform2iv`,[WebGL2RenderingContext.INT_VEC3]:`uniform3iv`,[WebGL2RenderingContext.INT_VEC4]:`uniform4iv`,[WebGL2RenderingContext.UNSIGNED_INT]:`uniform1ui`,[WebGL2RenderingContext.UNSIGNED_INT_VEC2]:`uniform2uiv`,[WebGL2RenderingContext.UNSIGNED_INT_VEC3]:`uniform2uiv`,[WebGL2RenderingContext.UNSIGNED_INT_VEC4]:`uniform2uiv`,[WebGL2RenderingContext.FLOAT_MAT2]:`uniformMatrix2fv`,[WebGL2RenderingContext.FLOAT_MAT3]:`uniformMatrix3fv`,[WebGL2RenderingContext.FLOAT_MAT4]:`uniformMatrix4fv`,[WebGL2RenderingContext.SAMPLER_2D]:`uniform1i`,[WebGL2RenderingContext.INT_SAMPLER_2D]:`uniform1i`,[WebGL2RenderingContext.UNSIGNED_INT_SAMPLER_2D]:`uniform1i`,[WebGL2RenderingContext.SAMPLER_CUBE]:`uniform1i`}}const Fe=new WeakMap,Ie=new Map;let Le=0;function Re(e,t,n,r){Fe.has(e)||Fe.set(e,Le++);let i=`${Fe.get(e)}:${t}:${n}`,a=Ie.get(i);return a||(a=r(),Ie.set(i,a)),a}function ze(e,t,n){let r=e.createShader(t);if(r===null)throw Error(`Cannot create WebGL shader.`);return e.shaderSource(r,n),e.compileShader(r),r}function R(e,t,n){return Re(e,t,n,()=>{let r=e.createProgram();if(r===null)throw Error(`Cannot create WebGL program.`);if(e.attachShader(r,ze(e,e.VERTEX_SHADER,t)),e.attachShader(r,ze(e,e.FRAGMENT_SHADER,n)),e.linkProgram(r),!e.getProgramParameter(r,e.LINK_STATUS)){let t=e.getProgramInfoLog(r);throw e.deleteProgram(r),Error(`Could not link WebGL program: \n${t}`)}return r})}function z(e,t){let{size:n,data:r,type:i,internalFormat:a,format:o}=t;a===void 0&&(a=e.RGBA32F),o===void 0&&(o=e.RGBA);let s=e.createTexture();if(s===null)throw Error(`Cannot create WebGL texture.`);let c=Math.max(1,n[0]),l=Math.max(1,n[1]);return r instanceof Float32Array&&r.byteLength===0?r=new Float32Array(c*l*4):r instanceof Uint32Array&&r.byteLength===0&&(r=new Uint32Array(c*l*4)),e.bindTexture(e.TEXTURE_2D,s),e.texImage2D(e.TEXTURE_2D,0,a,c,l,0,o,i,r),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,e.NEAREST),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MAG_FILTER,e.NEAREST),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.CLAMP_TO_EDGE),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.CLAMP_TO_EDGE),{size:n,data:r,type:i,format:o,handle:s}}function B(e,t){let n=e.createFramebuffer();if(n===null)throw Error(`Cannot create WebGL framebuffer.`);e.bindFramebuffer(e.FRAMEBUFFER,n),e.framebufferTexture2D(e.FRAMEBUFFER,e.COLOR_ATTACHMENT0,e.TEXTURE_2D,t,0);let r=e.checkFramebufferStatus(e.FRAMEBUFFER);if(r!==e.FRAMEBUFFER_COMPLETE){let t={[e.FRAMEBUFFER_INCOMPLETE_ATTACHMENT]:`Attachment is NOT complete.`,[e.FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT]:`No valid attachment.`,[e.FRAMEBUFFER_UNSUPPORTED]:`Attachment types are not supported.`}[r];throw Error(t?`Framebuffer: ${t}`:`Framebuffer: Unknown reason (status: ${r})`)}return n}function Be(e,t=Ne){let n=e.createBuffer();if(n===null)throw Error(`Cannot create WebGL buffer.`);return e.bindBuffer(e.ARRAY_BUFFER,n),e.bufferData(e.ARRAY_BUFFER,t,e.STATIC_DRAW),n}function V(e,t){let n=e,r=t;return()=>{let e=n;return n=r,r=e,[n,r]}}function Ve(e,t=!1){let n=t?1<<Math.ceil(Math.log2(Math.sqrt(e))):Math.ceil(Math.sqrt(e));return{w:n,h:n}}function He(e){let t=0,n=0;for(let r of e)t+=r.w*r.h,n=Math.max(n,r.w);e.sort((e,t)=>t.h-e.h);let r=[{x:0,y:0,w:Math.max(Math.ceil(Math.sqrt(t/.95)),n),h:1/0}],i=0,a=0;for(let t of e)for(let e=r.length-1;e>=0;e--){let n=r[e];if(!(t.w>n.w||t.h>n.h)){if(t.x=n.x,t.y=n.y,a=Math.max(a,t.y+t.h),i=Math.max(i,t.x+t.w),t.w===n.w&&t.h===n.h){let t=r.pop();t&&e<r.length&&(r[e]=t)}else t.h===n.h?(n.x+=t.w,n.w-=t.w):t.w===n.w?(n.y+=t.h,n.h-=t.h):(r.push({x:n.x+t.w,y:n.y,w:n.w-t.w,h:t.h}),n.y+=t.h,n.h-=t.h);break}}return{w:i,h:a,fill:t/(i*a)||0}}function H(e,t,n){let r=n.x+e%n.w;return(n.y+Math.floor(e/n.w))*t+r}function Ue(e,t){return Array.from({length:e},(e,n)=>t(n))}function We(e,t){let n=t.map(({nodes:e})=>({x:0,y:0,...Ve(e.length,!0)})),r=t.map(({edges:e})=>({x:0,y:0,...Ve(2*e.length)})),i=He(n.slice()),a=He(r.slice()),o=i.w*i.h,s=a.w*a.h,c=new Float32Array(4*o),l=new Uint32Array(3*o),u=new Uint32Array(2*s),d=new Float32Array(4*o),f=new Float32Array(s);t.forEach(({nodes:e,edges:t},o)=>{let s=e.length,p=t.length,m=n[o],h=r[o],g=new Uint32Array(p),_=new Uint32Array(p),v=new Uint32Array(s);for(let e=0;e<p;e++){let{source:n,target:r}=t[e];g[e]=n,_[e]=r,v[n]++,v[r]++}let y=Ue(s,()=>[]);g.forEach((e,t)=>{y[e].push(_[t]),y[_[t]].push(e)});let b=Ue(s,()=>[]);g.forEach((e,n)=>{let r=_[n];if(t[n].stiffness!==void 0)b[e].push(t[n].stiffness),b[r].push(t[n].stiffness);else{let t=v[e],n=v[r],i=t*n/(Math.min(t,n)*(t+n));b[e].push(i),b[r].push(i)}});for(let t=0;t<s;t++){let n=4*H(t,i.w,m);c[n]=e[t].x||0,c[n+1]=e[t].y||0}let x=0;for(let e=0;e<s;e++){let t=3*H(e,i.w,m);l[t]=x%h.w,l[t+1]=Math.floor(x/h.w),l[t+2]=v[e],x+=v[e]}let S=0;for(let e=0;e<s;e++)for(let t of y[e]){let e=2*H(S,a.w,h);u[e]=t%m.w,u[e+1]=Math.floor(t/m.w),S++}for(let t=0;t<s;t++){let n=4*H(t,i.w,m);d[n]=e[t].mass||v[t]+1,d[n+1]=e[t].r||1,d[n+2]=+!!e[t].pinned}S=0;for(let e=0;e<s;e++)for(let t of b[e]){let e=H(S,a.w,h);f[e]=t,S++}});let p=z(e,{size:[i.w,i.h],data:c,type:e.FLOAT,format:e.RGBA,internalFormat:e.RGBA32F}),m=z(e,{size:[i.w,i.h],data:d,type:e.FLOAT,format:e.RGBA,internalFormat:e.RGBA32F}),h=z(e,{size:[i.w,i.h],data:l,type:e.UNSIGNED_INT,format:e.RGB_INTEGER,internalFormat:e.RGB32UI}),g=z(e,{size:[a.w,a.h],data:u,type:e.UNSIGNED_INT,format:e.RG_INTEGER,internalFormat:e.RG32UI}),_=z(e,{size:[a.w,a.h],data:f,type:e.FLOAT,format:e.RED,internalFormat:e.R32F}),v=z(e,{size:[i.w,i.h],data:d,type:e.FLOAT,format:e.RGBA,internalFormat:e.RGBA32F});return{items:t.map(({nodes:e,edges:t},i)=>({N:e.length,E:t.length,particlesPositionsSlot:n[i],particlesChargesSlot:n[i],adjacencyOffsetsSlot:n[i],adjacencyListsSlot:r[i],stiffnessSlot:r[i],nodesExtraPropertiesSlot:n[i]})),texture:{particlesPositions:()=>p,particlesCharges:()=>m,adjacencyOffsets:()=>h,adjacencyLists:()=>g,stiffness:()=>_,nodesExtraProperties:()=>v}}}function Ge(e,t){e.deleteTexture(t.texture.particlesPositions().handle),e.deleteTexture(t.texture.particlesCharges().handle),e.deleteTexture(t.texture.adjacencyOffsets().handle),e.deleteTexture(t.texture.adjacencyLists().handle),e.deleteTexture(t.texture.stiffness().handle),e.deleteTexture(t.texture.nodesExtraProperties().handle)}function U(e,t,n){e.useProgram(t);let r={},i=e.getProgramParameter(t,e.ACTIVE_UNIFORMS);for(let a=0;a<i;a++){let i=e.getActiveUniform(t,a);if(!i)throw Error(`Cannot get GL active uniform ${a}.`);let{name:o,size:s,type:c}=i,l=e.getUniformLocation(t,o);if(!l)throw Error(`Cannot get GL uniform location ${o}.`);r[o]={size:s,data:n[o],type:c,location:l}}return r}function W(e,t,n={}){let r=0,i=Pe();for(let[a,o]of Object.entries(t)){let{location:t,type:s,data:c}=o,l=n[a]===void 0?c:n[a];(s===e.SAMPLER_2D||s===e.INT_SAMPLER_2D||s===e.UNSIGNED_INT_SAMPLER_2D)&&(e.activeTexture(e.TEXTURE0+r),e.bindTexture(e.TEXTURE_2D,l),l=r,r++),e[i[s]](t,l)}}const Ke=e=>Math.ceil(Math.log2(Math.sqrt(e)))+1,qe=e=>1<<Math.ceil(Math.log2(e)),Je=e=>Math.max(0,Math.ceil(Math.log2(e)));function Ye(e){if(e<2)return[1,1];let t=32-Math.clz32(e-1);return[1<<(t>>>1)+(t&1),1<<(t>>>1)]}const Xe=e=>e*(e+1)/2,Ze=()=>({x:0,y:0,w:0,h:0});function Qe(e){let t;return()=>t||=e().finally(()=>{t=void 0})}const $e=e=>{let t=Math.max(1,Math.ceil(Math.log2(e)/2));return e>65535?t+1:t},et=(e,t=25,n=24e3)=>{let r=(n-t)/(t-1);return Math.ceil(t*r*4/(r+e))},tt=(e,t)=>Math.max(.1,1-(e/Math.max(1,t-20))**7.39);function nt(e){for(let t=0;t<e.length/2;t++)e[2*t]=t,e[2*t+1]=4294967295;return e}function rt(e,[t,n]){return z(e,{size:[t,n],data:nt(new Uint32Array(2*t*n)),type:e.UNSIGNED_INT,format:e.RG_INTEGER,internalFormat:e.RG32UI})}function it(e,[t,n]){return z(e,{size:[t,n],data:new Uint32Array(4*t*n),type:e.UNSIGNED_INT,format:e.RGBA_INTEGER,internalFormat:e.RGBA32UI})}function at(e,t,n){let r=e.createFramebuffer();if(r===null)throw Error(`Cannot create WebGL framebuffer.`);return e.bindFramebuffer(e.FRAMEBUFFER,r),e.framebufferTexture2D(e.FRAMEBUFFER,e.COLOR_ATTACHMENT0,e.TEXTURE_2D,t.handle,0),e.framebufferTexture2D(e.FRAMEBUFFER,e.COLOR_ATTACHMENT1,e.TEXTURE_2D,n.handle,0),e.drawBuffers([e.COLOR_ATTACHMENT0,e.COLOR_ATTACHMENT1]),e.checkFramebufferStatus(e.FRAMEBUFFER)!==e.FRAMEBUFFER_COMPLETE&&console.error(`FBO incomplete`),{handle:r,ca0:t,ca1:n}}function ot(e,t){let n=0,r=0,i=()=>{for(let r=0;r<e;r++,n++)if(!t(n))return!0},a=e=>{i()?e():r=requestAnimationFrame(()=>a(e))};return{start:Qe(()=>new Promise(e=>{n=0,a(e)})),step:i,stop:()=>cancelAnimationFrame(r)}}const st={name:`aabb`,vert:`#version 300 es
2
- precision mediump int;
3
- precision mediump float;
4
-
5
- uniform uvec2 m_1j;
6
- uniform uint m_1k;
7
-
8
- in vec2 position;
9
- in uvec4 m_1l;
10
- in uint m_4;
11
- in uint m_1m;
12
-
13
- flat out uvec4 m_2f;
14
- flat out uint m_1y;
15
- flat out uint m_2g;
16
-
17
- void main() {
18
- uvec4 slot = uvec4(m_1l.xy, m_1l.zw >> min(m_1k, m_2g));
19
- m_2f = slot;
20
- m_1y = m_4;
21
- m_2g = m_1m;
22
-
23
-
24
- vec2 posPx = (position + 1.f) * vec2(slot.zw) * .5f + vec2(m_2f.xy);
25
- gl_Position = vec4(posPx / vec2(m_1j) * 2.f - 1.f, 0.f, 1.f);
26
- }`,frag:`#version 300 es
27
- precision mediump float;uniform mediump sampler2D m_m,m_8;uniform uint m_1k;flat in uvec4 m_2f;flat in uint m_1y,m_2g;out vec4 outColor;void main(){uvec2 o=uvec2(gl_FragCoord.xy);uint u=o.x-m_2f.x+(o.y-m_2f.y)*m_2f.z;if(outColor=vec4(1e9,1e9,-1e9,-1e9),u>=m_1y)return;if(m_1k>=m_2g){outColor=texelFetch(m_8,ivec2(o),0);return;}if(m_1k==0u)outColor.xy=outColor.zw=texelFetch(m_m,ivec2(o),0).xy;else for(uint u;u<4u;u++){uvec2 e=(o-m_2f.xy<<1u)+uvec2(u&1u,u>>1u)+m_2f.xy;vec4 t=texelFetch(m_8,ivec2(e),0);outColor=vec4(min(outColor.xy,t.xy),max(outColor.zw,t.zw));}if(m_1k==m_2g-1u){vec2 o=outColor.zw-outColor.xy;outColor=vec4(outColor.xy-1.,vec2(max(o.x,o.y))+2.);}}`,outputs:1},ct={name:`morton`,vert:`#version 300 es
28
- precision highp int;
29
- precision highp float;
30
-
31
- uniform uvec2 m_n;
32
-
33
- in vec2 position;
34
- in uvec4 m_o;
35
- in uvec4 m_p;
36
- in uvec4 m_f;
37
- in uint m_4;
38
- in uint m_g;
39
-
40
- flat out uvec4 m_1z;
41
- flat out uvec4 m_20;
42
- flat out uvec4 m_21;
43
- flat out uint m_1y;
44
- flat out uint m_22;
45
-
46
- void main() {
47
- m_1z = m_o;
48
- m_20 = m_p;
49
- m_21 = m_f;
50
- m_1y = m_4;
51
- m_22 = m_g;
52
-
53
-
54
- vec2 posPx = (position + 1.f) * vec2(m_o.zw) * .5f + vec2(m_o.xy);
55
- gl_Position = vec4(posPx / vec2(m_n) * 2.f - 1.f, 0.f, 1.f);
56
- }`,frag:`#version 300 es
57
- precision highp float;precision highp int;uint u(uint u){return u&=65535u,u=(u|u<<8)&16711935u,u=(u|u<<4)&252645135u,u=(u|u<<2)&858993459u,u=(u|u<<1)&1431655765u,u;}uint u(uvec2 t){return u(t.y)<<1|u(t.x);}vec2 u(vec2 t,vec4 u){return(t-u.xy)/u.zw;}uniform highp sampler2D m_m,m_8;flat in uvec4 m_1z,m_20,m_21;flat in uint m_1y,m_22;out uvec2 outColor;void main(){uvec2 o=uvec2(gl_FragCoord.xy);uint t=o.x-m_1z.x+(o.y-m_1z.y)*m_1z.z;if(t>=m_1y){outColor=uvec2(t,4294967295u);return;}uvec2 e=uvec2(t%m_20.z,t/m_20.z)+m_20.xy;vec4 i=texelFetch(m_8,ivec2(m_21.xy),0);vec2 n=u(texelFetch(m_m,ivec2(e),0).xy,i);outColor=uvec2(t,u(uvec2(float(1u<<m_22-1u)*n)));}`,outputs:1},lt={name:`sortKeys`,vert:`#version 300 es
58
- precision highp int;
59
- precision highp float;
60
-
61
- uniform uvec2 m_1q;
62
- uniform uint m_1n;
63
-
64
- in vec2 position;
65
- in uvec4 m_1r;
66
- in uint m_4;
67
-
68
- flat out uvec4 m_29;
69
- flat out uint m_2a;
70
-
71
- void main() {
72
- m_29 = m_1r;
73
- m_2a = 0u;
74
-
75
-
76
- uint minN = 1u << m_1n;
77
- if(minN >= m_4) {
78
- if(minN >= 2u * m_4) {
79
- gl_Position = vec4(0.f, 0.f, 0.f, 1.f);
80
- return;
81
- }
82
-
83
- m_2a = 1u;
84
- }
85
-
86
-
87
- vec2 posPx = (position + 1.f) * vec2(m_1r.zw) * .5f + vec2(m_1r.xy);
88
- gl_Position = vec4(posPx / vec2(m_1q) * 2.f - 1.f, 0.f, 1.f);
89
- }`,frag:`#version 300 es
90
- precision highp int;uniform uint m_1n,m_1o;uniform highp usampler2D m_1p;flat in uvec4 m_29;flat in uint m_2a;out uvec2 outColor;uvec2 e(uvec2 e,uvec2 u,bool y){uvec2 t=e.x<4294967295u?texelFetch(m_1p,ivec2(m_29.xy)+ivec2(e.x%m_29.z,e.x/m_29.z),0).xy:e,o=u.x<4294967295u?texelFetch(m_1p,ivec2(m_29.xy)+ivec2(u.x%m_29.z,u.x/m_29.z),0).xy:u;if(y)return t.y<o.y?t:o;return t.y>o.y?t:o;}void main(){uvec2 u=uvec2(gl_FragCoord.xy);if(m_2a==1u){outColor=texelFetch(m_1p,ivec2(u),0).xy;return;}uint t=uint(u.x-m_29.x+m_29.z*(u.y-m_29.y)),s=texelFetch(m_1p,ivec2(u),0).x,o=t^1u<<m_1n-m_1o,l=texelFetch(m_1p,ivec2(m_29.xy)+ivec2(o%m_29.z,o/m_29.z),0).x;bool y=(t>>m_1n-m_1o&1u)==0u;(t>>m_1n&2u)==2u&&(y=!y),outColor=e(uvec2(t,s),uvec2(o,l),y);}`,outputs:1},ut={name:`sortIntervals`,vert:`#version 300 es
91
- precision highp int;
92
- precision highp float;
93
-
94
- uniform uvec2 m_1q;
95
- uniform uint m_1n;
96
- uniform uint m_1o;
97
-
98
- in vec2 position;
99
- in uvec4 m_1r;
100
- in uint m_4;
101
-
102
- flat out uvec4 m_29;
103
- flat out uvec4 m_2h;
104
- flat out uint m_2a;
105
-
106
- void main() {
107
-
108
- uint minN = 1u << m_1n;
109
- if(minN >= m_4) {
110
- if(minN >= 2u * m_4) {
111
- gl_Position = vec4(0.f, 0.f, 0.f, 1.f);
112
- return;
113
- }
114
-
115
- m_2a = 1u;
116
- }
117
-
118
-
119
- uint delta = m_1n - m_1o;
120
- uvec4 intervalSlot = m_1r;
121
- if(intervalSlot.z == intervalSlot.w) {
122
-
123
- intervalSlot.z = intervalSlot.z >> (delta >> 1u);
124
- intervalSlot.w = intervalSlot.w >> ((delta + 1u) >> 1u);
125
- } else {
126
-
127
- intervalSlot.z = intervalSlot.z >> ((delta + 1u) >> 1u);
128
- intervalSlot.w = intervalSlot.w >> (delta >> 1u);
129
- }
130
- m_29 = m_1r;
131
- m_2h = intervalSlot;
132
-
133
-
134
- vec2 posPx = (position + 1.f) * vec2(intervalSlot.zw) * .5f + vec2(intervalSlot.xy);
135
- gl_Position = vec4(posPx / vec2(m_1q) * 2.f - 1.f, 0.f, 1.f);
136
- }`,frag:`#version 300 es
137
- precision highp int;uniform uint m_1n,m_1o;uniform highp usampler2D m_1p,m_1s;flat in uvec4 m_29,m_2h;flat in uint m_2a;layout(location=0)out uvec2 outKeys;layout(location=1)out uvec4 outIntervals;uint n(uint n,uint e,uint u,uint i){uint t=n<u?e+n:i-u+n;return texelFetch(m_1p,ivec2(m_29.xy)+ivec2(t%m_29.z,t/m_29.z),0).y;}void main(){ivec2 o=ivec2(gl_FragCoord.xy);if(m_2a==1u){outKeys=texelFetch(m_1p,ivec2(o),0).xy;return;}uint i=m_2h.z*(uint(o.y)-m_2h.y)+(uint(o.x)-m_2h.x);uvec4 u;if(m_1o==0u)u=uvec4(i&4294967294u,1u,(i&4294967294u)+1u,1u)<<m_1n;else{uint n=i>>1u,t=m_2h.z==m_2h.w?m_2h.z:m_2h.z>>1u;u=texelFetch(m_1s,ivec2(m_2h.xy)+ivec2(n%t,n/t),0);}uint e=u.y+u.w>>1u,t=u.y<e?0u:u.y-e,y=u.y<e?u.y:e;for(;t<y;){uint i=t+(y-t>>1u);n(i,u.x,u.y,u.z)<n(i+e,u.x,u.y,u.z)?t=i+1u:y=i;}uvec4 l=(i&1u)==(i>>m_1o+1u&1u)?uvec4(u.x,t,u.z+u.w-e+t,e-t):uvec4(u.x+t,u.y-t,u.z,u.w-e+t);if(m_1n==m_1o){uint n=l.y*l.x+l.w*l.z;outKeys=texelFetch(m_1p,ivec2(m_29.xy)+ivec2(n%m_29.z,n/m_29.z),0).xy;}else outIntervals=l;}`,outputs:2},dt={name:`cellLookup`,vert:`#version 300 es
138
- precision highp int;
139
- precision mediump float;
140
-
141
- uniform uvec2 m_1;
142
-
143
- in vec2 position;
144
- in uvec4 m_2;
145
- in uvec4 m_3;
146
- in uint m_4;
147
-
148
- flat out uvec4 m_1w;
149
- flat out uvec4 m_1x;
150
- flat out uint m_1y;
151
-
152
- void main() {
153
- m_1w = m_2;
154
- m_1x = m_3;
155
- m_1y = m_4;
156
-
157
- vec2 posPx = (position + 1.f) * vec2(m_2.zw) * .5f + vec2(m_2.xy);
158
- gl_Position = vec4(posPx / vec2(m_1) * 2.f - 1.f, 0.f, 1.f);
159
- }`,frag:`#version 300 es
160
- precision highp int;uint u(uint u){return u&=65535u,u=(u|u<<8)&16711935u,u=(u|u<<4)&252645135u,u=(u|u<<2)&858993459u,u=(u|u<<1)&1431655765u,u;}uint u(uvec2 i){return u(i.y)<<1|u(i.x);}uniform highp usampler2D m_0;flat in uvec4 m_1w,m_1x;flat in uint m_1y;out uvec2 outColor;uint i(uint e){uint u,i=m_1y;for(;u<i;){uint t=u+i>>1,l=texelFetch(m_0,ivec2(m_1x.xy)+ivec2(t%m_1x.z,t/m_1x.z),0).y;l<e?u=t+1u:i=t;}return u;}void main(){uvec2 t=uvec2(gl_FragCoord.xy);uint e=u((t-m_1w.xy)%m_1w.z);outColor=uvec2(i(e),i(e+1u));}`,outputs:1},ft={name:`bhTranslate`,vert:`#version 300 es
161
- precision highp int;
162
- precision highp float;
163
-
164
- uniform uvec2 m_b;
165
-
166
- in vec2 position;
167
- in uvec4 m_c;
168
- in uvec4 m_d;
169
- in uvec4 m_e;
170
-
171
- in uvec4 m_f;
172
- in uvec4 m_3;
173
- in uvec4 m_2;
174
-
175
- in uint m_4;
176
- in uint m_g;
177
- in uint m_h;
178
-
179
- flat out uvec4 m_23;
180
- flat out uvec4 m_24;
181
- flat out uvec4 m_25;
182
- flat out uvec4 m_21;
183
- flat out uvec4 m_1x;
184
- flat out uvec4 m_1w;
185
-
186
- flat out uint m_22;
187
- flat out uint m_26;
188
-
189
- void main() {
190
- m_23 = m_c;
191
- m_24 = m_d;
192
- m_25 = m_e;
193
- m_21 = m_f;
194
- m_1x = m_3;
195
- m_1w = m_2;
196
- m_22 = m_g;
197
- m_26 = m_h;
198
-
199
- vec2 posPx = (position + 1.f) * vec2(m_c.zw) * .5f + vec2(m_c.xy);
200
- gl_Position = vec4(posPx / vec2(m_b) * 2.f - 1.f, 0.f, 1.f);
201
- }`,frag:`#version 300 es
202
- precision highp float;precision highp int;vec2 l(vec2 l,vec2 i){return vec2(l.x*i.x-l.y*i.y,l.x*i.y+l.y*i.x);}vec2 l(vec2 i,vec4 l){return(i-l.xy)/l.zw;}uniform highp sampler2D m_6,m_7,m_8;uniform highp usampler2D m_0,m_9;uniform uint m_5;uniform highp sampler2D m_i,m_j,m_k,m_l;flat in uvec4 m_23,m_24,m_25,m_21,m_1x,m_1w;flat in uint m_22,m_26;layout(location=0)out vec4 m01;layout(location=1)out vec4 m23;layout(location=2)out vec4 m45;layout(location=3)out vec4 m67;void main(){float s=float(1u<<m_5);uvec2 i=uvec2(gl_FragCoord.xy)-m_23.xy;vec2 v=(vec2(i)+.5)/s;if(m_5==m_22-1u){vec4 e=texelFetch(m_8,ivec2(m_21.xy),0);uvec2 s=texelFetch(m_9,ivec2(m_1w.xy+i),0).xy;for(uint t=s.x;t<s.y;t++){uint o=texelFetch(m_0,ivec2(m_1x.xy)+ivec2(t%m_1x.z,t/m_1x.z),0).x;ivec2 c=ivec2(m_25.xy)+ivec2(o%m_25.w,o/m_25.w);vec2 u=l(texelFetch(m_6,c,0).xy,e)-v;float x=texelFetch(m_7,c,0).x;vec2 i=vec2(x,0.);if(m01.xy+=i,i=l(i,u),m01.zw+=i,m_26<3u)continue;if(i=l(i,u),m23.xy+=i,i=l(i,u),m23.zw+=i,m_26<5u)continue;if(i=l(i,u),m45.xy+=i,i=l(i,u),m45.zw+=i,m_26<7u)continue;i=l(i,u),m67.xy+=i,i=l(i,u),m67.zw+=i;}}else for(uint y;y<4u;++y){uvec2 x=2u*i+uvec2(y&1u,y>>1u);vec2 u=(vec2(x)+.5)/s/2.-v,e=vec2(1,0);vec4 t=texelFetch(m_i,ivec2(m_24.xy+x),0);if(m01.xy+=l(t.xy,1.*e),e=vec2(1,0),m01.zw+=l(t.zw,1.*e),e=l(e,u),m01.zw+=l(t.xy,1.*e),m_26<3u)continue;vec4 o=texelFetch(m_j,ivec2(m_24.xy+x),0);if(e=vec2(1,0),m23.xy+=l(o.xy,1.*e),e=l(e,u),m23.xy+=l(t.zw,2.*e),e=l(e,u),m23.xy+=l(t.xy,1.*e),e=vec2(1,0),m23.zw+=l(o.zw,1.*e),e=l(e,u),m23.zw+=l(o.xy,3.*e),e=l(e,u),m23.zw+=l(t.zw,3.*e),e=l(e,u),m23.zw+=l(t.xy,1.*e),m_26<5u)continue;vec4 c=texelFetch(m_k,ivec2(m_24.xy+x),0);if(e=vec2(1,0),m45.xy+=l(c.xy,1.*e),e=l(e,u),m45.xy+=l(o.zw,4.*e),e=l(e,u),m45.xy+=l(o.xy,6.*e),e=l(e,u),m45.xy+=l(t.zw,4.*e),e=l(e,u),m45.xy+=l(t.xy,1.*e),e=vec2(1,0),m45.zw+=l(c.zw,1.*e),e=l(e,u),m45.zw+=l(c.xy,5.*e),e=l(e,u),m45.zw+=l(o.zw,10.*e),e=l(e,u),m45.zw+=l(o.xy,10.*e),e=l(e,u),m45.zw+=l(t.zw,5.*e),e=l(e,u),m45.zw+=l(t.xy,1.*e),m_26<7u)continue;vec4 m=texelFetch(m_l,ivec2(m_24.xy+x),0);e=vec2(1,0),m67.xy+=l(m.xy,1.*e),e=l(e,u),m67.xy+=l(c.zw,6.*e),e=l(e,u),m67.xy+=l(c.xy,15.*e),e=l(e,u),m67.xy+=l(o.zw,20.*e),e=l(e,u),m67.xy+=l(o.xy,15.*e),e=l(e,u),m67.xy+=l(t.zw,6.*e),e=l(e,u),m67.xy+=l(t.xy,1.*e),e=vec2(1,0),m67.zw+=l(m.zw,1.*e),e=l(e,u),m67.zw+=l(m.xy,7.*e),e=l(e,u),m67.zw+=l(c.zw,21.*e),e=l(e,u),m67.zw+=l(c.xy,35.*e),e=l(e,u),m67.zw+=l(o.zw,35.*e),e=l(e,u),m67.zw+=l(o.xy,21.*e),e=l(e,u),m67.zw+=l(t.zw,7.*e),e=l(e,u),m67.zw+=l(t.xy,1.*e);}}`,outputs:4},pt={name:`bhExpand`,vert:`#version 300 es
203
- precision mediump int;
204
- precision highp float;
205
-
206
- uniform uvec2 m_q;
207
-
208
- in vec2 position;
209
- in uvec4 m_r;
210
- in uvec4 m_s;
211
- in uint m_h;
212
-
213
- flat out uvec4 m_27;
214
- flat out uvec4 m_28;
215
- flat out uint m_26;
216
-
217
- void main() {
218
- m_27 = m_r;
219
- m_28 = m_s;
220
- m_26 = m_h;
221
- vec2 posPx = (position + 1.f) * vec2(m_r.zw) * .5f + vec2(m_r.xy);
222
- gl_Position = vec4(posPx / vec2(m_q) * 2.f - 1.f, 0.f, 1.f);
223
- }`,frag:`#version 300 es
224
- precision highp float;vec2 l(vec2 l,vec2 x){return vec2(l.x*x.x-l.y*x.y,l.x*x.y+l.y*x.x);}vec2 x(vec2 x,vec2 l){return vec2(dot(x,l),x.y*l.x-x.x*l.y)/dot(l,l);}uniform uint m_5;uniform highp sampler2D m_x,m_y,m_z,m_10,m_t,m_u,m_v,m_w;flat in uvec4 m_27,m_28;flat in uint m_26;layout(location=0)out vec4 l01;layout(location=1)out vec4 l23;layout(location=2)out vec4 l45;layout(location=3)out vec4 l67;void main(){float a=float(1u<<m_5);uvec2 i=uvec2(gl_FragCoord.xy)-m_27.xy;vec2 r=(vec2(i)+.5)/a,e=texelFetch(m_t,ivec2(m_27.xy+i),0).xy;if(e.x==0.)return;if(m_5>2u){uvec2 o=i>>1u;vec2 w=r-(vec2(i&65534u)+1.)/a,x=vec2(1,0);vec4 u=texelFetch(m_x,ivec2(m_28.xy+o),0),y=m_26>2u?texelFetch(m_y,ivec2(m_28.xy+o),0):vec4(0),e=m_26>4u?texelFetch(m_z,ivec2(m_28.xy+o),0):vec4(0),z=m_26>6u?texelFetch(m_10,ivec2(m_28.xy+o),0):vec4(0);switch(m_26){case 2u:l01.xy+=l(u.xy,1.*x),l01.zw+=l(u.zw,1.*x),x=l(x,w),l01.xy+=l(u.zw,1.*x);break;case 3u:case 4u:l01.xy+=l(u.xy,1.*x),l01.zw+=l(u.zw,1.*x),l23.xy+=l(y.xy,1.*x),l23.zw+=l(y.zw,1.*x),x=l(x,w),l01.xy+=l(u.zw,1.*x),l01.zw+=l(y.xy,2.*x),l23.xy+=l(y.zw,3.*x),x=l(x,w),l01.xy+=l(y.xy,1.*x),l01.zw+=l(y.zw,3.*x),x=l(x,w),l01.xy+=l(y.zw,1.*x);break;case 5u:case 6u:l01.xy+=l(u.xy,1.*x),l01.zw+=l(u.zw,1.*x),l23.xy+=l(y.xy,1.*x),l23.zw+=l(y.zw,1.*x),l45.xy+=l(e.xy,1.*x),l45.zw+=l(e.zw,1.*x),x=l(x,w),l01.xy+=l(u.zw,1.*x),l01.zw+=l(y.xy,2.*x),l23.xy+=l(y.zw,3.*x),l23.zw+=l(e.xy,4.*x),l45.xy+=l(e.zw,5.*x),x=l(x,w),l01.xy+=l(y.xy,1.*x),l01.zw+=l(y.zw,3.*x),l23.xy+=l(e.xy,6.*x),l23.zw+=l(e.zw,10.*x),x=l(x,w),l01.xy+=l(y.zw,1.*x),l01.zw+=l(e.xy,4.*x),l23.xy+=l(e.zw,10.*x),x=l(x,w),l01.xy+=l(e.xy,1.*x),l01.zw+=l(e.zw,5.*x),x=l(x,w),l01.xy+=l(e.zw,1.*x);break;case 7u:case 8u:l01.xy+=l(u.xy,1.*x),l01.zw+=l(u.zw,1.*x),l23.xy+=l(y.xy,1.*x),l23.zw+=l(y.zw,1.*x),l45.xy+=l(e.xy,1.*x),l45.zw+=l(e.zw,1.*x),l67.xy+=l(z.xy,1.*x),l67.zw+=l(z.zw,1.*x),x=l(x,w),l01.xy+=l(u.zw,1.*x),l01.zw+=l(y.xy,2.*x),l23.xy+=l(y.zw,3.*x),l23.zw+=l(e.xy,4.*x),l45.xy+=l(e.zw,5.*x),l45.zw+=l(z.xy,6.*x),l67.xy+=l(z.zw,7.*x),x=l(x,w),l01.xy+=l(y.xy,1.*x),l01.zw+=l(y.zw,3.*x),l23.xy+=l(e.xy,6.*x),l23.zw+=l(e.zw,10.*x),l45.xy+=l(z.xy,15.*x),l45.zw+=l(z.zw,21.*x),x=l(x,w),l01.xy+=l(y.zw,1.*x),l01.zw+=l(e.xy,4.*x),l23.xy+=l(e.zw,10.*x),l23.zw+=l(z.xy,20.*x),l45.xy+=l(z.zw,35.*x),x=l(x,w),l01.xy+=l(e.xy,1.*x),l01.zw+=l(e.zw,5.*x),l23.xy+=l(z.xy,15.*x),l23.zw+=l(z.zw,35.*x),x=l(x,w),l01.xy+=l(e.zw,1.*x),l01.zw+=l(z.xy,6.*x),l23.xy+=l(z.zw,21.*x),x=l(x,w),l01.xy+=l(z.xy,1.*x),l01.zw+=l(z.zw,7.*x),x=l(x,w),l01.xy+=l(z.zw,1.*x);break;}}ivec2 y=(ivec2(i)&65534)-2;for(uint n;n<36u;n++){ivec2 t=y+ivec2(int(n)%6,int(n)/6);vec4 w=texelFetch(m_t,ivec2(m_27.xy)+t,0);if(w.x==0.)continue;vec2 s=vec2(t-ivec2(i));if(dot(s,s)<=2.||t>>ivec2(m_5)!=ivec2(0))continue;vec2 c=x(vec2(1,0),r-(vec2(t)+.5)/a),e=c;vec4 z=m_26>2u?texelFetch(m_u,ivec2(m_27.xy)+t,0):vec4(0),u=m_26>4u?texelFetch(m_v,ivec2(m_27.xy)+t,0):vec4(0),o=m_26>6u?texelFetch(m_w,ivec2(m_27.xy)+t,0):vec4(0);if(l01.xy+=l(w.xy,e),e=l(e,c),l01.xy+=l(w.zw,1.*e),l01.zw+=l(w.xy,-e),e=l(e,c),m_26>=3u)l01.xy+=l(z.xy,1.*e),l23.xy+=l(w.xy,e);if(l01.zw+=l(w.zw,-2.*e),m_26<3u)continue;if(e=l(e,c),l01.xy+=l(z.zw,1.*e),l01.zw+=l(z.xy,-3.*e),l23.xy+=l(w.zw,3.*e),l23.zw+=l(w.xy,-e),e=l(e,c),m_26>=5u)l01.xy+=l(u.xy,1.*e);if(l01.zw+=l(z.zw,-4.*e),l23.xy+=l(z.xy,6.*e),l23.zw+=l(w.zw,-4.*e),m_26>=5u)l45.xy+=l(w.xy,e);if(e=l(e,c),l23.xy+=l(z.zw,10.*e),l23.zw+=l(z.xy,-10.*e),m_26>=5u)l01.xy+=l(u.zw,1.*e),l01.zw+=l(u.xy,-5.*e),l45.xy+=l(w.zw,5.*e),l45.zw+=l(w.xy,-e);if(e=l(e,c),l23.zw+=l(z.zw,-20.*e),m_26>=7u)l01.xy+=l(o.xy,1.*e),l67.xy+=l(w.xy,e);if(m_26>=5u)l01.zw+=l(u.zw,-6.*e),l23.xy+=l(u.xy,15.*e),l45.xy+=l(z.xy,15.*e),l45.zw+=l(w.zw,-6.*e);if(m_26<5u)continue;if(e=l(e,c),m_26>=7u)l67.zw+=l(w.xy,-e),l67.xy+=l(w.zw,7.*e),l01.zw+=l(o.xy,-7.*e),l01.xy+=l(o.zw,1.*e);if(l45.zw+=l(z.xy,-21.*e),l45.xy+=l(z.zw,35.*e),l23.zw+=l(u.xy,-35.*e),l23.xy+=l(u.zw,21.*e),e=l(e,c),m_26>=7u)l67.zw+=l(w.zw,-8.*e),l67.xy+=l(z.xy,28.*e),l23.xy+=l(o.xy,28.*e),l01.zw+=l(o.zw,-8.*e);if(l45.zw+=l(z.zw,-56.*e),l45.xy+=l(u.xy,70.*e),l23.zw+=l(u.zw,-56.*e),e=l(e,c),m_26>=7u)l67.zw+=l(z.xy,-36.*e),l67.xy+=l(z.zw,84.*e),l23.zw+=l(o.xy,-84.*e),l23.xy+=l(o.zw,36.*e);if(l45.zw+=l(u.xy,-126.*e),l45.xy+=l(u.zw,126.*e),e=l(e,c),m_26>=7u)l67.zw+=l(z.zw,-120.*e),l67.xy+=l(u.xy,210.*e),l45.xy+=l(o.xy,210.*e),l23.zw+=l(o.zw,-120.*e);if(l45.zw+=l(u.zw,-252.*e),m_26<7u)continue;e=l(e,c),l67.zw+=l(u.xy,-330.*e),l67.xy+=l(u.zw,462.*e),l45.zw+=l(o.xy,-462.*e),l45.xy+=l(o.zw,330.*e),e=l(e,c),l67.zw+=l(u.zw,-792.*e),l67.xy+=l(o.xy,924.*e),l45.zw+=l(o.zw,-792.*e),e=l(e,c),l67.zw+=l(o.xy,-1716.*e),l67.xy+=l(o.zw,1716.*e),e=l(e,c),l67.zw+=l(o.zw,-3432.*e);}}`,outputs:4},mt={name:`integrate`,vert:`#version 300 es
225
- precision highp int;
226
- precision highp float;
227
-
228
- uniform uint m_5;
229
- uniform uvec2 m_1e;
230
-
231
- in vec2 position;
232
- in uvec4 m_e;
233
- in uvec4 m_1f;
234
- in uvec4 m_1g;
235
- in uvec4 m_1h;
236
- in uvec4 m_1i;
237
- in uvec4 m_f;
238
- in uvec4 m_3;
239
- in uvec4 m_2;
240
- in uvec4 m_r;
241
-
242
- in uint m_4;
243
- in uint m_g;
244
- in uint m_h;
245
-
246
- flat out uvec4 m_25;
247
- flat out uvec4 m_2b;
248
- flat out uvec4 m_2c;
249
- flat out uvec4 m_2d;
250
- flat out uvec4 m_2e;
251
- flat out uvec4 m_21;
252
- flat out uvec4 m_1x;
253
- flat out uvec4 m_1w;
254
- flat out uvec4 m_27;
255
-
256
- flat out uint m_1y;
257
- flat out uint m_22;
258
- flat out uint m_26;
259
-
260
- void main() {
261
- m_25 = m_e;
262
- m_2b = m_1f;
263
- m_2c = m_1g;
264
- m_2d = m_1h;
265
- m_2e = m_1i;
266
- m_21 = m_f;
267
- m_1x = m_3;
268
- m_1w = m_2;
269
- m_27 = m_r;
270
-
271
- m_1y = m_4;
272
- m_22 = m_g;
273
- m_26 = m_h;
274
-
275
-
276
- if(m_5 != m_g - 1u) {
277
- gl_Position = vec4(0.f, 0.f, 0.f, 1.f);
278
- return;
279
- }
280
-
281
-
282
- vec2 posPx = (position + 1.f) * vec2(m_e.zw) * .5f + vec2(m_e.xy);
283
- gl_Position = vec4(posPx / vec2(m_1e) * 2.f - 1.f, 0.f, 1.f);
284
- }`,frag:`#version 300 es
285
- precision highp float;precision highp int;vec2 s(vec2 s,vec2 e){return vec2(s.x*e.x-s.y*e.y,s.x*e.y+s.y*e.x);}vec2 s(vec2 s){return s.y=-s.y,s;}vec2 s(vec2 t[8],vec2 c,vec2 a){vec2 i,o=a-c,e=vec2(1,0);for(int c;c<8;++c)i+=s(t[c],e),e=s(e,o);return i;}vec2 s(vec2 e,vec4 s){return(e-s.xy)/s.zw;}uniform float m_14,m_15,m_16,m_17,m_18,m_19,m_11,m_12,m_13;uniform highp sampler2D m_6;uniform highp usampler2D m_1a,m_1b;uniform highp sampler2D m_1c,m_1d,m_8;uniform highp usampler2D m_0,m_9;uniform highp sampler2D m_1u,m_1v;flat in uvec4 m_25,m_2b,m_2c,m_2d,m_2e,m_21,m_1x,m_1w,m_27;flat in uint m_1y,m_22,m_26;out vec4 outColor;void main(){uvec2 c=uvec2(gl_FragCoord.xy)-m_25.xy;if(m_25.z*c.y+c.x>=m_1y)return;vec3 a=texelFetch(m_1c,ivec2(m_2b.xy+c),0).xyz;vec4 l=texelFetch(m_6,ivec2(m_25.xy+c),0);vec2 i=l.xy,e=l.zw;if(a.z>0.){outColor=vec4(i,e);return;}ivec4 t=ivec4(texelFetch(m_1a,ivec2(m_2d.xy+c),0));vec4 o=texelFetch(m_8,ivec2(m_21.xy),0);float r=float(1u<<m_22-1u);ivec2 u=ivec2(r*s(i,o));vec2 v=(vec2(u)+.5)/r;ivec2 p=u-ivec2(1);for(int s;s<9;++s){ivec2 t=p+ivec2(s%3,s/3);if(t>>m_22-1u!=ivec2(0))continue;uvec2 c=texelFetch(m_9,ivec2(m_1w.xy)+t,0).xy;for(uint s=c.x;s<c.y;s++){uint l=texelFetch(m_0,ivec2(m_1x.xy)+ivec2(s%m_1x.z,s/m_1x.z),0).x;ivec2 o=ivec2(l%m_25.z,l/m_25.z);vec2 t=texelFetch(m_6,ivec2(m_25.xy)+o,0).xy-i;float u=dot(t,t)+1e-4;if(m_18>0.&&m_11<.5){float i=texelFetch(m_1c,ivec2(m_2b.xy)+o,0).y,s=max(a.y+i+m_19,.01);if(u<s*s){float c=sqrt(u);e-=(s-c)*m_18*i/s*t/c;}}float r=texelFetch(m_1c,ivec2(m_2b.xy)+o,0).x;e-=m_11*m_14*r*t/u;}}if(m_22>2u){vec2 t[8];ivec2 c=ivec2(m_27.xy)+u;vec4 a=texelFetch(m_1u,c,0),l=texelFetch(m_1v,c,0);if(t[0]=a.xy,t[1]=a.zw,t[2]=l.xy,t[3]=l.zw,m_26>4u){vec4 s=texelFetch(m_1u,c,0);t[4]=s.xy,t[5]=s.zw;}if(m_26>6u){vec4 s=texelFetch(m_1v,c,0);t[6]=s.xy,t[7]=s.zw;}vec2 r=s(s(t,v,s(i,o))/o.z);e+=m_11*m_14*r;}ivec2 n;for(int c;c<t.z;c++){n=ivec2(texelFetch(m_1b,ivec2(m_2c.xy)+t.xy,0).xy);float o=texelFetch(m_1d,ivec2(m_2e.xy)+t.xy,0).x;vec2 s=texelFetch(m_6,ivec2(m_25.xy)+n,0).xy-i;if(s*=1.-m_17/(length(s)+1e-4),e+=m_11*m_16*o*s/a.x,t.x+=1,t.x>=int(m_2c.z))t.x=0,t.y+=1;}e=m_12*(e-m_11*m_15*i);float x=dot(e,e);if(x>m_13)e*=sqrt(m_13/x);outColor=vec4(i+e,e);}`,outputs:1};function G(e){return[e.x,e.y,e.w,e.h]}function K(e,t){return new Uint32Array(e.map(t).map(G).flat())}function q(e,t,n,r,i,a=1){let o=e.getAttribLocation(t,n);o!==-1&&(e.enableVertexAttribArray(o),Be(e,r),e.vertexAttribIPointer(o,i,e.UNSIGNED_INT,0,0),e.vertexAttribDivisor(o,a))}function J(e,t){let n=e.getAttribLocation(t,`position`);e.enableVertexAttribArray(n),Be(e,Ne),e.vertexAttribPointer(n,2,e.FLOAT,!1,0,0)}function ht(e,t){let n=R(e,st.vert,st.frag),r=t.texture.points(),i=z(e,{size:r.size,data:new Float32Array(r.data?r.data.buffer.slice(0):new ArrayBuffer(0)),type:e.FLOAT,format:e.RGBA,internalFormat:e.RGBA32F}),a=z(e,{size:r.size,data:new Float32Array(r.data?r.data.buffer.slice(0):new ArrayBuffer(0)),type:e.FLOAT,format:e.RGBA,internalFormat:e.RGBA32F}),o=V(i,a),s=B(e,a.handle),c=B(e,i.handle),l=V(s,c),u=U(e,n,{m_1j:r.size,m_8:i.handle,m_1k:0}),d=t.items.map(({N:e})=>Ke(e)),f=d.reduce((e,t)=>Math.max(e,t),0),p=e.createVertexArray();if(!p)throw Error(`Cannot create VAO`);e.bindVertexArray(p),J(e,n),q(e,n,`m_1l`,K(t.items,e=>e.pointsSlot),4),q(e,n,`m_4`,new Uint32Array(t.items.map(e=>e.N)),1),q(e,n,`m_1m`,new Uint32Array(d),1);let m=i;return{step:()=>{e.viewport(0,0,r.size[0],r.size[1]),e.useProgram(n),e.bindVertexArray(p);for(let n=0;n<f;n++){e.bindFramebuffer(e.FRAMEBUFFER,l()[0]);let[r,i]=o();m=i,W(e,u,{m_m:t.texture.points().handle,m_1j:t.texture.points().size,m_8:r.handle,m_1k:n}),e.drawArraysInstanced(e.TRIANGLES,0,6,t.items.length)}},outputs:{items:t.items.map(e=>({spatialBoundariesSlot:{x:e.pointsSlot.x,y:e.pointsSlot.y,w:1,h:1}})),texture:{spatialBoundaries:()=>m}},destroy:()=>{e.deleteFramebuffer(c),e.deleteFramebuffer(s),e.deleteTexture(i.handle),e.deleteTexture(a.handle),e.deleteVertexArray(p)}}}function gt(e,t){let n=R(e,ct.vert,ct.frag),r=t.items.map(({N:e})=>{let[t,n]=Ye(qe(e));return{x:0,y:0,w:t,h:n}}),i=He(r.slice()),a=new Uint32Array(2*i.w*i.h);r.forEach(e=>{for(let t=0;t<e.w*e.h;t++){let n=2*H(t,i.w,e);a[n]=t,a[n+1]=4294967295}});let o=z(e,{size:[i.w,i.h],data:a,type:e.UNSIGNED_INT,format:e.RG_INTEGER,internalFormat:e.RG32UI}),s=B(e,o.handle),c=U(e,n,{m_m:t.texture.points().handle,m_8:t.texture.spatialBoundaries().handle,m_n:o.size}),l=e.createVertexArray();if(!l)throw Error(`Cannot create VAO`);return e.bindVertexArray(l),J(e,n),q(e,n,`m_o`,new Uint32Array(r.map(G).flat()),4),q(e,n,`m_p`,K(t.items,e=>e.particlesPositionsSlot),4),q(e,n,`m_f`,K(t.items,e=>e.spatialBoundariesSlot),4),q(e,n,`m_4`,new Uint32Array(t.items.map(e=>e.N)),1),q(e,n,`m_g`,new Uint32Array(t.items.map(e=>e.depth)),1),{step:()=>{e.viewport(0,0,o.size[0],o.size[1]),e.useProgram(n),e.bindVertexArray(l),e.bindFramebuffer(e.FRAMEBUFFER,s),W(e,c,{m_m:t.texture.points().handle,m_8:t.texture.spatialBoundaries().handle}),e.drawArraysInstanced(e.TRIANGLES,0,6,r.length)},outputs:{items:t.items.map((e,t)=>({N:e.N,spatialKeysSlot:r[t]})),texture:{spatialKeys:()=>o}},destroy:()=>{e.deleteFramebuffer(s),e.deleteTexture(o.handle),e.deleteVertexArray(l)}}}function _t(e,t){let n=R(e,lt.vert,lt.frag),r=t.texture.spatialKeys(),i=rt(e,r.size),a=V(i,r),o=B(e,r.handle),s=B(e,i.handle),c=V(o,s),l=U(e,n,{m_1n:0,m_1o:0,m_1p:r.handle,m_1q:r.size}),u=t.items.map(({N:e})=>Je(e)).reduce((e,t)=>Math.max(e,t),0),d=e.createVertexArray();if(!d)throw Error(`Cannot create VAO`);e.bindVertexArray(d),J(e,n),q(e,n,`m_1r`,K(t.items,e=>e.spatialKeysSlot),4),q(e,n,`m_4`,new Uint32Array(t.items.map(e=>e.N)),1);let f=0,p=0,m=r;return{step:(r=Xe(u))=>{e.useProgram(n),e.bindVertexArray(d),e.viewport(0,0,i.size[0],i.size[1]);let o=t.texture.spatialKeys();m!==o&&(c(),a(),m=o);for(let n=0;n<r;n++){e.bindFramebuffer(e.FRAMEBUFFER,c()[0]);let[n,r]=a();m=r,W(e,l,{m_1n:f,m_1o:p,m_1p:n.handle}),e.drawArraysInstanced(e.TRIANGLES,0,6,t.items.length),p=(p+1)%(f+1),p===0&&(f=(f+1)%u)}},outputs:{items:t.items,texture:{spatialKeys:()=>m}},destroy:()=>{e.deleteFramebuffer(o),e.deleteFramebuffer(s),e.deleteTexture(i.handle),e.deleteVertexArray(d)}}}function vt(e,t){let n=R(e,ut.vert,ut.frag),r=e.getUniformLocation(n,`m_1n`),i=e.getUniformLocation(n,`m_1o`),a=e.getUniformLocation(n,`m_1p`),o=e.getUniformLocation(n,`m_1s`),s=e.getUniformLocation(n,`m_1q`),c=t.texture.spatialKeys(),l=rt(e,c.size),u=it(e,c.size),d=it(e,c.size),f=V(at(e,c,d),at(e,c,u)),p=V(at(e,l,d),at(e,l,u)),m=t.items.map(({N:e})=>Je(qe(e))).reduce((e,t)=>Math.max(e,t),0),h=e.createVertexArray();if(!h)throw Error(`Cannot create VAO`);return e.bindVertexArray(h),J(e,n),q(e,n,`m_1r`,K(t.items,e=>e.spatialKeysSlot),4),q(e,n,`m_4`,new Uint32Array(t.items.map(e=>e.N)),1),{step:()=>{e.bindVertexArray(h),e.viewport(0,0,c.size[0],c.size[1]),e.useProgram(n),e.uniform2ui(s,c.size[0],c.size[1]),e.uniform1i(a,0),e.uniform1i(o,1);for(let n=0;n<m;n++){e.activeTexture(e.TEXTURE0);let a=n&1?l:c;e.bindTexture(e.TEXTURE_2D,a.handle),e.uniform1ui(r,n);for(let r=0;r<=n;r++){let[a,o]=n&1?f():p();e.bindFramebuffer(e.FRAMEBUFFER,a.handle),e.activeTexture(e.TEXTURE1),e.bindTexture(e.TEXTURE_2D,o.ca1.handle),e.uniform1ui(i,r),n===r?e.drawBuffers([e.COLOR_ATTACHMENT0,e.NONE]):r<2&&e.drawBuffers([e.NONE,e.COLOR_ATTACHMENT1]),e.drawArraysInstanced(e.TRIANGLES,0,6,t.items.length)}}},outputs:{items:t.items,texture:{spatialKeys:()=>m-1&1?c:l}},destroy:()=>{e.deleteTexture(l.handle),e.deleteTexture(u.handle),e.deleteTexture(d.handle)}}}function yt(e,t){let n=R(e,dt.vert,dt.frag),r=t.items.map(({depth:e})=>{let t=1<<e-1;return{x:0,y:0,w:t,h:t}}),i=He(r.slice()),a=z(e,{size:[i.w,i.h],data:new Uint32Array(2*i.w*i.h),type:e.UNSIGNED_INT,format:e.RG_INTEGER,internalFormat:e.RG32UI}),o=B(e,a.handle),s=U(e,n,{m_0:t.texture.spatialKeys().handle,m_1:a.size}),c=e.createVertexArray();if(!c)throw Error(`Cannot create VAO`);return e.bindVertexArray(c),J(e,n),q(e,n,`m_2`,new Uint32Array(r.map(G).flat()),4),q(e,n,`m_3`,K(t.items,e=>e.spatialKeysSlot),4),q(e,n,`m_4`,new Uint32Array(t.items.map(e=>e.N)),1),{step:()=>{e.viewport(0,0,a.size[0],a.size[1]),e.useProgram(n),e.bindVertexArray(c),e.bindFramebuffer(e.FRAMEBUFFER,o),W(e,s,{m_0:t.texture.spatialKeys().handle}),e.drawArraysInstanced(e.TRIANGLES,0,6,t.items.length)},outputs:{items:t.items.map((e,t)=>({...e,gridCellsSlot:r[t]})),texture:{spatialBoundaries:t.texture.spatialBoundaries,spatialKeys:t.texture.spatialKeys,gridCells:()=>a}},destroy:()=>{e.deleteFramebuffer(o),e.deleteTexture(a.handle),e.deleteVertexArray(c)}}}function bt(e,t){let n=R(e,ft.vert,ft.frag),r=Math.max(...t.items.map(e=>e.depth)),i=[];t.items.forEach(({order:e,depth:t})=>{let n={};for(let e=r-1;e>=2;e--)n[e]=e>=t?Ze():{x:0,y:0,w:1<<e,h:1<<e};i.push({order:e,depth:t,multipolesSlot:n})});let a=[];for(let t=r;t>=2;t--){a[t]=[];let{w:n,h:r}=He(i.map(e=>e.multipolesSlot[t]||Ze()));for(let i=0;i<4;i++)a[t][i]=z(e,{size:[n,r],data:new Float32Array(4*n*r),type:e.FLOAT,format:e.RGBA,internalFormat:e.RGBA32F})}let o=[];a.forEach((t,n)=>{if(!t)return;let r=e.createFramebuffer();if(!r)throw Error(`Cannot create FBO`);e.bindFramebuffer(e.FRAMEBUFFER,r),t.forEach((t,n)=>{e.framebufferTexture2D(e.FRAMEBUFFER,e.COLOR_ATTACHMENT0+n,e.TEXTURE_2D,t.handle,0)}),e.drawBuffers([e.COLOR_ATTACHMENT0,e.COLOR_ATTACHMENT1,e.COLOR_ATTACHMENT2,e.COLOR_ATTACHMENT3]),e.checkFramebufferStatus(e.FRAMEBUFFER)!==e.FRAMEBUFFER_COMPLETE&&console.error(`FBO incomplete for level ${n}`),o[n]=r});let s=t.texture.particlesPositions?t.texture.particlesPositions():t.texture.points?.(),c=t.texture.particlesCharges?t.texture.particlesCharges():null,l=U(e,n,{m_5:r-1,m_6:s?.handle??null,m_7:c?.handle??null,m_8:t.texture.spatialBoundaries().handle,m_0:t.texture.spatialKeys().handle,m_9:t.texture.gridCells().handle,m_a:null,m_b:[0,0]}),u=[];for(let a=r-1;a>=2;a--){let r=e.createVertexArray();if(!r)throw Error(`Cannot create VAO`);u[a]=r,e.bindVertexArray(r),J(e,n),q(e,n,`m_c`,new Uint32Array(i.map(e=>e.multipolesSlot[a]).map(G).flat()),4),q(e,n,`m_d`,new Uint32Array(i.map(e=>a>=e.depth-1?Ze():e.multipolesSlot[a+1]).map(G).flat()),4),q(e,n,`m_e`,K(t.items,e=>e.particlesPositionsSlot),4),q(e,n,`m_f`,K(t.items,e=>e.spatialBoundariesSlot),4),q(e,n,`m_3`,K(t.items,e=>e.spatialKeysSlot),4),q(e,n,`m_2`,K(t.items,e=>e.gridCellsSlot),4),q(e,n,`m_g`,new Uint32Array(t.items.map(e=>e.depth)),1),q(e,n,`m_h`,new Uint32Array(i.map(e=>e.order)),1)}return{step:()=>{e.useProgram(n);for(let n=r-1;n>=2;n--){e.bindVertexArray(u[n]);let r=a[n+1]||[],i=a[n][0].size;e.viewport(0,0,i[0],i[1]),e.bindFramebuffer(e.FRAMEBUFFER,o[n]);let s=t.texture.particlesPositions?t.texture.particlesPositions():t.texture.points?.(),c=t.texture.particlesCharges?t.texture.particlesCharges():null;W(e,l,{m_6:s?.handle??null,m_7:c?.handle??null,m_8:t.texture.spatialBoundaries().handle,m_0:t.texture.spatialKeys().handle,m_9:t.texture.gridCells().handle,m_5:n,m_i:r[0]?.handle,m_j:r[1]?.handle,m_k:r[2]?.handle,m_l:r[3]?.handle,m_b:i}),e.drawArraysInstanced(e.TRIANGLES,0,6,t.items.length)}},outputs:{items:i,texture:{multipoles:(e,t)=>a[e]&&a[e][t]}},destroy:()=>{o.forEach(t=>t&&e.deleteFramebuffer(t)),a.forEach(t=>t&&t.forEach(t=>e.deleteTexture(t.handle))),u.forEach(t=>t&&e.deleteVertexArray(t))}}}function xt(e,t){let n=R(e,pt.vert,pt.frag),r=Math.max(...t.items.map(e=>e.depth)),i=[];t.items.forEach(e=>{let t={};for(let n=r-1;n>=2;n--)t[n]=e.multipolesSlot[n];i.push({...e,localExpansionsSlot:t})});let a=[];for(let n=r-1;n>=1;n--){a[n]=[];let[r,i]=(n===1?{size:[1,1]}:t.texture.multipoles(n,0)||{size:[1,1]}).size;for(let t=0;t<4;t++)a[n][t]=z(e,{size:[r,i],data:new Float32Array(4*r*i),type:e.FLOAT,format:e.RGBA,internalFormat:e.RGBA32F})}let o=[];a.forEach((t,n)=>{if(!t)return;let r=e.createFramebuffer();if(!r)throw Error(`Cannot create FBO`);e.bindFramebuffer(e.FRAMEBUFFER,r),t.forEach((t,n)=>{e.framebufferTexture2D(e.FRAMEBUFFER,e.COLOR_ATTACHMENT0+n,e.TEXTURE_2D,t.handle,0)}),e.drawBuffers([e.COLOR_ATTACHMENT0,e.COLOR_ATTACHMENT1,e.COLOR_ATTACHMENT2,e.COLOR_ATTACHMENT3]),e.checkFramebufferStatus(e.FRAMEBUFFER)!==e.FRAMEBUFFER_COMPLETE&&console.error(`FBO incomplete for level ${n}`),o[n]=r});let s=U(e,n,{m_5:2,m_q:[0,0]}),c=[];for(let a=r-1;a>=2;a--){let r=e.createVertexArray();if(!r)throw Error(`Cannot create VAO`);c[a]=r,e.bindVertexArray(r),J(e,n),q(e,n,`m_r`,new Uint32Array(i.map(e=>e.localExpansionsSlot[a]).map(G).flat()),4),q(e,n,`m_s`,new Uint32Array(i.map(e=>a>=3?e.localExpansionsSlot[a-1]:Ze()).map(G).flat()),4),q(e,n,`m_h`,new Uint32Array(t.items.map(e=>e.order)),1)}return{step:()=>{e.useProgram(n);for(let n=2;n<r;n++){e.bindVertexArray(c[n]);let r=a[n-1]||[],i=a[n];e.viewport(0,0,i[0].size[0],i[0].size[1]),e.bindFramebuffer(e.FRAMEBUFFER,o[n]),W(e,s,{m_5:n,m_t:t.texture.multipoles(n,0)?.handle,m_u:t.texture.multipoles(n,1)?.handle,m_v:t.texture.multipoles(n,2)?.handle,m_w:t.texture.multipoles(n,3)?.handle,m_x:r[0]?.handle,m_y:r[1]?.handle,m_z:r[2]?.handle,m_10:r[3]?.handle,m_q:i[0].size}),e.drawArraysInstanced(e.TRIANGLES,0,6,t.items.length)}},outputs:{items:i,texture:{localExpansions:(e,t)=>a[e]&&a[e][t]}},destroy:()=>{o.forEach(t=>t&&e.deleteFramebuffer(t)),a.forEach(t=>t&&t.forEach(t=>e.deleteTexture(t.handle))),c.forEach(t=>t&&e.deleteVertexArray(t))}}}function St(e,t,n){let r=R(e,mt.vert,mt.frag),i=t.texture.particlesPositions(),a=z(e,{type:e.FLOAT,size:i.size,data:new Float32Array(i.data?i.data.buffer.slice(0):new ArrayBuffer(0)),format:e.RGBA,internalFormat:e.RGBA32F}),o=V(i,a),s=B(e,a.handle),c=B(e,i.handle),l=V(s,c),u=U(e,r,{m_11:1,m_12:n.inertia,m_13:n.maxDisplacement**2,m_14:n.charge,m_15:n.gravity,m_16:n.edgeStrength,m_17:n.edgeLength,m_18:n.elasticity,m_19:n.margin,m_6:i.handle,m_1a:t.texture.adjacencyOffsets().handle,m_1b:t.texture.adjacencyLists().handle,m_1c:t.texture.nodesExtraProperties().handle,m_1d:t.texture.stiffness().handle,m_5:2,m_8:t.texture.spatialBoundaries().handle,m_0:t.texture.spatialKeys().handle,m_9:t.texture.gridCells().handle,m_1t:null,m_1e:i.size}),d=i,f={},p=new Set;return t.items.forEach(e=>p.add(e.depth-1)),p.forEach(n=>{let i=e.createVertexArray();if(!i)throw Error(`Cannot create VAO`);f[n]=i,e.bindVertexArray(i),J(e,r),q(e,r,`m_e`,K(t.items,e=>e.particlesPositionsSlot),4),q(e,r,`m_1f`,K(t.items,e=>e.nodesExtraPropertiesSlot),4),q(e,r,`m_1g`,K(t.items,e=>e.adjacencyListsSlot),4),q(e,r,`m_1h`,K(t.items,e=>e.adjacencyOffsetsSlot),4),q(e,r,`m_1i`,K(t.items,e=>e.stiffnessSlot),4),q(e,r,`m_f`,K(t.items,e=>e.spatialBoundariesSlot),4),q(e,r,`m_3`,K(t.items,e=>e.spatialKeysSlot),4),q(e,r,`m_2`,K(t.items,e=>e.gridCellsSlot),4),q(e,r,`m_r`,new Uint32Array(t.items.map(e=>e.localExpansionsSlot&&e.localExpansionsSlot[n]||Ze()).map(G).flat()),4),q(e,r,`m_4`,new Uint32Array(t.items.map(e=>e.N)),1),q(e,r,`m_g`,new Uint32Array(t.items.map(e=>e.depth)),1),q(e,r,`m_h`,new Uint32Array(t.items.map(e=>e.order)),1)}),{step:(n=1)=>{e.viewport(0,0,i.size[0],i.size[1]),e.useProgram(r),e.bindFramebuffer(e.FRAMEBUFFER,l()[0]);let[a,s]=o();d=s,p.forEach(r=>{e.bindVertexArray(f[r]),W(e,u,{m_11:n,m_6:a.handle,m_8:t.texture.spatialBoundaries().handle,m_0:t.texture.spatialKeys().handle,m_5:r,m_1u:t.texture.localExpansions(r,0)?.handle,m_1v:t.texture.localExpansions(r,1)?.handle,m_1a:t.texture.adjacencyOffsets().handle,m_1b:t.texture.adjacencyLists().handle,m_1c:t.texture.nodesExtraProperties().handle,m_1d:t.texture.stiffness().handle,m_9:t.texture.gridCells().handle}),e.drawArraysInstanced(e.TRIANGLES,0,6,t.items.length)})},outputs:{items:t.items.map(e=>({N:e.N,pointsSlot:e.particlesPositionsSlot})),texture:{points:()=>d}},destroy:()=>{e.deleteFramebuffer(s),e.deleteFramebuffer(c),e.deleteTexture(a.handle),Object.values(f).forEach(t=>e.deleteVertexArray(t))}}}function Ct(e,t,n){let{steps:r,batch:i,sortingMethod:a}=n,o=n.order??4,s=t.texture.particlesPositions(),c={items:t.items.map(({N:e,particlesPositionsSlot:t})=>({N:e,pointsSlot:t})),texture:{points:()=>s}},l=ht(e,c),u=gt(e,{items:t.items.map((e,t)=>({...e,depth:Math.max(1,n.depth??$e(e.N)),...c.items[t],...l.outputs.items[t]})),texture:{...c.texture,...l.outputs.texture}}),d=(a===`ibr`?vt:_t)(e,u.outputs),f=yt(e,{items:t.items.map((e,t)=>({...e,depth:Math.max(1,n.depth??$e(e.N)),order:o,...l.outputs.items[t],...d.outputs.items[t]})),texture:{...l.outputs.texture,...d.outputs.texture}}),p=bt(e,{items:t.items.map((e,t)=>({order:o,...e,...f.outputs.items[t]})),texture:{particlesPositions:()=>s,particlesCharges:t.texture.particlesCharges,...f.outputs.texture}}),m=xt(e,{items:p.outputs.items,texture:{...p.outputs.texture}}),h={charge:n.charge,gravity:n.gravity,inertia:n.inertia,edgeStrength:n.edgeStrength,edgeLength:n.edgeLength,elasticity:n.elasticity,margin:n.margin,maxDisplacement:n.maxDisplacement},g=St(e,{items:t.items.map((e,t)=>({...e,...f.outputs.items[t],...p.outputs.items[t],...m.outputs.items[t]})),texture:{...t.texture,...f.outputs.texture,...m.outputs.texture}},h),_=t.items.reduce((e,{N:t})=>Math.max(e,t),0);return{...ot(i??et(_),e=>(s=g.outputs.texture.points(),l.step(),u.step(),d.step(),f.step(),p.step(),m.step(),g.step(tt(e,r)),e<r)),destroy:()=>{l.destroy(),u.destroy(),d.destroy(),f.destroy(),p.destroy(),m.destroy(),g.destroy()}}}const wt=(e,t)=>.003*e**2+(t+1);function Tt(e){let t=new Uint32Array(e.nodes.length);for(let n of e.edges)t[n.source]!==void 0&&t[n.source]++,t[n.target]!==void 0&&t[n.target]++;return t}function Et(e){let t=new Map,n={nodes:[],edges:[]};return e.nodes.forEach((e,r)=>{t.has(e.id)&&console.warn(`Duplicated ID ${e.id}@${r}`),n.nodes.push({...e,id:r}),t.set(e.id,r)}),e.edges.forEach(e=>{let r=t.get(e.source),i=t.get(e.target);if(r===void 0){console.warn(`Missing source ${e.source}`);return}if(i===void 0){console.warn(`Missing target ${e.target}`);return}n.edges.push({...e,source:Math.min(r,i),target:Math.max(r,i)})}),n.edges.sort((e,t)=>e.source-t.source||e.target-t.target),n}function Dt(e,[t,n]=[0,0],r=.001){let i=Math.PI*(3-Math.sqrt(5)),a=e.nodes.map(e=>(e.x=(e.x||0)-t,e.y=(e.y||0)-n,e)).map(e=>({n:e,key:e.pinned?0:.5+Math.floor(e.x/r)+Math.floor(e.y/r)/r})).sort((e,t)=>e.key-t.key),o=0;return a.forEach(({n:e,key:t},n)=>{if(t*n===0||t!==a[n-1].key){o=n;return}let r=Math.sqrt(n-o);e.x=a[o].n.x+r*Math.cos(i*(n-o)),e.y=a[o].n.y+r*Math.sin(i*(n-o))}),e}function Ot(e){let t=Tt(e);return{nodes:e.nodes.map((e,n)=>{let r=(e.mass??1)*wt(e.r||1,t[n]);return r=Math.max(r,.001),{...e,mass:r}}),edges:e.edges.map(e=>{let n=e.weight||1,r=t[e.source]+1,i=t[e.target]+1,a=i*r*n/Math.min(r,i)/(r+i);return{...e,stiffness:a}})}}function kt(e,t){return Ot(Dt(Et(e),t))}function At(e,t){let n={};return t.forEach((e,t)=>{(n[e]??(n[e]=new Set)).add(t)}),Object.values(n).map(t=>({nodes:[...t].map(t=>e.nodes[t]),edges:e.edges.filter(({source:e,target:n})=>t.has(e)&&t.has(n))}))}function jt(e,t,n={}){t.getExtension(`EXT_color_buffer_float`)||t.getExtension(`WEBGL_lose_context`)?.loseContext();let r=new je({...Me,...n}),i=e.nodes.length,a=n.cx??e.nodes.reduce((e,t)=>e+(t.x||0),0)/Math.max(1,i),o=n.cy??e.nodes.reduce((e,t)=>e+(t.y||0),0)/Math.max(1,i),s=[a,o],c=Array.from({length:i},(e,t)=>t),l,u,d=e=>{if(!l)throw Error(`No graph has been set`);let[n,r]=l.texture.particlesPositions().size;if(n*r<=1)return{X:[0],Y:[0]};let i=[],s=[],u=0,d=new Float32Array(4*n*r);return t.readPixels(0,0,n,r,t.RGBA,t.FLOAT,d),l.items.forEach(({N:e,particlesPositionsSlot:t})=>{let{x:r,y:l,w:f}=t;for(let t=0;t<e;t++){let e=r+t%f,p=4*((l+Math.floor(t/f))*n+e);i[c[u+t]]=d[p]+a,s[c[u+t]]=d[p+1]+o}u+=e}),e&&(f(),p()),{X:i,Y:s}},f=()=>{u&&=(u.stop(),u.destroy(),void 0)},p=()=>{l&&=(Ge(t,l),void 0)},m=e=>{let r;if(n.groups){let t={};Object.entries(n.groups).forEach(([e,n])=>n.forEach(n=>{t[n]=Number(e)})),r=At(Et(e),Object.values(t)),r.map(({nodes:e})=>e).flat().forEach((e,t)=>{c[t]=e.id}),r=r.map(e=>kt(e,s))}else r=[kt(e,s)];return We(t,r)},h={setOptions(e={}){return r=new je({...Me,...e}),l&&(f(),u=Ct(t,l,r)),h},setGraph(e={nodes:[],edges:[]}){return l&&=(Ge(t,l),void 0),l=m(e),r&&(f(),u=Ct(t,l,r)),h},start(){if(!u)throw Error(`No graph has been set`);return u.start().finally(()=>n.onEnd?.(1)).catch(e=>{throw Error(`Something went wrong during GPU layout: `+e)}),h},stop(){return u&&u.stop(),h},step(){if(!u)throw Error(`No graph has been set`);return u.step(),h},data:e=>d(e),iterations:()=>1};return l=m(e),u=Ct(t,l,r),h}function Mt(e={}){let t=e.canvas??document.createElement(`canvas`),n=window.devicePixelRatio||1,r=e.width??window.innerWidth*n,i=e.height??window.innerHeight*n;t.width=Math.ceil(r),t.height=Math.ceil(i),t.style.width=Math.ceil(r/n)+`px`,t.style.height=Math.ceil(i/n)+`px`;let a=t.getContext(`webgl2`,{antialias:!0});if(!a)throw Error(`WebGL 2.0 not supported`);return a}function Nt(e,t,n){try{let e=Mt(),t=()=>n(Error(`WebGL2 context lost`));return e.canvas.addEventListener(`webglcontextlost`,t),{context:e,cleanUp:()=>{e.canvas.removeEventListener(`webglcontextlost`,t),e.getExtension(`WEBGL_lose_context`)?.loseContext()}}}catch(e){return n(e),null}}const Pt=e=>{};function Ft(e){for(let t in e)typeof e[t]==`function`&&delete e[t];return e}const It={name:`force`,imports:{force:Te},configure(e,{graph:t,events:n}){let r=e.nodes._indexes,i=e.xs??t.getNodeAttribute(`x`).getMultiple(r),a=e.ys??t.getNodeAttribute(`y`).getMultiple(r),o=e.rs??t.getNodeAttribute(`radius`).getMultiple(r),s=t.getNodeAttribute(`layoutable`).getMultiple(r),c=e.edges,l=[],u=[],d={},f=e.edgeWeight||Pt,p=e.nodeMass?t=>e.nodeMass(e.nodes.get(t)):Pt;e.edgeStrength===void 0&&(e.edgeStrength=.5),e.gpu&&(e.edgeStrength/=2),e.gravity??=.01,e.siblingsOffset??=0,e.theta??=.62,e.autoStop=!!e.autoStop,e.alignSiblings=!!e.alignSiblings;let m=e.radiusRatio||1.25;for(let e=0;e<r.length;e++){let t=r[e];d[t]=e,l.push({id:e,x:i[e],y:a[e],r:o[e]*m,mass:p(e),pinned:!s[e]})}c.forEach(e=>{let t=d[e.getSource()._index],n=d[e.getTarget()._index];t!==n&&t!==void 0&&n!==void 0&&u.push({source:t,target:n,weight:f(e)})});let h=Ft({...e});return delete h.nodes,delete h.edges,{graph:{nodes:l,edges:u},options:h,indexes:r,done:!1,x:i,y:a,chunkPeriod:250}},update(e,t){if(!t.simulation&&e){let n;t.done=!1,t.graph=e.graph,t.options=e.options,t.indexes=e.indexes;let r=!1;if(e.options.gpu){let i=Nt(`webgl2`,{},n=>{console.warn(`GPU layout: WebGL context not available. Falling back on CPU. ${n||`unknown`}`),t.simulation=void 0,t.options.gpu=!1,t.cleanUp&&t.cleanUp(),It._update(e,t)});i&&(n=i.context,t.cleanUp=i.cleanUp),r=!!n}let i=Date.now();r||(e.options.nextTick=e=>Date.now()-i<=t.chunkPeriod?e():(i=Date.now(),setTimeout(e,0))),e.options.update=(e,n,r)=>{t.x=n,t.y=r},e.options.onEnd=()=>{if(r&&n){let{X:e,Y:n}=t.simulation.data(!0);t.x=e,t.y=n}t.done=!0,t.simulation=void 0,t.cleanUp&&t.cleanUp()},e.options.bucketSize=0;let a=r&&n?jt(e.graph,n,e.options).start():Te(e.graph,e.options).start();t.simulation=a;let{X:o,Y:s}=r&&n?{X:new Float32Array(e.graph.nodes.length),Y:new Float32Array(e.graph.nodes.length)}:a.data();t.x=o,t.y=s}return{graph:t.graph,indexes:t.indexes,x:t.x,y:t.y}},context(){return{done:!1,graph:{nodes:[],edges:[]},x:null,y:null,indexes:null,chunkPeriod:250}},stop(e){e.done=!0,e.simulation&&(e.simulation.stop(),delete e.simulation)},isRunning(e){return!e.done||(e.done=!1,!1)},onSync({indexes:e,x:t,y:n}){return{indexes:e,x:t,y:n}}};function Lt(e,t,n){let r=e.nodes,i=e.edges,a=e.maxSize,o=Object.keys(r),s=Object.keys(i),c=o.length*n.ppn,l=s.length*n.ppe,u={},d=10**(Math.log(Math.max(a,1))-6),f=d/2,p=Math.random,m=t.randomizeFactor||1,h;h=t.randomize===`locally`?e=>e+p()*m:t.randomize===`globally`?e=>p()*m:e=>e+p()*d-f;let g=new Float32Array(c),_=new Float32Array(l),v,y;for(v=0,y=0;v<o.length;v++){let e=o[v],t=r[e],i=t.x,a=t.y;t.pinned||(i=h(i),a=h(a)),u[e]=y,g[y+0]=i,g[y+1]=a,g[y+2]=0,g[y+3]=0,g[y+4]=0,g[y+5]=0,g[y+6]=t.mass,g[y+7]=1,g[y+8]=t.size,g[y+9]=t.pinned||0,y+=n.ppn}for(v=0,y=0;v<s.length;v++){let e=i[s[v]];_[y+0]=u[e.source],_[y+1]=u[e.target],_[y+2]=e.weight||0,y+=n.ppe}return{nodes:g,edges:_}}const Rt={name:`forceLink`,configure(e,{graph:t,camera:n,graphics:r}){let i=e.nodes._indexes,a=e.edges._indexes,o={},s={},c=i.length,l=a.length,u=t.getObjectList(!0),d=t.getObjectList(!1);(e.nodes||e.edges)&&(e={...e},delete e.nodes,delete e.edges);let f=t.getNodeAttribute(`innerStroke.width`).getMultiple(i),p=t.getNodeAttribute(`outerStroke.width`).getMultiple(i),m=t.degrees(i),h=e.xs??t.getNodeAttribute(`x`).getMultiple(i),g=e.ys??t.getNodeAttribute(`y`).getMultiple(i),_=e.rs??t.getNodeAttribute(`radius`).getMultiple(i),v=t.nodeList(i).getAttribute(`layoutable`),y=typeof e.nodeMass==`function`?e.nodeMass:(e,t,n)=>t+1;delete e.nodeMass;let b=typeof e.edgeWeight==`function`?e.edgeWeight:e=>1;delete e.edgeWeight,isFinite(e.scalingRatio)||delete e.scalingRatio;let x=i.reduce((e,t,n)=>(v[n]||(e[t]=!0),e),{}),S=0,C=0,w=0,T=n.getZoom();for(let e=0;e<i.length;e++){let t=i[e],n=h[e],r=g[e],a=_[e]+(f[e]+p[e])/T;o[t]={id:t,x:n,y:r,degree:m[e],size:a,pinned:!!x[t],mass:y(u.get(t),m[e],e)},w=Math.max(a,w)}if(c>1)for(let e=0;e<c;e++){let t=o[i[e]];S+=t.x,C+=t.y}S/=c,C/=c;let E={x:S,y:C},D=t.edgeList(a),O=D.getSource()._indexes,k=D.getTarget()._indexes;for(let e=0;e<l;e++){let t=a[e],n=O[e],r=k[e];o[n]&&o[r]&&(s[t]={source:n,target:r},s[t].weight=b(d.get(t)))}return{nodes:o,edges:s,maxSize:w,config:Ft(e),barycentre:E}},context(){return{chunkPeriod:250}},update(e,t){let n;if(!t.W&&e){n={ppn:10,ppe:3,ppr:9,MAX_SUBDIVISION_RETRIES:3,maxForce:10,iterations:0,converged:!1,settings:{linLogMode:!1,outboundAttractionDistribution:!1,adjustSizes:!1,edgeWeightInfluence:0,scalingRatio:100,strongGravityMode:!0,gravity:1,slowDown:1,barnesHutOptimize:!1,barnesHutTheta:.5,startingIterations:10,iterationsPerRender:10,maxIterations:1e3,avgDistanceThreshold:.01,autoStop:!0,alignNodeSiblings:!0,nodeSiblingsScale:5,nodeSiblingsAngleMin:0}},t.W=n;let r=Lt(e,e.config,n);t.NodeMatrix=r.nodes,t.EdgeMatrix=r.edges,n.nodesLength=r.nodes.length,n.edgesLength=r.edges.length;for(let t in e.config)n.settings[t]=e.config[t];t.nodes=e.nodes,t.edges=e.edges,t.barycentre=e.barycentre}else n=t.W;let r=t.NodeMatrix,i=t.EdgeMatrix;function a(){zt(n,r,i)}function o(e){let t=Object.keys(e),i={};for(let e=0;e<r.length;e+=n.ppn){let a=t[e/n.ppn];i[a]={id:a,x:r[e+0],y:r[e+1],pinned:r[e+9]}}return i}if(n.settings.autoStop){let e=Date.now();for(;!n.converged&&Date.now()-e<t.chunkPeriod;)a()}else{let e=n.iterations===0?n.settings.startingIterations:n.iterations+n.settings.iterationsPerRender;for(;n.iterations!==e;)a()}return{nodes:o(t.nodes),barycentre:t.barycentre}},isRunning(e){return!e.W.settings.autoStop||!e.W.converged||(e.W=void 0,!1)},stop(e){e.W&&(e.W.converged=!0)},onSync({nodes:e,barycentre:t},{graph:n}){let r=Object.keys(e),i=r.length,a=Array(i),o=Array(i),s=Array(i),c=Array(i),l=0,u=0,[d,f]=n.getAttributes(!0,[`x`,`y`]);for(let t=0;t<i;t++){let n=r[t],i=e[n],p=parseInt(n);a[t]=p,c[t]=i.pinned;let m,h;i.pinned?(m=d.get(p),h=f.get(p)):(m=i.x,h=i.y),o[t]=m,s[t]=h,l+=m,u+=h}let p=l/i-t.x,m=u/i-t.y;for(let e=0;e<i;e++)c[e]||(o[e]-=p,s[e]-=m);return{indexes:a,x:o,y:s}}};function zt(e,t,n){let r=e.ppn,i=e.ppe;e.ppr;for(let n=0;n<e.nodesLength;n+=r)t[n+4]=t[n+2],t[n+5]=t[n+3],t[n+2]=0,t[n+3]=0;let a=e.settings.scalingRatio;if(!e.settings.barnesHutOptimize)for(let n=0;n<e.nodesLength;n+=r)for(let e=0;e<n;e+=r){let r=t[n+0]-t[e+0],i=t[n+1]-t[e+1],o=Math.sqrt(r*r+i*i);if(o>0){let s=a*t[n+6]*t[e+6]/o/o;t[n+2]+=r*s,t[n+3]+=i*s,t[e+2]-=r*s,t[e+3]-=i*s}}let o=e.settings.gravity/a;for(let n=0;n<e.nodesLength;n+=r){let r=t[n+0],i=t[n+1],s=Math.sqrt(r*r+i*i),c=0;e.settings.strongGravityMode?s>0&&(c=a*t[n+6]*o):s>0&&(c=a*t[n+6]*o/s),t[n+2]-=r*c,t[n+3]-=i*c}for(let r=0;r<e.edgesLength;r+=i){let i=n[r+0],a=n[r+1],o=n[r+2]**+e.settings.edgeWeightInfluence,s=t[i+0]-t[a+0],c=t[i+1]-t[a+1],l=Math.sqrt(s*s+c*c),u=0;l>0&&(u=e.settings.linLogMode?-1*o*Math.log(1+l)/l:-1*o),l>0&&(t[i+2]+=s*u,t[i+3]+=c*u,t[a+2]-=s*u,t[a+3]-=c*u)}let s=0;for(let n=0;n<e.nodesLength;n+=r){if(t[n+9])continue;let r=t[n+6]*Math.sqrt((t[n+4]-t[n+2])*(t[n+4]-t[n+2])+(t[n+5]-t[n+3])*(t[n+5]-t[n+3])),i=Math.sqrt((t[n+4]+t[n+2])*(t[n+4]+t[n+2])+(t[n+5]+t[n+3])*(t[n+5]+t[n+3]))/2,a=t[n+7]*Math.log(1+i)/(1+Math.sqrt(r));t[n+7]=Math.min(1,Math.sqrt(a*(t[n+2]*t[n+2]+t[n+3]*t[n+3])/(1+Math.sqrt(r))));let o=t[n+0],c=t[n+1];t[n+0]+=t[n+2]*(a/e.settings.slowDown),t[n+1]+=t[n+3]*(a/e.settings.slowDown);let l=t[n+0]-o,u=t[n+1]-c;s+=Math.sqrt(l*l+u*u)}e.iterations++,e.settings.autoStop&&(e.converged=e.iterations>e.settings.maxIterations||s/e.nodesLength<e.settings.avgDistanceThreshold)}const Y=1e-5,X=[],Bt=[],Vt={id:`__SENTINEL__`,layer:-1,sink:!1,fixed:!1,siblingIndex:-1,parentIds:[],children:[],radius:0,ref:null};function Ht(e,t){return{id:e,layer:t,data:Vt,children:Bt,ref:void 0,x:0,y:0}}function Ut(e){return e.data===Vt}function Wt(e){return e.data!==Vt}function Z(e,t){for(let n=0;n<e.length;n++){let r=e[n];for(let e=0;e<r.length;e++)t(r[e],e,r,n)}}function Gt(e){let t={};for(let n=0;n<e.length;n++){let{source:r,target:i}=e[n];t[r]=t[r]||[],t[r].push(i)}return t}function Kt(e){let t=Math.floor(e.length/2),n=[...e].sort((e,t)=>e-t);return n.length%2==0?(n[t-1]+n[t])/2:n[t]}function qt(e){if(e.sort((e,t)=>e-t),e.length===0)return 0;let t=Math.floor(e.length/2);return(e[t]+e[t])/2}var Jt=class{data;prev;next;constructor(e,t=null,n=null){this.data=e,this.prev=t,this.next=n}toString(){return this.data}},Yt=class{head=null;tail=null;byId={};byIndex={};length=0;append(e,t){let n;return this.head?(n=new Jt(e,this.tail),this.tail=this.tail.next=n):(n=new Jt(e),this.tail=this.head=n),this.byId[t]=n,this.byIndex[this.length++]=n,n}forEach(e){let t=this.head,n=0;for(;t;)e(t,n),n++,t=t.next}};function Xt(e){let t=[],n=e.nodes;for(let e=0;e<n.length;e++){let r=n[e];t[r.layer]=t[r.layer]||[],t[r.layer].push(r),r.children=r.children.map(e=>{if(e.layer===r.layer+1)return e;let n=e;for(let i=e.layer-1;i>r.layer;i--){let a=Ht(`${r.id}->${e.id}@${i}`,i);a.children=[n],t[i]=t[i]||[],t[i].push(a),n=a}return n})}return t}function Zt(e,t,n){let r={};for(let e=0;e<t.length;e++)r[t[e].id]=e;let i=e.map(e=>(n[e.id]||[]).map(e=>r[e]).sort()),a=0;for(let e=0;e<i.length;e++){let t=i[e],n=t.length?t[t.length-1]:-1;for(let t=e+1;t<i.length;t++)a+=i[t].filter(e=>e<n).length}return a}function Qt(e,t,n,r,i){let a={};for(let r=0;r<e.length;r++)a[e[r].id]=qt((t[e[r].id]||[]).map(e=>n[e]))||0;i?e.sort((e,t)=>{let i=a[e.id]-a[t.id],o=r[e.id]===r[t.id],s=e.data.siblingIndex,c=t.data.siblingIndex;return o&&s>-1&&c>-1?s-c:i===0?n[t.id]-n[e.id]:i}):e.sort((e,t)=>{let r=a[e.id]-a[t.id];return r===0?n[t.id]-n[e.id]:r})}function $t(e){let{layers:t,topDown:n,topDownAdj:r,bottomUpAdj:i,idToIndex:a,crossings:o,sortSiblings:s}=e,c=n?r:i,l=n?0:t.length-1;for(let e=l;n?e<t.length:e>=0;n?e++:e--){Qt(t[e],c[e]||{},a,i[e]||{},s);let n=e>0?Zt(t[e-1],t[e],r[e-1]||{}):0,l=e<t.length-1?Zt(t[e],t[e+1],r[e]||{}):0;if(l+n<=(o[e]||0)+(o[e-1]||0)){o[e]=l,e>0&&(o[e-1]=n);let r=t[e];for(let e=0;e<r.length;e++)a[r[e].id]=e}else t[e].sort((e,t)=>a[e.id]-a[t.id])}}function en(e,t,n){if(!n&&!t)return;let r={},i=e.map(()=>({})),a=e.map(()=>({}));if(e.forEach((e,t)=>{e.forEach((e,o)=>{r[e.id]=n?e.data.siblingIndex:o,e.children.forEach(n=>{let r=n.layer;r>t?(i[t][e.id]=i[t][e.id]||[],i[t][e.id].push(n.id),a[r][n.id]=a[r][n.id]||[],a[r][n.id].push(e.id)):(i[r][n.id]=i[r][n.id]||[],i[r][n.id].push(e.id),a[t][e.id]=a[t][e.id]||[],a[t][e.id].push(n.id))})})}),r[-1]=-1,n&&(e.forEach(e=>e.sort((e,t)=>r[e.id]-r[t.id])),!t))return;let o=e.slice(1).map((t,n)=>Zt(e[n],t,i[n])),s=[[50,100],[100,10],[1e3,1],[5e3,0]],c=Math.max(...e.map(e=>e.length)),l=(s.find(([e])=>c<e)||s[s.length-1])[1];for(let t=0;t<l;t++)$t({layers:e,topDown:!0,topDownAdj:i,bottomUpAdj:a,idToIndex:r,crossings:o,sortSiblings:n}),$t({layers:e,topDown:!1,topDownAdj:i,bottomUpAdj:a,idToIndex:r,crossings:o,sortSiblings:n})}var tn=class{edges=[];nodeMap={};nodeIndexTopDown={};nodeToLayer={};longEdges={};virt={};height={};breadth={};first=[];totalW={};mDist={};X={};block={};nodeList=new Yt;nodeDistance;layerDistance;layers;N=0;Y;adjacencyList;neighbours;constructor(e,t,n){this.layers=e,this.nodeDistance=t,this.layerDistance=n;let{breadth:r,virt:i,height:a,nodeToLayer:o,nodeIndexTopDown:s,nodeMap:c,longEdges:l,edges:u}=this,d=0;Z(this.layers,(e,t,n,r)=>{if(s[e.id]=d++,c[e.id]=e,o[e.id]=r,this.nodeList.append(e,e.id),e.children.forEach(t=>{let n=Ut(t)||Ut(e);u.push({source:e.id,target:t.id,virtual:n,id:u.length})}),l[e.id])return;let i=[e.id];if(l[e.id]=i,!Wt(e))for(let t=0;t<e.children.length;t++){let n=e.children[t];if(Wt(n))continue;let r=n;for(;Ut(r);)i.push(r.id),l[r.id]=i,r=r.children[0]}});let f=this.adjacencyList=Gt(u);this.N=e.reduce((e,t)=>e+t.length,0),this.Y=new Float32Array(e.length),this.first=e.map(e=>e[0]),e.forEach((e,t)=>a[t]=0),Z(this.layers,(e,t,n,o)=>{let s=f[e.id]?f[e.id].length:0;i[e.id]=Ut(e)&&s===1,this.nodeToLayer[e.id]=o,i[e.id]?r[e.id]=0:(r[e.id]=2*e.data.radius,a[o]=Math.max(a[o]||0,2*e.data.radius))});let p={},m={};u.forEach(e=>{let t=e.source,n=e.target;p[n]=p[n]||[],p[n].push(t),m[t]=m[t]||[],m[t].push(n)}),Object.values(p).forEach(e=>{e.sort((e,t)=>this.nodeIndexTopDown[e]-this.nodeIndexTopDown[t])}),Object.values(m).forEach(e=>{e.sort((e,t)=>this.nodeIndexTopDown[e]-this.nodeIndexTopDown[t])}),this.neighbours={prev:p,next:m}}computeMinNodeDistances(){let{layers:e,totalW:t}=this;Z(e,e=>{t[e.id]=0}),Z(e,e=>{t[e.data.id]=0}),this.layers.forEach(e=>{t[e[0].id]=0,e.slice(1).forEach((n,r)=>{let i=e[r],a=n.id;t[a]=t[i.id]+i.data.radius+n.data.radius+this.nodeDistance})})}decrossVirtualEdges(){this.layers.forEach(e=>{let t=-1;e.forEach(e=>{if(!this.virt[e.id])return;let n=(this.neighbours.next[e.id]||X)[0];if(this.virt[n])if(t!==-1&&t>this.nodeIndexTopDown[n]){let t=this.longEdges[e.id],r=0;for(r=0;r<t.length&&t[r]!==n;r++);let i=t.slice(r);i.forEach(e=>this.longEdges[e]=i);let a=t.slice(0,r);a.forEach(e=>this.longEdges[e]=a)}else t=this.nodeIndexTopDown[n]})})}placeLongEdges(){let{X:e,layers:t}=this;Z(t,t=>{e[t.id]=0});for(let n=1;n>=-1;n-=2){let r={},i=0,a={};Z(t,e=>{a[e.id]=0}),a[Vt.id]=0;let o=n;t.forEach(e=>{let t=o===1?e[0]:e[e.length-1];a[t.id]||(this.longEdges[t.id].forEach(e=>{a[e]=i}),i++);let n=o===1?0:e.length-1,r=n+o;for(;r>=0&&r<e.length;)t=e[r],a[t.id]||this.longEdges[t.id].forEach(t=>{a[t]=a[e[n].id]}),n=r,r+=o});let s={};t.forEach(e=>{for(let t=o===1?0:e.length-1;o===1?t<e.length:t>=0;t+=o){let n=e[t],r=a[n.id];s[r]=s[r]||[],s[r].push(n.id)}});let c={};this.nodeList.forEach(e=>{c[e.data.id]=0});for(let e=0;e<i;e++){let t={done:!1,dist:0},i=s[e];for(let e=0;e<i.length;e++){let o=i[e];this.sortLongEdges(o,n,c,t,a,r)}if(!t.done){let n=this.layers[this.nodeToLayer[s[e][0]]],r=[];n.forEach(e=>{for(let t of this.neighbours.prev[e.id]||X){let n=Math.abs(c[t]-c[e.id]);r.push(n)}}),r.length!==0&&(t.dist=Kt(r))}for(let e=0;e<i.length;e++)c[i[e]]-=n*t.dist}Z(t,t=>{e[t.id]+=c[t.id]/2})}}sortLongEdges(e,t,n,r,i,a){if(a[e])return!1;let o=!1,s=0,{nodeToLayer:c,totalW:l}=this,u=this.longEdges[e];return u.forEach(e=>{a[e]=1}),u.forEach(e=>{let u=this.nodeList.byIndex[this.nodeIndexTopDown[e]-t];if(!u)return;let d=u.data.id,f=e,p=c[d]===c[f],m=i[d]===i[f];!p||!m||(this.sortLongEdges(d,t,n,r,i,a),(!o||t*(s-n[d])<t*(l[f]-l[d]))&&(o=!0,s=n[d]+l[f]-l[d]))}),u.forEach(e=>{n[e]=s;let a=this.nodeList.byId[e],o=t===1?a.next:a.prev;if(!o)return;let u=o.data.id,d=e,f=c[u]===c[d],p=i[u]!==i[d],m=t*(l[u]-l[d]-n[u]+n[d]);f&&p&&(!r.done||m>r.dist)&&(r.dist=m,r.done=!0)}),!0}placeNonVirtualNodes(){let e={};Z(this.layers,t=>{e[t.id]=-1});let{X:t,totalW:n,virt:r,nodeIndexTopDown:i,mDist:a,nodeList:o}=this,s={};Z(this.layers,(e,i,a,o)=>{if(!r[e.id]){s[e.id]=!1;return}let c=this.nodeList.byId[e.id].next;for(;c&&this.nodeToLayer[c.data.id]===o&&!r[c.data.id];)c=c.next;s[e.id]=!!c&&this.nodeToLayer[c.data.id]===o&&t[c.data.id]-t[e.id]<n[c.data.id]-n[e.id]+Y}),Z(this.layers,t=>{let n=t.id;s[n]&&e[n]===-1&&this.longEdges[n].forEach(t=>{t!==n&&(e[t]=+(i[t]<i[n]))})}),Z(this.layers,e=>{a[e.id]=n[e.id]});for(let n=0;n<2;n++)for(let c=n?this.layers.length-1:0;c>=0&&c<this.layers.length;n?c--:c++){let l=-1,u=this.layers[c];if(u.forEach((c,u,d)=>{let f=c.id;if(r[f]){if(l===-1){this.placeSequence(-1,f,d[0].id,o.byId[f].prev.data.id,n);for(let e=0;e<u;e++){let n=d[e].id;a[n]=a[f]-t[f]+t[n]}}else if(e[l]!==1-n){s[l]||this.placeSequence(l,f,o.byId[l].next.data.id,o.byId[f].prev.data.id,n);let t=n===1?this.neighbours.prev:this.neighbours.next,a=(t[l]||X)[0],c=(t[f]||X)[0];if(r[a]&&r[c])for(let t=i[a]+1;t<i[c];t++)e[o.byIndex[t].data.id]=n}l=f}}),l===-1)this.placeSequence(-1,-1,u[0].id,u[u.length-1].id,n),u.forEach(({id:e})=>{a[e]=t[e]});else{this.placeSequence(l,-1,o.byId[l].next.data.id,u[u.length-1].id,n);for(let e=u.length-1;e>=0;e--){let n=u[e].id;if(n===l)break;a[n]=a[l]-t[l]+t[n]}}}}placeSequence(e,t,n,r,i,a=0){if(a===2048)return;let o=this.nodeIndexTopDown[n],s=this.nodeIndexTopDown[r],{X:c,nodeIndexTopDown:l,mDist:u}=this;if(o===s)c[n]=this.placeNode(n,e,t,c[n],i);else if(o<s){let o=Math.floor((l[n]+l[r])/2),s=this.nodeList.byIndex[o],c=s.next.data.id,d=u[c]-u[s.data.id];this.placeSequence(e,t,n,s.data.id,i,a+1),this.placeSequence(e,t,c,r,i,a+1),this.combineSequences(e,t,n,r,c,s.data.id,i,d)}}calculateBends(e,t,n,r,i,a,o,s){let c=0,l=[],{X:u,mDist:d,neighbours:f}=this,p=this.nodeIndexTopDown[n],m=this.nodeIndexTopDown[r];for(let n=this.nodeList.byId[a],r=this.nodeIndexTopDown[n.data.id];r>=p&&r<=m&&n;n=e===-1?n.prev:n.next,r=n&&this.nodeIndexTopDown[n.data.id]){let r=n.data.id,p=(t===0?f.prev[r]:f.next[r])||X,m=0;for(let t=0;t<p.length;t++){let n=p[t];if(e*(u[n]-u[r])<Y)m++;else{m--;let t=u[n]+d[a]-d[r];e*(u[a]-t)>-Y?c++:(s===-1||e*(t-u[s]+d[s]-d[a])<Y)&&e*(t-u[i])<o-Y&&l.push({value:2,key:t})}}let h=u[r]+d[a]-d[r];e*(u[a]-h)>-Y?c+=m:(s===-1||e*(h-u[s]+d[s]-d[a])<Y)&&e*(h-u[i])<o-Y&&l.push({value:m,key:h})}return s!==-1&&l.push({value:this.edges.length,key:u[s]-d[s]+d[a]}),l.sort((e,t)=>e.key-t.key),{res:c,bends:l.reduce((e,t,n)=>{if(n<l.length-1){let r=l[n+1];Math.abs(t.key-r.key)>Y?t.value>0&&e.push(t):t.value+=r.value}else t.value>0&&e.push(t);return e},[])}}combineSequences(e,t,n,r,i,a,o,s){let{X:c,mDist:l,nodeIndexTopDown:u}=this,{res:d,bends:f}=this.calculateBends(-1,o,n,r,i,a,s,e),{res:p,bends:m}=this.calculateBends(1,o,n,r,a,i,s,t);for(f.length>0&&f.reverse();c[i]-c[a]<s-Y;){let e=0,t=0;if(d<p){let t=f.length;if(t>0){let t=f.pop();e=t.value,c[a]=t.key}(t===0||c[i]-c[a]>s+Y)&&(c[a]=c[i]-s)}else if(d>p){let e=m.length;if(e>0){let e=m.pop();t=e.value,c[i]=e.key}(e===0||c[i]-c[a]>s+Y)&&(c[i]=c[a]+s)}else{let n=(s-c[i]+c[a])/2,r=f.length===0?n+1:c[a]-f[f.length-1].key,o=m.length===0?n+1:m[m.length-1].key-c[i];r<n+Y&&r<o+Y&&(e=f.pop().value),o<n+Y&&o<r+Y&&(t=m.pop().value),n=Math.min(n,r,o),c[a]-=n,c[i]+=n}d+=e,p+=t}let h,g=this.nodeList.byId[a].prev;for(;g&&(h=g.data.id)!==void 0&&u[h]>=u[n]&&c[a]-c[h]<l[a]-l[h];)c[h]=c[a]-l[a]+l[h],g=g.prev;for(g=this.nodeList.byId[i].next;g&&(h=g.data.id)!==void 0&&u[h]<=u[r]&&c[i]-c[h]>l[i]-l[h];)c[h]=c[i]-l[i]+l[h],g=g.next}placeNode(e,t,n,r,i){let{X:a,neighbours:o,mDist:s}=this,c=((i===0?o.prev:o.next)[e]||X).map(e=>a[e]);return c.length===0?a[e]:(r=Kt(c),t!==-1&&(r=Math.max(r,a[t]+s[e]-s[t])),n!==-1&&(r=Math.min(r,a[n]+s[e]-s[n])),r)}moveLongEdge(e,t,n){let{X:r,virt:i,totalW:a,nodeList:o}=this,s=e.id;if(n[s]||!i[s])return;let c=this.longEdges[s];if(!c)return;c.forEach(e=>{n[e]=!0});let l=c[0],u=c[c.length-1],d=[];t<0?d.push(r[l]<r[u]?r[l]:r[u],r[l]<r[u]?r[u]:r[l]):t>0?d.push(r[l]<r[u]?r[u]:r[l],r[l]<r[u]?r[l]:r[u]):d.push(r[l],r[u]);let f=d[0],p=0,m=!1;for(;!m&&d.length!==0;){p=d.pop(),m=!0;let e=p;c.forEach(t=>{let i=this.layers[this.nodeToLayer[t]];if(t!==i[0].id){let i=o.byId[t].prev.data;e-r[i.id]<a[t]-a[i.id]&&this.moveLongEdge(i,-1,n),m&&=e-r[i.id]>=a[t]-a[i.id]-Y}if(t!==i[i.length-1].id){let i=o.byId[t].next.data;e-r[i.id]>a[t]-a[i.id]&&this.moveLongEdge(i,1,n),m&&=e-r[i.id]<=a[t]-a[i.id]+Y}})}m||(p=f,c.forEach(e=>{let t=this.layers[this.nodeToLayer[e]];if(e!==t[0].id){let t=o.byId[e].prev.data;p=Math.max(p,r[t.id]+a[e]-a[t.id])}if(e!==t[t.length-1].id){let t=o.byId[e].next.data;p=Math.min(p,r[t.id]+a[e]-a[t.id])}})),c.forEach(e=>{r[e]=p})}moveLongEdges(){let e={};this.layers.forEach(t=>{let n=Math.floor(t.length/2);for(let r=n;r<t.length;r++)this.moveLongEdge(t[r],0,e);for(let r=n-1;r>=0;r--)this.moveLongEdge(t[r],0,e)})}computeY(){let{Y:e,layers:t,height:n}=this;e[0]=0,t.slice(1).forEach((t,r)=>{e[r+1]=e[r]+(n[r]+n[r+1])/2+this.layerDistance})}straightenLongEdge(e,t){let{nodeList:n,longEdges:r,neighbours:i,X:a,Y:o,nodeToLayer:s,totalW:c}=this,l=r[e.id];if(t[e.id]||!i.prev[e.id]||i.prev[e.id].length!==1||!i.next[e.id]||i.next[e.id].length!==1||!(l&&l.length<2))return;t[e.id]=!0;let u=i.prev[e.id][0],d=i.next[e.id][0];if(s[d]===s[u])return;let f=a[u]+(a[d]-a[u])*(o[s[e.id]]-o[s[u]])/(o[s[d]]-o[s[u]]);if(e!==this.first[s[e.id]]){let r=n.byId[e.id].prev.data;if(f-a[r.id]<c[e.id]-c[r.id]-Y&&this.straightenLongEdge(r,t),f-a[r.id]<c[e.id]-c[r.id]-Y)return}let p=this.layers[s[e.id]];if(e!==p[p.length-1]){let r=n.byId[e.id].next.data;if(a[r.id]-f<c[r.id]-c[e.id]-Y&&this.straightenLongEdge(r,t),a[r.id]-f<c[r.id]-c[e.id]-Y)return}a[e.id]=f}straightenEdges(){let e={};this.layers.forEach(t=>{let n=Math.floor(t.length/2);for(let r=n;r<t.length;r++)this.straightenLongEdge(t[r],e);for(let r=n-1;r>=0;r--)this.straightenLongEdge(t[r],e)})}run(){this.computeMinNodeDistances(),this.decrossVirtualEdges(),this.placeLongEdges(),this.placeNonVirtualNodes(),this.moveLongEdges(),this.computeY(),this.straightenEdges(),Z(this.layers,(e,t,n,r)=>{e.x=this.X[e.id],e.y=this.Y[r]})}};function nn(e,t=20,n=50){return new tn(e,t,n).run(),e}function rn(e,t,n){let r=Array.from({length:e},()=>[]),i=Array.from({length:e},()=>[]);for(let a=0;a<t.length;a++){let o=t[a],s=n[a];o<e&&s<e&&(r[o].push(s),i[s].push(o))}return{out:r,inc:i}}function an(e,t,n){let r=new Map;for(let e=0;e<t.length;e++){let i=t[e],a=n[e];r.has(i)||r.set(i,[]),r.has(a)||r.set(a,[]),r.get(i).push(a),r.get(a).push(i)}let i=Array.from(r.keys()),a=[];for(;i.length>0;){let e=i[0],t=new Set([e]),n=[e],o=[e];for(;n.length>0;){let e=n.shift();for(let i of r.get(e))t.has(i)||(t.add(i),o.push(i),n.push(i))}a.push(o);let s=new Set(o);i=i.filter(e=>!s.has(e))}for(let t=0;t<e;t++)r.has(t)||a.push([t]);return a}function on(e,t,n,r){let i=[];for(let t of e){let e=r(t);if(typeof e==`number`&&!isNaN(e)){if(e<0)throw Error(`Layer must be greater than or equal to 0`);i.push([t,e])}}if(i.length===0)return null;i.sort((e,t)=>e[1]-t[1]);let a=new Set;for(let[e,t]of i)t!==0&&a.add(e);let o=new Set(e),s=new Map;for(let t of e)s.set(t,[]);for(let e=0;e<t.length;e++)o.has(t[e])&&(s.get(t[e])?.push(n[e]),s.get(n[e])?.push(t[e]));if(!i.some(([,e])=>e===0)){i.sort((e,t)=>e[1]-t[1]);let e=new Set,t=[i[0]],n;for(;t.length>0;){let[r,i]=t.shift();if(i===0){n=r;break}e.add(r);for(let n of s.get(r)||[])!a.has(n)&&!e.has(n)&&t.push([n,i-1])}if(n!==void 0)i.push([n,0]);else{let e=i[0][1];for(let t=0;t<i.length;t++)i[t][1]-=e}}let c=i.filter(([,e])=>e===0).map(([e])=>e),l=new Map,u=new Map,d=new Map;for(let e of c)l.set(e,0),u.set(e,[]);{let e=c.slice();for(;e.length>0;){let t=e.shift(),n=l.get(t);for(let r of s.get(t)||[]){let i=l.get(r);i===void 0?(l.set(r,n+1),u.set(r,[t]),e.push(r)):i===n+1&&u.get(r)?.push(t)}}}for(let[e,t]of u.entries())for(let n of t)d.set(n,(d.get(n)||[]).concat(e));let f=()=>{let t=e.filter(e=>l.get(e)===0);l.clear();for(let e of t)l.set(e,0);let n=t.slice();for(;n.length>0;){let e=n.shift(),t=l.get(e);for(let r of d.get(e)||[])l.get(r)===void 0&&(l.set(r,t+1),n.push(r))}};for(let[t,n]of i)if(l.get(t)!==n)if(n===0){let e=u.get(t)||[];u.set(t,[]);for(let n of e)d.set(n,(d.get(n)||[]).filter(e=>e!==t));f()}else{let r=e.map(e=>({id:e,l:l.get(e)})).find(e=>e.l===n-1&&e.id!==t);if(!r)continue;let i=u.get(t)||[];u.set(t,[r.id]);for(let e of i)d.set(e,(d.get(e)||[]).filter(e=>e!==t));d.set(r.id,(d.get(r.id)||[]).concat(t)),f()}let p=[],m=[];for(let[e,t]of u.entries())if(t.length!==0)for(let n of t)p.push(n),m.push(e);return{src:p,tgt:m}}function sn(e,t,n){let r=new Set(e),i=new Map,a=new Map;for(let t of e)i.set(t,[]),a.set(t,[]);for(let e=0;e<t.length;e++)r.has(t[e])&&i.get(n[e]).push(t[e]);let o=[];for(let t of e){for(let e of i.get(t))a.get(e).push(t);i.get(t).length===0&&o.push(t)}let s=[],c=new Set,l=o.slice();for(;l.length>0;){let e=l.pop();if(!c.has(e)){c.add(e),s.push(e);for(let t of a.get(e))l.push(t)}}return{order:s,childrenOf:a}}function cn(e,t,n,r){let i=t.length,a=Array.from({length:e},()=>[]);for(let r=0;r<i;r++){let i=t[r];i>=0&&i<e&&i!==n[r]&&a[i].push(r)}let o=new Uint8Array(e),s=new Uint8Array(i),c=[],l=[],u=r??Array.from({length:e},(e,t)=>t);for(let e of u)if(o[e]===0)for(c.push(e),l.push(0),o[e]=1;c.length>0;){let e=c.length-1,t=c[e],r=a[t];if(l[e]<r.length){let t=r[l[e]++],i=n[t];o[i]===0?(o[i]=1,c.push(i),l.push(0)):o[i]===1&&(s[t]=1)}else o[t]=2,c.pop(),l.pop()}let d=[],f=[];for(let e=0;e<i;e++)t[e]!==n[e]&&(s[e]?(d.push(n[e]),f.push(t[e])):(d.push(t[e]),f.push(n[e])));return{sources:d,targets:f}}function ln(e,t,n,r,a,s){if(i(`layout`)){let r=o();if(r&&r.hier_reference_layering){let i=t=>{let n=new Uint32Array(e+1),r=0;for(let i=0;i<e;i++)n[i]=r,r+=t[i].length;n[e]=r;let i=new Uint32Array(r),a=0;for(let n=0;n<e;n++)for(let e=0;e<t[n].length;e++)i[a++]=t[n][e];return[n,i]},[o,c]=i(t),[l,u]=i(n),d=new Float64Array(e).fill(NaN);if(s)for(let t=0;t<e;t++){let e=s[t];typeof e==`number`&&!isNaN(e)&&(d[t]=e)}let f=new Uint8Array(e);for(let e of a)f[e]=1;let p=r.hier_reference_layering(e,o,c,l,u,f,d);return Array.from(p)}}let c=Array(e).fill(0);{let r=new Uint8Array(e),i=new Float64Array(e),a=e=>{let n=[e];for(;n.length>0;){let e=n[n.length-1];if(r[e]){n.pop();continue}let a=!0;for(let i of t[e])r[i]||(n.push(i),a=!1);if(!a)continue;let o=1/0;for(let n of t[e])o=Math.min(o,i[n]-1);o===1/0&&(o=0),i[e]=o,r[e]=1,n.pop()}};for(let t=0;t<e;t++)n[t].length===0&&a(t);let o=1/0;for(let t=0;t<e;t++)o=Math.min(o,i[t]);isFinite(o)||(o=0);for(let t=0;t<e;t++)c[t]=i[t]-o;if(s)for(let t=0;t<e;t++){let e=s[t];typeof e==`number`&&!isNaN(e)&&(c[t]=e)}}if(a.length>0){let t=-1/0;for(let n=0;n<e;n++)t=Math.max(t,c[n]);for(let e of a)c[e]=t+1}{let t=e>0;for(let n=0;n<e;n++)if(!c[n]){t=!1;break}if(t){let t=1/0;for(let n=0;n<e;n++)t=Math.min(t,c[n]);for(let n=0;n<e;n++)c[n]-=t}}{let t=[];for(let n=0;n<e;n++)t[c[n]]=0;let n=[],r=Array.from(t);for(let e=0;e<r.length;e++){if(e===0){n.push(0);continue}let t=n[e-1];n.push(r[e]===void 0?t-1:t)}for(let t=0;t<e;t++)c[t]+=n[c[t]]}return c}function un(e,t,n,r){let i=!1;for(let n=0;n<e&&!i;n++)for(let e of t[n])if(r[n]>r[e]){i=!0;break}if(!i)return;let a=Array(e);for(let n=0;n<e;n++)a[n]=t[n].filter(e=>r[n]<=r[e]);for(let n=0;n<e;n++)for(let e of t[n])r[n]>r[e]&&a[e].push(n);for(let r=0;r<e;r++)t[r]=a[r],n[r].length=0;for(let r=0;r<e;r++)for(let e of t[r])n[e].push(r)}function dn(e,t){let n=0;for(let r=0;r<e;r++)t[r]>n&&(n=t[r]);let r=Array.from({length:n+1},()=>[]);for(let n=0;n<e;n++)r[t[n]].push(n);return r}function fn(e){if(e.length===0)return 0;e.sort((e,t)=>e-t);let t=Math.floor(e.length/2);return(e[t]+e[t])/2}function pn(e,t,n){let r={};for(let e=0;e<t.length;e++)r[t[e]]=e;let i=e.map(e=>(n[e]||[]).map(e=>r[e]).sort((e,t)=>e-t)),a=0;for(let e=0;e<i.length;e++){let t=i[e].length?i[e][i[e].length-1]:-1;for(let n=e+1;n<i.length;n++)a+=i[n].filter(e=>e<t).length}return a}function mn(e,t,n,r,i,a){let o=t?n:r,s=t?0:e.length-1,c=t?e.length:-1,l=t?1:-1;for(let t=s;t!==c;t+=l){let r=e[t],s=o[t]||{},c={};for(let e of r)c[e]=fn((s[e]||[]).map(e=>i[e]).slice());let l=r.slice();r.sort((e,t)=>{let n=c[e]-c[t];return n===0?i[t]-i[e]:n});let u=t>0?pn(e[t-1],r,n[t-1]||{}):0,d=t<e.length-1?pn(r,e[t+1],n[t]||{}):0,f=a[t-1]||0,p=a[t]||0;if(u+d<=f+p){a[t]=d,t>0&&(a[t-1]=u);for(let e=0;e<r.length;e++)i[r[e]]=e}else for(let e=0;e<l.length;e++)r[e]=l[e]}}function hn(e,t,n,r,a){if(i(`layout`)){let n=o();if(n){let i=r.length,o=new Uint32Array(e.length+1),s=0;for(let t=0;t<e.length;t++)o[t]=s,s+=e[t].length;o[e.length]=s;let c=new Uint32Array(s),l=0;for(let t=0;t<e.length;t++)for(let n=0;n<e[t].length;n++)c[l++]=e[t][n];let u=new Uint32Array(i+1),d=0;for(let e=0;e<i;e++)u[e]=d,d+=t[e].length;u[i]=d;let f=new Uint32Array(d),p=0;for(let e=0;e<i;e++)for(let n=0;n<t[e].length;n++)f[p++]=t[e][n];let m=n.hier_barycenter_sweep(i,c,o,u,f,Int32Array.from(r),a),h=0;for(let t=0;t<e.length;t++)for(let n=0;n<e[t].length;n++)e[t][n]=m[h++];return}}let s=Array(r.length).fill(-1);for(let t of e)for(let e=0;e<t.length;e++)s[t[e]]=e;let c=e.map(()=>({})),l=e.map(()=>({}));for(let n=0;n<e.length;n++)for(let i of e[n])for(let e of t[i])r[e]===n+1&&((c[n][i]=c[n][i]||[]).push(e),(l[n+1][e]=l[n+1][e]||[]).push(i));let u=[];for(let t=0;t<e.length-1;t++)u[t]=pn(e[t],e[t+1],c[t]);for(let t=0;t<a;t++)mn(e,!0,c,l,s,u),mn(e,!1,c,l,s,u)}function gn(e,t,n,r,a,s,c){let l=t.length,u=Array(l).fill(0),d=Array(l).fill(0);if(i(`layout`)){let e=o(),i=0;for(let e=0;e<l;e++)for(let t of s[e])c[t]>c[e]&&(i+=c[t]-c[e]-1);if(e&&e.sugiyama_coordinates&&i<=5e6){let i=new Uint32Array(l+1),o=0,f=[];for(let e=0;e<l;e++)f.push(s[e].filter(t=>c[t]>=c[e]));for(let e=0;e<l;e++)i[e]=o,o+=f[e].length;i[l]=o;let p=new Uint32Array(o),m=0;for(let e=0;e<l;e++)for(let t of f[e])p[m++]=t;let h=new Float64Array(l);for(let e=0;e<l;e++)h[e]=t[e]||5;let g=e.sugiyama_coordinates(l,Int32Array.from(c),h,i,p,n,r);if(g.length>0||l<=1){for(let e=0;e<l;e++){let t=g[2*e]??0,n=g[2*e+1]??0;if(a===`BT`)n=-n;else if(a===`LR`){let e=t;t=n,n=-e}else if(a===`RL`){let e=t;t=-n,n=e}u[e]=t,d[e]=n}return{x:u,y:d}}}}let f=[],p=[];for(let e=0;e<l;e++){let n={id:e,layer:c[e],data:{id:e,radius:t[e]||5,siblingIndex:-1},children:[],x:0,y:0};f.push(n),p[e]=n}for(let e=0;e<l;e++)for(let t of s[e])c[t]>=c[e]&&p[e].children.push(p[t]);let m=Xt({nodes:f});f.length>1?(en(m,!0,!1),nn(m,n,r)):f.length===1&&(f[0].x=0,f[0].y=0);for(let e=0;e<l;e++){let t=p[e],n=t.x,r=t.y;if(a===`BT`)r=-r;else if(a===`LR`){let e=n;n=r,r=-e}else if(a===`RL`){let e=n;n=-r,r=e}u[e]=n,d[e]=r}return{x:u,y:d}}function _n(e,t,n,r,a,s,c,l,u,d){let f=t.length,p=Array(f).fill(0),m=Array(f).fill(0);if(i(`layout`)){let i=o();if(i){let o=(e,t)=>{let n=new Uint32Array(t+1),r=0;for(let i=0;i<t;i++)n[i]=r,r+=e[i].length;n[t]=r;let i=new Uint32Array(r),a=0;for(let n=0;n<t;n++)for(let t=0;t<e[n].length;t++)i[a++]=e[n][t];return[n,i]},h=new Uint32Array(e.length+1),g=0;for(let t=0;t<e.length;t++)h[t]=g,g+=e[t].length;h[e.length]=g;let _=new Uint32Array(g),v=0;for(let t=0;t<e.length;t++)for(let n=0;n<e[t].length;n++)_[v++]=e[t][n];let y=new Float64Array(f);for(let e=0;e<f;e++)y[e]=t[e]||5;let[b,x]=o(l,f),[S,C]=o(u,f),w=a===`BT`?1:a===`LR`?2:a===`RL`?3:0,T=i.hier_assign_coordinates(f,_,h,y,n,r,w,s,c,b,x,S,C,Int32Array.from(d));for(let e=0;e<f;e++)p[e]=T[e*2],m[e]=T[e*2+1];return{x:p,y:m}}}let h=a===`LR`||a===`RL`,g=a===`BT`||a===`RL`,_=Array(e.length).fill(0),v=e.map(e=>{let n=0;for(let r of e)n=Math.max(n,t[r]||5);return n});for(let t=0;t<e.length;t++)t===0?_[t]=v[t]:_[t]=_[t-1]+v[t-1]+r+v[t];for(let r=0;r<e.length;r++){let i=e[r],a=0;for(let e=0;e<i.length;e++){let o=i[e],s=t[o]||5,c=a+s,l=_[r];h?(m[o]=c,p[o]=g?-l:l):(p[o]=c,m[o]=g?-l:l),a=c+s+n}}for(let t=e.length-2;t>=0;t--){let n=e[t];for(let e of n){let n=l[e].filter(e=>d[e]===t+1);if(n.length>0){let t=0;for(let e of n)t+=h?m[e]:p[e];let r=t/n.length;h?m[e]=r:p[e]=r}}}if(s)for(let t=1;t<e.length;t++){let n=e[t],r=new Map;for(let e of n){let n=u[e].filter(e=>d[e]===t-1).sort().join(`,`);r.has(n)||r.set(n,[]),r.get(n).push(e)}for(let[,e]of r){if(e.length<2)continue;let t=h?m:p,n=e.reduce((e,n)=>e+t[n],0)/e.length-(e.length-1)*c/2;for(let r of e)t[r]=n,n+=c}}for(let r of e){r.sort((e,t)=>h?m[e]-m[t]:p[e]-p[t]);for(let e=1;e<r.length;e++){let i=r[e-1],a=r[e],o=(t[i]||5)+(t[a]||5)+n;h?m[a]-m[i]<o&&(m[a]=m[i]+o):p[a]-p[i]<o&&(p[a]=p[i]+o)}}for(let t of e){if(t.length===0)continue;let e=h?m:p,n=(Math.min(...t.map(t=>e[t]))+Math.max(...t.map(t=>e[t])))/2;for(let r of t)e[r]-=n}let y=[];for(let t of e)for(let e of t)y.push(e);if(y.length>0){let e=h?p:m,t=0;for(let n of y)t+=e[n];let n=t/y.length;for(let t of y)e[t]-=n}return{x:p,y:m}}function vn(e){let t=0,n=0;for(let r of e)t+=r.w*r.h,n=Math.max(n,r.w);e.sort((e,t)=>t.h-e.h);let r=[{x:0,y:0,w:Math.max(Math.ceil(Math.sqrt(t/.95)),n),h:1/0}];for(let t of e)for(let e=r.length-1;e>=0;e--){let n=r[e];if(!(t.w>n.w||t.h>n.h)){if(t.x=n.x,t.y=n.y,t.w===n.w&&t.h===n.h){let t=r.pop();e<r.length&&(r[e]=t)}else t.h===n.h?(n.x+=t.w,n.w-=t.w):t.w===n.w?(n.y+=t.h,n.h-=t.h):(r.push({x:n.x+t.w,y:n.y,w:n.w-t.w,h:t.h}),n.y+=t.h,n.h-=t.h);break}}}function yn(e,t,n,r,a,s){if(i(`layout`)){let i=o();if(i&&i.hier_pack_units){let o=t.length,c=new Uint32Array(e.length+1),l=0;for(let t=0;t<e.length;t++)c[t]=l,l+=e[t].nodes.length;c[e.length]=l;let u=new Uint32Array(l),d=0;for(let t of e)for(let e of t.nodes)u[d++]=e;let f=new Uint8Array(e.length),p=new Float64Array(e.length),m=new Float64Array(e.length);e.forEach((e,t)=>{e.fake&&(f[t]=1,p[t]=e.fake.w,m[t]=e.fake.h)});let h=new Float64Array(o);for(let e=0;e<o;e++)h[e]=r[e]??5;let g=s===`singleLine`?2:0,_=i.hier_pack_units(u,c,f,p,m,Float64Array.from(t),Float64Array.from(n),h,a,g);for(let e=0;e<o;e++)t[e]=_[e*2],n[e]=_[e*2+1];return}}for(let i of e){if(i.fake){i.w=i.fake.w,i.h=i.fake.h;continue}if(i.nodes.length===1){let e=2*(r[i.nodes[0]]??5);i.w=e+a/2,i.h=e+a/2;continue}let e=1/0,o=-1/0,s=1/0,c=-1/0;for(let a of i.nodes){let i=r[a]??5;e=Math.min(e,t[a]-i),o=Math.max(o,t[a]+i),s=Math.min(s,n[a]-i),c=Math.max(c,n[a]+i)}let l=(o+e)/2;for(let e of i.nodes)t[e]-=l;i.w=Math.abs(o-e)+a/2,i.h=Math.abs(c-s)+a/2}if(s!==`singleLine`)vn(e);else{let t=0;for(let n of e)n.x=t,n.y=0,t+=n.w}for(let r of e){let e=r.x||0,i=r.y||0;for(let a of r.nodes)t[a]+=e,n[a]+=i}}function bn(e,t={}){let{direction:n=`TB`,nodeDistance:r=5,levelDistance:i=50,componentDistance:a=25,roots:o=[],sinks:s=[],compactSiblings:c=!1,siblingsDistance:l=10,decross:u=!0,arrangeComponents:d=`fit`,gridDistance:f=50,layer:p}=t,{nodeCount:m,sources:h,targets:g,nodeRadii:_,nodeData:v}=e;if(m===0)return{x:[],y:[]};let y=[],b=[];for(let e=0;e<h.length;e++)h[e]!==g[e]&&(y.push(h[e]),b.push(g[e]));let{sources:x,targets:S}=cn(m,y,b),C=[],w=[];{let e=new Set;for(let t=0;t<x.length;t++){let n=x[t]+`->`+S[t];e.has(n)||(e.add(n),C.push(x[t]),w.push(S[t]))}}let T=an(m,C,w),E=Array(m).fill(0),D=Array(m).fill(0),O=t=>{if(e.nodeLayers){let n=e.nodeLayers[t];return typeof n==`number`&&!isNaN(n)?n:void 0}if(v&&p){let e=v[t],n=e?e[p]:void 0;return typeof n==`number`&&!isNaN(n)?n:void 0}};for(let e of T){let t=on(e,C,w,O),n=t?(()=>{let n=cn(m,t.src,t.tgt,e);return{src:n.sources,tgt:n.targets}})():null,{order:a,childrenOf:d}=sn(e,n?n.src:C,n?n.tgt:w),f=new Map;a.forEach((e,t)=>f.set(e,t));let p=a.length,h=[],g=[];for(let e=0;e<p;e++){let t=a[e];for(let n of d.get(t))h.push(e),g.push(f.get(n))}let y=a.map(e=>_[e]||5);v&&a.map(e=>v[e]);let b=o.filter(e=>f.has(e)).map(e=>f.get(e)),x=s.filter(e=>f.has(e)).map(e=>f.get(e)),{out:S,inc:T}=rn(p,h,g),k=ln(p,S,T,b,x,a.map(e=>O(e)));un(p,S,T,k);let A=dn(p,k);if(u){let e=0;for(let t of A)t.length>e&&(e=t.length);hn(A,S,T,k,e<50?100:e<100?10:+(e<1e3))}let j,M;try{let e=gn(A,y,r,i,`TB`,S,k);j=e.x,M=e.y}catch{let e=_n(A,y,r,i,`TB`,c,l,S,T,k);j=e.x,M=e.y}for(let e=0;e<p;e++)E[a[e]]=j[e],D[a[e]]=M[e]}let k=[];if(d===`grid`){let e=[];for(let t of T)t.length===1?e.push(t[0]):k.push({nodes:t,w:0,h:0,x:void 0,y:void 0});if(e.length>0){let t=e.slice().sort((e,t)=>(_[t]??5)-(_[e]??5)),n=Math.sqrt(t.length),r=Math.floor(n),i=Math.ceil(n);r*i<t.length&&(r<i?r++:i++);let a=0;for(let e of t)a=Math.max(a,2*(_[e]??5));let o=Math.max(1,a),s=Math.max(f||0,1),c=o*i+s*(i-1),l=o*r+s*Math.max(r-1,0);t.forEach((e,t)=>{let n=t%i,a=Math.floor(t/i);E[e]=c*n/i,D[e]=l*a/r}),k.push({nodes:t,fake:{w:c,h:l},w:c,h:l,x:void 0,y:void 0})}}else for(let e of T)k.push({nodes:e,w:0,h:0,x:void 0,y:void 0});if(yn(k.slice(),E,D,_,a,d),n===`BT`)for(let e=0;e<m;e++)D[e]=-D[e];else if(n===`RL`)for(let e=0;e<m;e++){let t=E[e];E[e]=-D[e],D[e]=t}else if(n===`LR`)for(let e=0;e<m;e++){let t=E[e];E[e]=D[e],D[e]=-t}if(m>0){let t=e.initialX,n=e.initialY,r=0,i=0;for(let e=0;e<m;e++)r+=t&&t[e]||0,i+=n&&n[e]||0;r/=m,i/=m;let a=0,o=0,s=0;for(let e of k)for(let t of e.nodes)a+=E[t]||0,o+=D[t]||0,s++;a/=s,o/=s;let c=r-a,l=i-o;for(let e=0;e<m;e++)E[e]=E[e]+c,D[e]=D[e]+l}return{x:E,y:D}}const xn={direction:`TB`,nodeDistance:5,levelDistance:50,componentDistance:50,siblingsDistance:10,compactSiblings:!1,gapWidth:1,arrangeComponents:`fit`,gridDistance:50,layer:`layer`,siblingIndex:``};function Sn(e){for(let t in e)typeof e[t]==`function`&&delete e[t];return e}function Cn(e,t,n){return t?t instanceof Object&&t._indexes?t:e.getNodes(t):n??e.nodeList()}function wn(){return{}}const Tn={name:`hierarchical`,configure(e,{graph:t,data:n}){let r={...xn,...e,nodeList:e.nodes};r.direction=e.direction||xn.direction,r.layerSeparation=r.levelDistance,r.nodesSeparation=r.nodeDistance,r.componentsSeparation=r.componentDistance,r.gapDistance=r.gapWidth,r.packing=r.arrangeComponents;let i=e.decross!==!1,a={...r},o=r.edges,s=r.nodeList;if(![`TB`,`BT`,`LR`,`RL`].includes(r.direction))throw Error(`direction should be one of the "TB", "BT", "LR", "RL"`);if(![`fit`,`grid`,`singleLine`].includes(r.packing))throw Error(`arrangeComponents should be one of the "fit", "grid", "singleLine"`);r.nodesGridSeparation=e.gridDistance||xn.gridDistance;let c=s.getId(),l=s.getAttribute(`layoutable`).reduce((e,t,n)=>(e[c[n]]=t,e),{}),u=s.getAttributes([`x`,`y`]).reduce((e,t,n)=>(e[c[n]]=t,e),{}),d=e.rs??s.getAttribute(`radius`);if(typeof a.layer!=`string`)throw Error(`'layer' should be the valid data field name`);if(a.siblingIndex===void 0&&(a.siblingIndex=``),typeof a.siblingIndex!=`string`)throw Error(`'siblingIndex' should be the valid data field name`);let f=Cn(t,r.roots,t.nodeList()),p=n.getProperty(r.nodeList,a.layer),m=a.siblingIndex.length?n.getProperty(r.nodeList,a.siblingIndex):[],h=f.map(e=>{let t=-1;return r.nodeList.forEach((n,r)=>{n===e&&(t=r)}),t});for(let e of h)p[e]=0;let g=Cn(t,r.sinks,t.nodeList()).toArray().reduce((e,t)=>(e[t.getId()]=!0,e),{}),_=c.map(e=>g[e]),v;return e.compactSiblings&&typeof e.compactSiblingsFunction==`function`&&(v=s.map(t=>e.compactSiblingsFunction(t))),{nodes:c,edges:o.map(e=>({id:e.getId(),source:e.getSource().getId(),target:e.getTarget().getId()})),decross:i,options:Sn(r),layoutable:l,packs:v,radiuses:d,siblingIndexes:m,layers:p,sinks:_,coords:u}},context:wn,update({nodes:e,edges:t,options:n,layoutable:r,radiuses:i,layers:a,packs:o,siblingIndexes:s,decross:c,sinks:l,coords:u}){let d=t.filter(({source:e,target:t})=>e in r&&t in r),f={nodes:e.map((e,t)=>({id:e,radius:i[t],layer:a[t],siblingIndex:s[t],sink:l[t],layoutable:r[e],x:u[e].x,y:u[e].y})),edges:d};if(o){let e=new Map;o.forEach((t,n)=>{e.set(f.nodes[n].id,t)})}let p={TB:`down`,BT:`up`,RL:`left`,LR:`right`},m={fit:`fit`,singleLine:`singleline`,grid:`grid`},h=f.nodes.length,g=new Map;f.nodes.forEach((e,t)=>g.set(e.id,t));let _=[],v=[];for(let e of f.edges){let t=g.get(e.source),n=g.get(e.target);t!==void 0&&n!==void 0&&(_.push(t),v.push(n))}let y=f.nodes.map(e=>e.radius||5),b=[],x=[];f.nodes.forEach((e,t)=>{e.layer===0&&b.push(t),e.sink&&x.push(t)});let S={down:`TB`,up:`BT`,left:`RL`,right:`LR`},C={fit:`fit`,singleline:`singleLine`,grid:`grid`},w=p[n.direction]||`down`,T=m[n.arrangeComponents]||`fit`,E=bn({nodeCount:h,sources:_,targets:v,nodeRadii:y,initialX:f.nodes.map(e=>e.x),initialY:f.nodes.map(e=>e.y),nodeLayers:f.nodes.map(e=>typeof e.layer==`number`&&!isNaN(e.layer)?e.layer:void 0)},{direction:S[w]||`TB`,nodeDistance:n.nodesSeparation??5,levelDistance:n.layerSeparation??50,componentDistance:n.componentsSeparation??50,roots:b,sinks:x,compactSiblings:!!n.compactSiblings,siblingsDistance:n.siblingsDistance??10,decross:n.decross!==!1,arrangeComponents:C[T]||`fit`});return{positions:f.nodes.map((e,t)=>({...e,x:E.x[t],y:E.y[t]}))}},isRunning(){return!1},onSync({positions:e},{graph:t}){return{indexes:e.map(({id:e})=>(t.getNode(e)||{_index:-1})._index),x:e.map(({x:e})=>e),y:e.map(({y:e})=>e)}}},En={...Tn,name:`sequential`};function Dn(e){return e===void 0||typeof e==`number`&&isFinite(e)&&e>0}function On(e,t,n,r,i){if(!Dn(t))throw TypeError(`"rows" should be a positive integer`);if(!Dn(n))throw TypeError(`"cols" should be a positive integer`);if(!Dn(r))throw TypeError(`"rowDistance" should be a positive number`);if(!Dn(i))throw TypeError(`"colDistance" should be a positive number`);if(t)return{rows:t,cols:Math.ceil(e/t),rowDistance:r,colDistance:i};if(n)return{cols:n,rows:Math.ceil(e/n),rowDistance:r,colDistance:i};let a=Math.ceil(Math.sqrt(e));return{cols:a,rows:Math.ceil(e/a),rowDistance:r,colDistance:i}}function kn(e,t,n,r,i){return typeof e==`string`?e===`radius`?t.getAttribute(!0,`radius`).getMultiple(r):e===`degree`?n.getDegree():e===`random`?r.map(()=>Math.random()):n.getData(e).map(e=>e||i):r.map((e,t)=>t)}const An={name:`grid`,configure(e,{graph:t,camera:n}){let r=e.sortBy,i=e.nodes,a=Array.from(i._indexes),o=a.length,{rows:s,cols:c,rowDistance:l,colDistance:u}=On(o,e.rows,e.cols,e.colDistance,e.rowDistance),d=kn(r,t,i,a,e.sortFallbackValue),f=i.getAttribute(`layoutable`),p=a.reduce((e,t,n)=>(f[n]&&e.push({id:t,attr:d[n]}),e),[]),m=i.getAttribute(`x`),h=i.getAttribute(`y`),g=i.getAttribute(`radius`),_=1/0,v=1/0;for(let e=0;e<a.length;e++)_=Math.min(_,m[e]),v=Math.min(v,h[e]);return{sort:!!r,nodes:p,reverse:!!e.reverse,cols:c,rows:s,minX:_,minY:v,rs:g,rowDistance:l,colDistance:u}},update({sort:e,nodes:t,minX:n,rs:r,minY:i,reverse:a,cols:s,rowDistance:c,colDistance:l}){let u=t.map((e,t)=>t);e&&u.sort((e,n)=>t[e].attr-t[n].attr),a&&u.reverse();let d=o(),f=t.length,p=new Float64Array(f),m=new Float64Array(f);d.layout_grid_factory(Uint32Array.from(u),Float64Array.from(r,e=>Number(e)),n,i,s,c===void 0?0:c,c!==void 0,l===void 0?0:l,l!==void 0,p,m);for(let e=0;e<f;e++)t[e].x=p[e],t[e].y=m[e];return t},onSync(e){return{indexes:e.map(({id:e})=>e),x:e.map(({x:e})=>e),y:e.map(({y:e})=>e)}}};function Q(e,t){return e!=null&&isFinite(e)?e:t}function jn(e,t){let n=0,r=e.length-1;for(;n<=r;){let i=n+r>>>1;if(e[i]===t)return i;e[i]<t?n=i+1:r=i-1}return-1}const Mn=(e,t)=>e-t;function Nn(e,t,n){let r=e.slice().sort(Mn),i=[];for(let e=0;e<t.length;e++){let a=[],o=t[e],s=!1;for(let e=0;e<o.length;e++){let t=o[e];jn(r,t)!==-1&&(t===n&&(s=!0),a.push(t))}a.length>0&&i[s?`unshift`:`push`](a.sort(Mn))}return i}function Pn(e){let t=e.x,n=e.y,r=e.indexes.length,i=t[e.centerIndexPos]-e.cx,a=n[e.centerIndexPos]-e.cy;for(let e=0;e<r;e++)t[e]-=i,n[e]-=a;return{indexes:e.indexes,x:t,y:n}}const Fn={name:`radial`,imports:{},configure(e,{graph:t}){let n=e.nodes,r=n.size;if(e.centralNode===void 0)throw Error(`radial layout: missing parameter "centralNode"`);let i=t.getNode(e.centralNode);if(i===void 0)throw Error(`radial layout: parameter "centralNode" is not valid`);e.radiusRatio=Q(e.radiusRatio,Math.SQRT2),e.radiusDelta=Q(e.radiusDelta,0),e.nodeGap=Q(e.nodeGap,10),e.repulsion=r*Q(e.repulsion,1);let a=i.getPosition(),o=Q(e.centerX,a.x),s=Q(e.centerY,a.y),c=i._index;n.includes(i)||(n=n.concat(i.toList()));let l=n._indexes,u=n.getAttribute(`layoutable`);l=l.filter((e,t)=>u[t]||e===c),l.sort(Mn);let d=l.length,f=Nn(l,t.getConnectedComponents(n,{internalIndexes:!0}),c),p=t.degrees(l),m=new Float32Array(e.xs??t.getNodeAttribute(`x`).getMultiple(l)),h=new Float32Array(e.ys??t.getNodeAttribute(`y`).getMultiple(l)),g=e.rs??t.getNodeAttribute(`radius`).getMultiple(l),_=t.getEdges()._indexes,v=t.getEdgeAttribute(`source`).getMultiple(_),y=t.getEdgeAttribute(`target`).getMultiple(_),b=t.getAdjacencyList({internalIndexes:!0,weight:1,indexes:l});return{centerIndex:c,centerIndexPos:0,cx:o,cy:s,D:null,indexes:l,components:f,normIndexes:null,radii:null,rings:null,x:m,y:h,degree:p,size:d,attributes:{size:g,adjacency:b,weights:y.map(()=>1),sources:v,targets:y},sortAttr:null,allowOverlap:!!e.allowOverlap,nodeGap:e.nodeGap,radiusRatio:e.radiusRatio,radiusDelta:e.radiusDelta,repulsion:e.repulsion,randomize:!(`randomize`in e)||!!e.randomize,renderSteps:!!e.renderSteps,epsilon:Q(e.epsilon,.001),maxSteps:Q(e.maxIterations,100),iterationsPerRender:Q(e.iterationsPerRender,20),step:-1,stress:1/0,prevStress:0,converged:!1,overlapRemoved:!1,done:!1}},context(){return{data:null,sim:null,out4:null}},update(e,t){let n=e||t.data;if(n.x=n.x||new Float32Array(n.size),n.y=n.y||new Float32Array(n.size),n.step===-1){t.data=n;for(let e=0;e<n.indexes.length;e++)n.indexes[e]===n.centerIndex&&(n.centerIndexPos=e);let e=[0],r=[];for(let t of n.components){for(let e of t)r.push(e);e.push(r.length)}let i=n.attributes.adjacency,a=[0],s=[],c=[];for(let e of i){for(let t=0;t<e.nodes.length;t++)s.push(e.nodes[t]),c.push(e.weights?Number(e.weights[t]):1);a.push(s.length)}let l=o();t.sim&&=(t.sim.free(),null),t.sim=new l.RadialStressSim(Uint32Array.from(n.indexes),n.centerIndex,Float64Array.from(n.degree),Uint32Array.from(e),Uint32Array.from(r),Uint32Array.from(a),Uint32Array.from(s),Float64Array.from(c),Uint32Array.from(n.attributes.sources),Uint32Array.from(n.attributes.targets),Float64Array.from(n.attributes.size,e=>Number(e)),n.x,n.y,!!n.randomize,n.nodeGap,n.radiusRatio,n.radiusDelta,n.repulsion,n.epsilon,n.maxSteps),t.out4=new Float64Array(4),n.step=0}let r=t.sim;if(!n.converged&&r&&(r.step_batch(n.iterationsPerRender,t.out4),n.step=t.out4[0],n.stress=t.out4[1],n.prevStress=t.out4[2],n.converged=t.out4[3]===1,r.read_positions(n.x,n.y)),n.converged)if(n.overlapRemoved||n.allowOverlap){if(n.done=!0,r){let e=r.rings_keys(),i=r.rings_offsets(),a=r.rings_members(),o={};for(let t=0;t<e.length;t++){let r=[];for(let e=i[t];e<i[t+1];e++)r.push(n.indexes[a[e]]);o[e[t]]=r}n.rings=o,r.free(),t.sim=null}}else r&&(r.remove_overlaps(),r.read_positions(n.x,n.y),n.overlapRemoved=!0);return n},isRunning({data:e}){return!(!e||e.converged&&(e.allowOverlap||e.done))||(e&&(e.step=-1),!1)},onSync(e){if(e.renderSteps||e.done)return Pn(e)},onEnd:e=>Pn(e)};function In(e,t){return t&&typeof t==`object`&&t._index!==void 0?t:e.getNode(t)}function Ln(e,t,n,r){if(t)return t===`random`?`random`:t===`radius`?r.slice():t===`degree`?n.getDegree():e.getProperty(n,t)}const Rn={forceLink:Rt,force:It,hierarchical:Tn,sequential:En,grid:An,radial:Fn,concentric:{name:`concentric`,configure(e,{graph:t,data:n}){if(e.centralNode===void 0)throw Error(`concentric layout: missing parameter "centralNode"`);let r={...e,centralNode:In(t,e.centralNode)},{centralNode:i,nodes:a}=r,o=t.getNode(i);if(o===void 0)throw Error(`concentric layout: "centralNode" parameter is not valid`);let s=o._index,{x:c,y:l}=o.getPosition(),u=a.getAttribute(`layoutable`),d=t.getNodes(a)._indexes,f=Array.from(d.filter((e,t)=>u[t]));f.indexOf(s)===-1&&f.push(s);let p=e.rs?e.rs:t.getNodeAttribute(`radius`).getMultiple(d),m=Ln(n,r.sortBy,a,p),h=f.reduce((e,t,n)=>(e[t]=n,e),{}),g=f.map((e,t)=>t),_=new Set(e.edges.getExtremities()._indexes),v=f.map(e=>t.topology.getAdjacentElements(!0,new Uint32Array([e])).filter(e=>_.has(e)).map(e=>h[e]));return{sourceNodeIndex:f.indexOf(s),centerX:typeof r.centerX==`number`?r.centerX:c,centerY:typeof r.centerY==`number`?r.centerY:l,list:f,indexes:g,size:f.length,totalSize:f.length,attributes:{adjacentNodes:v,size:p},sortAttr:m,clockwise:r.clockwise===void 0?!0:r.clockwise,circleHopRatio:r.circleHopRatio||5,allowOverlap:!!r.allowOverlap}},context(){return{determinePropertyType(e,t,n){return t.some(t=>typeof e[t]!=`number`)?`string`:`number`}}},update(e,t){let{attributes:n,indexes:r,size:i,sourceNodeIndex:a,centerX:s,centerY:c,sortAttr:l}=e,u=n.adjacentNodes,d=n.size,f=o(),p=new Uint32Array(e.totalSize+1),m=0;for(let t=0;t<e.totalSize;t++)p[t]=m,m+=u[t]?u[t].length:0;p[e.totalSize]=m;let h=new Uint32Array(m),g=0;for(let t=0;t<e.totalSize;t++){let e=u[t];if(e)for(let t=0;t<e.length;t++)h[g++]=e[t]}let _=Uint32Array.from(r),v=f.layout_concentric_distances(p,h,_,i,e.totalSize,a),y={};for(let e=0;e<i;e++){let t=r[e],n=v[t],i=y[n];i||(i=[],y[n]=i),i.push(t)}function b(e,t,n){if(e===`random`)return()=>Math.random()-.5;if(e)return n.determinePropertyType(e,t,t.length)===`number`?(t,n)=>e[t]-e[n]:(t,n)=>e[t]<e[n]?-1:1}let x=b(l,r,t),S=l===`random`||l,C=Object.keys(y).sort((e,t)=>parseInt(e)-parseInt(t)),w=new Uint32Array(C.length+1),T=[],E=[];C.forEach((t,n)=>{let r=y[parseInt(t)];for(let e of r)E.push(e);S&&(r.sort(x),e.clockwise||r.reverse());for(let e of r)T.push(e);w[n+1]=T.length});let D=Array(e.totalSize),O=Array(e.totalSize),k=0;for(let e=0;e<i;e++){let t=d[r[e]];t>k&&(k=t)}let A=k*e.circleHopRatio,j=0,M=0,N=Math.PI/9;return C.forEach((t,n)=>{let r=y[parseInt(t)],i=r.length,a=0,o=M,l=2*Math.PI/i;if(n!==0&&!e.allowOverlap){let e=2*Math.PI*j,t=E.slice(w[n],w[n+1]);a+=t.reduce((e,t)=>e+d[t],0);let r=2*a*Math.SQRT2;r>e&&(j+=r/(2*Math.PI)-j)}for(let t=0;t<i;t++){let n=r[t];D[n]=Math.cos(o)*j+s,O[n]=Math.sin(o)*j+c;let u=d[n];o+=l*(e.allowOverlap?1:u/a*i)}j+=A,M+=N}),{x:D,y:O,indexes:e.list}},isRunning(){return!1},onSync({indexes:e,x:t,y:n}){return{indexes:e,x:t,y:n}}}};let zn=null;function Bn(e){return zn||=import(`./nodus_wasm-C0vDfO5K.js`).then(e=>{s(e)}).catch(()=>{zn=null}),zn.then(()=>{r(e)})}const Vn=()=>{},Hn=()=>!1,$=new Map;function Un(e,t,n){self.postMessage({type:n?`update`:`complete`,workerId:e.workerId,workerMessage:t,isRunning:n})}function Wn(e,t){if(e.stopped)return;let n,r=!1;try{n=e.update(t,e.context),r=!!e.isRunning(e.context,t)}catch(t){self.postMessage({type:`error`,workerId:e.workerId,error:t?.message??String(t)}),$.delete(e.workerId);return}if(Un(e,n,r),!r){$.delete(e.workerId);return}setTimeout(()=>Wn(e,void 0),0)}self.addEventListener(`error`,e=>{self.postMessage({type:`error`,workerId:-1,error:`worker uncaught: ${e?.message||String(e)}`})}),self.addEventListener(`message`,e=>{let t=e.data;if(!(!t||!t.type)){if(t.type===`init`){let e=Rn[t.name];if(!e){self.postMessage({type:`error`,workerId:t.workerId,error:`unknown layout: ${t.name}`});return}let n={workerId:t.workerId,descriptor:e,context:e.context?e.context():{},stopped:!1,update:typeof e.update==`function`?e.update:Vn,isRunning:typeof e.isRunning==`function`?e.isRunning:Hn,stop:typeof e.stop==`function`?e.stop:Vn};$.set(t.workerId,n),t.wasmFlags?Bn(t.wasmFlags).then(()=>{n.stopped||Wn(n,t.msg)}):Wn(n,t.msg)}else if(t.type===`stop`){let e=$.get(t.workerId);if(e){e.stopped=!0;try{e.stop(e.context)}catch{}self.postMessage({type:`complete`,workerId:e.workerId,workerMessage:void 0,isRunning:!1}),$.delete(e.workerId)}}}});