@reposkein/mcp 0.2.7 → 0.4.0

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 (140) hide show
  1. package/README.md +73 -1
  2. package/binary-digests.json +4 -4
  3. package/dist/SKILL.md +63 -1
  4. package/dist/cli/adr.d.ts +37 -0
  5. package/dist/cli/adr.js +231 -0
  6. package/dist/cli/adr.js.map +1 -0
  7. package/dist/cli/agentAdapters.d.ts +68 -0
  8. package/dist/cli/agentAdapters.js +223 -0
  9. package/dist/cli/agentAdapters.js.map +1 -0
  10. package/dist/cli/ansi.d.ts +24 -0
  11. package/dist/cli/ansi.js +40 -0
  12. package/dist/cli/ansi.js.map +1 -0
  13. package/dist/cli/doctor.d.ts +34 -2
  14. package/dist/cli/doctor.js +53 -5
  15. package/dist/cli/doctor.js.map +1 -1
  16. package/dist/cli/doctorDecisions.d.ts +5 -0
  17. package/dist/cli/doctorDecisions.js +83 -0
  18. package/dist/cli/doctorDecisions.js.map +1 -0
  19. package/dist/cli/doctorFreshness.d.ts +43 -0
  20. package/dist/cli/doctorFreshness.js +111 -0
  21. package/dist/cli/doctorFreshness.js.map +1 -0
  22. package/dist/cli/doctorSummaries.d.ts +2 -0
  23. package/dist/cli/doctorSummaries.js +95 -0
  24. package/dist/cli/doctorSummaries.js.map +1 -0
  25. package/dist/cli/federatedDiscovery.d.ts +16 -0
  26. package/dist/cli/federatedDiscovery.js +75 -0
  27. package/dist/cli/federatedDiscovery.js.map +1 -0
  28. package/dist/cli/init.d.ts +69 -6
  29. package/dist/cli/init.js +194 -28
  30. package/dist/cli/init.js.map +1 -1
  31. package/dist/cli/sourceSlices.d.ts +17 -0
  32. package/dist/cli/sourceSlices.js +59 -0
  33. package/dist/cli/sourceSlices.js.map +1 -0
  34. package/dist/cli/stats.d.ts +29 -0
  35. package/dist/cli/stats.js +180 -0
  36. package/dist/cli/stats.js.map +1 -0
  37. package/dist/cli/view.d.ts +71 -3
  38. package/dist/cli/view.js +147 -12
  39. package/dist/cli/view.js.map +1 -1
  40. package/dist/guard/decisionValidation.d.ts +29 -0
  41. package/dist/guard/decisionValidation.js +51 -0
  42. package/dist/guard/decisionValidation.js.map +1 -0
  43. package/dist/guard/summaryValidation.d.ts +3 -0
  44. package/dist/guard/summaryValidation.js +5 -3
  45. package/dist/guard/summaryValidation.js.map +1 -1
  46. package/dist/index.d.ts +48 -0
  47. package/dist/index.js +355 -78
  48. package/dist/index.js.map +1 -1
  49. package/dist/indexer/decisionsAffected.d.ts +42 -0
  50. package/dist/indexer/decisionsAffected.js +149 -0
  51. package/dist/indexer/decisionsAffected.js.map +1 -0
  52. package/dist/indexer/fetchBinary.d.ts +14 -0
  53. package/dist/indexer/fetchBinary.js +81 -40
  54. package/dist/indexer/fetchBinary.js.map +1 -1
  55. package/dist/indexer/runIndexer.d.ts +3 -2
  56. package/dist/indexer/runIndexer.js +8 -4
  57. package/dist/indexer/runIndexer.js.map +1 -1
  58. package/dist/profile/decisions.d.ts +37 -0
  59. package/dist/profile/decisions.js +112 -0
  60. package/dist/profile/decisions.js.map +1 -0
  61. package/dist/profile/types.d.ts +8 -0
  62. package/dist/store/GraphStore.d.ts +5 -0
  63. package/dist/store/JsonlGraphStore.d.ts +14 -3
  64. package/dist/store/JsonlGraphStore.js +66 -19
  65. package/dist/store/JsonlGraphStore.js.map +1 -1
  66. package/dist/store/decisions.d.ts +131 -0
  67. package/dist/store/decisions.js +321 -0
  68. package/dist/store/decisions.js.map +1 -0
  69. package/dist/store/indexedAt.d.ts +18 -0
  70. package/dist/store/indexedAt.js +56 -0
  71. package/dist/store/indexedAt.js.map +1 -0
  72. package/dist/store/instrumentTool.d.ts +40 -0
  73. package/dist/store/instrumentTool.js +82 -0
  74. package/dist/store/instrumentTool.js.map +1 -0
  75. package/dist/store/repoContextCache.d.ts +15 -0
  76. package/dist/store/repoContextCache.js +26 -0
  77. package/dist/store/repoContextCache.js.map +1 -0
  78. package/dist/store/repoSession.d.ts +63 -0
  79. package/dist/store/repoSession.js +123 -0
  80. package/dist/store/repoSession.js.map +1 -0
  81. package/dist/store/resolveRepoPath.d.ts +31 -0
  82. package/dist/store/resolveRepoPath.js +85 -0
  83. package/dist/store/resolveRepoPath.js.map +1 -0
  84. package/dist/store/sessionLog.d.ts +98 -0
  85. package/dist/store/sessionLog.js +216 -0
  86. package/dist/store/sessionLog.js.map +1 -0
  87. package/dist/store/sessionStats.d.ts +55 -0
  88. package/dist/store/sessionStats.js +140 -0
  89. package/dist/store/sessionStats.js.map +1 -0
  90. package/dist/store/sidecar.d.ts +39 -3
  91. package/dist/store/sidecar.js +89 -5
  92. package/dist/store/sidecar.js.map +1 -1
  93. package/dist/store/summaryShards.d.ts +117 -0
  94. package/dist/store/summaryShards.js +291 -0
  95. package/dist/store/summaryShards.js.map +1 -0
  96. package/dist/store/teamConfig.d.ts +13 -0
  97. package/dist/store/teamConfig.js +49 -0
  98. package/dist/store/teamConfig.js.map +1 -0
  99. package/dist/tools/getContextProfile.d.ts +1 -1
  100. package/dist/tools/getContextProfile.js +9 -1
  101. package/dist/tools/getContextProfile.js.map +1 -1
  102. package/dist/tools/getDecision.d.ts +6 -0
  103. package/dist/tools/getDecision.js +59 -0
  104. package/dist/tools/getDecision.js.map +1 -0
  105. package/dist/tools/impact.d.ts +1 -1
  106. package/dist/tools/impact.js +13 -1
  107. package/dist/tools/impact.js.map +1 -1
  108. package/dist/tools/indexerTools.d.ts +16 -2
  109. package/dist/tools/indexerTools.js +44 -5
  110. package/dist/tools/indexerTools.js.map +1 -1
  111. package/dist/tools/listDecisions.d.ts +19 -0
  112. package/dist/tools/listDecisions.js +93 -0
  113. package/dist/tools/listDecisions.js.map +1 -0
  114. package/dist/tools/reaffirmDecision.d.ts +11 -0
  115. package/dist/tools/reaffirmDecision.js +55 -0
  116. package/dist/tools/reaffirmDecision.js.map +1 -0
  117. package/dist/tools/recordDecision.d.ts +24 -0
  118. package/dist/tools/recordDecision.js +135 -0
  119. package/dist/tools/recordDecision.js.map +1 -0
  120. package/dist/tools/semanticFind.d.ts +9 -2
  121. package/dist/tools/semanticFind.js +44 -2
  122. package/dist/tools/semanticFind.js.map +1 -1
  123. package/dist/tools/setDecisionStatus.d.ts +8 -0
  124. package/dist/tools/setDecisionStatus.js +34 -0
  125. package/dist/tools/setDecisionStatus.js.map +1 -0
  126. package/dist/viz/assets/{graph.worker-CC7BeE-8.js → graph.worker-DkH6-lMU.js} +1 -1
  127. package/dist/viz/assets/index-CxqeGuRS.css +1 -0
  128. package/dist/viz/assets/index-DiNZyrXx.js +9 -0
  129. package/dist/viz/assets/jetbrains-mono-latin-400-normal-V6pRDFza.woff2 +0 -0
  130. package/dist/viz/assets/jetbrains-mono-latin-500-normal-BWZEU5yA.woff2 +0 -0
  131. package/dist/viz/assets/jetbrains-mono-latin-700-normal-BYuf6tUa.woff2 +0 -0
  132. package/dist/viz/assets/r3f-BZY3QR6_.js +336 -0
  133. package/dist/viz/assets/tanstack-CjXr-L-s.js +62 -0
  134. package/dist/viz/assets/three-Cpu5RUEM.js +4116 -0
  135. package/dist/viz/index.html +5 -4
  136. package/package.json +5 -4
  137. package/dist/viz/assets/index-C_8UkiJ8.js +0 -9
  138. package/dist/viz/assets/r3f-Cku1OhB-.js +0 -277
  139. package/dist/viz/assets/tanstack-DyXcNRWk.js +0 -77
  140. package/dist/viz/assets/three-Z8XaLGmf.js +0 -3839
@@ -0,0 +1,34 @@
1
+ import { loadDecisions, writeDecision, } from "../store/decisions.js";
2
+ /** Legal lifecycle transitions. rejected / deprecated / superseded are
3
+ * terminal; deprecation is for accepted decisions that aged out without a
4
+ * successor. */
5
+ const LEGAL = {
6
+ proposed: ["accepted", "rejected"],
7
+ accepted: ["deprecated"],
8
+ };
9
+ const err = (text) => ({ content: [{ type: "text", text }], isError: true });
10
+ export function makeSetDecisionStatus(repoPath) {
11
+ return async (args) => {
12
+ try {
13
+ const { decisions } = loadDecisions(repoPath);
14
+ const rec = decisions.find((d) => d.id === args.decision_id);
15
+ if (!rec)
16
+ return err(`unknown decision: ${args.decision_id}`);
17
+ const allowed = LEGAL[rec.status] ?? [];
18
+ if (!allowed.includes(args.status)) {
19
+ return err(`illegal transition ${rec.status} → ${args.status} (allowed from ${rec.status}: ${allowed.length ? allowed.join(", ") : "none — terminal status"})`);
20
+ }
21
+ const updated = { ...rec, status: args.status };
22
+ writeDecision(repoPath, updated);
23
+ return {
24
+ content: [
25
+ { type: "text", text: JSON.stringify({ ok: true, decision_id: rec.id, status: args.status }) },
26
+ ],
27
+ };
28
+ }
29
+ catch (e) {
30
+ return err(e.message);
31
+ }
32
+ };
33
+ }
34
+ //# sourceMappingURL=setDecisionStatus.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"setDecisionStatus.js","sourceRoot":"","sources":["../../src/tools/setDecisionStatus.ts"],"names":[],"mappings":"AACA,OAAO,EACL,aAAa,EACb,aAAa,GAGd,MAAM,uBAAuB,CAAC;AAS/B;;iBAEiB;AACjB,MAAM,KAAK,GAAqC;IAC9C,QAAQ,EAAE,CAAC,UAAU,EAAE,UAAU,CAAC;IAClC,QAAQ,EAAE,CAAC,YAAY,CAAC;CACzB,CAAC;AAEF,MAAM,GAAG,GAAG,CAAC,IAAY,EAAc,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;AAEjG,MAAM,UAAU,qBAAqB,CAAC,QAAgB;IACpD,OAAO,KAAK,EAAE,IAA2B,EAAuB,EAAE;QAChE,IAAI,CAAC;YACH,MAAM,EAAE,SAAS,EAAE,GAAG,aAAa,CAAC,QAAQ,CAAC,CAAC;YAC9C,MAAM,GAAG,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,IAAI,CAAC,WAAW,CAAC,CAAC;YAC7D,IAAI,CAAC,GAAG;gBAAE,OAAO,GAAG,CAAC,qBAAqB,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;YAC9D,MAAM,OAAO,GAAG,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;YACxC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;gBACnC,OAAO,GAAG,CACR,sBAAsB,GAAG,CAAC,MAAM,MAAM,IAAI,CAAC,MAAM,kBAAkB,GAAG,CAAC,MAAM,KAC3E,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,wBACxC,GAAG,CACJ,CAAC;YACJ,CAAC;YACD,MAAM,OAAO,GAAmB,EAAE,GAAG,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC;YAChE,aAAa,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;YACjC,OAAO;gBACL,OAAO,EAAE;oBACP,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,GAAG,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE;iBAC/F;aACF,CAAC;QACJ,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,OAAO,GAAG,CAAE,CAAW,CAAC,OAAO,CAAC,CAAC;QACnC,CAAC;IACH,CAAC,CAAC;AACJ,CAAC"}
@@ -1,3 +1,3 @@
1
1
  function qt(t){let n;try{n=JSON.parse(t)}catch{return null}const e=n.id,i=n.labels;if(typeof e!="string"||!Array.isArray(i))return null;const r={...n};return delete r.id,delete r.labels,{id:e,labels:i.filter(o=>typeof o=="string"),props:r}}function Tt(t){let n;try{n=JSON.parse(t)}catch{return null}const e=n.from,i=n.type,r=n.to;if(typeof e!="string"||typeof i!="string"||typeof r!="string")return null;const o={...n};return delete o.from,delete o.type,delete o.to,{from:e,type:i,to:r,props:o}}function Ot(t){const n=[];for(const e of t.split(`
2
2
  `)){if(e.trim()==="")continue;const i=qt(e);i&&n.push(i)}return n}function Pt(t){const n=[];for(const e of t.split(`
3
- `)){if(e.trim()==="")continue;const i=Tt(e);i&&n.push(i)}return n}function at(t,n){return{nodes:Ot(t),edges:Pt(n)}}const Dt=new Set(["CALLS","IMPORTS","INSTANTIATES","IMPLEMENTS","INHERITS"]);function Ft(t){const n=t.resolution;if(n==="exact"||n==="name_match"||n==="ambiguous")return n;const e=typeof t.confidence=="number"?t.confidence:1;return e>=.95?"exact":e>=.5?"name_match":"ambiguous"}function I(t){return typeof t=="string"?t:null}function tt(t,n=0){return typeof t=="number"?t:n}const Lt=new Set(["Function","Class","Interface","Enum","Variable"]);function L(t){return t.labels[0]??""}function Q(t){const n=t.lastIndexOf("/");if(n<0)return".";const e=t.slice(0,n);return e===""?".":e}function W(t){if(t==="."||t==="")return".";const n=t.lastIndexOf("/");return n<0?t:t.slice(n+1)}function jt(t){for(const n of t.nodes)if(L(n)==="Repository"){const e=I(n.props.name);if(e)return e}for(const n of t.nodes){const e=n.id.split(":");if(e.length>=2&&e[0]==="rs1"&&e[1])return e[1]}return"repo"}function Rt(t){const n=jt(t),e=`galaxy:${n}`,i=new Map,r=c=>{const _=i.get(c.key);return _||(i.set(c.key,c),c)};r({key:e,kind:"galaxy",name:n,parent:null,children:[],nodeId:null});const o=c=>`dir:${n}:${c}`,s=c=>`file:${n}:${c}`,a=c=>{const _=o(c),x=i.get(_);if(x)return x;const g=c===".",h=g?null:Q(c),m=g?e:a(h).key;return r({key:_,kind:"dir",name:g?n:W(c),parent:m,children:[],nodeId:null})};for(const c of t.nodes){if(L(c)!=="Directory")continue;const _=I(c.props.path)??".",x=a(_);x.nodeId=c.id}const f=new Map;for(const c of t.nodes){if(L(c)!=="File")continue;const _=I(c.props.path)??I(c.props.file_path);if(_===null)continue;const x=a(Q(_)),g=s(_);r({key:g,kind:"file",name:W(_),parent:x.key,children:[],nodeId:c.id}),f.set(_,g)}const u=new Map;for(const c of t.nodes)Lt.has(L(c))&&u.set(c.id,c);const p=new Map;for(const c of t.nodes)if(L(c)==="File"){const _=I(c.props.path)??I(c.props.file_path);_!==null&&p.set(c.id,s(_))}const l=new Set,y=(c,_)=>{l.has(c.id)||(l.add(c.id),r({key:c.id,kind:"symbol",name:I(c.props.name)??I(c.props.qualified_name)??c.id,parent:_,children:[],nodeId:c.id,symbolKind:L(c)}))};for(const c of t.edges){if(c.type!=="DEFINES")continue;const _=u.get(c.to);if(!_)continue;const x=p.get(c.from);x&&i.has(x)&&y(_,x)}for(const c of u.values()){if(l.has(c.id))continue;const _=I(c.props.file_path);if(_===null)continue;let x=f.get(_);if(!x){const g=a(Q(_));x=s(_),r({key:x,kind:"file",name:W(_),parent:g.key,children:[],nodeId:null}),f.set(_,x)}y(c,x)}for(const c of i.values())if(c.parent){const _=i.get(c.parent);_&&_.children.push(c.key)}for(const c of i.values())c.children.sort();return{rootKey:e,byKey:i,repoId:n}}function Bt(t){const n=[],e=i=>{const r=t.byKey.get(i);if(r){n.push(r);for(const o of r.children)e(o)}};return e(t.rootKey),n}function Kt(t,n,e){var i,r=1;t==null&&(t=0),n==null&&(n=0),e==null&&(e=0);function o(){var s,a=i.length,f,u=0,p=0,l=0;for(s=0;s<a;++s)f=i[s],u+=f.x||0,p+=f.y||0,l+=f.z||0;for(u=(u/a-t)*r,p=(p/a-n)*r,l=(l/a-e)*r,s=0;s<a;++s)f=i[s],u&&(f.x-=u),p&&(f.y-=p),l&&(f.z-=l)}return o.initialize=function(s){i=s},o.x=function(s){return arguments.length?(t=+s,o):t},o.y=function(s){return arguments.length?(n=+s,o):n},o.z=function(s){return arguments.length?(e=+s,o):e},o.strength=function(s){return arguments.length?(r=+s,o):r},o}function Ct(t){const n=+this._x.call(null,t);return dt(this.cover(n),n,t)}function dt(t,n,e){if(isNaN(n))return t;var i,r=t._root,o={data:e},s=t._x0,a=t._x1,f,u,p,l,y;if(!r)return t._root=o,t;for(;r.length;)if((p=n>=(f=(s+a)/2))?s=f:a=f,i=r,!(r=r[l=+p]))return i[l]=o,t;if(u=+t._x.call(null,r.data),n===u)return o.next=r,i?i[l]=o:t._root=o,t;do i=i?i[l]=new Array(2):t._root=new Array(2),(p=n>=(f=(s+a)/2))?s=f:a=f;while((l=+p)==(y=+(u>=f)));return i[y]=r,i[l]=o,t}function Yt(t){Array.isArray(t)||(t=Array.from(t));const n=t.length,e=new Float64Array(n);let i=1/0,r=-1/0;for(let o=0,s;o<n;++o)isNaN(s=+this._x.call(null,t[o]))||(e[o]=s,s<i&&(i=s),s>r&&(r=s));if(i>r)return this;this.cover(i).cover(r);for(let o=0;o<n;++o)dt(this,e[o],t[o]);return this}function Ht(t){if(isNaN(t=+t))return this;var n=this._x0,e=this._x1;if(isNaN(n))e=(n=Math.floor(t))+1;else{for(var i=e-n||1,r=this._root,o,s;n>t||t>=e;)switch(s=+(t<n),o=new Array(2),o[s]=r,r=o,i*=2,s){case 0:e=n+i;break;case 1:n=e-i;break}this._root&&this._root.length&&(this._root=r)}return this._x0=n,this._x1=e,this}function Ut(){var t=[];return this.visit(function(n){if(!n.length)do t.push(n.data);while(n=n.next)}),t}function Gt(t){return arguments.length?this.cover(+t[0][0]).cover(+t[1][0]):isNaN(this._x0)?void 0:[[this._x0],[this._x1]]}function D(t,n,e){this.node=t,this.x0=n,this.x1=e}function Xt(t,n){var e,i=this._x0,r,o,s=this._x1,a=[],f=this._root,u,p;for(f&&a.push(new D(f,i,s)),n==null?n=1/0:(i=t-n,s=t+n);u=a.pop();)if(!(!(f=u.node)||(r=u.x0)>s||(o=u.x1)<i))if(f.length){var l=(r+o)/2;a.push(new D(f[1],l,o),new D(f[0],r,l)),(p=+(t>=l))&&(u=a[a.length-1],a[a.length-1]=a[a.length-1-p],a[a.length-1-p]=u)}else{var y=Math.abs(t-+this._x.call(null,f.data));y<n&&(n=y,i=t-y,s=t+y,e=f.data)}return e}function Vt(t){if(isNaN(f=+this._x.call(null,t)))return this;var n,e=this._root,i,r,o,s=this._x0,a=this._x1,f,u,p,l,y;if(!e)return this;if(e.length)for(;;){if((p=f>=(u=(s+a)/2))?s=u:a=u,n=e,!(e=e[l=+p]))return this;if(!e.length)break;n[l+1&1]&&(i=n,y=l)}for(;e.data!==t;)if(r=e,!(e=e.next))return this;return(o=e.next)&&delete e.next,r?(o?r.next=o:delete r.next,this):n?(o?n[l]=o:delete n[l],(e=n[0]||n[1])&&e===(n[1]||n[0])&&!e.length&&(i?i[y]=e:this._root=e),this):(this._root=o,this)}function Jt(t){for(var n=0,e=t.length;n<e;++n)this.remove(t[n]);return this}function Qt(){return this._root}function Wt(){var t=0;return this.visit(function(n){if(!n.length)do++t;while(n=n.next)}),t}function Zt(t){var n=[],e,i=this._root,r,o,s;for(i&&n.push(new D(i,this._x0,this._x1));e=n.pop();)if(!t(i=e.node,o=e.x0,s=e.x1)&&i.length){var a=(o+s)/2;(r=i[1])&&n.push(new D(r,a,s)),(r=i[0])&&n.push(new D(r,o,a))}return this}function tn(t){var n=[],e=[],i;for(this._root&&n.push(new D(this._root,this._x0,this._x1));i=n.pop();){var r=i.node;if(r.length){var o,s=i.x0,a=i.x1,f=(s+a)/2;(o=r[0])&&n.push(new D(o,s,f)),(o=r[1])&&n.push(new D(o,f,a))}e.push(i)}for(;i=e.pop();)t(i.node,i.x0,i.x1);return this}function nn(t){return t[0]}function en(t){return arguments.length?(this._x=t,this):this._x}function xt(t,n){var e=new it(n??nn,NaN,NaN);return t==null?e:e.addAll(t)}function it(t,n,e){this._x=t,this._x0=n,this._x1=e,this._root=void 0}function ft(t){for(var n={data:t.data},e=n;t=t.next;)e=e.next={data:t.data};return n}var q=xt.prototype=it.prototype;q.copy=function(){var t=new it(this._x,this._x0,this._x1),n=this._root,e,i;if(!n)return t;if(!n.length)return t._root=ft(n),t;for(e=[{source:n,target:t._root=new Array(2)}];n=e.pop();)for(var r=0;r<2;++r)(i=n.source[r])&&(i.length?e.push({source:i,target:n.target[r]=new Array(2)}):n.target[r]=ft(i));return t};q.add=Ct;q.addAll=Yt;q.cover=Ht;q.data=Ut;q.extent=Gt;q.find=Xt;q.remove=Vt;q.removeAll=Jt;q.root=Qt;q.size=Wt;q.visit=Zt;q.visitAfter=tn;q.x=en;function rn(t){const n=+this._x.call(null,t),e=+this._y.call(null,t);return vt(this.cover(n,e),n,e,t)}function vt(t,n,e,i){if(isNaN(n)||isNaN(e))return t;var r,o=t._root,s={data:i},a=t._x0,f=t._y0,u=t._x1,p=t._y1,l,y,c,_,x,g,h,m;if(!o)return t._root=s,t;for(;o.length;)if((x=n>=(l=(a+u)/2))?a=l:u=l,(g=e>=(y=(f+p)/2))?f=y:p=y,r=o,!(o=o[h=g<<1|x]))return r[h]=s,t;if(c=+t._x.call(null,o.data),_=+t._y.call(null,o.data),n===c&&e===_)return s.next=o,r?r[h]=s:t._root=s,t;do r=r?r[h]=new Array(4):t._root=new Array(4),(x=n>=(l=(a+u)/2))?a=l:u=l,(g=e>=(y=(f+p)/2))?f=y:p=y;while((h=g<<1|x)===(m=(_>=y)<<1|c>=l));return r[m]=o,r[h]=s,t}function on(t){var n,e,i=t.length,r,o,s=new Array(i),a=new Array(i),f=1/0,u=1/0,p=-1/0,l=-1/0;for(e=0;e<i;++e)isNaN(r=+this._x.call(null,n=t[e]))||isNaN(o=+this._y.call(null,n))||(s[e]=r,a[e]=o,r<f&&(f=r),r>p&&(p=r),o<u&&(u=o),o>l&&(l=o));if(f>p||u>l)return this;for(this.cover(f,u).cover(p,l),e=0;e<i;++e)vt(this,s[e],a[e],t[e]);return this}function sn(t,n){if(isNaN(t=+t)||isNaN(n=+n))return this;var e=this._x0,i=this._y0,r=this._x1,o=this._y1;if(isNaN(e))r=(e=Math.floor(t))+1,o=(i=Math.floor(n))+1;else{for(var s=r-e||1,a=this._root,f,u;e>t||t>=r||i>n||n>=o;)switch(u=(n<i)<<1|t<e,f=new Array(4),f[u]=a,a=f,s*=2,u){case 0:r=e+s,o=i+s;break;case 1:e=r-s,o=i+s;break;case 2:r=e+s,i=o-s;break;case 3:e=r-s,i=o-s;break}this._root&&this._root.length&&(this._root=a)}return this._x0=e,this._y0=i,this._x1=r,this._y1=o,this}function an(){var t=[];return this.visit(function(n){if(!n.length)do t.push(n.data);while(n=n.next)}),t}function fn(t){return arguments.length?this.cover(+t[0][0],+t[0][1]).cover(+t[1][0],+t[1][1]):isNaN(this._x0)?void 0:[[this._x0,this._y0],[this._x1,this._y1]]}function $(t,n,e,i,r){this.node=t,this.x0=n,this.y0=e,this.x1=i,this.y1=r}function un(t,n,e){var i,r=this._x0,o=this._y0,s,a,f,u,p=this._x1,l=this._y1,y=[],c=this._root,_,x;for(c&&y.push(new $(c,r,o,p,l)),e==null?e=1/0:(r=t-e,o=n-e,p=t+e,l=n+e,e*=e);_=y.pop();)if(!(!(c=_.node)||(s=_.x0)>p||(a=_.y0)>l||(f=_.x1)<r||(u=_.y1)<o))if(c.length){var g=(s+f)/2,h=(a+u)/2;y.push(new $(c[3],g,h,f,u),new $(c[2],s,h,g,u),new $(c[1],g,a,f,h),new $(c[0],s,a,g,h)),(x=(n>=h)<<1|t>=g)&&(_=y[y.length-1],y[y.length-1]=y[y.length-1-x],y[y.length-1-x]=_)}else{var m=t-+this._x.call(null,c.data),v=n-+this._y.call(null,c.data),w=m*m+v*v;if(w<e){var d=Math.sqrt(e=w);r=t-d,o=n-d,p=t+d,l=n+d,i=c.data}}return i}function ln(t){if(isNaN(p=+this._x.call(null,t))||isNaN(l=+this._y.call(null,t)))return this;var n,e=this._root,i,r,o,s=this._x0,a=this._y0,f=this._x1,u=this._y1,p,l,y,c,_,x,g,h;if(!e)return this;if(e.length)for(;;){if((_=p>=(y=(s+f)/2))?s=y:f=y,(x=l>=(c=(a+u)/2))?a=c:u=c,n=e,!(e=e[g=x<<1|_]))return this;if(!e.length)break;(n[g+1&3]||n[g+2&3]||n[g+3&3])&&(i=n,h=g)}for(;e.data!==t;)if(r=e,!(e=e.next))return this;return(o=e.next)&&delete e.next,r?(o?r.next=o:delete r.next,this):n?(o?n[g]=o:delete n[g],(e=n[0]||n[1]||n[2]||n[3])&&e===(n[3]||n[2]||n[1]||n[0])&&!e.length&&(i?i[h]=e:this._root=e),this):(this._root=o,this)}function hn(t){for(var n=0,e=t.length;n<e;++n)this.remove(t[n]);return this}function cn(){return this._root}function pn(){var t=0;return this.visit(function(n){if(!n.length)do++t;while(n=n.next)}),t}function _n(t){var n=[],e,i=this._root,r,o,s,a,f;for(i&&n.push(new $(i,this._x0,this._y0,this._x1,this._y1));e=n.pop();)if(!t(i=e.node,o=e.x0,s=e.y0,a=e.x1,f=e.y1)&&i.length){var u=(o+a)/2,p=(s+f)/2;(r=i[3])&&n.push(new $(r,u,p,a,f)),(r=i[2])&&n.push(new $(r,o,p,u,f)),(r=i[1])&&n.push(new $(r,u,s,a,p)),(r=i[0])&&n.push(new $(r,o,s,u,p))}return this}function yn(t){var n=[],e=[],i;for(this._root&&n.push(new $(this._root,this._x0,this._y0,this._x1,this._y1));i=n.pop();){var r=i.node;if(r.length){var o,s=i.x0,a=i.y0,f=i.x1,u=i.y1,p=(s+f)/2,l=(a+u)/2;(o=r[0])&&n.push(new $(o,s,a,p,l)),(o=r[1])&&n.push(new $(o,p,a,f,l)),(o=r[2])&&n.push(new $(o,s,l,p,u)),(o=r[3])&&n.push(new $(o,p,l,f,u))}e.push(i)}for(;i=e.pop();)t(i.node,i.x0,i.y0,i.x1,i.y1);return this}function gn(t){return t[0]}function dn(t){return arguments.length?(this._x=t,this):this._x}function xn(t){return t[1]}function vn(t){return arguments.length?(this._y=t,this):this._y}function wt(t,n,e){var i=new rt(n??gn,e??xn,NaN,NaN,NaN,NaN);return t==null?i:i.addAll(t)}function rt(t,n,e,i,r,o){this._x=t,this._y=n,this._x0=e,this._y0=i,this._x1=r,this._y1=o,this._root=void 0}function ut(t){for(var n={data:t.data},e=n;t=t.next;)e=e.next={data:t.data};return n}var E=wt.prototype=rt.prototype;E.copy=function(){var t=new rt(this._x,this._y,this._x0,this._y0,this._x1,this._y1),n=this._root,e,i;if(!n)return t;if(!n.length)return t._root=ut(n),t;for(e=[{source:n,target:t._root=new Array(4)}];n=e.pop();)for(var r=0;r<4;++r)(i=n.source[r])&&(i.length?e.push({source:i,target:n.target[r]=new Array(4)}):n.target[r]=ut(i));return t};E.add=rn;E.addAll=on;E.cover=sn;E.data=an;E.extent=fn;E.find=un;E.remove=ln;E.removeAll=hn;E.root=cn;E.size=pn;E.visit=_n;E.visitAfter=yn;E.x=dn;E.y=vn;function wn(t){const n=+this._x.call(null,t),e=+this._y.call(null,t),i=+this._z.call(null,t);return mt(this.cover(n,e,i),n,e,i,t)}function mt(t,n,e,i,r){if(isNaN(n)||isNaN(e)||isNaN(i))return t;var o,s=t._root,a={data:r},f=t._x0,u=t._y0,p=t._z0,l=t._x1,y=t._y1,c=t._z1,_,x,g,h,m,v,w,d,N,M,A;if(!s)return t._root=a,t;for(;s.length;)if((w=n>=(_=(f+l)/2))?f=_:l=_,(d=e>=(x=(u+y)/2))?u=x:y=x,(N=i>=(g=(p+c)/2))?p=g:c=g,o=s,!(s=s[M=N<<2|d<<1|w]))return o[M]=a,t;if(h=+t._x.call(null,s.data),m=+t._y.call(null,s.data),v=+t._z.call(null,s.data),n===h&&e===m&&i===v)return a.next=s,o?o[M]=a:t._root=a,t;do o=o?o[M]=new Array(8):t._root=new Array(8),(w=n>=(_=(f+l)/2))?f=_:l=_,(d=e>=(x=(u+y)/2))?u=x:y=x,(N=i>=(g=(p+c)/2))?p=g:c=g;while((M=N<<2|d<<1|w)===(A=(v>=g)<<2|(m>=x)<<1|h>=_));return o[A]=s,o[M]=a,t}function mn(t){Array.isArray(t)||(t=Array.from(t));const n=t.length,e=new Float64Array(n),i=new Float64Array(n),r=new Float64Array(n);let o=1/0,s=1/0,a=1/0,f=-1/0,u=-1/0,p=-1/0;for(let l=0,y,c,_,x;l<n;++l)isNaN(c=+this._x.call(null,y=t[l]))||isNaN(_=+this._y.call(null,y))||isNaN(x=+this._z.call(null,y))||(e[l]=c,i[l]=_,r[l]=x,c<o&&(o=c),c>f&&(f=c),_<s&&(s=_),_>u&&(u=_),x<a&&(a=x),x>p&&(p=x));if(o>f||s>u||a>p)return this;this.cover(o,s,a).cover(f,u,p);for(let l=0;l<n;++l)mt(this,e[l],i[l],r[l],t[l]);return this}function Nn(t,n,e){if(isNaN(t=+t)||isNaN(n=+n)||isNaN(e=+e))return this;var i=this._x0,r=this._y0,o=this._z0,s=this._x1,a=this._y1,f=this._z1;if(isNaN(i))s=(i=Math.floor(t))+1,a=(r=Math.floor(n))+1,f=(o=Math.floor(e))+1;else{for(var u=s-i||1,p=this._root,l,y;i>t||t>=s||r>n||n>=a||o>e||e>=f;)switch(y=(e<o)<<2|(n<r)<<1|t<i,l=new Array(8),l[y]=p,p=l,u*=2,y){case 0:s=i+u,a=r+u,f=o+u;break;case 1:i=s-u,a=r+u,f=o+u;break;case 2:s=i+u,r=a-u,f=o+u;break;case 3:i=s-u,r=a-u,f=o+u;break;case 4:s=i+u,a=r+u,o=f-u;break;case 5:i=s-u,a=r+u,o=f-u;break;case 6:s=i+u,r=a-u,o=f-u;break;case 7:i=s-u,r=a-u,o=f-u;break}this._root&&this._root.length&&(this._root=p)}return this._x0=i,this._y0=r,this._z0=o,this._x1=s,this._y1=a,this._z1=f,this}function Mn(){var t=[];return this.visit(function(n){if(!n.length)do t.push(n.data);while(n=n.next)}),t}function An(t){return arguments.length?this.cover(+t[0][0],+t[0][1],+t[0][2]).cover(+t[1][0],+t[1][1],+t[1][2]):isNaN(this._x0)?void 0:[[this._x0,this._y0,this._z0],[this._x1,this._y1,this._z1]]}function b(t,n,e,i,r,o,s){this.node=t,this.x0=n,this.y0=e,this.z0=i,this.x1=r,this.y1=o,this.z1=s}function bn(t,n,e,i){var r,o=this._x0,s=this._y0,a=this._z0,f,u,p,l,y,c,_=this._x1,x=this._y1,g=this._z1,h=[],m=this._root,v,w;for(m&&h.push(new b(m,o,s,a,_,x,g)),i==null?i=1/0:(o=t-i,s=n-i,a=e-i,_=t+i,x=n+i,g=e+i,i*=i);v=h.pop();)if(!(!(m=v.node)||(f=v.x0)>_||(u=v.y0)>x||(p=v.z0)>g||(l=v.x1)<o||(y=v.y1)<s||(c=v.z1)<a))if(m.length){var d=(f+l)/2,N=(u+y)/2,M=(p+c)/2;h.push(new b(m[7],d,N,M,l,y,c),new b(m[6],f,N,M,d,y,c),new b(m[5],d,u,M,l,N,c),new b(m[4],f,u,M,d,N,c),new b(m[3],d,N,p,l,y,M),new b(m[2],f,N,p,d,y,M),new b(m[1],d,u,p,l,N,M),new b(m[0],f,u,p,d,N,M)),(w=(e>=M)<<2|(n>=N)<<1|t>=d)&&(v=h[h.length-1],h[h.length-1]=h[h.length-1-w],h[h.length-1-w]=v)}else{var A=t-+this._x.call(null,m.data),T=n-+this._y.call(null,m.data),O=e-+this._z.call(null,m.data),S=A*A+T*T+O*O;if(S<i){var z=Math.sqrt(i=S);o=t-z,s=n-z,a=e-z,_=t+z,x=n+z,g=e+z,r=m.data}}return r}const zn=(t,n,e,i,r,o)=>Math.sqrt((t-i)**2+(n-r)**2+(e-o)**2);function In(t,n,e,i){const r=[],o=t-i,s=n-i,a=e-i,f=t+i,u=n+i,p=e+i;return this.visit((l,y,c,_,x,g,h)=>{if(!l.length)do{const m=l.data;zn(t,n,e,this._x(m),this._y(m),this._z(m))<=i&&r.push(m)}while(l=l.next);return y>f||c>u||_>p||x<o||g<s||h<a}),r}function kn(t){if(isNaN(y=+this._x.call(null,t))||isNaN(c=+this._y.call(null,t))||isNaN(_=+this._z.call(null,t)))return this;var n,e=this._root,i,r,o,s=this._x0,a=this._y0,f=this._z0,u=this._x1,p=this._y1,l=this._z1,y,c,_,x,g,h,m,v,w,d,N;if(!e)return this;if(e.length)for(;;){if((m=y>=(x=(s+u)/2))?s=x:u=x,(v=c>=(g=(a+p)/2))?a=g:p=g,(w=_>=(h=(f+l)/2))?f=h:l=h,n=e,!(e=e[d=w<<2|v<<1|m]))return this;if(!e.length)break;(n[d+1&7]||n[d+2&7]||n[d+3&7]||n[d+4&7]||n[d+5&7]||n[d+6&7]||n[d+7&7])&&(i=n,N=d)}for(;e.data!==t;)if(r=e,!(e=e.next))return this;return(o=e.next)&&delete e.next,r?(o?r.next=o:delete r.next,this):n?(o?n[d]=o:delete n[d],(e=n[0]||n[1]||n[2]||n[3]||n[4]||n[5]||n[6]||n[7])&&e===(n[7]||n[6]||n[5]||n[4]||n[3]||n[2]||n[1]||n[0])&&!e.length&&(i?i[N]=e:this._root=e),this):(this._root=o,this)}function $n(t){for(var n=0,e=t.length;n<e;++n)this.remove(t[n]);return this}function En(){return this._root}function Sn(){var t=0;return this.visit(function(n){if(!n.length)do++t;while(n=n.next)}),t}function qn(t){var n=[],e,i=this._root,r,o,s,a,f,u,p;for(i&&n.push(new b(i,this._x0,this._y0,this._z0,this._x1,this._y1,this._z1));e=n.pop();)if(!t(i=e.node,o=e.x0,s=e.y0,a=e.z0,f=e.x1,u=e.y1,p=e.z1)&&i.length){var l=(o+f)/2,y=(s+u)/2,c=(a+p)/2;(r=i[7])&&n.push(new b(r,l,y,c,f,u,p)),(r=i[6])&&n.push(new b(r,o,y,c,l,u,p)),(r=i[5])&&n.push(new b(r,l,s,c,f,y,p)),(r=i[4])&&n.push(new b(r,o,s,c,l,y,p)),(r=i[3])&&n.push(new b(r,l,y,a,f,u,c)),(r=i[2])&&n.push(new b(r,o,y,a,l,u,c)),(r=i[1])&&n.push(new b(r,l,s,a,f,y,c)),(r=i[0])&&n.push(new b(r,o,s,a,l,y,c))}return this}function Tn(t){var n=[],e=[],i;for(this._root&&n.push(new b(this._root,this._x0,this._y0,this._z0,this._x1,this._y1,this._z1));i=n.pop();){var r=i.node;if(r.length){var o,s=i.x0,a=i.y0,f=i.z0,u=i.x1,p=i.y1,l=i.z1,y=(s+u)/2,c=(a+p)/2,_=(f+l)/2;(o=r[0])&&n.push(new b(o,s,a,f,y,c,_)),(o=r[1])&&n.push(new b(o,y,a,f,u,c,_)),(o=r[2])&&n.push(new b(o,s,c,f,y,p,_)),(o=r[3])&&n.push(new b(o,y,c,f,u,p,_)),(o=r[4])&&n.push(new b(o,s,a,_,y,c,l)),(o=r[5])&&n.push(new b(o,y,a,_,u,c,l)),(o=r[6])&&n.push(new b(o,s,c,_,y,p,l)),(o=r[7])&&n.push(new b(o,y,c,_,u,p,l))}e.push(i)}for(;i=e.pop();)t(i.node,i.x0,i.y0,i.z0,i.x1,i.y1,i.z1);return this}function On(t){return t[0]}function Pn(t){return arguments.length?(this._x=t,this):this._x}function Dn(t){return t[1]}function Fn(t){return arguments.length?(this._y=t,this):this._y}function Ln(t){return t[2]}function jn(t){return arguments.length?(this._z=t,this):this._z}function Nt(t,n,e,i){var r=new ot(n??On,e??Dn,i??Ln,NaN,NaN,NaN,NaN,NaN,NaN);return t==null?r:r.addAll(t)}function ot(t,n,e,i,r,o,s,a,f){this._x=t,this._y=n,this._z=e,this._x0=i,this._y0=r,this._z0=o,this._x1=s,this._y1=a,this._z1=f,this._root=void 0}function lt(t){for(var n={data:t.data},e=n;t=t.next;)e=e.next={data:t.data};return n}var k=Nt.prototype=ot.prototype;k.copy=function(){var t=new ot(this._x,this._y,this._z,this._x0,this._y0,this._z0,this._x1,this._y1,this._z1),n=this._root,e,i;if(!n)return t;if(!n.length)return t._root=lt(n),t;for(e=[{source:n,target:t._root=new Array(8)}];n=e.pop();)for(var r=0;r<8;++r)(i=n.source[r])&&(i.length?e.push({source:i,target:n.target[r]=new Array(8)}):n.target[r]=lt(i));return t};k.add=wn;k.addAll=mn;k.cover=Nn;k.data=Mn;k.extent=An;k.find=bn;k.findAllWithinRadius=In;k.remove=kn;k.removeAll=$n;k.root=En;k.size=Sn;k.visit=qn;k.visitAfter=Tn;k.x=Pn;k.y=Fn;k.z=jn;function Y(t){return function(){return t}}function P(t){return(t()-.5)*1e-6}function Rn(t){return t.index}function ht(t,n){var e=t.get(n);if(!e)throw new Error("node not found: "+n);return e}function Bn(t){var n=Rn,e=y,i,r=Y(30),o,s,a,f,u,p,l=1;t==null&&(t=[]);function y(h){return 1/Math.min(f[h.source.index],f[h.target.index])}function c(h){for(var m=0,v=t.length;m<l;++m)for(var w=0,d,N,M,A=0,T=0,O=0,S,z;w<v;++w)d=t[w],N=d.source,M=d.target,A=M.x+M.vx-N.x-N.vx||P(p),a>1&&(T=M.y+M.vy-N.y-N.vy||P(p)),a>2&&(O=M.z+M.vz-N.z-N.vz||P(p)),S=Math.sqrt(A*A+T*T+O*O),S=(S-o[w])/S*h*i[w],A*=S,T*=S,O*=S,M.vx-=A*(z=u[w]),a>1&&(M.vy-=T*z),a>2&&(M.vz-=O*z),N.vx+=A*(z=1-z),a>1&&(N.vy+=T*z),a>2&&(N.vz+=O*z)}function _(){if(s){var h,m=s.length,v=t.length,w=new Map(s.map((N,M)=>[n(N,M,s),N])),d;for(h=0,f=new Array(m);h<v;++h)d=t[h],d.index=h,typeof d.source!="object"&&(d.source=ht(w,d.source)),typeof d.target!="object"&&(d.target=ht(w,d.target)),f[d.source.index]=(f[d.source.index]||0)+1,f[d.target.index]=(f[d.target.index]||0)+1;for(h=0,u=new Array(v);h<v;++h)d=t[h],u[h]=f[d.source.index]/(f[d.source.index]+f[d.target.index]);i=new Array(v),x(),o=new Array(v),g()}}function x(){if(s)for(var h=0,m=t.length;h<m;++h)i[h]=+e(t[h],h,t)}function g(){if(s)for(var h=0,m=t.length;h<m;++h)o[h]=+r(t[h],h,t)}return c.initialize=function(h,...m){s=h,p=m.find(v=>typeof v=="function")||Math.random,a=m.find(v=>[1,2,3].includes(v))||2,_()},c.links=function(h){return arguments.length?(t=h,_(),c):t},c.id=function(h){return arguments.length?(n=h,c):n},c.iterations=function(h){return arguments.length?(l=+h,c):l},c.strength=function(h){return arguments.length?(e=typeof h=="function"?h:Y(+h),x(),c):e},c.distance=function(h){return arguments.length?(r=typeof h=="function"?h:Y(+h),g(),c):r},c}var Kn={value:()=>{}};function Mt(){for(var t=0,n=arguments.length,e={},i;t<n;++t){if(!(i=arguments[t]+"")||i in e||/[\s.]/.test(i))throw new Error("illegal type: "+i);e[i]=[]}return new G(e)}function G(t){this._=t}function Cn(t,n){return t.trim().split(/^|\s+/).map(function(e){var i="",r=e.indexOf(".");if(r>=0&&(i=e.slice(r+1),e=e.slice(0,r)),e&&!n.hasOwnProperty(e))throw new Error("unknown type: "+e);return{type:e,name:i}})}G.prototype=Mt.prototype={constructor:G,on:function(t,n){var e=this._,i=Cn(t+"",e),r,o=-1,s=i.length;if(arguments.length<2){for(;++o<s;)if((r=(t=i[o]).type)&&(r=Yn(e[r],t.name)))return r;return}if(n!=null&&typeof n!="function")throw new Error("invalid callback: "+n);for(;++o<s;)if(r=(t=i[o]).type)e[r]=ct(e[r],t.name,n);else if(n==null)for(r in e)e[r]=ct(e[r],t.name,null);return this},copy:function(){var t={},n=this._;for(var e in n)t[e]=n[e].slice();return new G(t)},call:function(t,n){if((r=arguments.length-2)>0)for(var e=new Array(r),i=0,r,o;i<r;++i)e[i]=arguments[i+2];if(!this._.hasOwnProperty(t))throw new Error("unknown type: "+t);for(o=this._[t],i=0,r=o.length;i<r;++i)o[i].value.apply(n,e)},apply:function(t,n,e){if(!this._.hasOwnProperty(t))throw new Error("unknown type: "+t);for(var i=this._[t],r=0,o=i.length;r<o;++r)i[r].value.apply(n,e)}};function Yn(t,n){for(var e=0,i=t.length,r;e<i;++e)if((r=t[e]).name===n)return r.value}function ct(t,n,e){for(var i=0,r=t.length;i<r;++i)if(t[i].name===n){t[i]=Kn,t=t.slice(0,i).concat(t.slice(i+1));break}return e!=null&&t.push({name:n,value:e}),t}var j=0,K=0,B=0,At=1e3,X,C,V=0,F=0,J=0,H=typeof performance=="object"&&performance.now?performance:Date,bt=typeof window=="object"&&window.requestAnimationFrame?window.requestAnimationFrame.bind(window):function(t){setTimeout(t,17)};function zt(){return F||(bt(Hn),F=H.now()+J)}function Hn(){F=0}function nt(){this._call=this._time=this._next=null}nt.prototype=It.prototype={constructor:nt,restart:function(t,n,e){if(typeof t!="function")throw new TypeError("callback is not a function");e=(e==null?zt():+e)+(n==null?0:+n),!this._next&&C!==this&&(C?C._next=this:X=this,C=this),this._call=t,this._time=e,et()},stop:function(){this._call&&(this._call=null,this._time=1/0,et())}};function It(t,n,e){var i=new nt;return i.restart(t,n,e),i}function Un(){zt(),++j;for(var t=X,n;t;)(n=F-t._time)>=0&&t._call.call(void 0,n),t=t._next;--j}function pt(){F=(V=H.now())+J,j=K=0;try{Un()}finally{j=0,Xn(),F=0}}function Gn(){var t=H.now(),n=t-V;n>At&&(J-=n,V=t)}function Xn(){for(var t,n=X,e,i=1/0;n;)n._call?(i>n._time&&(i=n._time),t=n,n=n._next):(e=n._next,n._next=null,n=t?t._next=e:X=e);C=t,et(i)}function et(t){if(!j){K&&(K=clearTimeout(K));var n=t-F;n>24?(t<1/0&&(K=setTimeout(pt,t-H.now()-J)),B&&(B=clearInterval(B))):(B||(V=H.now(),B=setInterval(Gn,At)),j=1,bt(pt))}}const Vn=1664525,Jn=1013904223,_t=4294967296;function Qn(){let t=1;return()=>(t=(Vn*t+Jn)%_t)/_t}var yt=3;function Z(t){return t.x}function gt(t){return t.y}function Wn(t){return t.z}var Zn=10,te=Math.PI*(3-Math.sqrt(5)),ne=Math.PI*20/(9+Math.sqrt(221));function ee(t,n){n=n||2;var e=Math.min(yt,Math.max(1,Math.round(n))),i,r=1,o=.001,s=1-Math.pow(o,1/300),a=0,f=.6,u=new Map,p=It(c),l=Mt("tick","end"),y=Qn();t==null&&(t=[]);function c(){_(),l.call("tick",i),r<o&&(p.stop(),l.call("end",i))}function _(h){var m,v=t.length,w;h===void 0&&(h=1);for(var d=0;d<h;++d)for(r+=(a-r)*s,u.forEach(function(N){N(r)}),m=0;m<v;++m)w=t[m],w.fx==null?w.x+=w.vx*=f:(w.x=w.fx,w.vx=0),e>1&&(w.fy==null?w.y+=w.vy*=f:(w.y=w.fy,w.vy=0)),e>2&&(w.fz==null?w.z+=w.vz*=f:(w.z=w.fz,w.vz=0));return i}function x(){for(var h=0,m=t.length,v;h<m;++h){if(v=t[h],v.index=h,v.fx!=null&&(v.x=v.fx),v.fy!=null&&(v.y=v.fy),v.fz!=null&&(v.z=v.fz),isNaN(v.x)||e>1&&isNaN(v.y)||e>2&&isNaN(v.z)){var w=Zn*(e>2?Math.cbrt(.5+h):e>1?Math.sqrt(.5+h):h),d=h*te,N=h*ne;e===1?v.x=w:e===2?(v.x=w*Math.cos(d),v.y=w*Math.sin(d)):(v.x=w*Math.sin(d)*Math.cos(N),v.y=w*Math.cos(d),v.z=w*Math.sin(d)*Math.sin(N))}(isNaN(v.vx)||e>1&&isNaN(v.vy)||e>2&&isNaN(v.vz))&&(v.vx=0,e>1&&(v.vy=0),e>2&&(v.vz=0))}}function g(h){return h.initialize&&h.initialize(t,y,e),h}return x(),i={tick:_,restart:function(){return p.restart(c),i},stop:function(){return p.stop(),i},numDimensions:function(h){return arguments.length?(e=Math.min(yt,Math.max(1,Math.round(h))),u.forEach(g),i):e},nodes:function(h){return arguments.length?(t=h,x(),u.forEach(g),i):t},alpha:function(h){return arguments.length?(r=+h,i):r},alphaMin:function(h){return arguments.length?(o=+h,i):o},alphaDecay:function(h){return arguments.length?(s=+h,i):+s},alphaTarget:function(h){return arguments.length?(a=+h,i):a},velocityDecay:function(h){return arguments.length?(f=1-h,i):1-f},randomSource:function(h){return arguments.length?(y=h,u.forEach(g),i):y},force:function(h,m){return arguments.length>1?(m==null?u.delete(h):u.set(h,g(m)),i):u.get(h)},find:function(){var h=Array.prototype.slice.call(arguments),m=h.shift()||0,v=(e>1?h.shift():null)||0,w=(e>2?h.shift():null)||0,d=h.shift()||1/0,N=0,M=t.length,A,T,O,S,z,st;for(d*=d,N=0;N<M;++N)z=t[N],A=m-z.x,T=v-(z.y||0),O=w-(z.z||0),S=A*A+T*T+O*O,S<d&&(st=z,d=S);return st},on:function(h,m){return arguments.length>1?(l.on(h,m),i):l.on(h)}}}function ie(){var t,n,e,i,r,o=Y(-30),s,a=1,f=1/0,u=.81;function p(_){var x,g=t.length,h=(n===1?xt(t,Z):n===2?wt(t,Z,gt):n===3?Nt(t,Z,gt,Wn):null).visitAfter(y);for(r=_,x=0;x<g;++x)e=t[x],h.visit(c)}function l(){if(t){var _,x=t.length,g;for(s=new Array(x),_=0;_<x;++_)g=t[_],s[g.index]=+o(g,_,t)}}function y(_){var x=0,g,h,m=0,v,w,d,N,M=_.length;if(M){for(v=w=d=N=0;N<M;++N)(g=_[N])&&(h=Math.abs(g.value))&&(x+=g.value,m+=h,v+=h*(g.x||0),w+=h*(g.y||0),d+=h*(g.z||0));x*=Math.sqrt(4/M),_.x=v/m,n>1&&(_.y=w/m),n>2&&(_.z=d/m)}else{g=_,g.x=g.data.x,n>1&&(g.y=g.data.y),n>2&&(g.z=g.data.z);do x+=s[g.data.index];while(g=g.next)}_.value=x}function c(_,x,g,h,m){if(!_.value)return!0;var v=[g,h,m][n-1],w=_.x-e.x,d=n>1?_.y-e.y:0,N=n>2?_.z-e.z:0,M=v-x,A=w*w+d*d+N*N;if(M*M/u<A)return A<f&&(w===0&&(w=P(i),A+=w*w),n>1&&d===0&&(d=P(i),A+=d*d),n>2&&N===0&&(N=P(i),A+=N*N),A<a&&(A=Math.sqrt(a*A)),e.vx+=w*_.value*r/A,n>1&&(e.vy+=d*_.value*r/A),n>2&&(e.vz+=N*_.value*r/A)),!0;if(_.length||A>=f)return;(_.data!==e||_.next)&&(w===0&&(w=P(i),A+=w*w),n>1&&d===0&&(d=P(i),A+=d*d),n>2&&N===0&&(N=P(i),A+=N*N),A<a&&(A=Math.sqrt(a*A)));do _.data!==e&&(M=s[_.data.index]*r/A,e.vx+=w*M,n>1&&(e.vy+=d*M),n>2&&(e.vz+=N*M));while(_=_.next)}return p.initialize=function(_,...x){t=_,i=x.find(g=>typeof g=="function")||Math.random,n=x.find(g=>[1,2,3].includes(g))||2,l()},p.strength=function(_){return arguments.length?(o=typeof _=="function"?_:Y(+_),l(),p):o},p.distanceMin=function(_){return arguments.length?(a=_*_,p):Math.sqrt(a)},p.distanceMax=function(_){return arguments.length?(f=_*_,p):Math.sqrt(f)},p.theta=function(_){return arguments.length?(u=_*_,p):Math.sqrt(u)},p}function kt(t){let n=2166136261;for(let e=0;e<t.length;e++)n^=t.charCodeAt(e),n=Math.imul(n,16777619);return n>>>0}function $t(t){let n=t>>>0;return function(){n|=0,n=n+1831565813|0;let e=Math.imul(n^n>>>15,1|n);return e=e+Math.imul(e^e>>>7,61|e)^e,((e^e>>>14)>>>0)/4294967296}}function re(t,n=42){const e=$t(kt(t)),i=e(),r=e(),o=2*Math.PI*i,s=Math.acos(2*r-1),a=n*Math.cbrt(e()),f=a*Math.sin(s)*Math.cos(o),u=a*Math.sin(s)*Math.sin(o),p=a*Math.cos(s);return[f,u,p]}function Et(t){let n=2166136261;for(const e of t){for(let i=0;i<e.length;i++)n^=e.charCodeAt(i),n=Math.imul(n,16777619);n^=10,n=Math.imul(n,16777619)}return(n>>>0).toString(16)}const oe=1592594996,se=1;function ae(t){const n=[...t].sort();return Et([`v${se}`,`n${n.length}`,...n])}function fe(t){return t<=2e3?200:t<=5e3?150:t<=1e4?100:70}function ue(t,n){const e=Bt(t),i=e.map(l=>l.key),r=new Map;if(i.forEach((l,y)=>r.set(l,y)),n&&n.length===i.length*3)return{keys:i,positions:n.slice(),indexByKey:r};const o=e.map(l=>{const[y,c,_]=re(l.key);return{key:l.key,x:y,y:c,z:_}}),s=e.filter(l=>l.parent!==null).map(l=>({source:l.parent,target:l.key})),a=$t(kt("randomSource")^oe),f=ee(o,3).force("charge",ie().strength(-7)).force("link",Bn(s).id(l=>l.key).distance(5).strength(.85)).force("center",Kt(0,0,0)).stop(),u=f;typeof u.randomSource=="function"&&u.randomSource(a),f.tick(fe(o.length));const p=new Float32Array(o.length*3);for(let l=0;l<o.length;l++){const y=o[l];p[l*3]=y.x??0,p[l*3+1]=y.y??0,p[l*3+2]=y.z??0}return{keys:i,positions:p,indexByKey:r}}function le(t,n){const e=I(t.props.name)??"";return{id:t.id,name:e,qualifiedName:I(t.props.qualified_name)??e,kind:t.labels[0]??"",filePath:I(t.props.file_path)??I(t.props.path)??"",startLine:tt(t.props.start_line),endLine:tt(t.props.end_line),language:I(t.props.language)??"",role:I(t.props.role)??"",semanticSummary:I(t.props.semantic_summary),summaryOfHash:I(t.props.summary_of_hash),contentHash:I(t.props.content_hash),degree:n}}function he(t,n){const e=Rt(t),i=ue(e,n?.cachedPositions),r=[],o=new Map,s=p=>o.set(p,(o.get(p)??0)+1);for(const p of t.edges){if(!Dt.has(p.type))continue;const l=p.from.split(":"),y=p.to.split(":"),c=l[0]==="rs1"&&y[0]==="rs1"&&l[1]!==y[1];r.push({from:p.from,to:p.to,type:p.type,resolution:Ft(p.props),confidence:tt(p.props.confidence,1),crossRepo:c}),s(p.from),s(p.to)}const a=new Map;for(const p of t.nodes)a.set(p.id,le(p,o.get(p.id)??0));const f=[];for(const p of t.nodes)f.push(p.id,I(p.props.content_hash)??"");const u=Et(f);return{tree:e,layout:i,drawEdges:r,records:a,degree:o,fingerprint:u}}const ce="reposkein-layout-cache",R="positions",pe=1;function _e(){try{if(typeof indexedDB<"u")return indexedDB}catch{}return null}function St(){const t=_e();return t?new Promise(n=>{let e;try{e=t.open(ce,pe)}catch{n(null);return}e.onupgradeneeded=()=>{const i=e.result;i.objectStoreNames.contains(R)||i.createObjectStore(R)},e.onsuccess=()=>n(e.result),e.onerror=()=>n(null),e.onblocked=()=>n(null)}):Promise.resolve(null)}async function ye(t){const n=await St();return n?new Promise(e=>{let i=!1;const r=o=>{i||(i=!0,n.close(),e(o))};try{const o=n.transaction(R,"readonly"),s=o.objectStore(R).get(t);s.onsuccess=()=>{const a=s.result;a&&a.byteLength>0&&a.byteLength%12===0?r(new Float32Array(a)):r(null)},s.onerror=()=>r(null),o.onerror=()=>r(null),o.onabort=()=>r(null)}catch{r(null)}}):null}async function ge(t,n){const e=await St();if(e)return new Promise(i=>{let r=!1;const o=()=>{r||(r=!0,e.close(),i())};try{const s=n.buffer.slice(n.byteOffset,n.byteOffset+n.byteLength),a=e.transaction(R,"readwrite");a.objectStore(R).put(s,t),a.oncomplete=o,a.onerror=o,a.onabort=o}catch{o()}})}async function de(){const t=await fetch("/api/graph");if(!t.ok)throw new Error(`GET /api/graph -> ${t.status}`);return await t.json()}async function U(t){const n=await fetch(t);if(!n.ok)throw new Error(`GET ${t} -> ${n.status}`);return await n.text()}async function xe(){const t=u=>self.postMessage(u);t({type:"progress",phase:"fetching manifest"});const n=await de();t({type:"progress",phase:"fetching graph"});const[e,i]=await Promise.all([U(n.root.nodesUrl),U(n.root.edgesUrl)]);t({type:"progress",phase:"parsing"});const r=at(e,i);if(n.federated&&n.federated.length>0){t({type:"progress",phase:"fetching federated repos"});for(const u of n.federated){const[p,l]=await Promise.all([U(u.nodesUrl),U(u.edgesUrl)]),y=at(p,l);r.nodes.push(...y.nodes),r.edges.push(...y.edges)}}const o=ae(r.nodes.map(u=>u.id)),s=await ye(o);t({type:"progress",phase:s?"restoring layout":"charting the sky"});const a=he(r,{cachedPositions:s??void 0});s||ge(o,a.layout.positions.slice());const f={type:"result",repoId:a.tree.repoId,rootKey:a.tree.rootKey,clusters:[...a.tree.byKey.values()],keys:a.layout.keys,positions:a.layout.positions,drawEdges:a.drawEdges,records:[...a.records.entries()],fingerprint:a.fingerprint,counts:{nodes:r.nodes.length,edges:r.edges.length},repoRoot:n.root.repoRoot??null};self.postMessage(f,[f.positions.buffer])}self.onmessage=t=>{t.data?.cmd==="load"&&xe().catch(n=>{const e={type:"error",message:n instanceof Error?n.message:String(n)};self.postMessage(e)})};
3
+ `)){if(e.trim()==="")continue;const i=Tt(e);i&&n.push(i)}return n}function at(t,n){return{nodes:Ot(t),edges:Pt(n)}}const Dt=new Set(["CALLS","IMPORTS","INSTANTIATES","IMPLEMENTS","INHERITS"]);function Ft(t){const n=t.resolution;if(n==="exact"||n==="name_match"||n==="ambiguous")return n;const e=typeof t.confidence=="number"?t.confidence:1;return e>=.95?"exact":e>=.5?"name_match":"ambiguous"}function I(t){return typeof t=="string"?t:null}function tt(t,n=0){return typeof t=="number"?t:n}const Lt=new Set(["Function","Class","Interface","Enum","Variable"]);function L(t){return t.labels[0]??""}function Q(t){const n=t.lastIndexOf("/");if(n<0)return".";const e=t.slice(0,n);return e===""?".":e}function W(t){if(t==="."||t==="")return".";const n=t.lastIndexOf("/");return n<0?t:t.slice(n+1)}function jt(t){for(const n of t.nodes)if(L(n)==="Repository"){const e=I(n.props.name);if(e)return e}for(const n of t.nodes){const e=n.id.split(":");if(e.length>=2&&e[0]==="rs1"&&e[1])return e[1]}return"repo"}function Rt(t){const n=jt(t),e=`galaxy:${n}`,i=new Map,r=c=>{const _=i.get(c.key);return _||(i.set(c.key,c),c)};r({key:e,kind:"galaxy",name:n,parent:null,children:[],nodeId:null});const o=c=>`dir:${n}:${c}`,s=c=>`file:${n}:${c}`,a=c=>{const _=o(c),x=i.get(_);if(x)return x;const g=c===".",h=g?null:Q(c),m=g?e:a(h).key;return r({key:_,kind:"dir",name:g?n:W(c),parent:m,children:[],nodeId:null})};for(const c of t.nodes){if(L(c)!=="Directory")continue;const _=I(c.props.path)??".",x=a(_);x.nodeId=c.id}const f=new Map;for(const c of t.nodes){if(L(c)!=="File")continue;const _=I(c.props.path)??I(c.props.file_path);if(_===null)continue;const x=a(Q(_)),g=s(_);r({key:g,kind:"file",name:W(_),parent:x.key,children:[],nodeId:c.id}),f.set(_,g)}const u=new Map;for(const c of t.nodes)Lt.has(L(c))&&u.set(c.id,c);const p=new Map;for(const c of t.nodes)if(L(c)==="File"){const _=I(c.props.path)??I(c.props.file_path);_!==null&&p.set(c.id,s(_))}const l=new Set,y=(c,_)=>{l.has(c.id)||(l.add(c.id),r({key:c.id,kind:"symbol",name:I(c.props.name)??I(c.props.qualified_name)??c.id,parent:_,children:[],nodeId:c.id,symbolKind:L(c)}))};for(const c of t.edges){if(c.type!=="DEFINES")continue;const _=u.get(c.to);if(!_)continue;const x=p.get(c.from);x&&i.has(x)&&y(_,x)}for(const c of u.values()){if(l.has(c.id))continue;const _=I(c.props.file_path);if(_===null)continue;let x=f.get(_);if(!x){const g=a(Q(_));x=s(_),r({key:x,kind:"file",name:W(_),parent:g.key,children:[],nodeId:null}),f.set(_,x)}y(c,x)}for(const c of i.values())if(c.parent){const _=i.get(c.parent);_&&_.children.push(c.key)}for(const c of i.values())c.children.sort();return{rootKey:e,byKey:i,repoId:n}}function Bt(t){const n=[],e=i=>{const r=t.byKey.get(i);if(r){n.push(r);for(const o of r.children)e(o)}};return e(t.rootKey),n}function Kt(t,n,e){var i,r=1;t==null&&(t=0),n==null&&(n=0),e==null&&(e=0);function o(){var s,a=i.length,f,u=0,p=0,l=0;for(s=0;s<a;++s)f=i[s],u+=f.x||0,p+=f.y||0,l+=f.z||0;for(u=(u/a-t)*r,p=(p/a-n)*r,l=(l/a-e)*r,s=0;s<a;++s)f=i[s],u&&(f.x-=u),p&&(f.y-=p),l&&(f.z-=l)}return o.initialize=function(s){i=s},o.x=function(s){return arguments.length?(t=+s,o):t},o.y=function(s){return arguments.length?(n=+s,o):n},o.z=function(s){return arguments.length?(e=+s,o):e},o.strength=function(s){return arguments.length?(r=+s,o):r},o}function Ct(t){const n=+this._x.call(null,t);return dt(this.cover(n),n,t)}function dt(t,n,e){if(isNaN(n))return t;var i,r=t._root,o={data:e},s=t._x0,a=t._x1,f,u,p,l,y;if(!r)return t._root=o,t;for(;r.length;)if((p=n>=(f=(s+a)/2))?s=f:a=f,i=r,!(r=r[l=+p]))return i[l]=o,t;if(u=+t._x.call(null,r.data),n===u)return o.next=r,i?i[l]=o:t._root=o,t;do i=i?i[l]=new Array(2):t._root=new Array(2),(p=n>=(f=(s+a)/2))?s=f:a=f;while((l=+p)==(y=+(u>=f)));return i[y]=r,i[l]=o,t}function Yt(t){Array.isArray(t)||(t=Array.from(t));const n=t.length,e=new Float64Array(n);let i=1/0,r=-1/0;for(let o=0,s;o<n;++o)isNaN(s=+this._x.call(null,t[o]))||(e[o]=s,s<i&&(i=s),s>r&&(r=s));if(i>r)return this;this.cover(i).cover(r);for(let o=0;o<n;++o)dt(this,e[o],t[o]);return this}function Ht(t){if(isNaN(t=+t))return this;var n=this._x0,e=this._x1;if(isNaN(n))e=(n=Math.floor(t))+1;else{for(var i=e-n||1,r=this._root,o,s;n>t||t>=e;)switch(s=+(t<n),o=new Array(2),o[s]=r,r=o,i*=2,s){case 0:e=n+i;break;case 1:n=e-i;break}this._root&&this._root.length&&(this._root=r)}return this._x0=n,this._x1=e,this}function Ut(){var t=[];return this.visit(function(n){if(!n.length)do t.push(n.data);while(n=n.next)}),t}function Gt(t){return arguments.length?this.cover(+t[0][0]).cover(+t[1][0]):isNaN(this._x0)?void 0:[[this._x0],[this._x1]]}function D(t,n,e){this.node=t,this.x0=n,this.x1=e}function Xt(t,n){var e,i=this._x0,r,o,s=this._x1,a=[],f=this._root,u,p;for(f&&a.push(new D(f,i,s)),n==null?n=1/0:(i=t-n,s=t+n);u=a.pop();)if(!(!(f=u.node)||(r=u.x0)>s||(o=u.x1)<i))if(f.length){var l=(r+o)/2;a.push(new D(f[1],l,o),new D(f[0],r,l)),(p=+(t>=l))&&(u=a[a.length-1],a[a.length-1]=a[a.length-1-p],a[a.length-1-p]=u)}else{var y=Math.abs(t-+this._x.call(null,f.data));y<n&&(n=y,i=t-y,s=t+y,e=f.data)}return e}function Vt(t){if(isNaN(f=+this._x.call(null,t)))return this;var n,e=this._root,i,r,o,s=this._x0,a=this._x1,f,u,p,l,y;if(!e)return this;if(e.length)for(;;){if((p=f>=(u=(s+a)/2))?s=u:a=u,n=e,!(e=e[l=+p]))return this;if(!e.length)break;n[l+1&1]&&(i=n,y=l)}for(;e.data!==t;)if(r=e,!(e=e.next))return this;return(o=e.next)&&delete e.next,r?(o?r.next=o:delete r.next,this):n?(o?n[l]=o:delete n[l],(e=n[0]||n[1])&&e===(n[1]||n[0])&&!e.length&&(i?i[y]=e:this._root=e),this):(this._root=o,this)}function Jt(t){for(var n=0,e=t.length;n<e;++n)this.remove(t[n]);return this}function Qt(){return this._root}function Wt(){var t=0;return this.visit(function(n){if(!n.length)do++t;while(n=n.next)}),t}function Zt(t){var n=[],e,i=this._root,r,o,s;for(i&&n.push(new D(i,this._x0,this._x1));e=n.pop();)if(!t(i=e.node,o=e.x0,s=e.x1)&&i.length){var a=(o+s)/2;(r=i[1])&&n.push(new D(r,a,s)),(r=i[0])&&n.push(new D(r,o,a))}return this}function tn(t){var n=[],e=[],i;for(this._root&&n.push(new D(this._root,this._x0,this._x1));i=n.pop();){var r=i.node;if(r.length){var o,s=i.x0,a=i.x1,f=(s+a)/2;(o=r[0])&&n.push(new D(o,s,f)),(o=r[1])&&n.push(new D(o,f,a))}e.push(i)}for(;i=e.pop();)t(i.node,i.x0,i.x1);return this}function nn(t){return t[0]}function en(t){return arguments.length?(this._x=t,this):this._x}function xt(t,n){var e=new it(n??nn,NaN,NaN);return t==null?e:e.addAll(t)}function it(t,n,e){this._x=t,this._x0=n,this._x1=e,this._root=void 0}function ft(t){for(var n={data:t.data},e=n;t=t.next;)e=e.next={data:t.data};return n}var q=xt.prototype=it.prototype;q.copy=function(){var t=new it(this._x,this._x0,this._x1),n=this._root,e,i;if(!n)return t;if(!n.length)return t._root=ft(n),t;for(e=[{source:n,target:t._root=new Array(2)}];n=e.pop();)for(var r=0;r<2;++r)(i=n.source[r])&&(i.length?e.push({source:i,target:n.target[r]=new Array(2)}):n.target[r]=ft(i));return t};q.add=Ct;q.addAll=Yt;q.cover=Ht;q.data=Ut;q.extent=Gt;q.find=Xt;q.remove=Vt;q.removeAll=Jt;q.root=Qt;q.size=Wt;q.visit=Zt;q.visitAfter=tn;q.x=en;function rn(t){const n=+this._x.call(null,t),e=+this._y.call(null,t);return vt(this.cover(n,e),n,e,t)}function vt(t,n,e,i){if(isNaN(n)||isNaN(e))return t;var r,o=t._root,s={data:i},a=t._x0,f=t._y0,u=t._x1,p=t._y1,l,y,c,_,x,g,h,m;if(!o)return t._root=s,t;for(;o.length;)if((x=n>=(l=(a+u)/2))?a=l:u=l,(g=e>=(y=(f+p)/2))?f=y:p=y,r=o,!(o=o[h=g<<1|x]))return r[h]=s,t;if(c=+t._x.call(null,o.data),_=+t._y.call(null,o.data),n===c&&e===_)return s.next=o,r?r[h]=s:t._root=s,t;do r=r?r[h]=new Array(4):t._root=new Array(4),(x=n>=(l=(a+u)/2))?a=l:u=l,(g=e>=(y=(f+p)/2))?f=y:p=y;while((h=g<<1|x)===(m=(_>=y)<<1|c>=l));return r[m]=o,r[h]=s,t}function on(t){var n,e,i=t.length,r,o,s=new Array(i),a=new Array(i),f=1/0,u=1/0,p=-1/0,l=-1/0;for(e=0;e<i;++e)isNaN(r=+this._x.call(null,n=t[e]))||isNaN(o=+this._y.call(null,n))||(s[e]=r,a[e]=o,r<f&&(f=r),r>p&&(p=r),o<u&&(u=o),o>l&&(l=o));if(f>p||u>l)return this;for(this.cover(f,u).cover(p,l),e=0;e<i;++e)vt(this,s[e],a[e],t[e]);return this}function sn(t,n){if(isNaN(t=+t)||isNaN(n=+n))return this;var e=this._x0,i=this._y0,r=this._x1,o=this._y1;if(isNaN(e))r=(e=Math.floor(t))+1,o=(i=Math.floor(n))+1;else{for(var s=r-e||1,a=this._root,f,u;e>t||t>=r||i>n||n>=o;)switch(u=(n<i)<<1|t<e,f=new Array(4),f[u]=a,a=f,s*=2,u){case 0:r=e+s,o=i+s;break;case 1:e=r-s,o=i+s;break;case 2:r=e+s,i=o-s;break;case 3:e=r-s,i=o-s;break}this._root&&this._root.length&&(this._root=a)}return this._x0=e,this._y0=i,this._x1=r,this._y1=o,this}function an(){var t=[];return this.visit(function(n){if(!n.length)do t.push(n.data);while(n=n.next)}),t}function fn(t){return arguments.length?this.cover(+t[0][0],+t[0][1]).cover(+t[1][0],+t[1][1]):isNaN(this._x0)?void 0:[[this._x0,this._y0],[this._x1,this._y1]]}function $(t,n,e,i,r){this.node=t,this.x0=n,this.y0=e,this.x1=i,this.y1=r}function un(t,n,e){var i,r=this._x0,o=this._y0,s,a,f,u,p=this._x1,l=this._y1,y=[],c=this._root,_,x;for(c&&y.push(new $(c,r,o,p,l)),e==null?e=1/0:(r=t-e,o=n-e,p=t+e,l=n+e,e*=e);_=y.pop();)if(!(!(c=_.node)||(s=_.x0)>p||(a=_.y0)>l||(f=_.x1)<r||(u=_.y1)<o))if(c.length){var g=(s+f)/2,h=(a+u)/2;y.push(new $(c[3],g,h,f,u),new $(c[2],s,h,g,u),new $(c[1],g,a,f,h),new $(c[0],s,a,g,h)),(x=(n>=h)<<1|t>=g)&&(_=y[y.length-1],y[y.length-1]=y[y.length-1-x],y[y.length-1-x]=_)}else{var m=t-+this._x.call(null,c.data),v=n-+this._y.call(null,c.data),w=m*m+v*v;if(w<e){var d=Math.sqrt(e=w);r=t-d,o=n-d,p=t+d,l=n+d,i=c.data}}return i}function ln(t){if(isNaN(p=+this._x.call(null,t))||isNaN(l=+this._y.call(null,t)))return this;var n,e=this._root,i,r,o,s=this._x0,a=this._y0,f=this._x1,u=this._y1,p,l,y,c,_,x,g,h;if(!e)return this;if(e.length)for(;;){if((_=p>=(y=(s+f)/2))?s=y:f=y,(x=l>=(c=(a+u)/2))?a=c:u=c,n=e,!(e=e[g=x<<1|_]))return this;if(!e.length)break;(n[g+1&3]||n[g+2&3]||n[g+3&3])&&(i=n,h=g)}for(;e.data!==t;)if(r=e,!(e=e.next))return this;return(o=e.next)&&delete e.next,r?(o?r.next=o:delete r.next,this):n?(o?n[g]=o:delete n[g],(e=n[0]||n[1]||n[2]||n[3])&&e===(n[3]||n[2]||n[1]||n[0])&&!e.length&&(i?i[h]=e:this._root=e),this):(this._root=o,this)}function hn(t){for(var n=0,e=t.length;n<e;++n)this.remove(t[n]);return this}function cn(){return this._root}function pn(){var t=0;return this.visit(function(n){if(!n.length)do++t;while(n=n.next)}),t}function _n(t){var n=[],e,i=this._root,r,o,s,a,f;for(i&&n.push(new $(i,this._x0,this._y0,this._x1,this._y1));e=n.pop();)if(!t(i=e.node,o=e.x0,s=e.y0,a=e.x1,f=e.y1)&&i.length){var u=(o+a)/2,p=(s+f)/2;(r=i[3])&&n.push(new $(r,u,p,a,f)),(r=i[2])&&n.push(new $(r,o,p,u,f)),(r=i[1])&&n.push(new $(r,u,s,a,p)),(r=i[0])&&n.push(new $(r,o,s,u,p))}return this}function yn(t){var n=[],e=[],i;for(this._root&&n.push(new $(this._root,this._x0,this._y0,this._x1,this._y1));i=n.pop();){var r=i.node;if(r.length){var o,s=i.x0,a=i.y0,f=i.x1,u=i.y1,p=(s+f)/2,l=(a+u)/2;(o=r[0])&&n.push(new $(o,s,a,p,l)),(o=r[1])&&n.push(new $(o,p,a,f,l)),(o=r[2])&&n.push(new $(o,s,l,p,u)),(o=r[3])&&n.push(new $(o,p,l,f,u))}e.push(i)}for(;i=e.pop();)t(i.node,i.x0,i.y0,i.x1,i.y1);return this}function gn(t){return t[0]}function dn(t){return arguments.length?(this._x=t,this):this._x}function xn(t){return t[1]}function vn(t){return arguments.length?(this._y=t,this):this._y}function wt(t,n,e){var i=new rt(n??gn,e??xn,NaN,NaN,NaN,NaN);return t==null?i:i.addAll(t)}function rt(t,n,e,i,r,o){this._x=t,this._y=n,this._x0=e,this._y0=i,this._x1=r,this._y1=o,this._root=void 0}function ut(t){for(var n={data:t.data},e=n;t=t.next;)e=e.next={data:t.data};return n}var E=wt.prototype=rt.prototype;E.copy=function(){var t=new rt(this._x,this._y,this._x0,this._y0,this._x1,this._y1),n=this._root,e,i;if(!n)return t;if(!n.length)return t._root=ut(n),t;for(e=[{source:n,target:t._root=new Array(4)}];n=e.pop();)for(var r=0;r<4;++r)(i=n.source[r])&&(i.length?e.push({source:i,target:n.target[r]=new Array(4)}):n.target[r]=ut(i));return t};E.add=rn;E.addAll=on;E.cover=sn;E.data=an;E.extent=fn;E.find=un;E.remove=ln;E.removeAll=hn;E.root=cn;E.size=pn;E.visit=_n;E.visitAfter=yn;E.x=dn;E.y=vn;function wn(t){const n=+this._x.call(null,t),e=+this._y.call(null,t),i=+this._z.call(null,t);return mt(this.cover(n,e,i),n,e,i,t)}function mt(t,n,e,i,r){if(isNaN(n)||isNaN(e)||isNaN(i))return t;var o,s=t._root,a={data:r},f=t._x0,u=t._y0,p=t._z0,l=t._x1,y=t._y1,c=t._z1,_,x,g,h,m,v,w,d,N,M,A;if(!s)return t._root=a,t;for(;s.length;)if((w=n>=(_=(f+l)/2))?f=_:l=_,(d=e>=(x=(u+y)/2))?u=x:y=x,(N=i>=(g=(p+c)/2))?p=g:c=g,o=s,!(s=s[M=N<<2|d<<1|w]))return o[M]=a,t;if(h=+t._x.call(null,s.data),m=+t._y.call(null,s.data),v=+t._z.call(null,s.data),n===h&&e===m&&i===v)return a.next=s,o?o[M]=a:t._root=a,t;do o=o?o[M]=new Array(8):t._root=new Array(8),(w=n>=(_=(f+l)/2))?f=_:l=_,(d=e>=(x=(u+y)/2))?u=x:y=x,(N=i>=(g=(p+c)/2))?p=g:c=g;while((M=N<<2|d<<1|w)===(A=(v>=g)<<2|(m>=x)<<1|h>=_));return o[A]=s,o[M]=a,t}function mn(t){Array.isArray(t)||(t=Array.from(t));const n=t.length,e=new Float64Array(n),i=new Float64Array(n),r=new Float64Array(n);let o=1/0,s=1/0,a=1/0,f=-1/0,u=-1/0,p=-1/0;for(let l=0,y,c,_,x;l<n;++l)isNaN(c=+this._x.call(null,y=t[l]))||isNaN(_=+this._y.call(null,y))||isNaN(x=+this._z.call(null,y))||(e[l]=c,i[l]=_,r[l]=x,c<o&&(o=c),c>f&&(f=c),_<s&&(s=_),_>u&&(u=_),x<a&&(a=x),x>p&&(p=x));if(o>f||s>u||a>p)return this;this.cover(o,s,a).cover(f,u,p);for(let l=0;l<n;++l)mt(this,e[l],i[l],r[l],t[l]);return this}function Nn(t,n,e){if(isNaN(t=+t)||isNaN(n=+n)||isNaN(e=+e))return this;var i=this._x0,r=this._y0,o=this._z0,s=this._x1,a=this._y1,f=this._z1;if(isNaN(i))s=(i=Math.floor(t))+1,a=(r=Math.floor(n))+1,f=(o=Math.floor(e))+1;else{for(var u=s-i||1,p=this._root,l,y;i>t||t>=s||r>n||n>=a||o>e||e>=f;)switch(y=(e<o)<<2|(n<r)<<1|t<i,l=new Array(8),l[y]=p,p=l,u*=2,y){case 0:s=i+u,a=r+u,f=o+u;break;case 1:i=s-u,a=r+u,f=o+u;break;case 2:s=i+u,r=a-u,f=o+u;break;case 3:i=s-u,r=a-u,f=o+u;break;case 4:s=i+u,a=r+u,o=f-u;break;case 5:i=s-u,a=r+u,o=f-u;break;case 6:s=i+u,r=a-u,o=f-u;break;case 7:i=s-u,r=a-u,o=f-u;break}this._root&&this._root.length&&(this._root=p)}return this._x0=i,this._y0=r,this._z0=o,this._x1=s,this._y1=a,this._z1=f,this}function Mn(){var t=[];return this.visit(function(n){if(!n.length)do t.push(n.data);while(n=n.next)}),t}function An(t){return arguments.length?this.cover(+t[0][0],+t[0][1],+t[0][2]).cover(+t[1][0],+t[1][1],+t[1][2]):isNaN(this._x0)?void 0:[[this._x0,this._y0,this._z0],[this._x1,this._y1,this._z1]]}function b(t,n,e,i,r,o,s){this.node=t,this.x0=n,this.y0=e,this.z0=i,this.x1=r,this.y1=o,this.z1=s}function bn(t,n,e,i){var r,o=this._x0,s=this._y0,a=this._z0,f,u,p,l,y,c,_=this._x1,x=this._y1,g=this._z1,h=[],m=this._root,v,w;for(m&&h.push(new b(m,o,s,a,_,x,g)),i==null?i=1/0:(o=t-i,s=n-i,a=e-i,_=t+i,x=n+i,g=e+i,i*=i);v=h.pop();)if(!(!(m=v.node)||(f=v.x0)>_||(u=v.y0)>x||(p=v.z0)>g||(l=v.x1)<o||(y=v.y1)<s||(c=v.z1)<a))if(m.length){var d=(f+l)/2,N=(u+y)/2,M=(p+c)/2;h.push(new b(m[7],d,N,M,l,y,c),new b(m[6],f,N,M,d,y,c),new b(m[5],d,u,M,l,N,c),new b(m[4],f,u,M,d,N,c),new b(m[3],d,N,p,l,y,M),new b(m[2],f,N,p,d,y,M),new b(m[1],d,u,p,l,N,M),new b(m[0],f,u,p,d,N,M)),(w=(e>=M)<<2|(n>=N)<<1|t>=d)&&(v=h[h.length-1],h[h.length-1]=h[h.length-1-w],h[h.length-1-w]=v)}else{var A=t-+this._x.call(null,m.data),T=n-+this._y.call(null,m.data),O=e-+this._z.call(null,m.data),S=A*A+T*T+O*O;if(S<i){var z=Math.sqrt(i=S);o=t-z,s=n-z,a=e-z,_=t+z,x=n+z,g=e+z,r=m.data}}return r}const zn=(t,n,e,i,r,o)=>Math.sqrt((t-i)**2+(n-r)**2+(e-o)**2);function In(t,n,e,i){const r=[],o=t-i,s=n-i,a=e-i,f=t+i,u=n+i,p=e+i;return this.visit((l,y,c,_,x,g,h)=>{if(!l.length)do{const m=l.data;zn(t,n,e,this._x(m),this._y(m),this._z(m))<=i&&r.push(m)}while(l=l.next);return y>f||c>u||_>p||x<o||g<s||h<a}),r}function kn(t){if(isNaN(y=+this._x.call(null,t))||isNaN(c=+this._y.call(null,t))||isNaN(_=+this._z.call(null,t)))return this;var n,e=this._root,i,r,o,s=this._x0,a=this._y0,f=this._z0,u=this._x1,p=this._y1,l=this._z1,y,c,_,x,g,h,m,v,w,d,N;if(!e)return this;if(e.length)for(;;){if((m=y>=(x=(s+u)/2))?s=x:u=x,(v=c>=(g=(a+p)/2))?a=g:p=g,(w=_>=(h=(f+l)/2))?f=h:l=h,n=e,!(e=e[d=w<<2|v<<1|m]))return this;if(!e.length)break;(n[d+1&7]||n[d+2&7]||n[d+3&7]||n[d+4&7]||n[d+5&7]||n[d+6&7]||n[d+7&7])&&(i=n,N=d)}for(;e.data!==t;)if(r=e,!(e=e.next))return this;return(o=e.next)&&delete e.next,r?(o?r.next=o:delete r.next,this):n?(o?n[d]=o:delete n[d],(e=n[0]||n[1]||n[2]||n[3]||n[4]||n[5]||n[6]||n[7])&&e===(n[7]||n[6]||n[5]||n[4]||n[3]||n[2]||n[1]||n[0])&&!e.length&&(i?i[N]=e:this._root=e),this):(this._root=o,this)}function $n(t){for(var n=0,e=t.length;n<e;++n)this.remove(t[n]);return this}function En(){return this._root}function Sn(){var t=0;return this.visit(function(n){if(!n.length)do++t;while(n=n.next)}),t}function qn(t){var n=[],e,i=this._root,r,o,s,a,f,u,p;for(i&&n.push(new b(i,this._x0,this._y0,this._z0,this._x1,this._y1,this._z1));e=n.pop();)if(!t(i=e.node,o=e.x0,s=e.y0,a=e.z0,f=e.x1,u=e.y1,p=e.z1)&&i.length){var l=(o+f)/2,y=(s+u)/2,c=(a+p)/2;(r=i[7])&&n.push(new b(r,l,y,c,f,u,p)),(r=i[6])&&n.push(new b(r,o,y,c,l,u,p)),(r=i[5])&&n.push(new b(r,l,s,c,f,y,p)),(r=i[4])&&n.push(new b(r,o,s,c,l,y,p)),(r=i[3])&&n.push(new b(r,l,y,a,f,u,c)),(r=i[2])&&n.push(new b(r,o,y,a,l,u,c)),(r=i[1])&&n.push(new b(r,l,s,a,f,y,c)),(r=i[0])&&n.push(new b(r,o,s,a,l,y,c))}return this}function Tn(t){var n=[],e=[],i;for(this._root&&n.push(new b(this._root,this._x0,this._y0,this._z0,this._x1,this._y1,this._z1));i=n.pop();){var r=i.node;if(r.length){var o,s=i.x0,a=i.y0,f=i.z0,u=i.x1,p=i.y1,l=i.z1,y=(s+u)/2,c=(a+p)/2,_=(f+l)/2;(o=r[0])&&n.push(new b(o,s,a,f,y,c,_)),(o=r[1])&&n.push(new b(o,y,a,f,u,c,_)),(o=r[2])&&n.push(new b(o,s,c,f,y,p,_)),(o=r[3])&&n.push(new b(o,y,c,f,u,p,_)),(o=r[4])&&n.push(new b(o,s,a,_,y,c,l)),(o=r[5])&&n.push(new b(o,y,a,_,u,c,l)),(o=r[6])&&n.push(new b(o,s,c,_,y,p,l)),(o=r[7])&&n.push(new b(o,y,c,_,u,p,l))}e.push(i)}for(;i=e.pop();)t(i.node,i.x0,i.y0,i.z0,i.x1,i.y1,i.z1);return this}function On(t){return t[0]}function Pn(t){return arguments.length?(this._x=t,this):this._x}function Dn(t){return t[1]}function Fn(t){return arguments.length?(this._y=t,this):this._y}function Ln(t){return t[2]}function jn(t){return arguments.length?(this._z=t,this):this._z}function Nt(t,n,e,i){var r=new ot(n??On,e??Dn,i??Ln,NaN,NaN,NaN,NaN,NaN,NaN);return t==null?r:r.addAll(t)}function ot(t,n,e,i,r,o,s,a,f){this._x=t,this._y=n,this._z=e,this._x0=i,this._y0=r,this._z0=o,this._x1=s,this._y1=a,this._z1=f,this._root=void 0}function lt(t){for(var n={data:t.data},e=n;t=t.next;)e=e.next={data:t.data};return n}var k=Nt.prototype=ot.prototype;k.copy=function(){var t=new ot(this._x,this._y,this._z,this._x0,this._y0,this._z0,this._x1,this._y1,this._z1),n=this._root,e,i;if(!n)return t;if(!n.length)return t._root=lt(n),t;for(e=[{source:n,target:t._root=new Array(8)}];n=e.pop();)for(var r=0;r<8;++r)(i=n.source[r])&&(i.length?e.push({source:i,target:n.target[r]=new Array(8)}):n.target[r]=lt(i));return t};k.add=wn;k.addAll=mn;k.cover=Nn;k.data=Mn;k.extent=An;k.find=bn;k.findAllWithinRadius=In;k.remove=kn;k.removeAll=$n;k.root=En;k.size=Sn;k.visit=qn;k.visitAfter=Tn;k.x=Pn;k.y=Fn;k.z=jn;function Y(t){return function(){return t}}function P(t){return(t()-.5)*1e-6}function Rn(t){return t.index}function ht(t,n){var e=t.get(n);if(!e)throw new Error("node not found: "+n);return e}function Bn(t){var n=Rn,e=y,i,r=Y(30),o,s,a,f,u,p,l=1;t==null&&(t=[]);function y(h){return 1/Math.min(f[h.source.index],f[h.target.index])}function c(h){for(var m=0,v=t.length;m<l;++m)for(var w=0,d,N,M,A=0,T=0,O=0,S,z;w<v;++w)d=t[w],N=d.source,M=d.target,A=M.x+M.vx-N.x-N.vx||P(p),a>1&&(T=M.y+M.vy-N.y-N.vy||P(p)),a>2&&(O=M.z+M.vz-N.z-N.vz||P(p)),S=Math.sqrt(A*A+T*T+O*O),S=(S-o[w])/S*h*i[w],A*=S,T*=S,O*=S,M.vx-=A*(z=u[w]),a>1&&(M.vy-=T*z),a>2&&(M.vz-=O*z),N.vx+=A*(z=1-z),a>1&&(N.vy+=T*z),a>2&&(N.vz+=O*z)}function _(){if(s){var h,m=s.length,v=t.length,w=new Map(s.map((N,M)=>[n(N,M,s),N])),d;for(h=0,f=new Array(m);h<v;++h)d=t[h],d.index=h,typeof d.source!="object"&&(d.source=ht(w,d.source)),typeof d.target!="object"&&(d.target=ht(w,d.target)),f[d.source.index]=(f[d.source.index]||0)+1,f[d.target.index]=(f[d.target.index]||0)+1;for(h=0,u=new Array(v);h<v;++h)d=t[h],u[h]=f[d.source.index]/(f[d.source.index]+f[d.target.index]);i=new Array(v),x(),o=new Array(v),g()}}function x(){if(s)for(var h=0,m=t.length;h<m;++h)i[h]=+e(t[h],h,t)}function g(){if(s)for(var h=0,m=t.length;h<m;++h)o[h]=+r(t[h],h,t)}return c.initialize=function(h,...m){s=h,p=m.find(v=>typeof v=="function")||Math.random,a=m.find(v=>[1,2,3].includes(v))||2,_()},c.links=function(h){return arguments.length?(t=h,_(),c):t},c.id=function(h){return arguments.length?(n=h,c):n},c.iterations=function(h){return arguments.length?(l=+h,c):l},c.strength=function(h){return arguments.length?(e=typeof h=="function"?h:Y(+h),x(),c):e},c.distance=function(h){return arguments.length?(r=typeof h=="function"?h:Y(+h),g(),c):r},c}var Kn={value:()=>{}};function Mt(){for(var t=0,n=arguments.length,e={},i;t<n;++t){if(!(i=arguments[t]+"")||i in e||/[\s.]/.test(i))throw new Error("illegal type: "+i);e[i]=[]}return new G(e)}function G(t){this._=t}function Cn(t,n){return t.trim().split(/^|\s+/).map(function(e){var i="",r=e.indexOf(".");if(r>=0&&(i=e.slice(r+1),e=e.slice(0,r)),e&&!n.hasOwnProperty(e))throw new Error("unknown type: "+e);return{type:e,name:i}})}G.prototype=Mt.prototype={constructor:G,on:function(t,n){var e=this._,i=Cn(t+"",e),r,o=-1,s=i.length;if(arguments.length<2){for(;++o<s;)if((r=(t=i[o]).type)&&(r=Yn(e[r],t.name)))return r;return}if(n!=null&&typeof n!="function")throw new Error("invalid callback: "+n);for(;++o<s;)if(r=(t=i[o]).type)e[r]=ct(e[r],t.name,n);else if(n==null)for(r in e)e[r]=ct(e[r],t.name,null);return this},copy:function(){var t={},n=this._;for(var e in n)t[e]=n[e].slice();return new G(t)},call:function(t,n){if((r=arguments.length-2)>0)for(var e=new Array(r),i=0,r,o;i<r;++i)e[i]=arguments[i+2];if(!this._.hasOwnProperty(t))throw new Error("unknown type: "+t);for(o=this._[t],i=0,r=o.length;i<r;++i)o[i].value.apply(n,e)},apply:function(t,n,e){if(!this._.hasOwnProperty(t))throw new Error("unknown type: "+t);for(var i=this._[t],r=0,o=i.length;r<o;++r)i[r].value.apply(n,e)}};function Yn(t,n){for(var e=0,i=t.length,r;e<i;++e)if((r=t[e]).name===n)return r.value}function ct(t,n,e){for(var i=0,r=t.length;i<r;++i)if(t[i].name===n){t[i]=Kn,t=t.slice(0,i).concat(t.slice(i+1));break}return e!=null&&t.push({name:n,value:e}),t}var j=0,K=0,B=0,At=1e3,X,C,V=0,F=0,J=0,H=typeof performance=="object"&&performance.now?performance:Date,bt=typeof window=="object"&&window.requestAnimationFrame?window.requestAnimationFrame.bind(window):function(t){setTimeout(t,17)};function zt(){return F||(bt(Hn),F=H.now()+J)}function Hn(){F=0}function nt(){this._call=this._time=this._next=null}nt.prototype=It.prototype={constructor:nt,restart:function(t,n,e){if(typeof t!="function")throw new TypeError("callback is not a function");e=(e==null?zt():+e)+(n==null?0:+n),!this._next&&C!==this&&(C?C._next=this:X=this,C=this),this._call=t,this._time=e,et()},stop:function(){this._call&&(this._call=null,this._time=1/0,et())}};function It(t,n,e){var i=new nt;return i.restart(t,n,e),i}function Un(){zt(),++j;for(var t=X,n;t;)(n=F-t._time)>=0&&t._call.call(void 0,n),t=t._next;--j}function pt(){F=(V=H.now())+J,j=K=0;try{Un()}finally{j=0,Xn(),F=0}}function Gn(){var t=H.now(),n=t-V;n>At&&(J-=n,V=t)}function Xn(){for(var t,n=X,e,i=1/0;n;)n._call?(i>n._time&&(i=n._time),t=n,n=n._next):(e=n._next,n._next=null,n=t?t._next=e:X=e);C=t,et(i)}function et(t){if(!j){K&&(K=clearTimeout(K));var n=t-F;n>24?(t<1/0&&(K=setTimeout(pt,t-H.now()-J)),B&&(B=clearInterval(B))):(B||(V=H.now(),B=setInterval(Gn,At)),j=1,bt(pt))}}const Vn=1664525,Jn=1013904223,_t=4294967296;function Qn(){let t=1;return()=>(t=(Vn*t+Jn)%_t)/_t}var yt=3;function Z(t){return t.x}function gt(t){return t.y}function Wn(t){return t.z}var Zn=10,te=Math.PI*(3-Math.sqrt(5)),ne=Math.PI*20/(9+Math.sqrt(221));function ee(t,n){n=n||2;var e=Math.min(yt,Math.max(1,Math.round(n))),i,r=1,o=.001,s=1-Math.pow(o,1/300),a=0,f=.6,u=new Map,p=It(c),l=Mt("tick","end"),y=Qn();t==null&&(t=[]);function c(){_(),l.call("tick",i),r<o&&(p.stop(),l.call("end",i))}function _(h){var m,v=t.length,w;h===void 0&&(h=1);for(var d=0;d<h;++d)for(r+=(a-r)*s,u.forEach(function(N){N(r)}),m=0;m<v;++m)w=t[m],w.fx==null?w.x+=w.vx*=f:(w.x=w.fx,w.vx=0),e>1&&(w.fy==null?w.y+=w.vy*=f:(w.y=w.fy,w.vy=0)),e>2&&(w.fz==null?w.z+=w.vz*=f:(w.z=w.fz,w.vz=0));return i}function x(){for(var h=0,m=t.length,v;h<m;++h){if(v=t[h],v.index=h,v.fx!=null&&(v.x=v.fx),v.fy!=null&&(v.y=v.fy),v.fz!=null&&(v.z=v.fz),isNaN(v.x)||e>1&&isNaN(v.y)||e>2&&isNaN(v.z)){var w=Zn*(e>2?Math.cbrt(.5+h):e>1?Math.sqrt(.5+h):h),d=h*te,N=h*ne;e===1?v.x=w:e===2?(v.x=w*Math.cos(d),v.y=w*Math.sin(d)):(v.x=w*Math.sin(d)*Math.cos(N),v.y=w*Math.cos(d),v.z=w*Math.sin(d)*Math.sin(N))}(isNaN(v.vx)||e>1&&isNaN(v.vy)||e>2&&isNaN(v.vz))&&(v.vx=0,e>1&&(v.vy=0),e>2&&(v.vz=0))}}function g(h){return h.initialize&&h.initialize(t,y,e),h}return x(),i={tick:_,restart:function(){return p.restart(c),i},stop:function(){return p.stop(),i},numDimensions:function(h){return arguments.length?(e=Math.min(yt,Math.max(1,Math.round(h))),u.forEach(g),i):e},nodes:function(h){return arguments.length?(t=h,x(),u.forEach(g),i):t},alpha:function(h){return arguments.length?(r=+h,i):r},alphaMin:function(h){return arguments.length?(o=+h,i):o},alphaDecay:function(h){return arguments.length?(s=+h,i):+s},alphaTarget:function(h){return arguments.length?(a=+h,i):a},velocityDecay:function(h){return arguments.length?(f=1-h,i):1-f},randomSource:function(h){return arguments.length?(y=h,u.forEach(g),i):y},force:function(h,m){return arguments.length>1?(m==null?u.delete(h):u.set(h,g(m)),i):u.get(h)},find:function(){var h=Array.prototype.slice.call(arguments),m=h.shift()||0,v=(e>1?h.shift():null)||0,w=(e>2?h.shift():null)||0,d=h.shift()||1/0,N=0,M=t.length,A,T,O,S,z,st;for(d*=d,N=0;N<M;++N)z=t[N],A=m-z.x,T=v-(z.y||0),O=w-(z.z||0),S=A*A+T*T+O*O,S<d&&(st=z,d=S);return st},on:function(h,m){return arguments.length>1?(l.on(h,m),i):l.on(h)}}}function ie(){var t,n,e,i,r,o=Y(-30),s,a=1,f=1/0,u=.81;function p(_){var x,g=t.length,h=(n===1?xt(t,Z):n===2?wt(t,Z,gt):n===3?Nt(t,Z,gt,Wn):null).visitAfter(y);for(r=_,x=0;x<g;++x)e=t[x],h.visit(c)}function l(){if(t){var _,x=t.length,g;for(s=new Array(x),_=0;_<x;++_)g=t[_],s[g.index]=+o(g,_,t)}}function y(_){var x=0,g,h,m=0,v,w,d,N,M=_.length;if(M){for(v=w=d=N=0;N<M;++N)(g=_[N])&&(h=Math.abs(g.value))&&(x+=g.value,m+=h,v+=h*(g.x||0),w+=h*(g.y||0),d+=h*(g.z||0));x*=Math.sqrt(4/M),_.x=v/m,n>1&&(_.y=w/m),n>2&&(_.z=d/m)}else{g=_,g.x=g.data.x,n>1&&(g.y=g.data.y),n>2&&(g.z=g.data.z);do x+=s[g.data.index];while(g=g.next)}_.value=x}function c(_,x,g,h,m){if(!_.value)return!0;var v=[g,h,m][n-1],w=_.x-e.x,d=n>1?_.y-e.y:0,N=n>2?_.z-e.z:0,M=v-x,A=w*w+d*d+N*N;if(M*M/u<A)return A<f&&(w===0&&(w=P(i),A+=w*w),n>1&&d===0&&(d=P(i),A+=d*d),n>2&&N===0&&(N=P(i),A+=N*N),A<a&&(A=Math.sqrt(a*A)),e.vx+=w*_.value*r/A,n>1&&(e.vy+=d*_.value*r/A),n>2&&(e.vz+=N*_.value*r/A)),!0;if(_.length||A>=f)return;(_.data!==e||_.next)&&(w===0&&(w=P(i),A+=w*w),n>1&&d===0&&(d=P(i),A+=d*d),n>2&&N===0&&(N=P(i),A+=N*N),A<a&&(A=Math.sqrt(a*A)));do _.data!==e&&(M=s[_.data.index]*r/A,e.vx+=w*M,n>1&&(e.vy+=d*M),n>2&&(e.vz+=N*M));while(_=_.next)}return p.initialize=function(_,...x){t=_,i=x.find(g=>typeof g=="function")||Math.random,n=x.find(g=>[1,2,3].includes(g))||2,l()},p.strength=function(_){return arguments.length?(o=typeof _=="function"?_:Y(+_),l(),p):o},p.distanceMin=function(_){return arguments.length?(a=_*_,p):Math.sqrt(a)},p.distanceMax=function(_){return arguments.length?(f=_*_,p):Math.sqrt(f)},p.theta=function(_){return arguments.length?(u=_*_,p):Math.sqrt(u)},p}function kt(t){let n=2166136261;for(let e=0;e<t.length;e++)n^=t.charCodeAt(e),n=Math.imul(n,16777619);return n>>>0}function $t(t){let n=t>>>0;return function(){n|=0,n=n+1831565813|0;let e=Math.imul(n^n>>>15,1|n);return e=e+Math.imul(e^e>>>7,61|e)^e,((e^e>>>14)>>>0)/4294967296}}function re(t,n=42){const e=$t(kt(t)),i=e(),r=e(),o=2*Math.PI*i,s=Math.acos(2*r-1),a=n*Math.cbrt(e()),f=a*Math.sin(s)*Math.cos(o),u=a*Math.sin(s)*Math.sin(o),p=a*Math.cos(s);return[f,u,p]}function Et(t){let n=2166136261;for(const e of t){for(let i=0;i<e.length;i++)n^=e.charCodeAt(i),n=Math.imul(n,16777619);n^=10,n=Math.imul(n,16777619)}return(n>>>0).toString(16)}const oe=1592594996,se=1;function ae(t){const n=[...t].sort();return Et([`v${se}`,`n${n.length}`,...n])}function fe(t){return t<=2e3?200:t<=5e3?150:t<=1e4?100:70}function ue(t,n){const e=Bt(t),i=e.map(l=>l.key),r=new Map;if(i.forEach((l,y)=>r.set(l,y)),n&&n.length===i.length*3)return{keys:i,positions:n.slice(),indexByKey:r};const o=e.map(l=>{const[y,c,_]=re(l.key);return{key:l.key,x:y,y:c,z:_}}),s=e.filter(l=>l.parent!==null).map(l=>({source:l.parent,target:l.key})),a=$t(kt("randomSource")^oe),f=ee(o,3).force("charge",ie().strength(-7)).force("link",Bn(s).id(l=>l.key).distance(5).strength(.85)).force("center",Kt(0,0,0)).stop(),u=f;typeof u.randomSource=="function"&&u.randomSource(a),f.tick(fe(o.length));const p=new Float32Array(o.length*3);for(let l=0;l<o.length;l++){const y=o[l];p[l*3]=y.x??0,p[l*3+1]=y.y??0,p[l*3+2]=y.z??0}return{keys:i,positions:p,indexByKey:r}}function le(t,n){const e=I(t.props.name)??"";return{id:t.id,name:e,qualifiedName:I(t.props.qualified_name)??e,kind:t.labels[0]??"",filePath:I(t.props.file_path)??I(t.props.path)??"",startLine:tt(t.props.start_line),endLine:tt(t.props.end_line),language:I(t.props.language)??"",role:I(t.props.role)??"",semanticSummary:I(t.props.semantic_summary),summaryOfHash:I(t.props.summary_of_hash),contentHash:I(t.props.content_hash),degree:n}}function he(t,n){const e=Rt(t),i=ue(e,n?.cachedPositions),r=[],o=new Map,s=p=>o.set(p,(o.get(p)??0)+1);for(const p of t.edges){if(!Dt.has(p.type))continue;const l=p.from.split(":"),y=p.to.split(":"),c=l[0]==="rs1"&&y[0]==="rs1"&&l[1]!==y[1];r.push({from:p.from,to:p.to,type:p.type,resolution:Ft(p.props),confidence:tt(p.props.confidence,1),crossRepo:c}),s(p.from),s(p.to)}const a=new Map;for(const p of t.nodes)a.set(p.id,le(p,o.get(p.id)??0));const f=[];for(const p of t.nodes)f.push(p.id,I(p.props.content_hash)??"");const u=Et(f);return{tree:e,layout:i,drawEdges:r,records:a,degree:o,fingerprint:u}}const ce="reposkein-layout-cache",R="positions",pe=1;function _e(){try{if(typeof indexedDB<"u")return indexedDB}catch{}return null}function St(){const t=_e();return t?new Promise(n=>{let e;try{e=t.open(ce,pe)}catch{n(null);return}e.onupgradeneeded=()=>{const i=e.result;i.objectStoreNames.contains(R)||i.createObjectStore(R)},e.onsuccess=()=>n(e.result),e.onerror=()=>n(null),e.onblocked=()=>n(null)}):Promise.resolve(null)}async function ye(t){const n=await St();return n?new Promise(e=>{let i=!1;const r=o=>{i||(i=!0,n.close(),e(o))};try{const o=n.transaction(R,"readonly"),s=o.objectStore(R).get(t);s.onsuccess=()=>{const a=s.result;a&&a.byteLength>0&&a.byteLength%12===0?r(new Float32Array(a)):r(null)},s.onerror=()=>r(null),o.onerror=()=>r(null),o.onabort=()=>r(null)}catch{r(null)}}):null}async function ge(t,n){const e=await St();if(e)return new Promise(i=>{let r=!1;const o=()=>{r||(r=!0,e.close(),i())};try{const s=n.buffer.slice(n.byteOffset,n.byteOffset+n.byteLength),a=e.transaction(R,"readwrite");a.objectStore(R).put(s,t),a.oncomplete=o,a.onerror=o,a.onabort=o}catch{o()}})}async function de(){const t=await fetch("/api/graph");if(!t.ok)throw new Error(`GET /api/graph -> ${t.status}`);return await t.json()}async function U(t){const n=await fetch(t);if(!n.ok)throw new Error(`GET ${t} -> ${n.status}`);return await n.text()}async function xe(){const t=u=>self.postMessage(u);t({type:"progress",phase:"fetching manifest"});const n=await de();t({type:"progress",phase:"fetching graph"});const[e,i]=await Promise.all([U(n.root.nodesUrl),U(n.root.edgesUrl)]);t({type:"progress",phase:"parsing"});const r=at(e,i);if(n.federated&&n.federated.length>0){t({type:"progress",phase:"fetching federated repos"});for(const u of n.federated){const[p,l]=await Promise.all([U(u.nodesUrl),U(u.edgesUrl)]),y=at(p,l);r.nodes.push(...y.nodes),r.edges.push(...y.edges)}}const o=ae(r.nodes.map(u=>u.id)),s=await ye(o);t({type:"progress",phase:s?"restoring layout":"charting the sky"});const a=he(r,{cachedPositions:s??void 0});s||ge(o,a.layout.positions.slice());const f={type:"result",repoId:a.tree.repoId,rootKey:a.tree.rootKey,clusters:[...a.tree.byKey.values()],keys:a.layout.keys,positions:a.layout.positions,drawEdges:a.drawEdges,records:[...a.records.entries()],fingerprint:a.fingerprint,counts:{nodes:r.nodes.length,edges:r.edges.length},repoRoot:n.root.repoRoot??null,repoMeta:n.meta??null};self.postMessage(f,[f.positions.buffer])}self.onmessage=t=>{t.data?.cmd==="load"&&xe().catch(n=>{const e={type:"error",message:n instanceof Error?n.message:String(n)};self.postMessage(e)})};
@@ -0,0 +1 @@
1
+ /*! tailwindcss v4.3.3 | MIT License | https://tailwindcss.com */@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0;--tw-rotate-x:initial;--tw-rotate-y:initial;--tw-rotate-z:initial;--tw-skew-x:initial;--tw-skew-y:initial;--tw-border-style:solid;--tw-font-weight:initial;--tw-tracking:initial;--tw-ordinal:initial;--tw-slashed-zero:initial;--tw-numeric-figure:initial;--tw-numeric-spacing:initial;--tw-numeric-fraction:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-outline-style:solid;--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial;--tw-backdrop-blur:initial;--tw-backdrop-brightness:initial;--tw-backdrop-contrast:initial;--tw-backdrop-grayscale:initial;--tw-backdrop-hue-rotate:initial;--tw-backdrop-invert:initial;--tw-backdrop-opacity:initial;--tw-backdrop-saturate:initial;--tw-backdrop-sepia:initial;--tw-ease:initial}}}@layer theme{:root,:host{--font-mono:"JetBrains Mono", ui-monospace, SFMono-Regular, Menlo, monospace;--color-black:#000;--color-white:#fff;--spacing:.25rem;--container-xs:20rem;--container-xl:36rem;--font-weight-medium:500;--tracking-wider:.05em;--ease-out:cubic-bezier(0, 0, .2, 1);--ease-in-out:cubic-bezier(.4, 0, .2, 1);--blur-md:12px;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4, 0, .2, 1);--color-brand-amber:#f2b84b;--color-brand-cream:#eae7dc;--color-brand-navy:#070a12;--color-brand-teal:#2dd4bf;--color-node-class:#5fe0e0;--color-node-dir:#9aa7c7;--color-node-enum:#7ce08a;--color-node-file:#6ea8ff;--color-node-function:#ffe08a;--color-node-galaxy:#fff;--color-node-interface:#b98aff;--color-node-variable:#9aa0a8;--color-edge-calls:#ffd166;--color-edge-implements:#5fe0e0;--color-edge-imports:#6ea8ff;--color-edge-inherits:#7ce08a;--color-edge-instantiates:#ef8aff;--color-lang-csharp:#9b6dff;--color-lang-default:#8a93a8;--color-lang-go:#39c5cf;--color-lang-java:#e76f51;--color-lang-javascript:#f4d03f;--color-lang-python:#4b8bff;--color-lang-rust:#ff7a45;--color-lang-typescript:#3aa0ff}}@layer base,components;@layer utilities{.collapse{visibility:collapse}.invisible{visibility:hidden}.visible{visibility:visible}.sr-only{clip-path:inset(50%);white-space:nowrap;border-width:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.absolute{position:absolute}.fixed{position:fixed}.relative{position:relative}.static{position:static}.inset-0{inset:0}.top-\[12\%\]{top:12%}.left-1\/2{left:50%}.z-\[200\]{z-index:200}.z-\[201\]{z-index:201}.mt-1{margin-top:var(--spacing)}.mt-3{margin-top:calc(var(--spacing) * 3)}.mb-1{margin-bottom:var(--spacing)}.ml-auto{margin-left:auto}.block{display:block}.flex{display:flex}.hidden{display:none}.inline{display:inline}.inline-block{display:inline-block}.inline-flex{display:inline-flex}.table{display:table}.h-1\.5{height:calc(var(--spacing) * 1.5)}.h-5{height:calc(var(--spacing) * 5)}.h-9{height:calc(var(--spacing) * 9)}.max-h-\[70vh\]{max-height:70vh}.min-h-0{min-height:0}.min-h-9{min-height:calc(var(--spacing) * 9)}.w-1\.5{width:calc(var(--spacing) * 1.5)}.w-3{width:calc(var(--spacing) * 3)}.w-\[calc\(100\%-2rem\)\]{width:calc(100% - 2rem)}.w-full{width:100%}.max-w-xl{max-width:var(--container-xl)}.max-w-xs{max-width:var(--container-xs)}.min-w-0{min-width:0}.min-w-5{min-width:calc(var(--spacing) * 5)}.flex-1{flex:1}.shrink-0{flex-shrink:0}.-translate-x-1\/2{--tw-translate-x: -50% ;translate:var(--tw-translate-x) var(--tw-translate-y)}.transform{transform:var(--tw-rotate-x,) var(--tw-rotate-y,) var(--tw-rotate-z,) var(--tw-skew-x,) var(--tw-skew-y,)}.cursor-not-allowed{cursor:not-allowed}.cursor-pointer{cursor:pointer}.flex-col{flex-direction:column}.items-center{align-items:center}.justify-center{justify-content:center}.gap-1{gap:var(--spacing)}.gap-2{gap:calc(var(--spacing) * 2)}.gap-3{gap:calc(var(--spacing) * 3)}.truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.overflow-hidden{overflow:hidden}.overflow-y-auto{overflow-y:auto}.rounded-\[6px\]{border-radius:6px}.rounded-\[8px\]{border-radius:8px}.rounded-\[10px\]{border-radius:10px}.rounded-full{border-radius:3.40282e38px}.border{border-style:var(--tw-border-style);border-width:1px}.border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.border-\[rgba\(148\,163\,207\,0\.2\)\]{border-color:#94a3cf33}.border-\[rgba\(148\,163\,207\,0\.14\)\]{border-color:#94a3cf24}.border-\[rgba\(148\,163\,207\,0\.18\)\]{border-color:#94a3cf2e}.border-\[rgba\(148\,163\,207\,0\.25\)\]{border-color:#94a3cf40}.border-\[rgba\(255\,180\,84\,0\.4\)\]{border-color:#ffb45466}.bg-\[color-mix\(in_srgb\,var\(--color-brand-navy\)_96\%\,white_4\%\)\]{background-color:#11141b}@supports (color:color-mix(in lab,red,red)){.bg-\[color-mix\(in_srgb\,var\(--color-brand-navy\)_96\%\,white_4\%\)\]{background-color:color-mix(in srgb,var(--color-brand-navy) 96%,white 4%)}}.bg-\[rgba\(255\,180\,84\,0\.16\)\]{background-color:#ffb45429}.bg-black\/50{background-color:#00000080}@supports (color:color-mix(in lab,red,red)){.bg-black\/50{background-color:color-mix(in oklab,var(--color-black) 50%,transparent)}}.bg-transparent{background-color:#0000}.bg-white\/5{background-color:#ffffff0d}@supports (color:color-mix(in lab,red,red)){.bg-white\/5{background-color:color-mix(in oklab,var(--color-white) 5%,transparent)}}.bg-white\/10{background-color:#ffffff1a}@supports (color:color-mix(in lab,red,red)){.bg-white\/10{background-color:color-mix(in oklab,var(--color-white) 10%,transparent)}}.p-1\.5{padding:calc(var(--spacing) * 1.5)}.px-1\.5{padding-inline:calc(var(--spacing) * 1.5)}.px-2{padding-inline:calc(var(--spacing) * 2)}.px-2\.5{padding-inline:calc(var(--spacing) * 2.5)}.px-3{padding-inline:calc(var(--spacing) * 3)}.py-0\.5{padding-block:calc(var(--spacing) * .5)}.py-1{padding-block:var(--spacing)}.py-1\.5{padding-block:calc(var(--spacing) * 1.5)}.py-2\.5{padding-block:calc(var(--spacing) * 2.5)}.py-10{padding-block:calc(var(--spacing) * 10)}.pt-1\.5{padding-top:calc(var(--spacing) * 1.5)}.pb-1{padding-bottom:var(--spacing)}.text-center{text-align:center}.text-left{text-align:left}.font-mono{font-family:var(--font-mono)}.text-\[10px\]{font-size:10px}.text-\[11px\]{font-size:11px}.text-\[12px\]{font-size:12px}.text-\[13px\]{font-size:13px}.font-medium{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.tracking-wider{--tw-tracking:var(--tracking-wider);letter-spacing:var(--tracking-wider)}.text-\[\#ffd9a0\]{color:#ffd9a0}.text-\[var\(--color-brand-cream\)\]{color:var(--color-brand-cream)}.uppercase{text-transform:uppercase}.tabular-nums{--tw-numeric-spacing:tabular-nums;font-variant-numeric:var(--tw-ordinal,) var(--tw-slashed-zero,) var(--tw-numeric-figure,) var(--tw-numeric-spacing,) var(--tw-numeric-fraction,)}.opacity-40{opacity:.4}.opacity-45{opacity:.45}.opacity-50{opacity:.5}.opacity-55{opacity:.55}.opacity-60{opacity:.6}.opacity-70{opacity:.7}.opacity-75{opacity:.75}.opacity-80{opacity:.8}.shadow-\[0_16px_48px_-12px_rgba\(0\,0\,0\,0\.55\)\]{--tw-shadow:0 16px 48px -12px var(--tw-shadow-color,#0000008c);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ring{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.outline{outline-style:var(--tw-outline-style);outline-width:1px}.filter{filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.backdrop-blur-\[2px\]{--tw-backdrop-blur:blur(2px);-webkit-backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,)}.backdrop-blur-md{--tw-backdrop-blur:blur(var(--blur-md));-webkit-backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,)}.transition{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-colors{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.ease-in-out{--tw-ease:var(--ease-in-out);transition-timing-function:var(--ease-in-out)}.ease-out{--tw-ease:var(--ease-out);transition-timing-function:var(--ease-out)}.placeholder\:opacity-45::placeholder{opacity:.45}.last\:mb-0:last-child{margin-bottom:0}@media(hover:hover){.hover\:bg-white\/5:hover{background-color:#ffffff0d}@supports (color:color-mix(in lab,red,red)){.hover\:bg-white\/5:hover{background-color:color-mix(in oklab,var(--color-white) 5%,transparent)}}.hover\:opacity-100:hover{opacity:1}}.focus\:outline-none:focus{--tw-outline-style:none;outline-style:none}@media(min-width:40rem){.sm\:inline-flex{display:inline-flex}}}@font-face{font-family:JetBrains Mono;font-style:normal;font-weight:400;font-display:swap;src:url(./jetbrains-mono-latin-400-normal-V6pRDFza.woff2)format("woff2")}@font-face{font-family:JetBrains Mono;font-style:normal;font-weight:500;font-display:swap;src:url(./jetbrains-mono-latin-500-normal-BWZEU5yA.woff2)format("woff2")}@font-face{font-family:JetBrains Mono;font-style:normal;font-weight:700;font-display:swap;src:url(./jetbrains-mono-latin-700-normal-BYuf6tUa.woff2)format("woff2")}@property --tw-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-y{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-z{syntax:"*";inherits:false;initial-value:0}@property --tw-rotate-x{syntax:"*";inherits:false}@property --tw-rotate-y{syntax:"*";inherits:false}@property --tw-rotate-z{syntax:"*";inherits:false}@property --tw-skew-x{syntax:"*";inherits:false}@property --tw-skew-y{syntax:"*";inherits:false}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-tracking{syntax:"*";inherits:false}@property --tw-ordinal{syntax:"*";inherits:false}@property --tw-slashed-zero{syntax:"*";inherits:false}@property --tw-numeric-figure{syntax:"*";inherits:false}@property --tw-numeric-spacing{syntax:"*";inherits:false}@property --tw-numeric-fraction{syntax:"*";inherits:false}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"<length>";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-outline-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-blur{syntax:"*";inherits:false}@property --tw-brightness{syntax:"*";inherits:false}@property --tw-contrast{syntax:"*";inherits:false}@property --tw-grayscale{syntax:"*";inherits:false}@property --tw-hue-rotate{syntax:"*";inherits:false}@property --tw-invert{syntax:"*";inherits:false}@property --tw-opacity{syntax:"*";inherits:false}@property --tw-saturate{syntax:"*";inherits:false}@property --tw-sepia{syntax:"*";inherits:false}@property --tw-drop-shadow{syntax:"*";inherits:false}@property --tw-drop-shadow-color{syntax:"*";inherits:false}@property --tw-drop-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-drop-shadow-size{syntax:"*";inherits:false}@property --tw-backdrop-blur{syntax:"*";inherits:false}@property --tw-backdrop-brightness{syntax:"*";inherits:false}@property --tw-backdrop-contrast{syntax:"*";inherits:false}@property --tw-backdrop-grayscale{syntax:"*";inherits:false}@property --tw-backdrop-hue-rotate{syntax:"*";inherits:false}@property --tw-backdrop-invert{syntax:"*";inherits:false}@property --tw-backdrop-opacity{syntax:"*";inherits:false}@property --tw-backdrop-saturate{syntax:"*";inherits:false}@property --tw-backdrop-sepia{syntax:"*";inherits:false}@property --tw-ease{syntax:"*";inherits:false}