@grackle-ai/web 0.135.2 → 0.136.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.
- package/dist/assets/{KnowledgePage-BLc0jzI4.js → KnowledgePage-C3HjBtgM.js} +2 -2
- package/dist/assets/{KnowledgePage-BLc0jzI4.js.map → KnowledgePage-C3HjBtgM.js.map} +1 -1
- package/dist/assets/{SessionsListPage-DqlXe7kn.js → SessionsListPage-eDZplqLz.js} +2 -2
- package/dist/assets/{SessionsListPage-DqlXe7kn.js.map → SessionsListPage-eDZplqLz.js.map} +1 -1
- package/dist/assets/{index-NKhd-vDs.js → index-Cod3rLvs.js} +4 -4
- package/dist/assets/{index-NKhd-vDs.js.map → index-Cod3rLvs.js.map} +1 -1
- package/dist/index.html +1 -1
- package/package.json +3 -3
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{t as nt,l as rt,b as A,z as it,s as T,m as st,n as X,j as w}from"./dagview-B70jDsRo.js";import{u as at,s as ot,t as ct,a as lt,B as ut,K as ft}from"./index-NKhd-vDs.js";import"./grpc-D84KWgEK.js";import"./markdown-CPoGw-1N.js";function ht(t,e){var n,o=1;t==null&&(t=0),e==null&&(e=0);function s(){var r,c=n.length,d,_=0,i=0;for(r=0;r<c;++r)d=n[r],_+=d.x,i+=d.y;for(_=(_/c-t)*o,i=(i/c-e)*o,r=0;r<c;++r)d=n[r],d.x-=_,d.y-=i}return s.initialize=function(r){n=r},s.x=function(r){return arguments.length?(t=+r,s):t},s.y=function(r){return arguments.length?(e=+r,s):e},s.strength=function(r){return arguments.length?(o=+r,s):o},s}function dt(t){const e=+this._x.call(null,t),n=+this._y.call(null,t);return q(this.cover(e,n),e,n,t)}function q(t,e,n,o){if(isNaN(e)||isNaN(n))return t;var s,r=t._root,c={data:o},d=t._x0,_=t._y0,i=t._x1,v=t._y1,N,g,f,p,l,a,u,h;if(!r)return t._root=c,t;for(;r.length;)if((l=e>=(N=(d+i)/2))?d=N:i=N,(a=n>=(g=(_+v)/2))?_=g:v=g,s=r,!(r=r[u=a<<1|l]))return s[u]=c,t;if(f=+t._x.call(null,r.data),p=+t._y.call(null,r.data),e===f&&n===p)return c.next=r,s?s[u]=c:t._root=c,t;do s=s?s[u]=new Array(4):t._root=new Array(4),(l=e>=(N=(d+i)/2))?d=N:i=N,(a=n>=(g=(_+v)/2))?_=g:v=g;while((u=a<<1|l)===(h=(p>=g)<<1|f>=N));return s[h]=r,s[u]=c,t}function gt(t){var e,n,o=t.length,s,r,c=new Array(o),d=new Array(o),_=1/0,i=1/0,v=-1/0,N=-1/0;for(n=0;n<o;++n)isNaN(s=+this._x.call(null,e=t[n]))||isNaN(r=+this._y.call(null,e))||(c[n]=s,d[n]=r,s<_&&(_=s),s>v&&(v=s),r<i&&(i=r),r>N&&(N=r));if(_>v||i>N)return this;for(this.cover(_,i).cover(v,N),n=0;n<o;++n)q(this,c[n],d[n],t[n]);return this}function xt(t,e){if(isNaN(t=+t)||isNaN(e=+e))return this;var n=this._x0,o=this._y0,s=this._x1,r=this._y1;if(isNaN(n))s=(n=Math.floor(t))+1,r=(o=Math.floor(e))+1;else{for(var c=s-n||1,d=this._root,_,i;n>t||t>=s||o>e||e>=r;)switch(i=(e<o)<<1|t<n,_=new Array(4),_[i]=d,d=_,c*=2,i){case 0:s=n+c,r=o+c;break;case 1:n=s-c,r=o+c;break;case 2:s=n+c,o=r-c;break;case 3:n=s-c,o=r-c;break}this._root&&this._root.length&&(this._root=d)}return this._x0=n,this._y0=o,this._x1=s,this._y1=r,this}function yt(){var t=[];return this.visit(function(e){if(!e.length)do t.push(e.data);while(e=e.next)}),t}function _t(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 L(t,e,n,o,s){this.node=t,this.x0=e,this.y0=n,this.x1=o,this.y1=s}function vt(t,e,n){var o,s=this._x0,r=this._y0,c,d,_,i,v=this._x1,N=this._y1,g=[],f=this._root,p,l;for(f&&g.push(new L(f,s,r,v,N)),n==null?n=1/0:(s=t-n,r=e-n,v=t+n,N=e+n,n*=n);p=g.pop();)if(!(!(f=p.node)||(c=p.x0)>v||(d=p.y0)>N||(_=p.x1)<s||(i=p.y1)<r))if(f.length){var a=(c+_)/2,u=(d+i)/2;g.push(new L(f[3],a,u,_,i),new L(f[2],c,u,a,i),new L(f[1],a,d,_,u),new L(f[0],c,d,a,u)),(l=(e>=u)<<1|t>=a)&&(p=g[g.length-1],g[g.length-1]=g[g.length-1-l],g[g.length-1-l]=p)}else{var h=t-+this._x.call(null,f.data),m=e-+this._y.call(null,f.data),y=h*h+m*m;if(y<n){var b=Math.sqrt(n=y);s=t-b,r=e-b,v=t+b,N=e+b,o=f.data}}return o}function mt(t){if(isNaN(v=+this._x.call(null,t))||isNaN(N=+this._y.call(null,t)))return this;var e,n=this._root,o,s,r,c=this._x0,d=this._y0,_=this._x1,i=this._y1,v,N,g,f,p,l,a,u;if(!n)return this;if(n.length)for(;;){if((p=v>=(g=(c+_)/2))?c=g:_=g,(l=N>=(f=(d+i)/2))?d=f:i=f,e=n,!(n=n[a=l<<1|p]))return this;if(!n.length)break;(e[a+1&3]||e[a+2&3]||e[a+3&3])&&(o=e,u=a)}for(;n.data!==t;)if(s=n,!(n=n.next))return this;return(r=n.next)&&delete n.next,s?(r?s.next=r:delete s.next,this):e?(r?e[a]=r:delete e[a],(n=e[0]||e[1]||e[2]||e[3])&&n===(e[3]||e[2]||e[1]||e[0])&&!n.length&&(o?o[u]=n:this._root=n),this):(this._root=r,this)}function pt(t){for(var e=0,n=t.length;e<n;++e)this.remove(t[e]);return this}function wt(){return this._root}function Nt(){var t=0;return this.visit(function(e){if(!e.length)do++t;while(e=e.next)}),t}function bt(t){var e=[],n,o=this._root,s,r,c,d,_;for(o&&e.push(new L(o,this._x0,this._y0,this._x1,this._y1));n=e.pop();)if(!t(o=n.node,r=n.x0,c=n.y0,d=n.x1,_=n.y1)&&o.length){var i=(r+d)/2,v=(c+_)/2;(s=o[3])&&e.push(new L(s,i,v,d,_)),(s=o[2])&&e.push(new L(s,r,v,i,_)),(s=o[1])&&e.push(new L(s,i,c,d,v)),(s=o[0])&&e.push(new L(s,r,c,i,v))}return this}function jt(t){var e=[],n=[],o;for(this._root&&e.push(new L(this._root,this._x0,this._y0,this._x1,this._y1));o=e.pop();){var s=o.node;if(s.length){var r,c=o.x0,d=o.y0,_=o.x1,i=o.y1,v=(c+_)/2,N=(d+i)/2;(r=s[0])&&e.push(new L(r,c,d,v,N)),(r=s[1])&&e.push(new L(r,v,d,_,N)),(r=s[2])&&e.push(new L(r,c,N,v,i)),(r=s[3])&&e.push(new L(r,v,N,_,i))}n.push(o)}for(;o=n.pop();)t(o.node,o.x0,o.y0,o.x1,o.y1);return this}function kt(t){return t[0]}function At(t){return arguments.length?(this._x=t,this):this._x}function Ct(t){return t[1]}function Mt(t){return arguments.length?(this._y=t,this):this._y}function P(t,e,n){var o=new U(e??kt,n??Ct,NaN,NaN,NaN,NaN);return t==null?o:o.addAll(t)}function U(t,e,n,o,s,r){this._x=t,this._y=e,this._x0=n,this._y0=o,this._x1=s,this._y1=r,this._root=void 0}function Y(t){for(var e={data:t.data},n=e;t=t.next;)n=n.next={data:t.data};return e}var R=P.prototype=U.prototype;R.copy=function(){var t=new U(this._x,this._y,this._x0,this._y0,this._x1,this._y1),e=this._root,n,o;if(!e)return t;if(!e.length)return t._root=Y(e),t;for(n=[{source:e,target:t._root=new Array(4)}];e=n.pop();)for(var s=0;s<4;++s)(o=e.source[s])&&(o.length?n.push({source:o,target:e.target[s]=new Array(4)}):e.target[s]=Y(o));return t};R.add=dt;R.addAll=gt;R.cover=xt;R.data=yt;R.extent=_t;R.find=vt;R.remove=mt;R.removeAll=pt;R.root=wt;R.size=Nt;R.visit=bt;R.visitAfter=jt;R.x=At;R.y=Mt;function G(t){return function(){return t}}function S(t){return(t()-.5)*1e-6}function It(t){return t.x+t.vx}function Lt(t){return t.y+t.vy}function Rt(t){var e,n,o,s=1,r=1;typeof t!="function"&&(t=G(t==null?1:+t));function c(){for(var i,v=e.length,N,g,f,p,l,a,u=0;u<r;++u)for(N=P(e,It,Lt).visitAfter(d),i=0;i<v;++i)g=e[i],l=n[g.index],a=l*l,f=g.x+g.vx,p=g.y+g.vy,N.visit(h);function h(m,y,b,C,I){var j=m.data,B=m.r,x=l+B;if(j){if(j.index>g.index){var k=f-j.x-j.vx,z=p-j.y-j.vy,D=k*k+z*z;D<x*x&&(k===0&&(k=S(o),D+=k*k),z===0&&(z=S(o),D+=z*z),D=(x-(D=Math.sqrt(D)))/D*s,g.vx+=(k*=D)*(x=(B*=B)/(a+B)),g.vy+=(z*=D)*x,j.vx-=k*(x=1-x),j.vy-=z*x)}return}return y>f+x||C<f-x||b>p+x||I<p-x}}function d(i){if(i.data)return i.r=n[i.data.index];for(var v=i.r=0;v<4;++v)i[v]&&i[v].r>i.r&&(i.r=i[v].r)}function _(){if(e){var i,v=e.length,N;for(n=new Array(v),i=0;i<v;++i)N=e[i],n[N.index]=+t(N,i,e)}}return c.initialize=function(i,v){e=i,o=v,_()},c.iterations=function(i){return arguments.length?(r=+i,c):r},c.strength=function(i){return arguments.length?(s=+i,c):s},c.radius=function(i){return arguments.length?(t=typeof i=="function"?i:G(+i),_(),c):t},c}function Et(t){return t.index}function W(t,e){var n=t.get(e);if(!n)throw new Error("node not found: "+e);return n}function Bt(t){var e=Et,n=N,o,s=G(30),r,c,d,_,i,v=1;t==null&&(t=[]);function N(a){return 1/Math.min(d[a.source.index],d[a.target.index])}function g(a){for(var u=0,h=t.length;u<v;++u)for(var m=0,y,b,C,I,j,B,x;m<h;++m)y=t[m],b=y.source,C=y.target,I=C.x+C.vx-b.x-b.vx||S(i),j=C.y+C.vy-b.y-b.vy||S(i),B=Math.sqrt(I*I+j*j),B=(B-r[m])/B*a*o[m],I*=B,j*=B,C.vx-=I*(x=_[m]),C.vy-=j*x,b.vx+=I*(x=1-x),b.vy+=j*x}function f(){if(c){var a,u=c.length,h=t.length,m=new Map(c.map((b,C)=>[e(b,C,c),b])),y;for(a=0,d=new Array(u);a<h;++a)y=t[a],y.index=a,typeof y.source!="object"&&(y.source=W(m,y.source)),typeof y.target!="object"&&(y.target=W(m,y.target)),d[y.source.index]=(d[y.source.index]||0)+1,d[y.target.index]=(d[y.target.index]||0)+1;for(a=0,_=new Array(h);a<h;++a)y=t[a],_[a]=d[y.source.index]/(d[y.source.index]+d[y.target.index]);o=new Array(h),p(),r=new Array(h),l()}}function p(){if(c)for(var a=0,u=t.length;a<u;++a)o[a]=+n(t[a],a,t)}function l(){if(c)for(var a=0,u=t.length;a<u;++a)r[a]=+s(t[a],a,t)}return g.initialize=function(a,u){c=a,i=u,f()},g.links=function(a){return arguments.length?(t=a,f(),g):t},g.id=function(a){return arguments.length?(e=a,g):e},g.iterations=function(a){return arguments.length?(v=+a,g):v},g.strength=function(a){return arguments.length?(n=typeof a=="function"?a:G(+a),p(),g):n},g.distance=function(a){return arguments.length?(s=typeof a=="function"?a:G(+a),l(),g):s},g}const Dt=1664525,zt=1013904223,Q=4294967296;function Tt(){let t=1;return()=>(t=(Dt*t+zt)%Q)/Q}function St(t){return t.x}function Ft(t){return t.y}var $t=10,Gt=Math.PI*(3-Math.sqrt(5));function Ot(t){var e,n=1,o=.001,s=1-Math.pow(o,1/300),r=0,c=.6,d=new Map,_=nt(N),i=rt("tick","end"),v=Tt();t==null&&(t=[]);function N(){g(),i.call("tick",e),n<o&&(_.stop(),i.call("end",e))}function g(l){var a,u=t.length,h;l===void 0&&(l=1);for(var m=0;m<l;++m)for(n+=(r-n)*s,d.forEach(function(y){y(n)}),a=0;a<u;++a)h=t[a],h.fx==null?h.x+=h.vx*=c:(h.x=h.fx,h.vx=0),h.fy==null?h.y+=h.vy*=c:(h.y=h.fy,h.vy=0);return e}function f(){for(var l=0,a=t.length,u;l<a;++l){if(u=t[l],u.index=l,u.fx!=null&&(u.x=u.fx),u.fy!=null&&(u.y=u.fy),isNaN(u.x)||isNaN(u.y)){var h=$t*Math.sqrt(.5+l),m=l*Gt;u.x=h*Math.cos(m),u.y=h*Math.sin(m)}(isNaN(u.vx)||isNaN(u.vy))&&(u.vx=u.vy=0)}}function p(l){return l.initialize&&l.initialize(t,v),l}return f(),e={tick:g,restart:function(){return _.restart(N),e},stop:function(){return _.stop(),e},nodes:function(l){return arguments.length?(t=l,f(),d.forEach(p),e):t},alpha:function(l){return arguments.length?(n=+l,e):n},alphaMin:function(l){return arguments.length?(o=+l,e):o},alphaDecay:function(l){return arguments.length?(s=+l,e):+s},alphaTarget:function(l){return arguments.length?(r=+l,e):r},velocityDecay:function(l){return arguments.length?(c=1-l,e):1-c},randomSource:function(l){return arguments.length?(v=l,d.forEach(p),e):v},force:function(l,a){return arguments.length>1?(a==null?d.delete(l):d.set(l,p(a)),e):d.get(l)},find:function(l,a,u){var h=0,m=t.length,y,b,C,I,j;for(u==null?u=1/0:u*=u,h=0;h<m;++h)I=t[h],y=l-I.x,b=a-I.y,C=y*y+b*b,C<u&&(j=I,u=C);return j},on:function(l,a){return arguments.length>1?(i.on(l,a),e):i.on(l)}}}function Kt(){var t,e,n,o,s=G(-30),r,c=1,d=1/0,_=.81;function i(f){var p,l=t.length,a=P(t,St,Ft).visitAfter(N);for(o=f,p=0;p<l;++p)e=t[p],a.visit(g)}function v(){if(t){var f,p=t.length,l;for(r=new Array(p),f=0;f<p;++f)l=t[f],r[l.index]=+s(l,f,t)}}function N(f){var p=0,l,a,u=0,h,m,y;if(f.length){for(h=m=y=0;y<4;++y)(l=f[y])&&(a=Math.abs(l.value))&&(p+=l.value,u+=a,h+=a*l.x,m+=a*l.y);f.x=h/u,f.y=m/u}else{l=f,l.x=l.data.x,l.y=l.data.y;do p+=r[l.data.index];while(l=l.next)}f.value=p}function g(f,p,l,a){if(!f.value)return!0;var u=f.x-e.x,h=f.y-e.y,m=a-p,y=u*u+h*h;if(m*m/_<y)return y<d&&(u===0&&(u=S(n),y+=u*u),h===0&&(h=S(n),y+=h*h),y<c&&(y=Math.sqrt(c*y)),e.vx+=u*f.value*o/y,e.vy+=h*f.value*o/y),!0;if(f.length||y>=d)return;(f.data!==e||f.next)&&(u===0&&(u=S(n),y+=u*u),h===0&&(h=S(n),y+=h*h),y<c&&(y=Math.sqrt(c*y)));do f.data!==e&&(m=r[f.data.index]*o/y,e.vx+=u*m,e.vy+=h*m);while(f=f.next)}return i.initialize=function(f,p){t=f,n=p,v()},i.strength=function(f){return arguments.length?(s=typeof f=="function"?f:G(+f),v(),i):s},i.distanceMin=function(f){return arguments.length?(c=f*f,i):Math.sqrt(c)},i.distanceMax=function(f){return arguments.length?(d=f*f,i):Math.sqrt(d)},i.theta=function(f){return arguments.length?(_=f*f,i):Math.sqrt(_)},i}const Ht="_graphContainer_13vy2_1",Pt="_svg_13vy2_10",Ut="_link_13vy2_18",Xt="_node_13vy2_30",Yt="_nodeCard_13vy2_37",Wt="_nodeLabel_13vy2_43",Qt="_selected_13vy2_47",Vt="_dimmed_13vy2_54",Zt="_dimmedLink_13vy2_59",Jt="_nodeIndicator_13vy2_71",qt="_nodeBadge_13vy2_85",E={graphContainer:Ht,svg:Pt,link:Ut,node:Xt,nodeCard:Yt,nodeLabel:Wt,selected:Qt,dimmed:Vt,dimmedLink:Zt,nodeIndicator:Jt,nodeBadge:qt},H={reference:"#4A9EFF",decision:"#22C55E",insight:"#EAB308",concept:"#A855F7",snippet:"#6B7280"};function V(t){return t.kind==="reference"?H.reference:H[t.category??"insight"]??H.insight}const F=200,$=52,Z=12,K=40,J=3;function te(t,e){if(e.width<=0||e.height<=0)return;let n=1/0,o=-1/0,s=1/0,r=-1/0;for(const l of t){const a=l.x??0,u=l.y??0;a<n&&(n=a),a>o&&(o=a),u<s&&(s=u),u>r&&(r=u)}const c=n-F/2-K,d=o+F/2+K,_=s-$/2-K,i=r+$/2+K,v=d-c,N=i-_,g=Math.min(e.width/v,e.height/N,1),f=(c+d)/2,p=(_+i)/2;return{translateX:e.width/2-f*g,translateY:e.height/2-p*g,scale:g}}function ee({graphData:t,selectedNodeId:e,onNodeClick:n,onNodeDoubleClick:o}){const s=A.useRef(null),r=A.useRef(null),c=A.useRef(void 0),d=A.useRef(void 0),_=A.useRef(void 0),i=A.useRef(void 0),v=A.useRef(e);v.current=e;const N=A.useRef(!1),[g,f]=A.useState({width:800,height:600}),p=A.useRef(0);A.useEffect(()=>{var y;const h=((y=s.current)==null?void 0:y.parentElement)??null;if(!h)return;const m=new ResizeObserver(b=>{for(const C of b)f({width:C.contentRect.width,height:C.contentRect.height})});return m.observe(h),f({width:h.clientWidth,height:h.clientHeight}),()=>{m.disconnect()}},[]),A.useEffect(()=>{if(!s.current||!r.current)return;const h=s.current,m=r.current,y=it().scaleExtent([.1,4]).filter(b=>b.type!=="dblclick").on("zoom",b=>{T(m).attr("transform",String(b.transform))});return T(h).call(y),d.current=y,()=>{T(h).on(".zoom",null)}},[]);const l=A.useRef(n);l.current=n;const a=A.useRef(o);a.current=o,A.useEffect(()=>{if(!r.current)return;const h=r.current;if(c.current&&(c.current.stop(),c.current=void 0),N.current=!1,t.nodes.length===0){T(h).selectAll("*").remove();return}const m=t.nodes.map(x=>({...x})),y=new Map(m.map(x=>[x.id,x])),b=t.links.filter(x=>y.has(x.source)&&y.has(x.target)).map(x=>({source:x.source,target:x.target,type:x.type}));T(h).selectAll("*").remove();const C=T(h).selectAll("line").data(b).enter().append("line").attr("class",E.link);C.append("title").text(x=>x.type),_.current=C;const I=T(h).selectAll("g.kg-node").data(m).enter().append("g").attr("class",`kg-node ${E.node}`).on("click",(x,k)=>{p.current>J||l.current(k.id)}).on("dblclick",(x,k)=>{a.current(k.id)});i.current=I,I.append("rect").attr("class",E.nodeCard).attr("width",F).attr("height",$).attr("rx",Z).attr("ry",Z).style("--node-color",x=>V(x)),I.append("rect").attr("class",E.nodeIndicator).attr("width",4).attr("height",$).attr("rx",2).attr("fill",x=>V(x)),I.append("text").attr("class",E.nodeLabel).attr("x",F/2).attr("y",$/2-4).attr("text-anchor","middle").attr("dominant-baseline","central").text(x=>x.label.length>26?x.label.substring(0,24)+"...":x.label),I.append("text").attr("class",E.nodeBadge).attr("x",F/2).attr("y",$-8).attr("text-anchor","middle").text(x=>(x.kind==="reference"?x.sourceType??"ref":x.category??"").toUpperCase());const j=Ot(m).force("link",Bt(b).id(x=>x.id).distance(140)).force("charge",Kt().strength(-400)).force("center",ht(g.width/2,g.height/2)).force("collide",Rt(F/2+16)).on("tick",()=>{C.attr("x1",x=>x.source.x??0).attr("y1",x=>x.source.y??0).attr("x2",x=>x.target.x??0).attr("y2",x=>x.target.y??0),I.attr("transform",x=>`translate(${(x.x??0)-F/2},${(x.y??0)-$/2})`)});c.current=j;const B=st().on("start",(x,k)=>{k.fx=k.x,k.fy=k.y,p.current=0}).on("drag",(x,k)=>{k.fx=x.x,k.fy=x.y,p.current+=Math.abs(x.dx)+Math.abs(x.dy),p.current>J&&j.alphaTarget()===0&&j.alphaTarget(.3).restart()}).on("end",(x,k)=>{x.active||j.alphaTarget(0),k.fx=void 0,k.fy=void 0});return I.call(B),j.on("end",()=>{if(s.current&&d.current&&m.length>0&&!N.current&&!v.current){N.current=!0;const x=te(m,g);if(!x)return;const{translateX:k,translateY:z,scale:D}=x,tt=d.current,et=X.translate(k,z).scale(D);T(s.current).transition().duration(500).call(tt.transform,et)}}),()=>{j.stop()}},[t,g]),A.useEffect(()=>{if(!r.current||!i.current||!_.current)return;if(!e){i.current.classed(E.dimmed,!1).classed(E.selected,!1),_.current.classed(E.dimmedLink,!1);return}const h=new Set([e]);_.current.each(m=>{const y=m.source.id,b=m.target.id;(y===e||b===e)&&(h.add(y),h.add(b))}),i.current.classed(E.selected,m=>m.id===e).classed(E.dimmed,m=>!h.has(m.id)),_.current.classed(E.dimmedLink,m=>{const y=m.source.id,b=m.target.id;return!h.has(y)||!h.has(b)})},[e,t]);const u=A.useCallback(()=>{if(!e||!c.current||!s.current||!d.current)return;const h=c.current.nodes().find(m=>m.id===e);if(h&&Number.isFinite(h.x)&&Number.isFinite(h.y)){const m=d.current,y=X.translate(g.width/2,g.height/2).scale(1.2).translate(-(h.x??0),-(h.y??0));T(s.current).transition().duration(500).call(m.transform,y)}},[e,g]);return A.useEffect(()=>{u()},[u]),w.jsx("div",{className:E.graphContainer,"data-testid":"knowledge-graph",children:w.jsxs("svg",{ref:s,width:g.width,height:g.height,className:E.svg,children:[w.jsx("defs",{children:w.jsxs("filter",{id:"glow",children:[w.jsx("feGaussianBlur",{stdDeviation:"3",result:"coloredBlur"}),w.jsxs("feMerge",{children:[w.jsx("feMergeNode",{in:"coloredBlur"}),w.jsx("feMergeNode",{in:"SourceGraphic"})]})]})}),w.jsx("g",{ref:r})]})})}const ne="_panel_1wumt_1",re="_header_1wumt_24",ie="_title_1wumt_32",se="_closeButton_1wumt_42",ae="_body_1wumt_55",oe="_badge_1wumt_61",ce="_section_1wumt_72",le="_sectionLabel_1wumt_76",ue="_content_1wumt_84",fe="_tags_1wumt_92",he="_tag_1wumt_92",de="_viewLink_1wumt_107",ge="_edgeList_1wumt_121",xe="_edgeItem_1wumt_127",ye="_edgeType_1wumt_136",_e="_edgeNodeLink_1wumt_142",ve="_timestamps_1wumt_154",M={panel:ne,header:re,title:ie,closeButton:se,body:ae,badge:oe,section:ce,sectionLabel:le,content:ue,tags:fe,tag:he,viewLink:de,edgeList:ge,edgeItem:xe,edgeType:ye,edgeNodeLink:_e,timestamps:ve};function me({detail:t,nodes:e,onClose:n,onSelectNode:o}){const s=at(),{node:r,edges:c}=t,d=A.useMemo(()=>new Map(e.map(i=>[i.id,i])),[e]);function _(){if(!(r.kind!=="reference"||!r.sourceId))switch(r.sourceType){case"task":s(ct(r.sourceId));break;case"session":s(ot(r.sourceId));break}}return w.jsxs("div",{className:M.panel,"data-testid":"knowledge-detail-panel",children:[w.jsxs("div",{className:M.header,children:[w.jsx("h3",{className:M.title,children:r.label}),w.jsx("button",{className:M.closeButton,onClick:n,"aria-label":"Close",children:"×"})]}),w.jsxs("div",{className:M.body,children:[w.jsx("div",{className:M.badge,children:r.kind==="reference"?`Reference (${r.sourceType})`:r.category}),r.content&&w.jsxs("div",{className:M.section,children:[w.jsx("div",{className:M.sectionLabel,children:"Content"}),w.jsx("p",{className:M.content,children:r.content})]}),r.tags&&r.tags.length>0&&w.jsxs("div",{className:M.section,children:[w.jsx("div",{className:M.sectionLabel,children:"Tags"}),w.jsx("div",{className:M.tags,children:r.tags.map(i=>w.jsx("span",{className:M.tag,children:i},i))})]}),r.kind==="reference"&&r.sourceId&&w.jsx("div",{className:M.section,children:w.jsx("button",{className:M.viewLink,onClick:_,children:"View in Grackle →"})}),c.length>0&&w.jsxs("div",{className:M.section,children:[w.jsxs("div",{className:M.sectionLabel,children:["Edges (",c.length,")"]}),w.jsx("ul",{className:M.edgeList,children:c.map(i=>{var g;const v=i.fromId===r.id?i.toId:i.fromId,N=`${i.fromId}:${i.toId}:${i.type}`;return w.jsxs("li",{className:M.edgeItem,"data-testid":"edge-item",children:[w.jsx("span",{className:M.edgeType,"data-testid":"edge-type",children:i.type}),w.jsx("button",{className:M.edgeNodeLink,"data-testid":"edge-node-link",onClick:()=>{o(v)},children:((g=d.get(v))==null?void 0:g.label)??`${v.substring(0,8)}...`})]},N)})})]}),w.jsxs("div",{className:M.timestamps,children:[r.createdAt&&w.jsxs("div",{children:["Created: ",new Date(r.createdAt).toLocaleDateString()]}),r.updatedAt&&w.jsxs("div",{children:["Updated: ",new Date(r.updatedAt).toLocaleDateString()]})]})]})]})}const pe="_layout_1wp49_1",we="_graphArea_1wp49_8",Ne="_empty_1wp49_15",be="_retryButton_1wp49_30",O={layout:pe,graphArea:we,empty:Ne,retryButton:be};function Me(){const{knowledge:t}=lt(),{loadRecent:e,loadError:n,loading:o,graphData:s,selectedId:r,selectedNode:c}=t,{selectNode:d,expandNode:_,clearSelection:i}=t;A.useEffect(()=>{e().catch(()=>{})},[e]);const v=A.useCallback(()=>{e().catch(()=>{})},[e]),N=A.useCallback(u=>{d(u).catch(()=>{})},[d]),g=A.useCallback(u=>{_(u).catch(()=>{})},[_]),f=A.useCallback(()=>{i()},[i]),p=[{label:"Knowledge",url:ft}],l=n!==void 0&&!o,a=!l&&s.nodes.length===0&&!o;return w.jsxs("div",{className:O.layout,"data-testid":"knowledge-page",children:[w.jsx(ut,{segments:p}),w.jsxs("div",{className:O.graphArea,children:[l?w.jsxs("div",{className:O.empty,"data-testid":"knowledge-error",children:[n==="unavailable"?w.jsxs(w.Fragment,{children:[w.jsx("p",{children:"Knowledge server can't be reached."}),w.jsx("p",{children:"The knowledge graph database (Neo4j) isn't running or is unreachable. Start it, then retry."})]}):w.jsxs(w.Fragment,{children:[w.jsx("p",{children:"Failed to load the knowledge graph."}),w.jsx("p",{children:"Something went wrong while loading knowledge nodes."})]}),w.jsx("button",{type:"button",className:O.retryButton,onClick:v,"data-testid":"knowledge-retry",children:"Retry"})]}):a?w.jsxs("div",{className:O.empty,children:[w.jsx("p",{children:"No knowledge nodes found."}),w.jsx("p",{children:"Create knowledge via MCP tools or let agents discover it during tasks."})]}):w.jsx(ee,{graphData:s,selectedNodeId:r,onNodeClick:N,onNodeDoubleClick:g}),c&&r&&w.jsx(me,{detail:c,nodes:s.nodes,onClose:f,onSelectNode:N})]})]})}export{Me as KnowledgePage};
|
|
2
|
-
//# sourceMappingURL=KnowledgePage-
|
|
1
|
+
import{t as nt,l as rt,b as A,z as it,s as T,m as st,n as X,j as w}from"./dagview-B70jDsRo.js";import{u as at,s as ot,t as ct,a as lt,B as ut,K as ft}from"./index-Cod3rLvs.js";import"./grpc-D84KWgEK.js";import"./markdown-CPoGw-1N.js";function ht(t,e){var n,o=1;t==null&&(t=0),e==null&&(e=0);function s(){var r,c=n.length,d,_=0,i=0;for(r=0;r<c;++r)d=n[r],_+=d.x,i+=d.y;for(_=(_/c-t)*o,i=(i/c-e)*o,r=0;r<c;++r)d=n[r],d.x-=_,d.y-=i}return s.initialize=function(r){n=r},s.x=function(r){return arguments.length?(t=+r,s):t},s.y=function(r){return arguments.length?(e=+r,s):e},s.strength=function(r){return arguments.length?(o=+r,s):o},s}function dt(t){const e=+this._x.call(null,t),n=+this._y.call(null,t);return q(this.cover(e,n),e,n,t)}function q(t,e,n,o){if(isNaN(e)||isNaN(n))return t;var s,r=t._root,c={data:o},d=t._x0,_=t._y0,i=t._x1,v=t._y1,N,g,f,p,l,a,u,h;if(!r)return t._root=c,t;for(;r.length;)if((l=e>=(N=(d+i)/2))?d=N:i=N,(a=n>=(g=(_+v)/2))?_=g:v=g,s=r,!(r=r[u=a<<1|l]))return s[u]=c,t;if(f=+t._x.call(null,r.data),p=+t._y.call(null,r.data),e===f&&n===p)return c.next=r,s?s[u]=c:t._root=c,t;do s=s?s[u]=new Array(4):t._root=new Array(4),(l=e>=(N=(d+i)/2))?d=N:i=N,(a=n>=(g=(_+v)/2))?_=g:v=g;while((u=a<<1|l)===(h=(p>=g)<<1|f>=N));return s[h]=r,s[u]=c,t}function gt(t){var e,n,o=t.length,s,r,c=new Array(o),d=new Array(o),_=1/0,i=1/0,v=-1/0,N=-1/0;for(n=0;n<o;++n)isNaN(s=+this._x.call(null,e=t[n]))||isNaN(r=+this._y.call(null,e))||(c[n]=s,d[n]=r,s<_&&(_=s),s>v&&(v=s),r<i&&(i=r),r>N&&(N=r));if(_>v||i>N)return this;for(this.cover(_,i).cover(v,N),n=0;n<o;++n)q(this,c[n],d[n],t[n]);return this}function xt(t,e){if(isNaN(t=+t)||isNaN(e=+e))return this;var n=this._x0,o=this._y0,s=this._x1,r=this._y1;if(isNaN(n))s=(n=Math.floor(t))+1,r=(o=Math.floor(e))+1;else{for(var c=s-n||1,d=this._root,_,i;n>t||t>=s||o>e||e>=r;)switch(i=(e<o)<<1|t<n,_=new Array(4),_[i]=d,d=_,c*=2,i){case 0:s=n+c,r=o+c;break;case 1:n=s-c,r=o+c;break;case 2:s=n+c,o=r-c;break;case 3:n=s-c,o=r-c;break}this._root&&this._root.length&&(this._root=d)}return this._x0=n,this._y0=o,this._x1=s,this._y1=r,this}function yt(){var t=[];return this.visit(function(e){if(!e.length)do t.push(e.data);while(e=e.next)}),t}function _t(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 L(t,e,n,o,s){this.node=t,this.x0=e,this.y0=n,this.x1=o,this.y1=s}function vt(t,e,n){var o,s=this._x0,r=this._y0,c,d,_,i,v=this._x1,N=this._y1,g=[],f=this._root,p,l;for(f&&g.push(new L(f,s,r,v,N)),n==null?n=1/0:(s=t-n,r=e-n,v=t+n,N=e+n,n*=n);p=g.pop();)if(!(!(f=p.node)||(c=p.x0)>v||(d=p.y0)>N||(_=p.x1)<s||(i=p.y1)<r))if(f.length){var a=(c+_)/2,u=(d+i)/2;g.push(new L(f[3],a,u,_,i),new L(f[2],c,u,a,i),new L(f[1],a,d,_,u),new L(f[0],c,d,a,u)),(l=(e>=u)<<1|t>=a)&&(p=g[g.length-1],g[g.length-1]=g[g.length-1-l],g[g.length-1-l]=p)}else{var h=t-+this._x.call(null,f.data),m=e-+this._y.call(null,f.data),y=h*h+m*m;if(y<n){var b=Math.sqrt(n=y);s=t-b,r=e-b,v=t+b,N=e+b,o=f.data}}return o}function mt(t){if(isNaN(v=+this._x.call(null,t))||isNaN(N=+this._y.call(null,t)))return this;var e,n=this._root,o,s,r,c=this._x0,d=this._y0,_=this._x1,i=this._y1,v,N,g,f,p,l,a,u;if(!n)return this;if(n.length)for(;;){if((p=v>=(g=(c+_)/2))?c=g:_=g,(l=N>=(f=(d+i)/2))?d=f:i=f,e=n,!(n=n[a=l<<1|p]))return this;if(!n.length)break;(e[a+1&3]||e[a+2&3]||e[a+3&3])&&(o=e,u=a)}for(;n.data!==t;)if(s=n,!(n=n.next))return this;return(r=n.next)&&delete n.next,s?(r?s.next=r:delete s.next,this):e?(r?e[a]=r:delete e[a],(n=e[0]||e[1]||e[2]||e[3])&&n===(e[3]||e[2]||e[1]||e[0])&&!n.length&&(o?o[u]=n:this._root=n),this):(this._root=r,this)}function pt(t){for(var e=0,n=t.length;e<n;++e)this.remove(t[e]);return this}function wt(){return this._root}function Nt(){var t=0;return this.visit(function(e){if(!e.length)do++t;while(e=e.next)}),t}function bt(t){var e=[],n,o=this._root,s,r,c,d,_;for(o&&e.push(new L(o,this._x0,this._y0,this._x1,this._y1));n=e.pop();)if(!t(o=n.node,r=n.x0,c=n.y0,d=n.x1,_=n.y1)&&o.length){var i=(r+d)/2,v=(c+_)/2;(s=o[3])&&e.push(new L(s,i,v,d,_)),(s=o[2])&&e.push(new L(s,r,v,i,_)),(s=o[1])&&e.push(new L(s,i,c,d,v)),(s=o[0])&&e.push(new L(s,r,c,i,v))}return this}function jt(t){var e=[],n=[],o;for(this._root&&e.push(new L(this._root,this._x0,this._y0,this._x1,this._y1));o=e.pop();){var s=o.node;if(s.length){var r,c=o.x0,d=o.y0,_=o.x1,i=o.y1,v=(c+_)/2,N=(d+i)/2;(r=s[0])&&e.push(new L(r,c,d,v,N)),(r=s[1])&&e.push(new L(r,v,d,_,N)),(r=s[2])&&e.push(new L(r,c,N,v,i)),(r=s[3])&&e.push(new L(r,v,N,_,i))}n.push(o)}for(;o=n.pop();)t(o.node,o.x0,o.y0,o.x1,o.y1);return this}function kt(t){return t[0]}function At(t){return arguments.length?(this._x=t,this):this._x}function Ct(t){return t[1]}function Mt(t){return arguments.length?(this._y=t,this):this._y}function P(t,e,n){var o=new U(e??kt,n??Ct,NaN,NaN,NaN,NaN);return t==null?o:o.addAll(t)}function U(t,e,n,o,s,r){this._x=t,this._y=e,this._x0=n,this._y0=o,this._x1=s,this._y1=r,this._root=void 0}function Y(t){for(var e={data:t.data},n=e;t=t.next;)n=n.next={data:t.data};return e}var R=P.prototype=U.prototype;R.copy=function(){var t=new U(this._x,this._y,this._x0,this._y0,this._x1,this._y1),e=this._root,n,o;if(!e)return t;if(!e.length)return t._root=Y(e),t;for(n=[{source:e,target:t._root=new Array(4)}];e=n.pop();)for(var s=0;s<4;++s)(o=e.source[s])&&(o.length?n.push({source:o,target:e.target[s]=new Array(4)}):e.target[s]=Y(o));return t};R.add=dt;R.addAll=gt;R.cover=xt;R.data=yt;R.extent=_t;R.find=vt;R.remove=mt;R.removeAll=pt;R.root=wt;R.size=Nt;R.visit=bt;R.visitAfter=jt;R.x=At;R.y=Mt;function G(t){return function(){return t}}function S(t){return(t()-.5)*1e-6}function It(t){return t.x+t.vx}function Lt(t){return t.y+t.vy}function Rt(t){var e,n,o,s=1,r=1;typeof t!="function"&&(t=G(t==null?1:+t));function c(){for(var i,v=e.length,N,g,f,p,l,a,u=0;u<r;++u)for(N=P(e,It,Lt).visitAfter(d),i=0;i<v;++i)g=e[i],l=n[g.index],a=l*l,f=g.x+g.vx,p=g.y+g.vy,N.visit(h);function h(m,y,b,C,I){var j=m.data,B=m.r,x=l+B;if(j){if(j.index>g.index){var k=f-j.x-j.vx,z=p-j.y-j.vy,D=k*k+z*z;D<x*x&&(k===0&&(k=S(o),D+=k*k),z===0&&(z=S(o),D+=z*z),D=(x-(D=Math.sqrt(D)))/D*s,g.vx+=(k*=D)*(x=(B*=B)/(a+B)),g.vy+=(z*=D)*x,j.vx-=k*(x=1-x),j.vy-=z*x)}return}return y>f+x||C<f-x||b>p+x||I<p-x}}function d(i){if(i.data)return i.r=n[i.data.index];for(var v=i.r=0;v<4;++v)i[v]&&i[v].r>i.r&&(i.r=i[v].r)}function _(){if(e){var i,v=e.length,N;for(n=new Array(v),i=0;i<v;++i)N=e[i],n[N.index]=+t(N,i,e)}}return c.initialize=function(i,v){e=i,o=v,_()},c.iterations=function(i){return arguments.length?(r=+i,c):r},c.strength=function(i){return arguments.length?(s=+i,c):s},c.radius=function(i){return arguments.length?(t=typeof i=="function"?i:G(+i),_(),c):t},c}function Et(t){return t.index}function W(t,e){var n=t.get(e);if(!n)throw new Error("node not found: "+e);return n}function Bt(t){var e=Et,n=N,o,s=G(30),r,c,d,_,i,v=1;t==null&&(t=[]);function N(a){return 1/Math.min(d[a.source.index],d[a.target.index])}function g(a){for(var u=0,h=t.length;u<v;++u)for(var m=0,y,b,C,I,j,B,x;m<h;++m)y=t[m],b=y.source,C=y.target,I=C.x+C.vx-b.x-b.vx||S(i),j=C.y+C.vy-b.y-b.vy||S(i),B=Math.sqrt(I*I+j*j),B=(B-r[m])/B*a*o[m],I*=B,j*=B,C.vx-=I*(x=_[m]),C.vy-=j*x,b.vx+=I*(x=1-x),b.vy+=j*x}function f(){if(c){var a,u=c.length,h=t.length,m=new Map(c.map((b,C)=>[e(b,C,c),b])),y;for(a=0,d=new Array(u);a<h;++a)y=t[a],y.index=a,typeof y.source!="object"&&(y.source=W(m,y.source)),typeof y.target!="object"&&(y.target=W(m,y.target)),d[y.source.index]=(d[y.source.index]||0)+1,d[y.target.index]=(d[y.target.index]||0)+1;for(a=0,_=new Array(h);a<h;++a)y=t[a],_[a]=d[y.source.index]/(d[y.source.index]+d[y.target.index]);o=new Array(h),p(),r=new Array(h),l()}}function p(){if(c)for(var a=0,u=t.length;a<u;++a)o[a]=+n(t[a],a,t)}function l(){if(c)for(var a=0,u=t.length;a<u;++a)r[a]=+s(t[a],a,t)}return g.initialize=function(a,u){c=a,i=u,f()},g.links=function(a){return arguments.length?(t=a,f(),g):t},g.id=function(a){return arguments.length?(e=a,g):e},g.iterations=function(a){return arguments.length?(v=+a,g):v},g.strength=function(a){return arguments.length?(n=typeof a=="function"?a:G(+a),p(),g):n},g.distance=function(a){return arguments.length?(s=typeof a=="function"?a:G(+a),l(),g):s},g}const Dt=1664525,zt=1013904223,Q=4294967296;function Tt(){let t=1;return()=>(t=(Dt*t+zt)%Q)/Q}function St(t){return t.x}function Ft(t){return t.y}var $t=10,Gt=Math.PI*(3-Math.sqrt(5));function Ot(t){var e,n=1,o=.001,s=1-Math.pow(o,1/300),r=0,c=.6,d=new Map,_=nt(N),i=rt("tick","end"),v=Tt();t==null&&(t=[]);function N(){g(),i.call("tick",e),n<o&&(_.stop(),i.call("end",e))}function g(l){var a,u=t.length,h;l===void 0&&(l=1);for(var m=0;m<l;++m)for(n+=(r-n)*s,d.forEach(function(y){y(n)}),a=0;a<u;++a)h=t[a],h.fx==null?h.x+=h.vx*=c:(h.x=h.fx,h.vx=0),h.fy==null?h.y+=h.vy*=c:(h.y=h.fy,h.vy=0);return e}function f(){for(var l=0,a=t.length,u;l<a;++l){if(u=t[l],u.index=l,u.fx!=null&&(u.x=u.fx),u.fy!=null&&(u.y=u.fy),isNaN(u.x)||isNaN(u.y)){var h=$t*Math.sqrt(.5+l),m=l*Gt;u.x=h*Math.cos(m),u.y=h*Math.sin(m)}(isNaN(u.vx)||isNaN(u.vy))&&(u.vx=u.vy=0)}}function p(l){return l.initialize&&l.initialize(t,v),l}return f(),e={tick:g,restart:function(){return _.restart(N),e},stop:function(){return _.stop(),e},nodes:function(l){return arguments.length?(t=l,f(),d.forEach(p),e):t},alpha:function(l){return arguments.length?(n=+l,e):n},alphaMin:function(l){return arguments.length?(o=+l,e):o},alphaDecay:function(l){return arguments.length?(s=+l,e):+s},alphaTarget:function(l){return arguments.length?(r=+l,e):r},velocityDecay:function(l){return arguments.length?(c=1-l,e):1-c},randomSource:function(l){return arguments.length?(v=l,d.forEach(p),e):v},force:function(l,a){return arguments.length>1?(a==null?d.delete(l):d.set(l,p(a)),e):d.get(l)},find:function(l,a,u){var h=0,m=t.length,y,b,C,I,j;for(u==null?u=1/0:u*=u,h=0;h<m;++h)I=t[h],y=l-I.x,b=a-I.y,C=y*y+b*b,C<u&&(j=I,u=C);return j},on:function(l,a){return arguments.length>1?(i.on(l,a),e):i.on(l)}}}function Kt(){var t,e,n,o,s=G(-30),r,c=1,d=1/0,_=.81;function i(f){var p,l=t.length,a=P(t,St,Ft).visitAfter(N);for(o=f,p=0;p<l;++p)e=t[p],a.visit(g)}function v(){if(t){var f,p=t.length,l;for(r=new Array(p),f=0;f<p;++f)l=t[f],r[l.index]=+s(l,f,t)}}function N(f){var p=0,l,a,u=0,h,m,y;if(f.length){for(h=m=y=0;y<4;++y)(l=f[y])&&(a=Math.abs(l.value))&&(p+=l.value,u+=a,h+=a*l.x,m+=a*l.y);f.x=h/u,f.y=m/u}else{l=f,l.x=l.data.x,l.y=l.data.y;do p+=r[l.data.index];while(l=l.next)}f.value=p}function g(f,p,l,a){if(!f.value)return!0;var u=f.x-e.x,h=f.y-e.y,m=a-p,y=u*u+h*h;if(m*m/_<y)return y<d&&(u===0&&(u=S(n),y+=u*u),h===0&&(h=S(n),y+=h*h),y<c&&(y=Math.sqrt(c*y)),e.vx+=u*f.value*o/y,e.vy+=h*f.value*o/y),!0;if(f.length||y>=d)return;(f.data!==e||f.next)&&(u===0&&(u=S(n),y+=u*u),h===0&&(h=S(n),y+=h*h),y<c&&(y=Math.sqrt(c*y)));do f.data!==e&&(m=r[f.data.index]*o/y,e.vx+=u*m,e.vy+=h*m);while(f=f.next)}return i.initialize=function(f,p){t=f,n=p,v()},i.strength=function(f){return arguments.length?(s=typeof f=="function"?f:G(+f),v(),i):s},i.distanceMin=function(f){return arguments.length?(c=f*f,i):Math.sqrt(c)},i.distanceMax=function(f){return arguments.length?(d=f*f,i):Math.sqrt(d)},i.theta=function(f){return arguments.length?(_=f*f,i):Math.sqrt(_)},i}const Ht="_graphContainer_13vy2_1",Pt="_svg_13vy2_10",Ut="_link_13vy2_18",Xt="_node_13vy2_30",Yt="_nodeCard_13vy2_37",Wt="_nodeLabel_13vy2_43",Qt="_selected_13vy2_47",Vt="_dimmed_13vy2_54",Zt="_dimmedLink_13vy2_59",Jt="_nodeIndicator_13vy2_71",qt="_nodeBadge_13vy2_85",E={graphContainer:Ht,svg:Pt,link:Ut,node:Xt,nodeCard:Yt,nodeLabel:Wt,selected:Qt,dimmed:Vt,dimmedLink:Zt,nodeIndicator:Jt,nodeBadge:qt},H={reference:"#4A9EFF",decision:"#22C55E",insight:"#EAB308",concept:"#A855F7",snippet:"#6B7280"};function V(t){return t.kind==="reference"?H.reference:H[t.category??"insight"]??H.insight}const F=200,$=52,Z=12,K=40,J=3;function te(t,e){if(e.width<=0||e.height<=0)return;let n=1/0,o=-1/0,s=1/0,r=-1/0;for(const l of t){const a=l.x??0,u=l.y??0;a<n&&(n=a),a>o&&(o=a),u<s&&(s=u),u>r&&(r=u)}const c=n-F/2-K,d=o+F/2+K,_=s-$/2-K,i=r+$/2+K,v=d-c,N=i-_,g=Math.min(e.width/v,e.height/N,1),f=(c+d)/2,p=(_+i)/2;return{translateX:e.width/2-f*g,translateY:e.height/2-p*g,scale:g}}function ee({graphData:t,selectedNodeId:e,onNodeClick:n,onNodeDoubleClick:o}){const s=A.useRef(null),r=A.useRef(null),c=A.useRef(void 0),d=A.useRef(void 0),_=A.useRef(void 0),i=A.useRef(void 0),v=A.useRef(e);v.current=e;const N=A.useRef(!1),[g,f]=A.useState({width:800,height:600}),p=A.useRef(0);A.useEffect(()=>{var y;const h=((y=s.current)==null?void 0:y.parentElement)??null;if(!h)return;const m=new ResizeObserver(b=>{for(const C of b)f({width:C.contentRect.width,height:C.contentRect.height})});return m.observe(h),f({width:h.clientWidth,height:h.clientHeight}),()=>{m.disconnect()}},[]),A.useEffect(()=>{if(!s.current||!r.current)return;const h=s.current,m=r.current,y=it().scaleExtent([.1,4]).filter(b=>b.type!=="dblclick").on("zoom",b=>{T(m).attr("transform",String(b.transform))});return T(h).call(y),d.current=y,()=>{T(h).on(".zoom",null)}},[]);const l=A.useRef(n);l.current=n;const a=A.useRef(o);a.current=o,A.useEffect(()=>{if(!r.current)return;const h=r.current;if(c.current&&(c.current.stop(),c.current=void 0),N.current=!1,t.nodes.length===0){T(h).selectAll("*").remove();return}const m=t.nodes.map(x=>({...x})),y=new Map(m.map(x=>[x.id,x])),b=t.links.filter(x=>y.has(x.source)&&y.has(x.target)).map(x=>({source:x.source,target:x.target,type:x.type}));T(h).selectAll("*").remove();const C=T(h).selectAll("line").data(b).enter().append("line").attr("class",E.link);C.append("title").text(x=>x.type),_.current=C;const I=T(h).selectAll("g.kg-node").data(m).enter().append("g").attr("class",`kg-node ${E.node}`).on("click",(x,k)=>{p.current>J||l.current(k.id)}).on("dblclick",(x,k)=>{a.current(k.id)});i.current=I,I.append("rect").attr("class",E.nodeCard).attr("width",F).attr("height",$).attr("rx",Z).attr("ry",Z).style("--node-color",x=>V(x)),I.append("rect").attr("class",E.nodeIndicator).attr("width",4).attr("height",$).attr("rx",2).attr("fill",x=>V(x)),I.append("text").attr("class",E.nodeLabel).attr("x",F/2).attr("y",$/2-4).attr("text-anchor","middle").attr("dominant-baseline","central").text(x=>x.label.length>26?x.label.substring(0,24)+"...":x.label),I.append("text").attr("class",E.nodeBadge).attr("x",F/2).attr("y",$-8).attr("text-anchor","middle").text(x=>(x.kind==="reference"?x.sourceType??"ref":x.category??"").toUpperCase());const j=Ot(m).force("link",Bt(b).id(x=>x.id).distance(140)).force("charge",Kt().strength(-400)).force("center",ht(g.width/2,g.height/2)).force("collide",Rt(F/2+16)).on("tick",()=>{C.attr("x1",x=>x.source.x??0).attr("y1",x=>x.source.y??0).attr("x2",x=>x.target.x??0).attr("y2",x=>x.target.y??0),I.attr("transform",x=>`translate(${(x.x??0)-F/2},${(x.y??0)-$/2})`)});c.current=j;const B=st().on("start",(x,k)=>{k.fx=k.x,k.fy=k.y,p.current=0}).on("drag",(x,k)=>{k.fx=x.x,k.fy=x.y,p.current+=Math.abs(x.dx)+Math.abs(x.dy),p.current>J&&j.alphaTarget()===0&&j.alphaTarget(.3).restart()}).on("end",(x,k)=>{x.active||j.alphaTarget(0),k.fx=void 0,k.fy=void 0});return I.call(B),j.on("end",()=>{if(s.current&&d.current&&m.length>0&&!N.current&&!v.current){N.current=!0;const x=te(m,g);if(!x)return;const{translateX:k,translateY:z,scale:D}=x,tt=d.current,et=X.translate(k,z).scale(D);T(s.current).transition().duration(500).call(tt.transform,et)}}),()=>{j.stop()}},[t,g]),A.useEffect(()=>{if(!r.current||!i.current||!_.current)return;if(!e){i.current.classed(E.dimmed,!1).classed(E.selected,!1),_.current.classed(E.dimmedLink,!1);return}const h=new Set([e]);_.current.each(m=>{const y=m.source.id,b=m.target.id;(y===e||b===e)&&(h.add(y),h.add(b))}),i.current.classed(E.selected,m=>m.id===e).classed(E.dimmed,m=>!h.has(m.id)),_.current.classed(E.dimmedLink,m=>{const y=m.source.id,b=m.target.id;return!h.has(y)||!h.has(b)})},[e,t]);const u=A.useCallback(()=>{if(!e||!c.current||!s.current||!d.current)return;const h=c.current.nodes().find(m=>m.id===e);if(h&&Number.isFinite(h.x)&&Number.isFinite(h.y)){const m=d.current,y=X.translate(g.width/2,g.height/2).scale(1.2).translate(-(h.x??0),-(h.y??0));T(s.current).transition().duration(500).call(m.transform,y)}},[e,g]);return A.useEffect(()=>{u()},[u]),w.jsx("div",{className:E.graphContainer,"data-testid":"knowledge-graph",children:w.jsxs("svg",{ref:s,width:g.width,height:g.height,className:E.svg,children:[w.jsx("defs",{children:w.jsxs("filter",{id:"glow",children:[w.jsx("feGaussianBlur",{stdDeviation:"3",result:"coloredBlur"}),w.jsxs("feMerge",{children:[w.jsx("feMergeNode",{in:"coloredBlur"}),w.jsx("feMergeNode",{in:"SourceGraphic"})]})]})}),w.jsx("g",{ref:r})]})})}const ne="_panel_1wumt_1",re="_header_1wumt_24",ie="_title_1wumt_32",se="_closeButton_1wumt_42",ae="_body_1wumt_55",oe="_badge_1wumt_61",ce="_section_1wumt_72",le="_sectionLabel_1wumt_76",ue="_content_1wumt_84",fe="_tags_1wumt_92",he="_tag_1wumt_92",de="_viewLink_1wumt_107",ge="_edgeList_1wumt_121",xe="_edgeItem_1wumt_127",ye="_edgeType_1wumt_136",_e="_edgeNodeLink_1wumt_142",ve="_timestamps_1wumt_154",M={panel:ne,header:re,title:ie,closeButton:se,body:ae,badge:oe,section:ce,sectionLabel:le,content:ue,tags:fe,tag:he,viewLink:de,edgeList:ge,edgeItem:xe,edgeType:ye,edgeNodeLink:_e,timestamps:ve};function me({detail:t,nodes:e,onClose:n,onSelectNode:o}){const s=at(),{node:r,edges:c}=t,d=A.useMemo(()=>new Map(e.map(i=>[i.id,i])),[e]);function _(){if(!(r.kind!=="reference"||!r.sourceId))switch(r.sourceType){case"task":s(ct(r.sourceId));break;case"session":s(ot(r.sourceId));break}}return w.jsxs("div",{className:M.panel,"data-testid":"knowledge-detail-panel",children:[w.jsxs("div",{className:M.header,children:[w.jsx("h3",{className:M.title,children:r.label}),w.jsx("button",{className:M.closeButton,onClick:n,"aria-label":"Close",children:"×"})]}),w.jsxs("div",{className:M.body,children:[w.jsx("div",{className:M.badge,children:r.kind==="reference"?`Reference (${r.sourceType})`:r.category}),r.content&&w.jsxs("div",{className:M.section,children:[w.jsx("div",{className:M.sectionLabel,children:"Content"}),w.jsx("p",{className:M.content,children:r.content})]}),r.tags&&r.tags.length>0&&w.jsxs("div",{className:M.section,children:[w.jsx("div",{className:M.sectionLabel,children:"Tags"}),w.jsx("div",{className:M.tags,children:r.tags.map(i=>w.jsx("span",{className:M.tag,children:i},i))})]}),r.kind==="reference"&&r.sourceId&&w.jsx("div",{className:M.section,children:w.jsx("button",{className:M.viewLink,onClick:_,children:"View in Grackle →"})}),c.length>0&&w.jsxs("div",{className:M.section,children:[w.jsxs("div",{className:M.sectionLabel,children:["Edges (",c.length,")"]}),w.jsx("ul",{className:M.edgeList,children:c.map(i=>{var g;const v=i.fromId===r.id?i.toId:i.fromId,N=`${i.fromId}:${i.toId}:${i.type}`;return w.jsxs("li",{className:M.edgeItem,"data-testid":"edge-item",children:[w.jsx("span",{className:M.edgeType,"data-testid":"edge-type",children:i.type}),w.jsx("button",{className:M.edgeNodeLink,"data-testid":"edge-node-link",onClick:()=>{o(v)},children:((g=d.get(v))==null?void 0:g.label)??`${v.substring(0,8)}...`})]},N)})})]}),w.jsxs("div",{className:M.timestamps,children:[r.createdAt&&w.jsxs("div",{children:["Created: ",new Date(r.createdAt).toLocaleDateString()]}),r.updatedAt&&w.jsxs("div",{children:["Updated: ",new Date(r.updatedAt).toLocaleDateString()]})]})]})]})}const pe="_layout_1wp49_1",we="_graphArea_1wp49_8",Ne="_empty_1wp49_15",be="_retryButton_1wp49_30",O={layout:pe,graphArea:we,empty:Ne,retryButton:be};function Me(){const{knowledge:t}=lt(),{loadRecent:e,loadError:n,loading:o,graphData:s,selectedId:r,selectedNode:c}=t,{selectNode:d,expandNode:_,clearSelection:i}=t;A.useEffect(()=>{e().catch(()=>{})},[e]);const v=A.useCallback(()=>{e().catch(()=>{})},[e]),N=A.useCallback(u=>{d(u).catch(()=>{})},[d]),g=A.useCallback(u=>{_(u).catch(()=>{})},[_]),f=A.useCallback(()=>{i()},[i]),p=[{label:"Knowledge",url:ft}],l=n!==void 0&&!o,a=!l&&s.nodes.length===0&&!o;return w.jsxs("div",{className:O.layout,"data-testid":"knowledge-page",children:[w.jsx(ut,{segments:p}),w.jsxs("div",{className:O.graphArea,children:[l?w.jsxs("div",{className:O.empty,"data-testid":"knowledge-error",children:[n==="unavailable"?w.jsxs(w.Fragment,{children:[w.jsx("p",{children:"Knowledge server can't be reached."}),w.jsx("p",{children:"The knowledge graph database (Neo4j) isn't running or is unreachable. Start it, then retry."})]}):w.jsxs(w.Fragment,{children:[w.jsx("p",{children:"Failed to load the knowledge graph."}),w.jsx("p",{children:"Something went wrong while loading knowledge nodes."})]}),w.jsx("button",{type:"button",className:O.retryButton,onClick:v,"data-testid":"knowledge-retry",children:"Retry"})]}):a?w.jsxs("div",{className:O.empty,children:[w.jsx("p",{children:"No knowledge nodes found."}),w.jsx("p",{children:"Create knowledge via MCP tools or let agents discover it during tasks."})]}):w.jsx(ee,{graphData:s,selectedNodeId:r,onNodeClick:N,onNodeDoubleClick:g}),c&&r&&w.jsx(me,{detail:c,nodes:s.nodes,onClose:f,onSelectNode:N})]})]})}export{Me as KnowledgePage};
|
|
2
|
+
//# sourceMappingURL=KnowledgePage-C3HjBtgM.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"KnowledgePage-BLc0jzI4.js","sources":["../../../../common/temp/node_modules/.pnpm/d3-force@3.0.0/node_modules/d3-force/src/center.js","../../../../common/temp/node_modules/.pnpm/d3-quadtree@3.0.1/node_modules/d3-quadtree/src/add.js","../../../../common/temp/node_modules/.pnpm/d3-quadtree@3.0.1/node_modules/d3-quadtree/src/cover.js","../../../../common/temp/node_modules/.pnpm/d3-quadtree@3.0.1/node_modules/d3-quadtree/src/data.js","../../../../common/temp/node_modules/.pnpm/d3-quadtree@3.0.1/node_modules/d3-quadtree/src/extent.js","../../../../common/temp/node_modules/.pnpm/d3-quadtree@3.0.1/node_modules/d3-quadtree/src/quad.js","../../../../common/temp/node_modules/.pnpm/d3-quadtree@3.0.1/node_modules/d3-quadtree/src/find.js","../../../../common/temp/node_modules/.pnpm/d3-quadtree@3.0.1/node_modules/d3-quadtree/src/remove.js","../../../../common/temp/node_modules/.pnpm/d3-quadtree@3.0.1/node_modules/d3-quadtree/src/root.js","../../../../common/temp/node_modules/.pnpm/d3-quadtree@3.0.1/node_modules/d3-quadtree/src/size.js","../../../../common/temp/node_modules/.pnpm/d3-quadtree@3.0.1/node_modules/d3-quadtree/src/visit.js","../../../../common/temp/node_modules/.pnpm/d3-quadtree@3.0.1/node_modules/d3-quadtree/src/visitAfter.js","../../../../common/temp/node_modules/.pnpm/d3-quadtree@3.0.1/node_modules/d3-quadtree/src/x.js","../../../../common/temp/node_modules/.pnpm/d3-quadtree@3.0.1/node_modules/d3-quadtree/src/y.js","../../../../common/temp/node_modules/.pnpm/d3-quadtree@3.0.1/node_modules/d3-quadtree/src/quadtree.js","../../../../common/temp/node_modules/.pnpm/d3-force@3.0.0/node_modules/d3-force/src/constant.js","../../../../common/temp/node_modules/.pnpm/d3-force@3.0.0/node_modules/d3-force/src/jiggle.js","../../../../common/temp/node_modules/.pnpm/d3-force@3.0.0/node_modules/d3-force/src/collide.js","../../../../common/temp/node_modules/.pnpm/d3-force@3.0.0/node_modules/d3-force/src/link.js","../../../../common/temp/node_modules/.pnpm/d3-force@3.0.0/node_modules/d3-force/src/lcg.js","../../../../common/temp/node_modules/.pnpm/d3-force@3.0.0/node_modules/d3-force/src/simulation.js","../../../../common/temp/node_modules/.pnpm/d3-force@3.0.0/node_modules/d3-force/src/manyBody.js","../../../web-components/src/components/knowledge/KnowledgeGraph.tsx","../../../web-components/src/components/knowledge/KnowledgeDetailPanel.tsx","../../src/pages/KnowledgePage.tsx"],"sourcesContent":["export default function(x, y) {\n var nodes, strength = 1;\n\n if (x == null) x = 0;\n if (y == null) y = 0;\n\n function force() {\n var i,\n n = nodes.length,\n node,\n sx = 0,\n sy = 0;\n\n for (i = 0; i < n; ++i) {\n node = nodes[i], sx += node.x, sy += node.y;\n }\n\n for (sx = (sx / n - x) * strength, sy = (sy / n - y) * strength, i = 0; i < n; ++i) {\n node = nodes[i], node.x -= sx, node.y -= sy;\n }\n }\n\n force.initialize = function(_) {\n nodes = _;\n };\n\n force.x = function(_) {\n return arguments.length ? (x = +_, force) : x;\n };\n\n force.y = function(_) {\n return arguments.length ? (y = +_, force) : y;\n };\n\n force.strength = function(_) {\n return arguments.length ? (strength = +_, force) : strength;\n };\n\n return force;\n}\n","export default function(d) {\n const x = +this._x.call(null, d),\n y = +this._y.call(null, d);\n return add(this.cover(x, y), x, y, d);\n}\n\nfunction add(tree, x, y, d) {\n if (isNaN(x) || isNaN(y)) return tree; // ignore invalid points\n\n var parent,\n node = tree._root,\n leaf = {data: d},\n x0 = tree._x0,\n y0 = tree._y0,\n x1 = tree._x1,\n y1 = tree._y1,\n xm,\n ym,\n xp,\n yp,\n right,\n bottom,\n i,\n j;\n\n // If the tree is empty, initialize the root as a leaf.\n if (!node) return tree._root = leaf, tree;\n\n // Find the existing leaf for the new point, or add it.\n while (node.length) {\n if (right = x >= (xm = (x0 + x1) / 2)) x0 = xm; else x1 = xm;\n if (bottom = y >= (ym = (y0 + y1) / 2)) y0 = ym; else y1 = ym;\n if (parent = node, !(node = node[i = bottom << 1 | right])) return parent[i] = leaf, tree;\n }\n\n // Is the new point is exactly coincident with the existing point?\n xp = +tree._x.call(null, node.data);\n yp = +tree._y.call(null, node.data);\n if (x === xp && y === yp) return leaf.next = node, parent ? parent[i] = leaf : tree._root = leaf, tree;\n\n // Otherwise, split the leaf node until the old and new point are separated.\n do {\n parent = parent ? parent[i] = new Array(4) : tree._root = new Array(4);\n if (right = x >= (xm = (x0 + x1) / 2)) x0 = xm; else x1 = xm;\n if (bottom = y >= (ym = (y0 + y1) / 2)) y0 = ym; else y1 = ym;\n } while ((i = bottom << 1 | right) === (j = (yp >= ym) << 1 | (xp >= xm)));\n return parent[j] = node, parent[i] = leaf, tree;\n}\n\nexport function addAll(data) {\n var d, i, n = data.length,\n x,\n y,\n xz = new Array(n),\n yz = new Array(n),\n x0 = Infinity,\n y0 = Infinity,\n x1 = -Infinity,\n y1 = -Infinity;\n\n // Compute the points and their extent.\n for (i = 0; i < n; ++i) {\n if (isNaN(x = +this._x.call(null, d = data[i])) || isNaN(y = +this._y.call(null, d))) continue;\n xz[i] = x;\n yz[i] = y;\n if (x < x0) x0 = x;\n if (x > x1) x1 = x;\n if (y < y0) y0 = y;\n if (y > y1) y1 = y;\n }\n\n // If there were no (valid) points, abort.\n if (x0 > x1 || y0 > y1) return this;\n\n // Expand the tree to cover the new points.\n this.cover(x0, y0).cover(x1, y1);\n\n // Add the new points.\n for (i = 0; i < n; ++i) {\n add(this, xz[i], yz[i], data[i]);\n }\n\n return this;\n}\n","export default function(x, y) {\n if (isNaN(x = +x) || isNaN(y = +y)) return this; // ignore invalid points\n\n var x0 = this._x0,\n y0 = this._y0,\n x1 = this._x1,\n y1 = this._y1;\n\n // If the quadtree has no extent, initialize them.\n // Integer extent are necessary so that if we later double the extent,\n // the existing quadrant boundaries don’t change due to floating point error!\n if (isNaN(x0)) {\n x1 = (x0 = Math.floor(x)) + 1;\n y1 = (y0 = Math.floor(y)) + 1;\n }\n\n // Otherwise, double repeatedly to cover.\n else {\n var z = x1 - x0 || 1,\n node = this._root,\n parent,\n i;\n\n while (x0 > x || x >= x1 || y0 > y || y >= y1) {\n i = (y < y0) << 1 | (x < x0);\n parent = new Array(4), parent[i] = node, node = parent, z *= 2;\n switch (i) {\n case 0: x1 = x0 + z, y1 = y0 + z; break;\n case 1: x0 = x1 - z, y1 = y0 + z; break;\n case 2: x1 = x0 + z, y0 = y1 - z; break;\n case 3: x0 = x1 - z, y0 = y1 - z; break;\n }\n }\n\n if (this._root && this._root.length) this._root = node;\n }\n\n this._x0 = x0;\n this._y0 = y0;\n this._x1 = x1;\n this._y1 = y1;\n return this;\n}\n","export default function() {\n var data = [];\n this.visit(function(node) {\n if (!node.length) do data.push(node.data); while (node = node.next)\n });\n return data;\n}\n","export default function(_) {\n return arguments.length\n ? this.cover(+_[0][0], +_[0][1]).cover(+_[1][0], +_[1][1])\n : isNaN(this._x0) ? undefined : [[this._x0, this._y0], [this._x1, this._y1]];\n}\n","export default function(node, x0, y0, x1, y1) {\n this.node = node;\n this.x0 = x0;\n this.y0 = y0;\n this.x1 = x1;\n this.y1 = y1;\n}\n","import Quad from \"./quad.js\";\n\nexport default function(x, y, radius) {\n var data,\n x0 = this._x0,\n y0 = this._y0,\n x1,\n y1,\n x2,\n y2,\n x3 = this._x1,\n y3 = this._y1,\n quads = [],\n node = this._root,\n q,\n i;\n\n if (node) quads.push(new Quad(node, x0, y0, x3, y3));\n if (radius == null) radius = Infinity;\n else {\n x0 = x - radius, y0 = y - radius;\n x3 = x + radius, y3 = y + radius;\n radius *= radius;\n }\n\n while (q = quads.pop()) {\n\n // Stop searching if this quadrant can’t contain a closer node.\n if (!(node = q.node)\n || (x1 = q.x0) > x3\n || (y1 = q.y0) > y3\n || (x2 = q.x1) < x0\n || (y2 = q.y1) < y0) continue;\n\n // Bisect the current quadrant.\n if (node.length) {\n var xm = (x1 + x2) / 2,\n ym = (y1 + y2) / 2;\n\n quads.push(\n new Quad(node[3], xm, ym, x2, y2),\n new Quad(node[2], x1, ym, xm, y2),\n new Quad(node[1], xm, y1, x2, ym),\n new Quad(node[0], x1, y1, xm, ym)\n );\n\n // Visit the closest quadrant first.\n if (i = (y >= ym) << 1 | (x >= xm)) {\n q = quads[quads.length - 1];\n quads[quads.length - 1] = quads[quads.length - 1 - i];\n quads[quads.length - 1 - i] = q;\n }\n }\n\n // Visit this point. (Visiting coincident points isn’t necessary!)\n else {\n var dx = x - +this._x.call(null, node.data),\n dy = y - +this._y.call(null, node.data),\n d2 = dx * dx + dy * dy;\n if (d2 < radius) {\n var d = Math.sqrt(radius = d2);\n x0 = x - d, y0 = y - d;\n x3 = x + d, y3 = y + d;\n data = node.data;\n }\n }\n }\n\n return data;\n}\n","export default function(d) {\n if (isNaN(x = +this._x.call(null, d)) || isNaN(y = +this._y.call(null, d))) return this; // ignore invalid points\n\n var parent,\n node = this._root,\n retainer,\n previous,\n next,\n x0 = this._x0,\n y0 = this._y0,\n x1 = this._x1,\n y1 = this._y1,\n x,\n y,\n xm,\n ym,\n right,\n bottom,\n i,\n j;\n\n // If the tree is empty, initialize the root as a leaf.\n if (!node) return this;\n\n // Find the leaf node for the point.\n // While descending, also retain the deepest parent with a non-removed sibling.\n if (node.length) while (true) {\n if (right = x >= (xm = (x0 + x1) / 2)) x0 = xm; else x1 = xm;\n if (bottom = y >= (ym = (y0 + y1) / 2)) y0 = ym; else y1 = ym;\n if (!(parent = node, node = node[i = bottom << 1 | right])) return this;\n if (!node.length) break;\n if (parent[(i + 1) & 3] || parent[(i + 2) & 3] || parent[(i + 3) & 3]) retainer = parent, j = i;\n }\n\n // Find the point to remove.\n while (node.data !== d) if (!(previous = node, node = node.next)) return this;\n if (next = node.next) delete node.next;\n\n // If there are multiple coincident points, remove just the point.\n if (previous) return (next ? previous.next = next : delete previous.next), this;\n\n // If this is the root point, remove it.\n if (!parent) return this._root = next, this;\n\n // Remove this leaf.\n next ? parent[i] = next : delete parent[i];\n\n // If the parent now contains exactly one leaf, collapse superfluous parents.\n if ((node = parent[0] || parent[1] || parent[2] || parent[3])\n && node === (parent[3] || parent[2] || parent[1] || parent[0])\n && !node.length) {\n if (retainer) retainer[j] = node;\n else this._root = node;\n }\n\n return this;\n}\n\nexport function removeAll(data) {\n for (var i = 0, n = data.length; i < n; ++i) this.remove(data[i]);\n return this;\n}\n","export default function() {\n return this._root;\n}\n","export default function() {\n var size = 0;\n this.visit(function(node) {\n if (!node.length) do ++size; while (node = node.next)\n });\n return size;\n}\n","import Quad from \"./quad.js\";\n\nexport default function(callback) {\n var quads = [], q, node = this._root, child, x0, y0, x1, y1;\n if (node) quads.push(new Quad(node, this._x0, this._y0, this._x1, this._y1));\n while (q = quads.pop()) {\n if (!callback(node = q.node, x0 = q.x0, y0 = q.y0, x1 = q.x1, y1 = q.y1) && node.length) {\n var xm = (x0 + x1) / 2, ym = (y0 + y1) / 2;\n if (child = node[3]) quads.push(new Quad(child, xm, ym, x1, y1));\n if (child = node[2]) quads.push(new Quad(child, x0, ym, xm, y1));\n if (child = node[1]) quads.push(new Quad(child, xm, y0, x1, ym));\n if (child = node[0]) quads.push(new Quad(child, x0, y0, xm, ym));\n }\n }\n return this;\n}\n","import Quad from \"./quad.js\";\n\nexport default function(callback) {\n var quads = [], next = [], q;\n if (this._root) quads.push(new Quad(this._root, this._x0, this._y0, this._x1, this._y1));\n while (q = quads.pop()) {\n var node = q.node;\n if (node.length) {\n var child, x0 = q.x0, y0 = q.y0, x1 = q.x1, y1 = q.y1, xm = (x0 + x1) / 2, ym = (y0 + y1) / 2;\n if (child = node[0]) quads.push(new Quad(child, x0, y0, xm, ym));\n if (child = node[1]) quads.push(new Quad(child, xm, y0, x1, ym));\n if (child = node[2]) quads.push(new Quad(child, x0, ym, xm, y1));\n if (child = node[3]) quads.push(new Quad(child, xm, ym, x1, y1));\n }\n next.push(q);\n }\n while (q = next.pop()) {\n callback(q.node, q.x0, q.y0, q.x1, q.y1);\n }\n return this;\n}\n","export function defaultX(d) {\n return d[0];\n}\n\nexport default function(_) {\n return arguments.length ? (this._x = _, this) : this._x;\n}\n","export function defaultY(d) {\n return d[1];\n}\n\nexport default function(_) {\n return arguments.length ? (this._y = _, this) : this._y;\n}\n","import tree_add, {addAll as tree_addAll} from \"./add.js\";\nimport tree_cover from \"./cover.js\";\nimport tree_data from \"./data.js\";\nimport tree_extent from \"./extent.js\";\nimport tree_find from \"./find.js\";\nimport tree_remove, {removeAll as tree_removeAll} from \"./remove.js\";\nimport tree_root from \"./root.js\";\nimport tree_size from \"./size.js\";\nimport tree_visit from \"./visit.js\";\nimport tree_visitAfter from \"./visitAfter.js\";\nimport tree_x, {defaultX} from \"./x.js\";\nimport tree_y, {defaultY} from \"./y.js\";\n\nexport default function quadtree(nodes, x, y) {\n var tree = new Quadtree(x == null ? defaultX : x, y == null ? defaultY : y, NaN, NaN, NaN, NaN);\n return nodes == null ? tree : tree.addAll(nodes);\n}\n\nfunction Quadtree(x, y, x0, y0, x1, y1) {\n this._x = x;\n this._y = y;\n this._x0 = x0;\n this._y0 = y0;\n this._x1 = x1;\n this._y1 = y1;\n this._root = undefined;\n}\n\nfunction leaf_copy(leaf) {\n var copy = {data: leaf.data}, next = copy;\n while (leaf = leaf.next) next = next.next = {data: leaf.data};\n return copy;\n}\n\nvar treeProto = quadtree.prototype = Quadtree.prototype;\n\ntreeProto.copy = function() {\n var copy = new Quadtree(this._x, this._y, this._x0, this._y0, this._x1, this._y1),\n node = this._root,\n nodes,\n child;\n\n if (!node) return copy;\n\n if (!node.length) return copy._root = leaf_copy(node), copy;\n\n nodes = [{source: node, target: copy._root = new Array(4)}];\n while (node = nodes.pop()) {\n for (var i = 0; i < 4; ++i) {\n if (child = node.source[i]) {\n if (child.length) nodes.push({source: child, target: node.target[i] = new Array(4)});\n else node.target[i] = leaf_copy(child);\n }\n }\n }\n\n return copy;\n};\n\ntreeProto.add = tree_add;\ntreeProto.addAll = tree_addAll;\ntreeProto.cover = tree_cover;\ntreeProto.data = tree_data;\ntreeProto.extent = tree_extent;\ntreeProto.find = tree_find;\ntreeProto.remove = tree_remove;\ntreeProto.removeAll = tree_removeAll;\ntreeProto.root = tree_root;\ntreeProto.size = tree_size;\ntreeProto.visit = tree_visit;\ntreeProto.visitAfter = tree_visitAfter;\ntreeProto.x = tree_x;\ntreeProto.y = tree_y;\n","export default function(x) {\n return function() {\n return x;\n };\n}\n","export default function(random) {\n return (random() - 0.5) * 1e-6;\n}\n","import {quadtree} from \"d3-quadtree\";\nimport constant from \"./constant.js\";\nimport jiggle from \"./jiggle.js\";\n\nfunction x(d) {\n return d.x + d.vx;\n}\n\nfunction y(d) {\n return d.y + d.vy;\n}\n\nexport default function(radius) {\n var nodes,\n radii,\n random,\n strength = 1,\n iterations = 1;\n\n if (typeof radius !== \"function\") radius = constant(radius == null ? 1 : +radius);\n\n function force() {\n var i, n = nodes.length,\n tree,\n node,\n xi,\n yi,\n ri,\n ri2;\n\n for (var k = 0; k < iterations; ++k) {\n tree = quadtree(nodes, x, y).visitAfter(prepare);\n for (i = 0; i < n; ++i) {\n node = nodes[i];\n ri = radii[node.index], ri2 = ri * ri;\n xi = node.x + node.vx;\n yi = node.y + node.vy;\n tree.visit(apply);\n }\n }\n\n function apply(quad, x0, y0, x1, y1) {\n var data = quad.data, rj = quad.r, r = ri + rj;\n if (data) {\n if (data.index > node.index) {\n var x = xi - data.x - data.vx,\n y = yi - data.y - data.vy,\n l = x * x + y * y;\n if (l < r * r) {\n if (x === 0) x = jiggle(random), l += x * x;\n if (y === 0) y = jiggle(random), l += y * y;\n l = (r - (l = Math.sqrt(l))) / l * strength;\n node.vx += (x *= l) * (r = (rj *= rj) / (ri2 + rj));\n node.vy += (y *= l) * r;\n data.vx -= x * (r = 1 - r);\n data.vy -= y * r;\n }\n }\n return;\n }\n return x0 > xi + r || x1 < xi - r || y0 > yi + r || y1 < yi - r;\n }\n }\n\n function prepare(quad) {\n if (quad.data) return quad.r = radii[quad.data.index];\n for (var i = quad.r = 0; i < 4; ++i) {\n if (quad[i] && quad[i].r > quad.r) {\n quad.r = quad[i].r;\n }\n }\n }\n\n function initialize() {\n if (!nodes) return;\n var i, n = nodes.length, node;\n radii = new Array(n);\n for (i = 0; i < n; ++i) node = nodes[i], radii[node.index] = +radius(node, i, nodes);\n }\n\n force.initialize = function(_nodes, _random) {\n nodes = _nodes;\n random = _random;\n initialize();\n };\n\n force.iterations = function(_) {\n return arguments.length ? (iterations = +_, force) : iterations;\n };\n\n force.strength = function(_) {\n return arguments.length ? (strength = +_, force) : strength;\n };\n\n force.radius = function(_) {\n return arguments.length ? (radius = typeof _ === \"function\" ? _ : constant(+_), initialize(), force) : radius;\n };\n\n return force;\n}\n","import constant from \"./constant.js\";\nimport jiggle from \"./jiggle.js\";\n\nfunction index(d) {\n return d.index;\n}\n\nfunction find(nodeById, nodeId) {\n var node = nodeById.get(nodeId);\n if (!node) throw new Error(\"node not found: \" + nodeId);\n return node;\n}\n\nexport default function(links) {\n var id = index,\n strength = defaultStrength,\n strengths,\n distance = constant(30),\n distances,\n nodes,\n count,\n bias,\n random,\n iterations = 1;\n\n if (links == null) links = [];\n\n function defaultStrength(link) {\n return 1 / Math.min(count[link.source.index], count[link.target.index]);\n }\n\n function force(alpha) {\n for (var k = 0, n = links.length; k < iterations; ++k) {\n for (var i = 0, link, source, target, x, y, l, b; i < n; ++i) {\n link = links[i], source = link.source, target = link.target;\n x = target.x + target.vx - source.x - source.vx || jiggle(random);\n y = target.y + target.vy - source.y - source.vy || jiggle(random);\n l = Math.sqrt(x * x + y * y);\n l = (l - distances[i]) / l * alpha * strengths[i];\n x *= l, y *= l;\n target.vx -= x * (b = bias[i]);\n target.vy -= y * b;\n source.vx += x * (b = 1 - b);\n source.vy += y * b;\n }\n }\n }\n\n function initialize() {\n if (!nodes) return;\n\n var i,\n n = nodes.length,\n m = links.length,\n nodeById = new Map(nodes.map((d, i) => [id(d, i, nodes), d])),\n link;\n\n for (i = 0, count = new Array(n); i < m; ++i) {\n link = links[i], link.index = i;\n if (typeof link.source !== \"object\") link.source = find(nodeById, link.source);\n if (typeof link.target !== \"object\") link.target = find(nodeById, link.target);\n count[link.source.index] = (count[link.source.index] || 0) + 1;\n count[link.target.index] = (count[link.target.index] || 0) + 1;\n }\n\n for (i = 0, bias = new Array(m); i < m; ++i) {\n link = links[i], bias[i] = count[link.source.index] / (count[link.source.index] + count[link.target.index]);\n }\n\n strengths = new Array(m), initializeStrength();\n distances = new Array(m), initializeDistance();\n }\n\n function initializeStrength() {\n if (!nodes) return;\n\n for (var i = 0, n = links.length; i < n; ++i) {\n strengths[i] = +strength(links[i], i, links);\n }\n }\n\n function initializeDistance() {\n if (!nodes) return;\n\n for (var i = 0, n = links.length; i < n; ++i) {\n distances[i] = +distance(links[i], i, links);\n }\n }\n\n force.initialize = function(_nodes, _random) {\n nodes = _nodes;\n random = _random;\n initialize();\n };\n\n force.links = function(_) {\n return arguments.length ? (links = _, initialize(), force) : links;\n };\n\n force.id = function(_) {\n return arguments.length ? (id = _, force) : id;\n };\n\n force.iterations = function(_) {\n return arguments.length ? (iterations = +_, force) : iterations;\n };\n\n force.strength = function(_) {\n return arguments.length ? (strength = typeof _ === \"function\" ? _ : constant(+_), initializeStrength(), force) : strength;\n };\n\n force.distance = function(_) {\n return arguments.length ? (distance = typeof _ === \"function\" ? _ : constant(+_), initializeDistance(), force) : distance;\n };\n\n return force;\n}\n","// https://en.wikipedia.org/wiki/Linear_congruential_generator#Parameters_in_common_use\nconst a = 1664525;\nconst c = 1013904223;\nconst m = 4294967296; // 2^32\n\nexport default function() {\n let s = 1;\n return () => (s = (a * s + c) % m) / m;\n}\n","import {dispatch} from \"d3-dispatch\";\nimport {timer} from \"d3-timer\";\nimport lcg from \"./lcg.js\";\n\nexport function x(d) {\n return d.x;\n}\n\nexport function y(d) {\n return d.y;\n}\n\nvar initialRadius = 10,\n initialAngle = Math.PI * (3 - Math.sqrt(5));\n\nexport default function(nodes) {\n var simulation,\n alpha = 1,\n alphaMin = 0.001,\n alphaDecay = 1 - Math.pow(alphaMin, 1 / 300),\n alphaTarget = 0,\n velocityDecay = 0.6,\n forces = new Map(),\n stepper = timer(step),\n event = dispatch(\"tick\", \"end\"),\n random = lcg();\n\n if (nodes == null) nodes = [];\n\n function step() {\n tick();\n event.call(\"tick\", simulation);\n if (alpha < alphaMin) {\n stepper.stop();\n event.call(\"end\", simulation);\n }\n }\n\n function tick(iterations) {\n var i, n = nodes.length, node;\n\n if (iterations === undefined) iterations = 1;\n\n for (var k = 0; k < iterations; ++k) {\n alpha += (alphaTarget - alpha) * alphaDecay;\n\n forces.forEach(function(force) {\n force(alpha);\n });\n\n for (i = 0; i < n; ++i) {\n node = nodes[i];\n if (node.fx == null) node.x += node.vx *= velocityDecay;\n else node.x = node.fx, node.vx = 0;\n if (node.fy == null) node.y += node.vy *= velocityDecay;\n else node.y = node.fy, node.vy = 0;\n }\n }\n\n return simulation;\n }\n\n function initializeNodes() {\n for (var i = 0, n = nodes.length, node; i < n; ++i) {\n node = nodes[i], node.index = i;\n if (node.fx != null) node.x = node.fx;\n if (node.fy != null) node.y = node.fy;\n if (isNaN(node.x) || isNaN(node.y)) {\n var radius = initialRadius * Math.sqrt(0.5 + i), angle = i * initialAngle;\n node.x = radius * Math.cos(angle);\n node.y = radius * Math.sin(angle);\n }\n if (isNaN(node.vx) || isNaN(node.vy)) {\n node.vx = node.vy = 0;\n }\n }\n }\n\n function initializeForce(force) {\n if (force.initialize) force.initialize(nodes, random);\n return force;\n }\n\n initializeNodes();\n\n return simulation = {\n tick: tick,\n\n restart: function() {\n return stepper.restart(step), simulation;\n },\n\n stop: function() {\n return stepper.stop(), simulation;\n },\n\n nodes: function(_) {\n return arguments.length ? (nodes = _, initializeNodes(), forces.forEach(initializeForce), simulation) : nodes;\n },\n\n alpha: function(_) {\n return arguments.length ? (alpha = +_, simulation) : alpha;\n },\n\n alphaMin: function(_) {\n return arguments.length ? (alphaMin = +_, simulation) : alphaMin;\n },\n\n alphaDecay: function(_) {\n return arguments.length ? (alphaDecay = +_, simulation) : +alphaDecay;\n },\n\n alphaTarget: function(_) {\n return arguments.length ? (alphaTarget = +_, simulation) : alphaTarget;\n },\n\n velocityDecay: function(_) {\n return arguments.length ? (velocityDecay = 1 - _, simulation) : 1 - velocityDecay;\n },\n\n randomSource: function(_) {\n return arguments.length ? (random = _, forces.forEach(initializeForce), simulation) : random;\n },\n\n force: function(name, _) {\n return arguments.length > 1 ? ((_ == null ? forces.delete(name) : forces.set(name, initializeForce(_))), simulation) : forces.get(name);\n },\n\n find: function(x, y, radius) {\n var i = 0,\n n = nodes.length,\n dx,\n dy,\n d2,\n node,\n closest;\n\n if (radius == null) radius = Infinity;\n else radius *= radius;\n\n for (i = 0; i < n; ++i) {\n node = nodes[i];\n dx = x - node.x;\n dy = y - node.y;\n d2 = dx * dx + dy * dy;\n if (d2 < radius) closest = node, radius = d2;\n }\n\n return closest;\n },\n\n on: function(name, _) {\n return arguments.length > 1 ? (event.on(name, _), simulation) : event.on(name);\n }\n };\n}\n","import {quadtree} from \"d3-quadtree\";\nimport constant from \"./constant.js\";\nimport jiggle from \"./jiggle.js\";\nimport {x, y} from \"./simulation.js\";\n\nexport default function() {\n var nodes,\n node,\n random,\n alpha,\n strength = constant(-30),\n strengths,\n distanceMin2 = 1,\n distanceMax2 = Infinity,\n theta2 = 0.81;\n\n function force(_) {\n var i, n = nodes.length, tree = quadtree(nodes, x, y).visitAfter(accumulate);\n for (alpha = _, i = 0; i < n; ++i) node = nodes[i], tree.visit(apply);\n }\n\n function initialize() {\n if (!nodes) return;\n var i, n = nodes.length, node;\n strengths = new Array(n);\n for (i = 0; i < n; ++i) node = nodes[i], strengths[node.index] = +strength(node, i, nodes);\n }\n\n function accumulate(quad) {\n var strength = 0, q, c, weight = 0, x, y, i;\n\n // For internal nodes, accumulate forces from child quadrants.\n if (quad.length) {\n for (x = y = i = 0; i < 4; ++i) {\n if ((q = quad[i]) && (c = Math.abs(q.value))) {\n strength += q.value, weight += c, x += c * q.x, y += c * q.y;\n }\n }\n quad.x = x / weight;\n quad.y = y / weight;\n }\n\n // For leaf nodes, accumulate forces from coincident quadrants.\n else {\n q = quad;\n q.x = q.data.x;\n q.y = q.data.y;\n do strength += strengths[q.data.index];\n while (q = q.next);\n }\n\n quad.value = strength;\n }\n\n function apply(quad, x1, _, x2) {\n if (!quad.value) return true;\n\n var x = quad.x - node.x,\n y = quad.y - node.y,\n w = x2 - x1,\n l = x * x + y * y;\n\n // Apply the Barnes-Hut approximation if possible.\n // Limit forces for very close nodes; randomize direction if coincident.\n if (w * w / theta2 < l) {\n if (l < distanceMax2) {\n if (x === 0) x = jiggle(random), l += x * x;\n if (y === 0) y = jiggle(random), l += y * y;\n if (l < distanceMin2) l = Math.sqrt(distanceMin2 * l);\n node.vx += x * quad.value * alpha / l;\n node.vy += y * quad.value * alpha / l;\n }\n return true;\n }\n\n // Otherwise, process points directly.\n else if (quad.length || l >= distanceMax2) return;\n\n // Limit forces for very close nodes; randomize direction if coincident.\n if (quad.data !== node || quad.next) {\n if (x === 0) x = jiggle(random), l += x * x;\n if (y === 0) y = jiggle(random), l += y * y;\n if (l < distanceMin2) l = Math.sqrt(distanceMin2 * l);\n }\n\n do if (quad.data !== node) {\n w = strengths[quad.data.index] * alpha / l;\n node.vx += x * w;\n node.vy += y * w;\n } while (quad = quad.next);\n }\n\n force.initialize = function(_nodes, _random) {\n nodes = _nodes;\n random = _random;\n initialize();\n };\n\n force.strength = function(_) {\n return arguments.length ? (strength = typeof _ === \"function\" ? _ : constant(+_), initialize(), force) : strength;\n };\n\n force.distanceMin = function(_) {\n return arguments.length ? (distanceMin2 = _ * _, force) : Math.sqrt(distanceMin2);\n };\n\n force.distanceMax = function(_) {\n return arguments.length ? (distanceMax2 = _ * _, force) : Math.sqrt(distanceMax2);\n };\n\n force.theta = function(_) {\n return arguments.length ? (theta2 = _ * _, force) : Math.sqrt(theta2);\n };\n\n return force;\n}\n","/**\n * Force-directed knowledge graph visualization using d3-force + SVG.\n *\n * Renders nodes as styled SVG elements with CSS theming support,\n * glassmorphic cards, glow effects, and smooth transitions.\n *\n * @module\n */\n\nimport { useCallback, useRef, useEffect, useState, type JSX } from \"react\";\nimport {\n forceSimulation,\n forceLink,\n forceManyBody,\n forceCenter,\n forceCollide,\n type Simulation,\n type SimulationNodeDatum,\n type SimulationLinkDatum,\n} from \"d3-force\";\nimport { drag, type D3DragEvent } from \"d3-drag\";\nimport { select, type Selection } from \"d3-selection\";\nimport { zoom, zoomIdentity, type ZoomBehavior } from \"d3-zoom\";\nimport \"d3-transition\";\nimport type { GraphNode, GraphLink } from \"../../hooks/types.js\";\nimport styles from \"./KnowledgeGraph.module.scss\";\n\n// ---------------------------------------------------------------------------\n// Types\n// ---------------------------------------------------------------------------\n\ninterface SimNode extends SimulationNodeDatum, GraphNode {}\n\ninterface SimLink extends SimulationLinkDatum<SimNode> {\n type: string;\n}\n\n// ---------------------------------------------------------------------------\n// Constants\n// ---------------------------------------------------------------------------\n\nconst NODE_COLORS: Record<string, string> = {\n reference: \"#4A9EFF\",\n decision: \"#22C55E\",\n insight: \"#EAB308\",\n concept: \"#A855F7\",\n snippet: \"#6B7280\",\n};\n\nfunction getNodeColor(node: GraphNode): string {\n if (node.kind === \"reference\") {\n return NODE_COLORS.reference;\n }\n return NODE_COLORS[node.category ?? \"insight\"] ?? NODE_COLORS.insight;\n}\n\nconst NODE_WIDTH: number = 200;\nconst NODE_HEIGHT: number = 52;\nconst NODE_RADIUS: number = 12;\n\n/** Padding around the bounding box when computing zoom-to-fit. */\nconst FIT_PADDING: number = 40;\n\n/** Minimum drag distance (px) before a mouseup is treated as a drag-end rather than a click. */\nconst DRAG_CLICK_THRESHOLD: number = 3;\n\n// ---------------------------------------------------------------------------\n// Helpers\n// ---------------------------------------------------------------------------\n\ninterface ZoomToFitResult {\n translateX: number;\n translateY: number;\n scale: number;\n}\n\n/**\n * Compute the transform needed to fit all nodes within the viewport.\n *\n * Returns translate + scale that centers the node bounding box with padding.\n * Scale is capped at 1.0 so small graphs are never zoomed in past 100%.\n */\nfunction computeZoomToFit(\n nodes: readonly { x?: number; y?: number }[],\n viewport: { width: number; height: number },\n): ZoomToFitResult | undefined {\n if (viewport.width <= 0 || viewport.height <= 0) {\n return undefined;\n }\n\n // Single-pass min/max to avoid stack overflow with large node counts\n let minX: number = Infinity;\n let maxX: number = -Infinity;\n let minY: number = Infinity;\n let maxY: number = -Infinity;\n for (const n of nodes) {\n const nx: number = n.x ?? 0;\n const ny: number = n.y ?? 0;\n if (nx < minX) {\n minX = nx;\n }\n if (nx > maxX) {\n maxX = nx;\n }\n if (ny < minY) {\n minY = ny;\n }\n if (ny > maxY) {\n maxY = ny;\n }\n }\n\n const x0: number = minX - NODE_WIDTH / 2 - FIT_PADDING;\n const x1: number = maxX + NODE_WIDTH / 2 + FIT_PADDING;\n const y0: number = minY - NODE_HEIGHT / 2 - FIT_PADDING;\n const y1: number = maxY + NODE_HEIGHT / 2 + FIT_PADDING;\n\n const bboxWidth: number = x1 - x0;\n const bboxHeight: number = y1 - y0;\n\n const scale: number = Math.min(viewport.width / bboxWidth, viewport.height / bboxHeight, 1.0);\n\n const bboxCenterX: number = (x0 + x1) / 2;\n const bboxCenterY: number = (y0 + y1) / 2;\n\n return {\n translateX: viewport.width / 2 - bboxCenterX * scale,\n translateY: viewport.height / 2 - bboxCenterY * scale,\n scale,\n };\n}\n\n// ---------------------------------------------------------------------------\n// Component\n// ---------------------------------------------------------------------------\n\ninterface KnowledgeGraphProps {\n graphData: { nodes: GraphNode[]; links: GraphLink[] };\n selectedNodeId?: string;\n onNodeClick: (nodeId: string) => void;\n onNodeDoubleClick: (nodeId: string) => void;\n}\n\nexport function KnowledgeGraph({\n graphData,\n selectedNodeId,\n onNodeClick,\n onNodeDoubleClick,\n}: KnowledgeGraphProps): JSX.Element {\n const svgRef = useRef<SVGSVGElement>(null);\n const gRef = useRef<SVGGElement>(null);\n const simRef = useRef<Simulation<SimNode, SimLink> | undefined>(undefined);\n const zoomRef = useRef<ZoomBehavior<SVGSVGElement, unknown> | undefined>(undefined);\n const linkElsRef = useRef<Selection<SVGLineElement, SimLink, SVGGElement, unknown> | undefined>(\n undefined,\n );\n const nodeElsRef = useRef<Selection<SVGGElement, SimNode, SVGGElement, unknown> | undefined>(\n undefined,\n );\n const selectedNodeIdRef = useRef(selectedNodeId);\n selectedNodeIdRef.current = selectedNodeId;\n const didAutoFitRef = useRef(false);\n const [dimensions, setDimensions] = useState({ width: 800, height: 600 });\n const dragDistanceRef = useRef(0);\n\n // Track container size\n useEffect(() => {\n const container: HTMLElement | null = svgRef.current?.parentElement ?? null;\n if (!container) {\n return;\n }\n const observer: ResizeObserver = new ResizeObserver((entries) => {\n for (const entry of entries) {\n setDimensions({ width: entry.contentRect.width, height: entry.contentRect.height });\n }\n });\n observer.observe(container);\n setDimensions({ width: container.clientWidth, height: container.clientHeight });\n return () => {\n observer.disconnect();\n };\n }, []);\n\n // Setup zoom\n useEffect(() => {\n if (!svgRef.current || !gRef.current) {\n return;\n }\n const svgEl: SVGSVGElement = svgRef.current;\n const gEl: SVGGElement = gRef.current;\n\n const zoomBehavior: ZoomBehavior<SVGSVGElement, unknown> = zoom<SVGSVGElement, unknown>()\n .scaleExtent([0.1, 4])\n .filter((event: Event) => {\n // Prevent zoom on double-click (we use it for expand)\n if (event.type === \"dblclick\") {\n return false;\n }\n return true;\n })\n .on(\"zoom\", (event) => {\n select(gEl).attr(\"transform\", String(event.transform));\n });\n\n select(svgEl).call(zoomBehavior);\n zoomRef.current = zoomBehavior;\n return () => {\n select(svgEl).on(\".zoom\", null);\n };\n }, []);\n\n // Stable callback refs so d3 event handlers don't go stale\n const onClickRef = useRef(onNodeClick);\n onClickRef.current = onNodeClick;\n const onDblClickRef = useRef(onNodeDoubleClick);\n onDblClickRef.current = onNodeDoubleClick;\n\n // Run simulation\n useEffect(() => {\n if (!gRef.current) {\n return;\n }\n const g: SVGGElement = gRef.current;\n\n // Stop previous\n if (simRef.current) {\n simRef.current.stop();\n simRef.current = undefined;\n }\n\n // Reset auto-fit flag when graph data changes so the next simulation run fits the view\n didAutoFitRef.current = false;\n\n if (graphData.nodes.length === 0) {\n select(g).selectAll(\"*\").remove();\n return;\n }\n\n // Clone data for d3 mutation\n const simNodes: SimNode[] = graphData.nodes.map((n) => ({ ...n }));\n const nodeMap: Map<string, SimNode> = new Map(simNodes.map((n) => [n.id, n]));\n const simLinks: SimLink[] = graphData.links\n .filter((l) => nodeMap.has(l.source) && nodeMap.has(l.target))\n .map((l) => ({ source: l.source, target: l.target, type: l.type }));\n\n // Clear previous elements\n select(g).selectAll(\"*\").remove();\n\n // Create link elements\n const linkEls: Selection<SVGLineElement, SimLink, SVGGElement, unknown> = select(g)\n .selectAll<SVGLineElement, SimLink>(\"line\")\n .data(simLinks)\n .enter()\n .append(\"line\")\n .attr(\"class\", styles.link);\n\n // Edge type tooltip on hover\n linkEls.append(\"title\").text((d: SimLink) => d.type);\n\n linkElsRef.current = linkEls;\n\n // Create node groups\n const nodeEls: Selection<SVGGElement, SimNode, SVGGElement, unknown> = select(g)\n .selectAll<SVGGElement, SimNode>(\"g.kg-node\")\n .data(simNodes)\n .enter()\n .append(\"g\")\n .attr(\"class\", `kg-node ${styles.node}`)\n .on(\"click\", (_event: MouseEvent, d: SimNode) => {\n // Suppress click if the user just finished dragging\n if (dragDistanceRef.current > DRAG_CLICK_THRESHOLD) {\n return;\n }\n onClickRef.current(d.id);\n })\n .on(\"dblclick\", (_event: MouseEvent, d: SimNode) => {\n onDblClickRef.current(d.id);\n });\n\n nodeElsRef.current = nodeEls;\n\n // Node card background\n nodeEls\n .append(\"rect\")\n .attr(\"class\", styles.nodeCard)\n .attr(\"width\", NODE_WIDTH)\n .attr(\"height\", NODE_HEIGHT)\n .attr(\"rx\", NODE_RADIUS)\n .attr(\"ry\", NODE_RADIUS)\n .style(\"--node-color\", (d: SimNode) => getNodeColor(d));\n\n // Category indicator bar\n nodeEls\n .append(\"rect\")\n .attr(\"class\", styles.nodeIndicator)\n .attr(\"width\", 4)\n .attr(\"height\", NODE_HEIGHT)\n .attr(\"rx\", 2)\n .attr(\"fill\", (d: SimNode) => getNodeColor(d));\n\n // Node label\n nodeEls\n .append(\"text\")\n .attr(\"class\", styles.nodeLabel)\n .attr(\"x\", NODE_WIDTH / 2)\n .attr(\"y\", NODE_HEIGHT / 2 - 4)\n .attr(\"text-anchor\", \"middle\")\n .attr(\"dominant-baseline\", \"central\")\n .text((d: SimNode) => (d.label.length > 26 ? d.label.substring(0, 24) + \"...\" : d.label));\n\n // Category badge\n nodeEls\n .append(\"text\")\n .attr(\"class\", styles.nodeBadge)\n .attr(\"x\", NODE_WIDTH / 2)\n .attr(\"y\", NODE_HEIGHT - 8)\n .attr(\"text-anchor\", \"middle\")\n .text((d: SimNode) =>\n (d.kind === \"reference\" ? (d.sourceType ?? \"ref\") : (d.category ?? \"\")).toUpperCase(),\n );\n\n // Simulation\n const sim: Simulation<SimNode, SimLink> = forceSimulation(simNodes)\n .force(\n \"link\",\n forceLink<SimNode, SimLink>(simLinks)\n .id((d) => d.id)\n .distance(140),\n )\n .force(\"charge\", forceManyBody().strength(-400))\n .force(\"center\", forceCenter(dimensions.width / 2, dimensions.height / 2))\n .force(\"collide\", forceCollide<SimNode>(NODE_WIDTH / 2 + 16))\n .on(\"tick\", () => {\n linkEls\n .attr(\"x1\", (d: SimLink) => (d.source as SimNode).x ?? 0)\n .attr(\"y1\", (d: SimLink) => (d.source as SimNode).y ?? 0)\n .attr(\"x2\", (d: SimLink) => (d.target as SimNode).x ?? 0)\n .attr(\"y2\", (d: SimLink) => (d.target as SimNode).y ?? 0);\n\n nodeEls.attr(\n \"transform\",\n (d: SimNode) =>\n `translate(${(d.x ?? 0) - NODE_WIDTH / 2},${(d.y ?? 0) - NODE_HEIGHT / 2})`,\n );\n });\n\n simRef.current = sim;\n\n // Drag behavior — lets users grab and reposition nodes\n const dragBehavior = drag<SVGGElement, SimNode>()\n .on(\"start\", (_event: D3DragEvent<SVGGElement, SimNode, SimNode>, d: SimNode) => {\n d.fx = d.x;\n d.fy = d.y;\n dragDistanceRef.current = 0;\n })\n .on(\"drag\", (event: D3DragEvent<SVGGElement, SimNode, SimNode>, d: SimNode) => {\n d.fx = event.x;\n d.fy = event.y;\n dragDistanceRef.current += Math.abs(event.dx) + Math.abs(event.dy);\n // Only reheat simulation once we confirm an actual drag gesture\n if (dragDistanceRef.current > DRAG_CLICK_THRESHOLD && sim.alphaTarget() === 0) {\n sim.alphaTarget(0.3).restart();\n }\n })\n .on(\"end\", (event: D3DragEvent<SVGGElement, SimNode, SimNode>, d: SimNode) => {\n if (!event.active) {\n sim.alphaTarget(0);\n }\n // Release node so it re-settles in the force layout\n d.fx = undefined;\n d.fy = undefined;\n });\n nodeEls.call(dragBehavior);\n\n // Zoom to fit all nodes once the force simulation has fully converged.\n // One-shot: skip if already fitted (drag reheat would re-trigger), or if a node is selected.\n sim.on(\"end\", () => {\n if (\n svgRef.current &&\n zoomRef.current &&\n simNodes.length > 0 &&\n !didAutoFitRef.current &&\n !selectedNodeIdRef.current\n ) {\n didAutoFitRef.current = true;\n const fit: ZoomToFitResult | undefined = computeZoomToFit(simNodes, dimensions);\n if (!fit) {\n return;\n }\n const { translateX, translateY, scale }: ZoomToFitResult = fit;\n const zb: ZoomBehavior<SVGSVGElement, unknown> = zoomRef.current;\n const t = zoomIdentity.translate(translateX, translateY).scale(scale);\n // eslint-disable-next-line @typescript-eslint/unbound-method -- d3 zoom API pattern\n select(svgRef.current).transition().duration(500).call(zb.transform, t);\n }\n });\n\n return () => {\n sim.stop();\n };\n }, [graphData, dimensions]);\n\n // Update selection styling without rebuilding simulation\n useEffect(() => {\n if (!gRef.current || !nodeElsRef.current || !linkElsRef.current) {\n return;\n }\n\n if (!selectedNodeId) {\n // No selection — full opacity on everything\n nodeElsRef.current.classed(styles.dimmed, false).classed(styles.selected, false);\n linkElsRef.current.classed(styles.dimmedLink, false);\n return;\n }\n\n // Build set of connected node IDs\n const connectedIds: Set<string> = new Set([selectedNodeId]);\n linkElsRef.current.each((d: SimLink) => {\n const srcId: string = (d.source as SimNode).id;\n const tgtId: string = (d.target as SimNode).id;\n if (srcId === selectedNodeId || tgtId === selectedNodeId) {\n connectedIds.add(srcId);\n connectedIds.add(tgtId);\n }\n });\n\n // Update node classes\n nodeElsRef.current\n .classed(styles.selected, (d: SimNode) => d.id === selectedNodeId)\n .classed(styles.dimmed, (d: SimNode) => !connectedIds.has(d.id));\n\n // Dim unconnected links\n linkElsRef.current.classed(styles.dimmedLink, (d: SimLink) => {\n const srcId: string = (d.source as SimNode).id;\n const tgtId: string = (d.target as SimNode).id;\n return !connectedIds.has(srcId) || !connectedIds.has(tgtId);\n });\n }, [selectedNodeId, graphData]);\n\n // Center on selected node\n const handleCenterOnNode = useCallback(() => {\n if (!selectedNodeId || !simRef.current || !svgRef.current || !zoomRef.current) {\n return;\n }\n const node: SimNode | undefined = simRef.current\n .nodes()\n .find((n: SimNode) => n.id === selectedNodeId);\n if (node && Number.isFinite(node.x) && Number.isFinite(node.y)) {\n const zb: ZoomBehavior<SVGSVGElement, unknown> = zoomRef.current;\n const t = zoomIdentity\n .translate(dimensions.width / 2, dimensions.height / 2)\n .scale(1.2)\n .translate(-(node.x ?? 0), -(node.y ?? 0));\n // eslint-disable-next-line @typescript-eslint/unbound-method -- d3 zoom API pattern\n select(svgRef.current).transition().duration(500).call(zb.transform, t);\n }\n }, [selectedNodeId, dimensions]);\n\n useEffect(() => {\n handleCenterOnNode();\n }, [handleCenterOnNode]);\n\n return (\n <div className={styles.graphContainer} data-testid=\"knowledge-graph\">\n <svg ref={svgRef} width={dimensions.width} height={dimensions.height} className={styles.svg}>\n <defs>\n <filter id=\"glow\">\n <feGaussianBlur stdDeviation=\"3\" result=\"coloredBlur\" />\n <feMerge>\n <feMergeNode in=\"coloredBlur\" />\n <feMergeNode in=\"SourceGraphic\" />\n </feMerge>\n </filter>\n </defs>\n <g ref={gRef} />\n </svg>\n </div>\n );\n}\n","/**\n * Slide-in detail panel for a selected knowledge graph node.\n *\n * @module\n */\n\nimport { useMemo, type JSX } from \"react\";\nimport type { GraphNode, NodeDetail } from \"../../hooks/types.js\";\nimport { taskUrl, sessionUrl } from \"../../utils/navigation.js\";\nimport { useAppNavigate } from \"../../utils/navigation.js\";\nimport styles from \"./KnowledgeDetailPanel.module.scss\";\n\ninterface KnowledgeDetailPanelProps {\n detail: NodeDetail;\n nodes: GraphNode[];\n onClose: () => void;\n onSelectNode: (id: string) => void;\n}\n\n/** Slide-in panel showing full details for a selected knowledge node. */\nexport function KnowledgeDetailPanel({\n detail,\n nodes,\n onClose,\n onSelectNode,\n}: KnowledgeDetailPanelProps): JSX.Element {\n const navigate = useAppNavigate();\n const { node, edges } = detail;\n const nodeById = useMemo(() => new Map(nodes.map((n) => [n.id, n])), [nodes]);\n\n /** Navigate to the source entity for reference nodes. */\n function handleViewInGrackle(): void {\n if (node.kind !== \"reference\" || !node.sourceId) {\n return;\n }\n switch (node.sourceType) {\n case \"task\":\n navigate(taskUrl(node.sourceId));\n break;\n case \"session\":\n navigate(sessionUrl(node.sourceId));\n break;\n default:\n break;\n }\n }\n\n return (\n <div className={styles.panel} data-testid=\"knowledge-detail-panel\">\n <div className={styles.header}>\n <h3 className={styles.title}>{node.label}</h3>\n <button className={styles.closeButton} onClick={onClose} aria-label=\"Close\">\n ×\n </button>\n </div>\n\n <div className={styles.body}>\n <div className={styles.badge}>\n {node.kind === \"reference\" ? `Reference (${node.sourceType})` : node.category}\n </div>\n\n {node.content && (\n <div className={styles.section}>\n <div className={styles.sectionLabel}>Content</div>\n <p className={styles.content}>{node.content}</p>\n </div>\n )}\n\n {node.tags && node.tags.length > 0 && (\n <div className={styles.section}>\n <div className={styles.sectionLabel}>Tags</div>\n <div className={styles.tags}>\n {node.tags.map((tag) => (\n <span key={tag} className={styles.tag}>\n {tag}\n </span>\n ))}\n </div>\n </div>\n )}\n\n {node.kind === \"reference\" && node.sourceId && (\n <div className={styles.section}>\n <button className={styles.viewLink} onClick={handleViewInGrackle}>\n View in Grackle →\n </button>\n </div>\n )}\n\n {edges.length > 0 && (\n <div className={styles.section}>\n <div className={styles.sectionLabel}>Edges ({edges.length})</div>\n <ul className={styles.edgeList}>\n {edges.map((edge) => {\n const otherId: string = edge.fromId === node.id ? edge.toId : edge.fromId;\n const edgeKey: string = `${edge.fromId}:${edge.toId}:${edge.type}`;\n return (\n <li key={edgeKey} className={styles.edgeItem} data-testid=\"edge-item\">\n <span className={styles.edgeType} data-testid=\"edge-type\">\n {edge.type}\n </span>\n <button\n className={styles.edgeNodeLink}\n data-testid=\"edge-node-link\"\n onClick={() => {\n onSelectNode(otherId);\n }}\n >\n {nodeById.get(otherId)?.label ?? `${otherId.substring(0, 8)}...`}\n </button>\n </li>\n );\n })}\n </ul>\n </div>\n )}\n\n <div className={styles.timestamps}>\n {node.createdAt && <div>Created: {new Date(node.createdAt).toLocaleDateString()}</div>}\n {node.updatedAt && <div>Updated: {new Date(node.updatedAt).toLocaleDateString()}</div>}\n </div>\n </div>\n </div>\n );\n}\n","/**\n * Knowledge Graph explorer page.\n *\n * Shows a force-directed graph of knowledge nodes. Search, workspace filter,\n * and node list live in the shared Sidebar (via KnowledgeNav).\n *\n * @module\n */\n\nimport { useCallback, useEffect, type JSX } from \"react\";\nimport {\n Breadcrumbs,\n KNOWLEDGE_URL,\n KnowledgeDetailPanel,\n KnowledgeGraph,\n} from \"@grackle-ai/web-components\";\nimport { useGrackle } from \"../context/GrackleContext.js\";\nimport styles from \"./KnowledgePage.module.scss\";\n\n/** Knowledge Graph explorer page. */\nexport function KnowledgePage(): JSX.Element {\n const { knowledge } = useGrackle();\n const { loadRecent, loadError, loading, graphData, selectedId, selectedNode } = knowledge;\n const { selectNode, expandNode, clearSelection } = knowledge;\n\n // Load recent nodes once on mount.\n //\n // Depend on the stable `loadRecent` callback, NOT the whole `knowledge`\n // object (#1357). `knowledge` changes identity whenever any knowledge state\n // updates, so `[knowledge]` here re-ran the effect on every render — each run\n // fired `loadRecent`, whose `setLoading`/`setNodes` calls triggered the next\n // render, an infinite fetch loop. Against a down Neo4j it became a 503 storm\n // and froze tab navigation under the constant re-renders.\n useEffect(() => {\n loadRecent().catch(() => {});\n }, [loadRecent]);\n\n const handleRetry = useCallback(() => {\n loadRecent().catch(() => {});\n }, [loadRecent]);\n\n // Depend on the specific stable callback refs, not the whole `knowledge`\n // object — `knowledge` changes identity on any knowledge state change, which\n // would needlessly recreate these handlers and re-render the graph/detail.\n const handleNodeClick = useCallback(\n (nodeId: string) => {\n selectNode(nodeId).catch(() => {});\n },\n [selectNode],\n );\n\n const handleNodeDoubleClick = useCallback(\n (nodeId: string) => {\n expandNode(nodeId).catch(() => {});\n },\n [expandNode],\n );\n\n const handleCloseDetail = useCallback(() => {\n clearSelection();\n }, [clearSelection]);\n\n const breadcrumbs = [{ label: \"Knowledge\", url: KNOWLEDGE_URL }];\n\n const showError = loadError !== undefined && !loading;\n const showEmpty = !showError && graphData.nodes.length === 0 && !loading;\n\n return (\n <div className={styles.layout} data-testid=\"knowledge-page\">\n <Breadcrumbs segments={breadcrumbs} />\n\n <div className={styles.graphArea}>\n {showError ? (\n <div className={styles.empty} data-testid=\"knowledge-error\">\n {loadError === \"unavailable\" ? (\n <>\n <p>Knowledge server can't be reached.</p>\n <p>\n The knowledge graph database (Neo4j) isn't running or is unreachable. Start\n it, then retry.\n </p>\n </>\n ) : (\n <>\n <p>Failed to load the knowledge graph.</p>\n <p>Something went wrong while loading knowledge nodes.</p>\n </>\n )}\n <button\n type=\"button\"\n className={styles.retryButton}\n onClick={handleRetry}\n data-testid=\"knowledge-retry\"\n >\n Retry\n </button>\n </div>\n ) : showEmpty ? (\n <div className={styles.empty}>\n <p>No knowledge nodes found.</p>\n <p>Create knowledge via MCP tools or let agents discover it during tasks.</p>\n </div>\n ) : (\n <KnowledgeGraph\n graphData={graphData}\n selectedNodeId={selectedId}\n onNodeClick={handleNodeClick}\n onNodeDoubleClick={handleNodeDoubleClick}\n />\n )}\n\n {selectedNode && selectedId && (\n <KnowledgeDetailPanel\n detail={selectedNode}\n nodes={graphData.nodes}\n onClose={handleCloseDetail}\n onSelectNode={handleNodeClick}\n />\n )}\n </div>\n </div>\n );\n}\n"],"names":["forceCenter","x","y","nodes","strength","force","i","n","node","sx","sy","_","tree_add","d","add","tree","parent","leaf","x0","y0","x1","y1","xm","ym","xp","yp","right","bottom","j","addAll","data","xz","yz","tree_cover","z","tree_data","tree_extent","Quad","tree_find","radius","x2","y2","x3","y3","quads","q","dx","dy","d2","tree_remove","retainer","previous","next","removeAll","tree_root","tree_size","size","tree_visit","callback","child","tree_visitAfter","defaultX","tree_x","defaultY","tree_y","quadtree","Quadtree","leaf_copy","copy","treeProto","tree_addAll","tree_removeAll","constant","jiggle","random","forceCollide","radii","iterations","xi","yi","ri","ri2","k","prepare","apply","quad","rj","r","l","initialize","_nodes","_random","index","find","nodeById","nodeId","forceLink","links","id","defaultStrength","strengths","distance","distances","count","bias","link","alpha","source","target","b","m","initializeStrength","initializeDistance","a","c","lcg","s","initialRadius","initialAngle","forceSimulation","simulation","alphaMin","alphaDecay","alphaTarget","velocityDecay","forces","stepper","timer","step","event","dispatch","tick","initializeNodes","angle","initializeForce","name","closest","forceManyBody","distanceMin2","distanceMax2","theta2","accumulate","weight","w","NODE_COLORS","getNodeColor","NODE_WIDTH","NODE_HEIGHT","NODE_RADIUS","FIT_PADDING","DRAG_CLICK_THRESHOLD","computeZoomToFit","viewport","minX","maxX","minY","maxY","nx","ny","bboxWidth","bboxHeight","scale","bboxCenterX","bboxCenterY","KnowledgeGraph","graphData","selectedNodeId","onNodeClick","onNodeDoubleClick","svgRef","useRef","gRef","simRef","zoomRef","linkElsRef","nodeElsRef","selectedNodeIdRef","didAutoFitRef","dimensions","setDimensions","useState","dragDistanceRef","useEffect","container","_a","observer","entries","entry","svgEl","gEl","zoomBehavior","zoom","select","onClickRef","onDblClickRef","g","simNodes","nodeMap","simLinks","linkEls","styles","nodeEls","_event","sim","dragBehavior","drag","fit","translateX","translateY","zb","t","zoomIdentity","connectedIds","srcId","tgtId","handleCenterOnNode","useCallback","jsxs","jsx","KnowledgeDetailPanel","detail","onClose","onSelectNode","navigate","useAppNavigate","edges","useMemo","handleViewInGrackle","taskUrl","sessionUrl","tag","edge","otherId","edgeKey","KnowledgePage","knowledge","useGrackle","loadRecent","loadError","loading","selectedId","selectedNode","selectNode","expandNode","clearSelection","handleRetry","handleNodeClick","handleNodeDoubleClick","handleCloseDetail","breadcrumbs","KNOWLEDGE_URL","showError","showEmpty","Breadcrumbs","Fragment"],"mappings":"0OAAe,SAAAA,GAASC,EAAGC,EAAG,CAC5B,IAAIC,EAAOC,EAAW,EAElBH,GAAK,OAAMA,EAAI,GACfC,GAAK,OAAMA,EAAI,GAEnB,SAASG,GAAQ,CACf,IAAIC,EACAC,EAAIJ,EAAM,OACVK,EACAC,EAAK,EACLC,EAAK,EAET,IAAKJ,EAAI,EAAGA,EAAIC,EAAG,EAAED,EACnBE,EAAOL,EAAMG,CAAC,EAAGG,GAAMD,EAAK,EAAGE,GAAMF,EAAK,EAG5C,IAAKC,GAAMA,EAAKF,EAAIN,GAAKG,EAAUM,GAAMA,EAAKH,EAAIL,GAAKE,EAAUE,EAAI,EAAGA,EAAIC,EAAG,EAAED,EAC/EE,EAAOL,EAAMG,CAAC,EAAGE,EAAK,GAAKC,EAAID,EAAK,GAAKE,CAE7C,CAEA,OAAAL,EAAM,WAAa,SAASM,EAAG,CAC7BR,EAAQQ,CACV,EAEAN,EAAM,EAAI,SAASM,EAAG,CACpB,OAAO,UAAU,QAAUV,EAAI,CAACU,EAAGN,GAASJ,CAC9C,EAEAI,EAAM,EAAI,SAASM,EAAG,CACpB,OAAO,UAAU,QAAUT,EAAI,CAACS,EAAGN,GAASH,CAC9C,EAEAG,EAAM,SAAW,SAASM,EAAG,CAC3B,OAAO,UAAU,QAAUP,EAAW,CAACO,EAAGN,GAASD,CACrD,EAEOC,CACT,CCvCe,SAAAO,GAASC,EAAG,CACzB,MAAMZ,EAAI,CAAC,KAAK,GAAG,KAAK,KAAMY,CAAC,EAC3BX,EAAI,CAAC,KAAK,GAAG,KAAK,KAAMW,CAAC,EAC7B,OAAOC,EAAI,KAAK,MAAMb,EAAGC,CAAC,EAAGD,EAAGC,EAAGW,CAAC,CACtC,CAEA,SAASC,EAAIC,EAAMd,EAAGC,EAAGW,EAAG,CAC1B,GAAI,MAAMZ,CAAC,GAAK,MAAMC,CAAC,EAAG,OAAOa,EAEjC,IAAIC,EACAR,EAAOO,EAAK,MACZE,EAAO,CAAC,KAAMJ,CAAC,EACfK,EAAKH,EAAK,IACVI,EAAKJ,EAAK,IACVK,EAAKL,EAAK,IACVM,EAAKN,EAAK,IACVO,EACAC,EACAC,EACAC,EACAC,EACAC,EACArB,EACAsB,EAGJ,GAAI,CAACpB,EAAM,OAAOO,EAAK,MAAQE,EAAMF,EAGrC,KAAOP,EAAK,QAGV,IAFIkB,EAAQzB,IAAMqB,GAAMJ,EAAKE,GAAM,IAAIF,EAAKI,EAASF,EAAKE,GACtDK,EAASzB,IAAMqB,GAAMJ,EAAKE,GAAM,IAAIF,EAAKI,EAASF,EAAKE,EACvDP,EAASR,EAAM,EAAEA,EAAOA,EAAKF,EAAIqB,GAAU,EAAID,CAAK,GAAI,OAAOV,EAAOV,CAAC,EAAIW,EAAMF,EAMvF,GAFAS,EAAK,CAACT,EAAK,GAAG,KAAK,KAAMP,EAAK,IAAI,EAClCiB,EAAK,CAACV,EAAK,GAAG,KAAK,KAAMP,EAAK,IAAI,EAC9BP,IAAMuB,GAAMtB,IAAMuB,EAAI,OAAOR,EAAK,KAAOT,EAAMQ,EAASA,EAAOV,CAAC,EAAIW,EAAOF,EAAK,MAAQE,EAAMF,EAGlG,GACEC,EAASA,EAASA,EAAOV,CAAC,EAAI,IAAI,MAAM,CAAC,EAAIS,EAAK,MAAQ,IAAI,MAAM,CAAC,GACjEW,EAAQzB,IAAMqB,GAAMJ,EAAKE,GAAM,IAAIF,EAAKI,EAASF,EAAKE,GACtDK,EAASzB,IAAMqB,GAAMJ,EAAKE,GAAM,IAAIF,EAAKI,EAASF,EAAKE,SACnDjB,EAAIqB,GAAU,EAAID,MAAYE,GAAKH,GAAMF,IAAO,EAAKC,GAAMF,IACrE,OAAON,EAAOY,CAAC,EAAIpB,EAAMQ,EAAOV,CAAC,EAAIW,EAAMF,CAC7C,CAEO,SAASc,GAAOC,EAAM,CAC3B,IAAIjB,EAAGP,EAAGC,EAAIuB,EAAK,OACf7B,EACAC,EACA6B,EAAK,IAAI,MAAMxB,CAAC,EAChByB,EAAK,IAAI,MAAMzB,CAAC,EAChBW,EAAK,IACLC,EAAK,IACLC,EAAK,KACLC,EAAK,KAGT,IAAKf,EAAI,EAAGA,EAAIC,EAAG,EAAED,EACf,MAAML,EAAI,CAAC,KAAK,GAAG,KAAK,KAAMY,EAAIiB,EAAKxB,CAAC,CAAC,CAAC,GAAK,MAAMJ,EAAI,CAAC,KAAK,GAAG,KAAK,KAAMW,CAAC,CAAC,IACnFkB,EAAGzB,CAAC,EAAIL,EACR+B,EAAG1B,CAAC,EAAIJ,EACJD,EAAIiB,IAAIA,EAAKjB,GACbA,EAAImB,IAAIA,EAAKnB,GACbC,EAAIiB,IAAIA,EAAKjB,GACbA,EAAImB,IAAIA,EAAKnB,IAInB,GAAIgB,EAAKE,GAAMD,EAAKE,EAAI,OAAO,KAM/B,IAHA,KAAK,MAAMH,EAAIC,CAAE,EAAE,MAAMC,EAAIC,CAAE,EAG1Bf,EAAI,EAAGA,EAAIC,EAAG,EAAED,EACnBQ,EAAI,KAAMiB,EAAGzB,CAAC,EAAG0B,EAAG1B,CAAC,EAAGwB,EAAKxB,CAAC,CAAC,EAGjC,OAAO,IACT,CCnFe,SAAA2B,GAAShC,EAAGC,EAAG,CAC5B,GAAI,MAAMD,EAAI,CAACA,CAAC,GAAK,MAAMC,EAAI,CAACA,CAAC,EAAG,OAAO,KAE3C,IAAIgB,EAAK,KAAK,IACVC,EAAK,KAAK,IACVC,EAAK,KAAK,IACVC,EAAK,KAAK,IAKd,GAAI,MAAMH,CAAE,EACVE,GAAMF,EAAK,KAAK,MAAMjB,CAAC,GAAK,EAC5BoB,GAAMF,EAAK,KAAK,MAAMjB,CAAC,GAAK,MAIzB,CAMH,QALIgC,EAAId,EAAKF,GAAM,EACfV,EAAO,KAAK,MACZQ,EACA,EAEGE,EAAKjB,GAAKA,GAAKmB,GAAMD,EAAKjB,GAAKA,GAAKmB,GAGzC,OAFA,GAAKnB,EAAIiB,IAAO,EAAKlB,EAAIiB,EACzBF,EAAS,IAAI,MAAM,CAAC,EAAGA,EAAO,CAAC,EAAIR,EAAMA,EAAOQ,EAAQkB,GAAK,EACrD,EAAC,CACP,IAAK,GAAGd,EAAKF,EAAKgB,EAAGb,EAAKF,EAAKe,EAAG,MAClC,IAAK,GAAGhB,EAAKE,EAAKc,EAAGb,EAAKF,EAAKe,EAAG,MAClC,IAAK,GAAGd,EAAKF,EAAKgB,EAAGf,EAAKE,EAAKa,EAAG,MAClC,IAAK,GAAGhB,EAAKE,EAAKc,EAAGf,EAAKE,EAAKa,EAAG,KAC1C,CAGQ,KAAK,OAAS,KAAK,MAAM,SAAQ,KAAK,MAAQ1B,EACpD,CAEA,YAAK,IAAMU,EACX,KAAK,IAAMC,EACX,KAAK,IAAMC,EACX,KAAK,IAAMC,EACJ,IACT,CC1Ce,SAAAc,IAAW,CACxB,IAAIL,EAAO,CAAA,EACX,YAAK,MAAM,SAAStB,EAAM,CACxB,GAAI,CAACA,EAAK,OAAQ,GAAGsB,EAAK,KAAKtB,EAAK,IAAI,QAAUA,EAAOA,EAAK,KAChE,CAAC,EACMsB,CACT,CCNe,SAAAM,GAASzB,EAAG,CACzB,OAAO,UAAU,OACX,KAAK,MAAM,CAACA,EAAE,CAAC,EAAE,CAAC,EAAG,CAACA,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,MAAM,CAACA,EAAE,CAAC,EAAE,CAAC,EAAG,CAACA,EAAE,CAAC,EAAE,CAAC,CAAC,EACvD,MAAM,KAAK,GAAG,EAAI,OAAY,CAAC,CAAC,KAAK,IAAK,KAAK,GAAG,EAAG,CAAC,KAAK,IAAK,KAAK,GAAG,CAAC,CACjF,CCJe,SAAA0B,EAAS7B,EAAMU,EAAIC,EAAIC,EAAIC,EAAI,CAC5C,KAAK,KAAOb,EACZ,KAAK,GAAKU,EACV,KAAK,GAAKC,EACV,KAAK,GAAKC,EACV,KAAK,GAAKC,CACZ,CCJe,SAAAiB,GAASrC,EAAGC,EAAGqC,EAAQ,CACpC,IAAIT,EACAZ,EAAK,KAAK,IACVC,EAAK,KAAK,IACVC,EACAC,EACAmB,EACAC,EACAC,EAAK,KAAK,IACVC,EAAK,KAAK,IACVC,EAAQ,CAAA,EACRpC,EAAO,KAAK,MACZqC,EACAvC,EAUJ,IARIE,GAAMoC,EAAM,KAAK,IAAIP,EAAK7B,EAAMU,EAAIC,EAAIuB,EAAIC,CAAE,CAAC,EAC/CJ,GAAU,KAAMA,EAAS,KAE3BrB,EAAKjB,EAAIsC,EAAQpB,EAAKjB,EAAIqC,EAC1BG,EAAKzC,EAAIsC,EAAQI,EAAKzC,EAAIqC,EAC1BA,GAAUA,GAGLM,EAAID,EAAM,OAGf,GAAI,IAAEpC,EAAOqC,EAAE,QACPzB,EAAKyB,EAAE,IAAMH,IACbrB,EAAKwB,EAAE,IAAMF,IACbH,EAAKK,EAAE,IAAM3B,IACbuB,EAAKI,EAAE,IAAM1B,GAGrB,GAAIX,EAAK,OAAQ,CACf,IAAIc,GAAMF,EAAKoB,GAAM,EACjBjB,GAAMF,EAAKoB,GAAM,EAErBG,EAAM,KACJ,IAAIP,EAAK7B,EAAK,CAAC,EAAGc,EAAIC,EAAIiB,EAAIC,CAAE,EAChC,IAAIJ,EAAK7B,EAAK,CAAC,EAAGY,EAAIG,EAAID,EAAImB,CAAE,EAChC,IAAIJ,EAAK7B,EAAK,CAAC,EAAGc,EAAID,EAAImB,EAAIjB,CAAE,EAChC,IAAIc,EAAK7B,EAAK,CAAC,EAAGY,EAAIC,EAAIC,EAAIC,CAAE,CACxC,GAGUjB,GAAKJ,GAAKqB,IAAO,EAAKtB,GAAKqB,KAC7BuB,EAAID,EAAMA,EAAM,OAAS,CAAC,EAC1BA,EAAMA,EAAM,OAAS,CAAC,EAAIA,EAAMA,EAAM,OAAS,EAAItC,CAAC,EACpDsC,EAAMA,EAAM,OAAS,EAAItC,CAAC,EAAIuC,EAElC,KAGK,CACH,IAAIC,EAAK7C,EAAI,CAAC,KAAK,GAAG,KAAK,KAAMO,EAAK,IAAI,EACtCuC,EAAK7C,EAAI,CAAC,KAAK,GAAG,KAAK,KAAMM,EAAK,IAAI,EACtCwC,EAAKF,EAAKA,EAAKC,EAAKA,EACxB,GAAIC,EAAKT,EAAQ,CACf,IAAI1B,EAAI,KAAK,KAAK0B,EAASS,CAAE,EAC7B9B,EAAKjB,EAAIY,EAAGM,EAAKjB,EAAIW,EACrB6B,EAAKzC,EAAIY,EAAG8B,EAAKzC,EAAIW,EACrBiB,EAAOtB,EAAK,IACd,CACF,CAGF,OAAOsB,CACT,CCrEe,SAAAmB,GAASpC,EAAG,CACzB,GAAI,MAAMZ,EAAI,CAAC,KAAK,GAAG,KAAK,KAAMY,CAAC,CAAC,GAAK,MAAMX,EAAI,CAAC,KAAK,GAAG,KAAK,KAAMW,CAAC,CAAC,EAAG,OAAO,KAEnF,IAAIG,EACAR,EAAO,KAAK,MACZ0C,EACAC,EACAC,EACAlC,EAAK,KAAK,IACVC,EAAK,KAAK,IACVC,EAAK,KAAK,IACVC,EAAK,KAAK,IACVpB,EACAC,EACAoB,EACAC,EACAG,EACAC,EACArB,EACAsB,EAGJ,GAAI,CAACpB,EAAM,OAAO,KAIlB,GAAIA,EAAK,OAAQ,OAAa,CAG5B,IAFIkB,EAAQzB,IAAMqB,GAAMJ,EAAKE,GAAM,IAAIF,EAAKI,EAASF,EAAKE,GACtDK,EAASzB,IAAMqB,GAAMJ,EAAKE,GAAM,IAAIF,EAAKI,EAASF,EAAKE,EACrDP,EAASR,EAAM,EAAAA,EAAOA,EAAKF,EAAIqB,GAAU,EAAID,CAAK,GAAI,OAAO,KACnE,GAAI,CAAClB,EAAK,OAAQ,OACdQ,EAAQV,EAAI,EAAK,CAAC,GAAKU,EAAQV,EAAI,EAAK,CAAC,GAAKU,EAAQV,EAAI,EAAK,CAAC,KAAG4C,EAAWlC,EAAQY,EAAItB,EAChG,CAGA,KAAOE,EAAK,OAASK,GAAG,GAAMsC,EAAW3C,EAAM,EAAAA,EAAOA,EAAK,MAAO,OAAO,KAIzE,OAHI4C,EAAO5C,EAAK,OAAM,OAAOA,EAAK,KAG9B2C,GAAkBC,EAAOD,EAAS,KAAOC,EAAO,OAAOD,EAAS,KAAO,MAGtEnC,GAGLoC,EAAOpC,EAAOV,CAAC,EAAI8C,EAAO,OAAOpC,EAAOV,CAAC,GAGpCE,EAAOQ,EAAO,CAAC,GAAKA,EAAO,CAAC,GAAKA,EAAO,CAAC,GAAKA,EAAO,CAAC,IACpDR,KAAUQ,EAAO,CAAC,GAAKA,EAAO,CAAC,GAAKA,EAAO,CAAC,GAAKA,EAAO,CAAC,IACzD,CAACR,EAAK,SACP0C,EAAUA,EAAStB,CAAC,EAAIpB,EACvB,KAAK,MAAQA,GAGb,OAba,KAAK,MAAQ4C,EAAM,KAczC,CAEO,SAASC,GAAUvB,EAAM,CAC9B,QAASxB,EAAI,EAAG,EAAIwB,EAAK,OAAQxB,EAAI,EAAG,EAAEA,EAAG,KAAK,OAAOwB,EAAKxB,CAAC,CAAC,EAChE,OAAO,IACT,CC7De,SAAAgD,IAAW,CACxB,OAAO,KAAK,KACd,CCFe,SAAAC,IAAW,CACxB,IAAIC,EAAO,EACX,YAAK,MAAM,SAAShD,EAAM,CACxB,GAAI,CAACA,EAAK,OAAQ,EAAG,EAAEgD,QAAahD,EAAOA,EAAK,KAClD,CAAC,EACMgD,CACT,CCJe,SAAAC,GAASC,EAAU,CAChC,IAAId,EAAQ,CAAA,EAAIC,EAAGrC,EAAO,KAAK,MAAOmD,EAAOzC,EAAIC,EAAIC,EAAIC,EAEzD,IADIb,GAAMoC,EAAM,KAAK,IAAIP,EAAK7B,EAAM,KAAK,IAAK,KAAK,IAAK,KAAK,IAAK,KAAK,GAAG,CAAC,EACpEqC,EAAID,EAAM,OACf,GAAI,CAACc,EAASlD,EAAOqC,EAAE,KAAM3B,EAAK2B,EAAE,GAAI1B,EAAK0B,EAAE,GAAIzB,EAAKyB,EAAE,GAAIxB,EAAKwB,EAAE,EAAE,GAAKrC,EAAK,OAAQ,CACvF,IAAIc,GAAMJ,EAAKE,GAAM,EAAGG,GAAMJ,EAAKE,GAAM,GACrCsC,EAAQnD,EAAK,CAAC,IAAGoC,EAAM,KAAK,IAAIP,EAAKsB,EAAOrC,EAAIC,EAAIH,EAAIC,CAAE,CAAC,GAC3DsC,EAAQnD,EAAK,CAAC,IAAGoC,EAAM,KAAK,IAAIP,EAAKsB,EAAOzC,EAAIK,EAAID,EAAID,CAAE,CAAC,GAC3DsC,EAAQnD,EAAK,CAAC,IAAGoC,EAAM,KAAK,IAAIP,EAAKsB,EAAOrC,EAAIH,EAAIC,EAAIG,CAAE,CAAC,GAC3DoC,EAAQnD,EAAK,CAAC,IAAGoC,EAAM,KAAK,IAAIP,EAAKsB,EAAOzC,EAAIC,EAAIG,EAAIC,CAAE,CAAC,CACjE,CAEF,OAAO,IACT,CCbe,SAAAqC,GAASF,EAAU,CAChC,IAAId,EAAQ,CAAA,EAAIQ,EAAO,CAAA,EAAIP,EAE3B,IADI,KAAK,OAAOD,EAAM,KAAK,IAAIP,EAAK,KAAK,MAAO,KAAK,IAAK,KAAK,IAAK,KAAK,IAAK,KAAK,GAAG,CAAC,EAChFQ,EAAID,EAAM,OAAO,CACtB,IAAIpC,EAAOqC,EAAE,KACb,GAAIrC,EAAK,OAAQ,CACf,IAAImD,EAAOzC,EAAK2B,EAAE,GAAI1B,EAAK0B,EAAE,GAAIzB,EAAKyB,EAAE,GAAIxB,EAAKwB,EAAE,GAAIvB,GAAMJ,EAAKE,GAAM,EAAGG,GAAMJ,EAAKE,GAAM,GACxFsC,EAAQnD,EAAK,CAAC,IAAGoC,EAAM,KAAK,IAAIP,EAAKsB,EAAOzC,EAAIC,EAAIG,EAAIC,CAAE,CAAC,GAC3DoC,EAAQnD,EAAK,CAAC,IAAGoC,EAAM,KAAK,IAAIP,EAAKsB,EAAOrC,EAAIH,EAAIC,EAAIG,CAAE,CAAC,GAC3DoC,EAAQnD,EAAK,CAAC,IAAGoC,EAAM,KAAK,IAAIP,EAAKsB,EAAOzC,EAAIK,EAAID,EAAID,CAAE,CAAC,GAC3DsC,EAAQnD,EAAK,CAAC,IAAGoC,EAAM,KAAK,IAAIP,EAAKsB,EAAOrC,EAAIC,EAAIH,EAAIC,CAAE,CAAC,CACjE,CACA+B,EAAK,KAAKP,CAAC,CACb,CACA,KAAOA,EAAIO,EAAK,OACdM,EAASb,EAAE,KAAMA,EAAE,GAAIA,EAAE,GAAIA,EAAE,GAAIA,EAAE,EAAE,EAEzC,OAAO,IACT,CCpBO,SAASgB,GAAShD,EAAG,CAC1B,OAAOA,EAAE,CAAC,CACZ,CAEe,SAAAiD,GAASnD,EAAG,CACzB,OAAO,UAAU,QAAU,KAAK,GAAKA,EAAG,MAAQ,KAAK,EACvD,CCNO,SAASoD,GAASlD,EAAG,CAC1B,OAAOA,EAAE,CAAC,CACZ,CAEe,SAAAmD,GAASrD,EAAG,CACzB,OAAO,UAAU,QAAU,KAAK,GAAKA,EAAG,MAAQ,KAAK,EACvD,CCOe,SAASsD,EAAS9D,EAAOF,EAAGC,EAAG,CAC5C,IAAIa,EAAO,IAAImD,EAASjE,GAAY4D,GAAc3D,GAAY6D,GAAc,IAAK,IAAK,IAAK,GAAG,EAC9F,OAAO5D,GAAS,KAAOY,EAAOA,EAAK,OAAOZ,CAAK,CACjD,CAEA,SAAS+D,EAASjE,EAAGC,EAAGgB,EAAIC,EAAIC,EAAIC,EAAI,CACtC,KAAK,GAAKpB,EACV,KAAK,GAAKC,EACV,KAAK,IAAMgB,EACX,KAAK,IAAMC,EACX,KAAK,IAAMC,EACX,KAAK,IAAMC,EACX,KAAK,MAAQ,MACf,CAEA,SAAS8C,EAAUlD,EAAM,CAEvB,QADImD,EAAO,CAAC,KAAMnD,EAAK,IAAI,EAAGmC,EAAOgB,EAC9BnD,EAAOA,EAAK,MAAMmC,EAAOA,EAAK,KAAO,CAAC,KAAMnC,EAAK,IAAI,EAC5D,OAAOmD,CACT,CAEA,IAAIC,EAAYJ,EAAS,UAAYC,EAAS,UAE9CG,EAAU,KAAO,UAAW,CAC1B,IAAID,EAAO,IAAIF,EAAS,KAAK,GAAI,KAAK,GAAI,KAAK,IAAK,KAAK,IAAK,KAAK,IAAK,KAAK,GAAG,EAC5E1D,EAAO,KAAK,MACZL,EACAwD,EAEJ,GAAI,CAACnD,EAAM,OAAO4D,EAElB,GAAI,CAAC5D,EAAK,OAAQ,OAAO4D,EAAK,MAAQD,EAAU3D,CAAI,EAAG4D,EAGvD,IADAjE,EAAQ,CAAC,CAAC,OAAQK,EAAM,OAAQ4D,EAAK,MAAQ,IAAI,MAAM,CAAC,CAAC,CAAC,EACnD5D,EAAOL,EAAM,OAClB,QAASG,EAAI,EAAGA,EAAI,EAAG,EAAEA,GACnBqD,EAAQnD,EAAK,OAAOF,CAAC,KACnBqD,EAAM,OAAQxD,EAAM,KAAK,CAAC,OAAQwD,EAAO,OAAQnD,EAAK,OAAOF,CAAC,EAAI,IAAI,MAAM,CAAC,CAAC,CAAC,EAC9EE,EAAK,OAAOF,CAAC,EAAI6D,EAAUR,CAAK,GAK3C,OAAOS,CACT,EAEAC,EAAU,IAAMzD,GAChByD,EAAU,OAASC,GACnBD,EAAU,MAAQpC,GAClBoC,EAAU,KAAOlC,GACjBkC,EAAU,OAASjC,GACnBiC,EAAU,KAAO/B,GACjB+B,EAAU,OAASpB,GACnBoB,EAAU,UAAYE,GACtBF,EAAU,KAAOf,GACjBe,EAAU,KAAOd,GACjBc,EAAU,MAAQZ,GAClBY,EAAU,WAAaT,GACvBS,EAAU,EAAIP,GACdO,EAAU,EAAIL,GCxEC,SAAAQ,EAASvE,EAAG,CACzB,OAAO,UAAW,CAChB,OAAOA,CACT,CACF,CCJe,SAAAwE,EAASC,EAAQ,CAC9B,OAAQA,IAAW,IAAO,IAC5B,CCEA,SAASzE,GAAEY,EAAG,CACZ,OAAOA,EAAE,EAAIA,EAAE,EACjB,CAEA,SAASX,GAAEW,EAAG,CACZ,OAAOA,EAAE,EAAIA,EAAE,EACjB,CAEe,SAAA8D,GAASpC,EAAQ,CAC9B,IAAIpC,EACAyE,EACAF,EACAtE,EAAW,EACXyE,EAAa,EAEb,OAAOtC,GAAW,aAAYA,EAASiC,EAASjC,GAAU,KAAO,EAAI,CAACA,CAAM,GAEhF,SAASlC,GAAQ,CASf,QARI,EAAGE,EAAIJ,EAAM,OACbY,EACAP,EACAsE,EACAC,EACAC,EACAC,EAEKC,EAAI,EAAGA,EAAIL,EAAY,EAAEK,EAEhC,IADAnE,EAAOkD,EAAS9D,EAAOF,GAAGC,EAAC,EAAE,WAAWiF,CAAO,EAC1C,EAAI,EAAG,EAAI5E,EAAG,EAAE,EACnBC,EAAOL,EAAM,CAAC,EACd6E,EAAKJ,EAAMpE,EAAK,KAAK,EAAGyE,EAAMD,EAAKA,EACnCF,EAAKtE,EAAK,EAAIA,EAAK,GACnBuE,EAAKvE,EAAK,EAAIA,EAAK,GACnBO,EAAK,MAAMqE,CAAK,EAIpB,SAASA,EAAMC,EAAMnE,EAAIC,EAAIC,EAAIC,EAAI,CACnC,IAAIS,EAAOuD,EAAK,KAAMC,EAAKD,EAAK,EAAGE,EAAIP,EAAKM,EAC5C,GAAIxD,EAAM,CACR,GAAIA,EAAK,MAAQtB,EAAK,MAAO,CAC3B,IAAIP,EAAI6E,EAAKhD,EAAK,EAAIA,EAAK,GACvB5B,EAAI6E,EAAKjD,EAAK,EAAIA,EAAK,GACvB0D,EAAIvF,EAAIA,EAAIC,EAAIA,EAChBsF,EAAID,EAAIA,IACNtF,IAAM,IAAGA,EAAIwE,EAAOC,CAAM,EAAGc,GAAKvF,EAAIA,GACtCC,IAAM,IAAGA,EAAIuE,EAAOC,CAAM,EAAGc,GAAKtF,EAAIA,GAC1CsF,GAAKD,GAAKC,EAAI,KAAK,KAAKA,CAAC,IAAMA,EAAIpF,EACnCI,EAAK,KAAOP,GAAKuF,IAAMD,GAAKD,GAAMA,IAAOL,EAAMK,IAC/C9E,EAAK,KAAON,GAAKsF,GAAKD,EACtBzD,EAAK,IAAM7B,GAAKsF,EAAI,EAAIA,GACxBzD,EAAK,IAAM5B,EAAIqF,EAEnB,CACA,MACF,CACA,OAAOrE,EAAK4D,EAAKS,GAAKnE,EAAK0D,EAAKS,GAAKpE,EAAK4D,EAAKQ,GAAKlE,EAAK0D,EAAKQ,CAChE,CACF,CAEA,SAASJ,EAAQE,EAAM,CACrB,GAAIA,EAAK,KAAM,OAAOA,EAAK,EAAIT,EAAMS,EAAK,KAAK,KAAK,EACpD,QAAS/E,EAAI+E,EAAK,EAAI,EAAG/E,EAAI,EAAG,EAAEA,EAC5B+E,EAAK/E,CAAC,GAAK+E,EAAK/E,CAAC,EAAE,EAAI+E,EAAK,IAC9BA,EAAK,EAAIA,EAAK/E,CAAC,EAAE,EAGvB,CAEA,SAASmF,GAAa,CACpB,GAAKtF,EACL,KAAI,EAAGI,EAAIJ,EAAM,OAAQK,EAEzB,IADAoE,EAAQ,IAAI,MAAMrE,CAAC,EACd,EAAI,EAAG,EAAIA,EAAG,EAAE,EAAGC,EAAOL,EAAM,CAAC,EAAGyE,EAAMpE,EAAK,KAAK,EAAI,CAAC+B,EAAO/B,EAAM,EAAGL,CAAK,EACrF,CAEA,OAAAE,EAAM,WAAa,SAASqF,EAAQC,EAAS,CAC3CxF,EAAQuF,EACRhB,EAASiB,EACTF,EAAU,CACZ,EAEApF,EAAM,WAAa,SAASM,EAAG,CAC7B,OAAO,UAAU,QAAUkE,EAAa,CAAClE,EAAGN,GAASwE,CACvD,EAEAxE,EAAM,SAAW,SAASM,EAAG,CAC3B,OAAO,UAAU,QAAUP,EAAW,CAACO,EAAGN,GAASD,CACrD,EAEAC,EAAM,OAAS,SAASM,EAAG,CACzB,OAAO,UAAU,QAAU4B,EAAS,OAAO5B,GAAM,WAAaA,EAAI6D,EAAS,CAAC7D,CAAC,EAAG8E,EAAU,EAAIpF,GAASkC,CACzG,EAEOlC,CACT,CChGA,SAASuF,GAAM/E,EAAG,CAChB,OAAOA,EAAE,KACX,CAEA,SAASgF,EAAKC,EAAUC,EAAQ,CAC9B,IAAIvF,EAAOsF,EAAS,IAAIC,CAAM,EAC9B,GAAI,CAACvF,EAAM,MAAM,IAAI,MAAM,mBAAqBuF,CAAM,EACtD,OAAOvF,CACT,CAEe,SAAAwF,GAASC,EAAO,CAC7B,IAAIC,EAAKN,GACLxF,EAAW+F,EACXC,EACAC,EAAW7B,EAAS,EAAE,EACtB8B,EACAnG,EACAoG,EACAC,EACA9B,EACAG,EAAa,EAEboB,GAAS,OAAMA,EAAQ,CAAA,GAE3B,SAASE,EAAgBM,EAAM,CAC7B,MAAO,GAAI,KAAK,IAAIF,EAAME,EAAK,OAAO,KAAK,EAAGF,EAAME,EAAK,OAAO,KAAK,CAAC,CACxE,CAEA,SAASpG,EAAMqG,EAAO,CACpB,QAASxB,EAAI,EAAG3E,EAAI0F,EAAM,OAAQf,EAAIL,EAAY,EAAEK,EAClD,QAAS5E,EAAI,EAAGmG,EAAME,EAAQC,EAAQ3G,EAAGC,EAAGsF,EAAGqB,EAAGvG,EAAIC,EAAG,EAAED,EACzDmG,EAAOR,EAAM3F,CAAC,EAAGqG,EAASF,EAAK,OAAQG,EAASH,EAAK,OACrDxG,EAAI2G,EAAO,EAAIA,EAAO,GAAKD,EAAO,EAAIA,EAAO,IAAMlC,EAAOC,CAAM,EAChExE,EAAI0G,EAAO,EAAIA,EAAO,GAAKD,EAAO,EAAIA,EAAO,IAAMlC,EAAOC,CAAM,EAChEc,EAAI,KAAK,KAAKvF,EAAIA,EAAIC,EAAIA,CAAC,EAC3BsF,GAAKA,EAAIc,EAAUhG,CAAC,GAAKkF,EAAIkB,EAAQN,EAAU9F,CAAC,EAChDL,GAAKuF,EAAGtF,GAAKsF,EACboB,EAAO,IAAM3G,GAAK4G,EAAIL,EAAKlG,CAAC,GAC5BsG,EAAO,IAAM1G,EAAI2G,EACjBF,EAAO,IAAM1G,GAAK4G,EAAI,EAAIA,GAC1BF,EAAO,IAAMzG,EAAI2G,CAGvB,CAEA,SAASpB,GAAa,CACpB,GAAKtF,EAEL,KAAIG,EACAC,EAAIJ,EAAM,OACV2G,EAAIb,EAAM,OACVH,EAAW,IAAI,IAAI3F,EAAM,IAAI,CAACU,EAAGP,IAAM,CAAC4F,EAAGrF,EAAGP,EAAGH,CAAK,EAAGU,CAAC,CAAC,CAAC,EAC5D4F,EAEJ,IAAKnG,EAAI,EAAGiG,EAAQ,IAAI,MAAMhG,CAAC,EAAGD,EAAIwG,EAAG,EAAExG,EACzCmG,EAAOR,EAAM3F,CAAC,EAAGmG,EAAK,MAAQnG,EAC1B,OAAOmG,EAAK,QAAW,WAAUA,EAAK,OAASZ,EAAKC,EAAUW,EAAK,MAAM,GACzE,OAAOA,EAAK,QAAW,WAAUA,EAAK,OAASZ,EAAKC,EAAUW,EAAK,MAAM,GAC7EF,EAAME,EAAK,OAAO,KAAK,GAAKF,EAAME,EAAK,OAAO,KAAK,GAAK,GAAK,EAC7DF,EAAME,EAAK,OAAO,KAAK,GAAKF,EAAME,EAAK,OAAO,KAAK,GAAK,GAAK,EAG/D,IAAKnG,EAAI,EAAGkG,EAAO,IAAI,MAAMM,CAAC,EAAGxG,EAAIwG,EAAG,EAAExG,EACxCmG,EAAOR,EAAM3F,CAAC,EAAGkG,EAAKlG,CAAC,EAAIiG,EAAME,EAAK,OAAO,KAAK,GAAKF,EAAME,EAAK,OAAO,KAAK,EAAIF,EAAME,EAAK,OAAO,KAAK,GAG3GL,EAAY,IAAI,MAAMU,CAAC,EAAGC,EAAkB,EAC5CT,EAAY,IAAI,MAAMQ,CAAC,EAAGE,EAAkB,EAC9C,CAEA,SAASD,GAAqB,CAC5B,GAAK5G,EAEL,QAASG,EAAI,EAAGC,EAAI0F,EAAM,OAAQ3F,EAAIC,EAAG,EAAED,EACzC8F,EAAU9F,CAAC,EAAI,CAACF,EAAS6F,EAAM3F,CAAC,EAAGA,EAAG2F,CAAK,CAE/C,CAEA,SAASe,GAAqB,CAC5B,GAAK7G,EAEL,QAASG,EAAI,EAAGC,EAAI0F,EAAM,OAAQ3F,EAAIC,EAAG,EAAED,EACzCgG,EAAUhG,CAAC,EAAI,CAAC+F,EAASJ,EAAM3F,CAAC,EAAGA,EAAG2F,CAAK,CAE/C,CAEA,OAAA5F,EAAM,WAAa,SAASqF,EAAQC,EAAS,CAC3CxF,EAAQuF,EACRhB,EAASiB,EACTF,EAAU,CACZ,EAEApF,EAAM,MAAQ,SAASM,EAAG,CACxB,OAAO,UAAU,QAAUsF,EAAQtF,EAAG8E,EAAU,EAAIpF,GAAS4F,CAC/D,EAEA5F,EAAM,GAAK,SAASM,EAAG,CACrB,OAAO,UAAU,QAAUuF,EAAKvF,EAAGN,GAAS6F,CAC9C,EAEA7F,EAAM,WAAa,SAASM,EAAG,CAC7B,OAAO,UAAU,QAAUkE,EAAa,CAAClE,EAAGN,GAASwE,CACvD,EAEAxE,EAAM,SAAW,SAASM,EAAG,CAC3B,OAAO,UAAU,QAAUP,EAAW,OAAOO,GAAM,WAAaA,EAAI6D,EAAS,CAAC7D,CAAC,EAAGoG,EAAkB,EAAI1G,GAASD,CACnH,EAEAC,EAAM,SAAW,SAASM,EAAG,CAC3B,OAAO,UAAU,QAAU0F,EAAW,OAAO1F,GAAM,WAAaA,EAAI6D,EAAS,CAAC7D,CAAC,EAAGqG,EAAkB,EAAI3G,GAASgG,CACnH,EAEOhG,CACT,CCnHA,MAAM4G,GAAI,QACJC,GAAI,WACJJ,EAAI,WAEK,SAAAK,IAAW,CACxB,IAAIC,EAAI,EACR,MAAO,KAAOA,GAAKH,GAAIG,EAAIF,IAAKJ,GAAKA,CACvC,CCJO,SAAS7G,GAAEY,EAAG,CACnB,OAAOA,EAAE,CACX,CAEO,SAASX,GAAEW,EAAG,CACnB,OAAOA,EAAE,CACX,CAEA,IAAIwG,GAAgB,GAChBC,GAAe,KAAK,IAAM,EAAI,KAAK,KAAK,CAAC,GAE9B,SAAAC,GAASpH,EAAO,CAC7B,IAAIqH,EACAd,EAAQ,EACRe,EAAW,KACXC,EAAa,EAAI,KAAK,IAAID,EAAU,EAAI,GAAG,EAC3CE,EAAc,EACdC,EAAgB,GAChBC,EAAS,IAAI,IACbC,EAAUC,GAAMC,CAAI,EACpBC,EAAQC,GAAS,OAAQ,KAAK,EAC9BxD,EAASyC,GAAG,EAEZhH,GAAS,OAAMA,EAAQ,CAAA,GAE3B,SAAS6H,GAAO,CACdG,EAAI,EACJF,EAAM,KAAK,OAAQT,CAAU,EACzBd,EAAQe,IACVK,EAAQ,KAAI,EACZG,EAAM,KAAK,MAAOT,CAAU,EAEhC,CAEA,SAASW,EAAKtD,EAAY,CACxB,IAAIvE,EAAGC,EAAIJ,EAAM,OAAQK,EAErBqE,IAAe,SAAWA,EAAa,GAE3C,QAASK,EAAI,EAAGA,EAAIL,EAAY,EAAEK,EAOhC,IANAwB,IAAUiB,EAAcjB,GAASgB,EAEjCG,EAAO,QAAQ,SAASxH,EAAO,CAC7BA,EAAMqG,CAAK,CACb,CAAC,EAEIpG,EAAI,EAAGA,EAAIC,EAAG,EAAED,EACnBE,EAAOL,EAAMG,CAAC,EACVE,EAAK,IAAM,KAAMA,EAAK,GAAKA,EAAK,IAAMoH,GACrCpH,EAAK,EAAIA,EAAK,GAAIA,EAAK,GAAK,GAC7BA,EAAK,IAAM,KAAMA,EAAK,GAAKA,EAAK,IAAMoH,GACrCpH,EAAK,EAAIA,EAAK,GAAIA,EAAK,GAAK,GAIrC,OAAOgH,CACT,CAEA,SAASY,GAAkB,CACzB,QAAS9H,EAAI,EAAGC,EAAIJ,EAAM,OAAQK,EAAMF,EAAIC,EAAG,EAAED,EAAG,CAIlD,GAHAE,EAAOL,EAAMG,CAAC,EAAGE,EAAK,MAAQF,EAC1BE,EAAK,IAAM,OAAMA,EAAK,EAAIA,EAAK,IAC/BA,EAAK,IAAM,OAAMA,EAAK,EAAIA,EAAK,IAC/B,MAAMA,EAAK,CAAC,GAAK,MAAMA,EAAK,CAAC,EAAG,CAClC,IAAI+B,EAAS8E,GAAgB,KAAK,KAAK,GAAM/G,CAAC,EAAG+H,EAAQ/H,EAAIgH,GAC7D9G,EAAK,EAAI+B,EAAS,KAAK,IAAI8F,CAAK,EAChC7H,EAAK,EAAI+B,EAAS,KAAK,IAAI8F,CAAK,CAClC,EACI,MAAM7H,EAAK,EAAE,GAAK,MAAMA,EAAK,EAAE,KACjCA,EAAK,GAAKA,EAAK,GAAK,EAExB,CACF,CAEA,SAAS8H,EAAgBjI,EAAO,CAC9B,OAAIA,EAAM,YAAYA,EAAM,WAAWF,EAAOuE,CAAM,EAC7CrE,CACT,CAEA,OAAA+H,EAAe,EAERZ,EAAa,CAClB,KAAMW,EAEN,QAAS,UAAW,CAClB,OAAOL,EAAQ,QAAQE,CAAI,EAAGR,CAChC,EAEA,KAAM,UAAW,CACf,OAAOM,EAAQ,KAAI,EAAIN,CACzB,EAEA,MAAO,SAAS7G,EAAG,CACjB,OAAO,UAAU,QAAUR,EAAQQ,EAAGyH,IAAmBP,EAAO,QAAQS,CAAe,EAAGd,GAAcrH,CAC1G,EAEA,MAAO,SAASQ,EAAG,CACjB,OAAO,UAAU,QAAU+F,EAAQ,CAAC/F,EAAG6G,GAAcd,CACvD,EAEA,SAAU,SAAS/F,EAAG,CACpB,OAAO,UAAU,QAAU8G,EAAW,CAAC9G,EAAG6G,GAAcC,CAC1D,EAEA,WAAY,SAAS9G,EAAG,CACtB,OAAO,UAAU,QAAU+G,EAAa,CAAC/G,EAAG6G,GAAc,CAACE,CAC7D,EAEA,YAAa,SAAS/G,EAAG,CACvB,OAAO,UAAU,QAAUgH,EAAc,CAAChH,EAAG6G,GAAcG,CAC7D,EAEA,cAAe,SAAShH,EAAG,CACzB,OAAO,UAAU,QAAUiH,EAAgB,EAAIjH,EAAG6G,GAAc,EAAII,CACtE,EAEA,aAAc,SAASjH,EAAG,CACxB,OAAO,UAAU,QAAU+D,EAAS/D,EAAGkH,EAAO,QAAQS,CAAe,EAAGd,GAAc9C,CACxF,EAEA,MAAO,SAAS6D,EAAM5H,EAAG,CACvB,OAAO,UAAU,OAAS,GAAMA,GAAK,KAAOkH,EAAO,OAAOU,CAAI,EAAIV,EAAO,IAAIU,EAAMD,EAAgB3H,CAAC,CAAC,EAAI6G,GAAcK,EAAO,IAAIU,CAAI,CACxI,EAEA,KAAM,SAAStI,EAAGC,EAAGqC,EAAQ,CAC3B,IAAIjC,EAAI,EACJC,EAAIJ,EAAM,OACV2C,EACAC,EACAC,EACAxC,EACAgI,EAKJ,IAHIjG,GAAU,KAAMA,EAAS,IACxBA,GAAUA,EAEVjC,EAAI,EAAGA,EAAIC,EAAG,EAAED,EACnBE,EAAOL,EAAMG,CAAC,EACdwC,EAAK7C,EAAIO,EAAK,EACduC,EAAK7C,EAAIM,EAAK,EACdwC,EAAKF,EAAKA,EAAKC,EAAKA,EAChBC,EAAKT,IAAQiG,EAAUhI,EAAM+B,EAASS,GAG5C,OAAOwF,CACT,EAEA,GAAI,SAASD,EAAM5H,EAAG,CACpB,OAAO,UAAU,OAAS,GAAKsH,EAAM,GAAGM,EAAM5H,CAAC,EAAG6G,GAAcS,EAAM,GAAGM,CAAI,CAC/E,CACJ,CACA,CCtJe,SAAAE,IAAW,CACxB,IAAItI,EACAK,EACAkE,EACAgC,EACAtG,EAAWoE,EAAS,GAAG,EACvB4B,EACAsC,EAAe,EACfC,EAAe,IACfC,EAAS,IAEb,SAASvI,EAAMM,EAAG,CAChB,IAAIL,EAAGC,EAAIJ,EAAM,OAAQY,EAAOkD,EAAS9D,EAAOF,GAAGC,EAAC,EAAE,WAAW2I,CAAU,EAC3E,IAAKnC,EAAQ/F,EAAGL,EAAI,EAAGA,EAAIC,EAAG,EAAED,EAAGE,EAAOL,EAAMG,CAAC,EAAGS,EAAK,MAAMqE,CAAK,CACtE,CAEA,SAASK,GAAa,CACpB,GAAKtF,EACL,KAAIG,EAAGC,EAAIJ,EAAM,OAAQK,EAEzB,IADA4F,EAAY,IAAI,MAAM7F,CAAC,EAClBD,EAAI,EAAGA,EAAIC,EAAG,EAAED,EAAGE,EAAOL,EAAMG,CAAC,EAAG8F,EAAU5F,EAAK,KAAK,EAAI,CAACJ,EAASI,EAAMF,EAAGH,CAAK,EAC3F,CAEA,SAAS0I,EAAWxD,EAAM,CACxB,IAAIjF,EAAW,EAAGyC,EAAGqE,EAAG4B,EAAS,EAAG7I,EAAGC,EAAGI,EAG1C,GAAI+E,EAAK,OAAQ,CACf,IAAKpF,EAAIC,EAAII,EAAI,EAAGA,EAAI,EAAG,EAAEA,GACtBuC,EAAIwC,EAAK/E,CAAC,KAAO4G,EAAI,KAAK,IAAIrE,EAAE,KAAK,KACxCzC,GAAYyC,EAAE,MAAOiG,GAAU5B,EAAGjH,GAAKiH,EAAIrE,EAAE,EAAG3C,GAAKgH,EAAIrE,EAAE,GAG/DwC,EAAK,EAAIpF,EAAI6I,EACbzD,EAAK,EAAInF,EAAI4I,CACf,KAGK,CACHjG,EAAIwC,EACJxC,EAAE,EAAIA,EAAE,KAAK,EACbA,EAAE,EAAIA,EAAE,KAAK,EACb,GAAGzC,GAAYgG,EAAUvD,EAAE,KAAK,KAAK,QAC9BA,EAAIA,EAAE,KACf,CAEAwC,EAAK,MAAQjF,CACf,CAEA,SAASgF,EAAMC,EAAMjE,EAAIT,EAAG6B,EAAI,CAC9B,GAAI,CAAC6C,EAAK,MAAO,MAAO,GAExB,IAAIpF,EAAIoF,EAAK,EAAI7E,EAAK,EAClBN,EAAImF,EAAK,EAAI7E,EAAK,EAClBuI,EAAIvG,EAAKpB,EACToE,EAAIvF,EAAIA,EAAIC,EAAIA,EAIpB,GAAI6I,EAAIA,EAAIH,EAASpD,EACnB,OAAIA,EAAImD,IACF1I,IAAM,IAAGA,EAAIwE,EAAOC,CAAM,EAAGc,GAAKvF,EAAIA,GACtCC,IAAM,IAAGA,EAAIuE,EAAOC,CAAM,EAAGc,GAAKtF,EAAIA,GACtCsF,EAAIkD,IAAclD,EAAI,KAAK,KAAKkD,EAAelD,CAAC,GACpDhF,EAAK,IAAMP,EAAIoF,EAAK,MAAQqB,EAAQlB,EACpChF,EAAK,IAAMN,EAAImF,EAAK,MAAQqB,EAAQlB,GAE/B,GAIJ,GAAIH,EAAK,QAAUG,GAAKmD,EAAc,QAGvCtD,EAAK,OAAS7E,GAAQ6E,EAAK,QACzBpF,IAAM,IAAGA,EAAIwE,EAAOC,CAAM,EAAGc,GAAKvF,EAAIA,GACtCC,IAAM,IAAGA,EAAIuE,EAAOC,CAAM,EAAGc,GAAKtF,EAAIA,GACtCsF,EAAIkD,IAAclD,EAAI,KAAK,KAAKkD,EAAelD,CAAC,IAGtD,GAAOH,EAAK,OAAS7E,IACnBuI,EAAI3C,EAAUf,EAAK,KAAK,KAAK,EAAIqB,EAAQlB,EACzChF,EAAK,IAAMP,EAAI8I,EACfvI,EAAK,IAAMN,EAAI6I,SACR1D,EAAOA,EAAK,KACvB,CAEA,OAAAhF,EAAM,WAAa,SAASqF,EAAQC,EAAS,CAC3CxF,EAAQuF,EACRhB,EAASiB,EACTF,EAAU,CACZ,EAEApF,EAAM,SAAW,SAASM,EAAG,CAC3B,OAAO,UAAU,QAAUP,EAAW,OAAOO,GAAM,WAAaA,EAAI6D,EAAS,CAAC7D,CAAC,EAAG8E,EAAU,EAAIpF,GAASD,CAC3G,EAEAC,EAAM,YAAc,SAASM,EAAG,CAC9B,OAAO,UAAU,QAAU+H,EAAe/H,EAAIA,EAAGN,GAAS,KAAK,KAAKqI,CAAY,CAClF,EAEArI,EAAM,YAAc,SAASM,EAAG,CAC9B,OAAO,UAAU,QAAUgI,EAAehI,EAAIA,EAAGN,GAAS,KAAK,KAAKsI,CAAY,CAClF,EAEAtI,EAAM,MAAQ,SAASM,EAAG,CACxB,OAAO,UAAU,QAAUiI,EAASjI,EAAIA,EAAGN,GAAS,KAAK,KAAKuI,CAAM,CACtE,EAEOvI,CACT,sZC1EM2I,EAAsC,CAC1C,UAAW,UACX,SAAU,UACV,QAAS,UACT,QAAS,UACT,QAAS,SACX,EAEA,SAASC,EAAazI,EAAyB,CAC7C,OAAIA,EAAK,OAAS,YACTwI,EAAY,UAEdA,EAAYxI,EAAK,UAAY,SAAS,GAAKwI,EAAY,OAChE,CAEA,MAAME,EAAqB,IACrBC,EAAsB,GACtBC,EAAsB,GAGtBC,EAAsB,GAGtBC,EAA+B,EAkBrC,SAASC,GACPpJ,EACAqJ,EAC6B,CAC7B,GAAIA,EAAS,OAAS,GAAKA,EAAS,QAAU,EAC5C,OAIF,IAAIC,EAAe,IACfC,EAAe,KACfC,EAAe,IACfC,EAAe,KACnB,UAAWrJ,KAAKJ,EAAO,CACrB,MAAM0J,EAAatJ,EAAE,GAAK,EACpBuJ,EAAavJ,EAAE,GAAK,EACtBsJ,EAAKJ,IACPA,EAAOI,GAELA,EAAKH,IACPA,EAAOG,GAELC,EAAKH,IACPA,EAAOG,GAELA,EAAKF,IACPA,EAAOE,EAEX,CAEA,MAAM5I,EAAauI,EAAOP,EAAa,EAAIG,EACrCjI,EAAasI,EAAOR,EAAa,EAAIG,EACrClI,EAAawI,EAAOR,EAAc,EAAIE,EACtChI,EAAauI,EAAOT,EAAc,EAAIE,EAEtCU,EAAoB3I,EAAKF,EACzB8I,EAAqB3I,EAAKF,EAE1B8I,EAAgB,KAAK,IAAIT,EAAS,MAAQO,EAAWP,EAAS,OAASQ,EAAY,CAAG,EAEtFE,GAAuBhJ,EAAKE,GAAM,EAClC+I,GAAuBhJ,EAAKE,GAAM,EAExC,MAAO,CACL,WAAYmI,EAAS,MAAQ,EAAIU,EAAcD,EAC/C,WAAYT,EAAS,OAAS,EAAIW,EAAcF,EAChD,MAAAA,CAAA,CAEJ,CAaO,SAASG,GAAe,CAC7B,UAAAC,EACA,eAAAC,EACA,YAAAC,EACA,kBAAAC,CACF,EAAqC,CACnC,MAAMC,EAASC,EAAAA,OAAsB,IAAI,EACnCC,EAAOD,EAAAA,OAAoB,IAAI,EAC/BE,EAASF,EAAAA,OAAiD,MAAS,EACnEG,EAAUH,EAAAA,OAAyD,MAAS,EAC5EI,EAAaJ,EAAAA,OACjB,MAAA,EAEIK,EAAaL,EAAAA,OACjB,MAAA,EAEIM,EAAoBN,EAAAA,OAAOJ,CAAc,EAC/CU,EAAkB,QAAUV,EAC5B,MAAMW,EAAgBP,EAAAA,OAAO,EAAK,EAC5B,CAACQ,EAAYC,CAAa,EAAIC,EAAAA,SAAS,CAAE,MAAO,IAAK,OAAQ,IAAK,EAClEC,EAAkBX,EAAAA,OAAO,CAAC,EAGhCY,EAAAA,UAAU,IAAM,OACd,MAAMC,IAAgCC,EAAAf,EAAO,UAAP,YAAAe,EAAgB,gBAAiB,KACvE,GAAI,CAACD,EACH,OAEF,MAAME,EAA2B,IAAI,eAAgBC,GAAY,CAC/D,UAAWC,KAASD,EAClBP,EAAc,CAAE,MAAOQ,EAAM,YAAY,MAAO,OAAQA,EAAM,YAAY,OAAQ,CAEtF,CAAC,EACD,OAAAF,EAAS,QAAQF,CAAS,EAC1BJ,EAAc,CAAE,MAAOI,EAAU,YAAa,OAAQA,EAAU,aAAc,EACvE,IAAM,CACXE,EAAS,WAAA,CACX,CACF,EAAG,CAAA,CAAE,EAGLH,EAAAA,UAAU,IAAM,CACd,GAAI,CAACb,EAAO,SAAW,CAACE,EAAK,QAC3B,OAEF,MAAMiB,EAAuBnB,EAAO,QAC9BoB,EAAmBlB,EAAK,QAExBmB,EAAqDC,GAAA,EACxD,YAAY,CAAC,GAAK,CAAC,CAAC,EACpB,OAAQ9D,GAEHA,EAAM,OAAS,UAIpB,EACA,GAAG,OAASA,GAAU,CACrB+D,EAAOH,CAAG,EAAE,KAAK,YAAa,OAAO5D,EAAM,SAAS,CAAC,CACvD,CAAC,EAEH,OAAA+D,EAAOJ,CAAK,EAAE,KAAKE,CAAY,EAC/BjB,EAAQ,QAAUiB,EACX,IAAM,CACXE,EAAOJ,CAAK,EAAE,GAAG,QAAS,IAAI,CAChC,CACF,EAAG,CAAA,CAAE,EAGL,MAAMK,EAAavB,EAAAA,OAAOH,CAAW,EACrC0B,EAAW,QAAU1B,EACrB,MAAM2B,EAAgBxB,EAAAA,OAAOF,CAAiB,EAC9C0B,EAAc,QAAU1B,EAGxBc,EAAAA,UAAU,IAAM,CACd,GAAI,CAACX,EAAK,QACR,OAEF,MAAMwB,EAAiBxB,EAAK,QAW5B,GARIC,EAAO,UACTA,EAAO,QAAQ,KAAA,EACfA,EAAO,QAAU,QAInBK,EAAc,QAAU,GAEpBZ,EAAU,MAAM,SAAW,EAAG,CAChC2B,EAAOG,CAAC,EAAE,UAAU,GAAG,EAAE,OAAA,EACzB,MACF,CAGA,MAAMC,EAAsB/B,EAAU,MAAM,IAAK9J,IAAO,CAAE,GAAGA,CAAA,EAAI,EAC3D8L,EAAgC,IAAI,IAAID,EAAS,IAAK7L,GAAM,CAACA,EAAE,GAAIA,CAAC,CAAC,CAAC,EACtE+L,EAAsBjC,EAAU,MACnC,OAAQ7E,GAAM6G,EAAQ,IAAI7G,EAAE,MAAM,GAAK6G,EAAQ,IAAI7G,EAAE,MAAM,CAAC,EAC5D,IAAKA,IAAO,CAAE,OAAQA,EAAE,OAAQ,OAAQA,EAAE,OAAQ,KAAMA,EAAE,MAAO,EAGpEwG,EAAOG,CAAC,EAAE,UAAU,GAAG,EAAE,OAAA,EAGzB,MAAMI,EAAoEP,EAAOG,CAAC,EAC/E,UAAmC,MAAM,EACzC,KAAKG,CAAQ,EACb,MAAA,EACA,OAAO,MAAM,EACb,KAAK,QAASE,EAAO,IAAI,EAG5BD,EAAQ,OAAO,OAAO,EAAE,KAAM1L,GAAeA,EAAE,IAAI,EAEnDiK,EAAW,QAAUyB,EAGrB,MAAME,EAAiET,EAAOG,CAAC,EAC5E,UAAgC,WAAW,EAC3C,KAAKC,CAAQ,EACb,MAAA,EACA,OAAO,GAAG,EACV,KAAK,QAAS,WAAWI,EAAO,IAAI,EAAE,EACtC,GAAG,QAAS,CAACE,EAAoB7L,IAAe,CAE3CwK,EAAgB,QAAU/B,GAG9B2C,EAAW,QAAQpL,EAAE,EAAE,CACzB,CAAC,EACA,GAAG,WAAY,CAAC6L,EAAoB7L,IAAe,CAClDqL,EAAc,QAAQrL,EAAE,EAAE,CAC5B,CAAC,EAEHkK,EAAW,QAAU0B,EAGrBA,EACG,OAAO,MAAM,EACb,KAAK,QAASD,EAAO,QAAQ,EAC7B,KAAK,QAAStD,CAAU,EACxB,KAAK,SAAUC,CAAW,EAC1B,KAAK,KAAMC,CAAW,EACtB,KAAK,KAAMA,CAAW,EACtB,MAAM,eAAiBvI,GAAeoI,EAAapI,CAAC,CAAC,EAGxD4L,EACG,OAAO,MAAM,EACb,KAAK,QAASD,EAAO,aAAa,EAClC,KAAK,QAAS,CAAC,EACf,KAAK,SAAUrD,CAAW,EAC1B,KAAK,KAAM,CAAC,EACZ,KAAK,OAAStI,GAAeoI,EAAapI,CAAC,CAAC,EAG/C4L,EACG,OAAO,MAAM,EACb,KAAK,QAASD,EAAO,SAAS,EAC9B,KAAK,IAAKtD,EAAa,CAAC,EACxB,KAAK,IAAKC,EAAc,EAAI,CAAC,EAC7B,KAAK,cAAe,QAAQ,EAC5B,KAAK,oBAAqB,SAAS,EACnC,KAAMtI,GAAgBA,EAAE,MAAM,OAAS,GAAKA,EAAE,MAAM,UAAU,EAAG,EAAE,EAAI,MAAQA,EAAE,KAAM,EAG1F4L,EACG,OAAO,MAAM,EACb,KAAK,QAASD,EAAO,SAAS,EAC9B,KAAK,IAAKtD,EAAa,CAAC,EACxB,KAAK,IAAKC,EAAc,CAAC,EACzB,KAAK,cAAe,QAAQ,EAC5B,KAAMtI,IACJA,EAAE,OAAS,YAAeA,EAAE,YAAc,MAAUA,EAAE,UAAY,IAAK,YAAA,CAAY,EAIxF,MAAM8L,EAAoCpF,GAAgB6E,CAAQ,EAC/D,MACC,OACApG,GAA4BsG,CAAQ,EACjC,GAAIzL,GAAMA,EAAE,EAAE,EACd,SAAS,GAAG,CAAA,EAEhB,MAAM,SAAU4H,GAAA,EAAgB,SAAS,IAAI,CAAC,EAC9C,MAAM,SAAUzI,GAAYkL,EAAW,MAAQ,EAAGA,EAAW,OAAS,CAAC,CAAC,EACxE,MAAM,UAAWvG,GAAsBuE,EAAa,EAAI,EAAE,CAAC,EAC3D,GAAG,OAAQ,IAAM,CAChBqD,EACG,KAAK,KAAO1L,GAAgBA,EAAE,OAAmB,GAAK,CAAC,EACvD,KAAK,KAAOA,GAAgBA,EAAE,OAAmB,GAAK,CAAC,EACvD,KAAK,KAAOA,GAAgBA,EAAE,OAAmB,GAAK,CAAC,EACvD,KAAK,KAAOA,GAAgBA,EAAE,OAAmB,GAAK,CAAC,EAE1D4L,EAAQ,KACN,YACC5L,GACC,cAAcA,EAAE,GAAK,GAAKqI,EAAa,CAAC,KAAKrI,EAAE,GAAK,GAAKsI,EAAc,CAAC,GAAA,CAE9E,CAAC,EAEHyB,EAAO,QAAU+B,EAGjB,MAAMC,EAAeC,KAClB,GAAG,QAAS,CAACH,EAAoD7L,IAAe,CAC/EA,EAAE,GAAKA,EAAE,EACTA,EAAE,GAAKA,EAAE,EACTwK,EAAgB,QAAU,CAC5B,CAAC,EACA,GAAG,OAAQ,CAACpD,EAAmDpH,IAAe,CAC7EA,EAAE,GAAKoH,EAAM,EACbpH,EAAE,GAAKoH,EAAM,EACboD,EAAgB,SAAW,KAAK,IAAIpD,EAAM,EAAE,EAAI,KAAK,IAAIA,EAAM,EAAE,EAE7DoD,EAAgB,QAAU/B,GAAwBqD,EAAI,YAAA,IAAkB,GAC1EA,EAAI,YAAY,EAAG,EAAE,QAAA,CAEzB,CAAC,EACA,GAAG,MAAO,CAAC1E,EAAmDpH,IAAe,CACvEoH,EAAM,QACT0E,EAAI,YAAY,CAAC,EAGnB9L,EAAE,GAAK,OACPA,EAAE,GAAK,MACT,CAAC,EACH,OAAA4L,EAAQ,KAAKG,CAAY,EAIzBD,EAAI,GAAG,MAAO,IAAM,CAClB,GACElC,EAAO,SACPI,EAAQ,SACRuB,EAAS,OAAS,GAClB,CAACnB,EAAc,SACf,CAACD,EAAkB,QACnB,CACAC,EAAc,QAAU,GACxB,MAAM6B,EAAmCvD,GAAiB6C,EAAUlB,CAAU,EAC9E,GAAI,CAAC4B,EACH,OAEF,KAAM,CAAE,WAAAC,EAAY,WAAAC,EAAY,MAAA/C,CAAA,EAA2B6C,EACrDG,GAA2CpC,EAAQ,QACnDqC,GAAIC,EAAa,UAAUJ,EAAYC,CAAU,EAAE,MAAM/C,CAAK,EAEpE+B,EAAOvB,EAAO,OAAO,EAAE,WAAA,EAAa,SAAS,GAAG,EAAE,KAAKwC,GAAG,UAAWC,EAAC,CACxE,CACF,CAAC,EAEM,IAAM,CACXP,EAAI,KAAA,CACN,CACF,EAAG,CAACtC,EAAWa,CAAU,CAAC,EAG1BI,EAAAA,UAAU,IAAM,CACd,GAAI,CAACX,EAAK,SAAW,CAACI,EAAW,SAAW,CAACD,EAAW,QACtD,OAGF,GAAI,CAACR,EAAgB,CAEnBS,EAAW,QAAQ,QAAQyB,EAAO,OAAQ,EAAK,EAAE,QAAQA,EAAO,SAAU,EAAK,EAC/E1B,EAAW,QAAQ,QAAQ0B,EAAO,WAAY,EAAK,EACnD,MACF,CAGA,MAAMY,EAA4B,IAAI,IAAI,CAAC9C,CAAc,CAAC,EAC1DQ,EAAW,QAAQ,KAAMjK,GAAe,CACtC,MAAMwM,EAAiBxM,EAAE,OAAmB,GACtCyM,EAAiBzM,EAAE,OAAmB,IACxCwM,IAAU/C,GAAkBgD,IAAUhD,KACxC8C,EAAa,IAAIC,CAAK,EACtBD,EAAa,IAAIE,CAAK,EAE1B,CAAC,EAGDvC,EAAW,QACR,QAAQyB,EAAO,SAAW3L,GAAeA,EAAE,KAAOyJ,CAAc,EAChE,QAAQkC,EAAO,OAAS3L,GAAe,CAACuM,EAAa,IAAIvM,EAAE,EAAE,CAAC,EAGjEiK,EAAW,QAAQ,QAAQ0B,EAAO,WAAa3L,GAAe,CAC5D,MAAMwM,EAAiBxM,EAAE,OAAmB,GACtCyM,EAAiBzM,EAAE,OAAmB,GAC5C,MAAO,CAACuM,EAAa,IAAIC,CAAK,GAAK,CAACD,EAAa,IAAIE,CAAK,CAC5D,CAAC,CACH,EAAG,CAAChD,EAAgBD,CAAS,CAAC,EAG9B,MAAMkD,EAAqBC,EAAAA,YAAY,IAAM,CAC3C,GAAI,CAAClD,GAAkB,CAACM,EAAO,SAAW,CAACH,EAAO,SAAW,CAACI,EAAQ,QACpE,OAEF,MAAMrK,EAA4BoK,EAAO,QACtC,MAAA,EACA,KAAMrK,GAAeA,EAAE,KAAO+J,CAAc,EAC/C,GAAI9J,GAAQ,OAAO,SAASA,EAAK,CAAC,GAAK,OAAO,SAASA,EAAK,CAAC,EAAG,CAC9D,MAAMyM,EAA2CpC,EAAQ,QACnDqC,EAAIC,EACP,UAAUjC,EAAW,MAAQ,EAAGA,EAAW,OAAS,CAAC,EACrD,MAAM,GAAG,EACT,UAAU,EAAE1K,EAAK,GAAK,GAAI,EAAEA,EAAK,GAAK,EAAE,EAE3CwL,EAAOvB,EAAO,OAAO,EAAE,WAAA,EAAa,SAAS,GAAG,EAAE,KAAKwC,EAAG,UAAWC,CAAC,CACxE,CACF,EAAG,CAAC5C,EAAgBY,CAAU,CAAC,EAE/BI,OAAAA,EAAAA,UAAU,IAAM,CACdiC,EAAA,CACF,EAAG,CAACA,CAAkB,CAAC,QAGpB,MAAA,CAAI,UAAWf,EAAO,eAAgB,cAAY,kBACjD,SAAAiB,EAAAA,KAAC,MAAA,CAAI,IAAKhD,EAAQ,MAAOS,EAAW,MAAO,OAAQA,EAAW,OAAQ,UAAWsB,EAAO,IACtF,SAAA,CAAAkB,MAAC,OAAA,CACC,SAAAD,EAAAA,KAAC,SAAA,CAAO,GAAG,OACT,SAAA,CAAAC,EAAAA,IAAC,iBAAA,CAAe,aAAa,IAAI,OAAO,cAAc,SACrD,UAAA,CACC,SAAA,CAAAA,EAAAA,IAAC,cAAA,CAAY,GAAG,aAAA,CAAc,EAC9BA,EAAAA,IAAC,cAAA,CAAY,GAAG,eAAA,CAAgB,CAAA,CAAA,CAClC,CAAA,CAAA,CACF,CAAA,CACF,EACAA,EAAAA,IAAC,IAAA,CAAE,IAAK/C,CAAA,CAAM,CAAA,CAAA,CAChB,CAAA,CACF,CAEJ,0lBC1cO,SAASgD,GAAqB,CACnC,OAAAC,EACA,MAAAzN,EACA,QAAA0N,EACA,aAAAC,CACF,EAA2C,CACzC,MAAMC,EAAWC,GAAA,EACX,CAAE,KAAAxN,EAAM,MAAAyN,CAAA,EAAUL,EAClB9H,EAAWoI,EAAAA,QAAQ,IAAM,IAAI,IAAI/N,EAAM,IAAKI,GAAM,CAACA,EAAE,GAAIA,CAAC,CAAC,CAAC,EAAG,CAACJ,CAAK,CAAC,EAG5E,SAASgO,GAA4B,CACnC,GAAI,EAAA3N,EAAK,OAAS,aAAe,CAACA,EAAK,UAGvC,OAAQA,EAAK,WAAA,CACX,IAAK,OACHuN,EAASK,GAAQ5N,EAAK,QAAQ,CAAC,EAC/B,MACF,IAAK,UACHuN,EAASM,GAAW7N,EAAK,QAAQ,CAAC,EAClC,KAEA,CAEN,CAEA,cACG,MAAA,CAAI,UAAWgM,EAAO,MAAO,cAAY,yBACxC,SAAA,CAAAiB,EAAAA,KAAC,MAAA,CAAI,UAAWjB,EAAO,OACrB,SAAA,CAAAkB,MAAC,KAAA,CAAG,UAAWlB,EAAO,MAAQ,WAAK,MAAM,EACzCkB,EAAAA,IAAC,UAAO,UAAWlB,EAAO,YAAa,QAASqB,EAAS,aAAW,QAAQ,SAAA,GAAA,CAE5E,CAAA,EACF,EAEAJ,EAAAA,KAAC,MAAA,CAAI,UAAWjB,EAAO,KACrB,SAAA,CAAAkB,EAAAA,IAAC,MAAA,CAAI,UAAWlB,EAAO,MACpB,SAAAhM,EAAK,OAAS,YAAc,cAAcA,EAAK,UAAU,IAAMA,EAAK,SACvE,EAECA,EAAK,SACJiN,EAAAA,KAAC,MAAA,CAAI,UAAWjB,EAAO,QACrB,SAAA,CAAAkB,EAAAA,IAAC,MAAA,CAAI,UAAWlB,EAAO,aAAc,SAAA,UAAO,QAC3C,IAAA,CAAE,UAAWA,EAAO,QAAU,WAAK,OAAA,CAAQ,CAAA,EAC9C,EAGDhM,EAAK,MAAQA,EAAK,KAAK,OAAS,GAC/BiN,OAAC,MAAA,CAAI,UAAWjB,EAAO,QACrB,SAAA,CAAAkB,EAAAA,IAAC,MAAA,CAAI,UAAWlB,EAAO,aAAc,SAAA,OAAI,QACxC,MAAA,CAAI,UAAWA,EAAO,KACpB,SAAAhM,EAAK,KAAK,IAAK8N,GACdZ,MAAC,QAAe,UAAWlB,EAAO,IAC/B,SAAA8B,CAAA,EADQA,CAEX,CACD,CAAA,CACH,CAAA,EACF,EAGD9N,EAAK,OAAS,aAAeA,EAAK,UACjCkN,MAAC,OAAI,UAAWlB,EAAO,QACrB,SAAAkB,EAAAA,IAAC,UAAO,UAAWlB,EAAO,SAAU,QAAS2B,EAAqB,6BAElE,EACF,EAGDF,EAAM,OAAS,UACb,MAAA,CAAI,UAAWzB,EAAO,QACrB,SAAA,CAAAiB,EAAAA,KAAC,MAAA,CAAI,UAAWjB,EAAO,aAAc,SAAA,CAAA,UAAQyB,EAAM,OAAO,GAAA,EAAC,EAC3DP,MAAC,MAAG,UAAWlB,EAAO,SACnB,SAAAyB,EAAM,IAAKM,GAAS,OACnB,MAAMC,EAAkBD,EAAK,SAAW/N,EAAK,GAAK+N,EAAK,KAAOA,EAAK,OAC7DE,EAAkB,GAAGF,EAAK,MAAM,IAAIA,EAAK,IAAI,IAAIA,EAAK,IAAI,GAChE,cACG,KAAA,CAAiB,UAAW/B,EAAO,SAAU,cAAY,YACxD,SAAA,CAAAkB,EAAAA,IAAC,QAAK,UAAWlB,EAAO,SAAU,cAAY,YAC3C,WAAK,IAAA,CACR,EACAkB,EAAAA,IAAC,SAAA,CACC,UAAWlB,EAAO,aAClB,cAAY,iBACZ,QAAS,IAAM,CACbsB,EAAaU,CAAO,CACtB,EAEC,WAAAhD,EAAA1F,EAAS,IAAI0I,CAAO,IAApB,YAAAhD,EAAuB,QAAS,GAAGgD,EAAQ,UAAU,EAAG,CAAC,CAAC,KAAA,CAAA,CAC7D,CAAA,EAZOC,CAaT,CAEJ,CAAC,CAAA,CACH,CAAA,EACF,EAGFhB,EAAAA,KAAC,MAAA,CAAI,UAAWjB,EAAO,WACpB,SAAA,CAAAhM,EAAK,kBAAc,MAAA,CAAI,SAAA,CAAA,YAAU,IAAI,KAAKA,EAAK,SAAS,EAAE,mBAAA,CAAmB,EAAE,EAC/EA,EAAK,WAAaiN,EAAAA,KAAC,MAAA,CAAI,SAAA,CAAA,YAAU,IAAI,KAAKjN,EAAK,SAAS,EAAE,mBAAA,CAAmB,CAAA,CAAE,CAAA,CAAA,CAClF,CAAA,CAAA,CACF,CAAA,EACF,CAEJ,uJCxGO,SAASkO,IAA6B,CAC3C,KAAM,CAAE,UAAAC,CAAA,EAAcC,GAAA,EAChB,CAAE,WAAAC,EAAY,UAAAC,EAAW,QAAAC,EAAS,UAAA1E,EAAW,WAAA2E,EAAY,aAAAC,GAAiBN,EAC1E,CAAE,WAAAO,EAAY,WAAAC,EAAY,eAAAC,CAAA,EAAmBT,EAUnDrD,EAAAA,UAAU,IAAM,CACduD,EAAA,EAAa,MAAM,IAAM,CAAC,CAAC,CAC7B,EAAG,CAACA,CAAU,CAAC,EAEf,MAAMQ,EAAc7B,EAAAA,YAAY,IAAM,CACpCqB,EAAA,EAAa,MAAM,IAAM,CAAC,CAAC,CAC7B,EAAG,CAACA,CAAU,CAAC,EAKTS,EAAkB9B,EAAAA,YACrBzH,GAAmB,CAClBmJ,EAAWnJ,CAAM,EAAE,MAAM,IAAM,CAAC,CAAC,CACnC,EACA,CAACmJ,CAAU,CAAA,EAGPK,EAAwB/B,EAAAA,YAC3BzH,GAAmB,CAClBoJ,EAAWpJ,CAAM,EAAE,MAAM,IAAM,CAAC,CAAC,CACnC,EACA,CAACoJ,CAAU,CAAA,EAGPK,EAAoBhC,EAAAA,YAAY,IAAM,CAC1C4B,EAAA,CACF,EAAG,CAACA,CAAc,CAAC,EAEbK,EAAc,CAAC,CAAE,MAAO,YAAa,IAAKC,GAAe,EAEzDC,EAAYb,IAAc,QAAa,CAACC,EACxCa,EAAY,CAACD,GAAatF,EAAU,MAAM,SAAW,GAAK,CAAC0E,EAEjE,cACG,MAAA,CAAI,UAAWvC,EAAO,OAAQ,cAAY,iBACzC,SAAA,CAAAkB,EAAAA,IAACmC,GAAA,CAAY,SAAUJ,CAAA,CAAa,EAEpChC,EAAAA,KAAC,MAAA,CAAI,UAAWjB,EAAO,UACpB,SAAA,CAAAmD,SACE,MAAA,CAAI,UAAWnD,EAAO,MAAO,cAAY,kBACvC,SAAA,CAAAsC,IAAc,cACbrB,EAAAA,KAAAqC,EAAAA,SAAA,CACE,SAAA,CAAApC,EAAAA,IAAC,KAAE,SAAA,oCAAA,CAAuC,EAC1CA,EAAAA,IAAC,KAAE,SAAA,6FAAA,CAGH,CAAA,CAAA,CACF,EAEAD,EAAAA,KAAAqC,EAAAA,SAAA,CACE,SAAA,CAAApC,EAAAA,IAAC,KAAE,SAAA,qCAAA,CAAmC,EACtCA,EAAAA,IAAC,KAAE,SAAA,qDAAA,CAAmD,CAAA,EACxD,EAEFA,EAAAA,IAAC,SAAA,CACC,KAAK,SACL,UAAWlB,EAAO,YAClB,QAAS6C,EACT,cAAY,kBACb,SAAA,OAAA,CAAA,CAED,EACF,EACEO,EACFnC,OAAC,MAAA,CAAI,UAAWjB,EAAO,MACrB,SAAA,CAAAkB,EAAAA,IAAC,KAAE,SAAA,2BAAA,CAAyB,EAC5BA,EAAAA,IAAC,KAAE,SAAA,wEAAA,CAAsE,CAAA,CAAA,CAC3E,EAEAA,EAAAA,IAACtD,GAAA,CACC,UAAAC,EACA,eAAgB2E,EAChB,YAAaM,EACb,kBAAmBC,CAAA,CAAA,EAItBN,GAAgBD,GACftB,EAAAA,IAACC,GAAA,CACC,OAAQsB,EACR,MAAO5E,EAAU,MACjB,QAASmF,EACT,aAAcF,CAAA,CAAA,CAChB,CAAA,CAEJ,CAAA,EACF,CAEJ","x_google_ignoreList":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21]}
|
|
1
|
+
{"version":3,"file":"KnowledgePage-C3HjBtgM.js","sources":["../../../../common/temp/node_modules/.pnpm/d3-force@3.0.0/node_modules/d3-force/src/center.js","../../../../common/temp/node_modules/.pnpm/d3-quadtree@3.0.1/node_modules/d3-quadtree/src/add.js","../../../../common/temp/node_modules/.pnpm/d3-quadtree@3.0.1/node_modules/d3-quadtree/src/cover.js","../../../../common/temp/node_modules/.pnpm/d3-quadtree@3.0.1/node_modules/d3-quadtree/src/data.js","../../../../common/temp/node_modules/.pnpm/d3-quadtree@3.0.1/node_modules/d3-quadtree/src/extent.js","../../../../common/temp/node_modules/.pnpm/d3-quadtree@3.0.1/node_modules/d3-quadtree/src/quad.js","../../../../common/temp/node_modules/.pnpm/d3-quadtree@3.0.1/node_modules/d3-quadtree/src/find.js","../../../../common/temp/node_modules/.pnpm/d3-quadtree@3.0.1/node_modules/d3-quadtree/src/remove.js","../../../../common/temp/node_modules/.pnpm/d3-quadtree@3.0.1/node_modules/d3-quadtree/src/root.js","../../../../common/temp/node_modules/.pnpm/d3-quadtree@3.0.1/node_modules/d3-quadtree/src/size.js","../../../../common/temp/node_modules/.pnpm/d3-quadtree@3.0.1/node_modules/d3-quadtree/src/visit.js","../../../../common/temp/node_modules/.pnpm/d3-quadtree@3.0.1/node_modules/d3-quadtree/src/visitAfter.js","../../../../common/temp/node_modules/.pnpm/d3-quadtree@3.0.1/node_modules/d3-quadtree/src/x.js","../../../../common/temp/node_modules/.pnpm/d3-quadtree@3.0.1/node_modules/d3-quadtree/src/y.js","../../../../common/temp/node_modules/.pnpm/d3-quadtree@3.0.1/node_modules/d3-quadtree/src/quadtree.js","../../../../common/temp/node_modules/.pnpm/d3-force@3.0.0/node_modules/d3-force/src/constant.js","../../../../common/temp/node_modules/.pnpm/d3-force@3.0.0/node_modules/d3-force/src/jiggle.js","../../../../common/temp/node_modules/.pnpm/d3-force@3.0.0/node_modules/d3-force/src/collide.js","../../../../common/temp/node_modules/.pnpm/d3-force@3.0.0/node_modules/d3-force/src/link.js","../../../../common/temp/node_modules/.pnpm/d3-force@3.0.0/node_modules/d3-force/src/lcg.js","../../../../common/temp/node_modules/.pnpm/d3-force@3.0.0/node_modules/d3-force/src/simulation.js","../../../../common/temp/node_modules/.pnpm/d3-force@3.0.0/node_modules/d3-force/src/manyBody.js","../../../web-components/src/components/knowledge/KnowledgeGraph.tsx","../../../web-components/src/components/knowledge/KnowledgeDetailPanel.tsx","../../src/pages/KnowledgePage.tsx"],"sourcesContent":["export default function(x, y) {\n var nodes, strength = 1;\n\n if (x == null) x = 0;\n if (y == null) y = 0;\n\n function force() {\n var i,\n n = nodes.length,\n node,\n sx = 0,\n sy = 0;\n\n for (i = 0; i < n; ++i) {\n node = nodes[i], sx += node.x, sy += node.y;\n }\n\n for (sx = (sx / n - x) * strength, sy = (sy / n - y) * strength, i = 0; i < n; ++i) {\n node = nodes[i], node.x -= sx, node.y -= sy;\n }\n }\n\n force.initialize = function(_) {\n nodes = _;\n };\n\n force.x = function(_) {\n return arguments.length ? (x = +_, force) : x;\n };\n\n force.y = function(_) {\n return arguments.length ? (y = +_, force) : y;\n };\n\n force.strength = function(_) {\n return arguments.length ? (strength = +_, force) : strength;\n };\n\n return force;\n}\n","export default function(d) {\n const x = +this._x.call(null, d),\n y = +this._y.call(null, d);\n return add(this.cover(x, y), x, y, d);\n}\n\nfunction add(tree, x, y, d) {\n if (isNaN(x) || isNaN(y)) return tree; // ignore invalid points\n\n var parent,\n node = tree._root,\n leaf = {data: d},\n x0 = tree._x0,\n y0 = tree._y0,\n x1 = tree._x1,\n y1 = tree._y1,\n xm,\n ym,\n xp,\n yp,\n right,\n bottom,\n i,\n j;\n\n // If the tree is empty, initialize the root as a leaf.\n if (!node) return tree._root = leaf, tree;\n\n // Find the existing leaf for the new point, or add it.\n while (node.length) {\n if (right = x >= (xm = (x0 + x1) / 2)) x0 = xm; else x1 = xm;\n if (bottom = y >= (ym = (y0 + y1) / 2)) y0 = ym; else y1 = ym;\n if (parent = node, !(node = node[i = bottom << 1 | right])) return parent[i] = leaf, tree;\n }\n\n // Is the new point is exactly coincident with the existing point?\n xp = +tree._x.call(null, node.data);\n yp = +tree._y.call(null, node.data);\n if (x === xp && y === yp) return leaf.next = node, parent ? parent[i] = leaf : tree._root = leaf, tree;\n\n // Otherwise, split the leaf node until the old and new point are separated.\n do {\n parent = parent ? parent[i] = new Array(4) : tree._root = new Array(4);\n if (right = x >= (xm = (x0 + x1) / 2)) x0 = xm; else x1 = xm;\n if (bottom = y >= (ym = (y0 + y1) / 2)) y0 = ym; else y1 = ym;\n } while ((i = bottom << 1 | right) === (j = (yp >= ym) << 1 | (xp >= xm)));\n return parent[j] = node, parent[i] = leaf, tree;\n}\n\nexport function addAll(data) {\n var d, i, n = data.length,\n x,\n y,\n xz = new Array(n),\n yz = new Array(n),\n x0 = Infinity,\n y0 = Infinity,\n x1 = -Infinity,\n y1 = -Infinity;\n\n // Compute the points and their extent.\n for (i = 0; i < n; ++i) {\n if (isNaN(x = +this._x.call(null, d = data[i])) || isNaN(y = +this._y.call(null, d))) continue;\n xz[i] = x;\n yz[i] = y;\n if (x < x0) x0 = x;\n if (x > x1) x1 = x;\n if (y < y0) y0 = y;\n if (y > y1) y1 = y;\n }\n\n // If there were no (valid) points, abort.\n if (x0 > x1 || y0 > y1) return this;\n\n // Expand the tree to cover the new points.\n this.cover(x0, y0).cover(x1, y1);\n\n // Add the new points.\n for (i = 0; i < n; ++i) {\n add(this, xz[i], yz[i], data[i]);\n }\n\n return this;\n}\n","export default function(x, y) {\n if (isNaN(x = +x) || isNaN(y = +y)) return this; // ignore invalid points\n\n var x0 = this._x0,\n y0 = this._y0,\n x1 = this._x1,\n y1 = this._y1;\n\n // If the quadtree has no extent, initialize them.\n // Integer extent are necessary so that if we later double the extent,\n // the existing quadrant boundaries don’t change due to floating point error!\n if (isNaN(x0)) {\n x1 = (x0 = Math.floor(x)) + 1;\n y1 = (y0 = Math.floor(y)) + 1;\n }\n\n // Otherwise, double repeatedly to cover.\n else {\n var z = x1 - x0 || 1,\n node = this._root,\n parent,\n i;\n\n while (x0 > x || x >= x1 || y0 > y || y >= y1) {\n i = (y < y0) << 1 | (x < x0);\n parent = new Array(4), parent[i] = node, node = parent, z *= 2;\n switch (i) {\n case 0: x1 = x0 + z, y1 = y0 + z; break;\n case 1: x0 = x1 - z, y1 = y0 + z; break;\n case 2: x1 = x0 + z, y0 = y1 - z; break;\n case 3: x0 = x1 - z, y0 = y1 - z; break;\n }\n }\n\n if (this._root && this._root.length) this._root = node;\n }\n\n this._x0 = x0;\n this._y0 = y0;\n this._x1 = x1;\n this._y1 = y1;\n return this;\n}\n","export default function() {\n var data = [];\n this.visit(function(node) {\n if (!node.length) do data.push(node.data); while (node = node.next)\n });\n return data;\n}\n","export default function(_) {\n return arguments.length\n ? this.cover(+_[0][0], +_[0][1]).cover(+_[1][0], +_[1][1])\n : isNaN(this._x0) ? undefined : [[this._x0, this._y0], [this._x1, this._y1]];\n}\n","export default function(node, x0, y0, x1, y1) {\n this.node = node;\n this.x0 = x0;\n this.y0 = y0;\n this.x1 = x1;\n this.y1 = y1;\n}\n","import Quad from \"./quad.js\";\n\nexport default function(x, y, radius) {\n var data,\n x0 = this._x0,\n y0 = this._y0,\n x1,\n y1,\n x2,\n y2,\n x3 = this._x1,\n y3 = this._y1,\n quads = [],\n node = this._root,\n q,\n i;\n\n if (node) quads.push(new Quad(node, x0, y0, x3, y3));\n if (radius == null) radius = Infinity;\n else {\n x0 = x - radius, y0 = y - radius;\n x3 = x + radius, y3 = y + radius;\n radius *= radius;\n }\n\n while (q = quads.pop()) {\n\n // Stop searching if this quadrant can’t contain a closer node.\n if (!(node = q.node)\n || (x1 = q.x0) > x3\n || (y1 = q.y0) > y3\n || (x2 = q.x1) < x0\n || (y2 = q.y1) < y0) continue;\n\n // Bisect the current quadrant.\n if (node.length) {\n var xm = (x1 + x2) / 2,\n ym = (y1 + y2) / 2;\n\n quads.push(\n new Quad(node[3], xm, ym, x2, y2),\n new Quad(node[2], x1, ym, xm, y2),\n new Quad(node[1], xm, y1, x2, ym),\n new Quad(node[0], x1, y1, xm, ym)\n );\n\n // Visit the closest quadrant first.\n if (i = (y >= ym) << 1 | (x >= xm)) {\n q = quads[quads.length - 1];\n quads[quads.length - 1] = quads[quads.length - 1 - i];\n quads[quads.length - 1 - i] = q;\n }\n }\n\n // Visit this point. (Visiting coincident points isn’t necessary!)\n else {\n var dx = x - +this._x.call(null, node.data),\n dy = y - +this._y.call(null, node.data),\n d2 = dx * dx + dy * dy;\n if (d2 < radius) {\n var d = Math.sqrt(radius = d2);\n x0 = x - d, y0 = y - d;\n x3 = x + d, y3 = y + d;\n data = node.data;\n }\n }\n }\n\n return data;\n}\n","export default function(d) {\n if (isNaN(x = +this._x.call(null, d)) || isNaN(y = +this._y.call(null, d))) return this; // ignore invalid points\n\n var parent,\n node = this._root,\n retainer,\n previous,\n next,\n x0 = this._x0,\n y0 = this._y0,\n x1 = this._x1,\n y1 = this._y1,\n x,\n y,\n xm,\n ym,\n right,\n bottom,\n i,\n j;\n\n // If the tree is empty, initialize the root as a leaf.\n if (!node) return this;\n\n // Find the leaf node for the point.\n // While descending, also retain the deepest parent with a non-removed sibling.\n if (node.length) while (true) {\n if (right = x >= (xm = (x0 + x1) / 2)) x0 = xm; else x1 = xm;\n if (bottom = y >= (ym = (y0 + y1) / 2)) y0 = ym; else y1 = ym;\n if (!(parent = node, node = node[i = bottom << 1 | right])) return this;\n if (!node.length) break;\n if (parent[(i + 1) & 3] || parent[(i + 2) & 3] || parent[(i + 3) & 3]) retainer = parent, j = i;\n }\n\n // Find the point to remove.\n while (node.data !== d) if (!(previous = node, node = node.next)) return this;\n if (next = node.next) delete node.next;\n\n // If there are multiple coincident points, remove just the point.\n if (previous) return (next ? previous.next = next : delete previous.next), this;\n\n // If this is the root point, remove it.\n if (!parent) return this._root = next, this;\n\n // Remove this leaf.\n next ? parent[i] = next : delete parent[i];\n\n // If the parent now contains exactly one leaf, collapse superfluous parents.\n if ((node = parent[0] || parent[1] || parent[2] || parent[3])\n && node === (parent[3] || parent[2] || parent[1] || parent[0])\n && !node.length) {\n if (retainer) retainer[j] = node;\n else this._root = node;\n }\n\n return this;\n}\n\nexport function removeAll(data) {\n for (var i = 0, n = data.length; i < n; ++i) this.remove(data[i]);\n return this;\n}\n","export default function() {\n return this._root;\n}\n","export default function() {\n var size = 0;\n this.visit(function(node) {\n if (!node.length) do ++size; while (node = node.next)\n });\n return size;\n}\n","import Quad from \"./quad.js\";\n\nexport default function(callback) {\n var quads = [], q, node = this._root, child, x0, y0, x1, y1;\n if (node) quads.push(new Quad(node, this._x0, this._y0, this._x1, this._y1));\n while (q = quads.pop()) {\n if (!callback(node = q.node, x0 = q.x0, y0 = q.y0, x1 = q.x1, y1 = q.y1) && node.length) {\n var xm = (x0 + x1) / 2, ym = (y0 + y1) / 2;\n if (child = node[3]) quads.push(new Quad(child, xm, ym, x1, y1));\n if (child = node[2]) quads.push(new Quad(child, x0, ym, xm, y1));\n if (child = node[1]) quads.push(new Quad(child, xm, y0, x1, ym));\n if (child = node[0]) quads.push(new Quad(child, x0, y0, xm, ym));\n }\n }\n return this;\n}\n","import Quad from \"./quad.js\";\n\nexport default function(callback) {\n var quads = [], next = [], q;\n if (this._root) quads.push(new Quad(this._root, this._x0, this._y0, this._x1, this._y1));\n while (q = quads.pop()) {\n var node = q.node;\n if (node.length) {\n var child, x0 = q.x0, y0 = q.y0, x1 = q.x1, y1 = q.y1, xm = (x0 + x1) / 2, ym = (y0 + y1) / 2;\n if (child = node[0]) quads.push(new Quad(child, x0, y0, xm, ym));\n if (child = node[1]) quads.push(new Quad(child, xm, y0, x1, ym));\n if (child = node[2]) quads.push(new Quad(child, x0, ym, xm, y1));\n if (child = node[3]) quads.push(new Quad(child, xm, ym, x1, y1));\n }\n next.push(q);\n }\n while (q = next.pop()) {\n callback(q.node, q.x0, q.y0, q.x1, q.y1);\n }\n return this;\n}\n","export function defaultX(d) {\n return d[0];\n}\n\nexport default function(_) {\n return arguments.length ? (this._x = _, this) : this._x;\n}\n","export function defaultY(d) {\n return d[1];\n}\n\nexport default function(_) {\n return arguments.length ? (this._y = _, this) : this._y;\n}\n","import tree_add, {addAll as tree_addAll} from \"./add.js\";\nimport tree_cover from \"./cover.js\";\nimport tree_data from \"./data.js\";\nimport tree_extent from \"./extent.js\";\nimport tree_find from \"./find.js\";\nimport tree_remove, {removeAll as tree_removeAll} from \"./remove.js\";\nimport tree_root from \"./root.js\";\nimport tree_size from \"./size.js\";\nimport tree_visit from \"./visit.js\";\nimport tree_visitAfter from \"./visitAfter.js\";\nimport tree_x, {defaultX} from \"./x.js\";\nimport tree_y, {defaultY} from \"./y.js\";\n\nexport default function quadtree(nodes, x, y) {\n var tree = new Quadtree(x == null ? defaultX : x, y == null ? defaultY : y, NaN, NaN, NaN, NaN);\n return nodes == null ? tree : tree.addAll(nodes);\n}\n\nfunction Quadtree(x, y, x0, y0, x1, y1) {\n this._x = x;\n this._y = y;\n this._x0 = x0;\n this._y0 = y0;\n this._x1 = x1;\n this._y1 = y1;\n this._root = undefined;\n}\n\nfunction leaf_copy(leaf) {\n var copy = {data: leaf.data}, next = copy;\n while (leaf = leaf.next) next = next.next = {data: leaf.data};\n return copy;\n}\n\nvar treeProto = quadtree.prototype = Quadtree.prototype;\n\ntreeProto.copy = function() {\n var copy = new Quadtree(this._x, this._y, this._x0, this._y0, this._x1, this._y1),\n node = this._root,\n nodes,\n child;\n\n if (!node) return copy;\n\n if (!node.length) return copy._root = leaf_copy(node), copy;\n\n nodes = [{source: node, target: copy._root = new Array(4)}];\n while (node = nodes.pop()) {\n for (var i = 0; i < 4; ++i) {\n if (child = node.source[i]) {\n if (child.length) nodes.push({source: child, target: node.target[i] = new Array(4)});\n else node.target[i] = leaf_copy(child);\n }\n }\n }\n\n return copy;\n};\n\ntreeProto.add = tree_add;\ntreeProto.addAll = tree_addAll;\ntreeProto.cover = tree_cover;\ntreeProto.data = tree_data;\ntreeProto.extent = tree_extent;\ntreeProto.find = tree_find;\ntreeProto.remove = tree_remove;\ntreeProto.removeAll = tree_removeAll;\ntreeProto.root = tree_root;\ntreeProto.size = tree_size;\ntreeProto.visit = tree_visit;\ntreeProto.visitAfter = tree_visitAfter;\ntreeProto.x = tree_x;\ntreeProto.y = tree_y;\n","export default function(x) {\n return function() {\n return x;\n };\n}\n","export default function(random) {\n return (random() - 0.5) * 1e-6;\n}\n","import {quadtree} from \"d3-quadtree\";\nimport constant from \"./constant.js\";\nimport jiggle from \"./jiggle.js\";\n\nfunction x(d) {\n return d.x + d.vx;\n}\n\nfunction y(d) {\n return d.y + d.vy;\n}\n\nexport default function(radius) {\n var nodes,\n radii,\n random,\n strength = 1,\n iterations = 1;\n\n if (typeof radius !== \"function\") radius = constant(radius == null ? 1 : +radius);\n\n function force() {\n var i, n = nodes.length,\n tree,\n node,\n xi,\n yi,\n ri,\n ri2;\n\n for (var k = 0; k < iterations; ++k) {\n tree = quadtree(nodes, x, y).visitAfter(prepare);\n for (i = 0; i < n; ++i) {\n node = nodes[i];\n ri = radii[node.index], ri2 = ri * ri;\n xi = node.x + node.vx;\n yi = node.y + node.vy;\n tree.visit(apply);\n }\n }\n\n function apply(quad, x0, y0, x1, y1) {\n var data = quad.data, rj = quad.r, r = ri + rj;\n if (data) {\n if (data.index > node.index) {\n var x = xi - data.x - data.vx,\n y = yi - data.y - data.vy,\n l = x * x + y * y;\n if (l < r * r) {\n if (x === 0) x = jiggle(random), l += x * x;\n if (y === 0) y = jiggle(random), l += y * y;\n l = (r - (l = Math.sqrt(l))) / l * strength;\n node.vx += (x *= l) * (r = (rj *= rj) / (ri2 + rj));\n node.vy += (y *= l) * r;\n data.vx -= x * (r = 1 - r);\n data.vy -= y * r;\n }\n }\n return;\n }\n return x0 > xi + r || x1 < xi - r || y0 > yi + r || y1 < yi - r;\n }\n }\n\n function prepare(quad) {\n if (quad.data) return quad.r = radii[quad.data.index];\n for (var i = quad.r = 0; i < 4; ++i) {\n if (quad[i] && quad[i].r > quad.r) {\n quad.r = quad[i].r;\n }\n }\n }\n\n function initialize() {\n if (!nodes) return;\n var i, n = nodes.length, node;\n radii = new Array(n);\n for (i = 0; i < n; ++i) node = nodes[i], radii[node.index] = +radius(node, i, nodes);\n }\n\n force.initialize = function(_nodes, _random) {\n nodes = _nodes;\n random = _random;\n initialize();\n };\n\n force.iterations = function(_) {\n return arguments.length ? (iterations = +_, force) : iterations;\n };\n\n force.strength = function(_) {\n return arguments.length ? (strength = +_, force) : strength;\n };\n\n force.radius = function(_) {\n return arguments.length ? (radius = typeof _ === \"function\" ? _ : constant(+_), initialize(), force) : radius;\n };\n\n return force;\n}\n","import constant from \"./constant.js\";\nimport jiggle from \"./jiggle.js\";\n\nfunction index(d) {\n return d.index;\n}\n\nfunction find(nodeById, nodeId) {\n var node = nodeById.get(nodeId);\n if (!node) throw new Error(\"node not found: \" + nodeId);\n return node;\n}\n\nexport default function(links) {\n var id = index,\n strength = defaultStrength,\n strengths,\n distance = constant(30),\n distances,\n nodes,\n count,\n bias,\n random,\n iterations = 1;\n\n if (links == null) links = [];\n\n function defaultStrength(link) {\n return 1 / Math.min(count[link.source.index], count[link.target.index]);\n }\n\n function force(alpha) {\n for (var k = 0, n = links.length; k < iterations; ++k) {\n for (var i = 0, link, source, target, x, y, l, b; i < n; ++i) {\n link = links[i], source = link.source, target = link.target;\n x = target.x + target.vx - source.x - source.vx || jiggle(random);\n y = target.y + target.vy - source.y - source.vy || jiggle(random);\n l = Math.sqrt(x * x + y * y);\n l = (l - distances[i]) / l * alpha * strengths[i];\n x *= l, y *= l;\n target.vx -= x * (b = bias[i]);\n target.vy -= y * b;\n source.vx += x * (b = 1 - b);\n source.vy += y * b;\n }\n }\n }\n\n function initialize() {\n if (!nodes) return;\n\n var i,\n n = nodes.length,\n m = links.length,\n nodeById = new Map(nodes.map((d, i) => [id(d, i, nodes), d])),\n link;\n\n for (i = 0, count = new Array(n); i < m; ++i) {\n link = links[i], link.index = i;\n if (typeof link.source !== \"object\") link.source = find(nodeById, link.source);\n if (typeof link.target !== \"object\") link.target = find(nodeById, link.target);\n count[link.source.index] = (count[link.source.index] || 0) + 1;\n count[link.target.index] = (count[link.target.index] || 0) + 1;\n }\n\n for (i = 0, bias = new Array(m); i < m; ++i) {\n link = links[i], bias[i] = count[link.source.index] / (count[link.source.index] + count[link.target.index]);\n }\n\n strengths = new Array(m), initializeStrength();\n distances = new Array(m), initializeDistance();\n }\n\n function initializeStrength() {\n if (!nodes) return;\n\n for (var i = 0, n = links.length; i < n; ++i) {\n strengths[i] = +strength(links[i], i, links);\n }\n }\n\n function initializeDistance() {\n if (!nodes) return;\n\n for (var i = 0, n = links.length; i < n; ++i) {\n distances[i] = +distance(links[i], i, links);\n }\n }\n\n force.initialize = function(_nodes, _random) {\n nodes = _nodes;\n random = _random;\n initialize();\n };\n\n force.links = function(_) {\n return arguments.length ? (links = _, initialize(), force) : links;\n };\n\n force.id = function(_) {\n return arguments.length ? (id = _, force) : id;\n };\n\n force.iterations = function(_) {\n return arguments.length ? (iterations = +_, force) : iterations;\n };\n\n force.strength = function(_) {\n return arguments.length ? (strength = typeof _ === \"function\" ? _ : constant(+_), initializeStrength(), force) : strength;\n };\n\n force.distance = function(_) {\n return arguments.length ? (distance = typeof _ === \"function\" ? _ : constant(+_), initializeDistance(), force) : distance;\n };\n\n return force;\n}\n","// https://en.wikipedia.org/wiki/Linear_congruential_generator#Parameters_in_common_use\nconst a = 1664525;\nconst c = 1013904223;\nconst m = 4294967296; // 2^32\n\nexport default function() {\n let s = 1;\n return () => (s = (a * s + c) % m) / m;\n}\n","import {dispatch} from \"d3-dispatch\";\nimport {timer} from \"d3-timer\";\nimport lcg from \"./lcg.js\";\n\nexport function x(d) {\n return d.x;\n}\n\nexport function y(d) {\n return d.y;\n}\n\nvar initialRadius = 10,\n initialAngle = Math.PI * (3 - Math.sqrt(5));\n\nexport default function(nodes) {\n var simulation,\n alpha = 1,\n alphaMin = 0.001,\n alphaDecay = 1 - Math.pow(alphaMin, 1 / 300),\n alphaTarget = 0,\n velocityDecay = 0.6,\n forces = new Map(),\n stepper = timer(step),\n event = dispatch(\"tick\", \"end\"),\n random = lcg();\n\n if (nodes == null) nodes = [];\n\n function step() {\n tick();\n event.call(\"tick\", simulation);\n if (alpha < alphaMin) {\n stepper.stop();\n event.call(\"end\", simulation);\n }\n }\n\n function tick(iterations) {\n var i, n = nodes.length, node;\n\n if (iterations === undefined) iterations = 1;\n\n for (var k = 0; k < iterations; ++k) {\n alpha += (alphaTarget - alpha) * alphaDecay;\n\n forces.forEach(function(force) {\n force(alpha);\n });\n\n for (i = 0; i < n; ++i) {\n node = nodes[i];\n if (node.fx == null) node.x += node.vx *= velocityDecay;\n else node.x = node.fx, node.vx = 0;\n if (node.fy == null) node.y += node.vy *= velocityDecay;\n else node.y = node.fy, node.vy = 0;\n }\n }\n\n return simulation;\n }\n\n function initializeNodes() {\n for (var i = 0, n = nodes.length, node; i < n; ++i) {\n node = nodes[i], node.index = i;\n if (node.fx != null) node.x = node.fx;\n if (node.fy != null) node.y = node.fy;\n if (isNaN(node.x) || isNaN(node.y)) {\n var radius = initialRadius * Math.sqrt(0.5 + i), angle = i * initialAngle;\n node.x = radius * Math.cos(angle);\n node.y = radius * Math.sin(angle);\n }\n if (isNaN(node.vx) || isNaN(node.vy)) {\n node.vx = node.vy = 0;\n }\n }\n }\n\n function initializeForce(force) {\n if (force.initialize) force.initialize(nodes, random);\n return force;\n }\n\n initializeNodes();\n\n return simulation = {\n tick: tick,\n\n restart: function() {\n return stepper.restart(step), simulation;\n },\n\n stop: function() {\n return stepper.stop(), simulation;\n },\n\n nodes: function(_) {\n return arguments.length ? (nodes = _, initializeNodes(), forces.forEach(initializeForce), simulation) : nodes;\n },\n\n alpha: function(_) {\n return arguments.length ? (alpha = +_, simulation) : alpha;\n },\n\n alphaMin: function(_) {\n return arguments.length ? (alphaMin = +_, simulation) : alphaMin;\n },\n\n alphaDecay: function(_) {\n return arguments.length ? (alphaDecay = +_, simulation) : +alphaDecay;\n },\n\n alphaTarget: function(_) {\n return arguments.length ? (alphaTarget = +_, simulation) : alphaTarget;\n },\n\n velocityDecay: function(_) {\n return arguments.length ? (velocityDecay = 1 - _, simulation) : 1 - velocityDecay;\n },\n\n randomSource: function(_) {\n return arguments.length ? (random = _, forces.forEach(initializeForce), simulation) : random;\n },\n\n force: function(name, _) {\n return arguments.length > 1 ? ((_ == null ? forces.delete(name) : forces.set(name, initializeForce(_))), simulation) : forces.get(name);\n },\n\n find: function(x, y, radius) {\n var i = 0,\n n = nodes.length,\n dx,\n dy,\n d2,\n node,\n closest;\n\n if (radius == null) radius = Infinity;\n else radius *= radius;\n\n for (i = 0; i < n; ++i) {\n node = nodes[i];\n dx = x - node.x;\n dy = y - node.y;\n d2 = dx * dx + dy * dy;\n if (d2 < radius) closest = node, radius = d2;\n }\n\n return closest;\n },\n\n on: function(name, _) {\n return arguments.length > 1 ? (event.on(name, _), simulation) : event.on(name);\n }\n };\n}\n","import {quadtree} from \"d3-quadtree\";\nimport constant from \"./constant.js\";\nimport jiggle from \"./jiggle.js\";\nimport {x, y} from \"./simulation.js\";\n\nexport default function() {\n var nodes,\n node,\n random,\n alpha,\n strength = constant(-30),\n strengths,\n distanceMin2 = 1,\n distanceMax2 = Infinity,\n theta2 = 0.81;\n\n function force(_) {\n var i, n = nodes.length, tree = quadtree(nodes, x, y).visitAfter(accumulate);\n for (alpha = _, i = 0; i < n; ++i) node = nodes[i], tree.visit(apply);\n }\n\n function initialize() {\n if (!nodes) return;\n var i, n = nodes.length, node;\n strengths = new Array(n);\n for (i = 0; i < n; ++i) node = nodes[i], strengths[node.index] = +strength(node, i, nodes);\n }\n\n function accumulate(quad) {\n var strength = 0, q, c, weight = 0, x, y, i;\n\n // For internal nodes, accumulate forces from child quadrants.\n if (quad.length) {\n for (x = y = i = 0; i < 4; ++i) {\n if ((q = quad[i]) && (c = Math.abs(q.value))) {\n strength += q.value, weight += c, x += c * q.x, y += c * q.y;\n }\n }\n quad.x = x / weight;\n quad.y = y / weight;\n }\n\n // For leaf nodes, accumulate forces from coincident quadrants.\n else {\n q = quad;\n q.x = q.data.x;\n q.y = q.data.y;\n do strength += strengths[q.data.index];\n while (q = q.next);\n }\n\n quad.value = strength;\n }\n\n function apply(quad, x1, _, x2) {\n if (!quad.value) return true;\n\n var x = quad.x - node.x,\n y = quad.y - node.y,\n w = x2 - x1,\n l = x * x + y * y;\n\n // Apply the Barnes-Hut approximation if possible.\n // Limit forces for very close nodes; randomize direction if coincident.\n if (w * w / theta2 < l) {\n if (l < distanceMax2) {\n if (x === 0) x = jiggle(random), l += x * x;\n if (y === 0) y = jiggle(random), l += y * y;\n if (l < distanceMin2) l = Math.sqrt(distanceMin2 * l);\n node.vx += x * quad.value * alpha / l;\n node.vy += y * quad.value * alpha / l;\n }\n return true;\n }\n\n // Otherwise, process points directly.\n else if (quad.length || l >= distanceMax2) return;\n\n // Limit forces for very close nodes; randomize direction if coincident.\n if (quad.data !== node || quad.next) {\n if (x === 0) x = jiggle(random), l += x * x;\n if (y === 0) y = jiggle(random), l += y * y;\n if (l < distanceMin2) l = Math.sqrt(distanceMin2 * l);\n }\n\n do if (quad.data !== node) {\n w = strengths[quad.data.index] * alpha / l;\n node.vx += x * w;\n node.vy += y * w;\n } while (quad = quad.next);\n }\n\n force.initialize = function(_nodes, _random) {\n nodes = _nodes;\n random = _random;\n initialize();\n };\n\n force.strength = function(_) {\n return arguments.length ? (strength = typeof _ === \"function\" ? _ : constant(+_), initialize(), force) : strength;\n };\n\n force.distanceMin = function(_) {\n return arguments.length ? (distanceMin2 = _ * _, force) : Math.sqrt(distanceMin2);\n };\n\n force.distanceMax = function(_) {\n return arguments.length ? (distanceMax2 = _ * _, force) : Math.sqrt(distanceMax2);\n };\n\n force.theta = function(_) {\n return arguments.length ? (theta2 = _ * _, force) : Math.sqrt(theta2);\n };\n\n return force;\n}\n","/**\n * Force-directed knowledge graph visualization using d3-force + SVG.\n *\n * Renders nodes as styled SVG elements with CSS theming support,\n * glassmorphic cards, glow effects, and smooth transitions.\n *\n * @module\n */\n\nimport { useCallback, useRef, useEffect, useState, type JSX } from \"react\";\nimport {\n forceSimulation,\n forceLink,\n forceManyBody,\n forceCenter,\n forceCollide,\n type Simulation,\n type SimulationNodeDatum,\n type SimulationLinkDatum,\n} from \"d3-force\";\nimport { drag, type D3DragEvent } from \"d3-drag\";\nimport { select, type Selection } from \"d3-selection\";\nimport { zoom, zoomIdentity, type ZoomBehavior } from \"d3-zoom\";\nimport \"d3-transition\";\nimport type { GraphNode, GraphLink } from \"../../hooks/types.js\";\nimport styles from \"./KnowledgeGraph.module.scss\";\n\n// ---------------------------------------------------------------------------\n// Types\n// ---------------------------------------------------------------------------\n\ninterface SimNode extends SimulationNodeDatum, GraphNode {}\n\ninterface SimLink extends SimulationLinkDatum<SimNode> {\n type: string;\n}\n\n// ---------------------------------------------------------------------------\n// Constants\n// ---------------------------------------------------------------------------\n\nconst NODE_COLORS: Record<string, string> = {\n reference: \"#4A9EFF\",\n decision: \"#22C55E\",\n insight: \"#EAB308\",\n concept: \"#A855F7\",\n snippet: \"#6B7280\",\n};\n\nfunction getNodeColor(node: GraphNode): string {\n if (node.kind === \"reference\") {\n return NODE_COLORS.reference;\n }\n return NODE_COLORS[node.category ?? \"insight\"] ?? NODE_COLORS.insight;\n}\n\nconst NODE_WIDTH: number = 200;\nconst NODE_HEIGHT: number = 52;\nconst NODE_RADIUS: number = 12;\n\n/** Padding around the bounding box when computing zoom-to-fit. */\nconst FIT_PADDING: number = 40;\n\n/** Minimum drag distance (px) before a mouseup is treated as a drag-end rather than a click. */\nconst DRAG_CLICK_THRESHOLD: number = 3;\n\n// ---------------------------------------------------------------------------\n// Helpers\n// ---------------------------------------------------------------------------\n\ninterface ZoomToFitResult {\n translateX: number;\n translateY: number;\n scale: number;\n}\n\n/**\n * Compute the transform needed to fit all nodes within the viewport.\n *\n * Returns translate + scale that centers the node bounding box with padding.\n * Scale is capped at 1.0 so small graphs are never zoomed in past 100%.\n */\nfunction computeZoomToFit(\n nodes: readonly { x?: number; y?: number }[],\n viewport: { width: number; height: number },\n): ZoomToFitResult | undefined {\n if (viewport.width <= 0 || viewport.height <= 0) {\n return undefined;\n }\n\n // Single-pass min/max to avoid stack overflow with large node counts\n let minX: number = Infinity;\n let maxX: number = -Infinity;\n let minY: number = Infinity;\n let maxY: number = -Infinity;\n for (const n of nodes) {\n const nx: number = n.x ?? 0;\n const ny: number = n.y ?? 0;\n if (nx < minX) {\n minX = nx;\n }\n if (nx > maxX) {\n maxX = nx;\n }\n if (ny < minY) {\n minY = ny;\n }\n if (ny > maxY) {\n maxY = ny;\n }\n }\n\n const x0: number = minX - NODE_WIDTH / 2 - FIT_PADDING;\n const x1: number = maxX + NODE_WIDTH / 2 + FIT_PADDING;\n const y0: number = minY - NODE_HEIGHT / 2 - FIT_PADDING;\n const y1: number = maxY + NODE_HEIGHT / 2 + FIT_PADDING;\n\n const bboxWidth: number = x1 - x0;\n const bboxHeight: number = y1 - y0;\n\n const scale: number = Math.min(viewport.width / bboxWidth, viewport.height / bboxHeight, 1.0);\n\n const bboxCenterX: number = (x0 + x1) / 2;\n const bboxCenterY: number = (y0 + y1) / 2;\n\n return {\n translateX: viewport.width / 2 - bboxCenterX * scale,\n translateY: viewport.height / 2 - bboxCenterY * scale,\n scale,\n };\n}\n\n// ---------------------------------------------------------------------------\n// Component\n// ---------------------------------------------------------------------------\n\ninterface KnowledgeGraphProps {\n graphData: { nodes: GraphNode[]; links: GraphLink[] };\n selectedNodeId?: string;\n onNodeClick: (nodeId: string) => void;\n onNodeDoubleClick: (nodeId: string) => void;\n}\n\nexport function KnowledgeGraph({\n graphData,\n selectedNodeId,\n onNodeClick,\n onNodeDoubleClick,\n}: KnowledgeGraphProps): JSX.Element {\n const svgRef = useRef<SVGSVGElement>(null);\n const gRef = useRef<SVGGElement>(null);\n const simRef = useRef<Simulation<SimNode, SimLink> | undefined>(undefined);\n const zoomRef = useRef<ZoomBehavior<SVGSVGElement, unknown> | undefined>(undefined);\n const linkElsRef = useRef<Selection<SVGLineElement, SimLink, SVGGElement, unknown> | undefined>(\n undefined,\n );\n const nodeElsRef = useRef<Selection<SVGGElement, SimNode, SVGGElement, unknown> | undefined>(\n undefined,\n );\n const selectedNodeIdRef = useRef(selectedNodeId);\n selectedNodeIdRef.current = selectedNodeId;\n const didAutoFitRef = useRef(false);\n const [dimensions, setDimensions] = useState({ width: 800, height: 600 });\n const dragDistanceRef = useRef(0);\n\n // Track container size\n useEffect(() => {\n const container: HTMLElement | null = svgRef.current?.parentElement ?? null;\n if (!container) {\n return;\n }\n const observer: ResizeObserver = new ResizeObserver((entries) => {\n for (const entry of entries) {\n setDimensions({ width: entry.contentRect.width, height: entry.contentRect.height });\n }\n });\n observer.observe(container);\n setDimensions({ width: container.clientWidth, height: container.clientHeight });\n return () => {\n observer.disconnect();\n };\n }, []);\n\n // Setup zoom\n useEffect(() => {\n if (!svgRef.current || !gRef.current) {\n return;\n }\n const svgEl: SVGSVGElement = svgRef.current;\n const gEl: SVGGElement = gRef.current;\n\n const zoomBehavior: ZoomBehavior<SVGSVGElement, unknown> = zoom<SVGSVGElement, unknown>()\n .scaleExtent([0.1, 4])\n .filter((event: Event) => {\n // Prevent zoom on double-click (we use it for expand)\n if (event.type === \"dblclick\") {\n return false;\n }\n return true;\n })\n .on(\"zoom\", (event) => {\n select(gEl).attr(\"transform\", String(event.transform));\n });\n\n select(svgEl).call(zoomBehavior);\n zoomRef.current = zoomBehavior;\n return () => {\n select(svgEl).on(\".zoom\", null);\n };\n }, []);\n\n // Stable callback refs so d3 event handlers don't go stale\n const onClickRef = useRef(onNodeClick);\n onClickRef.current = onNodeClick;\n const onDblClickRef = useRef(onNodeDoubleClick);\n onDblClickRef.current = onNodeDoubleClick;\n\n // Run simulation\n useEffect(() => {\n if (!gRef.current) {\n return;\n }\n const g: SVGGElement = gRef.current;\n\n // Stop previous\n if (simRef.current) {\n simRef.current.stop();\n simRef.current = undefined;\n }\n\n // Reset auto-fit flag when graph data changes so the next simulation run fits the view\n didAutoFitRef.current = false;\n\n if (graphData.nodes.length === 0) {\n select(g).selectAll(\"*\").remove();\n return;\n }\n\n // Clone data for d3 mutation\n const simNodes: SimNode[] = graphData.nodes.map((n) => ({ ...n }));\n const nodeMap: Map<string, SimNode> = new Map(simNodes.map((n) => [n.id, n]));\n const simLinks: SimLink[] = graphData.links\n .filter((l) => nodeMap.has(l.source) && nodeMap.has(l.target))\n .map((l) => ({ source: l.source, target: l.target, type: l.type }));\n\n // Clear previous elements\n select(g).selectAll(\"*\").remove();\n\n // Create link elements\n const linkEls: Selection<SVGLineElement, SimLink, SVGGElement, unknown> = select(g)\n .selectAll<SVGLineElement, SimLink>(\"line\")\n .data(simLinks)\n .enter()\n .append(\"line\")\n .attr(\"class\", styles.link);\n\n // Edge type tooltip on hover\n linkEls.append(\"title\").text((d: SimLink) => d.type);\n\n linkElsRef.current = linkEls;\n\n // Create node groups\n const nodeEls: Selection<SVGGElement, SimNode, SVGGElement, unknown> = select(g)\n .selectAll<SVGGElement, SimNode>(\"g.kg-node\")\n .data(simNodes)\n .enter()\n .append(\"g\")\n .attr(\"class\", `kg-node ${styles.node}`)\n .on(\"click\", (_event: MouseEvent, d: SimNode) => {\n // Suppress click if the user just finished dragging\n if (dragDistanceRef.current > DRAG_CLICK_THRESHOLD) {\n return;\n }\n onClickRef.current(d.id);\n })\n .on(\"dblclick\", (_event: MouseEvent, d: SimNode) => {\n onDblClickRef.current(d.id);\n });\n\n nodeElsRef.current = nodeEls;\n\n // Node card background\n nodeEls\n .append(\"rect\")\n .attr(\"class\", styles.nodeCard)\n .attr(\"width\", NODE_WIDTH)\n .attr(\"height\", NODE_HEIGHT)\n .attr(\"rx\", NODE_RADIUS)\n .attr(\"ry\", NODE_RADIUS)\n .style(\"--node-color\", (d: SimNode) => getNodeColor(d));\n\n // Category indicator bar\n nodeEls\n .append(\"rect\")\n .attr(\"class\", styles.nodeIndicator)\n .attr(\"width\", 4)\n .attr(\"height\", NODE_HEIGHT)\n .attr(\"rx\", 2)\n .attr(\"fill\", (d: SimNode) => getNodeColor(d));\n\n // Node label\n nodeEls\n .append(\"text\")\n .attr(\"class\", styles.nodeLabel)\n .attr(\"x\", NODE_WIDTH / 2)\n .attr(\"y\", NODE_HEIGHT / 2 - 4)\n .attr(\"text-anchor\", \"middle\")\n .attr(\"dominant-baseline\", \"central\")\n .text((d: SimNode) => (d.label.length > 26 ? d.label.substring(0, 24) + \"...\" : d.label));\n\n // Category badge\n nodeEls\n .append(\"text\")\n .attr(\"class\", styles.nodeBadge)\n .attr(\"x\", NODE_WIDTH / 2)\n .attr(\"y\", NODE_HEIGHT - 8)\n .attr(\"text-anchor\", \"middle\")\n .text((d: SimNode) =>\n (d.kind === \"reference\" ? (d.sourceType ?? \"ref\") : (d.category ?? \"\")).toUpperCase(),\n );\n\n // Simulation\n const sim: Simulation<SimNode, SimLink> = forceSimulation(simNodes)\n .force(\n \"link\",\n forceLink<SimNode, SimLink>(simLinks)\n .id((d) => d.id)\n .distance(140),\n )\n .force(\"charge\", forceManyBody().strength(-400))\n .force(\"center\", forceCenter(dimensions.width / 2, dimensions.height / 2))\n .force(\"collide\", forceCollide<SimNode>(NODE_WIDTH / 2 + 16))\n .on(\"tick\", () => {\n linkEls\n .attr(\"x1\", (d: SimLink) => (d.source as SimNode).x ?? 0)\n .attr(\"y1\", (d: SimLink) => (d.source as SimNode).y ?? 0)\n .attr(\"x2\", (d: SimLink) => (d.target as SimNode).x ?? 0)\n .attr(\"y2\", (d: SimLink) => (d.target as SimNode).y ?? 0);\n\n nodeEls.attr(\n \"transform\",\n (d: SimNode) =>\n `translate(${(d.x ?? 0) - NODE_WIDTH / 2},${(d.y ?? 0) - NODE_HEIGHT / 2})`,\n );\n });\n\n simRef.current = sim;\n\n // Drag behavior — lets users grab and reposition nodes\n const dragBehavior = drag<SVGGElement, SimNode>()\n .on(\"start\", (_event: D3DragEvent<SVGGElement, SimNode, SimNode>, d: SimNode) => {\n d.fx = d.x;\n d.fy = d.y;\n dragDistanceRef.current = 0;\n })\n .on(\"drag\", (event: D3DragEvent<SVGGElement, SimNode, SimNode>, d: SimNode) => {\n d.fx = event.x;\n d.fy = event.y;\n dragDistanceRef.current += Math.abs(event.dx) + Math.abs(event.dy);\n // Only reheat simulation once we confirm an actual drag gesture\n if (dragDistanceRef.current > DRAG_CLICK_THRESHOLD && sim.alphaTarget() === 0) {\n sim.alphaTarget(0.3).restart();\n }\n })\n .on(\"end\", (event: D3DragEvent<SVGGElement, SimNode, SimNode>, d: SimNode) => {\n if (!event.active) {\n sim.alphaTarget(0);\n }\n // Release node so it re-settles in the force layout\n d.fx = undefined;\n d.fy = undefined;\n });\n nodeEls.call(dragBehavior);\n\n // Zoom to fit all nodes once the force simulation has fully converged.\n // One-shot: skip if already fitted (drag reheat would re-trigger), or if a node is selected.\n sim.on(\"end\", () => {\n if (\n svgRef.current &&\n zoomRef.current &&\n simNodes.length > 0 &&\n !didAutoFitRef.current &&\n !selectedNodeIdRef.current\n ) {\n didAutoFitRef.current = true;\n const fit: ZoomToFitResult | undefined = computeZoomToFit(simNodes, dimensions);\n if (!fit) {\n return;\n }\n const { translateX, translateY, scale }: ZoomToFitResult = fit;\n const zb: ZoomBehavior<SVGSVGElement, unknown> = zoomRef.current;\n const t = zoomIdentity.translate(translateX, translateY).scale(scale);\n // eslint-disable-next-line @typescript-eslint/unbound-method -- d3 zoom API pattern\n select(svgRef.current).transition().duration(500).call(zb.transform, t);\n }\n });\n\n return () => {\n sim.stop();\n };\n }, [graphData, dimensions]);\n\n // Update selection styling without rebuilding simulation\n useEffect(() => {\n if (!gRef.current || !nodeElsRef.current || !linkElsRef.current) {\n return;\n }\n\n if (!selectedNodeId) {\n // No selection — full opacity on everything\n nodeElsRef.current.classed(styles.dimmed, false).classed(styles.selected, false);\n linkElsRef.current.classed(styles.dimmedLink, false);\n return;\n }\n\n // Build set of connected node IDs\n const connectedIds: Set<string> = new Set([selectedNodeId]);\n linkElsRef.current.each((d: SimLink) => {\n const srcId: string = (d.source as SimNode).id;\n const tgtId: string = (d.target as SimNode).id;\n if (srcId === selectedNodeId || tgtId === selectedNodeId) {\n connectedIds.add(srcId);\n connectedIds.add(tgtId);\n }\n });\n\n // Update node classes\n nodeElsRef.current\n .classed(styles.selected, (d: SimNode) => d.id === selectedNodeId)\n .classed(styles.dimmed, (d: SimNode) => !connectedIds.has(d.id));\n\n // Dim unconnected links\n linkElsRef.current.classed(styles.dimmedLink, (d: SimLink) => {\n const srcId: string = (d.source as SimNode).id;\n const tgtId: string = (d.target as SimNode).id;\n return !connectedIds.has(srcId) || !connectedIds.has(tgtId);\n });\n }, [selectedNodeId, graphData]);\n\n // Center on selected node\n const handleCenterOnNode = useCallback(() => {\n if (!selectedNodeId || !simRef.current || !svgRef.current || !zoomRef.current) {\n return;\n }\n const node: SimNode | undefined = simRef.current\n .nodes()\n .find((n: SimNode) => n.id === selectedNodeId);\n if (node && Number.isFinite(node.x) && Number.isFinite(node.y)) {\n const zb: ZoomBehavior<SVGSVGElement, unknown> = zoomRef.current;\n const t = zoomIdentity\n .translate(dimensions.width / 2, dimensions.height / 2)\n .scale(1.2)\n .translate(-(node.x ?? 0), -(node.y ?? 0));\n // eslint-disable-next-line @typescript-eslint/unbound-method -- d3 zoom API pattern\n select(svgRef.current).transition().duration(500).call(zb.transform, t);\n }\n }, [selectedNodeId, dimensions]);\n\n useEffect(() => {\n handleCenterOnNode();\n }, [handleCenterOnNode]);\n\n return (\n <div className={styles.graphContainer} data-testid=\"knowledge-graph\">\n <svg ref={svgRef} width={dimensions.width} height={dimensions.height} className={styles.svg}>\n <defs>\n <filter id=\"glow\">\n <feGaussianBlur stdDeviation=\"3\" result=\"coloredBlur\" />\n <feMerge>\n <feMergeNode in=\"coloredBlur\" />\n <feMergeNode in=\"SourceGraphic\" />\n </feMerge>\n </filter>\n </defs>\n <g ref={gRef} />\n </svg>\n </div>\n );\n}\n","/**\n * Slide-in detail panel for a selected knowledge graph node.\n *\n * @module\n */\n\nimport { useMemo, type JSX } from \"react\";\nimport type { GraphNode, NodeDetail } from \"../../hooks/types.js\";\nimport { taskUrl, sessionUrl } from \"../../utils/navigation.js\";\nimport { useAppNavigate } from \"../../utils/navigation.js\";\nimport styles from \"./KnowledgeDetailPanel.module.scss\";\n\ninterface KnowledgeDetailPanelProps {\n detail: NodeDetail;\n nodes: GraphNode[];\n onClose: () => void;\n onSelectNode: (id: string) => void;\n}\n\n/** Slide-in panel showing full details for a selected knowledge node. */\nexport function KnowledgeDetailPanel({\n detail,\n nodes,\n onClose,\n onSelectNode,\n}: KnowledgeDetailPanelProps): JSX.Element {\n const navigate = useAppNavigate();\n const { node, edges } = detail;\n const nodeById = useMemo(() => new Map(nodes.map((n) => [n.id, n])), [nodes]);\n\n /** Navigate to the source entity for reference nodes. */\n function handleViewInGrackle(): void {\n if (node.kind !== \"reference\" || !node.sourceId) {\n return;\n }\n switch (node.sourceType) {\n case \"task\":\n navigate(taskUrl(node.sourceId));\n break;\n case \"session\":\n navigate(sessionUrl(node.sourceId));\n break;\n default:\n break;\n }\n }\n\n return (\n <div className={styles.panel} data-testid=\"knowledge-detail-panel\">\n <div className={styles.header}>\n <h3 className={styles.title}>{node.label}</h3>\n <button className={styles.closeButton} onClick={onClose} aria-label=\"Close\">\n ×\n </button>\n </div>\n\n <div className={styles.body}>\n <div className={styles.badge}>\n {node.kind === \"reference\" ? `Reference (${node.sourceType})` : node.category}\n </div>\n\n {node.content && (\n <div className={styles.section}>\n <div className={styles.sectionLabel}>Content</div>\n <p className={styles.content}>{node.content}</p>\n </div>\n )}\n\n {node.tags && node.tags.length > 0 && (\n <div className={styles.section}>\n <div className={styles.sectionLabel}>Tags</div>\n <div className={styles.tags}>\n {node.tags.map((tag) => (\n <span key={tag} className={styles.tag}>\n {tag}\n </span>\n ))}\n </div>\n </div>\n )}\n\n {node.kind === \"reference\" && node.sourceId && (\n <div className={styles.section}>\n <button className={styles.viewLink} onClick={handleViewInGrackle}>\n View in Grackle →\n </button>\n </div>\n )}\n\n {edges.length > 0 && (\n <div className={styles.section}>\n <div className={styles.sectionLabel}>Edges ({edges.length})</div>\n <ul className={styles.edgeList}>\n {edges.map((edge) => {\n const otherId: string = edge.fromId === node.id ? edge.toId : edge.fromId;\n const edgeKey: string = `${edge.fromId}:${edge.toId}:${edge.type}`;\n return (\n <li key={edgeKey} className={styles.edgeItem} data-testid=\"edge-item\">\n <span className={styles.edgeType} data-testid=\"edge-type\">\n {edge.type}\n </span>\n <button\n className={styles.edgeNodeLink}\n data-testid=\"edge-node-link\"\n onClick={() => {\n onSelectNode(otherId);\n }}\n >\n {nodeById.get(otherId)?.label ?? `${otherId.substring(0, 8)}...`}\n </button>\n </li>\n );\n })}\n </ul>\n </div>\n )}\n\n <div className={styles.timestamps}>\n {node.createdAt && <div>Created: {new Date(node.createdAt).toLocaleDateString()}</div>}\n {node.updatedAt && <div>Updated: {new Date(node.updatedAt).toLocaleDateString()}</div>}\n </div>\n </div>\n </div>\n );\n}\n","/**\n * Knowledge Graph explorer page.\n *\n * Shows a force-directed graph of knowledge nodes. Search, workspace filter,\n * and node list live in the shared Sidebar (via KnowledgeNav).\n *\n * @module\n */\n\nimport { useCallback, useEffect, type JSX } from \"react\";\nimport {\n Breadcrumbs,\n KNOWLEDGE_URL,\n KnowledgeDetailPanel,\n KnowledgeGraph,\n} from \"@grackle-ai/web-components\";\nimport { useGrackle } from \"../context/GrackleContext.js\";\nimport styles from \"./KnowledgePage.module.scss\";\n\n/** Knowledge Graph explorer page. */\nexport function KnowledgePage(): JSX.Element {\n const { knowledge } = useGrackle();\n const { loadRecent, loadError, loading, graphData, selectedId, selectedNode } = knowledge;\n const { selectNode, expandNode, clearSelection } = knowledge;\n\n // Load recent nodes once on mount.\n //\n // Depend on the stable `loadRecent` callback, NOT the whole `knowledge`\n // object (#1357). `knowledge` changes identity whenever any knowledge state\n // updates, so `[knowledge]` here re-ran the effect on every render — each run\n // fired `loadRecent`, whose `setLoading`/`setNodes` calls triggered the next\n // render, an infinite fetch loop. Against a down Neo4j it became a 503 storm\n // and froze tab navigation under the constant re-renders.\n useEffect(() => {\n loadRecent().catch(() => {});\n }, [loadRecent]);\n\n const handleRetry = useCallback(() => {\n loadRecent().catch(() => {});\n }, [loadRecent]);\n\n // Depend on the specific stable callback refs, not the whole `knowledge`\n // object — `knowledge` changes identity on any knowledge state change, which\n // would needlessly recreate these handlers and re-render the graph/detail.\n const handleNodeClick = useCallback(\n (nodeId: string) => {\n selectNode(nodeId).catch(() => {});\n },\n [selectNode],\n );\n\n const handleNodeDoubleClick = useCallback(\n (nodeId: string) => {\n expandNode(nodeId).catch(() => {});\n },\n [expandNode],\n );\n\n const handleCloseDetail = useCallback(() => {\n clearSelection();\n }, [clearSelection]);\n\n const breadcrumbs = [{ label: \"Knowledge\", url: KNOWLEDGE_URL }];\n\n const showError = loadError !== undefined && !loading;\n const showEmpty = !showError && graphData.nodes.length === 0 && !loading;\n\n return (\n <div className={styles.layout} data-testid=\"knowledge-page\">\n <Breadcrumbs segments={breadcrumbs} />\n\n <div className={styles.graphArea}>\n {showError ? (\n <div className={styles.empty} data-testid=\"knowledge-error\">\n {loadError === \"unavailable\" ? (\n <>\n <p>Knowledge server can't be reached.</p>\n <p>\n The knowledge graph database (Neo4j) isn't running or is unreachable. Start\n it, then retry.\n </p>\n </>\n ) : (\n <>\n <p>Failed to load the knowledge graph.</p>\n <p>Something went wrong while loading knowledge nodes.</p>\n </>\n )}\n <button\n type=\"button\"\n className={styles.retryButton}\n onClick={handleRetry}\n data-testid=\"knowledge-retry\"\n >\n Retry\n </button>\n </div>\n ) : showEmpty ? (\n <div className={styles.empty}>\n <p>No knowledge nodes found.</p>\n <p>Create knowledge via MCP tools or let agents discover it during tasks.</p>\n </div>\n ) : (\n <KnowledgeGraph\n graphData={graphData}\n selectedNodeId={selectedId}\n onNodeClick={handleNodeClick}\n onNodeDoubleClick={handleNodeDoubleClick}\n />\n )}\n\n {selectedNode && selectedId && (\n <KnowledgeDetailPanel\n detail={selectedNode}\n nodes={graphData.nodes}\n onClose={handleCloseDetail}\n onSelectNode={handleNodeClick}\n />\n )}\n </div>\n </div>\n );\n}\n"],"names":["forceCenter","x","y","nodes","strength","force","i","n","node","sx","sy","_","tree_add","d","add","tree","parent","leaf","x0","y0","x1","y1","xm","ym","xp","yp","right","bottom","j","addAll","data","xz","yz","tree_cover","z","tree_data","tree_extent","Quad","tree_find","radius","x2","y2","x3","y3","quads","q","dx","dy","d2","tree_remove","retainer","previous","next","removeAll","tree_root","tree_size","size","tree_visit","callback","child","tree_visitAfter","defaultX","tree_x","defaultY","tree_y","quadtree","Quadtree","leaf_copy","copy","treeProto","tree_addAll","tree_removeAll","constant","jiggle","random","forceCollide","radii","iterations","xi","yi","ri","ri2","k","prepare","apply","quad","rj","r","l","initialize","_nodes","_random","index","find","nodeById","nodeId","forceLink","links","id","defaultStrength","strengths","distance","distances","count","bias","link","alpha","source","target","b","m","initializeStrength","initializeDistance","a","c","lcg","s","initialRadius","initialAngle","forceSimulation","simulation","alphaMin","alphaDecay","alphaTarget","velocityDecay","forces","stepper","timer","step","event","dispatch","tick","initializeNodes","angle","initializeForce","name","closest","forceManyBody","distanceMin2","distanceMax2","theta2","accumulate","weight","w","NODE_COLORS","getNodeColor","NODE_WIDTH","NODE_HEIGHT","NODE_RADIUS","FIT_PADDING","DRAG_CLICK_THRESHOLD","computeZoomToFit","viewport","minX","maxX","minY","maxY","nx","ny","bboxWidth","bboxHeight","scale","bboxCenterX","bboxCenterY","KnowledgeGraph","graphData","selectedNodeId","onNodeClick","onNodeDoubleClick","svgRef","useRef","gRef","simRef","zoomRef","linkElsRef","nodeElsRef","selectedNodeIdRef","didAutoFitRef","dimensions","setDimensions","useState","dragDistanceRef","useEffect","container","_a","observer","entries","entry","svgEl","gEl","zoomBehavior","zoom","select","onClickRef","onDblClickRef","g","simNodes","nodeMap","simLinks","linkEls","styles","nodeEls","_event","sim","dragBehavior","drag","fit","translateX","translateY","zb","t","zoomIdentity","connectedIds","srcId","tgtId","handleCenterOnNode","useCallback","jsxs","jsx","KnowledgeDetailPanel","detail","onClose","onSelectNode","navigate","useAppNavigate","edges","useMemo","handleViewInGrackle","taskUrl","sessionUrl","tag","edge","otherId","edgeKey","KnowledgePage","knowledge","useGrackle","loadRecent","loadError","loading","selectedId","selectedNode","selectNode","expandNode","clearSelection","handleRetry","handleNodeClick","handleNodeDoubleClick","handleCloseDetail","breadcrumbs","KNOWLEDGE_URL","showError","showEmpty","Breadcrumbs","Fragment"],"mappings":"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","x_google_ignoreList":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21]}
|