@kortexya/nodus 0.1.5 → 0.1.7

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
@@ -0,0 +1 @@
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)}}}let i=null;function a(){return i}function o(e){i=e}var s=class e{_vertices=new Map;_hyperedges=new Map;_incidence=new Map;_struct=null;_intern=new Map;_nextIntern=1n;_internOf(e){let t=this._intern.get(e);return t===void 0&&(t=this._nextIntern++,this._intern.set(e,t)),t}_hs(){if(!this._struct){let e=a();this._struct=new e.HyperStruct}return this._struct}constructor(e){this._hs(),e&&this.load(e)}load(e){this._struct?.free?.(),this._struct=null,this._intern.clear(),this._nextIntern=1n,this._hs(),this._vertices.clear(),this._hyperedges.clear(),this._incidence.clear();for(let t of e.vertices)this.addVertex(t);for(let t of e.hyperedges)this.addHyperedge(t);return this}toData(){return{vertices:Array.from(this._vertices.values()).map(e=>({...e})),hyperedges:Array.from(this._hyperedges.values()).map(e=>({...e,vertices:e.vertices.slice()}))}}clone(){return new e(this.toData())}vertexCount(){return this._vertices.size}hyperedgeCount(){return this._hyperedges.size}hasVertex(e){return this._vertices.has(e)}hasHyperedge(e){return this._hyperedges.has(e)}getVertex(e){return this._vertices.get(e)}getHyperedge(e){return this._hyperedges.get(e)}vertices(){return this._vertices.values()}hyperedges(){return this._hyperedges.values()}vertexIds(){return this._vertices.keys()}hyperedgeIds(){return this._hyperedges.keys()}addVertex(e){if(this._vertices.has(e.id))throw Error(`Vertex ${e.id} already exists`);return this._hs().add_vertex(this._internOf(e.id)),this._vertices.set(e.id,{...e}),this._incidence.set(e.id,new Set),this}addHyperedge(e){if(this._hyperedges.has(e.id))throw Error(`Hyperedge ${e.id} already exists`);let t=e.vertices.slice();{let n=new BigInt64Array(t.length);for(let e=0;e<t.length;e++)n[e]=this._internOf(t[e]);this._hs().add_hyperedge(this._internOf(e.id),n)}this._hyperedges.set(e.id,{...e,vertices:t});for(let n of t){let t=this._incidence.get(n);t||(t=new Set,this._incidence.set(n,t)),t.add(e.id)}return this}removeVertex(e){if(!this._vertices.get(e))throw Error(`Vertex ${e} not found`);this._hs().remove_vertex(this._internOf(e));let t=Array.from(this._incidence.get(e)??[]);for(let n of t){let t=this._hyperedges.get(n);t.vertices=t.vertices.filter(t=>t!==e)}return this._vertices.delete(e),this._incidence.delete(e),{incidentHyperedges:t}}removeHyperedge(e){let t=this._hyperedges.get(e);if(!t)throw Error(`Hyperedge ${e} not found`);this._hs().remove_hyperedge(this._internOf(e));let n=t.vertices.slice();for(let t of n){let n=this._incidence.get(t);n&&n.delete(e)}return this._hyperedges.delete(e),{incidentVertices:n}}setHyperedgeVertices(e,t){let n=this._hyperedges.get(e);if(!n)throw Error(`Hyperedge ${e} not found`);{let n=new BigInt64Array(t.length);for(let e=0;e<t.length;e++)n[e]=this._internOf(t[e]);this._hs().set_hyperedge_vertices(this._internOf(e),n)}for(let t of n.vertices){let n=this._incidence.get(t);n&&n.delete(e)}n.vertices=t.slice();for(let n of t){let t=this._incidence.get(n);t||(t=new Set,this._incidence.set(n,t)),t.add(e)}}incidentHyperedges(e){let t=this._incidence.get(e);return t?Array.from(t):[]}hyperedgeVertices(e){return this._hyperedges.get(e)?.vertices.slice()??[]}vertexAdjacent(e,t){if(e===t)return!1;let n=this._incidence.get(e),r=this._incidence.get(t);if(!n||!r)return!1;if(n.size>r.size)return this.vertexAdjacent(t,e);for(let e of n)if(r.has(e))return!0;return!1}hyperedgeAdjacent(e,t){if(e===t)return!1;let n=this._hyperedges.get(e)?.vertices,r=this._hyperedges.get(t)?.vertices;if(!n||!r)return!1;let i=new Set(r);for(let e of n)if(i.has(e))return!0;return!1}sharedHyperedges(e,t){if(e===t)return[];let n=this._incidence.get(e),r=this._incidence.get(t);if(!n||!r)return[];let i=[];for(let e of n)r.has(e)&&i.push(e);return i}sharedVertices(e,t){if(e===t)return[];let n=this._hyperedges.get(e)?.vertices,r=this._hyperedges.get(t)?.vertices;if(!n||!r)return[];let i=new Set(r);return n.filter(e=>i.has(e))}adjacentVertices(e){let t=new Set;for(let n of this._incidence.get(e)??[]){let r=this._hyperedges.get(n);if(r)for(let n of r.vertices)n!==e&&t.add(n)}return Array.from(t)}adjacentHyperedges(e){let t=new Set,n=this._hyperedges.get(e);if(!n)return[];for(let r of n.vertices)for(let n of this._incidence.get(r)??[])n!==e&&t.add(n);return Array.from(t)}degree(e){return this._incidence.get(e)?.size??0}cardinality(e){return this._hyperedges.get(e)?.vertices.length??0}isLinear(){return this._hs().is_linear()}isConnected(){return this._hs().is_connected()}isConnectedAfterRemoval(e){if(e.vertex!==void 0&&!this._vertices.has(e.vertex)||e.hyperedge!==void 0&&!this._hyperedges.has(e.hyperedge))return this.isConnected();let t=e.vertex===void 0?NaN:Number(this._internOf(e.vertex)),n=e.hyperedge===void 0?NaN:Number(this._internOf(e.hyperedge));return this._hs().is_connected_after_removal(t,n)}detectForbidden(){let e=this._hs().detect_forbidden(),t=new Map;for(let[e,n]of this._intern)t.set(n,e);let n=[`3a2`,`2a3`,`strangledV`,`strangledE`],r=[],i=0;for(;i<e.length;){let a=n[Number(e[i++])],o=Number(e[i++]),s=Number(e[i++]),c=[];for(let n=0;n<o;n++)c.push(t.get(e[i++]));let l=[];for(let n=0;n<s;n++)l.push(t.get(e[i++]));r.push({kind:a,vertices:c,hyperedges:l})}return r}};const c={regularity:1,area:1,separation:.5,intersection:2,coordination:1};function l(e){let{H:t,options:n}=e,r={...c,...n.weights??{}},i=n.targetAreaPerCardinality??(e=>80*Math.max(1,e)),a=n.bufferDistance??10,o=d(t,i,a,e.originalCardinality),s=new Float64Array(2*(o.vCount+o.eCount)),l=2*o.vCount,f=Array.from(t.vertexIds());for(let t=0;t<f.length;t++){let n=f[t],r=o.vIndex.get(n),i=e.initialPositions?.get(n);if(i)s[2*r]=i.x,s[2*r+1]=i.y;else{let e=t/f.length*2*Math.PI;s[2*r]=Math.cos(e)*200,s[2*r+1]=Math.sin(e)*200}}for(let n of t.hyperedges()){let t=o.eIndex.get(n.id),r=e.initialDualPositions?.get(n.id);if(r)s[l+2*t]=r.x,s[l+2*t+1]=r.y;else{let e=0,n=0,r=o.hyperedgeVerts[t];for(let t of r)e+=s[2*t],n+=s[2*t+1];let i=r.length||1;s[l+2*t]=e/i,s[l+2*t+1]=n/i}}let p=u(t,o,s,r,a,n,f,n.solver??`lbfgs`);if(!p)throw Error(`Hypergraph layout requires the wasm backend (HyperStruct missing).`);return p}function u(e,t,n,r,i,o,s,c){let l=a();if(!l||typeof l.HyperStruct!=`function`)return null;let u=Array.from(e.hyperedgeIds()),d=new Map,f=0n,p=e=>{let t=d.get(e);return t===void 0&&(t=f++,d.set(e,t)),t},m=new l.HyperStruct;for(let e of s)m.add_vertex(p(e));for(let t of u){let n=e.hyperedgeVertices(t),r=new BigInt64Array(n.length);for(let e=0;e<n.length;e++)r[e]=p(n[e]);m.add_hyperedge(p(t),r)}let h=new Float64Array(u.length);for(let e=0;e<u.length;e++){let n=t.originalCardinality[e],r=t.targetArea[e];h[e]=Math.sqrt(n>=3?2*r/(n*Math.sin(2*Math.PI/n)):r/Math.PI)}let g=n.slice(0,2*t.vCount),_=n.slice(2*t.vCount),v=o.separationIters??200,y=o.regularityIters??300,b=o.onProgress,x=b?(e,t,n)=>b({scale:0,phase:e===0?`separation`:`regularity`,iter:t,energy:n}):void 0,S=m.layout_optimize(r.regularity,r.area,r.separation,r.intersection,r.coordination,i,v,y,g,_,Float64Array.from(t.targetArea),h,+(c===`adam`),x),C=2*(t.vCount+t.eCount),w=S.slice(0,C),T=S[C],E=S[C+1],D=2*t.vCount,O=new Map;for(let e=0;e<s.length;e++)O.set(s[e],{x:w[2*e],y:w[2*e+1]});let k=new Map;for(let e=0;e<u.length;e++)k.set(u[e],{x:w[D+2*e],y:w[D+2*e+1]});return{vertexPositions:O,dualPositions:k,energy:T,iterations:E,state:w,model:t}}function d(e,t,n,r){let i=Array.from(e.vertexIds()),a=Array.from(e.hyperedgeIds()),o=new Map,s=new Map;for(let e=0;e<i.length;e++)o.set(i[e],e);for(let e=0;e<a.length;e++)s.set(a[e],e);let c=a.map(t=>e.hyperedgeVertices(t).map(e=>o.get(e)).filter(e=>e!==void 0)),l=c.map(e=>e.length),u=a.map((e,t)=>r?.get(e)??l[t]),d=u.map(e=>t(e)),f=i.map(()=>[]);for(let e=0;e<a.length;e++)for(let t of c[e])f[t].push(e);return{vIndex:o,eIndex:s,vCount:i.length,eCount:a.length,hyperedgeVerts:c,cardinality:l,originalCardinality:u,targetArea:d,vertexInHyperedges:f,bufferDistance:n,phase:`regularity`}}function f(e,t,n,r,i){let a=e.ranges.degree.max-e.ranges.degree.min,o=e.ranges.cardinality.max-e.ranges.cardinality.min,s=Math.max(a,o)||1,c=Math.min(e.ranges.degree.min,e.ranges.cardinality.min),l=e.ranges.adjacency.min,u=e.ranges.adjacency.max-l||1,d=e.ranges.betweenness.min,f=e.ranges.betweenness.max-d||1,p=(n-c)/s,m=(r-l)/u,h=(i-d)/f;return t.alpha*p+t.beta*m-t.gamma*h}var p=class{kind=`vertexRemoval`;constructor(e){this.vid=e}isLegal(e){if(!e.hasVertex(this.vid))return!1;let t=e.incidentHyperedges(this.vid);for(let n=0;n<t.length;n++)for(let r=n+1;r<t.length;r++){let i=t[n],a=t[r];if(e.sharedVertices(i,a).filter(e=>e!==this.vid).length===0)return!1}return!!e.isConnectedAfterRemoval({vertex:this.vid})}apply(e){let t=e.getVertex(this.vid);if(!t)throw Error(`Vertex ${this.vid} not found`);let n=this.footprint(e),r=e.incidentHyperedges(this.vid),i={};for(let t of r)i[String(t)]=e.hyperedgeVertices(t);let a={vertex:{...t},incident:r,incidentLists:i};return e.removeVertex(this.vid),{kind:this.kind,vertices:[this.vid],hyperedges:[],footprintVertices:n.vertices,footprintHyperedges:n.hyperedges,snapshot:a}}invert(e,t){let n=t.snapshot;e.addVertex(n.vertex);for(let t of n.incident){let r=e.getHyperedge(t);if(!r)continue;let i=n.incidentLists?.[String(t)];e.setHyperedgeVertices(t,i??[...r.vertices,this.vid])}}footprint(e){let t=e.incidentHyperedges(this.vid),n=new Set([this.vid]);for(let r of t){let t=e.getHyperedge(r);if(t)for(let e of t.vertices)n.add(e)}return{vertices:Array.from(n),hyperedges:t}}priority(e,t,n){let r=this.footprint(e),i=0;for(let e of r.vertices)i=Math.max(i,t.degree.get(e)??0);for(let e of r.hyperedges)i=Math.max(i,t.cardinality.get(e)??0);let a=t.adjacencyFactor.get(this.vid)??0,o=t.betweenness.get(this.vid)??0;return f(t,n,i,a,o)}},m=class{kind=`hyperedgeRemoval`;constructor(e){this.eid=e}isLegal(e){if(!e.hasHyperedge(this.eid))return!1;let t=e.hyperedgeVertices(this.eid);for(let n=0;n<t.length;n++)for(let r=n+1;r<t.length;r++){let i=t[n],a=t[r];if(e.sharedHyperedges(i,a).filter(e=>e!==this.eid).length===0)return!1}return!!e.isConnectedAfterRemoval({hyperedge:this.eid})}apply(e){let t=e.getHyperedge(this.eid);if(!t)throw Error(`Hyperedge ${this.eid} not found`);let n=this.footprint(e),r={hyperedge:{...t,vertices:t.vertices.slice()}};return e.removeHyperedge(this.eid),{kind:this.kind,vertices:[],hyperedges:[this.eid],footprintVertices:n.vertices,footprintHyperedges:n.hyperedges,snapshot:r}}invert(e,t){e.addHyperedge(t.snapshot.hyperedge)}footprint(e){let t=e.hyperedgeVertices(this.eid),n=new Set([this.eid]);for(let r of t)for(let t of e.incidentHyperedges(r))n.add(t);return{vertices:t,hyperedges:Array.from(n)}}priority(e,t,n){let r=this.footprint(e),i=0;for(let e of r.vertices)i=Math.max(i,t.degree.get(e)??0);for(let e of r.hyperedges)i=Math.max(i,t.cardinality.get(e)??0);let a=t.adjacencyFactor.get(this.eid)??0,o=t.betweenness.get(this.eid)??0;return f(t,n,i,a,o)}},h=class{kind=`vertexMerger`;constructor(e,t){this.retained=e,this.absorbed=t}isLegal(e){return!e.hasVertex(this.retained)||!e.hasVertex(this.absorbed)||this.retained===this.absorbed?!1:e.sharedHyperedges(this.retained,this.absorbed).length>=2}apply(e){if(!e.hasVertex(this.retained)||!e.hasVertex(this.absorbed))throw Error(`Merger operands missing`);let t=this.footprint(e),n={...e.getVertex(this.absorbed)},r=e.incidentHyperedges(this.absorbed),i=new Set(e.incidentHyperedges(this.retained)),a={},o=new Set([...r,...i]);for(let t of o)a[String(t)]=e.hyperedgeVertices(t);for(let t of r){let n=e.getHyperedge(t);n&&(i.has(t)?e.setHyperedgeVertices(t,n.vertices.filter(e=>e!==this.absorbed)):e.setHyperedgeVertices(t,n.vertices.map(e=>e===this.absorbed?this.retained:e)))}return e.removeVertex(this.absorbed),{kind:this.kind,vertices:[this.retained,this.absorbed],hyperedges:[],footprintVertices:t.vertices,footprintHyperedges:t.hyperedges,snapshot:{absorbedVertex:n,incidentAbsorbed:r,incidentLists:a}}}invert(e,t){let n=t.snapshot;e.addVertex(n.absorbedVertex);for(let[t,r]of Object.entries(n.incidentLists??{}))e.hasHyperedge(t)&&e.setHyperedgeVertices(t,r)}footprint(e){let t=new Set([this.retained,this.absorbed]),n=new Set;for(let t of e.incidentHyperedges(this.retained))n.add(t);for(let t of e.incidentHyperedges(this.absorbed))n.add(t);for(let r of n){let n=e.getHyperedge(r);if(n)for(let e of n.vertices)t.add(e)}return{vertices:Array.from(t),hyperedges:Array.from(n)}}priority(e,t,n){let r=this.footprint(e),i=0;for(let e of r.vertices)i=Math.max(i,t.degree.get(e)??0);for(let e of r.hyperedges)i=Math.max(i,t.cardinality.get(e)??0);let a=t.adjacencyFactor.get(this.retained)??0,o=t.adjacencyFactor.get(this.absorbed)??0,s=t.betweenness.get(this.retained)??0,c=t.betweenness.get(this.absorbed)??0;return f(t,n,i,(a+o)/2,(s+c)/2)}},g=class{kind=`hyperedgeMerger`;constructor(e,t){this.retained=e,this.absorbed=t}isLegal(e){return!e.hasHyperedge(this.retained)||!e.hasHyperedge(this.absorbed)||this.retained===this.absorbed?!1:e.sharedVertices(this.retained,this.absorbed).length>=2}apply(e){let t=this.footprint(e),n={...e.getHyperedge(this.absorbed),vertices:e.hyperedgeVertices(this.absorbed)},r=new Set(e.hyperedgeVertices(this.retained)),i=[...r];for(let e of n.vertices)r.has(e)||i.push(e);return e.setHyperedgeVertices(this.retained,i),e.removeHyperedge(this.absorbed),{kind:this.kind,vertices:[],hyperedges:[this.retained,this.absorbed],footprintVertices:t.vertices,footprintHyperedges:t.hyperedges,snapshot:{absorbedHE:n,retainedOriginalVerts:Array.from(r)}}}invert(e,t){let n=t.snapshot;e.setHyperedgeVertices(this.retained,n.retainedOriginalVerts),e.addHyperedge(n.absorbedHE)}footprint(e){let t=new Set;for(let n of e.hyperedgeVertices(this.retained))t.add(n);for(let n of e.hyperedgeVertices(this.absorbed))t.add(n);let n=new Set([this.retained,this.absorbed]);for(let r of t)for(let t of e.incidentHyperedges(r))n.add(t);return{vertices:Array.from(t),hyperedges:Array.from(n)}}priority(e,t,n){let r=this.footprint(e),i=0;for(let e of r.vertices)i=Math.max(i,t.degree.get(e)??0);for(let e of r.hyperedges)i=Math.max(i,t.cardinality.get(e)??0);let a=t.adjacencyFactor.get(this.retained)??0,o=t.adjacencyFactor.get(this.absorbed)??0,s=t.betweenness.get(this.retained)??0,c=t.betweenness.get(this.absorbed)??0;return f(t,n,i,(a+o)/2,(s+c)/2)}};function _(e){switch(e.kind){case`vertexRemoval`:return new p(e.vertices[0]);case`hyperedgeRemoval`:return new m(e.hyperedges[0]);case`vertexMerger`:return new h(e.vertices[0],e.vertices[1]);case`hyperedgeMerger`:return new g(e.hyperedges[0],e.hyperedges[1])}}const v={regularity:1,area:1,separation:.5,intersection:2,coordination:1};function y(e){let t={...v,...e.options.weights??{}},n=e.options.targetAreaPerCardinality??(e=>80*Math.max(1,e)),r=e.options.bufferDistance??10,i=e.options.solver??`lbfgs`,a=e.options.onProgress,o=new Map(e.vertexPositions),s=new Map(e.dualPositions);for(let c=e.operations.length-1;c>=0;c--){let l=e.operations[c];if(_(l).invert(e.H,l),e.originalCardinality){if(l.kind===`hyperedgeMerger`){let[,t]=l.hyperedges,n=l.snapshot?.absorbedHE?.vertices?.length??0;e.originalCardinality.set(t,n)}else if(l.kind===`hyperedgeRemoval`){let t=l.hyperedges[0],n=e.H.getHyperedge(t);n&&e.originalCardinality.set(t,n.vertices.length)}}x(e.H,l,o,s);let u=new Set(l.footprintVertices),f=new Set(l.footprintHyperedges),p=d(e.H,n,r,e.originalCardinality),m=new Float64Array(2*(p.vCount+p.eCount)),h=2*p.vCount;for(let[e,t]of o){let n=p.vIndex.get(e);n!==void 0&&(m[2*n]=t.x,m[2*n+1]=t.y)}for(let[e,t]of s){let n=p.eIndex.get(e);n!==void 0&&(m[h+2*n]=t.x,m[h+2*n+1]=t.y)}let g=new Uint8Array(m.length);for(let e of u){let t=p.vIndex.get(e);t!==void 0&&(g[2*t]=1,g[2*t+1]=1)}for(let e of f){let t=p.eIndex.get(e);t!==void 0&&(g[h+2*t]=1,g[h+2*t+1]=1)}b(p,m,g,t,i,c,a),o=new Map,s=new Map;for(let t of e.H.vertices()){let e=p.vIndex.get(t.id);o.set(t.id,{x:m[2*e],y:m[2*e+1]})}for(let t of e.H.hyperedges()){let e=p.eIndex.get(t.id);s.set(t.id,{x:m[h+2*e],y:m[h+2*e+1]})}}return{vertexPositions:o,dualPositions:s}}function b(e,t,n,r,i,o,s){let c=a();if(!c||typeof c.hyper_reverse_step!=`function`)throw Error(`Hypergraph reversal requires the wasm backend (hyper_reverse_step missing).`);let l=e.vCount,u=e.eCount,d=new Uint32Array(u+1),f=0;for(let t=0;t<u;t++)d[t]=f,f+=e.hyperedgeVerts[t].length;d[u]=f;let p=new Uint32Array(f);{let t=0;for(let n of e.hyperedgeVerts)for(let e of n)p[t++]=e}let m=new Uint32Array(l+1),h=0;for(let t=0;t<l;t++)m[t]=h,h+=e.vertexInHyperedges[t].length;m[l]=h;let g=new Uint32Array(h);{let t=0;for(let n of e.vertexInHyperedges)for(let e of n)g[t++]=e}let _=new Float64Array(u);for(let t=0;t<u;t++){let n=e.originalCardinality[t],r=e.targetArea[t];_[t]=Math.sqrt(n>=3?2*r/(n*Math.sin(2*Math.PI/n)):r/Math.PI)}let v=s?(e,t)=>s({scale:o,phase:`reversal`,iter:e,energy:t}):void 0,y=i===`lbfgs`?80:200,b=c.hyper_reverse_step(l,u,d,p,m,g,Float64Array.from(e.targetArea),_,e.bufferDistance,r.regularity,r.area,r.separation,r.intersection,r.coordination,t,n,y,+(i===`adam`),v);t.set(b.subarray(0,t.length))}function x(e,t,n,r){for(let i of t.vertices){if(n.has(i))continue;let t=e.incidentHyperedges(i);if(t.length===0){n.set(i,{x:0,y:0});continue}let a=0,o=0,s=0;for(let e of t){let t=r.get(e);t&&(a+=t.x,o+=t.y,s++)}s===0?n.set(i,{x:0,y:0}):n.set(i,{x:a/s,y:o/s})}for(let i of t.hyperedges){if(r.has(i))continue;let t=e.hyperedgeVertices(i);if(t.length===0){r.set(i,{x:0,y:0});continue}let a=0,o=0,s=0;for(let e of t){let t=n.get(e);t&&(a+=t.x,o+=t.y,s++)}s===0?r.set(i,{x:0,y:0}):r.set(i,{x:a/s,y:o/s})}}let S=null;function C(){return S||=import(`./nodus_wasm-DxYJZXfN.js`).then(e=>{o(e),r({graph:`wasm`,attr:`wasm`,layout:`wasm`,hyper:`wasm`,geometry:`wasm`,spatial:`wasm`})}).catch(()=>{S=null}),S}const w=new Set;self.addEventListener(`message`,e=>{let t=e.data;if(!(!t||typeof t!=`object`)){if(t.type===`cancel`){w.add(t.id);return}t.type===`run`&&C().then(()=>T(t))}});function T(e){let{id:t}=e,n=Math.max(1,e.progressEvery??25),r=0,i=e=>{r++,(e.iter===0||r%n===0)&&self.postMessage({type:`progress`,id:t,info:e})};try{let n=new s(e.hypergraph),r=new Map(e.originalCardinality),a=e.initialPositions?new Map(e.initialPositions):void 0,o=e.initialDualPositions?new Map(e.initialDualPositions):void 0,c=l({H:n,options:{...e.options,onProgress:i},initialPositions:a,initialDualPositions:o,originalCardinality:r});if(w.has(t)){w.delete(t),self.postMessage({type:`error`,id:t,error:`cancelled`});return}let u=c.vertexPositions,d=c.dualPositions;if(e.operations.length>0){let t=y({H:n,operations:e.operations,vertexPositions:u,dualPositions:d,originalCardinality:r,options:{...e.options,onProgress:i}});u=t.vertexPositions,d=t.dualPositions}if(w.has(t)){w.delete(t),self.postMessage({type:`error`,id:t,error:`cancelled`});return}self.postMessage({type:`done`,id:t,finalHypergraph:n.toData(),vertexPositions:Array.from(u.entries()),dualPositions:Array.from(d.entries()),energy:c.energy})}catch(e){self.postMessage({type:`error`,id:t,error:e?.message??String(e)})}}
@@ -0,0 +1,285 @@
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,r){let i=e.length,a=new Float64Array(i*3);for(let o=0;o<i;o++)a[3*o]=t(e[o]),a[3*o+1]=n(e[o]),a[3*o+2]=r(e[o]);let s=o().algo_smallest_enclosing_circle(a);if(Number.isNaN(s[2]))throw Error(`SEC extend failed`);return{x:s[0],y:s[1],r:s[2]}}const M=Object.freeze({wasmOnly:!0});function N(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 ee(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??M}}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=j(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 te(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 P(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 F(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 ne(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 re(e,t){return(e+t)*(e+t+1)/2+t}function ie(e,t=0,n=.5){let{edgeIds:r,sources:i,targets:a,pinned:s,degrees:c,X:l,Y:u,R:d}=e,f=r.length,p=new Uint32Array(f),m=new Uint32Array(f);for(let e=0;e<f;e++)p[e]=i[r[e]],m[e]=a[r[e]];let h=l.length,g=new Uint8Array(h);for(let e=0;e<h;e++)g[e]=+!!s[e];let _=Uint32Array.from(c,e=>e>>>0),v=o().algo_align_siblings(p,m,g,_,l,u,d,t,n);for(let e=0;e<h;e++)l[e]=v[e],u[e]=v[h+e]}function ae(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 I(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 ae(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 oe=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 se(e,t=20,n,r,i){for(let a of e){let{x:e,y:o,r:s}=j(a.ids,(e=>n[e]),(e=>r[e]),(e=>i[e]));a.cx=e,a.cy=o,a.radius=s+t}let a=e.length;if(a===0)return;let s=new Float64Array(a),c=new Float64Array(a),l=new Float64Array(a),u=new Float64Array(a),d=new Float64Array(a),f=new Float64Array(a),p=new Float64Array(a);for(let t=0;t<a;t++){let n=e[t];s[t]=n.cx,c[t]=n.cy,l[t]=n.radius,u[t]=n.w,d[t]=n.h,f[t]=n.x,p[t]=n.y}let m=o().algo_spiral_pack(s,c,l,u,d,f,p);for(let t=0;t<a;t++)e[t].x=m[4*t],e[t].y=m[4*t+1],e[t].cx=m[4*t+2],e[t].cy=m[4*t+3]}function L(e,t,n,r){let i=0,a=[];return r.forEach((r,o)=>{let s=new oe;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 ce(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&&(ie({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}=L(r,i,a,o);if(m===`spiral`)se(t,h,r,i,a);else if(m===`box`)I(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 le=function(e){return e[e.verlet=0]=`verlet`,e[e.euler=1]=`euler`,e}({});const ue={movementRatio:7e-8,surfaceRatio:.0025};function de(e,t){return .003*e**2+(t+1)}var fe=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=le.verlet;multilevel=!1;placement=`none`;placementOffset=10;alignSiblings=!1;bucketSize;maxDisplacement=1e3;siblingsMinAngle=0;siblingsOffset=.15;steps=200;scaling=1;defaultRadius=1;autoStop=ue;gpuAcceleration=!0;barnesHutOptimization=!0;constructor(e={}){`autoStop`in e&&(e.autoStop&&typeof e.autoStop==`boolean`?this.autoStop=ue:e.autoStop&&(this.autoStop={...ue,...e.autoStop}));for(let t in e)e[t]!==void 0&&(this[t]=e[t])}};function pe(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 me(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(re(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(re(e,t));n!==void 0&&(_[n]+=o)}}}}u.length=0,f.length=0;let ee=1-.1**(1/w/2),te=.9/w,P=null,F=.5,ne=()=>{k+=(0-k)*ee;let r=i(k,u,f),a=k<=F||r<T;if(O===0||a){let e=D.pop();if(e){P&&(F=P.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 P&&(o[n]=b+2*F*(1-2*d()),s[n]=x+2*F*(1-2*d()))}P=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,F=.1):(k=.1+2*te,F=.1)}}if(O%E===0&&(S(e,o,s),C(n)),++O>=1/0||a)return j();oe(L)},ie=r,ae=ie.chunkPeriod??250,I=null,oe=ie.nextTick||(e=>setTimeout(e,0)),se=ie.cancelTick||(e=>clearTimeout(e));function L(){let e=performance.now()+ae;for(;!A&&performance.now()<e;)if(ne(),A)return;A||(I=oe(L))}return{start(){return I=oe(L),this},stop(){return A=!0,I!=null&&(se(I),I=null),this},get iterations(){return O}}}function he(e,t={}){let n=new v(e,!0,t),r=new fe(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*de(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=ee(e,t,c,n,r):N(e,t,n,r),ne(e,i,n,r),c&&r.elasticity!==0&&te(0,t,c,n,r),P(e,t,n,r),F(t,r.inertia,n,r)},g;return{setOptions(e){return r=new fe({...r,...e}),this},setGraph(e){return m(),n=new v(e,!0,t),this},start(){return m(),f=!1,l=p(),g=(r.multilevel?me:pe)(e.nodes,e.edges,n,r,h,e=>{m(),ce(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 ge={duration:1e3,alpha:.005},_e=()=>{},ve=(e,t,n)=>{},ye=e=>typeof requestAnimationFrame<`u`?requestAnimationFrame(e):setTimeout(e,16),be=e=>typeof cancelAnimationFrame<`u`?cancelAnimationFrame(e):clearTimeout(e);var xe=class{onUpdate=_e;update=ve;nextTick=ye;cancelTick=be;onEnd=_e;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=ge;gpuAcceleration=!0;barnesHutOptimization=!0;order;depth;sortingMethod;groups;constructor(e={}){`autoStop`in e&&e.autoStop&&(typeof e.autoStop==`boolean`?e.autoStop=ge:e.autoStop={...e.autoStop,...ge});for(let t in e)(e[t]!==void 0||t===`order`||t===`depth`)&&(this[t]=e[t])}};const Se={charge:10,edgeStrength:.5,edgeLength:30,elasticity:.9,margin:1,gravity:.01,inertia:.9,maxDisplacement:1e3,steps:200},Ce=new Float32Array([-1,-1,1,-1,-1,1,-1,1,1,-1,1,1]);function we(){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 Te=new WeakMap,Ee=new Map;let De=0;function Oe(e,t,n,r){Te.has(e)||Te.set(e,De++);let i=`${Te.get(e)}:${t}:${n}`,a=Ee.get(i);return a||(a=r(),Ee.set(i,a)),a}function ke(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 Oe(e,t,n,()=>{let r=e.createProgram();if(r===null)throw Error(`Cannot create WebGL program.`);if(e.attachShader(r,ke(e,e.VERTEX_SHADER,t)),e.attachShader(r,ke(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 Ae(e,t=Ce){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 je(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 H(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 U(e,t,n){let r=n.x+e%n.w;return(n.y+Math.floor(e/n.w))*t+r}function Me(e,t){return Array.from({length:e},(e,n)=>t(n))}function Ne(e,t){let n=t.map(({nodes:e})=>({x:0,y:0,...je(e.length,!0)})),r=t.map(({edges:e})=>({x:0,y:0,...je(2*e.length)})),i=H(n.slice()),a=H(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=Me(s,()=>[]);g.forEach((e,t)=>{y[e].push(_[t]),y[_[t]].push(e)});let b=Me(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*U(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*U(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*U(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*U(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=U(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 Pe(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 W(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 G(e,t,n={}){let r=0,i=we();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 Fe=e=>Math.ceil(Math.log2(Math.sqrt(e)))+1,Ie=e=>1<<Math.ceil(Math.log2(e)),Le=e=>Math.max(0,Math.ceil(Math.log2(e)));function Re(e){if(e<2)return[1,1];let t=32-Math.clz32(e-1);return[1<<(t>>>1)+(t&1),1<<(t>>>1)]}const ze=e=>e*(e+1)/2,K=()=>({x:0,y:0,w:0,h:0});function Be(e){let t;return()=>t||=e().finally(()=>{t=void 0})}const Ve=e=>{let t=Math.max(1,Math.ceil(Math.log2(e)/2));return e>65535?t+1:t},He=(e,t=25,n=24e3)=>{let r=(n-t)/(t-1);return Math.ceil(t*r*4/(r+e))},Ue=(e,t)=>Math.max(.1,1-(e/Math.max(1,t-20))**7.39);function We(e){for(let t=0;t<e.length/2;t++)e[2*t]=t,e[2*t+1]=4294967295;return e}function Ge(e,[t,n]){return z(e,{size:[t,n],data:We(new Uint32Array(2*t*n)),type:e.UNSIGNED_INT,format:e.RG_INTEGER,internalFormat:e.RG32UI})}function Ke(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 q(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 qe(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:Be(()=>new Promise(e=>{n=0,a(e)})),step:i,stop:()=>cancelAnimationFrame(r)}}const Je={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},Ye={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},Xe={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},Ze={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},Qe={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},$e={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},et={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},tt={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 J(e){return[e.x,e.y,e.w,e.h]}function Y(e,t){return new Uint32Array(e.map(t).map(J).flat())}function X(e,t,n,r,i,a=1){let o=e.getAttribLocation(t,n);o!==-1&&(e.enableVertexAttribArray(o),Ae(e,r),e.vertexAttribIPointer(o,i,e.UNSIGNED_INT,0,0),e.vertexAttribDivisor(o,a))}function Z(e,t){let n=e.getAttribLocation(t,`position`);e.enableVertexAttribArray(n),Ae(e,Ce),e.vertexAttribPointer(n,2,e.FLOAT,!1,0,0)}function nt(e,t){let n=R(e,Je.vert,Je.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=W(e,n,{m_1j:r.size,m_8:i.handle,m_1k:0}),d=t.items.map(({N:e})=>Fe(e)),f=d.reduce((e,t)=>Math.max(e,t),0),p=e.createVertexArray();if(!p)throw Error(`Cannot create VAO`);e.bindVertexArray(p),Z(e,n),X(e,n,`m_1l`,Y(t.items,e=>e.pointsSlot),4),X(e,n,`m_4`,new Uint32Array(t.items.map(e=>e.N)),1),X(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,G(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 rt(e,t){let n=R(e,Ye.vert,Ye.frag),r=t.items.map(({N:e})=>{let[t,n]=Re(Ie(e));return{x:0,y:0,w:t,h:n}}),i=H(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*U(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=W(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),Z(e,n),X(e,n,`m_o`,new Uint32Array(r.map(J).flat()),4),X(e,n,`m_p`,Y(t.items,e=>e.particlesPositionsSlot),4),X(e,n,`m_f`,Y(t.items,e=>e.spatialBoundariesSlot),4),X(e,n,`m_4`,new Uint32Array(t.items.map(e=>e.N)),1),X(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),G(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 it(e,t){let n=R(e,Xe.vert,Xe.frag),r=t.texture.spatialKeys(),i=Ge(e,r.size),a=V(i,r),o=B(e,r.handle),s=B(e,i.handle),c=V(o,s),l=W(e,n,{m_1n:0,m_1o:0,m_1p:r.handle,m_1q:r.size}),u=t.items.map(({N:e})=>Le(e)).reduce((e,t)=>Math.max(e,t),0),d=e.createVertexArray();if(!d)throw Error(`Cannot create VAO`);e.bindVertexArray(d),Z(e,n),X(e,n,`m_1r`,Y(t.items,e=>e.spatialKeysSlot),4),X(e,n,`m_4`,new Uint32Array(t.items.map(e=>e.N)),1);let f=0,p=0,m=r;return{step:(r=ze(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,G(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 at(e,t){let n=R(e,Ze.vert,Ze.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=Ge(e,c.size),u=Ke(e,c.size),d=Ke(e,c.size),f=V(q(e,c,d),q(e,c,u)),p=V(q(e,l,d),q(e,l,u)),m=t.items.map(({N:e})=>Le(Ie(e))).reduce((e,t)=>Math.max(e,t),0),h=e.createVertexArray();if(!h)throw Error(`Cannot create VAO`);return e.bindVertexArray(h),Z(e,n),X(e,n,`m_1r`,Y(t.items,e=>e.spatialKeysSlot),4),X(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 ot(e,t){let n=R(e,Qe.vert,Qe.frag),r=t.items.map(({depth:e})=>{let t=1<<e-1;return{x:0,y:0,w:t,h:t}}),i=H(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=W(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),Z(e,n),X(e,n,`m_2`,new Uint32Array(r.map(J).flat()),4),X(e,n,`m_3`,Y(t.items,e=>e.spatialKeysSlot),4),X(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),G(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 st(e,t){let n=R(e,$e.vert,$e.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?K():{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}=H(i.map(e=>e.multipolesSlot[t]||K()));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=W(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),Z(e,n),X(e,n,`m_c`,new Uint32Array(i.map(e=>e.multipolesSlot[a]).map(J).flat()),4),X(e,n,`m_d`,new Uint32Array(i.map(e=>a>=e.depth-1?K():e.multipolesSlot[a+1]).map(J).flat()),4),X(e,n,`m_e`,Y(t.items,e=>e.particlesPositionsSlot),4),X(e,n,`m_f`,Y(t.items,e=>e.spatialBoundariesSlot),4),X(e,n,`m_3`,Y(t.items,e=>e.spatialKeysSlot),4),X(e,n,`m_2`,Y(t.items,e=>e.gridCellsSlot),4),X(e,n,`m_g`,new Uint32Array(t.items.map(e=>e.depth)),1),X(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;G(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 ct(e,t){let n=R(e,et.vert,et.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=W(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),Z(e,n),X(e,n,`m_r`,new Uint32Array(i.map(e=>e.localExpansionsSlot[a]).map(J).flat()),4),X(e,n,`m_s`,new Uint32Array(i.map(e=>a>=3?e.localExpansionsSlot[a-1]:K()).map(J).flat()),4),X(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]),G(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 lt(e,t,n){let r=R(e,tt.vert,tt.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=W(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),Z(e,r),X(e,r,`m_e`,Y(t.items,e=>e.particlesPositionsSlot),4),X(e,r,`m_1f`,Y(t.items,e=>e.nodesExtraPropertiesSlot),4),X(e,r,`m_1g`,Y(t.items,e=>e.adjacencyListsSlot),4),X(e,r,`m_1h`,Y(t.items,e=>e.adjacencyOffsetsSlot),4),X(e,r,`m_1i`,Y(t.items,e=>e.stiffnessSlot),4),X(e,r,`m_f`,Y(t.items,e=>e.spatialBoundariesSlot),4),X(e,r,`m_3`,Y(t.items,e=>e.spatialKeysSlot),4),X(e,r,`m_2`,Y(t.items,e=>e.gridCellsSlot),4),X(e,r,`m_r`,new Uint32Array(t.items.map(e=>e.localExpansionsSlot&&e.localExpansionsSlot[n]||K()).map(J).flat()),4),X(e,r,`m_4`,new Uint32Array(t.items.map(e=>e.N)),1),X(e,r,`m_g`,new Uint32Array(t.items.map(e=>e.depth)),1),X(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]),G(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 ut(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=nt(e,c),u=rt(e,{items:t.items.map((e,t)=>({...e,depth:Math.max(1,n.depth??Ve(e.N)),...c.items[t],...l.outputs.items[t]})),texture:{...c.texture,...l.outputs.texture}}),d=(a===`ibr`?at:it)(e,u.outputs),f=ot(e,{items:t.items.map((e,t)=>({...e,depth:Math.max(1,n.depth??Ve(e.N)),order:o,...l.outputs.items[t],...d.outputs.items[t]})),texture:{...l.outputs.texture,...d.outputs.texture}}),p=st(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=ct(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=lt(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{...qe(i??He(_),e=>(s=g.outputs.texture.points(),l.step(),u.step(),d.step(),f.step(),p.step(),m.step(),g.step(Ue(e,r)),e<r)),destroy:()=>{l.destroy(),u.destroy(),d.destroy(),f.destroy(),p.destroy(),m.destroy(),g.destroy()}}}const dt=(e,t)=>.003*e**2+(t+1);function ft(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 pt(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 mt(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 ht(e){let t=ft(e);return{nodes:e.nodes.map((e,n)=>{let r=(e.mass??1)*dt(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 gt(e,t){return ht(mt(pt(e),t))}function _t(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 vt(e,t,n={}){t.getExtension(`EXT_color_buffer_float`)||t.getExtension(`WEBGL_lose_context`)?.loseContext();let r=new xe({...Se,...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&&=(Pe(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=_t(pt(e),Object.values(t)),r.map(({nodes:e})=>e).flat().forEach((e,t)=>{c[t]=e.id}),r=r.map(e=>gt(e,s))}else r=[gt(e,s)];return Ne(t,r)},h={setOptions(e={}){return r=new xe({...Se,...e}),l&&(f(),u=ut(t,l,r)),h},setGraph(e={nodes:[],edges:[]}){return l&&=(Pe(t,l),void 0),l=m(e),r&&(f(),u=ut(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=ut(t,l,r),h}function yt(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 bt(e,t,n){try{let e=yt(),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 xt=e=>{};function St(e){for(let t in e)typeof e[t]==`function`&&delete e[t];return e}const Ct={name:`force`,imports:{force:he},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||xt,p=e.nodeMass?t=>e.nodeMass(e.nodes.get(t)):xt;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=St({...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=bt(`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(),Ct._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?vt(e.graph,n,e.options).start():he(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 wt(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 Tt={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:St(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=wt(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(){Et(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 Et(e,t,n){let r=e.settings,i=o().force_fa2_pass(t,n,e.ppn,e.ppe,e.nodesLength,e.edgesLength,r.scalingRatio,r.gravity,r.strongGravityMode,r.linLogMode,r.edgeWeightInfluence,r.slowDown,r.barnesHutOptimize);e.iterations++,r.autoStop&&(e.converged=e.iterations>r.maxIterations||i/e.nodesLength<r.avgDistanceThreshold)}function Dt(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 Ot(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 kt(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 At(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 jt(e,t,n,r){let i=o().hier_remove_cycles(e,Uint32Array.from(t),Uint32Array.from(n),r?Uint32Array.from(r):new Uint32Array,r!==void 0),a=[],s=[];for(let e=0;e<i.length;e+=2)a.push(i[e]),s.push(i[e+1]);return{sources:a,targets:s}}function Mt(e,t,n,r,i,a){let s=o();if(!s||typeof s.hier_reference_layering!=`function`)throw Error(`hierarchical layout requires the wasm backend (hier_reference_layering missing).`);let c=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]},[l,u]=c(t),[d,f]=c(n),p=new Float64Array(e).fill(NaN);if(a)for(let t=0;t<e;t++){let e=a[t];typeof e==`number`&&!isNaN(e)&&(p[t]=e)}let m=new Uint8Array(e);for(let e of i)m[e]=1;let h=s.hier_reference_layering(e,l,u,d,f,m,p);return Array.from(h)}function Nt(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 Pt(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 Ft(e,t,n,r,i){let a=o();if(!a||typeof a.hier_barycenter_sweep!=`function`)throw Error(`hierarchical layout requires the wasm backend (hier_barycenter_sweep missing).`);let s=r.length,c=new Uint32Array(e.length+1),l=0;for(let t=0;t<e.length;t++)c[t]=l,l+=e[t].length;c[e.length]=l;let u=new Uint32Array(l),d=0;for(let t=0;t<e.length;t++)for(let n=0;n<e[t].length;n++)u[d++]=e[t][n];let f=new Uint32Array(s+1),p=0;for(let e=0;e<s;e++)f[e]=p,p+=t[e].length;f[s]=p;let m=new Uint32Array(p),h=0;for(let e=0;e<s;e++)for(let n=0;n<t[e].length;n++)m[h++]=t[e][n];let g=a.hier_barycenter_sweep(s,u,c,f,m,Int32Array.from(r),i),_=0;for(let t=0;t<e.length;t++)for(let n=0;n<e[t].length;n++)e[t][n]=g[_++]}function It(e,t,n,r,i,a,s){let c=t.length,l=Array(c).fill(0),u=Array(c).fill(0),d=o();if(!d||typeof d.sugiyama_coordinates!=`function`)throw Error(`hierarchical layout requires the wasm backend (sugiyama_coordinates missing).`);let f=new Uint32Array(c+1),p=0,m=[];for(let e=0;e<c;e++)m.push(a[e].filter(t=>s[t]>=s[e]));for(let e=0;e<c;e++)f[e]=p,p+=m[e].length;f[c]=p;let h=new Uint32Array(p),g=0;for(let e=0;e<c;e++)for(let t of m[e])h[g++]=t;let _=new Float64Array(c);for(let e=0;e<c;e++)_[e]=t[e]||5;let v=d.sugiyama_coordinates(c,Int32Array.from(s),_,f,h,n,r);if(v.length===0&&c>1)throw Error(`sugiyama coordinate assignment failed (empty placement group).`);for(let e=0;e<c;e++){let t=v[2*e]??0,n=v[2*e+1]??0;if(i===`BT`)n=-n;else if(i===`LR`){let e=t;t=n,n=-e}else if(i===`RL`){let e=t;t=-n,n=e}l[e]=t,u[e]=n}return{x:l,y:u}}function Lt(e,t,n,r,i,a,s,c,l,u){let d=t.length,f=Array(d).fill(0),p=Array(d).fill(0),m=o();if(!m||typeof m.hier_assign_coordinates!=`function`)throw Error(`hierarchical layout requires the wasm backend (hier_assign_coordinates missing).`);let h=(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]},g=new Uint32Array(e.length+1),_=0;for(let t=0;t<e.length;t++)g[t]=_,_+=e[t].length;g[e.length]=_;let v=new Uint32Array(_),y=0;for(let t=0;t<e.length;t++)for(let n=0;n<e[t].length;n++)v[y++]=e[t][n];let b=new Float64Array(d);for(let e=0;e<d;e++)b[e]=t[e]||5;let[x,S]=h(c,d),[C,w]=h(l,d),T=i===`BT`?1:i===`LR`?2:i===`RL`?3:0,E=m.hier_assign_coordinates(d,v,g,b,n,r,T,a,s,x,S,C,w,Int32Array.from(u));for(let e=0;e<d;e++)f[e]=E[e*2],p[e]=E[e*2+1];return{x:f,y:p}}function Rt(e,t,n,r,i,a){let s=o();if(!s||typeof s.hier_pack_units!=`function`)throw Error(`hierarchical layout requires the wasm backend (hier_pack_units missing).`);let c=t.length,l=new Uint32Array(e.length+1),u=0;for(let t=0;t<e.length;t++)l[t]=u,u+=e[t].nodes.length;l[e.length]=u;let d=new Uint32Array(u),f=0;for(let t of e)for(let e of t.nodes)d[f++]=e;let p=new Uint8Array(e.length),m=new Float64Array(e.length),h=new Float64Array(e.length);e.forEach((e,t)=>{e.fake&&(p[t]=1,m[t]=e.fake.w,h[t]=e.fake.h)});let g=new Float64Array(c);for(let e=0;e<c;e++)g[e]=r[e]??5;let _=a===`singleLine`?2:0,v=s.hier_pack_units(d,l,p,m,h,Float64Array.from(t),Float64Array.from(n),g,i,_);for(let e=0;e<c;e++)t[e]=v[e*2],n[e]=v[e*2+1]}function zt(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}=jt(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=Ot(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=kt(e,C,w,O),n=t?(()=>{let n=jt(m,t.src,t.tgt,e);return{src:n.sources,tgt:n.targets}})():null,{order:a,childrenOf:d}=At(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}=Dt(p,h,g),k=Mt(p,S,T,b,x,a.map(e=>O(e)));Nt(p,S,T,k);let A=Pt(p,k);if(u){let e=0;for(let t of A)t.length>e&&(e=t.length);Ft(A,S,T,k,e<50?100:e<100?10:+(e<1e3))}let j,M;try{let e=It(A,y,r,i,`TB`,S,k);j=e.x,M=e.y}catch{let e=Lt(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(Rt(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 Bt={direction:`TB`,nodeDistance:5,levelDistance:50,componentDistance:50,siblingsDistance:10,compactSiblings:!1,gapWidth:1,arrangeComponents:`fit`,gridDistance:50,layer:`layer`,siblingIndex:``};function Vt(e){for(let t in e)typeof e[t]==`function`&&delete e[t];return e}function Ht(e,t,n){return t?t instanceof Object&&t._indexes?t:e.getNodes(t):n??e.nodeList()}function Ut(){return{}}const Wt={name:`hierarchical`,configure(e,{graph:t,data:n}){let r={...Bt,...e,nodeList:e.nodes};r.direction=e.direction||Bt.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||Bt.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=Ht(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=Ht(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:Vt(r),layoutable:l,packs:v,radiuses:d,siblingIndexes:m,layers:p,sinks:_,coords:u}},context:Ut,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=zt({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)}}},Gt={...Wt,name:`sequential`};function Kt(e){return e===void 0||typeof e==`number`&&isFinite(e)&&e>0}function qt(e,t,n,r,i){if(!Kt(t))throw TypeError(`"rows" should be a positive integer`);if(!Kt(n))throw TypeError(`"cols" should be a positive integer`);if(!Kt(r))throw TypeError(`"rowDistance" should be a positive number`);if(!Kt(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 Jt(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 Yt={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}=qt(o,e.rows,e.cols,e.colDistance,e.rowDistance),d=Jt(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 Xt(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 Zt=(e,t)=>e-t;function Qt(e,t,n){let r=e.slice().sort(Zt),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];Xt(r,t)!==-1&&(t===n&&(s=!0),a.push(t))}a.length>0&&i[s?`unshift`:`push`](a.sort(Zt))}return i}function $t(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 en={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(Zt);let d=l.length,f=Qt(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 $t(e)},onEnd:e=>$t(e)};function tn(e,t){return t&&typeof t==`object`&&t._index!==void 0?t:e.getNode(t)}function nn(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:Tt,force:Ct,hierarchical:Wt,sequential:Gt,grid:Yt,radial:en,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:tn(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=nn(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 an=null;function on(e){return an||=import(`./nodus_wasm-DxYJZXfN.js`).then(e=>{s(e)}).catch(()=>{an=null}),an.then(()=>{r(e)})}const sn=()=>{},cn=()=>!1,$=new Map;function ln(e,t,n){self.postMessage({type:n?`update`:`complete`,workerId:e.workerId,workerMessage:t,isRunning:n})}function un(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(ln(e,n,r),!r){$.delete(e.workerId);return}setTimeout(()=>un(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:sn,isRunning:typeof e.isRunning==`function`?e.isRunning:cn,stop:typeof e.stop==`function`?e.stop:sn};$.set(t.workerId,n),t.wasmFlags?on(t.wasmFlags).then(()=>{n.stopped||un(n,t.msg)}):un(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)}}}});