@infinit-canvas/react 0.1.23 → 0.1.24

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.
@@ -1,4 +1,4 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const T=require("react/jsx-runtime"),a=require("react"),pr=require("react-dom"),mr=160,vr=60;function Xr(e){return e&&typeof e=="object"&&"position"in e&&"data"in e}function Or(e){return e&&typeof e=="object"&&"source"in e&&"target"in e}function br(e,t){const n=typeof e=="string"?new Set([e]):new Set(Array.isArray(e)?e.map(r=>r.id):[e.id]);return t.filter(r=>n.has(r.source)||n.has(r.target))}function Ur(e,t,n){const r=typeof e=="string"?e:e.id,i=new Set;for(const o of n)o.target===r&&i.add(o.source);return t.filter(o=>i.has(o.id))}function qr(e,t,n){const r=typeof e=="string"?e:e.id,i=new Set;for(const o of n)o.source===r&&i.add(o.target);return t.filter(o=>i.has(o.id))}function Mn(e){if(!e.length)return{x:0,y:0,width:0,height:0};let t=1/0,n=1/0,r=-1/0,i=-1/0;for(const o of e){const c=o.position.x,f=o.position.y,m=o.width||mr,d=o.height||vr;c<t&&(t=c),f<n&&(n=f),c+m>r&&(r=c+m),f+d>i&&(i=f+d)}return{x:t,y:n,width:r-t,height:i-n}}function Yt(e,t,n,r=.1){const i=e.width*(1+r*2),o=e.height*(1+r*2),c=Math.min(t/i,n/o,1),f=e.x+e.width/2,m=e.y+e.height/2;return{x:t/2-f*c,y:n/2-m*c,zoom:c}}function Zn(e,t){return{x:t[0]*Math.round(e.x/t[0]),y:t[1]*Math.round(e.y/t[1])}}function Gn(e,t){return{x:Math.min(Math.max(e.x,t[0][0]),t[1][0]),y:Math.min(Math.max(e.y,t[0][1]),t[1][1])}}function Kn(e){var t,n;return{width:e.width||((t=e.measured)==null?void 0:t.width)||mr,height:e.height||((n=e.measured)==null?void 0:n.height)||vr}}function Zr(e,t,n={x:0,y:0,zoom:1},r=!1){const i=t.x,o=t.y,c=t.x+t.width,f=t.y+t.height;return e.filter(m=>{const{width:d,height:h}=Kn(m),b=m.position.x,S=m.position.y,C=b+d,z=S+h;return r?b<c&&C>i&&S<f&&z>o:b>=i&&C<=c&&S>=o&&z<=f})}function Gr(e){return{x:e.x,y:e.y,x2:e.x+e.width,y2:e.y+e.height}}function Qr(e){return{x:e.x,y:e.y,width:e.x2-e.x,height:e.y2-e.y}}function Jr(e,t){return{x:Math.min(e.x,t.x),y:Math.min(e.y,t.y),x2:Math.max(e.x2,t.x2),y2:Math.max(e.y2,t.y2)}}function Vr(e,t){const n=Math.max(0,Math.min(e.x+e.width,t.x+t.width)-Math.max(e.x,t.x)),r=Math.max(0,Math.min(e.y+e.height,t.y+t.height)-Math.max(e.y,t.y));return n*r}function Kr(e){const{width:t,height:n}=Kn(e);return{x:e.position.x,y:e.position.y,width:t,height:n}}const wr=`var qa = null, r = null, fr = 0, vr = 0, M = { x: 0, y: 0, zoom: 1 }, Y = [], W = [], C = [], F = !1, Ze = 40, We = !1, Nr = "lines", da = 1, Kt = null, lt = null, Tr = null, It = {}, tl = {}, it = {}, Zt = {}, Ia = 0, L = 160, B = 60, Ga = 8, Do = 5;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const I=require("react/jsx-runtime"),a=require("react"),pr=require("react-dom"),mr=160,vr=60;function Xr(e){return e&&typeof e=="object"&&"position"in e&&"data"in e}function Or(e){return e&&typeof e=="object"&&"source"in e&&"target"in e}function br(e,t){const n=typeof e=="string"?new Set([e]):new Set(Array.isArray(e)?e.map(r=>r.id):[e.id]);return t.filter(r=>n.has(r.source)||n.has(r.target))}function Ur(e,t,n){const r=typeof e=="string"?e:e.id,i=new Set;for(const o of n)o.target===r&&i.add(o.source);return t.filter(o=>i.has(o.id))}function qr(e,t,n){const r=typeof e=="string"?e:e.id,i=new Set;for(const o of n)o.source===r&&i.add(o.target);return t.filter(o=>i.has(o.id))}function Mn(e){if(!e.length)return{x:0,y:0,width:0,height:0};let t=1/0,n=1/0,r=-1/0,i=-1/0;for(const o of e){const c=o.position.x,f=o.position.y,m=o.width||mr,d=o.height||vr;c<t&&(t=c),f<n&&(n=f),c+m>r&&(r=c+m),f+d>i&&(i=f+d)}return{x:t,y:n,width:r-t,height:i-n}}function Ut(e,t,n,r=.1){const i=e.width*(1+r*2),o=e.height*(1+r*2),c=Math.min(t/i,n/o,1),f=e.x+e.width/2,m=e.y+e.height/2;return{x:t/2-f*c,y:n/2-m*c,zoom:c}}function Zn(e,t){return{x:t[0]*Math.round(e.x/t[0]),y:t[1]*Math.round(e.y/t[1])}}function Gn(e,t){return{x:Math.min(Math.max(e.x,t[0][0]),t[1][0]),y:Math.min(Math.max(e.y,t[0][1]),t[1][1])}}function Kn(e){var t,n;return{width:e.width||((t=e.measured)==null?void 0:t.width)||mr,height:e.height||((n=e.measured)==null?void 0:n.height)||vr}}function Zr(e,t,n={x:0,y:0,zoom:1},r=!1){const i=t.x,o=t.y,c=t.x+t.width,f=t.y+t.height;return e.filter(m=>{const{width:d,height:h}=Kn(m),b=m.position.x,k=m.position.y,S=b+d,P=k+h;return r?b<c&&S>i&&k<f&&P>o:b>=i&&S<=c&&k>=o&&P<=f})}function Gr(e){return{x:e.x,y:e.y,x2:e.x+e.width,y2:e.y+e.height}}function Qr(e){return{x:e.x,y:e.y,width:e.x2-e.x,height:e.y2-e.y}}function Jr(e,t){return{x:Math.min(e.x,t.x),y:Math.min(e.y,t.y),x2:Math.max(e.x2,t.x2),y2:Math.max(e.y2,t.y2)}}function Vr(e,t){const n=Math.max(0,Math.min(e.x+e.width,t.x+t.width)-Math.max(e.x,t.x)),r=Math.max(0,Math.min(e.y+e.height,t.y+t.height)-Math.max(e.y,t.y));return n*r}function Kr(e){const{width:t,height:n}=Kn(e);return{x:e.position.x,y:e.position.y,width:t,height:n}}const wr=`var qa = null, r = null, fr = 0, vr = 0, M = { x: 0, y: 0, zoom: 1 }, Y = [], W = [], C = [], F = !1, Ze = 40, We = !1, Nr = "lines", da = 1, Kt = null, lt = null, Tr = null, It = {}, tl = {}, it = {}, Zt = {}, Ia = 0, L = 160, B = 60, Ga = 8, Do = 5;
2
2
  function y(a) {
3
3
  return a._absolutePosition || a.position;
4
4
  }
@@ -943,4 +943,4 @@ function Ft() {
943
943
  }
944
944
  }
945
945
  }
946
- `,lr=typeof self<"u"&&self.Blob&&new Blob(["URL.revokeObjectURL(import.meta.url);",wr],{type:"text/javascript;charset=utf-8"});function eo(e){let t;try{if(t=lr&&(self.URL||self.webkitURL).createObjectURL(lr),!t)throw"";const n=new Worker(t,{type:"module",name:e==null?void 0:e.name});return n.addEventListener("error",()=>{(self.URL||self.webkitURL).revokeObjectURL(t)}),n}catch{return new Worker("data:text/javascript;charset=utf-8,"+encodeURIComponent(wr),{type:"module",name:e==null?void 0:e.name})}}const Xn=new WeakMap;function to(e,t){if(Xn.has(e))return Xn.get(e);const n=e.transferControlToOffscreen(),r=new eo;r.onerror=o=>console.error("[infinite-canvas] worker error:",o.message,o),r.postMessage({type:"init",data:{...t,canvas:n}},[n]);const i={worker:r};return Xn.set(e,i),i}const lt=160,et=60,no=10;function Mr({cards:e=[],nodes:t=[],edges:n=[],onHudUpdate:r,onNodesProcessed:i,onNodesChange:o,onEdgesChange:c,onConnect:f,onNodeClick:m,onNodeDragStart:d,onNodeDrag:h,onNodeDragStop:b,onEdgeClick:S,onEdgeDoubleClick:C,onEdgeMouseEnter:z,onEdgeMouseMove:A,onEdgeMouseLeave:B,onEdgeContextMenu:D,onNodeDoubleClick:X,onNodeMouseEnter:H,onNodeMouseMove:Y,onNodeMouseLeave:j,onNodeContextMenu:P,onPaneClick:q,onPaneContextMenu:O,onPaneMouseEnter:_,onPaneMouseMove:w,onPaneMouseLeave:g,onSelectionChange:v,onConnectStart:N,onConnectEnd:I,onInit:$,onMoveStart:V,onMove:se,onMoveEnd:te,onDelete:ce,onBeforeDelete:pe,onError:me,isValidConnection:ye,dark:le,gridSize:Ce=40,zoomMin:re=.1,zoomMax:de=4,initialCamera:Le={x:0,y:0,zoom:1},fitView:Ye=!1,fitViewOptions:xe,nodesDraggable:he=!0,nodesConnectable:$e=!0,elementsSelectable:He=!0,multiSelectionKeyCode:ze="Shift",selectionOnDrag:Ke=!1,selectionMode:tt="partial",connectionMode:Me="loose",connectionRadius:Te=20,connectOnClick:Xe=!1,snapToGrid:je=!1,snapGrid:_e=[15,15],deleteKeyCode:qe=["Delete","Backspace"],panActivationKeyCode:kt=" ",panOnScroll:an=!1,panOnScrollMode:Ct="free",panOnScrollSpeed:cn=.5,zoomOnScroll:ln=!0,zoomOnDoubleClick:un=!0,zoomOnPinch:dn=!0,preventScrolling:Xt=!0,translateExtent:ht,nodeExtent:gt,defaultEdgeOptions:Et={},autoPanOnNodeDrag:Pn=!0,autoPanOnConnect:In=!0,autoPanSpeed:nt=5,edgesReconnectable:cr=!1,elevateNodesOnSelect:Tn=!1,elevateEdgesOnSelect:Ln=!1,noDragClassName:St="nodrag",noPanClassName:zt="nopan",onSelectionDragStart:Bn,onSelectionDrag:$n,onSelectionDragStop:jn,edgeRouting:bt=!0}={}){const we=a.useRef(null),Nt=a.useRef(null),Ne=a.useRef(null),fe=a.useRef({...Le}),yt=a.useRef([...e]),ee=a.useRef([...t]),Pe=a.useRef([...n]),fn=a.useRef(new Map),Pt=a.useRef(!1),It=a.useRef(null),[Tt,An]=a.useState(!1),We=a.useRef(null),Oe=a.useRef(null),Lt=a.useRef(null),rt=a.useRef(null),hn=a.useRef(!1),Je=a.useRef(null),[gn,yn]=a.useState({x:Le.x,y:Le.y,zoom:Le.zoom}),[Ot,xn]=a.useState(null),xt=a.useMemo(()=>new Set,[]),ot=a.useMemo(()=>new Set,[]),Ve=a.useRef(!1),J=a.useRef({});J.current={onHudUpdate:r,onNodesProcessed:i,onNodesChange:o,onEdgesChange:c,onConnect:f,onNodeClick:m,onNodeDragStart:d,onNodeDrag:h,onNodeDragStop:b,onEdgeClick:S,onEdgeDoubleClick:C,onEdgeMouseEnter:z,onEdgeMouseMove:A,onEdgeMouseLeave:B,onEdgeContextMenu:D,onNodeDoubleClick:X,onNodeMouseEnter:H,onNodeMouseMove:Y,onNodeMouseLeave:j,onNodeContextMenu:P,onPaneClick:q,onPaneContextMenu:O,onPaneMouseEnter:_,onPaneMouseMove:w,onPaneMouseLeave:g,onSelectionChange:v,onConnectStart:N,onConnectEnd:I,onInit:$,onMoveStart:V,onMove:se,onMoveEnd:te,onDelete:ce,onBeforeDelete:pe,onError:me,onSelectionDragStart:Bn,onSelectionDrag:$n,onSelectionDragStop:jn,isValidConnection:ye};const st={get current(){return J.current.onConnect}},wt={get current(){return J.current.onNodeClick}},Bt={get current(){return J.current.onNodeDragStart}},$t={get current(){return J.current.onNodeDrag}},jt={get current(){return J.current.onNodeDragStop}},pt={get current(){return J.current.onEdgeClick}},At={get current(){return J.current.onPaneClick}},Dt={get current(){return J.current.onSelectionChange}},Ht={get current(){return J.current.onHudUpdate}},_t={get current(){return J.current.onNodesProcessed}};a.useEffect(()=>{const u=l=>{l.key===ze&&(hn.current=!0),l.key===kt&&(Ve.current=!0)},y=l=>{l.key===ze&&(hn.current=!1),l.key===kt&&(Ve.current=!1)};return window.addEventListener("keydown",u),window.addEventListener("keyup",y),()=>{window.removeEventListener("keydown",u),window.removeEventListener("keyup",y)}},[ze,kt]);const Ee={get current(){return J.current.onNodesChange?ut:null}},ut=u=>{var l,p,k;(p=(l=J.current).onNodesChange)==null||p.call(l,u);const y=[];for(let E=0;E<u.length;E++)u[E].type==="select"&&y.push({id:u[E].id,selected:u[E].selected});y.length>0&&((k=Ne.current)==null||k.postMessage({type:"nodeSelections",data:{selections:y}}))},De={get current(){return J.current.onEdgesChange?Dn:null}},Dn=u=>{var l,p,k;(p=(l=J.current).onEdgesChange)==null||p.call(l,u);const y=[];for(let E=0;E<u.length;E++)u[E].type==="select"&&y.push({id:u[E].id,selected:u[E].selected});y.length>0&&((k=Ne.current)==null||k.postMessage({type:"edgeSelections",data:{selections:y}}))},dt=a.useCallback(()=>{var p;const u=ee.current.filter(k=>k.selected),y=Pe.current.filter(k=>k.selected),l={nodes:u,edges:y};(p=Dt.current)==null||p.call(Dt,l);for(const k of ot)k(l)},[ot]);a.useEffect(()=>{var u;yt.current=[...e],(u=Ne.current)==null||u.postMessage({type:"cards",data:{cards:[...e]}})},[e]);const Wt=a.useCallback(u=>{const y={};for(const l of u)y[l.id]=l;return u.map(l=>{if(!l.parentId)return l;const p=y[l.parentId];if(!p)return l;let k=l.position.x,E=l.position.y,x=p;for(;x;)k+=x.position.x,E+=x.position.y,x=x.parentId?y[x.parentId]:null;return{...l,_absolutePosition:{x:k,y:E}}})},[]),it=a.useRef([]),mt=a.useCallback(u=>{const y=fn.current;if(!y||y.size===0)return u;const l={};for(const[,p]of y)l[p.nodeId]||(l[p.nodeId]=[]),l[p.nodeId].push({id:p.id,type:p.type,position:p.position,x:p.x,y:p.y});return u.map(p=>{const k=l[p.id];return k&&k.length>0?{...p,handles:k}:p})},[]),pn=a.useCallback(()=>{var y;if(We.current)return;const u=mt(it.current);(y=Ne.current)==null||y.postMessage({type:"nodes",data:{nodes:u}})},[mt]);a.useEffect(()=>{var l,p;if(We.current){const k=We.current.id,E=new Set([k,...We.current.selectedStarts.map(R=>R.id)]),x={};for(const R of ee.current)E.has(R.id)&&(x[R.id]={...R.position});ee.current=[...t];for(const R of ee.current)x[R.id]&&(R.position=x[R.id]);it.current=Wt(ee.current);const M=mt(it.current);(l=Ne.current)==null||l.postMessage({type:"nodes",data:{nodes:M}});return}ee.current=[...t];const u=Wt(t);it.current=u;const y=mt(u);(p=Ne.current)==null||p.postMessage({type:"nodes",data:{nodes:y}})},[t,Wt,mt]),a.useEffect(()=>{var u;Pe.current=[...n],(u=Ne.current)==null||u.postMessage({type:"edges",data:{edges:[...n]}})},[n]);const Be=a.useCallback((u,y)=>{const l=we.current;if(!l)return{x:0,y:0};const p=l.getBoundingClientRect(),k=fe.current;return{x:(u-p.left-k.x)/k.zoom,y:(y-p.top-k.y)/k.zoom}},[]),ue=a.useCallback((u,y)=>{const l=it.current.length>0?it.current:ee.current;let p=null;for(let k=l.length-1;k>=0;k--){const E=l[k];if(E.hidden||E._customRendered)continue;const x=E._absolutePosition||E.position,M=E.width||lt,R=E.height||et;if(u>=x.x&&u<=x.x+M&&y>=x.y&&y<=x.y+R){if(E.type==="group"){p||(p=E);continue}return E}}return p},[]),Ut=a.useCallback((u,y)=>{const l=y.width||lt,p=y.height||et;if(u.x!==void 0&&u.y!==void 0)return{x:y.position.x+u.x,y:y.position.y+u.y};switch(u.position||(u.type==="source"?"right":"left")){case"top":return{x:y.position.x+l/2,y:y.position.y};case"bottom":return{x:y.position.x+l/2,y:y.position.y+p};case"left":return{x:y.position.x,y:y.position.y+p/2};case"right":return{x:y.position.x+l,y:y.position.y+p/2};default:return{x:y.position.x+l,y:y.position.y+p/2}}},[]),qt=a.useCallback(u=>{const y=u.width||lt,l=u.height||et;if(u.handles&&u.handles.length>0)return u.handles.map(R=>{const W=Ut(R,u);return{id:R.id||null,type:R.type,x:W.x,y:W.y}});const p=u.targetPosition||"left",k=u.sourcePosition||"right",E=R=>{switch(R){case"top":return{x:u.position.x+y/2,y:u.position.y};case"bottom":return{x:u.position.x+y/2,y:u.position.y+l};case"left":return{x:u.position.x,y:u.position.y+l/2};case"right":return{x:u.position.x+y,y:u.position.y+l/2};default:return{x:u.position.x+y,y:u.position.y+l/2}}},x=E(p),M=E(k);return[{id:null,type:"target",x:x.x,y:x.y},{id:null,type:"source",x:M.x,y:M.y}]},[Ut]),vt=a.useCallback((u,y)=>{const l=ee.current,p=fe.current,k=Math.max(no,Te)/p.zoom;for(let E=l.length-1;E>=0;E--){const x=l[E];if(x.hidden)continue;const M=qt(x);for(const R of M)if(Math.abs(u-R.x)<k&&Math.abs(y-R.y)<k)return{nodeId:x.id,handleId:R.id,type:R.type,x:R.x,y:R.y}}return null},[qt]),Ze=a.useCallback((u,y)=>{const p=8/fe.current.zoom,k=ee.current,E={};for(let x=0;x<k.length;x++)E[k[x].id]=k[x];for(let x=Pe.current.length-1;x>=0;x--){const M=Pe.current[x],R=E[M.source],W=E[M.target];if(!R||!W)continue;const L=R.width||lt,U=R.height||et,G=W.height||et,Z=R.position.x+L,ie=R.position.y+U/2,K=W.position.x,ae=W.position.y+G/2;if(ro(u,y,Z,ie,K,ae)<p)return M}return null},[]);a.useEffect(()=>{const u=Nt.current,y=we.current;if(!u||!y)return;const l=y.getBoundingClientRect(),p=le!==void 0?le:matchMedia("(prefers-color-scheme: dark)").matches,k=Wt(ee.current);it.current=k;const E=mt(k),{worker:x}=to(u,{width:l.width,height:l.height,camera:fe.current,cards:yt.current,nodes:E,edges:Pe.current,dark:p,gridSize:Ce,edgeRouting:bt});x.onmessage=L=>{var U,G,Z,ie;L.data.type==="hud"&&((U=Ht.current)==null||U.call(Ht,L.data.data)),L.data.type==="ready"&&An(!0),L.data.type==="nodesProcessed"&&((G=_t.current)==null||G.call(_t,L.data.data)),L.data.type==="error"&&((ie=(Z=J.current).onError)==null||ie.call(Z,"worker-error",L.data.message||"Canvas worker error"))},x.onerror=L=>{var U,G;(G=(U=J.current).onError)==null||G.call(U,"worker-error",L.message||"Canvas worker crashed")},Ne.current=x;const M=new ResizeObserver(L=>{const{width:U,height:G}=L[0].contentRect;x.postMessage({type:"resize",data:{width:U,height:G}})});M.observe(y);let R,W;return le===void 0&&(R=matchMedia("(prefers-color-scheme: dark)"),W=L=>x.postMessage({type:"theme",data:{dark:L.matches}}),R.addEventListener("change",W)),()=>{M.disconnect(),R&&W&&R.removeEventListener("change",W),Ne.current=null}},[]),a.useEffect(()=>{var u;le!==void 0&&((u=Ne.current)==null||u.postMessage({type:"theme",data:{dark:le}}))},[le]),a.useEffect(()=>{var u;(u=Ne.current)==null||u.postMessage({type:"edgeRouting",data:{enabled:bt}})},[bt]);const Zt=a.useRef(0),Re=a.useCallback((u=null)=>{var p,k,E;const y=fe.current;if(ht){const x=we.current;if(x){const M=x.getBoundingClientRect(),R=-ht[1][0]*y.zoom+M.width,W=-ht[1][1]*y.zoom+M.height,L=-ht[0][0]*y.zoom,U=-ht[0][1]*y.zoom;y.x=Math.min(L,Math.max(R,y.x)),y.y=Math.min(U,Math.max(W,y.y))}}(p=Ne.current)==null||p.postMessage({type:"camera",data:{camera:{...y}}});const l={x:y.x,y:y.y,zoom:y.zoom};(E=(k=J.current).onMove)==null||E.call(k,u,l);for(const x of xt)x(l);cancelAnimationFrame(Zt.current),Zt.current=requestAnimationFrame(()=>{yn({x:y.x,y:y.y,zoom:y.zoom})})},[xt,ht]),at=a.useCallback(()=>{var l,p;const u=Oe.current,y=Lt.current;u&&y?((l=Ne.current)==null||l.postMessage({type:"connecting",data:{from:u.startPos,to:y,_routedPoints:null}}),xn({source:u.sourceId,sourceHandle:u.sourceHandle,target:null,targetHandle:null})):((p=Ne.current)==null||p.postMessage({type:"connecting",data:null}),xn(null))},[]),ct=a.useCallback(()=>{var y,l;const u=rt.current;u?(y=Ne.current)==null||y.postMessage({type:"selectionBox",data:u}):(l=Ne.current)==null||l.postMessage({type:"selectionBox",data:null})},[]),Gt=a.useCallback(u=>{var x,M,R,W,L,U,G,Z,ie,K,ae,ke,Ae,Fe,Ge,Ue,Jt,ft;const y=ee.current.length>0,l=Be(u.clientX,u.clientY),p=hn.current;if(y&&$e&&!p){const Q=vt(l.x,l.y);if(Xe&&Je.current&&Q){const oe=Je.current;if(Q.nodeId!==oe.nodeId){const Qe=oe.handleType==="target"?{source:Q.nodeId,target:oe.nodeId,sourceHandle:Q.handleId||null,targetHandle:oe.handleId}:{source:oe.nodeId,target:Q.nodeId,sourceHandle:oe.handleId,targetHandle:Q.handleId||null};(J.current.isValidConnection?J.current.isValidConnection(Qe):!0)&&((x=st.current)==null||x.call(st,{...Qe,...Et}))}Je.current=null;return}if(Me==="strict"?Q&&Q.type==="source":Q!=null){if(Xe){Je.current={nodeId:Q.nodeId,handleId:Q.handleId||null,handleType:Q.type},(R=(M=J.current).onConnectStart)==null||R.call(M,u,{nodeId:Q.nodeId,handleId:Q.handleId,handleType:Q.type});return}Oe.current={sourceId:Q.nodeId,sourceHandle:Q.handleId||null,sourceType:Q.type,startPos:{x:Q.x,y:Q.y}},Lt.current={x:l.x,y:l.y},(W=we.current)==null||W.setPointerCapture(u.pointerId),(U=(L=J.current).onConnectStart)==null||U.call(L,u,{nodeId:Q.nodeId,handleId:Q.handleId,handleType:Q.type}),at();return}}const k=Q=>{var oe;let be=Q;for(;be&&be!==we.current;){if((oe=be.classList)!=null&&oe.contains(St))return!0;be=be.parentElement}return!1},E=Q=>{var oe;let be=Q;for(;be&&be!==we.current;){if((oe=be.classList)!=null&&oe.contains(zt))return!0;be=be.parentElement}return!1};if(y){const Q=ue(l.x,l.y);if(Q){if(Ee.current&&He){const be=[];if(p)be.push({id:Q.id,type:"select",selected:!Q.selected});else if(!Q.selected){for(const oe of ee.current)oe.id===Q.id?be.push({id:oe.id,type:"select",selected:!0}):oe.selected&&be.push({id:oe.id,type:"select",selected:!1});if(De.current){const oe=Pe.current.filter(ge=>ge.selected).map(ge=>({id:ge.id,type:"select",selected:!1}));oe.length&&De.current(oe)}}if(be.length){if(Ee.current(be),Tn&&!p){const oe=ee.current.findIndex(ge=>ge.id===Q.id);oe>=0&&oe<ee.current.length-1&&Ee.current([{id:Q.id,type:"remove"},{type:"add",item:{...ee.current[oe],selected:!0}}])}dt()}}if((G=wt.current)==null||G.call(wt,u,Q),he&&!k(u.target)){const be=Q.selected;let oe=null;if(Q.parentId&&Q.extent==="parent"){const ge=ee.current.find(Qe=>Qe.id===Q.parentId);if(ge){const Qe=ge.width||lt,Vt=ge.height||et,vn=Q.width||((Z=Q.measured)==null?void 0:Z.width)||lt,Kt=Q.height||((ie=Q.measured)==null?void 0:ie.height)||et;oe={minX:0,minY:0,maxX:Qe-vn,maxY:Vt-Kt}}}if(We.current={id:Q.id,startPos:{...Q.position},startMouse:{x:l.x,y:l.y},parentClamp:oe,parentId:Q.parentId||null,selectedStarts:be?ee.current.filter(ge=>ge.selected&&ge.id!==Q.id).map(ge=>{var Vt,vn;let Qe=null;if(ge.parentId&&ge.extent==="parent"){const Kt=ee.current.find(Yn=>Yn.id===ge.parentId);if(Kt){const Yn=Kt.width||lt,Wr=Kt.height||et,Fr=ge.width||((Vt=ge.measured)==null?void 0:Vt.width)||lt,Yr=ge.height||((vn=ge.measured)==null?void 0:vn.height)||et;Qe={minX:0,minY:0,maxX:Yn-Fr,maxY:Wr-Yr}}}return{id:ge.id,startPos:{...ge.position},parentClamp:Qe,parentId:ge.parentId||null}}):[]},(K=we.current)==null||K.setPointerCapture(u.pointerId),(ae=Bt.current)==null||ae.call(Bt,u,Q),We.current.selectedStarts.length>0){const ge=ee.current.filter(Qe=>Qe.selected);(Ae=(ke=J.current).onSelectionDragStart)==null||Ae.call(ke,u,ge)}if(Ee.current){const ge=[{id:Q.id,type:"position",dragging:!0}];for(const Qe of We.current.selectedStarts)ge.push({id:Qe.id,type:"position",dragging:!0});Ee.current(ge)}}return}}if(Pe.current.length>0&&He){const Q=Ze(l.x,l.y);if(Q){if(De.current){const be=[];if(p)be.push({id:Q.id,type:"select",selected:!Q.selected});else{for(const oe of Pe.current)oe.id===Q.id?be.push({id:oe.id,type:"select",selected:!0}):oe.selected&&be.push({id:oe.id,type:"select",selected:!1});if(Ee.current){const oe=ee.current.filter(ge=>ge.selected).map(ge=>({id:ge.id,type:"select",selected:!1}));oe.length&&Ee.current(oe)}}if(be.length){if(De.current(be),Ln&&!p){const oe=Pe.current.findIndex(ge=>ge.id===Q.id);oe>=0&&oe<Pe.current.length-1&&De.current([{id:Q.id,type:"remove"},{type:"add",item:{...Pe.current[oe],selected:!0}}])}dt()}}(Fe=pt.current)==null||Fe.call(pt,u,Q);return}}if(!p){const Q=ee.current.filter(oe=>oe.selected).map(oe=>({id:oe.id,type:"select",selected:!1})),be=Pe.current.filter(oe=>oe.selected).map(oe=>({id:oe.id,type:"select",selected:!1}));Q.length&&Ee.current&&Ee.current(Q),be.length&&De.current&&De.current(be),(Q.length||be.length)&&dt()}if((Ge=At.current)==null||Ge.call(At,u),Ke||p){rt.current={startWorld:{...l},endWorld:{...l}},(Ue=we.current)==null||Ue.setPointerCapture(u.pointerId),ct();return}E(u.target)||(Pt.current=!0,It.current={x:u.clientX,y:u.clientY},(Jt=we.current)==null||Jt.classList.add("dragging"),(ft=we.current)==null||ft.setPointerCapture(u.pointerId))},[Be,ue,vt,Ze,he,$e,He,Ke,at,ct,dt,St,zt]),Qt=a.useCallback(u=>{var l,p,k,E;if(Oe.current){if(Lt.current=Be(u.clientX,u.clientY),at(),In){const x=we.current;if(x){const M=x.getBoundingClientRect(),R=40,W=u.clientX-M.left,L=u.clientY-M.top;let U=0,G=0;W<R?U=nt:W>M.width-R&&(U=-nt),L<R?G=nt:L>M.height-R&&(G=-nt),(U||G)&&(fe.current.x+=U,fe.current.y+=G,Re(u))}}return}if(rt.current){rt.current.endWorld=Be(u.clientX,u.clientY),ct();const x=rt.current,M=Math.min(x.startWorld.x,x.endWorld.x),R=Math.min(x.startWorld.y,x.endWorld.y),W=Math.max(x.startWorld.x,x.endWorld.x),L=Math.max(x.startWorld.y,x.endWorld.y);if(Ee.current){const U=[];for(const G of ee.current){if(G.hidden)continue;const Z=G.width||lt,ie=G.height||et,K=tt==="full"?G.position.x>=M&&G.position.x+Z<=W&&G.position.y>=R&&G.position.y+ie<=L:G.position.x+Z>M&&G.position.x<W&&G.position.y+ie>R&&G.position.y<L;K!==!!G.selected&&U.push({id:G.id,type:"select",selected:K})}U.length&&Ee.current(U)}return}if(We.current){const x=Be(u.clientX,u.clientY),M=We.current,R=x.x-M.startMouse.x,W=x.y-M.startMouse.y;let L={x:M.startPos.x+R,y:M.startPos.y+W};if(je&&(L=Zn(L,_e)),gt&&(L=Gn(L,gt)),M.parentClamp){const K=M.parentClamp;L={x:Math.max(K.minX,Math.min(L.x,K.maxX)),y:Math.max(K.minY,Math.min(L.y,K.maxY))}}const U=[{id:M.id,position:L}];for(const K of M.selectedStarts){let ae={x:K.startPos.x+R,y:K.startPos.y+W};if(je&&(ae=Zn(ae,_e)),gt&&(ae=Gn(ae,gt)),K.parentClamp){const ke=K.parentClamp;ae={x:Math.max(ke.minX,Math.min(ae.x,ke.maxX)),y:Math.max(ke.minY,Math.min(ae.y,ke.maxY))}}U.push({id:K.id,position:ae})}const G=[];for(const K of U){const ae=ee.current.find(ke=>ke.id===K.id);if(ae){ae.position=K.position,ae.dragging=!0;let ke=K.position;if(ae.parentId){let Ae=ee.current.find(Ue=>Ue.id===ae.parentId),Fe=K.position.x,Ge=K.position.y;for(;Ae;)Fe+=Ae.position.x,Ge+=Ae.position.y,Ae=Ae.parentId?ee.current.find(Ue=>Ue.id===Ae.parentId):null;ke={x:Fe,y:Ge}}G.push({id:K.id,position:K.position,_absolutePosition:ke,width:ae.width,height:ae.height,dragging:!0,selected:ae.selected})}}const Z=new Set(U.map(K=>K.id));for(const K of ee.current)if(K.parentId&&Z.has(K.parentId)&&!Z.has(K.id)){let ae=ee.current.find(Fe=>Fe.id===K.parentId),ke=K.position.x,Ae=K.position.y;for(;ae;)ke+=ae.position.x,Ae+=ae.position.y,ae=ae.parentId?ee.current.find(Fe=>Fe.id===ae.parentId):null;G.push({id:K.id,position:K.position,_absolutePosition:{x:ke,y:Ae},width:K.width,height:K.height,dragging:!1,selected:K.selected})}if((l=Ne.current)==null||l.postMessage({type:"nodePositions",data:{updates:G}}),Pn){const K=we.current;if(K){const ae=K.getBoundingClientRect(),ke=40,Ae=u.clientX-ae.left,Fe=u.clientY-ae.top;let Ge=0,Ue=0;Ae<ke?Ge=nt:Ae>ae.width-ke&&(Ge=-nt),Fe<ke?Ue=nt:Fe>ae.height-ke&&(Ue=-nt),(Ge||Ue)&&(fe.current.x+=Ge,fe.current.y+=Ue,Re(u))}}const ie=ee.current.find(K=>K.id===M.id);if(ie&&((p=$t.current)==null||p.call($t,u,ie)),M.selectedStarts.length>0){const K=ee.current.filter(ae=>ae.selected);(E=(k=J.current).onSelectionDrag)==null||E.call(k,u,K)}return}if(!Pt.current)return;const y=fe.current;y.x+=u.clientX-It.current.x,y.y+=u.clientY-It.current.y,It.current={x:u.clientX,y:u.clientY},Re()},[Re,Be,at,ct]),mn=a.useCallback(u=>{var y,l,p,k,E,x,M,R;if(Oe.current){const W=Be(u.clientX,u.clientY),L=vt(W.x,W.y);if(L&&L.nodeId!==Oe.current.sourceId&&(Me==="loose"||L.type==="target")){const Z=Oe.current.sourceType==="target"?{source:L.nodeId,target:Oe.current.sourceId,sourceHandle:L.handleId||null,targetHandle:Oe.current.sourceHandle}:{source:Oe.current.sourceId,target:L.nodeId,sourceHandle:Oe.current.sourceHandle,targetHandle:L.handleId||null};(J.current.isValidConnection?J.current.isValidConnection(Z):!0)&&((y=st.current)==null||y.call(st,{...Z,...Et}))}(p=(l=J.current).onConnectEnd)==null||p.call(l,u.nativeEvent||u),Oe.current=null,Lt.current=null,at();return}if(rt.current){rt.current=null,ct(),dt();return}if(We.current){const W=We.current,L=ee.current.find(Z=>Z.id===W.id),U=[{id:W.id,position:L?{...L.position}:W.startPos,_absolutePosition:L?{...L.position}:W.startPos,dragging:!1}];for(const Z of W.selectedStarts){const ie=ee.current.find(K=>K.id===Z.id);U.push({id:Z.id,position:ie?{...ie.position}:Z.startPos,_absolutePosition:ie?{...ie.position}:Z.startPos,dragging:!1})}if((k=Ne.current)==null||k.postMessage({type:"nodePositions",data:{updates:U}}),Ee.current){const Z=U.map(ie=>({id:ie.id,type:"position",position:ie.position,dragging:!1}));Ee.current(Z)}if(W.selectedStarts.length>0){const Z=ee.current.filter(ie=>ie.selected);(x=(E=J.current).onSelectionDragStop)==null||x.call(E,u,Z)}requestAnimationFrame(()=>{We.current=null});const G=ee.current.find(Z=>Z.id===W.id);G&&((M=jt.current)==null||M.call(jt,u,G));return}Pt.current=!1,(R=we.current)==null||R.classList.remove("dragging")},[Be,vt,at,ct,dt]);a.useEffect(()=>{const u=we.current;if(!u)return;const y=l=>{Xt&&l.preventDefault();const p=fe.current;if(an||Ve.current){const R=cn;Ct==="horizontal"?p.x-=l.deltaY*R:(Ct==="vertical"||(p.x-=l.deltaX*R),p.y-=l.deltaY*R),Re(l);return}if(!ln)return;const k=l.deltaY>0?.92:1.08,E=u.getBoundingClientRect(),x=l.clientX-E.left,M=l.clientY-E.top;p.x=x-(x-p.x)*k,p.y=M-(M-p.y)*k,p.zoom=Math.min(de,Math.max(re,p.zoom*k)),Re(l)};return u.addEventListener("wheel",y,{passive:!Xt}),()=>u.removeEventListener("wheel",y)},[Re,re,de,an,Ct,cn,ln,Xt]),a.useEffect(()=>{if(!dn)return;const u=we.current;if(!u)return;let y=0,l=null;const p=x=>{if(x.touches.length===2){const M=x.touches[0].clientX-x.touches[1].clientX,R=x.touches[0].clientY-x.touches[1].clientY;y=Math.hypot(M,R);const W=u.getBoundingClientRect();l={x:(x.touches[0].clientX+x.touches[1].clientX)/2-W.left,y:(x.touches[0].clientY+x.touches[1].clientY)/2-W.top},x.preventDefault()}},k=x=>{if(x.touches.length===2&&y>0){x.preventDefault();const M=x.touches[0].clientX-x.touches[1].clientX,R=x.touches[0].clientY-x.touches[1].clientY,W=Math.hypot(M,R),L=W/y;y=W;const U=fe.current,G=l.x,Z=l.y;U.x=G-(G-U.x)*L,U.y=Z-(Z-U.y)*L,U.zoom=Math.min(de,Math.max(re,U.zoom*L)),Re(x)}},E=()=>{y=0,l=null};return u.addEventListener("touchstart",p,{passive:!1}),u.addEventListener("touchmove",k,{passive:!1}),u.addEventListener("touchend",E),()=>{u.removeEventListener("touchstart",p),u.removeEventListener("touchmove",k),u.removeEventListener("touchend",E)}},[dn,Re,re,de]),a.useEffect(()=>{if(!un)return;const u=we.current;if(!u)return;const y=l=>{var L,U,G,Z;const p=Be(l.clientX,l.clientY);if(ue(p.x,p.y)){(U=(L=J.current).onNodeDoubleClick)==null||U.call(L,l,ue(p.x,p.y));return}const k=Ze(p.x,p.y);if(k){(Z=(G=J.current).onEdgeDoubleClick)==null||Z.call(G,l,k);return}const E=1.5,x=u.getBoundingClientRect(),M=l.clientX-x.left,R=l.clientY-x.top,W=fe.current;W.x=M-(M-W.x)*E,W.y=R-(R-W.y)*E,W.zoom=Math.min(de,Math.max(re,W.zoom*E)),Re(l)};return u.addEventListener("dblclick",y),()=>u.removeEventListener("dblclick",y)},[un,Re,re,de,Be,ue,Ze]),a.useEffect(()=>{const u=we.current;if(!u)return;const y=l=>{var x,M,R,W,L,U;const p=Be(l.clientX,l.clientY),k=ue(p.x,p.y);if(k){(M=(x=J.current).onNodeContextMenu)==null||M.call(x,l,k);return}const E=Ze(p.x,p.y);if(E){(W=(R=J.current).onEdgeContextMenu)==null||W.call(R,l,E);return}(U=(L=J.current).onPaneContextMenu)==null||U.call(L,l)};return u.addEventListener("contextmenu",y),()=>u.removeEventListener("contextmenu",y)},[Be,ue,Ze]),a.useEffect(()=>{const u=we.current;if(!u)return;let y=null,l=null;const p=x=>{var W,L,U,G,Z,ie,K,ae,ke,Ae,Fe,Ge,Ue,Jt;if((L=(W=J.current).onPaneMouseMove)==null||L.call(W,x),Pt.current||We.current||Oe.current||rt.current)return;const M=Be(x.clientX,x.clientY),R=ue(M.x,M.y);if(R!==y&&(y&&((G=(U=J.current).onNodeMouseLeave)==null||G.call(U,x,y)),R&&((ie=(Z=J.current).onNodeMouseEnter)==null||ie.call(Z,x,R)),y=R),R&&((ae=(K=J.current).onNodeMouseMove)==null||ae.call(K,x,R)),!R){const ft=Ze(M.x,M.y);ft!==l&&(l&&((Ae=(ke=J.current).onEdgeMouseLeave)==null||Ae.call(ke,x,l)),ft&&((Ge=(Fe=J.current).onEdgeMouseEnter)==null||Ge.call(Fe,x,ft)),l=ft),ft&&((Jt=(Ue=J.current).onEdgeMouseMove)==null||Jt.call(Ue,x,ft))}},k=x=>{var M,R;return(R=(M=J.current).onPaneMouseEnter)==null?void 0:R.call(M,x)},E=x=>{var M,R,W,L,U,G;(R=(M=J.current).onPaneMouseLeave)==null||R.call(M,x),y&&((L=(W=J.current).onNodeMouseLeave)==null||L.call(W,x,y),y=null),l&&((G=(U=J.current).onEdgeMouseLeave)==null||G.call(U,x,l),l=null)};return u.addEventListener("mousemove",p),u.addEventListener("mouseenter",k),u.addEventListener("mouseleave",E),()=>{u.removeEventListener("mousemove",p),u.removeEventListener("mouseenter",k),u.removeEventListener("mouseleave",E)}},[Be,ue,Ze]),a.useEffect(()=>{const u=Array.isArray(qe)?qe:[qe],y=async l=>{var p,k,E,x;if(u.includes(l.key)){if(l.target.tagName==="INPUT"||l.target.tagName==="TEXTAREA"||l.target.isContentEditable)return;const M=ee.current.filter(L=>L.selected),R=Pe.current.filter(L=>L.selected);if(!M.length&&!R.length)return;if(J.current.onBeforeDelete)try{if(!await J.current.onBeforeDelete({nodes:M,edges:R}))return}catch(L){(k=(p=J.current).onError)==null||k.call(p,"before-delete-error",L.message||"onBeforeDelete threw an error");return}const W=new Set(M.map(L=>L.id));if(M.length&&Ee.current&&(Ee.current(M.map(L=>({id:L.id,type:"remove"}))),De.current)){const L=Pe.current.filter(U=>W.has(U.source)||W.has(U.target));L.length&&De.current(L.map(U=>({id:U.id,type:"remove"})))}R.length&&De.current&&De.current(R.map(L=>({id:L.id,type:"remove"}))),(x=(E=J.current).onDelete)==null||x.call(E,{nodes:M,edges:R})}if((l.ctrlKey||l.metaKey)&&l.key==="a"){if(l.target.tagName==="INPUT"||l.target.tagName==="TEXTAREA")return;if(l.preventDefault(),Ee.current){const M=ee.current.filter(R=>!R.selected).map(R=>({id:R.id,type:"select",selected:!0}));M.length&&Ee.current(M)}if(De.current){const M=Pe.current.filter(R=>!R.selected).map(R=>({id:R.id,type:"select",selected:!0}));M.length&&De.current(M)}}};return window.addEventListener("keydown",y),()=>window.removeEventListener("keydown",y)},[qe]);const Ft=a.useRef(!1);a.useEffect(()=>{var u,y;if(!Ft.current&&Ne.current){if(Ft.current=!0,Ye&&ee.current.length>0){const l=we.current;if(l){const p=l.getBoundingClientRect(),k=(xe==null?void 0:xe.padding)??.1,E=Mn(ee.current),x=Yt(E,p.width,p.height,k);xe!=null&&xe.maxZoom&&(x.zoom=Math.min(x.zoom,xe.maxZoom)),xe!=null&&xe.minZoom&&(x.zoom=Math.max(x.zoom,xe.minZoom)),fe.current=x,Re()}}(y=(u=J.current).onInit)==null||y.call(u,{getNodes:()=>[...ee.current],getEdges:()=>[...Pe.current],getNode:l=>ee.current.find(p=>p.id===l),getEdge:l=>Pe.current.find(p=>p.id===l),getViewport:()=>({...fe.current}),getZoom:()=>fe.current.zoom,setViewport:l=>{fe.current={x:l.x??fe.current.x,y:l.y??fe.current.y,zoom:l.zoom??fe.current.zoom},Re()},fitView:(l={})=>{const p=we.current;if(!p||!ee.current.length)return;const k=p.getBoundingClientRect(),E=l.nodes?ee.current.filter(R=>l.nodes.some(W=>W.id===R.id)):ee.current;if(!E.length)return;const x=Mn(E),M=Yt(x,k.width,k.height,l.padding??.1);l.maxZoom&&(M.zoom=Math.min(M.zoom,l.maxZoom)),l.minZoom&&(M.zoom=Math.max(M.zoom,l.minZoom)),fe.current=M,Re()},screenToFlowPosition:l=>Be(l.x,l.y),flowToScreenPosition:l=>{const p=fe.current,k=we.current;if(!k)return{x:0,y:0};const E=k.getBoundingClientRect();return{x:l.x*p.zoom+p.x+E.left,y:l.y*p.zoom+p.y+E.top}},zoomIn:()=>{const l=fe.current;l.zoom=Math.min(de,l.zoom*1.2),Re()},zoomOut:()=>{const l=fe.current;l.zoom=Math.max(re,l.zoom/1.2),Re()},zoomTo:l=>{fe.current.zoom=Math.min(de,Math.max(re,l)),Re()},setNodes:l=>{var p,k;(k=(p=J.current).onNodesChange)==null||k.call(p,[...ee.current.map(E=>({id:E.id,type:"remove"})),...(typeof l=="function"?l(ee.current):l).map(E=>({type:"add",item:E}))])},setEdges:l=>{var p,k;(k=(p=J.current).onEdgesChange)==null||k.call(p,[...Pe.current.map(E=>({id:E.id,type:"remove"})),...(typeof l=="function"?l(Pe.current):l).map(E=>({type:"add",item:E}))])},addNodes:l=>{var k,E;const p=Array.isArray(l)?l:[l];(E=(k=J.current).onNodesChange)==null||E.call(k,p.map(x=>({type:"add",item:x})))},addEdges:l=>{var k,E;const p=Array.isArray(l)?l:[l];(E=(k=J.current).onEdgesChange)==null||E.call(k,p.map(x=>({type:"add",item:x})))},deleteElements:({nodes:l=[],edges:p=[]})=>{var k,E,x,M;l.length&&((E=(k=J.current).onNodesChange)==null||E.call(k,l.map(R=>({id:R.id,type:"remove"})))),p.length&&((M=(x=J.current).onEdgesChange)==null||M.call(x,p.map(R=>({id:R.id,type:"remove"}))))},updateNodeData:(l,p)=>{var x,M;const k=ee.current.find(R=>R.id===l);if(!k)return;const E=typeof p=="function"?p(k.data):{...k.data,...p};(M=(x=J.current).onNodesChange)==null||M.call(x,[{id:l,type:"replace",item:{...k,data:E}}])},toObject:()=>({nodes:[...ee.current],edges:[...Pe.current],viewport:{...fe.current}}),setCenter:(l,p,k={})=>{const E=we.current;if(!E)return;const x=E.getBoundingClientRect(),M=k.zoom??fe.current.zoom;fe.current={x:x.width/2-l*M,y:x.height/2-p*M,zoom:M},Re()},fitBounds:(l,p={})=>{const k=we.current;if(!k)return;const E=k.getBoundingClientRect(),x=Yt(l,E.width,E.height,p.padding??.1);fe.current=x,Re()}})}});const Hn=a.useCallback(()=>{fe.current={...Le},Re()},[Re,Le]),_n=a.useCallback(u=>{var y;if(u)yt.current.push(u);else{const l=fe.current,p=we.current;if(!p)return;const k=p.getBoundingClientRect(),E=Math.round(-l.x/l.zoom+k.width/2/l.zoom),x=Math.round(-l.y/l.zoom+k.height/2/l.zoom);yt.current.push({x:E-80,y:x-45,w:160,h:90,title:"Note "+(yt.current.length+1),body:"Added at viewport center"})}(y=Ne.current)==null||y.postMessage({type:"cards",data:{cards:[...yt.current]}})},[]),Wn=a.useCallback(u=>{if(u.id||(u.id="node-"+Date.now()),!u.position){const y=fe.current,l=we.current;if(!l)return;const p=l.getBoundingClientRect();u.position={x:Math.round(-y.x/y.zoom+p.width/2/y.zoom)-lt/2,y:Math.round(-y.y/y.zoom+p.height/2/y.zoom)-et/2}}u.data||(u.data={label:u.id}),Ee.current&&Ee.current([{type:"add",item:u}])},[]),Fn=a.useCallback(()=>({...fe.current}),[]),F=a.useCallback(u=>{fe.current={...fe.current,...u},Re()},[Re]),ve=a.useCallback(u=>Be(u.x,u.y),[Be]),ne=n,Se=a.useMemo(()=>({wrapRef:we,canvasRef:Nt,workerRef:Ne,cameraRef:fe,nodesRef:ee,edgesRef:Pe,handleRegistryRef:fn,syncNodesToWorker:pn,onNodesChangeRef:Ee,onEdgesChangeRef:De,sendCamera:Re,screenToWorld:Be,viewportListeners:xt,selectionListeners:ot,zoomMin:re,zoomMax:de,snapToGrid:je,snapGrid:_e,nodeExtent:gt,defaultEdgeOptions:Et,edgeRouting:bt,resolvedNodesRef:it,noDragClassName:St,noPanClassName:zt,get nodes(){return t},get edges(){return n},get routedEdges(){return ne},get viewport(){return gn},get connection(){return Ot}}),[t,n,ne,gn,Ot,Re,Be,pn,xt,ot,re,de,je,_e,gt,Et,bt,St,zt]);return{wrapRef:we,canvasRef:Nt,canvasReady:Tt,onPointerDown:Gt,onPointerMove:Qt,onPointerUp:mn,resetView:Hn,addCard:_n,addNode:Wn,getCamera:Fn,setCamera:F,screenToFlowPosition:ve,store:Se}}function ro(e,t,n,r,i,o){const c=i-n,f=o-r,m=c*c+f*f;if(m===0)return Math.hypot(e-n,t-r);let d=((e-n)*c+(t-r)*f)/m;return d=Math.max(0,Math.min(1,d)),Math.hypot(e-(n+d*c),t-(r+d*f))}const ur=e=>{let t;const n=new Set,r=(d,h)=>{const b=typeof d=="function"?d(t):d;if(!Object.is(b,t)){const S=t;t=h??(typeof b!="object"||b===null)?b:Object.assign({},t,b),n.forEach(C=>C(t,S))}},i=()=>t,f={setState:r,getState:i,getInitialState:()=>m,subscribe:d=>(n.add(d),()=>n.delete(d))},m=t=e(r,i,f);return f},oo=(e=>e?ur(e):ur),so=e=>e;function io(e,t=so){const n=a.useSyncExternalStore(e.subscribe,a.useCallback(()=>t(e.getState()),[e,t]),a.useCallback(()=>t(e.getInitialState()),[e,t]));return a.useDebugValue(n),n}const Rt=a.createContext(null);function ao(e={}){return oo((t,n)=>({nodes:[],edges:[],viewport:{x:0,y:0,zoom:1},connection:null,minZoom:.1,maxZoom:5,width:0,height:0,domNode:null,nodesRef:{current:[]},edgesRef:{current:[]},cameraRef:{current:{x:0,y:0,zoom:1}},wrapRef:{current:null},workerRef:{current:null},onNodesChangeRef:{current:null},onEdgesChangeRef:{current:null},viewportListeners:new Set,selectionListeners:new Set,edgeLabelContainerRef:{current:null},viewportPortalRef:{current:null},screenToWorld:(r,i)=>{const o=n().cameraRef.current;return{x:(r-o.x)/o.zoom,y:(i-o.y)/o.zoom}},sendCamera:()=>{var i;const r=n();(i=r.workerRef.current)==null||i.postMessage({type:"camera",data:{camera:{...r.cameraRef.current}}})},...e}))}function Ie(e,t){const n=a.useContext(Rt);if(!n)throw new Error("useCanvasStore must be used within <InfiniteCanvas> or <InfiniteCanvasProvider>");const r=typeof n.getState=="function"&&typeof n.subscribe=="function",i=a.useRef(e),o=a.useRef(t),c=a.useRef(void 0);i.current=e,o.current=t;const f=a.useCallback(m=>{const d=i.current;if(!d)return m;const h=d(m),b=o.current||Object.is;return c.current!==void 0&&b(c.current,h)?c.current:(c.current=h,h)},[]);return r?io(n,e?f:void 0):e?f(n):n}function Rr(){const e=a.useContext(Rt);if(!e)throw new Error("useCanvasStoreApi must be used within <InfiniteCanvas> or <InfiniteCanvasProvider>");return typeof e.getState=="function"?e:{getState:()=>e,setState:()=>{},subscribe:()=>()=>{}}}const on=a.createContext(null);function co(){return a.useContext(on)}function lo({node:e,nodeType:t}){var z,A,B,D;const n=Ie(),r=a.useRef(n);r.current=n;const i=a.useRef(null),o=e._absolutePosition||e.position,c=a.useRef(null);a.useEffect(()=>{const X=i.current;if(!X)return;const H=new ResizeObserver(Y=>{var q,O,_,w;const{width:j,height:P}=Y[0].contentRect;if(j>0&&P>0){const g=r.current,v=g.nodesRef.current.find($=>$.id===e.id),N=(v==null?void 0:v.width)||((q=v==null?void 0:v.measured)==null?void 0:q.width),I=(v==null?void 0:v.height)||((O=v==null?void 0:v.measured)==null?void 0:O.height);(Math.abs((N||0)-j)>1||Math.abs((I||0)-P)>1)&&((w=(_=g.onNodesChangeRef).current)==null||w.call(_,[{id:e.id,type:"dimensions",dimensions:{width:j,height:P},setAttributes:!0}]))}});return H.observe(X),()=>H.disconnect()},[e.id]);const f=a.useCallback(X=>{var ce,pe,me,ye;X.stopPropagation();const H=X.target.tagName;if(H==="INPUT"||H==="TEXTAREA"||H==="SELECT"||H==="BUTTON"||H==="A"||H==="LABEL"||X.target.isContentEditable)return;const Y=r.current.noDragClassName||"nodrag",j=r.current.noPanClassName||"nopan";let P=X.target;for(;P&&P!==i.current;){if((ce=P.classList)!=null&&ce.contains(Y)||(pe=P.classList)!=null&&pe.contains(j))return;P=P.parentElement}if(r.current.onNodesChangeRef.current){const le=[];if(X.shiftKey)le.push({id:e.id,type:"select",selected:!e.selected});else for(const re of r.current.nodesRef.current)re.id===e.id&&!re.selected?le.push({id:re.id,type:"select",selected:!0}):re.id!==e.id&&re.selected&&le.push({id:re.id,type:"select",selected:!1});le.length&&r.current.onNodesChangeRef.current(le)}const q=r.current.cameraRef.current,O=r.current.wrapRef.current;if(!O)return;const _=O.getBoundingClientRect(),w=(X.clientX-_.left-q.x)/q.zoom,g=(X.clientY-_.top-q.y)/q.zoom,N=e.selected?r.current.nodesRef.current.filter(le=>le.selected&&le.id!==e.id).map(le=>({id:le.id,startPos:{...le.position}})):[];c.current={startPos:{...e.position},startMouse:{x:w,y:g},selectedStarts:N};const I=[{id:e.id,type:"position",dragging:!0}];for(const le of N)I.push({id:le.id,type:"position",dragging:!0});(ye=(me=r.current.onNodesChangeRef).current)==null||ye.call(me,I);const $=i.current;$&&$.setPointerCapture(X.pointerId);let V=null;const se=le=>{var He,ze,Ke,tt;if(!c.current)return;const Ce=r.current.cameraRef.current,re=O.getBoundingClientRect(),de=(le.clientX-re.left-Ce.x)/Ce.zoom,Le=(le.clientY-re.top-Ce.y)/Ce.zoom,Ye=de-c.current.startMouse.x,xe=Le-c.current.startMouse.y;let he={x:c.current.startPos.x+Ye,y:c.current.startPos.y+xe};if(r.current.snapToGrid&&r.current.snapGrid&&(he={x:r.current.snapGrid[0]*Math.round(he.x/r.current.snapGrid[0]),y:r.current.snapGrid[1]*Math.round(he.y/r.current.snapGrid[1])}),e.parentId&&e.extent==="parent"){const Me=r.current.nodesRef.current.find(Te=>Te.id===e.parentId);if(Me){const Te=Me.width||160,Xe=Me.height||60,je=e.width||((He=e.measured)==null?void 0:He.width)||160,_e=e.height||((ze=e.measured)==null?void 0:ze.height)||60;he={x:Math.max(0,Math.min(he.x,Te-je)),y:Math.max(0,Math.min(he.y,Xe-_e))}}}$&&($.style.left=he.x+"px",$.style.top=he.y+"px");const $e=[{id:e.id,position:he,_absolutePosition:he,dragging:!0}];for(const Me of c.current.selectedStarts){let Te={x:Me.startPos.x+Ye,y:Me.startPos.y+xe};r.current.snapToGrid&&r.current.snapGrid&&(Te={x:r.current.snapGrid[0]*Math.round(Te.x/r.current.snapGrid[0]),y:r.current.snapGrid[1]*Math.round(Te.y/r.current.snapGrid[1])});const Xe=O.querySelector(`[data-nodeid="${Me.id}"]`);Xe&&(Xe.style.left=Te.x+"px",Xe.style.top=Te.y+"px"),$e.push({id:Me.id,position:Te,_absolutePosition:Te,dragging:!0})}(tt=(Ke=r.current.workerRef)==null?void 0:Ke.current)==null||tt.postMessage({type:"nodePositions",data:{updates:$e}});for(const Me of $e){const Te=r.current.nodesRef.current.find(Xe=>Xe.id===Me.id);Te&&(Te.position=Me.position)}V=$e},te=le=>{var de,Le,Ye,xe;if(!c.current)return;const Ce=[{id:e.id,position:e.position,dragging:!1}];for(const he of c.current.selectedStarts)Ce.push({id:he.id,position:he.startPos,dragging:!1});if(V)for(let he=0;he<V.length;he++)Ce[he]={id:V[he].id,position:V[he].position,dragging:!1};(Le=(de=r.current.workerRef)==null?void 0:de.current)==null||Le.postMessage({type:"nodePositions",data:{updates:Ce}});const re=[];for(const he of Ce)re.push({id:he.id,type:"position",position:he.position,dragging:!1});(xe=(Ye=r.current.onNodesChangeRef).current)==null||xe.call(Ye,re),c.current=null,V=null,$&&$.releasePointerCapture(le.pointerId),$==null||$.removeEventListener("pointermove",se),$==null||$.removeEventListener("pointerup",te)};$==null||$.addEventListener("pointermove",se),$==null||$.addEventListener("pointerup",te)},[e]),m=a.useCallback(X=>{var O,_,w,g,v,N;if(!e.selected)return;const H=X.shiftKey?10:1;let Y=0,j=0;switch(X.key){case"ArrowUp":j=-H;break;case"ArrowDown":j=H;break;case"ArrowLeft":Y=-H;break;case"ArrowRight":Y=H;break;case"Escape":(_=(O=r.current.onNodesChangeRef).current)==null||_.call(O,[{id:e.id,type:"select",selected:!1}]);return;case"Delete":case"Backspace":e.deletable!==!1&&((g=(w=r.current.onNodesChangeRef).current)==null||g.call(w,[{id:e.id,type:"remove"}]));return;default:return}X.preventDefault();const P={x:e.position.x+Y,y:e.position.y+j},q=[{id:e.id,type:"position",position:P}];for(const I of r.current.nodesRef.current)I.selected&&I.id!==e.id&&q.push({id:I.id,type:"position",position:{x:I.position.x+Y,y:I.position.y+j}});(N=(v=r.current.onNodesChangeRef).current)==null||N.call(v,q)},[e]),d=e.width||((z=e.measured)==null?void 0:z.width),h=e.height||((A=e.measured)==null?void 0:A.height),b=!!(d&&h),S=(B=n.pinnedNodeIds)==null?void 0:B.has(e.id),C=a.useCallback(X=>{var H,Y;X.stopPropagation(),(Y=(H=r.current).togglePinNode)==null||Y.call(H,e.id)},[e.id]);return T.jsx(on.Provider,{value:e.id,children:T.jsxs("div",{ref:i,className:`ric-node-wrapper ${e.selected?"selected":""} ${e.dragging?"dragging":""}`,style:{position:"absolute",left:o.x,top:o.y,zIndex:e.type==="group"?0:e.zIndex||1,pointerEvents:e.type==="group"?"none":"all",visibility:b?"visible":"hidden",outline:"none"},"data-nodeid":e.id,tabIndex:e.selectable!==!1?0:void 0,role:"button","aria-label":`Node ${((D=e.data)==null?void 0:D.label)||e.id}`,"aria-selected":!!e.selected,onPointerDown:f,onKeyDown:m,children:[T.jsx(t,{id:e.id,data:e.data,type:e.type,selected:!!e.selected,dragging:!!e.dragging,draggable:e.draggable!==!1,selectable:e.selectable!==!1,deletable:e.deletable!==!1,isConnectable:e.connectable!==!1,zIndex:e.zIndex||0,positionAbsoluteX:o.x,positionAbsoluteY:o.y,width:d,height:h,sourcePosition:e.sourcePosition,targetPosition:e.targetPosition,parentId:e.parentId,dragHandle:e.dragHandle}),n.togglePinNode&&T.jsx("button",{className:"ric-pin-btn nodrag",onClick:C,title:S?"Unpin from DOM":"Pin to DOM",style:{position:"absolute",top:-8,left:-8,width:20,height:20,borderRadius:"50%",border:"1.5px solid "+(S?"#3b82f6":"#ccc"),background:S?"#3b82f6":"#fff",color:S?"#fff":"#999",fontSize:10,lineHeight:"16px",textAlign:"center",cursor:"pointer",padding:0,zIndex:10,pointerEvents:"all",boxShadow:"0 1px 3px rgba(0,0,0,0.12)"},children:"📌"})]})})}const uo=a.memo(lo),kr=160,Cr=60;function dr(e,t,n,r){var f,m;const i=e.width||((f=e.measured)==null?void 0:f.width)||kr,o=e.height||((m=e.measured)==null?void 0:m.height)||Cr,c=e._absolutePosition||e.position;if(e.handleBounds){const d=e.handleBounds[t]||[],h=n?d.find(b=>b.id===n):d[0];if(h&&h.x!==void 0&&h.y!==void 0){const b=h.position||(t==="source"?"right":"left");return{x:c.x+h.x,y:c.y+h.y,position:b}}}if(r){const d=`${e.id}__${n||t}`,h=r.get(d);if(h&&h.x!==void 0&&h.y!==void 0)return{x:c.x+h.x,y:c.y+h.y,position:h.position||(t==="source"?"right":"left")}}if(e.handles&&e.handles.length){for(const d of e.handles)if(d.type===t&&(!n||d.id===n)){if(d.x!==void 0&&d.y!==void 0)return{x:c.x+d.x,y:c.y+d.y,position:d.position||(t==="source"?"right":"left")};const h=d.position||(t==="source"?"right":"left");switch(h){case"top":return{x:c.x+i/2,y:c.y,position:h};case"bottom":return{x:c.x+i/2,y:c.y+o,position:h};case"left":return{x:c.x,y:c.y+o/2,position:h};default:return{x:c.x+i,y:c.y+o/2,position:h}}}}return t==="source"?{x:c.x+i,y:c.y+o/2,position:"right"}:{x:c.x,y:c.y+o/2,position:"left"}}function fo(e,t,n){return n==="left"?e-t:n==="right"?e+t:e}function ho(e,t,n){return n==="top"?e-t:n==="bottom"?e+t:e}function fr({x:e,y:t,position:n,type:r,onPointerDown:i}){return T.jsx("circle",{className:`ric-edge-anchor ric-edge-anchor-${r}`,cx:fo(e,10,n),cy:ho(t,10,n),r:10,stroke:"transparent",fill:"transparent",style:{cursor:"move",pointerEvents:"stroke"},onPointerDown:i})}function go({edge:e,edgeType:t,nodes:n,reconnectable:r}){var P,q,O;const i=a.useContext(Rt),o=a.useRef(typeof i.getState=="function"?i.getState():i);o.current=typeof i.getState=="function"?i.getState():i;const[c,f]=a.useState(null),m=a.useCallback((_,w,g,v)=>{var pe;w.stopPropagation(),w.preventDefault();const N=o.current,I=N.wrapRef.current;if(!I)return;const $=_==="source"?v:g,V=_==="source"?e.target:e.source;(pe=N.workerRef.current)==null||pe.postMessage({type:"connecting",data:{from:{x:$.x,y:$.y},to:{x:$.x,y:$.y}}});const se=I.getBoundingClientRect(),te=me=>{var re;const ye=N.cameraRef.current,le=(me.clientX-se.left-ye.x)/ye.zoom,Ce=(me.clientY-se.top-ye.y)/ye.zoom;(re=N.workerRef.current)==null||re.postMessage({type:"connecting",data:{from:{x:$.x,y:$.y},to:{x:le,y:Ce}}})},ce=me=>{var xe,he,$e,He;const ye=N.cameraRef.current,le=(me.clientX-se.left-ye.x)/ye.zoom,Ce=(me.clientY-se.top-ye.y)/ye.zoom,re=20/ye.zoom;let de=null,Le=null;const Ye=(xe=N.handleRegistryRef)==null?void 0:xe.current;for(const ze of N.nodesRef.current){if(ze.hidden)continue;const Ke=ze.width||kr,tt=ze.height||Cr,Me=ze._absolutePosition||ze.position,Te=[];if(Ye)for(const[,je]of Ye)je.nodeId===ze.id&&Te.push(je);const Xe=Te.length>0?Te:ze.handles||[{type:"target",position:"left"},{type:"source",position:"right"}];for(const je of Xe){let _e,qe;if(je.x!==void 0&&je.y!==void 0)_e=Me.x+je.x,qe=Me.y+je.y;else switch(je.position||(je.type==="source"?"right":"left")){case"top":_e=Me.x+Ke/2,qe=Me.y;break;case"bottom":_e=Me.x+Ke/2,qe=Me.y+tt;break;case"left":_e=Me.x,qe=Me.y+tt/2;break;default:_e=Me.x+Ke,qe=Me.y+tt/2;break}if(Math.abs(le-_e)<re&&Math.abs(Ce-qe)<re){de=ze,Le=je.id||null;break}}if(de)break}if(de){const ze=_==="source"?{source:de.id,target:V,sourceHandle:Le,targetHandle:e.targetHandle}:{source:V,target:de.id,sourceHandle:e.sourceHandle,targetHandle:Le};($e=(he=N.onEdgesChangeRef).current)==null||$e.call(he,[{id:e.id,type:"remove"},{type:"add",item:{id:e.id,...ze}}])}(He=N.workerRef.current)==null||He.postMessage({type:"connecting",data:null}),I.removeEventListener("pointermove",te),I.removeEventListener("pointerup",ce)};I.addEventListener("pointermove",te),I.addEventListener("pointerup",ce)},[e]),d=n.find(_=>_.id===e.source),h=n.find(_=>_.id===e.target),b=d&&!!(d.width||(P=d.measured)!=null&&P.width),S=h&&!!(h.width||(q=h.measured)!=null&&q.width),C=o.current,z=(O=C.handleRegistryRef)==null?void 0:O.current,A=b?dr(d,"source",e.sourceHandle,z):null,B=S?dr(h,"target",e.targetHandle,z):null,D=e.type==="bezier"||e.type==="simplebezier"||e.type==="default",X=C.routedEdges||C.edges,H=X==null?void 0:X.find(_=>_.id===e.id),Y=D?null:(H==null?void 0:H._routedPoints)||e._routedPoints||null,j=r!==!1&&e.reconnectable!==!1;return!A||!B?null:T.jsxs("g",{className:`ric-edge-wrapper ${e.selected?"selected":""}`,"data-edgeid":e.id,onMouseEnter:()=>f(!0),onMouseLeave:()=>f(!1),children:[T.jsx(t,{id:e.id,source:e.source,target:e.target,sourceX:A.x,sourceY:A.y,targetX:B.x,targetY:B.y,sourcePosition:A.position,targetPosition:B.position,sourceHandleId:e.sourceHandle,targetHandleId:e.targetHandle,data:e.data,type:e.type,selected:!!e.selected,animated:!!e.animated,label:e.label,style:e.style,selectable:e.selectable!==!1,deletable:e.deletable!==!1,routedPoints:Y}),j&&(c||e.selected)&&T.jsxs(T.Fragment,{children:[T.jsx(fr,{x:A.x,y:A.y,position:A.position,type:"source",onPointerDown:_=>m("source",_,A,B)}),T.jsx(fr,{x:B.x,y:B.y,position:B.position,type:"target",onPointerDown:_=>m("target",_,A,B)})]})]})}const yo=a.memo(go);function Er({selectionKeyCode:e="Shift",selectionMode:t="partial"}){var A;const n=Ie(),[r,i]=a.useState(null),o=a.useRef(null);if(a.useEffect(()=>{const B=n.wrapRef.current;if(!B)return;let D=!1,X=null,H=!1;const Y=_=>{_.key===e&&(H=!0)},j=_=>{_.key===e&&(H=!1)},P=_=>{if(!H)return;const w=_.target;if(w.closest(".ric-node-wrapper")||w.closest(".ric-handle"))return;D=!0;const g=n.cameraRef.current,v=B.getBoundingClientRect(),N=(_.clientX-v.left-g.x)/g.zoom,I=(_.clientY-v.top-g.y)/g.zoom;X={x:N,y:I},i({startX:N,startY:I,endX:N,endY:I}),_.stopPropagation()},q=_=>{if(!D||!X)return;const w=n.cameraRef.current,g=B.getBoundingClientRect(),v=(_.clientX-g.left-w.x)/w.zoom,N=(_.clientY-g.top-w.y)/w.zoom;i({startX:X.x,startY:X.y,endX:v,endY:N})},O=_=>{var V,se;if(!D||!X)return;D=!1;const w=n.cameraRef.current,g=B.getBoundingClientRect(),v=(_.clientX-g.left-w.x)/w.zoom,N=(_.clientY-g.top-w.y)/w.zoom,I={x:Math.min(X.x,v),y:Math.min(X.y,N),width:Math.abs(v-X.x),height:Math.abs(N-X.y)},$=[];for(const te of n.nodesRef.current){const ce=te._absolutePosition||te.position,pe=te.width||160,me=te.height||60;let ye;t==="full"?ye=ce.x>=I.x&&ce.y>=I.y&&ce.x+pe<=I.x+I.width&&ce.y+me<=I.y+I.height:ye=ce.x+pe>I.x&&ce.x<I.x+I.width&&ce.y+me>I.y&&ce.y<I.y+I.height,$.push({id:te.id,type:"select",selected:ye})}$.length&&((se=(V=n.onNodesChangeRef).current)==null||se.call(V,$)),X=null,i(null)};return B.addEventListener("pointerdown",P,!0),B.addEventListener("pointermove",q),B.addEventListener("pointerup",O),window.addEventListener("keydown",Y),window.addEventListener("keyup",j),()=>{B.removeEventListener("pointerdown",P,!0),B.removeEventListener("pointermove",q),B.removeEventListener("pointerup",O),window.removeEventListener("keydown",Y),window.removeEventListener("keyup",j)}},[n,e,t]),!r)return null;const c=((A=n.cameraRef)==null?void 0:A.current)||{x:0,y:0,zoom:1},f=Math.min(r.startX,r.endX),m=Math.min(r.startY,r.endY),d=Math.abs(r.endX-r.startX),h=Math.abs(r.endY-r.startY),b=f*c.zoom+c.x,S=m*c.zoom+c.y,C=d*c.zoom,z=h*c.zoom;return T.jsx("div",{ref:o,className:"ric-selection-box",style:{position:"absolute",left:b,top:S,width:C,height:z,border:"1px dashed #3b82f6",background:"rgba(59, 130, 246, 0.08)",pointerEvents:"none",zIndex:100}})}Er.displayName="SelectionBox";const Sr=a.memo(Er);function Qn(e,t,n){switch(e){case"top":return{x:t/2,y:0};case"bottom":return{x:t/2,y:n};case"left":return{x:0,y:n/2};case"right":return{x:t,y:n/2};default:return{x:t,y:n/2}}}function xo(e,t){const n=e.closest(".ric-node-wrapper");if(!n)return null;const r=n.getBoundingClientRect(),i=e.getBoundingClientRect(),o=t||1;return{x:(i.left+i.width/2-r.left)/o,y:(i.top+i.height/2-r.top)/o}}let On=!1,Mt=null;function zr(e){Mt=e,!On&&(On=!0,requestAnimationFrame(()=>{var t;On=!1,(t=Mt==null?void 0:Mt.syncNodesToWorker)==null||t.call(Mt),Mt=null}))}const Jn=new WeakMap;let bn=null;function po(){return bn||(bn=new ResizeObserver(e=>{var t;for(const n of e){const r=Jn.get(n.target);if(!r)continue;const{width:i,height:o}=n.contentRect;if(!i||!o)continue;const c=r.getStore(),f=(t=c.handleRegistryRef)==null?void 0:t.current;if(f){for(const[m,d]of f)if(d.nodeId===r.nodeId){const h=Qn(d.position,i,o);d.x=h.x,d.y=h.y,f.set(m,d)}zr(c)}}}),bn)}function mo({type:e="source",position:t=e==="source"?"right":"left",id:n,isConnectable:r=!0,isConnectableStart:i=!0,isConnectableEnd:o=!0,children:c,className:f="",style:m={},onConnect:d,...h}){const b=a.useContext(on),S=a.useContext(Rt),C=a.useRef(null),z=a.useCallback(()=>typeof S.getState=="function"?S.getState():S,[S]),A=a.useRef(z);A.current=z,a.useLayoutEffect(()=>{var w,g,v,N,I,$,V;if(!b)return;const H=A.current(),Y=(w=H.handleRegistryRef)==null?void 0:w.current;if(!Y)return;const j=`${b}__${n||e}`,P=(v=(g=H.nodesRef)==null?void 0:g.current)==null?void 0:v.find(se=>se.id===b),q=(P==null?void 0:P.width)||((N=P==null?void 0:P.measured)==null?void 0:N.width),O=(P==null?void 0:P.height)||((I=P==null?void 0:P.measured)==null?void 0:I.height);let _;q&&O?_=Qn(t,q,O):C.current?_=xo(C.current,(V=($=H.cameraRef)==null?void 0:$.current)==null?void 0:V.zoom):_=Qn(t,160,60),Y.set(j,{nodeId:b,id:n||null,type:e,position:t,x:_.x,y:_.y})},[b,n,e,t]),a.useEffect(()=>{if(!b)return;const H=A.current();zr(H);const Y=C.current,j=Y==null?void 0:Y.closest(".ric-node-wrapper");return j&&!Jn.has(j)&&(Jn.set(j,{nodeId:b,getStore:A.current}),po().observe(j)),()=>{var _;const q=(_=A.current().handleRegistryRef)==null?void 0:_.current,O=`${b}__${n||e}`;q==null||q.delete(O)}},[b,n,e,t]);const B=a.useCallback(()=>{var g;const H=A.current(),Y=H.nodesRef.current.find(v=>v.id===b);if(!Y)return null;const j=Y._absolutePosition||Y.position,P=(g=H.handleRegistryRef)==null?void 0:g.current,q=`${b}__${n||e}`,O=P==null?void 0:P.get(q);if(O&&O.x!==void 0&&O.y!==void 0)return{x:j.x+O.x,y:j.y+O.y};const _=Y.width||160,w=Y.height||60;switch(t){case"top":return{x:j.x+_/2,y:j.y};case"bottom":return{x:j.x+_/2,y:j.y+w};case"left":return{x:j.x,y:j.y+w/2};default:return{x:j.x+_,y:j.y+w/2}}},[b,n,e,t]),D=a.useCallback(H=>{var N;if(!r||!i)return;H.stopPropagation(),H.preventDefault();const Y=A.current(),j=Y.cameraRef.current,P=Y.wrapRef.current;if(!P)return;const q=P.getBoundingClientRect(),O=B();if(!O)return;const _=O.x,w=O.y;(N=Y.workerRef.current)==null||N.postMessage({type:"connecting",data:{from:{x:_,y:w},to:{x:_,y:w}}}),P.setPointerCapture(H.pointerId);const g=I=>{var se;const $=(I.clientX-q.left-j.x)/j.zoom,V=(I.clientY-q.top-j.y)/j.zoom;(se=Y.workerRef.current)==null||se.postMessage({type:"connecting",data:{from:{x:_,y:w},to:{x:$,y:V}}})},v=I=>{var me,ye,le,Ce;const $=(I.clientX-q.left-j.x)/j.zoom,V=(I.clientY-q.top-j.y)/j.zoom,se=20/j.zoom;let te=null,ce=null;const pe=(me=Y.handleRegistryRef)==null?void 0:me.current;for(const re of Y.nodesRef.current){if(re.id===b||re.hidden)continue;const de=re._absolutePosition||re.position,Le=[];if(pe)for(const[,xe]of pe)xe.nodeId===re.id&&Le.push(xe);const Ye=Le.length>0?Le:re.handles||[{type:"target",position:"left"},{type:"source",position:"right"}];for(const xe of Ye){let he,$e;if(xe.x!==void 0&&xe.y!==void 0)he=de.x+xe.x,$e=de.y+xe.y;else{const He=re.width||160,ze=re.height||60;switch(xe.position||(xe.type==="source"?"right":"left")){case"top":he=de.x+He/2,$e=de.y;break;case"bottom":he=de.x+He/2,$e=de.y+ze;break;case"left":he=de.x,$e=de.y+ze/2;break;default:he=de.x+He,$e=de.y+ze/2;break}}if(Math.abs($-he)<se&&Math.abs(V-$e)<se){te=re,ce=xe.id||null;break}}if(te)break}if(te){const re={source:e==="source"?b:te.id,target:e==="source"?te.id:b,sourceHandle:e==="source"?n||null:ce,targetHandle:e==="source"?ce:n||null};(le=(ye=Y.onEdgesChangeRef)==null?void 0:ye.current)==null||le.call(ye,[{type:"add",item:{id:`e-${re.source}-${re.target}`,...re}}])}(Ce=Y.workerRef.current)==null||Ce.postMessage({type:"connecting",data:null}),P.removeEventListener("pointermove",g),P.removeEventListener("pointerup",v)};P.addEventListener("pointermove",g),P.addEventListener("pointerup",v)},[b,n,e,t,r,i,B]),X={top:{top:0,left:"50%",transform:"translate(-50%, -50%)"},bottom:{bottom:0,left:"50%",transform:"translate(-50%, 50%)"},left:{top:"50%",left:0,transform:"translate(-50%, -50%)"},right:{top:"50%",right:0,transform:"translate(50%, -50%)"}}[t]||{};return T.jsx("div",{ref:C,className:`ric-handle ric-handle-${t} ric-handle-${e} ${f}`,"data-handleid":n||null,"data-nodeid":b,"data-handlepos":t,"data-handletype":e,onPointerDown:D,style:{position:"absolute",width:8,height:8,borderRadius:"50%",background:"#1a192b",border:"none",zIndex:10,cursor:r?"crosshair":"default",boxSizing:"border-box",...X,...m},...h,children:c})}const rn=a.memo(mo);function vo({data:e,isConnectable:t,selected:n,targetPosition:r="left",sourcePosition:i="right",hideSourceHandle:o=!1,hideTargetHandle:c=!1}){return T.jsxs("div",{className:`ric-default-node${n?" selected":""}`,style:{background:"#fff",border:"1px solid #1a192b",borderRadius:3,padding:"10px",minWidth:150,fontSize:12,fontFamily:"inherit",boxShadow:n?"0 0 0 0.5px #1a192b":"none"},children:[!c&&T.jsx(rn,{type:"target",position:r,isConnectable:t}),T.jsx("div",{className:"ric-node-content",children:e==null?void 0:e.label}),!o&&T.jsx(rn,{type:"source",position:i,isConnectable:t})]})}function Nr({data:e,isConnectable:t,selected:n,sourcePosition:r="right",hideSourceHandle:i=!1}){return T.jsxs("div",{className:`ric-input-node${n?" selected":""}`,style:{background:"#fff",border:"1px solid #1a192b",borderBottom:"2px solid #0041d0",borderRadius:3,padding:"10px",minWidth:150,fontSize:12,fontFamily:"inherit",boxShadow:n?"0 0 0 0.5px #1a192b":"none"},children:[T.jsx("div",{className:"ric-node-content",children:e==null?void 0:e.label}),!i&&T.jsx(rn,{type:"source",position:r,isConnectable:t})]})}function Pr({data:e,isConnectable:t,selected:n,targetPosition:r="left",hideTargetHandle:i=!1}){return T.jsxs("div",{className:`ric-output-node${n?" selected":""}`,style:{background:"#fff",border:"1px solid #1a192b",borderTop:"2px solid #ff0072",borderRadius:3,padding:"10px",minWidth:150,fontSize:12,fontFamily:"inherit",boxShadow:n?"0 0 0 0.5px #1a192b":"none"},children:[!i&&T.jsx(rn,{type:"target",position:r,isConnectable:t}),T.jsx("div",{className:"ric-node-content",children:e==null?void 0:e.label})]})}function Ir({data:e,selected:t,width:n,height:r}){return T.jsx("div",{className:`ric-group-node${t?" selected":""}`,style:{width:n||300,height:r||200,background:"rgba(240, 240, 240, 0.25)",border:t?"2px solid #3b82f6":"1px dashed #ccc",borderRadius:8,padding:8,boxSizing:"border-box"},children:(e==null?void 0:e.label)&&T.jsx("div",{style:{fontSize:11,fontWeight:600,color:"#888",userSelect:"none"},children:e.label})})}function Tr({x:e,y:t,label:n,labelStyle:r,labelShowBg:i=!0,labelBgStyle:o,labelBgPadding:c=[2,4],labelBgBorderRadius:f=2,children:m,className:d="",...h}){const[b,S]=a.useState({x:1,y:0,width:0,height:0}),C=a.useRef(null);return a.useEffect(()=>{if(C.current){const z=C.current.getBBox();S({x:z.x,y:z.y,width:z.width,height:z.height})}},[n]),n?T.jsxs("g",{transform:`translate(${e-b.width/2} ${t-b.height/2})`,className:`ric-edge-textwrapper ${d}`,visibility:b.width?"visible":"hidden",...h,children:[i&&T.jsx("rect",{width:b.width+2*c[0],x:-c[0],y:-c[1],height:b.height+2*c[1],className:"ric-edge-textbg",style:o,rx:f,ry:f}),T.jsx("text",{className:"ric-edge-text",y:b.height/2,dy:"0.3em",ref:C,style:r,children:n}),m]}):null}Tr.displayName="EdgeText";const Lr=a.memo(Tr);function hr(e){return e!=null&&e!==""&&!isNaN(Number(e))}function sn({id:e,path:t,labelX:n,labelY:r,label:i,labelStyle:o,labelShowBg:c,labelBgStyle:f,labelBgPadding:m,labelBgBorderRadius:d,interactionWidth:h=20,style:b,markerEnd:S,markerStart:C,className:z="",...A}){return T.jsxs(T.Fragment,{children:[T.jsx("path",{id:e,d:t,fill:"none",stroke:"#b1b1b7",strokeWidth:1.5,className:`ric-edge-path ${z}`,style:b,markerEnd:S,markerStart:C,...A}),h?T.jsx("path",{d:t,fill:"none",strokeOpacity:0,strokeWidth:h,className:"ric-edge-interaction",style:{pointerEvents:"stroke"}}):null,i&&hr(n)&&hr(r)?T.jsx(Lr,{x:n,y:r,label:i,labelStyle:o,labelShowBg:c,labelBgStyle:f,labelBgPadding:m,labelBgBorderRadius:d}):null]})}const en=20;function gr(e,t,n){switch(n){case"right":return{x:e+en,y:t};case"left":return{x:e-en,y:t};case"bottom":return{x:e,y:t+en};case"top":return{x:e,y:t-en};default:return{x:e+en,y:t}}}const er=a.memo(function({id:t,sourceX:n,sourceY:r,targetX:i,targetY:o,sourcePosition:c="bottom",targetPosition:f="top",label:m,labelStyle:d,labelShowBg:h,labelBgStyle:b,labelBgPadding:S,labelBgBorderRadius:C,style:z,markerEnd:A,markerStart:B,interactionWidth:D}){let X,H,Y;const j=gr(n,r,c),P=gr(i,o,f),q=Math.abs(P.x-j.x),O=Math.max(50,q*.5);let _,w,g,v;switch(c){case"left":_=j.x-O,w=j.y;break;case"top":_=j.x,w=j.y-O;break;case"bottom":_=j.x,w=j.y+O;break;default:_=j.x+O,w=j.y;break}switch(f){case"right":g=P.x+O,v=P.y;break;case"top":g=P.x,v=P.y-O;break;case"bottom":g=P.x,v=P.y+O;break;default:g=P.x-O,v=P.y;break}X=`M ${n},${r} L ${j.x},${j.y} C ${_},${w} ${g},${v} ${P.x},${P.y} L ${i},${o}`;const N=.5,I=.5;return H=I*I*I*j.x+3*I*I*N*_+3*I*N*N*g+N*N*N*P.x,Y=I*I*I*j.y+3*I*I*N*w+3*I*N*N*v+N*N*N*P.y,T.jsx(sn,{id:t,path:X,labelX:H,labelY:Y,label:m,labelStyle:d,labelShowBg:h,labelBgStyle:b,labelBgPadding:S,labelBgBorderRadius:C,style:z,markerEnd:A,markerStart:B,interactionWidth:D})});er.displayName="BezierEdge";function tr({sourceX:e,sourceY:t,targetX:n,targetY:r}){const i=`M ${e},${t}L ${n},${r}`,o=(e+n)/2,c=(t+r)/2;return[i,o,c,0,0]}function nr({sourceX:e,sourceY:t,targetX:n,targetY:r,sourcePosition:i="right",targetPosition:o="left",curvature:c=.25}){const f=Math.abs(n-e),m=Math.abs(r-t),d=Math.sqrt(f*f+m*m),h=Math.max(d*c,50);let b,S,C,z;switch(i){case"top":b=e,S=t-h;break;case"bottom":b=e,S=t+h;break;case"left":b=e-h,S=t;break;default:b=e+h,S=t;break}switch(o){case"top":C=n,z=r-h;break;case"bottom":C=n,z=r+h;break;case"right":C=n+h,z=r;break;default:C=n-h,z=r;break}const A=`M ${e},${t} C ${b},${S} ${C},${z} ${n},${r}`,B=.5,D=1-B,X=D*D*D*e+3*D*D*B*b+3*D*B*B*C+B*B*B*n,H=D*D*D*t+3*D*D*B*S+3*D*B*B*z+B*B*B*r;return[A,X,H,0,0]}function rr({sourceX:e,sourceY:t,targetX:n,targetY:r}){const i=Math.abs(n-e),o=Math.max(i*.5,50),c=e+o,f=n-o,m=`M ${e},${t} C ${c},${t} ${f},${r} ${n},${r}`,d=.5,h=.5,b=h*h*h*e+3*h*h*d*c+3*h*d*d*f+d*d*d*n,S=h*h*h*t+3*h*h*d*t+3*h*d*d*r+d*d*d*r;return[m,b,S,0,0]}function Rn({sourceX:e,sourceY:t,targetX:n,targetY:r,sourcePosition:i="right",targetPosition:o="left",borderRadius:c=5,offset:f=20}){const m=i==="left"||i==="right",d=Math.min(c,Math.abs(n-e)/2,Math.abs(r-t)/2);if(m){if(Math.abs(r-t)<1)return[`M ${e},${t} L ${n},${r}`,(e+n)/2,t,0,0];const C=(e+n)/2,z=r>t?1:-1;return[`M ${e},${t} L ${C-d},${t} Q ${C},${t} ${C},${t+z*d} L ${C},${r-z*d} Q ${C},${r} ${C+(n>C?d:-d)},${r} L ${n},${r}`,C,(t+r)/2,0,0]}const h=(t+r)/2,b=n>e?1:-1;return[`M ${e},${t} L ${e},${h-d} Q ${e},${h} ${e+b*d},${h} L ${n-b*d},${h} Q ${n},${h} ${n},${h+(r>h?d:-d)} L ${n},${r}`,(e+n)/2,h,0,0]}function bo({sourceX:e,sourceY:t,targetX:n,targetY:r}){const[,i,o]=nr({sourceX:e,sourceY:t,targetX:n,targetY:r});return[i,o,0,0]}function wo({sourceX:e,sourceY:t,targetX:n,targetY:r}){return[(e+n)/2,(t+r)/2,0,0]}function Mo(e,t,n){const r=n.filter(o=>o.id!==e.id),i={...e,id:e.id,source:t.source,target:t.target,sourceHandle:t.sourceHandle??e.sourceHandle,targetHandle:t.targetHandle??e.targetHandle};return r.push(i),r}const kn=160,Cn=60,tn=20,wn=12,En=20;function yr(e,t,n){var c,f;const r=e.width||((c=e.measured)==null?void 0:c.width)||kn,i=e.height||((f=e.measured)==null?void 0:f.height)||Cn,o=e._absolutePosition||e.position;if(e.handles&&e.handles.length>0){for(const m of e.handles)if(m.type===t&&(!n||m.id===n)){if(m.x!==void 0&&m.y!==void 0)return{x:o.x+m.x,y:o.y+m.y,dir:m.position||(t==="source"?"right":"left")};switch(m.position||(t==="source"?"right":"left")){case"top":return{x:o.x+r/2,y:o.y,dir:"top"};case"bottom":return{x:o.x+r/2,y:o.y+i,dir:"bottom"};case"left":return{x:o.x,y:o.y+i/2,dir:"left"};default:return{x:o.x+r,y:o.y+i/2,dir:"right"}}}}return t==="source"?{x:o.x+r,y:o.y+i/2,dir:"right"}:{x:o.x,y:o.y+i/2,dir:"left"}}function Sn(e,t){switch(e.dir){case"right":return{x:e.x+t,y:e.y,dir:e.dir};case"left":return{x:e.x-t,y:e.y,dir:e.dir};case"bottom":return{x:e.x,y:e.y+t,dir:e.dir};case"top":return{x:e.x,y:e.y-t,dir:e.dir};default:return{x:e.x+t,y:e.y,dir:e.dir}}}function Ro(e,t,n,r,i,o,c,f){const m=Math.min(e,n),d=Math.max(e,n),h=Math.min(t,r),b=Math.max(t,r);if(d<=i||m>=i+c||b<=o||h>=o+f)return!1;const S=.5;if(e>i+S&&e<i+c-S&&t>o+S&&t<o+f-S||n>i+S&&n<i+c-S&&r>o+S&&r<o+f-S)return!0;const C=(e+n)/2,z=(t+r)/2;if(C>i+S&&C<i+c-S&&z>o+S&&z<o+f-S)return!0;const A=[[i,o],[i+c,o],[i+c,o+f],[i,o+f]];for(let B=0;B<4;B++)if(ko(e,t,n,r,A[B][0],A[B][1],A[(B+1)%4][0],A[(B+1)%4][1]))return!0;return!1}function ko(e,t,n,r,i,o,c,f){const m=(c-i)*(t-o)-(f-o)*(e-i),d=(c-i)*(r-o)-(f-o)*(n-i),h=(n-e)*(o-t)-(r-t)*(i-e),b=(n-e)*(f-t)-(r-t)*(c-e);return(m>0&&d<0||m<0&&d>0)&&(h>0&&b<0||h<0&&b>0)}function Vn(e,t,n,r,i){for(let o=0;o<i.length;o++){const c=i[o];if(Ro(e,t,n,r,c.x,c.y,c.w,c.h))return!1}return!0}function Co(e,t,n){for(let r=0;r<n.length;r++){const i=n[r];if(e>i.x&&e<i.x+i.w&&t>i.y&&t<i.y+i.h)return!0}return!1}function or(e,t){var r,i;const n=[];for(let o=0;o<e.length;o++){const c=e[o];if(c.hidden||t&&t.has(c.id)||c.type==="group")continue;const f=c._absolutePosition||c.position,m=c.width||((r=c.measured)==null?void 0:r.width)||kn,d=c.height||((i=c.measured)==null?void 0:i.height)||Cn;n.push({id:c.id,x:f.x-tn,y:f.y-tn,w:m+2*tn,h:d+2*tn})}return n}function Br(e,t,n){if(Vn(e.x,e.y,t.x,t.y,n))return null;const r=new Set,i=new Set;r.add(e.x),r.add(t.x),i.add(e.y),i.add(t.y);const o=tn+5;e.dir==="right"?r.add(e.x+o):e.dir==="left"?r.add(e.x-o):e.dir==="top"?i.add(e.y-o):e.dir==="bottom"&&i.add(e.y+o),t.dir==="right"?r.add(t.x+o):t.dir==="left"?r.add(t.x-o):t.dir==="top"?i.add(t.y-o):t.dir==="bottom"&&i.add(t.y+o);for(let g=0;g<n.length;g++){const v=n[g];r.add(v.x),r.add(v.x+v.w),i.add(v.y),i.add(v.y+v.h)}const c=[...r].sort((g,v)=>g-v),f=[...i].sort((g,v)=>g-v),m=new Map,d=new Map;for(let g=0;g<c.length;g++)m.set(c[g],g);for(let g=0;g<f.length;g++)d.set(f[g],g);const h=c.length,b=f.length,S=(g,v)=>v*h+g,C=m.get(e.x),z=d.get(e.y),A=m.get(t.x),B=d.get(t.y);if(C===void 0||z===void 0||A===void 0||B===void 0)return null;const D=S(C,z),X=S(A,B),H=new Float64Array(h*b).fill(1/0),Y=new Float64Array(h*b).fill(1/0),j=new Int32Array(h*b).fill(-1),P=new Int8Array(h*b).fill(-1),q=new Uint8Array(h*b);H[D]=0,Y[D]=Math.abs(c[A]-e.x)+Math.abs(f[B]-e.y);const O=[D],_=15,w=[[1,0],[-1,0],[0,1],[0,-1]];for(;O.length>0;){let g=0;for(let te=1;te<O.length;te++)Y[O[te]]<Y[O[g]]&&(g=te);const v=O[g];if(O[g]=O[O.length-1],O.pop(),v===X){const te=[];let ce=X;for(;ce!==-1&&ce!==D;){const pe=ce/h|0,me=ce%h;te.unshift({x:c[me],y:f[pe]}),ce=j[ce]}return te.unshift({x:e.x,y:e.y}),Eo(te,n)}if(q[v])continue;q[v]=1;const N=v/h|0,I=v%h,$=c[I],V=f[N],se=P[v];for(let te=0;te<4;te++){const ce=I+w[te][0],pe=N+w[te][1];if(ce<0||ce>=h||pe<0||pe>=b)continue;const me=S(ce,pe);if(q[me])continue;const ye=c[ce],le=f[pe];if(Co(ye,le,n)||!Vn($,V,ye,le,n))continue;const Ce=Math.abs(ye-$)+Math.abs(le-V),re=se>=0&&se!==te?_:0,de=H[v]+Ce+re;de<H[me]&&(j[me]=v,P[me]=te,H[me]=de,Y[me]=de+Math.abs(c[A]-ye)+Math.abs(f[B]-le),O.push(me))}}return null}function Eo(e,t){if(!e||e.length<=2)return e;const n=[e[0]];for(let r=1;r<e.length-1;r++){const i=n[n.length-1],o=e[r],c=e[r+1],f=Math.abs(i.x-o.x)<.5&&Math.abs(o.x-c.x)<.5,m=Math.abs(i.y-o.y)<.5&&Math.abs(o.y-c.y)<.5;(f||m)&&Vn(i.x,i.y,c.x,c.y,t)||n.push(o)}return n.push(e[e.length-1]),n}function So(e){const t=new Map,n=new Map;for(const i of e){const o=i._routedPoints;if(!(!o||o.length<2))for(let c=0;c<o.length-1;c++){const f=o[c],m=o[c+1];if(Math.abs(f.y-m.y)<.5){const d=Math.round(f.y*10)/10;t.has(d)||t.set(d,[]),t.get(d).push({edgeId:i.id,segIdx:c,x1:Math.min(f.x,m.x),x2:Math.max(f.x,m.x)})}else if(Math.abs(f.x-m.x)<.5){const d=Math.round(f.x*10)/10;n.has(d)||n.set(d,[]),n.get(d).push({edgeId:i.id,segIdx:c,y1:Math.min(f.y,m.y),y2:Math.max(f.y,m.y)})}}}const r=new Map;for(const i of e)i._routedPoints&&r.set(i.id,i._routedPoints.map(o=>({...o})));for(const[,i]of t){if(i.length<2)continue;const o=xr(i,"x1","x2");for(const c of o){if(c.length<2)continue;const f=(c.length-1)*wn/2;for(let m=0;m<c.length;m++){const d=c[m],h=-f+m*wn,b=r.get(d.edgeId);b&&(b[d.segIdx].y+=h,b[d.segIdx+1].y+=h)}}}for(const[,i]of n){if(i.length<2)continue;const o=xr(i,"y1","y2");for(const c of o){if(c.length<2)continue;const f=(c.length-1)*wn/2;for(let m=0;m<c.length;m++){const d=c[m],h=-f+m*wn,b=r.get(d.edgeId);b&&(b[d.segIdx].x+=h,b[d.segIdx+1].x+=h)}}}return e.map(i=>{const o=r.get(i.id);return o?{...i,_routedPoints:o}:i})}function xr(e,t,n){if(e.length<2)return[];const r=[...e].sort((c,f)=>c[t]-f[t]),i=[];let o=[r[0]];for(let c=1;c<r.length;c++){const f=o[o.length-1];r[c][t]<f[n]?o.push(r[c]):(o.length>1&&i.push(o),o=[r[c]])}return o.length>1&&i.push(o),i}function zn(e,t=6,n=!1){if(!e||e.length<2)return null;if(n)return zo(e);const r=t;let i=`M ${e[0].x},${e[0].y}`;for(let o=1;o<e.length-1;o++){const c=e[o-1],f=e[o],m=e[o+1],d=Math.abs(f.x-c.x)+Math.abs(f.y-c.y),h=Math.abs(m.x-f.x)+Math.abs(m.y-f.y),b=Math.min(r,d/2,h/2);if(b>.5){const S=f.x-c.x,C=f.y-c.y,z=m.x-f.x,A=m.y-f.y,B=Math.sqrt(S*S+C*C)||1,D=Math.sqrt(z*z+A*A)||1;i+=` L ${f.x-S/B*b},${f.y-C/B*b}`,i+=` Q ${f.x},${f.y} ${f.x+z/D*b},${f.y+A/D*b}`}else i+=` L ${f.x},${f.y}`}return i+=` L ${e[e.length-1].x},${e[e.length-1].y}`,i}function zo(e){if(e.length===2)return`M ${e[0].x},${e[0].y} L ${e[1].x},${e[1].y}`;if(e.length===3)return`M ${e[0].x},${e[0].y} Q ${e[1].x},${e[1].y} ${e[2].x},${e[2].y}`;const t=.3;let n=`M ${e[0].x},${e[0].y}`;for(let r=0;r<e.length-1;r++){const i=e[r===0?0:r-1],o=e[r],c=e[r+1],f=e[r+2<e.length?r+2:e.length-1],m=o.x+(c.x-i.x)*t,d=o.y+(c.y-i.y)*t,h=c.x-(f.x-o.x)*t,b=c.y-(f.y-o.y)*t;n+=` C ${m},${d} ${h},${b} ${c.x},${c.y}`}return n}function Nn(e){if(!e||e.length<2)return{x:0,y:0};let t=0;for(let r=1;r<e.length;r++)t+=Math.abs(e[r].x-e[r-1].x)+Math.abs(e[r].y-e[r-1].y);let n=t/2;for(let r=1;r<e.length;r++){const i=Math.abs(e[r].x-e[r-1].x)+Math.abs(e[r].y-e[r-1].y);if(n<=i){const o=i>0?n/i:0;return{x:e[r-1].x+(e[r].x-e[r-1].x)*o,y:e[r-1].y+(e[r].y-e[r-1].y)*o}}n-=i}return{x:e[0].x,y:e[0].y}}function No(e,t){if(!e||!t||e.length===0||t.length===0)return t;const n={};for(const o of e)n[o.id]=o;const r=or(e,null),i=t.map(o=>{var P,q,O,_;const c=o.type||"default";if(c==="bezier"||c==="simplebezier"||c==="default")return o;const f=n[o.source],m=n[o.target];if(!f||!m||f.hidden||m.hidden)return o;const d=yr(f,"source",o.sourceHandle),h=yr(m,"target",o.targetHandle),b=Sn(d,En),S=Sn(h,En),C=5,z=r.filter(w=>w.id!==o.source&&w.id!==o.target),A=f._absolutePosition||f.position,B=f.width||((P=f.measured)==null?void 0:P.width)||kn,D=f.height||((q=f.measured)==null?void 0:q.height)||Cn;z.push({id:o.source,x:A.x-C,y:A.y-C,w:B+2*C,h:D+2*C});const X=m._absolutePosition||m.position,H=m.width||((O=m.measured)==null?void 0:O.width)||kn,Y=m.height||((_=m.measured)==null?void 0:_.height)||Cn;if(z.push({id:o.target,x:X.x-C,y:X.y-C,w:H+2*C,h:Y+2*C}),z.length===0)return o;const j=Br(b,S,z);return j&&j.length>=2?(j.unshift({x:d.x,y:d.y}),j.push({x:h.x,y:h.y}),{...o,_routedPoints:j}):o});return So(i)}function Po(e,t,n,r,i,o,c,f){const m=or(c,f?new Set(f):null);if(m.length===0)return null;const d={x:e,y:t,dir:i||"right"},h={x:n,y:r,dir:o||"left"},b=Sn(d,En),S=Sn(h,En),C=Br(b,S,m);return C&&C.length>=2?(C.unshift({x:d.x,y:d.y}),C.push({x:h.x,y:h.y}),C):null}const sr=a.memo(function({id:t,sourceX:n,sourceY:r,targetX:i,targetY:o,label:c,labelStyle:f,labelShowBg:m,labelBgStyle:d,labelBgPadding:h,labelBgBorderRadius:b,style:S,markerEnd:C,markerStart:z,interactionWidth:A,routedPoints:B}){let D,X,H;if(B&&B.length>=2){D=zn(B);const Y=Nn(B);X=Y.x,H=Y.y}else[D,X,H]=tr({sourceX:n,sourceY:r,targetX:i,targetY:o});return T.jsx(sn,{id:t,path:D,labelX:X,labelY:H,label:c,labelStyle:f,labelShowBg:m,labelBgStyle:d,labelBgPadding:h,labelBgBorderRadius:b,style:S,markerEnd:C,markerStart:z,interactionWidth:A})});sr.displayName="StraightEdge";const ir=a.memo(function({id:t,sourceX:n,sourceY:r,targetX:i,targetY:o,sourcePosition:c="bottom",targetPosition:f="top",label:m,labelStyle:d,labelShowBg:h,labelBgStyle:b,labelBgPadding:S,labelBgBorderRadius:C,style:z,markerEnd:A,markerStart:B,pathOptions:D,interactionWidth:X,routedPoints:H}){let Y,j,P;if(H&&H.length>=2){Y=zn(H);const q=Nn(H);j=q.x,P=q.y}else[Y,j,P]=Rn({sourceX:n,sourceY:r,sourcePosition:c,targetX:i,targetY:o,targetPosition:f,borderRadius:D==null?void 0:D.borderRadius,offset:D==null?void 0:D.offset});return T.jsx(sn,{id:t,path:Y,labelX:j,labelY:P,label:m,labelStyle:d,labelShowBg:h,labelBgStyle:b,labelBgPadding:S,labelBgBorderRadius:C,style:z,markerEnd:A,markerStart:B,interactionWidth:X})});ir.displayName="SmoothStepEdge";const $r=a.memo(function({id:t,...n}){var i;const r=a.useMemo(()=>{var o;return{borderRadius:0,offset:(o=n.pathOptions)==null?void 0:o.offset}},[(i=n.pathOptions)==null?void 0:i.offset]);return T.jsx(ir,{...n,id:t,pathOptions:r})});$r.displayName="StepEdge";const ar=a.memo(function({id:t,sourceX:n,sourceY:r,targetX:i,targetY:o,sourcePosition:c,targetPosition:f,label:m,labelStyle:d,labelShowBg:h,labelBgStyle:b,labelBgPadding:S,labelBgBorderRadius:C,style:z,markerEnd:A,markerStart:B,interactionWidth:D,routedPoints:X}){let H,Y,j;if(X&&X.length>=2){H=zn(X);const P=Nn(X);Y=P.x,j=P.y}else[H,Y,j]=rr({sourceX:n,sourceY:r,targetX:i,targetY:o});return T.jsx(sn,{id:t,path:H,labelX:Y,labelY:j,label:m,labelStyle:d,labelShowBg:h,labelBgStyle:b,labelBgPadding:S,labelBgBorderRadius:C,style:z,markerEnd:A,markerStart:B,interactionWidth:D})});ar.displayName="SimpleBezierEdge";const Io={input:Nr,output:Pr,group:Ir},To={bezier:er,straight:sr,simplebezier:ar},Lo=160,Bo=60;function $o(e){let t=!1;for(let n=0;n<e.length;n++){const r=e[n];if(!r.measured||r.measured.width==null||r.measured.height==null){t=!0;break}}return t?e.map(n=>{var r,i;return((r=n.measured)==null?void 0:r.width)!=null&&((i=n.measured)==null?void 0:i.height)!=null?n:{...n,measured:{width:n.width||Lo,height:n.height||Bo}}}):e}function jo({cards:e,nodes:t=[],edges:n=[],nodeTypes:r,edgeTypes:i,canvasNodeTypes:o,domNodeLimit:c=50,dark:f,gridSize:m,width:d="100%",height:h="420px",className:b="",style:S={},zoomMin:C,zoomMax:z,initialCamera:A,fitView:B,fitViewOptions:D,onNodesChange:X,onEdgesChange:H,onConnect:Y,onConnectStart:j,onConnectEnd:P,onNodeClick:q,onNodeDoubleClick:O,onNodeMouseEnter:_,onNodeMouseMove:w,onNodeMouseLeave:g,onNodeContextMenu:v,onNodeDragStart:N,onNodeDrag:I,onNodeDragStop:$,onEdgeClick:V,onEdgeDoubleClick:se,onEdgeMouseEnter:te,onEdgeMouseMove:ce,onEdgeMouseLeave:pe,onEdgeContextMenu:me,onPaneClick:ye,onPaneContextMenu:le,onPaneMouseEnter:Ce,onPaneMouseMove:re,onPaneMouseLeave:de,onSelectionChange:Le,onInit:Ye,onMoveStart:xe,onMove:he,onMoveEnd:$e,onDelete:He,onBeforeDelete:ze,onError:Ke,onDragOver:tt,onDrop:Me,onDragEnter:Te,onDragLeave:Xe,nodesDraggable:je,nodesConnectable:_e,elementsSelectable:qe,multiSelectionKeyCode:kt,selectionOnDrag:an,selectionMode:Ct,connectionMode:cn,connectionRadius:ln,connectOnClick:un,isValidConnection:dn,defaultEdgeOptions:Xt,snapToGrid:ht,snapGrid:gt,deleteKeyCode:Et,panActivationKeyCode:Pn,panOnScroll:In,panOnScrollMode:nt,panOnScrollSpeed:cr,zoomOnScroll:Tn,zoomOnDoubleClick:Ln,zoomOnPinch:St,preventScrolling:zt,translateExtent:Bn,nodeExtent:$n,autoPanOnNodeDrag:jn,autoPanOnConnect:bt,autoPanSpeed:we,edgesReconnectable:Nt,elevateNodesOnSelect:Ne,elevateEdgesOnSelect:fe,noDragClassName:yt,noPanClassName:ee,onSelectionDragStart:Pe,onSelectionDrag:fn,onSelectionDragStop:Pt,edgeRouting:It=!0,onHudUpdate:Tt,onNodesProcessed:An,showHud:We=!0,showHint:Oe=!0,hintText:Lt="Drag to pan · Scroll to zoom",children:rt,...hn}){const[Je,gn]=a.useState({wx:0,wy:0,zoom:"1.00"}),yn=a.useRef(null),Ot=a.useRef(null),xn=a.useCallback(F=>{gn(F),Tt==null||Tt(F)},[Tt]),xt=a.useMemo(()=>({...Io,...r}),[r]),ot=a.useMemo(()=>({...To,...i}),[i]),Ve=a.useMemo(()=>$o(t),[t]),[J,st]=a.useState(()=>new Set),wt=a.useRef(J);wt.current=J;const Bt=a.useCallback(F=>{st(ve=>{const ne=new Set(ve);return ne.add(F),ne})},[]),$t=a.useCallback(F=>{st(ve=>{const ne=new Set(ve);return ne.delete(F),ne})},[]),jt=a.useCallback(F=>{st(ve=>{const ne=new Set(ve);return ne.has(F)?ne.delete(F):ne.add(F),ne})},[]),pt=a.useMemo(()=>Ve.filter(F=>F.type&&xt[F.type]),[Ve,xt]),At=a.useMemo(()=>n.filter(F=>F.type&&ot[F.type]),[n,ot]),[Dt,Ht]=a.useState(()=>new Set),_t=a.useRef(new Set),Ee=a.useMemo(()=>{const F=new Set(Dt);for(const ne of J)F.add(ne);for(const ne of pt)(ne.selected||ne.dragging)&&F.add(ne.id);const ve=_t.current;if(ve.size===F.size){let ne=!0;for(const Se of F)if(!ve.has(Se)){ne=!1;break}if(ne)return ve}return _t.current=F,F},[pt,J,Dt]),ut=a.useMemo(()=>{if(c===0)return[];const F=Ve.filter(ve=>Ee.has(ve.id));return F.sort((ve,ne)=>{const Se=ve.type==="group"||!ve.parentId&&F.some(y=>y.parentId===ve.id),u=ne.type==="group"||!ne.parentId&&F.some(y=>y.parentId===ne.id);return Se&&!u?-1:!Se&&u?1:0})},[Ve,Ee,c]),De=a.useMemo(()=>t.map(F=>Ee.has(F.id)?{...F,_customRendered:!0}:F),[t,Ee]),Dn=a.useMemo(()=>n.map(F=>F.type&&ot[F.type]?{...F,_customRendered:!0}:F),[n,ot]),{wrapRef:dt,canvasRef:Wt,canvasReady:it,onPointerDown:mt,onPointerMove:pn,onPointerUp:Be,store:ue}=Mr({cards:e,nodes:De,edges:Dn,dark:f,gridSize:m,zoomMin:C,zoomMax:z,initialCamera:A,fitView:B,fitViewOptions:D,onHudUpdate:xn,onNodesProcessed:An,onNodesChange:X,onEdgesChange:H,onConnect:Y,onConnectStart:j,onConnectEnd:P,onNodeClick:q,onNodeDoubleClick:O,onNodeMouseEnter:_,onNodeMouseMove:w,onNodeMouseLeave:g,onNodeContextMenu:v,onNodeDragStart:N,onNodeDrag:I,onNodeDragStop:$,onEdgeClick:V,onEdgeDoubleClick:se,onEdgeMouseEnter:te,onEdgeMouseMove:ce,onEdgeMouseLeave:pe,onEdgeContextMenu:me,onPaneClick:ye,onPaneContextMenu:le,onPaneMouseEnter:Ce,onPaneMouseMove:re,onPaneMouseLeave:de,onSelectionChange:Le,onInit:Ye,onMoveStart:xe,onMove:he,onMoveEnd:$e,onDelete:He,onBeforeDelete:ze,onError:Ke,nodesDraggable:je,nodesConnectable:_e,elementsSelectable:qe,multiSelectionKeyCode:kt,selectionOnDrag:an,selectionMode:Ct,connectionMode:cn,connectionRadius:ln,connectOnClick:un,isValidConnection:dn,defaultEdgeOptions:Xt,snapToGrid:ht,snapGrid:gt,deleteKeyCode:Et,panActivationKeyCode:Pn,panOnScroll:In,panOnScrollMode:nt,panOnScrollSpeed:cr,zoomOnScroll:Tn,zoomOnDoubleClick:Ln,zoomOnPinch:St,preventScrolling:zt,translateExtent:Bn,nodeExtent:$n,autoPanOnNodeDrag:jn,autoPanOnConnect:bt,autoPanSpeed:we,edgesReconnectable:Nt,elevateNodesOnSelect:Ne,elevateEdgesOnSelect:fe,noDragClassName:yt,noPanClassName:ee,onSelectionDragStart:Pe,onSelectionDrag:fn,onSelectionDragStop:Pt,edgeRouting:It}),Ut=a.useRef(pt);Ut.current=pt;const qt=a.useRef(c);qt.current=c,a.useEffect(()=>{let F;const ve=()=>{const Se=Ut.current,u=qt.current;if(u===0||!Se.length)return;const y=ue.cameraRef.current,l=ue.wrapRef.current;if(!l)return;const p=l.clientWidth,k=l.clientHeight,E=(-y.x+p/2)/y.zoom,x=(-y.y+k/2)/y.zoom,M=wt.current;let R=M.size;for(const L of Se)(L.selected||L.dragging)&&R++;const W=Math.max(0,u-R);if(W===0)Ht(L=>L.size===0?L:new Set);else{const L=new Set(M);for(const Z of Se)(Z.selected||Z.dragging)&&L.add(Z.id);const U=[];for(let Z=0;Z<Se.length;Z++){const ie=Se[Z];if(L.has(ie.id))continue;const K=ie._absolutePosition||ie.position,ae=K.x+(ie.width||160)/2-E,ke=K.y+(ie.height||60)/2-x;U.push({id:ie.id,dist:ae*ae+ke*ke})}U.sort((Z,ie)=>Z.dist-ie.dist);const G=new Set;for(let Z=0;Z<Math.min(W,U.length);Z++)G.add(U[Z].id);Ht(Z=>{if(Z.size!==G.size)return G;for(const ie of G)if(!Z.has(ie))return G;return Z})}},ne=setTimeout(ve,100);return F=setInterval(ve,500),()=>{clearTimeout(ne),clearInterval(F)}},[ue.cameraRef,ue.wrapRef]);const vt=a.useRef(new Set);a.useEffect(()=>{if(!o||!ue.workerRef.current)return;let F=!1;async function ve(Se){const u=new Blob([Se],{type:"image/svg+xml"}),y=URL.createObjectURL(u),l=new Image;return l.src=y,await l.decode(),URL.revokeObjectURL(y),createImageBitmap(l)}async function ne(){var p,k,E;const Se={},u=[],y={},l={};for(const[x,M]of Object.entries(o)){if(typeof M=="function"){y[x]=M;continue}if(typeof M=="object"&&M!==null&&!(M instanceof ImageBitmap)&&!(M instanceof HTMLImageElement)&&!(M instanceof HTMLCanvasElement)&&("fill"in M||"stroke"in M||"title"in M||"accent"in M)){l[x]=M;continue}try{let R;M instanceof ImageBitmap?R=M:typeof M=="string"?R=await ve(M):M instanceof HTMLImageElement?R=await createImageBitmap(M):M instanceof HTMLCanvasElement&&(R=await createImageBitmap(M)),R&&!F&&(Se[x]=R,u.push(R))}catch(R){console.warn(`[InfiniteCanvas] Failed to convert canvasNodeType "${x}":`,R)}}if(!F&&Object.keys(Se).length>0&&((p=ue.workerRef.current)==null||p.postMessage({type:"nodeTypeBitmaps",data:{bitmaps:Se}},u)),!F&&Object.keys(l).length>0&&((k=ue.workerRef.current)==null||k.postMessage({type:"nodeTypeConfigs",data:{configs:l}})),!F&&Object.keys(y).length>0){const x=new Map,M={},R={},W=[];let L=vt.current.size;for(const U of t){const G=y[U.type];if(G)try{const Z=G(U.data);if(!Z)continue;let ie=x.get(Z);if(!ie&&(ie="bmp_"+L++,x.set(Z,ie),!vt.current.has(Z))){const K=await ve(Z);if(F)return;M[ie]=K,W.push(K),vt.current.add(Z)}R[U.id]=ie}catch(Z){console.warn(`[InfiniteCanvas] canvasNodeType fn error for node "${U.id}":`,Z)}}F||(E=ue.workerRef.current)==null||E.postMessage({type:"nodeBitmaps",data:{cache:M,keys:R}},W)}}return ne(),()=>{F=!0}},[o,t,ue.workerRef]);const Ze=a.useContext(Rt),Zt=Ze&&typeof Ze.getState=="function";a.useEffect(()=>{Zt&&queueMicrotask(()=>{Ze.setState({nodes:Ve,edges:n,nodesRef:ue.nodesRef,edgesRef:ue.edgesRef,onNodesChangeRef:ue.onNodesChangeRef,onEdgesChangeRef:ue.onEdgesChangeRef,cameraRef:ue.cameraRef,wrapRef:ue.wrapRef,workerRef:ue.workerRef})})},[Zt,Ve,n,ue,Ze]);const Re=a.useMemo(()=>({...ue,edgeLabelContainerRef:yn,viewportPortalRef:Ot,pinNode:Bt,unpinNode:$t,togglePinNode:jt,get pinnedNodeIds(){return wt.current},get nodes(){return Ve},get edges(){return n},get viewport(){return ue.cameraRef.current},get minZoom(){return ue.zoomMin||.1},get maxZoom(){return ue.zoomMax||5},get domNode(){return ue.wrapRef.current},get width(){var F;return((F=ue.wrapRef.current)==null?void 0:F.clientWidth)||0},get height(){var F;return((F=ue.wrapRef.current)==null?void 0:F.clientHeight)||0}}),[ue,Ve,n,Bt,$t,jt]),at=a.useRef(null),ct=a.useRef(null),Gt=a.useRef(null),Qt=a.useRef(null),mn=a.useRef(null);a.useEffect(()=>{let F;const ve=()=>{const ne=ue.cameraRef.current,Se=`translate(${ne.x}px, ${ne.y}px) scale(${ne.zoom})`,u=`translate(${ne.x}, ${ne.y}) scale(${ne.zoom})`;at.current&&(at.current.style.transform=Se),ct.current&&ct.current.setAttribute("transform",u),Gt.current&&(Gt.current.style.transform=Se),Qt.current&&(Qt.current.style.transform=Se);const y=dt.current;if(y){const l=ne.zoom<.15?"lod-minimal":ne.zoom<.35?"lod-reduced":null;l!==mn.current&&(y.classList.remove("lod-minimal","lod-reduced"),l&&y.classList.add(l),mn.current=l)}F=requestAnimationFrame(ve)};return F=requestAnimationFrame(ve),()=>cancelAnimationFrame(F)},[ue]);const[Ft,Hn]=a.useState(null);a.useEffect(()=>{if(!ut.length)return;let F;const ve=()=>{var M,R;const ne=ue.cameraRef.current,Se=ue.wrapRef.current;if(!Se){F=requestAnimationFrame(ve);return}const u=Se.getBoundingClientRect(),y=200,l=-ne.x/ne.zoom-y,p=-ne.y/ne.zoom-y,k=(u.width-ne.x)/ne.zoom+y,E=(u.height-ne.y)/ne.zoom+y,x=new Set;for(const W of ut){const L=W._absolutePosition||W.position,U=W.width||((M=W.measured)==null?void 0:M.width)||200,G=W.height||((R=W.measured)==null?void 0:R.height)||100;L.x+U>=l&&L.x<=k&&L.y+G>=p&&L.y<=E&&x.add(W.id)}Hn(W=>{if(!W||W.size!==x.size)return x;for(const L of x)if(!W.has(L))return x;return W}),F=requestAnimationFrame(ve)};return F=requestAnimationFrame(ve),()=>cancelAnimationFrame(F)},[ut,ue]);const _n=a.useMemo(()=>Ft?ut.filter(F=>Ft.has(F.id)):ut,[ut,Ft]),Wn=ut.length>0,Fn=At.length>0;return T.jsx(Rt.Provider,{value:Re,children:T.jsxs("div",{ref:dt,className:`ric-wrap ${b}`,style:{width:d,height:h,...S},onPointerDown:mt,onPointerMove:pn,onPointerUp:Be,onDragOver:tt,onDrop:Me,onDragEnter:Te,onDragLeave:Xe,tabIndex:0,children:[T.jsx("canvas",{ref:Wt,className:"ric-canvas"}),!it&&T.jsx("div",{className:"ric-loader",children:T.jsx("div",{className:"ric-spinner"})}),Fn&&T.jsx("svg",{className:"ric-edges-overlay",style:{position:"absolute",top:0,left:0,width:"100%",height:"100%",pointerEvents:"none",overflow:"visible"},children:T.jsx("g",{ref:ct,children:At.map(F=>T.jsx(yo,{edge:F,edgeType:ot[F.type],nodes:t,reconnectable:Nt},F.id))})}),Wn&&T.jsx("div",{ref:at,className:"ric-nodes-overlay",style:{position:"absolute",top:0,left:0,width:0,height:0,transformOrigin:"0 0",pointerEvents:"none",zIndex:10},children:_n.map(F=>T.jsx(uo,{node:F,nodeType:xt[F.type]},F.id))}),T.jsx("div",{ref:F=>{yn.current=F,Gt.current=F},className:"ric-edge-labels",style:{position:"absolute",top:0,left:0,width:0,height:0,transformOrigin:"0 0",pointerEvents:"none",zIndex:5}}),T.jsx("div",{ref:F=>{Ot.current=F,Qt.current=F},className:"ric-viewport-portal",style:{position:"absolute",top:0,left:0,width:0,height:0,transformOrigin:"0 0",pointerEvents:"none",zIndex:6}}),Oe&&T.jsx("div",{className:"ric-hint",children:Lt}),We&&T.jsxs("div",{className:"ric-info",children:["world: (",Je.wx,", ",Je.wy,")   zoom: ",Je.zoom,"x",Je.nodeCount>0&&T.jsxs(T.Fragment,{children:["   nodes: ",Je.nodeCount]}),Je.edgeCount>0&&T.jsxs(T.Fragment,{children:["   edges: ",Je.edgeCount]})]}),T.jsx(Sr,{selectionKeyCode:kt||"Shift",selectionMode:Ct||"partial"}),rt]})})}function Ao({children:e}){const t=a.useRef(null);return t.current||(t.current=ao()),T.jsx(Rt.Provider,{value:t.current,children:e})}function jr(e,t){const n=[],r=new Map,i=[];for(const o of e)if(o.type==="add")i.push(o);else if(o.type==="remove"||o.type==="replace")r.set(o.id,[o]);else{const c=r.get(o.id);c?c.push(o):r.set(o.id,[o])}for(const o of t){const c=r.get(o.id);if(!c){n.push(o);continue}if(c[0].type==="remove")continue;if(c[0].type==="replace"){n.push({...c[0].item});continue}const f={...o};for(const m of c)Do(m,f);n.push(f)}for(const o of i)o.index!==void 0?n.splice(o.index,0,{...o.item}):n.push({...o.item});return n}function Do(e,t){switch(e.type){case"select":t.selected=e.selected;break;case"position":e.position!==void 0&&(t.position=e.position),e.dragging!==void 0&&(t.dragging=e.dragging);break;case"dimensions":e.dimensions!==void 0&&(t.measured={...e.dimensions},(e.setAttributes===!0||e.setAttributes==="width")&&(t.width=e.dimensions.width),(e.setAttributes===!0||e.setAttributes==="height")&&(t.height=e.dimensions.height)),e.handleBounds!==void 0&&(t.handleBounds=e.handleBounds);break}}function Ar(e,t){return jr(e,t)}function Dr(e,t){return jr(e,t)}function Ho(e,t){return!e.source||!e.target?(console.warn("addEdge: source and target are required"),t):t.some(r=>r.source===e.source&&r.target===e.target&&(r.sourceHandle||null)===(e.sourceHandle||null)&&(r.targetHandle||null)===(e.targetHandle||null))?t:[...t,{id:e.id||`e-${e.source}-${e.target}`,...e}]}function _o(e){const[t,n]=a.useState(e),r=a.useCallback(i=>n(o=>Ar(i,o)),[]);return[t,n,r]}function Wo(e){const[t,n]=a.useState(e),r=a.useCallback(i=>n(o=>Dr(i,o)),[]);return[t,n,r]}function Hr(){const e=Rr(),t=a.useCallback(()=>typeof e.getState=="function"?e.getState():e,[e]),n=a.useCallback(()=>[...t().nodesRef.current],[t]),r=a.useCallback(()=>[...t().edgesRef.current],[t]),i=a.useCallback(w=>t().nodesRef.current.find(g=>g.id===w),[t]),o=a.useCallback(w=>t().edgesRef.current.find(g=>g.id===w),[t]),c=a.useCallback(w=>{var g,v,N,I;if(typeof w=="function"){const $=w(t().nodesRef.current);(v=(g=t().onNodesChangeRef).current)==null||v.call(g,[...t().nodesRef.current.map(V=>({id:V.id,type:"remove"})),...$.map(V=>({type:"add",item:V}))])}else(I=(N=t().onNodesChangeRef).current)==null||I.call(N,[...t().nodesRef.current.map($=>({id:$.id,type:"remove"})),...w.map($=>({type:"add",item:$}))])},[t]),f=a.useCallback(w=>{var g,v,N,I;if(typeof w=="function"){const $=w(t().edgesRef.current);(v=(g=t().onEdgesChangeRef).current)==null||v.call(g,[...t().edgesRef.current.map(V=>({id:V.id,type:"remove"})),...$.map(V=>({type:"add",item:V}))])}else(I=(N=t().onEdgesChangeRef).current)==null||I.call(N,[...t().edgesRef.current.map($=>({id:$.id,type:"remove"})),...w.map($=>({type:"add",item:$}))])},[t]),m=a.useCallback(w=>{var v,N;const g=Array.isArray(w)?w:[w];(N=(v=t().onNodesChangeRef).current)==null||N.call(v,g.map(I=>({type:"add",item:I})))},[t]),d=a.useCallback(w=>{var v,N;const g=Array.isArray(w)?w:[w];(N=(v=t().onEdgesChangeRef).current)==null||N.call(v,g.map(I=>({type:"add",item:I})))},[t]),h=a.useCallback(({nodes:w=[],edges:g=[]})=>{if(w.length&&t().onNodesChangeRef.current){t().onNodesChangeRef.current(w.map(N=>({id:N.id,type:"remove"})));const v=br(w,t().edgesRef.current);v.length&&t().onEdgesChangeRef.current&&t().onEdgesChangeRef.current(v.map(N=>({id:N.id,type:"remove"})))}g.length&&t().onEdgesChangeRef.current&&t().onEdgesChangeRef.current(g.map(v=>({id:v.id,type:"remove"})))},[t]),b=a.useCallback(()=>{const w=t().cameraRef.current;return{x:w.x,y:w.y,zoom:w.zoom}},[t]),S=a.useRef(null),C=a.useCallback((w,g)=>{if(S.current&&cancelAnimationFrame(S.current),!g||g<=0){t().cameraRef.current={...w},t().sendCamera();return}const v={...t().cameraRef.current},N=performance.now(),I=$=>{const V=$-N,se=Math.min(V/g,1),te=1-Math.pow(1-se,3);t().cameraRef.current={x:v.x+(w.x-v.x)*te,y:v.y+(w.y-v.y)*te,zoom:v.zoom+(w.zoom-v.zoom)*te},t().sendCamera(),se<1&&(S.current=requestAnimationFrame(I))};S.current=requestAnimationFrame(I)},[t]),z=a.useCallback((w,g)=>{const v={x:w.x??t().cameraRef.current.x,y:w.y??t().cameraRef.current.y,zoom:w.zoom??t().cameraRef.current.zoom};C(v,g==null?void 0:g.duration)},[t,C]),A=a.useCallback(()=>t().cameraRef.current.zoom,[t]),B=a.useCallback(w=>{const g=t().cameraRef.current,v=t().wrapRef.current;if(!v)return;const N=v.getBoundingClientRect(),I=N.width/2,$=N.height/2,V=1.2,se={x:I-(I-g.x)*V,y:$-($-g.y)*V,zoom:Math.min(t().zoomMax,g.zoom*V)};C(se,w==null?void 0:w.duration)},[t,C]),D=a.useCallback(w=>{const g=t().cameraRef.current,v=t().wrapRef.current;if(!v)return;const N=v.getBoundingClientRect(),I=N.width/2,$=N.height/2,V=1/1.2,se={x:I-(I-g.x)*V,y:$-($-g.y)*V,zoom:Math.max(t().zoomMin,g.zoom*V)};C(se,w==null?void 0:w.duration)},[t,C]),X=a.useCallback((w,g)=>{const v=t().cameraRef.current,N=t().wrapRef.current;if(!N)return;const I=N.getBoundingClientRect(),$=I.width/2,V=I.height/2,se=Math.min(t().zoomMax,Math.max(t().zoomMin,w)),te=se/v.zoom,ce={x:$-($-v.x)*te,y:V-(V-v.y)*te,zoom:se};C(ce,g==null?void 0:g.duration)},[t,C]),H=a.useCallback((w={})=>{const g=t().nodesRef.current;if(!g.length)return;const v=t().wrapRef.current;if(!v)return;const N=v.getBoundingClientRect(),I=w.padding??.1,$=w.nodes?g.filter(te=>w.nodes.some(ce=>ce.id===te.id)):g;if(!$.length)return;const V=Mn($),se=Yt(V,N.width,N.height,I);w.maxZoom&&(se.zoom=Math.min(se.zoom,w.maxZoom)),w.minZoom&&(se.zoom=Math.max(se.zoom,w.minZoom)),C(se,w.duration)},[t,C]),Y=a.useCallback((w,g={})=>{const v=t().wrapRef.current;if(!v)return;const N=v.getBoundingClientRect(),I=g.padding??.1,$=Yt(w,N.width,N.height,I);g.maxZoom&&($.zoom=Math.min($.zoom,g.maxZoom)),g.minZoom&&($.zoom=Math.max($.zoom,g.minZoom)),C($,g.duration)},[t,C]),j=a.useCallback((w,g,v={})=>{const N=t().wrapRef.current;if(!N)return;const I=N.getBoundingClientRect(),$=v.zoom??t().cameraRef.current.zoom,V={x:I.width/2-w*$,y:I.height/2-g*$,zoom:$};C(V,v.duration)},[t,C]),P=a.useCallback(()=>({nodes:[...t().nodesRef.current],edges:[...t().edgesRef.current],viewport:{...t().cameraRef.current}}),[t]),q=a.useCallback(w=>t().screenToWorld(w.x,w.y),[t]),O=a.useCallback(w=>{const g=t().cameraRef.current,v=t().wrapRef.current;if(!v)return{x:0,y:0};const N=v.getBoundingClientRect();return{x:w.x*g.zoom+g.x+N.left,y:w.y*g.zoom+g.y+N.top}},[t]),_=a.useCallback((w,g)=>{var I,$;const v=t().nodesRef.current.find(V=>V.id===w);if(!v)return;const N=typeof g=="function"?g(v.data):{...v.data,...g};($=(I=t().onNodesChangeRef).current)==null||$.call(I,[{id:w,type:"replace",item:{...v,data:N}}])},[t]);return{getNodes:n,getEdges:r,getNode:i,getEdge:o,setNodes:c,setEdges:f,addNodes:m,addEdges:d,deleteElements:h,getViewport:b,setViewport:z,getZoom:A,zoomIn:B,zoomOut:D,zoomTo:X,fitView:H,fitBounds:Y,setCenter:j,screenToFlowPosition:q,flowToScreenPosition:O,updateNodeData:_,toObject:P}}function Fo(){return Ie().nodes}function Yo(){return Ie().edges}function Xo(){return Ie().viewport}function Oo(){return Ie().connection}function Uo(e){const t=Ie(),n=Array.isArray(e)?e:[e];return a.useMemo(()=>n.map(r=>{const i=t.nodes.find(o=>o.id===r);return i?{id:i.id,type:i.type,data:i.data}:null}).filter(Boolean),[t.nodes,...n])}function qo(e){const t=Ie();return a.useMemo(()=>t.edges.filter(n=>n.source===e||n.target===e),[t.edges,e])}function Zo({nodeId:e,type:t,handleId:n}){const r=Ie();return a.useMemo(()=>r.edges.filter(i=>t==="source"?i.source===e&&(n?i.sourceHandle===n:!0):i.target===e&&(n?i.targetHandle===n:!0)),[r.edges,e,t,n])}function Go({onChange:e,onStart:t,onEnd:n}){const r=Ie(),i=a.useRef(e),o=a.useRef(t),c=a.useRef(n);a.useEffect(()=>{i.current=e},[e]),a.useEffect(()=>{o.current=t},[t]),a.useEffect(()=>{c.current=n},[n]),a.useEffect(()=>{const f=m=>{var d;(d=i.current)==null||d.call(i,{x:m.x,y:m.y,zoom:m.zoom})};return r.viewportListeners.add(f),()=>r.viewportListeners.delete(f)},[s])}function Qo({onChange:e}){const t=Ie(),n=a.useRef(e);a.useEffect(()=>{n.current=e},[e]),a.useEffect(()=>{const r=i=>{var o;(o=n.current)==null||o.call(n,i)};return t.selectionListeners.add(r),()=>t.selectionListeners.delete(r)},[s])}function Jo(e){const[t,n]=a.useState(!1),r=Array.isArray(e)?e:[e];return a.useEffect(()=>{const i=c=>{r.includes(c.key)&&n(!0)},o=c=>{r.includes(c.key)&&n(!1)};return window.addEventListener("keydown",i),window.addEventListener("keyup",o),()=>{window.removeEventListener("keydown",i),window.removeEventListener("keyup",o)}},[r.join(",")]),t}function Vo(){const e=Ie();return a.useCallback(t=>{var n;(n=e.workerRef.current)==null||n.postMessage({type:"nodes",data:{nodes:[...s().nodesRef.current]}})},[s])}const Ko=e=>{var t;return((t=e.nodes)==null?void 0:t.length)>0};function es(e={}){return Ie(Ko)}function ts(e){const t=Ie();return a.useMemo(()=>t.nodes.find(n=>n.id===e)||void 0,[t.nodes,e])}function ns(e,t){return Ie(e,t)}function rs(){return Rr()}function os({maxHistorySize:e=100}={}){const t=Ie(),n=a.useRef([]),r=a.useRef([]),[,i]=a.useState(0),o=a.useRef(null),c=a.useCallback(()=>{const d={nodes:s().nodesRef.current.map(h=>({...h,data:{...h.data}})),edges:s().edgesRef.current.map(h=>({...h}))};o.current&&JSON.stringify(o.current.nodes.map(h=>h.id))===JSON.stringify(d.nodes.map(h=>h.id))&&JSON.stringify(o.current.edges.map(h=>h.id))===JSON.stringify(d.edges.map(h=>h.id))||(n.current.push(d),n.current.length>e&&n.current.shift(),r.current=[],o.current=d,i(h=>h+1))},[t,e]),f=a.useCallback(()=>{var h,b,S,C;const d=n.current.pop();d&&(r.current.push({nodes:s().nodesRef.current.map(z=>({...z,data:{...z.data}})),edges:s().edgesRef.current.map(z=>({...z}))}),(b=(h=s().onNodesChangeRef).current)==null||b.call(h,[...s().nodesRef.current.map(z=>({id:z.id,type:"remove"})),...d.nodes.map(z=>({type:"add",item:z}))]),(C=(S=s().onEdgesChangeRef).current)==null||C.call(S,[...s().edgesRef.current.map(z=>({id:z.id,type:"remove"})),...d.edges.map(z=>({type:"add",item:z}))]),o.current=d,i(z=>z+1))},[s]),m=a.useCallback(()=>{var h,b,S,C;const d=r.current.pop();d&&(n.current.push({nodes:s().nodesRef.current.map(z=>({...z,data:{...z.data}})),edges:s().edgesRef.current.map(z=>({...z}))}),(b=(h=s().onNodesChangeRef).current)==null||b.call(h,[...s().nodesRef.current.map(z=>({id:z.id,type:"remove"})),...d.nodes.map(z=>({type:"add",item:z}))]),(C=(S=s().onEdgesChangeRef).current)==null||C.call(S,[...s().edgesRef.current.map(z=>({id:z.id,type:"remove"})),...d.edges.map(z=>({type:"add",item:z}))]),o.current=d,i(z=>z+1))},[s]);return{undo:f,redo:m,takeSnapshot:c,canUndo:n.current.length>0,canRedo:r.current.length>0}}function ss(e){const t=a.useRef(e);return a.useEffect(()=>{t.current=e},[e]),a.useCallback(n=>r=>{const i=t.current(r);i!==!1&&i!=null&&n(Array.isArray(i)?i:r)},[])}function is(e){const t=a.useRef(e);return a.useEffect(()=>{t.current=e},[e]),a.useCallback(n=>r=>{const i=t.current(r);i!==!1&&i!=null&&n(Array.isArray(i)?i:r)},[])}const Un=160,qn=60;function as({width:e=200,height:t=150,nodeColor:n="#3b82f6",nodeStrokeColor:r="#fff",maskColor:i="rgba(0,0,0,0.1)",style:o={},className:c=""}){const f=Ie(),m=a.useRef(null),d=a.useRef(null),h=a.useCallback(()=>{const b=m.current;if(!b)return;const S=b.getContext("2d"),C=window.devicePixelRatio||1;b.width=e*C,b.height=t*C,S.scale(C,C),S.clearRect(0,0,e,t);const z=f.nodesRef.current;if(!z.length)return;let A=1/0,B=1/0,D=-1/0,X=-1/0;for(const g of z){const v=g.width||Un,N=g.height||qn;g.position.x<A&&(A=g.position.x),g.position.y<B&&(B=g.position.y),g.position.x+v>D&&(D=g.position.x+v),g.position.y+N>X&&(X=g.position.y+N)}const H=40;A-=H,B-=H,D+=H,X+=H;const Y=D-A,j=X-B,P=Math.min(e/Y,t/j),q=(e-Y*P)/2,O=(t-j*P)/2;for(const g of z){if(g.hidden)continue;const v=g.width||Un,N=g.height||qn,I=(g.position.x-A)*P+q,$=(g.position.y-B)*P+O,V=v*P,se=N*P;S.fillStyle=g.selected?"#f59e0b":typeof n=="function"?n(g):n,S.fillRect(I,$,Math.max(V,2),Math.max(se,2))}const _=f.cameraRef.current,w=f.wrapRef.current;if(w){const g=w.getBoundingClientRect(),v=-_.x/_.zoom,N=-_.y/_.zoom,I=g.width/_.zoom,$=g.height/_.zoom;S.fillStyle=i,S.fillRect(0,0,e,t);const V=(v-A)*P+q,se=(N-B)*P+O,te=I*P,ce=$*P;S.clearRect(V,se,te,ce);for(const pe of z){if(pe.hidden)continue;const me=pe.width||Un,ye=pe.height||qn,le=(pe.position.x-A)*P+q,Ce=(pe.position.y-B)*P+O;S.fillStyle=pe.selected?"#f59e0b":typeof n=="function"?n(pe):n,S.fillRect(le,Ce,Math.max(me*P,2),Math.max(ye*P,2))}S.strokeStyle="#3b82f6",S.lineWidth=1.5,S.strokeRect(V,se,te,ce)}},[f,e,t,n,r,i]);return a.useEffect(()=>{let b=!0;function S(){b&&(h(),d.current=requestAnimationFrame(S))}const C=setInterval(()=>{cancelAnimationFrame(d.current),d.current=requestAnimationFrame(S)},66);return h(),()=>{b=!1,clearInterval(C),cancelAnimationFrame(d.current)}},[h]),T.jsx("canvas",{ref:m,className:`ric-minimap ${c}`,style:{position:"absolute",bottom:30,right:10,width:e,height:t,borderRadius:4,border:"1px solid rgba(0,0,0,0.1)",background:"rgba(255,255,255,0.9)",pointerEvents:"none",...o}})}function cs(){return T.jsxs("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",width:"16",height:"16",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:[T.jsx("line",{x1:"12",y1:"5",x2:"12",y2:"19"}),T.jsx("line",{x1:"5",y1:"12",x2:"19",y2:"12"})]})}function ls(){return T.jsx("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",width:"16",height:"16",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:T.jsx("line",{x1:"5",y1:"12",x2:"19",y2:"12"})})}function us(){return T.jsx("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",width:"16",height:"16",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:T.jsx("path",{d:"M15 3h6v6M9 21H3v-6M21 3l-7 7M3 21l7-7"})})}function ds(){return T.jsxs("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",width:"16",height:"16",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:[T.jsx("rect",{x:"3",y:"11",width:"18",height:"11",rx:"2"}),T.jsx("path",{d:"M7 11V7a5 5 0 0 1 10 0v4"})]})}function fs(){return T.jsxs("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",width:"16",height:"16",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:[T.jsx("rect",{x:"3",y:"11",width:"18",height:"11",rx:"2"}),T.jsx("path",{d:"M7 11V7a5 5 0 0 1 9.9-1"})]})}function nn({children:e,className:t="",...n}){return T.jsx("button",{className:`ric-controls-button ${t}`,style:gs,...n,children:e})}function hs({showZoom:e=!0,showFitView:t=!0,showInteractive:n=!1,fitViewOptions:r,onZoomIn:i,onZoomOut:o,onFitView:c,onInteractiveChange:f,position:m="bottom-left",orientation:d="vertical",style:h={},className:b="","aria-label":S="Canvas controls",children:C}){const z=Ie(),{zoomIn:A,zoomOut:B,fitView:D,getZoom:X}=Hr(),[H,Y]=a.useState(!0),j=X()<=z.zoomMin,P=X()>=z.zoomMax,q=a.useCallback(()=>{A(),i==null||i()},[A,i]),O=a.useCallback(()=>{B(),o==null||o()},[B,o]),_=a.useCallback(()=>{D(r||{padding:.1}),c==null||c()},[D,r,c]),w=a.useCallback(()=>{const v=!H;Y(v),f==null||f(v)},[H,f]),g={"top-left":{top:10,left:10},"top-right":{top:10,right:10},"top-center":{top:10,left:"50%",transform:"translateX(-50%)"},"bottom-left":{bottom:30,left:10},"bottom-right":{bottom:30,right:10},"bottom-center":{bottom:30,left:"50%",transform:"translateX(-50%)"}}[m]||{bottom:30,left:10};return T.jsxs("div",{className:`ric-controls ${b}`,style:{position:"absolute",display:"flex",flexDirection:d==="horizontal"?"row":"column",gap:2,zIndex:5,...g,...h},role:"toolbar","aria-label":S,children:[e&&T.jsxs(T.Fragment,{children:[T.jsx(nn,{onClick:q,disabled:P,title:"Zoom in","aria-label":"Zoom in",className:"ric-controls-zoomin",children:T.jsx(cs,{})}),T.jsx(nn,{onClick:O,disabled:j,title:"Zoom out","aria-label":"Zoom out",className:"ric-controls-zoomout",children:T.jsx(ls,{})})]}),t&&T.jsx(nn,{onClick:_,title:"Fit view","aria-label":"Fit view",className:"ric-controls-fitview",children:T.jsx(us,{})}),n&&T.jsx(nn,{onClick:w,title:H?"Lock interactivity":"Unlock interactivity","aria-label":H?"Lock interactivity":"Unlock interactivity",className:"ric-controls-interactive",children:H?T.jsx(fs,{}):T.jsx(ds,{})}),C]})}const gs={width:28,height:28,display:"flex",alignItems:"center",justifyContent:"center",border:"1px solid rgba(0,0,0,0.12)",borderRadius:4,background:"#fff",cursor:"pointer",fontSize:16,lineHeight:1,color:"#333",padding:0},ys=a.memo(hs);function xs({variant:e="lines",gap:t=40,size:n=1,color:r,style:i={},className:o=""}){const c=Ie();return c.workerRef.current&&c.workerRef.current.postMessage({type:"background",data:{variant:e,gap:t,size:n,color:r}}),null}function ps({position:e="top-left",style:t={},className:n="",children:r}){const i={"top-left":{top:10,left:10},"top-right":{top:10,right:10},"top-center":{top:10,left:"50%",transform:"translateX(-50%)"},"bottom-left":{bottom:10,left:10},"bottom-right":{bottom:10,right:10},"bottom-center":{bottom:10,left:"50%",transform:"translateX(-50%)"}}[e]||{top:10,left:10};return T.jsx("div",{className:`ric-panel ${n}`,style:{position:"absolute",zIndex:5,pointerEvents:"all",...i,...t},onPointerDown:o=>o.stopPropagation(),children:r})}function ms({minWidth:e=10,minHeight:t=10,maxWidth:n=1/0,maxHeight:r=1/0,isVisible:i=!0,handleStyle:o={},lineStyle:c={},color:f="#3b82f6",onResizeStart:m,onResize:d,onResizeEnd:h}){const b=a.useContext(on),S=Ie(),C=a.useRef(null),z=a.useCallback((D,X)=>{D.stopPropagation(),D.preventDefault();const H=S.nodesRef.current.find(P=>P.id===b);if(!H)return;C.current={direction:X,startX:D.clientX,startY:D.clientY,width:H.width||160,height:H.height||60},m==null||m(D,{width:C.current.width,height:C.current.height});const Y=P=>{var N,I;if(!C.current)return;const q=C.current,O=S.cameraRef.current,_=(P.clientX-q.startX)/O.zoom,w=(P.clientY-q.startY)/O.zoom;let g=q.width,v=q.height;q.direction.includes("e")&&(g=Math.min(n,Math.max(e,q.width+_))),q.direction.includes("w")&&(g=Math.min(n,Math.max(e,q.width-_))),q.direction.includes("s")&&(v=Math.min(r,Math.max(t,q.height+w))),q.direction.includes("n")&&(v=Math.min(r,Math.max(t,q.height-w))),(I=(N=S.onNodesChangeRef).current)==null||I.call(N,[{id:b,type:"dimensions",dimensions:{width:g,height:v},setAttributes:!0}]),d==null||d(P,{width:g,height:v})},j=P=>{C.current=null,h==null||h(P,{}),window.removeEventListener("pointermove",Y),window.removeEventListener("pointerup",j)};window.addEventListener("pointermove",Y),window.addEventListener("pointerup",j)},[b,S,e,t,n,r,m,d,h]);if(!i)return null;const A=8,B={position:"absolute",width:A,height:A,background:f,border:"1px solid #fff",borderRadius:2,zIndex:20,...o};return T.jsxs(T.Fragment,{children:[T.jsx("div",{style:{...B,bottom:-A/2,right:-A/2,cursor:"nwse-resize"},onPointerDown:D=>z(D,"se")}),T.jsx("div",{style:{...B,bottom:-A/2,left:-A/2,cursor:"nesw-resize"},onPointerDown:D=>z(D,"sw")}),T.jsx("div",{style:{...B,top:-A/2,right:-A/2,cursor:"nesw-resize"},onPointerDown:D=>z(D,"ne")}),T.jsx("div",{style:{...B,top:-A/2,left:-A/2,cursor:"nwse-resize"},onPointerDown:D=>z(D,"nw")}),T.jsx("div",{style:{...B,top:"50%",right:-A/2,cursor:"ew-resize",transform:"translateY(-50%)"},onPointerDown:D=>z(D,"e")}),T.jsx("div",{style:{...B,top:"50%",left:-A/2,cursor:"ew-resize",transform:"translateY(-50%)"},onPointerDown:D=>z(D,"w")}),T.jsx("div",{style:{...B,left:"50%",top:-A/2,cursor:"ns-resize",transform:"translateX(-50%)"},onPointerDown:D=>z(D,"n")}),T.jsx("div",{style:{...B,left:"50%",bottom:-A/2,cursor:"ns-resize",transform:"translateX(-50%)"},onPointerDown:D=>z(D,"s")})]})}function vs({isVisible:e,position:t="top",offset:n=10,align:r="center",children:i,style:o={},className:c=""}){const f=a.useContext(on),d=Ie().nodes.find(S=>S.id===f);if(!(e!==void 0?e:d==null?void 0:d.selected))return null;const b={top:{bottom:"100%",left:r==="start"?0:r==="end"?void 0:"50%",right:r==="end"?0:void 0,transform:r==="center"?"translateX(-50%)":void 0,marginBottom:n},bottom:{top:"100%",left:r==="start"?0:r==="end"?void 0:"50%",right:r==="end"?0:void 0,transform:r==="center"?"translateX(-50%)":void 0,marginTop:n},left:{right:"100%",top:r==="start"?0:r==="end"?void 0:"50%",bottom:r==="end"?0:void 0,transform:r==="center"?"translateY(-50%)":void 0,marginRight:n},right:{left:"100%",top:r==="start"?0:r==="end"?void 0:"50%",bottom:r==="end"?0:void 0,transform:r==="center"?"translateY(-50%)":void 0,marginLeft:n}}[t]||{};return T.jsx("div",{className:`ric-node-toolbar ${c}`,style:{position:"absolute",zIndex:1e3,pointerEvents:"all",...b,...o},onPointerDown:S=>S.stopPropagation(),children:i})}function bs({isVisible:e=!1,x:t=0,y:n=0,alignX:r="center",alignY:i="center",children:o,style:c={},className:f=""}){if(!e)return null;const m=r==="center"?"-50%":r==="right"?"-100%":"0",d=i==="center"?"-50%":i==="bottom"?"-100%":"0";return T.jsx("div",{className:`ric-edge-toolbar ${f}`,style:{position:"absolute",left:t,top:n,transform:`translate(${m}, ${d})`,zIndex:1e3,pointerEvents:"all",...c},children:o})}function ws({children:e}){var r;const n=(r=Ie().edgeLabelContainerRef)==null?void 0:r.current;return n?pr.createPortal(e,n):null}function Ms({children:e}){var r;const n=(r=Ie().viewportPortalRef)==null?void 0:r.current;return n?pr.createPortal(e,n):null}function _r({fromX:e,fromY:t,toX:n,toY:r,fromPosition:i="right",toPosition:o="left",connectionLineType:c="default",connectionLineStyle:f,connectionLineComponent:m}){if(m)return T.jsx(m,{fromX:e,fromY:t,toX:n,toY:r,fromPosition:i,toPosition:o});let d;switch(c){case"straight":[d]=tr({sourceX:e,sourceY:t,targetX:n,targetY:r});break;case"step":[d]=Rn({sourceX:e,sourceY:t,targetX:n,targetY:r,sourcePosition:i,targetPosition:o,borderRadius:0});break;case"smoothstep":[d]=Rn({sourceX:e,sourceY:t,targetX:n,targetY:r,sourcePosition:i,targetPosition:o});break;case"simplebezier":[d]=rr({sourceX:e,sourceY:t,targetX:n,targetY:r});break;default:[d]=nr({sourceX:e,sourceY:t,targetX:n,targetY:r,sourcePosition:i,targetPosition:o});break}return T.jsx("path",{d,fill:"none",className:"ric-connection-line",stroke:"#b1b1b7",strokeWidth:1.5,style:f})}_r.displayName="ConnectionLine";const Rs=a.memo(_r),ks=Object.freeze({Top:"top",Bottom:"bottom",Left:"left",Right:"right"}),Cs=Object.freeze({Arrow:"arrow",ArrowClosed:"arrowclosed"});function Es(e){const t=e.width||e.measured&&e.measured.width||0,n=e.height||e.measured&&e.measured.height||0,r=e._absolutePosition||e.position||{x:0,y:0};return{x:r.x,y:r.y,x2:r.x+t,y2:r.y+n}}exports.Background=xs;exports.BaseEdge=sn;exports.BezierEdge=er;exports.ConnectionLine=Rs;exports.ControlButton=nn;exports.Controls=ys;exports.DefaultNode=vo;exports.EdgeLabelRenderer=ws;exports.EdgeText=Lr;exports.EdgeToolbar=bs;exports.GroupNode=Ir;exports.Handle=rn;exports.InfiniteCanvas=jo;exports.InfiniteCanvasProvider=Ao;exports.InputNode=Nr;exports.MarkerType=Cs;exports.MiniMap=as;exports.NodeResizer=ms;exports.NodeToolbar=vs;exports.OutputNode=Pr;exports.Panel=ps;exports.Position=ks;exports.SelectionBox=Sr;exports.SimpleBezierEdge=ar;exports.SmoothStepEdge=ir;exports.StepEdge=$r;exports.StraightEdge=sr;exports.ViewportPortal=Ms;exports.addEdge=Ho;exports.applyEdgeChanges=Dr;exports.applyNodeChanges=Ar;exports.boxToRect=Qr;exports.buildObstacles=or;exports.clampPosition=Gn;exports.computeRoutedEdges=No;exports.getBezierEdgeCenter=bo;exports.getBezierPath=nr;exports.getBoundsOfBoxes=Jr;exports.getConnectedEdges=br;exports.getEdgeCenter=wo;exports.getIncomers=Ur;exports.getNodeDimensions=Kn;exports.getNodesBounds=Mn;exports.getNodesInside=Zr;exports.getOutgoers=qr;exports.getOverlappingArea=Vr;exports.getRoutedLabelPosition=Nn;exports.getSimpleBezierPath=rr;exports.getSmoothStepPath=Rn;exports.getStraightPath=tr;exports.getViewportForBounds=Yt;exports.isEdge=Or;exports.isNode=Xr;exports.nodeToBox=Es;exports.nodeToRect=Kr;exports.reconnectEdge=Mo;exports.rectToBox=Gr;exports.routeSinglePath=Po;exports.routedPointsToPath=zn;exports.snapPosition=Zn;exports.useConnection=Oo;exports.useEdges=Yo;exports.useEdgesState=Wo;exports.useHandleConnections=Zo;exports.useInfiniteCanvas=Mr;exports.useInternalNode=ts;exports.useKeyPress=Jo;exports.useNodeConnections=qo;exports.useNodeId=co;exports.useNodes=Fo;exports.useNodesData=Uo;exports.useNodesInitialized=es;exports.useNodesState=_o;exports.useOnEdgesChangeMiddleware=is;exports.useOnNodesChangeMiddleware=ss;exports.useOnSelectionChange=Qo;exports.useOnViewportChange=Go;exports.useReactFlow=Hr;exports.useStore=ns;exports.useStoreApi=rs;exports.useUndoRedo=os;exports.useUpdateNodeInternals=Vo;exports.useViewport=Xo;
946
+ `,lr=typeof self<"u"&&self.Blob&&new Blob(["URL.revokeObjectURL(import.meta.url);",wr],{type:"text/javascript;charset=utf-8"});function eo(e){let t;try{if(t=lr&&(self.URL||self.webkitURL).createObjectURL(lr),!t)throw"";const n=new Worker(t,{type:"module",name:e==null?void 0:e.name});return n.addEventListener("error",()=>{(self.URL||self.webkitURL).revokeObjectURL(t)}),n}catch{return new Worker("data:text/javascript;charset=utf-8,"+encodeURIComponent(wr),{type:"module",name:e==null?void 0:e.name})}}const Xn=new WeakMap;function to(e,t){if(Xn.has(e))return Xn.get(e);const n=e.transferControlToOffscreen(),r=new eo;r.onerror=o=>console.error("[infinite-canvas] worker error:",o.message,o),r.postMessage({type:"init",data:{...t,canvas:n}},[n]);const i={worker:r};return Xn.set(e,i),i}const ft=160,nt=60,no=10;function Mr({cards:e=[],nodes:t=[],edges:n=[],onHudUpdate:r,onNodesProcessed:i,onNodesChange:o,onEdgesChange:c,onConnect:f,onNodeClick:m,onNodeDragStart:d,onNodeDrag:h,onNodeDragStop:b,onEdgeClick:k,onEdgeDoubleClick:S,onEdgeMouseEnter:P,onEdgeMouseMove:F,onEdgeMouseLeave:j,onEdgeContextMenu:A,onNodeDoubleClick:X,onNodeMouseEnter:B,onNodeMouseMove:_,onNodeMouseLeave:$,onNodeContextMenu:N,onPaneClick:O,onPaneContextMenu:U,onPaneMouseEnter:Y,onPaneMouseMove:w,onPaneMouseLeave:g,onSelectionChange:v,onConnectStart:L,onConnectEnd:E,onInit:D,onMoveStart:K,onMove:ae,onMoveEnd:ee,onDelete:oe,onBeforeDelete:ye,onError:we,isValidConnection:Me,dark:le,gridSize:Se=40,zoomMin:se=.1,zoomMax:fe=4,initialCamera:be={x:0,y:0,zoom:1},fitView:We=!1,fitViewOptions:xe,nodesDraggable:ue=!0,nodesConnectable:Te=!0,elementsSelectable:He=!0,multiSelectionKeyCode:Fe="Shift",selectionOnDrag:rt=!1,selectionMode:ht="partial",connectionMode:$e="loose",connectionRadius:Le=20,connectOnClick:ze=!1,snapToGrid:Qe=!1,snapGrid:Je=[15,15],deleteKeyCode:Ae=["Delete","Backspace"],panActivationKeyCode:ot=" ",panOnScroll:zt=!1,panOnScrollMode:De="free",panOnScrollSpeed:et=.5,zoomOnScroll:tt=!0,zoomOnDoubleClick:un=!0,zoomOnPinch:dn=!0,preventScrolling:qt=!0,translateExtent:pt,nodeExtent:mt,defaultEdgeOptions:Pt={},autoPanOnNodeDrag:Nn=!0,autoPanOnConnect:In=!0,autoPanSpeed:st=5,edgesReconnectable:cr=!1,elevateNodesOnSelect:Tn=!1,elevateEdgesOnSelect:Ln=!1,noDragClassName:Nt="nodrag",noPanClassName:It="nopan",onSelectionDragStart:Bn,onSelectionDrag:$n,onSelectionDragStop:jn,edgeRouting:kt=!0}={}){const ve=a.useRef(null),Tt=a.useRef(null),Pe=a.useRef(null),he=a.useRef({...be}),vt=a.useRef([...e]),te=a.useRef([...t]),Ne=a.useRef([...n]),fn=a.useRef(new Map),Lt=a.useRef(!1),Bt=a.useRef(null),[$t,An]=a.useState(!1),Ye=a.useRef(null),Oe=a.useRef(null),jt=a.useRef(null),it=a.useRef(null),hn=a.useRef(!1),Ve=a.useRef(null),[gn,yn]=a.useState({x:be.x,y:be.y,zoom:be.zoom}),[Zt,xn]=a.useState(null),bt=a.useMemo(()=>new Set,[]),at=a.useMemo(()=>new Set,[]),Ke=a.useRef(!1),J=a.useRef({});J.current={onHudUpdate:r,onNodesProcessed:i,onNodesChange:o,onEdgesChange:c,onConnect:f,onNodeClick:m,onNodeDragStart:d,onNodeDrag:h,onNodeDragStop:b,onEdgeClick:k,onEdgeDoubleClick:S,onEdgeMouseEnter:P,onEdgeMouseMove:F,onEdgeMouseLeave:j,onEdgeContextMenu:A,onNodeDoubleClick:X,onNodeMouseEnter:B,onNodeMouseMove:_,onNodeMouseLeave:$,onNodeContextMenu:N,onPaneClick:O,onPaneContextMenu:U,onPaneMouseEnter:Y,onPaneMouseMove:w,onPaneMouseLeave:g,onSelectionChange:v,onConnectStart:L,onConnectEnd:E,onInit:D,onMoveStart:K,onMove:ae,onMoveEnd:ee,onDelete:oe,onBeforeDelete:ye,onError:we,onSelectionDragStart:Bn,onSelectionDrag:$n,onSelectionDragStop:jn,isValidConnection:Me};const ct={get current(){return J.current.onConnect}},Ct={get current(){return J.current.onNodeClick}},At={get current(){return J.current.onNodeDragStart}},Dt={get current(){return J.current.onNodeDrag}},Ht={get current(){return J.current.onNodeDragStop}},wt={get current(){return J.current.onEdgeClick}},_t={get current(){return J.current.onPaneClick}},Wt={get current(){return J.current.onSelectionChange}},Ft={get current(){return J.current.onHudUpdate}},Yt={get current(){return J.current.onNodesProcessed}};a.useEffect(()=>{const u=l=>{l.key===Fe&&(hn.current=!0),l.key===ot&&(Ke.current=!0)},y=l=>{l.key===Fe&&(hn.current=!1),l.key===ot&&(Ke.current=!1)};return window.addEventListener("keydown",u),window.addEventListener("keyup",y),()=>{window.removeEventListener("keydown",u),window.removeEventListener("keyup",y)}},[Fe,ot]);const Ce={get current(){return J.current.onNodesChange?gt:null}},gt=u=>{var l,p,C;(p=(l=J.current).onNodesChange)==null||p.call(l,u);const y=[];for(let z=0;z<u.length;z++)u[z].type==="select"&&y.push({id:u[z].id,selected:u[z].selected});y.length>0&&((C=Pe.current)==null||C.postMessage({type:"nodeSelections",data:{selections:y}}))},_e={get current(){return J.current.onEdgesChange?Dn:null}},Dn=u=>{var l,p,C;(p=(l=J.current).onEdgesChange)==null||p.call(l,u);const y=[];for(let z=0;z<u.length;z++)u[z].type==="select"&&y.push({id:u[z].id,selected:u[z].selected});y.length>0&&((C=Pe.current)==null||C.postMessage({type:"edgeSelections",data:{selections:y}}))},yt=a.useCallback(()=>{var p;const u=te.current.filter(C=>C.selected),y=Ne.current.filter(C=>C.selected),l={nodes:u,edges:y};(p=Wt.current)==null||p.call(Wt,l);for(const C of at)C(l)},[at]);a.useEffect(()=>{var u;vt.current=[...e],(u=Pe.current)==null||u.postMessage({type:"cards",data:{cards:[...e]}})},[e]);const Xt=a.useCallback(u=>{const y={};for(const l of u)y[l.id]=l;return u.map(l=>{if(!l.parentId)return l;const p=y[l.parentId];if(!p)return l;let C=l.position.x,z=l.position.y,x=p;for(;x;)C+=x.position.x,z+=x.position.y,x=x.parentId?y[x.parentId]:null;return{...l,_absolutePosition:{x:C,y:z}}})},[]),lt=a.useRef([]),Mt=a.useCallback(u=>{const y=fn.current;if(!y||y.size===0)return u;const l={};for(const[,p]of y)l[p.nodeId]||(l[p.nodeId]=[]),l[p.nodeId].push({id:p.id,type:p.type,position:p.position,x:p.x,y:p.y});return u.map(p=>{const C=l[p.id];return C&&C.length>0?{...p,handles:C}:p})},[]),pn=a.useCallback(()=>{var y;if(Ye.current)return;const u=Mt(lt.current);(y=Pe.current)==null||y.postMessage({type:"nodes",data:{nodes:u}})},[Mt]);a.useEffect(()=>{var l,p;if(Ye.current){const C=Ye.current.id,z=new Set([C,...Ye.current.selectedStarts.map(R=>R.id)]),x={};for(const R of te.current)z.has(R.id)&&(x[R.id]={...R.position});te.current=[...t];for(const R of te.current)x[R.id]&&(R.position=x[R.id]);lt.current=Xt(te.current);const M=Mt(lt.current);(l=Pe.current)==null||l.postMessage({type:"nodes",data:{nodes:M}});return}te.current=[...t];const u=Xt(t);lt.current=u;const y=Mt(u);(p=Pe.current)==null||p.postMessage({type:"nodes",data:{nodes:y}})},[t,Xt,Mt]),a.useEffect(()=>{var u;Ne.current=[...n],(u=Pe.current)==null||u.postMessage({type:"edges",data:{edges:[...n]}})},[n]);const Be=a.useCallback((u,y)=>{const l=ve.current;if(!l)return{x:0,y:0};const p=l.getBoundingClientRect(),C=he.current;return{x:(u-p.left-C.x)/C.zoom,y:(y-p.top-C.y)/C.zoom}},[]),de=a.useCallback((u,y)=>{const l=lt.current.length>0?lt.current:te.current;let p=null;for(let C=l.length-1;C>=0;C--){const z=l[C];if(z.hidden||z._customRendered)continue;const x=z._absolutePosition||z.position,M=z.width||ft,R=z.height||nt;if(u>=x.x&&u<=x.x+M&&y>=x.y&&y<=x.y+R){if(z.type==="group"){p||(p=z);continue}return z}}return p},[]),Gt=a.useCallback((u,y)=>{const l=y.width||ft,p=y.height||nt;if(u.x!==void 0&&u.y!==void 0)return{x:y.position.x+u.x,y:y.position.y+u.y};switch(u.position||(u.type==="source"?"right":"left")){case"top":return{x:y.position.x+l/2,y:y.position.y};case"bottom":return{x:y.position.x+l/2,y:y.position.y+p};case"left":return{x:y.position.x,y:y.position.y+p/2};case"right":return{x:y.position.x+l,y:y.position.y+p/2};default:return{x:y.position.x+l,y:y.position.y+p/2}}},[]),Qt=a.useCallback(u=>{const y=u.width||ft,l=u.height||nt;if(u.handles&&u.handles.length>0)return u.handles.map(R=>{const H=Gt(R,u);return{id:R.id||null,type:R.type,x:H.x,y:H.y}});const p=u.targetPosition||"left",C=u.sourcePosition||"right",z=R=>{switch(R){case"top":return{x:u.position.x+y/2,y:u.position.y};case"bottom":return{x:u.position.x+y/2,y:u.position.y+l};case"left":return{x:u.position.x,y:u.position.y+l/2};case"right":return{x:u.position.x+y,y:u.position.y+l/2};default:return{x:u.position.x+y,y:u.position.y+l/2}}},x=z(p),M=z(C);return[{id:null,type:"target",x:x.x,y:x.y},{id:null,type:"source",x:M.x,y:M.y}]},[Gt]),Rt=a.useCallback((u,y)=>{const l=te.current,p=he.current,C=Math.max(no,Le)/p.zoom;for(let z=l.length-1;z>=0;z--){const x=l[z];if(x.hidden)continue;const M=Qt(x);for(const R of M)if(Math.abs(u-R.x)<C&&Math.abs(y-R.y)<C)return{nodeId:x.id,handleId:R.id,type:R.type,x:R.x,y:R.y}}return null},[Qt]),qe=a.useCallback((u,y)=>{const p=8/he.current.zoom,C=te.current,z={};for(let x=0;x<C.length;x++)z[C[x].id]=C[x];for(let x=Ne.current.length-1;x>=0;x--){const M=Ne.current[x],R=z[M.source],H=z[M.target];if(!R||!H)continue;const T=R.width||ft,q=R.height||nt,G=H.height||nt,Z=R.position.x+T,ie=R.position.y+q/2,V=H.position.x,ce=H.position.y+G/2;if(ro(u,y,Z,ie,V,ce)<p)return M}return null},[]);a.useEffect(()=>{const u=Tt.current,y=ve.current;if(!u||!y)return;const l=y.getBoundingClientRect(),p=le!==void 0?le:matchMedia("(prefers-color-scheme: dark)").matches,C=Xt(te.current);lt.current=C;const z=Mt(C),{worker:x}=to(u,{width:l.width,height:l.height,camera:he.current,cards:vt.current,nodes:z,edges:Ne.current,dark:p,gridSize:Se,edgeRouting:kt});x.onmessage=T=>{var q,G,Z,ie;T.data.type==="hud"&&((q=Ft.current)==null||q.call(Ft,T.data.data)),T.data.type==="ready"&&An(!0),T.data.type==="nodesProcessed"&&((G=Yt.current)==null||G.call(Yt,T.data.data)),T.data.type==="error"&&((ie=(Z=J.current).onError)==null||ie.call(Z,"worker-error",T.data.message||"Canvas worker error"))},x.onerror=T=>{var q,G;(G=(q=J.current).onError)==null||G.call(q,"worker-error",T.message||"Canvas worker crashed")},Pe.current=x;const M=new ResizeObserver(T=>{const{width:q,height:G}=T[0].contentRect;x.postMessage({type:"resize",data:{width:q,height:G}})});M.observe(y);let R,H;return le===void 0&&(R=matchMedia("(prefers-color-scheme: dark)"),H=T=>x.postMessage({type:"theme",data:{dark:T.matches}}),R.addEventListener("change",H)),()=>{M.disconnect(),R&&H&&R.removeEventListener("change",H),Pe.current=null}},[]),a.useEffect(()=>{var u;le!==void 0&&((u=Pe.current)==null||u.postMessage({type:"theme",data:{dark:le}}))},[le]),a.useEffect(()=>{var u;(u=Pe.current)==null||u.postMessage({type:"edgeRouting",data:{enabled:kt}})},[kt]);const Jt=a.useRef(0),Re=a.useCallback((u=null)=>{var p,C,z;const y=he.current;if(pt){const x=ve.current;if(x){const M=x.getBoundingClientRect(),R=-pt[1][0]*y.zoom+M.width,H=-pt[1][1]*y.zoom+M.height,T=-pt[0][0]*y.zoom,q=-pt[0][1]*y.zoom;y.x=Math.min(T,Math.max(R,y.x)),y.y=Math.min(q,Math.max(H,y.y))}}(p=Pe.current)==null||p.postMessage({type:"camera",data:{camera:{...y}}});const l={x:y.x,y:y.y,zoom:y.zoom};(z=(C=J.current).onMove)==null||z.call(C,u,l);for(const x of bt)x(l);cancelAnimationFrame(Jt.current),Jt.current=requestAnimationFrame(()=>{yn({x:y.x,y:y.y,zoom:y.zoom})})},[bt,pt]),ut=a.useCallback(()=>{var l,p;const u=Oe.current,y=jt.current;u&&y?((l=Pe.current)==null||l.postMessage({type:"connecting",data:{from:u.startPos,to:y,_routedPoints:null}}),xn({source:u.sourceId,sourceHandle:u.sourceHandle,target:null,targetHandle:null})):((p=Pe.current)==null||p.postMessage({type:"connecting",data:null}),xn(null))},[]),dt=a.useCallback(()=>{var y,l;const u=it.current;u?(y=Pe.current)==null||y.postMessage({type:"selectionBox",data:u}):(l=Pe.current)==null||l.postMessage({type:"selectionBox",data:null})},[]),Vt=a.useCallback(u=>{var x,M,R,H,T,q,G,Z,ie,V,ce,ke,je,Xe,Ze,Ue,en,xt;const y=te.current.length>0,l=Be(u.clientX,u.clientY),p=hn.current;if(y&&Te&&!p){const Q=Rt(l.x,l.y);if(ze&&Ve.current&&Q){const re=Ve.current;if(Q.nodeId!==re.nodeId){const Ge=re.handleType==="target"?{source:Q.nodeId,target:re.nodeId,sourceHandle:Q.handleId||null,targetHandle:re.handleId}:{source:re.nodeId,target:Q.nodeId,sourceHandle:re.handleId,targetHandle:Q.handleId||null};(J.current.isValidConnection?J.current.isValidConnection(Ge):!0)&&((x=ct.current)==null||x.call(ct,{...Ge,...Pt}))}Ve.current=null;return}if($e==="strict"?Q&&Q.type==="source":Q!=null){if(ze){Ve.current={nodeId:Q.nodeId,handleId:Q.handleId||null,handleType:Q.type},(R=(M=J.current).onConnectStart)==null||R.call(M,u,{nodeId:Q.nodeId,handleId:Q.handleId,handleType:Q.type});return}Oe.current={sourceId:Q.nodeId,sourceHandle:Q.handleId||null,sourceType:Q.type,startPos:{x:Q.x,y:Q.y}},jt.current={x:l.x,y:l.y},(H=ve.current)==null||H.setPointerCapture(u.pointerId),(q=(T=J.current).onConnectStart)==null||q.call(T,u,{nodeId:Q.nodeId,handleId:Q.handleId,handleType:Q.type}),ut();return}}const C=Q=>{var re;let me=Q;for(;me&&me!==ve.current;){if((re=me.classList)!=null&&re.contains(Nt))return!0;me=me.parentElement}return!1},z=Q=>{var re;let me=Q;for(;me&&me!==ve.current;){if((re=me.classList)!=null&&re.contains(It))return!0;me=me.parentElement}return!1};if(y){const Q=de(l.x,l.y);if(Q){if(Ce.current&&He){const me=[];if(p)me.push({id:Q.id,type:"select",selected:!Q.selected});else if(!Q.selected){for(const re of te.current)re.id===Q.id?me.push({id:re.id,type:"select",selected:!0}):re.selected&&me.push({id:re.id,type:"select",selected:!1});if(_e.current){const re=Ne.current.filter(ge=>ge.selected).map(ge=>({id:ge.id,type:"select",selected:!1}));re.length&&_e.current(re)}}if(me.length){if(Ce.current(me),Tn&&!p){const re=te.current.findIndex(ge=>ge.id===Q.id);re>=0&&re<te.current.length-1&&Ce.current([{id:Q.id,type:"remove"},{type:"add",item:{...te.current[re],selected:!0}}])}yt()}}if((G=Ct.current)==null||G.call(Ct,u,Q),ue&&!C(u.target)){const me=Q.selected;let re=null;if(Q.parentId&&Q.extent==="parent"){const ge=te.current.find(Ge=>Ge.id===Q.parentId);if(ge){const Ge=ge.width||ft,tn=ge.height||nt,vn=Q.width||((Z=Q.measured)==null?void 0:Z.width)||ft,nn=Q.height||((ie=Q.measured)==null?void 0:ie.height)||nt;re={minX:0,minY:0,maxX:Ge-vn,maxY:tn-nn}}}if(Ye.current={id:Q.id,startPos:{...Q.position},startMouse:{x:l.x,y:l.y},parentClamp:re,parentId:Q.parentId||null,selectedStarts:me?te.current.filter(ge=>ge.selected&&ge.id!==Q.id).map(ge=>{var tn,vn;let Ge=null;if(ge.parentId&&ge.extent==="parent"){const nn=te.current.find(Yn=>Yn.id===ge.parentId);if(nn){const Yn=nn.width||ft,Wr=nn.height||nt,Fr=ge.width||((tn=ge.measured)==null?void 0:tn.width)||ft,Yr=ge.height||((vn=ge.measured)==null?void 0:vn.height)||nt;Ge={minX:0,minY:0,maxX:Yn-Fr,maxY:Wr-Yr}}}return{id:ge.id,startPos:{...ge.position},parentClamp:Ge,parentId:ge.parentId||null}}):[]},(V=ve.current)==null||V.setPointerCapture(u.pointerId),(ce=At.current)==null||ce.call(At,u,Q),Ye.current.selectedStarts.length>0){const ge=te.current.filter(Ge=>Ge.selected);(je=(ke=J.current).onSelectionDragStart)==null||je.call(ke,u,ge)}if(Ce.current){const ge=[{id:Q.id,type:"position",dragging:!0}];for(const Ge of Ye.current.selectedStarts)ge.push({id:Ge.id,type:"position",dragging:!0});Ce.current(ge)}}return}}if(Ne.current.length>0&&He){const Q=qe(l.x,l.y);if(Q){if(_e.current){const me=[];if(p)me.push({id:Q.id,type:"select",selected:!Q.selected});else{for(const re of Ne.current)re.id===Q.id?me.push({id:re.id,type:"select",selected:!0}):re.selected&&me.push({id:re.id,type:"select",selected:!1});if(Ce.current){const re=te.current.filter(ge=>ge.selected).map(ge=>({id:ge.id,type:"select",selected:!1}));re.length&&Ce.current(re)}}if(me.length){if(_e.current(me),Ln&&!p){const re=Ne.current.findIndex(ge=>ge.id===Q.id);re>=0&&re<Ne.current.length-1&&_e.current([{id:Q.id,type:"remove"},{type:"add",item:{...Ne.current[re],selected:!0}}])}yt()}}(Xe=wt.current)==null||Xe.call(wt,u,Q);return}}if(!p){const Q=te.current.filter(re=>re.selected).map(re=>({id:re.id,type:"select",selected:!1})),me=Ne.current.filter(re=>re.selected).map(re=>({id:re.id,type:"select",selected:!1}));Q.length&&Ce.current&&Ce.current(Q),me.length&&_e.current&&_e.current(me),(Q.length||me.length)&&yt()}if((Ze=_t.current)==null||Ze.call(_t,u),rt||p){it.current={startWorld:{...l},endWorld:{...l}},(Ue=ve.current)==null||Ue.setPointerCapture(u.pointerId),dt();return}z(u.target)||(Lt.current=!0,Bt.current={x:u.clientX,y:u.clientY},(en=ve.current)==null||en.classList.add("dragging"),(xt=ve.current)==null||xt.setPointerCapture(u.pointerId))},[Be,de,Rt,qe,ue,Te,He,rt,ut,dt,yt,Nt,It]),Kt=a.useCallback(u=>{var l,p,C,z;if(Oe.current){if(jt.current=Be(u.clientX,u.clientY),ut(),In){const x=ve.current;if(x){const M=x.getBoundingClientRect(),R=40,H=u.clientX-M.left,T=u.clientY-M.top;let q=0,G=0;H<R?q=st:H>M.width-R&&(q=-st),T<R?G=st:T>M.height-R&&(G=-st),(q||G)&&(he.current.x+=q,he.current.y+=G,Re(u))}}return}if(it.current){it.current.endWorld=Be(u.clientX,u.clientY),dt();const x=it.current,M=Math.min(x.startWorld.x,x.endWorld.x),R=Math.min(x.startWorld.y,x.endWorld.y),H=Math.max(x.startWorld.x,x.endWorld.x),T=Math.max(x.startWorld.y,x.endWorld.y);if(Ce.current){const q=[];for(const G of te.current){if(G.hidden)continue;const Z=G.width||ft,ie=G.height||nt,V=ht==="full"?G.position.x>=M&&G.position.x+Z<=H&&G.position.y>=R&&G.position.y+ie<=T:G.position.x+Z>M&&G.position.x<H&&G.position.y+ie>R&&G.position.y<T;V!==!!G.selected&&q.push({id:G.id,type:"select",selected:V})}q.length&&Ce.current(q)}return}if(Ye.current){const x=Be(u.clientX,u.clientY),M=Ye.current,R=x.x-M.startMouse.x,H=x.y-M.startMouse.y;let T={x:M.startPos.x+R,y:M.startPos.y+H};if(Qe&&(T=Zn(T,Je)),mt&&(T=Gn(T,mt)),M.parentClamp){const V=M.parentClamp;T={x:Math.max(V.minX,Math.min(T.x,V.maxX)),y:Math.max(V.minY,Math.min(T.y,V.maxY))}}const q=[{id:M.id,position:T}];for(const V of M.selectedStarts){let ce={x:V.startPos.x+R,y:V.startPos.y+H};if(Qe&&(ce=Zn(ce,Je)),mt&&(ce=Gn(ce,mt)),V.parentClamp){const ke=V.parentClamp;ce={x:Math.max(ke.minX,Math.min(ce.x,ke.maxX)),y:Math.max(ke.minY,Math.min(ce.y,ke.maxY))}}q.push({id:V.id,position:ce})}const G=[];for(const V of q){const ce=te.current.find(ke=>ke.id===V.id);if(ce){ce.position=V.position,ce.dragging=!0;let ke=V.position;if(ce.parentId){let je=te.current.find(Ue=>Ue.id===ce.parentId),Xe=V.position.x,Ze=V.position.y;for(;je;)Xe+=je.position.x,Ze+=je.position.y,je=je.parentId?te.current.find(Ue=>Ue.id===je.parentId):null;ke={x:Xe,y:Ze}}G.push({id:V.id,position:V.position,_absolutePosition:ke,width:ce.width,height:ce.height,dragging:!0,selected:ce.selected})}}const Z=new Set(q.map(V=>V.id));for(const V of te.current)if(V.parentId&&Z.has(V.parentId)&&!Z.has(V.id)){let ce=te.current.find(Xe=>Xe.id===V.parentId),ke=V.position.x,je=V.position.y;for(;ce;)ke+=ce.position.x,je+=ce.position.y,ce=ce.parentId?te.current.find(Xe=>Xe.id===ce.parentId):null;G.push({id:V.id,position:V.position,_absolutePosition:{x:ke,y:je},width:V.width,height:V.height,dragging:!1,selected:V.selected})}if((l=Pe.current)==null||l.postMessage({type:"nodePositions",data:{updates:G}}),Nn){const V=ve.current;if(V){const ce=V.getBoundingClientRect(),ke=40,je=u.clientX-ce.left,Xe=u.clientY-ce.top;let Ze=0,Ue=0;je<ke?Ze=st:je>ce.width-ke&&(Ze=-st),Xe<ke?Ue=st:Xe>ce.height-ke&&(Ue=-st),(Ze||Ue)&&(he.current.x+=Ze,he.current.y+=Ue,Re(u))}}const ie=te.current.find(V=>V.id===M.id);if(ie&&((p=Dt.current)==null||p.call(Dt,u,ie)),M.selectedStarts.length>0){const V=te.current.filter(ce=>ce.selected);(z=(C=J.current).onSelectionDrag)==null||z.call(C,u,V)}return}if(!Lt.current)return;const y=he.current;y.x+=u.clientX-Bt.current.x,y.y+=u.clientY-Bt.current.y,Bt.current={x:u.clientX,y:u.clientY},Re()},[Re,Be,ut,dt]),mn=a.useCallback(u=>{var y,l,p,C,z,x,M,R;if(Oe.current){const H=Be(u.clientX,u.clientY),T=Rt(H.x,H.y);if(T&&T.nodeId!==Oe.current.sourceId&&($e==="loose"||T.type==="target")){const Z=Oe.current.sourceType==="target"?{source:T.nodeId,target:Oe.current.sourceId,sourceHandle:T.handleId||null,targetHandle:Oe.current.sourceHandle}:{source:Oe.current.sourceId,target:T.nodeId,sourceHandle:Oe.current.sourceHandle,targetHandle:T.handleId||null};(J.current.isValidConnection?J.current.isValidConnection(Z):!0)&&((y=ct.current)==null||y.call(ct,{...Z,...Pt}))}(p=(l=J.current).onConnectEnd)==null||p.call(l,u.nativeEvent||u),Oe.current=null,jt.current=null,ut();return}if(it.current){it.current=null,dt(),yt();return}if(Ye.current){const H=Ye.current,T=te.current.find(Z=>Z.id===H.id),q=[{id:H.id,position:T?{...T.position}:H.startPos,_absolutePosition:T?{...T.position}:H.startPos,dragging:!1}];for(const Z of H.selectedStarts){const ie=te.current.find(V=>V.id===Z.id);q.push({id:Z.id,position:ie?{...ie.position}:Z.startPos,_absolutePosition:ie?{...ie.position}:Z.startPos,dragging:!1})}if((C=Pe.current)==null||C.postMessage({type:"nodePositions",data:{updates:q}}),Ce.current){const Z=q.map(ie=>({id:ie.id,type:"position",position:ie.position,dragging:!1}));Ce.current(Z)}if(H.selectedStarts.length>0){const Z=te.current.filter(ie=>ie.selected);(x=(z=J.current).onSelectionDragStop)==null||x.call(z,u,Z)}requestAnimationFrame(()=>{Ye.current=null});const G=te.current.find(Z=>Z.id===H.id);G&&((M=Ht.current)==null||M.call(Ht,u,G));return}Lt.current=!1,(R=ve.current)==null||R.classList.remove("dragging")},[Be,Rt,ut,dt,yt]);a.useEffect(()=>{const u=ve.current;if(!u)return;const y=l=>{qt&&l.preventDefault();const p=he.current;if(zt||Ke.current){const R=et;De==="horizontal"?p.x-=l.deltaY*R:(De==="vertical"||(p.x-=l.deltaX*R),p.y-=l.deltaY*R),Re(l);return}if(!tt)return;const C=l.deltaY>0?.92:1.08,z=u.getBoundingClientRect(),x=l.clientX-z.left,M=l.clientY-z.top;p.x=x-(x-p.x)*C,p.y=M-(M-p.y)*C,p.zoom=Math.min(fe,Math.max(se,p.zoom*C)),Re(l)};return u.addEventListener("wheel",y,{passive:!qt}),()=>u.removeEventListener("wheel",y)},[Re,se,fe,zt,De,et,tt,qt]),a.useEffect(()=>{if(!dn)return;const u=ve.current;if(!u)return;let y=0,l=null;const p=x=>{if(x.touches.length===2){const M=x.touches[0].clientX-x.touches[1].clientX,R=x.touches[0].clientY-x.touches[1].clientY;y=Math.hypot(M,R);const H=u.getBoundingClientRect();l={x:(x.touches[0].clientX+x.touches[1].clientX)/2-H.left,y:(x.touches[0].clientY+x.touches[1].clientY)/2-H.top},x.preventDefault()}},C=x=>{if(x.touches.length===2&&y>0){x.preventDefault();const M=x.touches[0].clientX-x.touches[1].clientX,R=x.touches[0].clientY-x.touches[1].clientY,H=Math.hypot(M,R),T=H/y;y=H;const q=he.current,G=l.x,Z=l.y;q.x=G-(G-q.x)*T,q.y=Z-(Z-q.y)*T,q.zoom=Math.min(fe,Math.max(se,q.zoom*T)),Re(x)}},z=()=>{y=0,l=null};return u.addEventListener("touchstart",p,{passive:!1}),u.addEventListener("touchmove",C,{passive:!1}),u.addEventListener("touchend",z),()=>{u.removeEventListener("touchstart",p),u.removeEventListener("touchmove",C),u.removeEventListener("touchend",z)}},[dn,Re,se,fe]),a.useEffect(()=>{if(!un)return;const u=ve.current;if(!u)return;const y=l=>{var T,q,G,Z;const p=Be(l.clientX,l.clientY);if(de(p.x,p.y)){(q=(T=J.current).onNodeDoubleClick)==null||q.call(T,l,de(p.x,p.y));return}const C=qe(p.x,p.y);if(C){(Z=(G=J.current).onEdgeDoubleClick)==null||Z.call(G,l,C);return}const z=1.5,x=u.getBoundingClientRect(),M=l.clientX-x.left,R=l.clientY-x.top,H=he.current;H.x=M-(M-H.x)*z,H.y=R-(R-H.y)*z,H.zoom=Math.min(fe,Math.max(se,H.zoom*z)),Re(l)};return u.addEventListener("dblclick",y),()=>u.removeEventListener("dblclick",y)},[un,Re,se,fe,Be,de,qe]),a.useEffect(()=>{const u=ve.current;if(!u)return;const y=l=>{var x,M,R,H,T,q;const p=Be(l.clientX,l.clientY),C=de(p.x,p.y);if(C){(M=(x=J.current).onNodeContextMenu)==null||M.call(x,l,C);return}const z=qe(p.x,p.y);if(z){(H=(R=J.current).onEdgeContextMenu)==null||H.call(R,l,z);return}(q=(T=J.current).onPaneContextMenu)==null||q.call(T,l)};return u.addEventListener("contextmenu",y),()=>u.removeEventListener("contextmenu",y)},[Be,de,qe]),a.useEffect(()=>{const u=ve.current;if(!u)return;let y=null,l=null;const p=x=>{var H,T,q,G,Z,ie,V,ce,ke,je,Xe,Ze,Ue,en;if((T=(H=J.current).onPaneMouseMove)==null||T.call(H,x),Lt.current||Ye.current||Oe.current||it.current)return;const M=Be(x.clientX,x.clientY),R=de(M.x,M.y);if(R!==y&&(y&&((G=(q=J.current).onNodeMouseLeave)==null||G.call(q,x,y)),R&&((ie=(Z=J.current).onNodeMouseEnter)==null||ie.call(Z,x,R)),y=R),R&&((ce=(V=J.current).onNodeMouseMove)==null||ce.call(V,x,R)),!R){const xt=qe(M.x,M.y);xt!==l&&(l&&((je=(ke=J.current).onEdgeMouseLeave)==null||je.call(ke,x,l)),xt&&((Ze=(Xe=J.current).onEdgeMouseEnter)==null||Ze.call(Xe,x,xt)),l=xt),xt&&((en=(Ue=J.current).onEdgeMouseMove)==null||en.call(Ue,x,xt))}},C=x=>{var M,R;return(R=(M=J.current).onPaneMouseEnter)==null?void 0:R.call(M,x)},z=x=>{var M,R,H,T,q,G;(R=(M=J.current).onPaneMouseLeave)==null||R.call(M,x),y&&((T=(H=J.current).onNodeMouseLeave)==null||T.call(H,x,y),y=null),l&&((G=(q=J.current).onEdgeMouseLeave)==null||G.call(q,x,l),l=null)};return u.addEventListener("mousemove",p),u.addEventListener("mouseenter",C),u.addEventListener("mouseleave",z),()=>{u.removeEventListener("mousemove",p),u.removeEventListener("mouseenter",C),u.removeEventListener("mouseleave",z)}},[Be,de,qe]),a.useEffect(()=>{const u=Array.isArray(Ae)?Ae:[Ae],y=async l=>{var p,C,z,x;if(u.includes(l.key)){if(l.target.tagName==="INPUT"||l.target.tagName==="TEXTAREA"||l.target.isContentEditable)return;const M=te.current.filter(T=>T.selected),R=Ne.current.filter(T=>T.selected);if(!M.length&&!R.length)return;if(J.current.onBeforeDelete)try{if(!await J.current.onBeforeDelete({nodes:M,edges:R}))return}catch(T){(C=(p=J.current).onError)==null||C.call(p,"before-delete-error",T.message||"onBeforeDelete threw an error");return}const H=new Set(M.map(T=>T.id));if(M.length&&Ce.current&&(Ce.current(M.map(T=>({id:T.id,type:"remove"}))),_e.current)){const T=Ne.current.filter(q=>H.has(q.source)||H.has(q.target));T.length&&_e.current(T.map(q=>({id:q.id,type:"remove"})))}R.length&&_e.current&&_e.current(R.map(T=>({id:T.id,type:"remove"}))),(x=(z=J.current).onDelete)==null||x.call(z,{nodes:M,edges:R})}if((l.ctrlKey||l.metaKey)&&l.key==="a"){if(l.target.tagName==="INPUT"||l.target.tagName==="TEXTAREA")return;if(l.preventDefault(),Ce.current){const M=te.current.filter(R=>!R.selected).map(R=>({id:R.id,type:"select",selected:!0}));M.length&&Ce.current(M)}if(_e.current){const M=Ne.current.filter(R=>!R.selected).map(R=>({id:R.id,type:"select",selected:!0}));M.length&&_e.current(M)}}};return window.addEventListener("keydown",y),()=>window.removeEventListener("keydown",y)},[Ae]);const Ot=a.useRef(!1);a.useEffect(()=>{var u,y;if(!Ot.current&&Pe.current){if(Ot.current=!0,We&&te.current.length>0){const l=ve.current;if(l){const p=l.getBoundingClientRect(),C=(xe==null?void 0:xe.padding)??.1,z=Mn(te.current),x=Ut(z,p.width,p.height,C);xe!=null&&xe.maxZoom&&(x.zoom=Math.min(x.zoom,xe.maxZoom)),xe!=null&&xe.minZoom&&(x.zoom=Math.max(x.zoom,xe.minZoom)),he.current=x,Re()}}(y=(u=J.current).onInit)==null||y.call(u,{getNodes:()=>[...te.current],getEdges:()=>[...Ne.current],getNode:l=>te.current.find(p=>p.id===l),getEdge:l=>Ne.current.find(p=>p.id===l),getViewport:()=>({...he.current}),getZoom:()=>he.current.zoom,setViewport:l=>{he.current={x:l.x??he.current.x,y:l.y??he.current.y,zoom:l.zoom??he.current.zoom},Re()},fitView:(l={})=>{const p=ve.current;if(!p||!te.current.length)return;const C=p.getBoundingClientRect(),z=l.nodes?te.current.filter(R=>l.nodes.some(H=>H.id===R.id)):te.current;if(!z.length)return;const x=Mn(z),M=Ut(x,C.width,C.height,l.padding??.1);l.maxZoom&&(M.zoom=Math.min(M.zoom,l.maxZoom)),l.minZoom&&(M.zoom=Math.max(M.zoom,l.minZoom)),he.current=M,Re()},screenToFlowPosition:l=>Be(l.x,l.y),flowToScreenPosition:l=>{const p=he.current,C=ve.current;if(!C)return{x:0,y:0};const z=C.getBoundingClientRect();return{x:l.x*p.zoom+p.x+z.left,y:l.y*p.zoom+p.y+z.top}},zoomIn:()=>{const l=he.current;l.zoom=Math.min(fe,l.zoom*1.2),Re()},zoomOut:()=>{const l=he.current;l.zoom=Math.max(se,l.zoom/1.2),Re()},zoomTo:l=>{he.current.zoom=Math.min(fe,Math.max(se,l)),Re()},setNodes:l=>{var p,C;(C=(p=J.current).onNodesChange)==null||C.call(p,[...te.current.map(z=>({id:z.id,type:"remove"})),...(typeof l=="function"?l(te.current):l).map(z=>({type:"add",item:z}))])},setEdges:l=>{var p,C;(C=(p=J.current).onEdgesChange)==null||C.call(p,[...Ne.current.map(z=>({id:z.id,type:"remove"})),...(typeof l=="function"?l(Ne.current):l).map(z=>({type:"add",item:z}))])},addNodes:l=>{var C,z;const p=Array.isArray(l)?l:[l];(z=(C=J.current).onNodesChange)==null||z.call(C,p.map(x=>({type:"add",item:x})))},addEdges:l=>{var C,z;const p=Array.isArray(l)?l:[l];(z=(C=J.current).onEdgesChange)==null||z.call(C,p.map(x=>({type:"add",item:x})))},deleteElements:({nodes:l=[],edges:p=[]})=>{var C,z,x,M;l.length&&((z=(C=J.current).onNodesChange)==null||z.call(C,l.map(R=>({id:R.id,type:"remove"})))),p.length&&((M=(x=J.current).onEdgesChange)==null||M.call(x,p.map(R=>({id:R.id,type:"remove"}))))},updateNodeData:(l,p)=>{var x,M;const C=te.current.find(R=>R.id===l);if(!C)return;const z=typeof p=="function"?p(C.data):{...C.data,...p};(M=(x=J.current).onNodesChange)==null||M.call(x,[{id:l,type:"replace",item:{...C,data:z}}])},toObject:()=>({nodes:[...te.current],edges:[...Ne.current],viewport:{...he.current}}),setCenter:(l,p,C={})=>{const z=ve.current;if(!z)return;const x=z.getBoundingClientRect(),M=C.zoom??he.current.zoom;he.current={x:x.width/2-l*M,y:x.height/2-p*M,zoom:M},Re()},fitBounds:(l,p={})=>{const C=ve.current;if(!C)return;const z=C.getBoundingClientRect(),x=Ut(l,z.width,z.height,p.padding??.1);he.current=x,Re()}})}});const Hn=a.useCallback(()=>{he.current={...be},Re()},[Re,be]),_n=a.useCallback(u=>{var y;if(u)vt.current.push(u);else{const l=he.current,p=ve.current;if(!p)return;const C=p.getBoundingClientRect(),z=Math.round(-l.x/l.zoom+C.width/2/l.zoom),x=Math.round(-l.y/l.zoom+C.height/2/l.zoom);vt.current.push({x:z-80,y:x-45,w:160,h:90,title:"Note "+(vt.current.length+1),body:"Added at viewport center"})}(y=Pe.current)==null||y.postMessage({type:"cards",data:{cards:[...vt.current]}})},[]),Wn=a.useCallback(u=>{if(u.id||(u.id="node-"+Date.now()),!u.position){const y=he.current,l=ve.current;if(!l)return;const p=l.getBoundingClientRect();u.position={x:Math.round(-y.x/y.zoom+p.width/2/y.zoom)-ft/2,y:Math.round(-y.y/y.zoom+p.height/2/y.zoom)-nt/2}}u.data||(u.data={label:u.id}),Ce.current&&Ce.current([{type:"add",item:u}])},[]),Fn=a.useCallback(()=>({...he.current}),[]),W=a.useCallback(u=>{he.current={...he.current,...u},Re()},[Re]),pe=a.useCallback(u=>Be(u.x,u.y),[Be]),ne=n,Ee=a.useMemo(()=>({wrapRef:ve,canvasRef:Tt,workerRef:Pe,cameraRef:he,nodesRef:te,edgesRef:Ne,handleRegistryRef:fn,syncNodesToWorker:pn,onNodesChangeRef:Ce,onEdgesChangeRef:_e,sendCamera:Re,screenToWorld:Be,viewportListeners:bt,selectionListeners:at,zoomMin:se,zoomMax:fe,snapToGrid:Qe,snapGrid:Je,nodeExtent:mt,defaultEdgeOptions:Pt,edgeRouting:kt,resolvedNodesRef:lt,noDragClassName:Nt,noPanClassName:It,get nodes(){return t},get edges(){return n},get routedEdges(){return ne},get viewport(){return gn},get connection(){return Zt}}),[t,n,ne,gn,Zt,Re,Be,pn,bt,at,se,fe,Qe,Je,mt,Pt,kt,Nt,It]);return{wrapRef:ve,canvasRef:Tt,canvasReady:$t,onPointerDown:Vt,onPointerMove:Kt,onPointerUp:mn,resetView:Hn,addCard:_n,addNode:Wn,getCamera:Fn,setCamera:W,screenToFlowPosition:pe,store:Ee}}function ro(e,t,n,r,i,o){const c=i-n,f=o-r,m=c*c+f*f;if(m===0)return Math.hypot(e-n,t-r);let d=((e-n)*c+(t-r)*f)/m;return d=Math.max(0,Math.min(1,d)),Math.hypot(e-(n+d*c),t-(r+d*f))}const ur=e=>{let t;const n=new Set,r=(d,h)=>{const b=typeof d=="function"?d(t):d;if(!Object.is(b,t)){const k=t;t=h??(typeof b!="object"||b===null)?b:Object.assign({},t,b),n.forEach(S=>S(t,k))}},i=()=>t,f={setState:r,getState:i,getInitialState:()=>m,subscribe:d=>(n.add(d),()=>n.delete(d))},m=t=e(r,i,f);return f},oo=(e=>e?ur(e):ur),so=e=>e;function io(e,t=so){const n=a.useSyncExternalStore(e.subscribe,a.useCallback(()=>t(e.getState()),[e,t]),a.useCallback(()=>t(e.getInitialState()),[e,t]));return a.useDebugValue(n),n}const St=a.createContext(null);function ao(e={}){return oo((t,n)=>({nodes:[],edges:[],viewport:{x:0,y:0,zoom:1},connection:null,minZoom:.1,maxZoom:5,width:0,height:0,domNode:null,nodesRef:{current:[]},edgesRef:{current:[]},cameraRef:{current:{x:0,y:0,zoom:1}},wrapRef:{current:null},workerRef:{current:null},onNodesChangeRef:{current:null},onEdgesChangeRef:{current:null},viewportListeners:new Set,selectionListeners:new Set,edgeLabelContainerRef:{current:null},viewportPortalRef:{current:null},screenToWorld:(r,i)=>{const o=n().cameraRef.current;return{x:(r-o.x)/o.zoom,y:(i-o.y)/o.zoom}},sendCamera:()=>{var i;const r=n();(i=r.workerRef.current)==null||i.postMessage({type:"camera",data:{camera:{...r.cameraRef.current}}})},...e}))}function Ie(e,t){const n=a.useContext(St);if(!n)throw new Error("useCanvasStore must be used within <InfiniteCanvas> or <InfiniteCanvasProvider>");const r=typeof n.getState=="function"&&typeof n.subscribe=="function",i=a.useRef(e),o=a.useRef(t),c=a.useRef(void 0);i.current=e,o.current=t;const f=a.useCallback(m=>{const d=i.current;if(!d)return m;const h=d(m),b=o.current||Object.is;return c.current!==void 0&&b(c.current,h)?c.current:(c.current=h,h)},[]);return r?io(n,e?f:void 0):e?f(n):n}function Rr(){const e=a.useContext(St);if(!e)throw new Error("useCanvasStoreApi must be used within <InfiniteCanvas> or <InfiniteCanvasProvider>");return typeof e.getState=="function"?e:{getState:()=>e,setState:()=>{},subscribe:()=>()=>{}}}const cn=a.createContext(null);function co(){return a.useContext(cn)}function lo({node:e,nodeType:t}){var P,F,j,A;const n=Ie(),r=a.useRef(n);r.current=n;const i=a.useRef(null),o=e._absolutePosition||e.position,c=a.useRef(null);a.useEffect(()=>{const X=i.current;if(!X)return;const B=new ResizeObserver(_=>{var O,U,Y,w;const{width:$,height:N}=_[0].contentRect;if($>0&&N>0){const g=r.current,v=g.nodesRef.current.find(D=>D.id===e.id),L=(v==null?void 0:v.width)||((O=v==null?void 0:v.measured)==null?void 0:O.width),E=(v==null?void 0:v.height)||((U=v==null?void 0:v.measured)==null?void 0:U.height);(Math.abs((L||0)-$)>1||Math.abs((E||0)-N)>1)&&((w=(Y=g.onNodesChangeRef).current)==null||w.call(Y,[{id:e.id,type:"dimensions",dimensions:{width:$,height:N},setAttributes:!0}]))}});return B.observe(X),()=>B.disconnect()},[e.id]);const f=a.useCallback(X=>{var oe,ye,we,Me;X.stopPropagation();const B=X.target.tagName;if(B==="INPUT"||B==="TEXTAREA"||B==="SELECT"||B==="BUTTON"||B==="A"||B==="LABEL"||X.target.isContentEditable)return;const _=r.current.noDragClassName||"nodrag",$=r.current.noPanClassName||"nopan";let N=X.target;for(;N&&N!==i.current;){if((oe=N.classList)!=null&&oe.contains(_)||(ye=N.classList)!=null&&ye.contains($))return;N=N.parentElement}if(r.current.onNodesChangeRef.current){const le=[];if(X.shiftKey)le.push({id:e.id,type:"select",selected:!e.selected});else for(const se of r.current.nodesRef.current)se.id===e.id&&!se.selected?le.push({id:se.id,type:"select",selected:!0}):se.id!==e.id&&se.selected&&le.push({id:se.id,type:"select",selected:!1});le.length&&r.current.onNodesChangeRef.current(le)}const O=r.current.cameraRef.current,U=r.current.wrapRef.current;if(!U)return;const Y=U.getBoundingClientRect(),w=(X.clientX-Y.left-O.x)/O.zoom,g=(X.clientY-Y.top-O.y)/O.zoom,L=e.selected?r.current.nodesRef.current.filter(le=>le.selected&&le.id!==e.id).map(le=>({id:le.id,startPos:{...le.position}})):[];c.current={startPos:{...e.position},startMouse:{x:w,y:g},selectedStarts:L};const E=[{id:e.id,type:"position",dragging:!0}];for(const le of L)E.push({id:le.id,type:"position",dragging:!0});(Me=(we=r.current.onNodesChangeRef).current)==null||Me.call(we,E);const D=i.current;D&&D.setPointerCapture(X.pointerId);let K=null;const ae=le=>{var He,Fe,rt,ht;if(!c.current)return;const Se=r.current.cameraRef.current,se=U.getBoundingClientRect(),fe=(le.clientX-se.left-Se.x)/Se.zoom,be=(le.clientY-se.top-Se.y)/Se.zoom,We=fe-c.current.startMouse.x,xe=be-c.current.startMouse.y;let ue={x:c.current.startPos.x+We,y:c.current.startPos.y+xe};if(r.current.snapToGrid&&r.current.snapGrid&&(ue={x:r.current.snapGrid[0]*Math.round(ue.x/r.current.snapGrid[0]),y:r.current.snapGrid[1]*Math.round(ue.y/r.current.snapGrid[1])}),e.parentId&&e.extent==="parent"){const $e=r.current.nodesRef.current.find(Le=>Le.id===e.parentId);if($e){const Le=$e.width||160,ze=$e.height||60,Qe=e.width||((He=e.measured)==null?void 0:He.width)||160,Je=e.height||((Fe=e.measured)==null?void 0:Fe.height)||60;ue={x:Math.max(0,Math.min(ue.x,Le-Qe)),y:Math.max(0,Math.min(ue.y,ze-Je))}}}D&&(D.style.left=ue.x+"px",D.style.top=ue.y+"px");const Te=[{id:e.id,position:ue,_absolutePosition:ue,dragging:!0}];for(const $e of c.current.selectedStarts){let Le={x:$e.startPos.x+We,y:$e.startPos.y+xe};r.current.snapToGrid&&r.current.snapGrid&&(Le={x:r.current.snapGrid[0]*Math.round(Le.x/r.current.snapGrid[0]),y:r.current.snapGrid[1]*Math.round(Le.y/r.current.snapGrid[1])});const ze=U.querySelector(`[data-nodeid="${$e.id}"]`);ze&&(ze.style.left=Le.x+"px",ze.style.top=Le.y+"px"),Te.push({id:$e.id,position:Le,_absolutePosition:Le,dragging:!0})}(ht=(rt=r.current.workerRef)==null?void 0:rt.current)==null||ht.postMessage({type:"nodePositions",data:{updates:Te}});for(const $e of Te){const Le=r.current.nodesRef.current.find(ze=>ze.id===$e.id);Le&&(Le.position=$e.position)}K=Te},ee=le=>{var fe,be,We,xe;if(!c.current)return;const Se=[{id:e.id,position:e.position,dragging:!1}];for(const ue of c.current.selectedStarts)Se.push({id:ue.id,position:ue.startPos,dragging:!1});if(K)for(let ue=0;ue<K.length;ue++)Se[ue]={id:K[ue].id,position:K[ue].position,dragging:!1};(be=(fe=r.current.workerRef)==null?void 0:fe.current)==null||be.postMessage({type:"nodePositions",data:{updates:Se}});const se=[];for(const ue of Se)se.push({id:ue.id,type:"position",position:ue.position,dragging:!1});(xe=(We=r.current.onNodesChangeRef).current)==null||xe.call(We,se),c.current=null,K=null,D&&D.releasePointerCapture(le.pointerId),D==null||D.removeEventListener("pointermove",ae),D==null||D.removeEventListener("pointerup",ee)};D==null||D.addEventListener("pointermove",ae),D==null||D.addEventListener("pointerup",ee)},[e]),m=a.useCallback(X=>{var U,Y,w,g,v,L;if(!e.selected)return;const B=X.shiftKey?10:1;let _=0,$=0;switch(X.key){case"ArrowUp":$=-B;break;case"ArrowDown":$=B;break;case"ArrowLeft":_=-B;break;case"ArrowRight":_=B;break;case"Escape":(Y=(U=r.current.onNodesChangeRef).current)==null||Y.call(U,[{id:e.id,type:"select",selected:!1}]);return;case"Delete":case"Backspace":e.deletable!==!1&&((g=(w=r.current.onNodesChangeRef).current)==null||g.call(w,[{id:e.id,type:"remove"}]));return;default:return}X.preventDefault();const N={x:e.position.x+_,y:e.position.y+$},O=[{id:e.id,type:"position",position:N}];for(const E of r.current.nodesRef.current)E.selected&&E.id!==e.id&&O.push({id:E.id,type:"position",position:{x:E.position.x+_,y:E.position.y+$}});(L=(v=r.current.onNodesChangeRef).current)==null||L.call(v,O)},[e]),d=e.width||((P=e.measured)==null?void 0:P.width),h=e.height||((F=e.measured)==null?void 0:F.height),b=!!(d&&h),k=(j=n.pinnedNodeIds)==null?void 0:j.has(e.id),S=a.useCallback(X=>{var B,_;X.stopPropagation(),(_=(B=r.current).togglePinNode)==null||_.call(B,e.id)},[e.id]);return I.jsx(cn.Provider,{value:e.id,children:I.jsxs("div",{ref:i,className:`ric-node-wrapper ${e.selected?"selected":""} ${e.dragging?"dragging":""}`,style:{position:"absolute",left:o.x,top:o.y,zIndex:e.type==="group"?0:e.zIndex||1,pointerEvents:e.type==="group"?"none":"all",visibility:b?"visible":"hidden",outline:"none"},"data-nodeid":e.id,tabIndex:e.selectable!==!1?0:void 0,role:"button","aria-label":`Node ${((A=e.data)==null?void 0:A.label)||e.id}`,"aria-selected":!!e.selected,onPointerDown:f,onKeyDown:m,children:[I.jsx(t,{id:e.id,data:e.data,type:e.type,selected:!!e.selected,dragging:!!e.dragging,draggable:e.draggable!==!1,selectable:e.selectable!==!1,deletable:e.deletable!==!1,isConnectable:e.connectable!==!1,zIndex:e.zIndex||0,positionAbsoluteX:o.x,positionAbsoluteY:o.y,width:d,height:h,sourcePosition:e.sourcePosition,targetPosition:e.targetPosition,parentId:e.parentId,dragHandle:e.dragHandle}),n.togglePinNode&&I.jsx("button",{className:"ric-pin-btn nodrag",onClick:S,title:k?"Unpin from DOM":"Pin to DOM",style:{position:"absolute",top:-8,left:-8,width:20,height:20,borderRadius:"50%",border:"1.5px solid "+(k?"#3b82f6":"#ccc"),background:k?"#3b82f6":"#fff",color:k?"#fff":"#999",fontSize:10,lineHeight:"16px",textAlign:"center",cursor:"pointer",padding:0,zIndex:10,pointerEvents:"all",boxShadow:"0 1px 3px rgba(0,0,0,0.12)"},children:"📌"})]})})}const uo=a.memo(lo),kr=160,Cr=60;function dr(e,t,n,r){var f,m;const i=e.width||((f=e.measured)==null?void 0:f.width)||kr,o=e.height||((m=e.measured)==null?void 0:m.height)||Cr,c=e._absolutePosition||e.position;if(e.handleBounds){const d=e.handleBounds[t]||[],h=n?d.find(b=>b.id===n):d[0];if(h&&h.x!==void 0&&h.y!==void 0){const b=h.position||(t==="source"?"right":"left");return{x:c.x+h.x,y:c.y+h.y,position:b}}}if(r){const d=`${e.id}__${n||t}`,h=r.get(d);if(h&&h.x!==void 0&&h.y!==void 0)return{x:c.x+h.x,y:c.y+h.y,position:h.position||(t==="source"?"right":"left")}}if(e.handles&&e.handles.length){for(const d of e.handles)if(d.type===t&&(!n||d.id===n)){if(d.x!==void 0&&d.y!==void 0)return{x:c.x+d.x,y:c.y+d.y,position:d.position||(t==="source"?"right":"left")};const h=d.position||(t==="source"?"right":"left");switch(h){case"top":return{x:c.x+i/2,y:c.y,position:h};case"bottom":return{x:c.x+i/2,y:c.y+o,position:h};case"left":return{x:c.x,y:c.y+o/2,position:h};default:return{x:c.x+i,y:c.y+o/2,position:h}}}}return t==="source"?{x:c.x+i,y:c.y+o/2,position:"right"}:{x:c.x,y:c.y+o/2,position:"left"}}function fo(e,t,n){return n==="left"?e-t:n==="right"?e+t:e}function ho(e,t,n){return n==="top"?e-t:n==="bottom"?e+t:e}function fr({x:e,y:t,position:n,type:r,onPointerDown:i}){return I.jsx("circle",{className:`ric-edge-anchor ric-edge-anchor-${r}`,cx:fo(e,10,n),cy:ho(t,10,n),r:10,stroke:"transparent",fill:"transparent",style:{cursor:"move",pointerEvents:"stroke"},onPointerDown:i})}function go({edge:e,edgeType:t,nodes:n,reconnectable:r}){var w,g,v,L;const i=a.useContext(St),o=a.useRef(typeof i.getState=="function"?i.getState():i);o.current=typeof i.getState=="function"?i.getState():i;const[c,f]=a.useState(null),m=a.useCallback((E,D,K,ae)=>{var se;D.stopPropagation(),D.preventDefault();const ee=o.current,oe=ee.wrapRef.current;if(!oe)return;const ye=E==="source"?ae:K,we=E==="source"?e.target:e.source;(se=ee.workerRef.current)==null||se.postMessage({type:"connecting",data:{from:{x:ye.x,y:ye.y},to:{x:ye.x,y:ye.y}}});const Me=oe.getBoundingClientRect(),le=fe=>{var ue;const be=ee.cameraRef.current,We=(fe.clientX-Me.left-be.x)/be.zoom,xe=(fe.clientY-Me.top-be.y)/be.zoom;(ue=ee.workerRef.current)==null||ue.postMessage({type:"connecting",data:{from:{x:ye.x,y:ye.y},to:{x:We,y:xe}}})},Se=fe=>{var rt,ht,$e,Le;const be=ee.cameraRef.current,We=(fe.clientX-Me.left-be.x)/be.zoom,xe=(fe.clientY-Me.top-be.y)/be.zoom,ue=20/be.zoom;let Te=null,He=null;const Fe=(rt=ee.handleRegistryRef)==null?void 0:rt.current;for(const ze of ee.nodesRef.current){if(ze.hidden)continue;const Qe=ze.width||kr,Je=ze.height||Cr,Ae=ze._absolutePosition||ze.position,ot=[];if(Fe)for(const[,De]of Fe)De.nodeId===ze.id&&ot.push(De);const zt=ot.length>0?ot:ze.handles||[{type:"target",position:"left"},{type:"source",position:"right"}];for(const De of zt){let et,tt;if(De.x!==void 0&&De.y!==void 0)et=Ae.x+De.x,tt=Ae.y+De.y;else switch(De.position||(De.type==="source"?"right":"left")){case"top":et=Ae.x+Qe/2,tt=Ae.y;break;case"bottom":et=Ae.x+Qe/2,tt=Ae.y+Je;break;case"left":et=Ae.x,tt=Ae.y+Je/2;break;default:et=Ae.x+Qe,tt=Ae.y+Je/2;break}if(Math.abs(We-et)<ue&&Math.abs(xe-tt)<ue){Te=ze,He=De.id||null;break}}if(Te)break}if(Te){const ze=E==="source"?{source:Te.id,target:we,sourceHandle:He,targetHandle:e.targetHandle}:{source:we,target:Te.id,sourceHandle:e.sourceHandle,targetHandle:He};($e=(ht=ee.onEdgesChangeRef).current)==null||$e.call(ht,[{id:e.id,type:"remove"},{type:"add",item:{id:e.id,...ze}}])}(Le=ee.workerRef.current)==null||Le.postMessage({type:"connecting",data:null}),oe.removeEventListener("pointermove",le),oe.removeEventListener("pointerup",Se)};oe.addEventListener("pointermove",le),oe.addEventListener("pointerup",Se)},[e]),d=o.current,h=((w=d.nodesRef)==null?void 0:w.current)||n,b=h.find(E=>E.id===e.source),k=h.find(E=>E.id===e.target),[,S]=a.useReducer(E=>E+1,0),P=a.useRef(null),F=(b==null?void 0:b.dragging)||(k==null?void 0:k.dragging);a.useEffect(()=>{if(!F)return;const E=()=>{S(),P.current=requestAnimationFrame(E)};return P.current=requestAnimationFrame(E),()=>cancelAnimationFrame(P.current)},[F]);const j=b&&!!(b.width||(g=b.measured)!=null&&g.width),A=k&&!!(k.width||(v=k.measured)!=null&&v.width),X=(L=d.handleRegistryRef)==null?void 0:L.current,B=j?dr(b,"source",e.sourceHandle,X):null,_=A?dr(k,"target",e.targetHandle,X):null,$=e.type==="bezier"||e.type==="simplebezier"||e.type==="default",N=d.routedEdges||d.edges,O=N==null?void 0:N.find(E=>E.id===e.id),U=$?null:(O==null?void 0:O._routedPoints)||e._routedPoints||null,Y=r!==!1&&e.reconnectable!==!1;return!B||!_?null:I.jsxs("g",{className:`ric-edge-wrapper ${e.selected?"selected":""}`,"data-edgeid":e.id,onMouseEnter:()=>f(!0),onMouseLeave:()=>f(!1),children:[I.jsx(t,{id:e.id,source:e.source,target:e.target,sourceX:B.x,sourceY:B.y,targetX:_.x,targetY:_.y,sourcePosition:B.position,targetPosition:_.position,sourceHandleId:e.sourceHandle,targetHandleId:e.targetHandle,data:e.data,type:e.type,selected:!!e.selected,animated:!!e.animated,label:e.label,style:e.style,selectable:e.selectable!==!1,deletable:e.deletable!==!1,routedPoints:U}),Y&&(c||e.selected)&&I.jsxs(I.Fragment,{children:[I.jsx(fr,{x:B.x,y:B.y,position:B.position,type:"source",onPointerDown:E=>m("source",E,B,_)}),I.jsx(fr,{x:_.x,y:_.y,position:_.position,type:"target",onPointerDown:E=>m("target",E,B,_)})]})]})}const yo=a.memo(go);function Er({selectionKeyCode:e="Shift",selectionMode:t="partial"}){var F;const n=Ie(),[r,i]=a.useState(null),o=a.useRef(null);if(a.useEffect(()=>{const j=n.wrapRef.current;if(!j)return;let A=!1,X=null,B=!1;const _=Y=>{Y.key===e&&(B=!0)},$=Y=>{Y.key===e&&(B=!1)},N=Y=>{if(!B)return;const w=Y.target;if(w.closest(".ric-node-wrapper")||w.closest(".ric-handle"))return;A=!0;const g=n.cameraRef.current,v=j.getBoundingClientRect(),L=(Y.clientX-v.left-g.x)/g.zoom,E=(Y.clientY-v.top-g.y)/g.zoom;X={x:L,y:E},i({startX:L,startY:E,endX:L,endY:E}),Y.stopPropagation()},O=Y=>{if(!A||!X)return;const w=n.cameraRef.current,g=j.getBoundingClientRect(),v=(Y.clientX-g.left-w.x)/w.zoom,L=(Y.clientY-g.top-w.y)/w.zoom;i({startX:X.x,startY:X.y,endX:v,endY:L})},U=Y=>{var K,ae;if(!A||!X)return;A=!1;const w=n.cameraRef.current,g=j.getBoundingClientRect(),v=(Y.clientX-g.left-w.x)/w.zoom,L=(Y.clientY-g.top-w.y)/w.zoom,E={x:Math.min(X.x,v),y:Math.min(X.y,L),width:Math.abs(v-X.x),height:Math.abs(L-X.y)},D=[];for(const ee of n.nodesRef.current){const oe=ee._absolutePosition||ee.position,ye=ee.width||160,we=ee.height||60;let Me;t==="full"?Me=oe.x>=E.x&&oe.y>=E.y&&oe.x+ye<=E.x+E.width&&oe.y+we<=E.y+E.height:Me=oe.x+ye>E.x&&oe.x<E.x+E.width&&oe.y+we>E.y&&oe.y<E.y+E.height,D.push({id:ee.id,type:"select",selected:Me})}D.length&&((ae=(K=n.onNodesChangeRef).current)==null||ae.call(K,D)),X=null,i(null)};return j.addEventListener("pointerdown",N,!0),j.addEventListener("pointermove",O),j.addEventListener("pointerup",U),window.addEventListener("keydown",_),window.addEventListener("keyup",$),()=>{j.removeEventListener("pointerdown",N,!0),j.removeEventListener("pointermove",O),j.removeEventListener("pointerup",U),window.removeEventListener("keydown",_),window.removeEventListener("keyup",$)}},[n,e,t]),!r)return null;const c=((F=n.cameraRef)==null?void 0:F.current)||{x:0,y:0,zoom:1},f=Math.min(r.startX,r.endX),m=Math.min(r.startY,r.endY),d=Math.abs(r.endX-r.startX),h=Math.abs(r.endY-r.startY),b=f*c.zoom+c.x,k=m*c.zoom+c.y,S=d*c.zoom,P=h*c.zoom;return I.jsx("div",{ref:o,className:"ric-selection-box",style:{position:"absolute",left:b,top:k,width:S,height:P,border:"1px dashed #3b82f6",background:"rgba(59, 130, 246, 0.08)",pointerEvents:"none",zIndex:100}})}Er.displayName="SelectionBox";const Sr=a.memo(Er);function Qn(e,t,n){switch(e){case"top":return{x:t/2,y:0};case"bottom":return{x:t/2,y:n};case"left":return{x:0,y:n/2};case"right":return{x:t,y:n/2};default:return{x:t,y:n/2}}}function xo(e,t){const n=e.closest(".ric-node-wrapper");if(!n)return null;const r=n.getBoundingClientRect(),i=e.getBoundingClientRect(),o=t||1;return{x:(i.left+i.width/2-r.left)/o,y:(i.top+i.height/2-r.top)/o}}let On=!1,Et=null;function zr(e){Et=e,!On&&(On=!0,requestAnimationFrame(()=>{var t;On=!1,(t=Et==null?void 0:Et.syncNodesToWorker)==null||t.call(Et),Et=null}))}const Jn=new WeakMap;let bn=null;function po(){return bn||(bn=new ResizeObserver(e=>{var t;for(const n of e){const r=Jn.get(n.target);if(!r)continue;const{width:i,height:o}=n.contentRect;if(!i||!o)continue;const c=r.getStore(),f=(t=c.handleRegistryRef)==null?void 0:t.current;if(f){for(const[m,d]of f)if(d.nodeId===r.nodeId){const h=Qn(d.position,i,o);d.x=h.x,d.y=h.y,f.set(m,d)}zr(c)}}}),bn)}function mo({type:e="source",position:t=e==="source"?"right":"left",id:n,isConnectable:r=!0,isConnectableStart:i=!0,isConnectableEnd:o=!0,children:c,className:f="",style:m={},onConnect:d,...h}){const b=a.useContext(cn),k=a.useContext(St),S=a.useRef(null),P=a.useCallback(()=>typeof k.getState=="function"?k.getState():k,[k]),F=a.useRef(P);F.current=P,a.useLayoutEffect(()=>{var w,g,v,L,E,D,K;if(!b)return;const B=F.current(),_=(w=B.handleRegistryRef)==null?void 0:w.current;if(!_)return;const $=`${b}__${n||e}`,N=(v=(g=B.nodesRef)==null?void 0:g.current)==null?void 0:v.find(ae=>ae.id===b),O=(N==null?void 0:N.width)||((L=N==null?void 0:N.measured)==null?void 0:L.width),U=(N==null?void 0:N.height)||((E=N==null?void 0:N.measured)==null?void 0:E.height);let Y;O&&U?Y=Qn(t,O,U):S.current?Y=xo(S.current,(K=(D=B.cameraRef)==null?void 0:D.current)==null?void 0:K.zoom):Y=Qn(t,160,60),_.set($,{nodeId:b,id:n||null,type:e,position:t,x:Y.x,y:Y.y})},[b,n,e,t]),a.useEffect(()=>{if(!b)return;const B=F.current();zr(B);const _=S.current,$=_==null?void 0:_.closest(".ric-node-wrapper");return $&&!Jn.has($)&&(Jn.set($,{nodeId:b,getStore:F.current}),po().observe($)),()=>{var Y;const O=(Y=F.current().handleRegistryRef)==null?void 0:Y.current,U=`${b}__${n||e}`;O==null||O.delete(U)}},[b,n,e,t]);const j=a.useCallback(()=>{var g;const B=F.current(),_=B.nodesRef.current.find(v=>v.id===b);if(!_)return null;const $=_._absolutePosition||_.position,N=(g=B.handleRegistryRef)==null?void 0:g.current,O=`${b}__${n||e}`,U=N==null?void 0:N.get(O);if(U&&U.x!==void 0&&U.y!==void 0)return{x:$.x+U.x,y:$.y+U.y};const Y=_.width||160,w=_.height||60;switch(t){case"top":return{x:$.x+Y/2,y:$.y};case"bottom":return{x:$.x+Y/2,y:$.y+w};case"left":return{x:$.x,y:$.y+w/2};default:return{x:$.x+Y,y:$.y+w/2}}},[b,n,e,t]),A=a.useCallback(B=>{var L;if(!r||!i)return;B.stopPropagation(),B.preventDefault();const _=F.current(),$=_.cameraRef.current,N=_.wrapRef.current;if(!N)return;const O=N.getBoundingClientRect(),U=j();if(!U)return;const Y=U.x,w=U.y;(L=_.workerRef.current)==null||L.postMessage({type:"connecting",data:{from:{x:Y,y:w},to:{x:Y,y:w}}}),N.setPointerCapture(B.pointerId);const g=E=>{var ae;const D=(E.clientX-O.left-$.x)/$.zoom,K=(E.clientY-O.top-$.y)/$.zoom;(ae=_.workerRef.current)==null||ae.postMessage({type:"connecting",data:{from:{x:Y,y:w},to:{x:D,y:K}}})},v=E=>{var we,Me,le,Se;const D=(E.clientX-O.left-$.x)/$.zoom,K=(E.clientY-O.top-$.y)/$.zoom,ae=20/$.zoom;let ee=null,oe=null;const ye=(we=_.handleRegistryRef)==null?void 0:we.current;for(const se of _.nodesRef.current){if(se.id===b||se.hidden)continue;const fe=se._absolutePosition||se.position,be=[];if(ye)for(const[,xe]of ye)xe.nodeId===se.id&&be.push(xe);const We=be.length>0?be:se.handles||[{type:"target",position:"left"},{type:"source",position:"right"}];for(const xe of We){let ue,Te;if(xe.x!==void 0&&xe.y!==void 0)ue=fe.x+xe.x,Te=fe.y+xe.y;else{const He=se.width||160,Fe=se.height||60;switch(xe.position||(xe.type==="source"?"right":"left")){case"top":ue=fe.x+He/2,Te=fe.y;break;case"bottom":ue=fe.x+He/2,Te=fe.y+Fe;break;case"left":ue=fe.x,Te=fe.y+Fe/2;break;default:ue=fe.x+He,Te=fe.y+Fe/2;break}}if(Math.abs(D-ue)<ae&&Math.abs(K-Te)<ae){ee=se,oe=xe.id||null;break}}if(ee)break}if(ee){const se={source:e==="source"?b:ee.id,target:e==="source"?ee.id:b,sourceHandle:e==="source"?n||null:oe,targetHandle:e==="source"?oe:n||null};(le=(Me=_.onEdgesChangeRef)==null?void 0:Me.current)==null||le.call(Me,[{type:"add",item:{id:`e-${se.source}-${se.target}`,...se}}])}(Se=_.workerRef.current)==null||Se.postMessage({type:"connecting",data:null}),N.removeEventListener("pointermove",g),N.removeEventListener("pointerup",v)};N.addEventListener("pointermove",g),N.addEventListener("pointerup",v)},[b,n,e,t,r,i,j]),X={top:{top:0,left:"50%",transform:"translate(-50%, -50%)"},bottom:{bottom:0,left:"50%",transform:"translate(-50%, 50%)"},left:{top:"50%",left:0,transform:"translate(-50%, -50%)"},right:{top:"50%",right:0,transform:"translate(50%, -50%)"}}[t]||{};return I.jsx("div",{ref:S,className:`ric-handle ric-handle-${t} ric-handle-${e} ${f}`,"data-handleid":n||null,"data-nodeid":b,"data-handlepos":t,"data-handletype":e,onPointerDown:A,style:{position:"absolute",width:8,height:8,borderRadius:"50%",background:"#1a192b",border:"none",zIndex:10,cursor:r?"crosshair":"default",boxSizing:"border-box",...X,...m},...h,children:c})}const an=a.memo(mo);function vo({data:e,isConnectable:t,selected:n,targetPosition:r="left",sourcePosition:i="right",hideSourceHandle:o=!1,hideTargetHandle:c=!1}){return I.jsxs("div",{className:`ric-default-node${n?" selected":""}`,style:{background:"#fff",border:"1px solid #1a192b",borderRadius:3,padding:"10px",minWidth:150,fontSize:12,fontFamily:"inherit",boxShadow:n?"0 0 0 0.5px #1a192b":"none"},children:[!c&&I.jsx(an,{type:"target",position:r,isConnectable:t}),I.jsx("div",{className:"ric-node-content",children:e==null?void 0:e.label}),!o&&I.jsx(an,{type:"source",position:i,isConnectable:t})]})}function Pr({data:e,isConnectable:t,selected:n,sourcePosition:r="right",hideSourceHandle:i=!1}){return I.jsxs("div",{className:`ric-input-node${n?" selected":""}`,style:{background:"#fff",border:"1px solid #1a192b",borderBottom:"2px solid #0041d0",borderRadius:3,padding:"10px",minWidth:150,fontSize:12,fontFamily:"inherit",boxShadow:n?"0 0 0 0.5px #1a192b":"none"},children:[I.jsx("div",{className:"ric-node-content",children:e==null?void 0:e.label}),!i&&I.jsx(an,{type:"source",position:r,isConnectable:t})]})}function Nr({data:e,isConnectable:t,selected:n,targetPosition:r="left",hideTargetHandle:i=!1}){return I.jsxs("div",{className:`ric-output-node${n?" selected":""}`,style:{background:"#fff",border:"1px solid #1a192b",borderTop:"2px solid #ff0072",borderRadius:3,padding:"10px",minWidth:150,fontSize:12,fontFamily:"inherit",boxShadow:n?"0 0 0 0.5px #1a192b":"none"},children:[!i&&I.jsx(an,{type:"target",position:r,isConnectable:t}),I.jsx("div",{className:"ric-node-content",children:e==null?void 0:e.label})]})}function Ir({data:e,selected:t,width:n,height:r}){return I.jsx("div",{className:`ric-group-node${t?" selected":""}`,style:{width:n||300,height:r||200,background:"rgba(240, 240, 240, 0.25)",border:t?"2px solid #3b82f6":"1px dashed #ccc",borderRadius:8,padding:8,boxSizing:"border-box"},children:(e==null?void 0:e.label)&&I.jsx("div",{style:{fontSize:11,fontWeight:600,color:"#888",userSelect:"none"},children:e.label})})}function Tr({x:e,y:t,label:n,labelStyle:r,labelShowBg:i=!0,labelBgStyle:o,labelBgPadding:c=[2,4],labelBgBorderRadius:f=2,children:m,className:d="",...h}){const[b,k]=a.useState({x:1,y:0,width:0,height:0}),S=a.useRef(null);return a.useEffect(()=>{if(S.current){const P=S.current.getBBox();k({x:P.x,y:P.y,width:P.width,height:P.height})}},[n]),n?I.jsxs("g",{transform:`translate(${e-b.width/2} ${t-b.height/2})`,className:`ric-edge-textwrapper ${d}`,visibility:b.width?"visible":"hidden",...h,children:[i&&I.jsx("rect",{width:b.width+2*c[0],x:-c[0],y:-c[1],height:b.height+2*c[1],className:"ric-edge-textbg",style:o,rx:f,ry:f}),I.jsx("text",{className:"ric-edge-text",y:b.height/2,dy:"0.3em",ref:S,style:r,children:n}),m]}):null}Tr.displayName="EdgeText";const Lr=a.memo(Tr);function hr(e){return e!=null&&e!==""&&!isNaN(Number(e))}function ln({id:e,path:t,labelX:n,labelY:r,label:i,labelStyle:o,labelShowBg:c,labelBgStyle:f,labelBgPadding:m,labelBgBorderRadius:d,interactionWidth:h=20,style:b,markerEnd:k,markerStart:S,className:P="",...F}){return I.jsxs(I.Fragment,{children:[I.jsx("path",{id:e,d:t,fill:"none",stroke:"#b1b1b7",strokeWidth:1.5,className:`ric-edge-path ${P}`,style:b,markerEnd:k,markerStart:S,...F}),h?I.jsx("path",{d:t,fill:"none",strokeOpacity:0,strokeWidth:h,className:"ric-edge-interaction",style:{pointerEvents:"stroke"}}):null,i&&hr(n)&&hr(r)?I.jsx(Lr,{x:n,y:r,label:i,labelStyle:o,labelShowBg:c,labelBgStyle:f,labelBgPadding:m,labelBgBorderRadius:d}):null]})}const rn=20;function gr(e,t,n){switch(n){case"right":return{x:e+rn,y:t};case"left":return{x:e-rn,y:t};case"bottom":return{x:e,y:t+rn};case"top":return{x:e,y:t-rn};default:return{x:e+rn,y:t}}}const er=a.memo(function({id:t,sourceX:n,sourceY:r,targetX:i,targetY:o,sourcePosition:c="bottom",targetPosition:f="top",label:m,labelStyle:d,labelShowBg:h,labelBgStyle:b,labelBgPadding:k,labelBgBorderRadius:S,style:P,markerEnd:F,markerStart:j,interactionWidth:A}){let X,B,_;const $=gr(n,r,c),N=gr(i,o,f),O=Math.abs(N.x-$.x),U=Math.max(50,O*.5);let Y,w,g,v;switch(c){case"left":Y=$.x-U,w=$.y;break;case"top":Y=$.x,w=$.y-U;break;case"bottom":Y=$.x,w=$.y+U;break;default:Y=$.x+U,w=$.y;break}switch(f){case"right":g=N.x+U,v=N.y;break;case"top":g=N.x,v=N.y-U;break;case"bottom":g=N.x,v=N.y+U;break;default:g=N.x-U,v=N.y;break}X=`M ${n},${r} L ${$.x},${$.y} C ${Y},${w} ${g},${v} ${N.x},${N.y} L ${i},${o}`;const L=.5,E=.5;return B=E*E*E*$.x+3*E*E*L*Y+3*E*L*L*g+L*L*L*N.x,_=E*E*E*$.y+3*E*E*L*w+3*E*L*L*v+L*L*L*N.y,I.jsx(ln,{id:t,path:X,labelX:B,labelY:_,label:m,labelStyle:d,labelShowBg:h,labelBgStyle:b,labelBgPadding:k,labelBgBorderRadius:S,style:P,markerEnd:F,markerStart:j,interactionWidth:A})});er.displayName="BezierEdge";function tr({sourceX:e,sourceY:t,targetX:n,targetY:r}){const i=`M ${e},${t}L ${n},${r}`,o=(e+n)/2,c=(t+r)/2;return[i,o,c,0,0]}function nr({sourceX:e,sourceY:t,targetX:n,targetY:r,sourcePosition:i="right",targetPosition:o="left",curvature:c=.25}){const f=Math.abs(n-e),m=Math.abs(r-t),d=Math.sqrt(f*f+m*m),h=Math.max(d*c,50);let b,k,S,P;switch(i){case"top":b=e,k=t-h;break;case"bottom":b=e,k=t+h;break;case"left":b=e-h,k=t;break;default:b=e+h,k=t;break}switch(o){case"top":S=n,P=r-h;break;case"bottom":S=n,P=r+h;break;case"right":S=n+h,P=r;break;default:S=n-h,P=r;break}const F=`M ${e},${t} C ${b},${k} ${S},${P} ${n},${r}`,j=.5,A=1-j,X=A*A*A*e+3*A*A*j*b+3*A*j*j*S+j*j*j*n,B=A*A*A*t+3*A*A*j*k+3*A*j*j*P+j*j*j*r;return[F,X,B,0,0]}function rr({sourceX:e,sourceY:t,targetX:n,targetY:r}){const i=Math.abs(n-e),o=Math.max(i*.5,50),c=e+o,f=n-o,m=`M ${e},${t} C ${c},${t} ${f},${r} ${n},${r}`,d=.5,h=.5,b=h*h*h*e+3*h*h*d*c+3*h*d*d*f+d*d*d*n,k=h*h*h*t+3*h*h*d*t+3*h*d*d*r+d*d*d*r;return[m,b,k,0,0]}function Rn({sourceX:e,sourceY:t,targetX:n,targetY:r,sourcePosition:i="right",targetPosition:o="left",borderRadius:c=5,offset:f=20}){const m=i==="left"||i==="right",d=Math.min(c,Math.abs(n-e)/2,Math.abs(r-t)/2);if(m){if(Math.abs(r-t)<1)return[`M ${e},${t} L ${n},${r}`,(e+n)/2,t,0,0];const S=(e+n)/2,P=r>t?1:-1;return[`M ${e},${t} L ${S-d},${t} Q ${S},${t} ${S},${t+P*d} L ${S},${r-P*d} Q ${S},${r} ${S+(n>S?d:-d)},${r} L ${n},${r}`,S,(t+r)/2,0,0]}const h=(t+r)/2,b=n>e?1:-1;return[`M ${e},${t} L ${e},${h-d} Q ${e},${h} ${e+b*d},${h} L ${n-b*d},${h} Q ${n},${h} ${n},${h+(r>h?d:-d)} L ${n},${r}`,(e+n)/2,h,0,0]}function bo({sourceX:e,sourceY:t,targetX:n,targetY:r}){const[,i,o]=nr({sourceX:e,sourceY:t,targetX:n,targetY:r});return[i,o,0,0]}function wo({sourceX:e,sourceY:t,targetX:n,targetY:r}){return[(e+n)/2,(t+r)/2,0,0]}function Mo(e,t,n){const r=n.filter(o=>o.id!==e.id),i={...e,id:e.id,source:t.source,target:t.target,sourceHandle:t.sourceHandle??e.sourceHandle,targetHandle:t.targetHandle??e.targetHandle};return r.push(i),r}const kn=160,Cn=60,on=20,wn=12,En=20;function yr(e,t,n){var c,f;const r=e.width||((c=e.measured)==null?void 0:c.width)||kn,i=e.height||((f=e.measured)==null?void 0:f.height)||Cn,o=e._absolutePosition||e.position;if(e.handles&&e.handles.length>0){for(const m of e.handles)if(m.type===t&&(!n||m.id===n)){if(m.x!==void 0&&m.y!==void 0)return{x:o.x+m.x,y:o.y+m.y,dir:m.position||(t==="source"?"right":"left")};switch(m.position||(t==="source"?"right":"left")){case"top":return{x:o.x+r/2,y:o.y,dir:"top"};case"bottom":return{x:o.x+r/2,y:o.y+i,dir:"bottom"};case"left":return{x:o.x,y:o.y+i/2,dir:"left"};default:return{x:o.x+r,y:o.y+i/2,dir:"right"}}}}return t==="source"?{x:o.x+r,y:o.y+i/2,dir:"right"}:{x:o.x,y:o.y+i/2,dir:"left"}}function Sn(e,t){switch(e.dir){case"right":return{x:e.x+t,y:e.y,dir:e.dir};case"left":return{x:e.x-t,y:e.y,dir:e.dir};case"bottom":return{x:e.x,y:e.y+t,dir:e.dir};case"top":return{x:e.x,y:e.y-t,dir:e.dir};default:return{x:e.x+t,y:e.y,dir:e.dir}}}function Ro(e,t,n,r,i,o,c,f){const m=Math.min(e,n),d=Math.max(e,n),h=Math.min(t,r),b=Math.max(t,r);if(d<=i||m>=i+c||b<=o||h>=o+f)return!1;const k=.5;if(e>i+k&&e<i+c-k&&t>o+k&&t<o+f-k||n>i+k&&n<i+c-k&&r>o+k&&r<o+f-k)return!0;const S=(e+n)/2,P=(t+r)/2;if(S>i+k&&S<i+c-k&&P>o+k&&P<o+f-k)return!0;const F=[[i,o],[i+c,o],[i+c,o+f],[i,o+f]];for(let j=0;j<4;j++)if(ko(e,t,n,r,F[j][0],F[j][1],F[(j+1)%4][0],F[(j+1)%4][1]))return!0;return!1}function ko(e,t,n,r,i,o,c,f){const m=(c-i)*(t-o)-(f-o)*(e-i),d=(c-i)*(r-o)-(f-o)*(n-i),h=(n-e)*(o-t)-(r-t)*(i-e),b=(n-e)*(f-t)-(r-t)*(c-e);return(m>0&&d<0||m<0&&d>0)&&(h>0&&b<0||h<0&&b>0)}function Vn(e,t,n,r,i){for(let o=0;o<i.length;o++){const c=i[o];if(Ro(e,t,n,r,c.x,c.y,c.w,c.h))return!1}return!0}function Co(e,t,n){for(let r=0;r<n.length;r++){const i=n[r];if(e>i.x&&e<i.x+i.w&&t>i.y&&t<i.y+i.h)return!0}return!1}function or(e,t){var r,i;const n=[];for(let o=0;o<e.length;o++){const c=e[o];if(c.hidden||t&&t.has(c.id)||c.type==="group")continue;const f=c._absolutePosition||c.position,m=c.width||((r=c.measured)==null?void 0:r.width)||kn,d=c.height||((i=c.measured)==null?void 0:i.height)||Cn;n.push({id:c.id,x:f.x-on,y:f.y-on,w:m+2*on,h:d+2*on})}return n}function Br(e,t,n){if(Vn(e.x,e.y,t.x,t.y,n))return null;const r=new Set,i=new Set;r.add(e.x),r.add(t.x),i.add(e.y),i.add(t.y);const o=on+5;e.dir==="right"?r.add(e.x+o):e.dir==="left"?r.add(e.x-o):e.dir==="top"?i.add(e.y-o):e.dir==="bottom"&&i.add(e.y+o),t.dir==="right"?r.add(t.x+o):t.dir==="left"?r.add(t.x-o):t.dir==="top"?i.add(t.y-o):t.dir==="bottom"&&i.add(t.y+o);for(let g=0;g<n.length;g++){const v=n[g];r.add(v.x),r.add(v.x+v.w),i.add(v.y),i.add(v.y+v.h)}const c=[...r].sort((g,v)=>g-v),f=[...i].sort((g,v)=>g-v),m=new Map,d=new Map;for(let g=0;g<c.length;g++)m.set(c[g],g);for(let g=0;g<f.length;g++)d.set(f[g],g);const h=c.length,b=f.length,k=(g,v)=>v*h+g,S=m.get(e.x),P=d.get(e.y),F=m.get(t.x),j=d.get(t.y);if(S===void 0||P===void 0||F===void 0||j===void 0)return null;const A=k(S,P),X=k(F,j),B=new Float64Array(h*b).fill(1/0),_=new Float64Array(h*b).fill(1/0),$=new Int32Array(h*b).fill(-1),N=new Int8Array(h*b).fill(-1),O=new Uint8Array(h*b);B[A]=0,_[A]=Math.abs(c[F]-e.x)+Math.abs(f[j]-e.y);const U=[A],Y=15,w=[[1,0],[-1,0],[0,1],[0,-1]];for(;U.length>0;){let g=0;for(let ee=1;ee<U.length;ee++)_[U[ee]]<_[U[g]]&&(g=ee);const v=U[g];if(U[g]=U[U.length-1],U.pop(),v===X){const ee=[];let oe=X;for(;oe!==-1&&oe!==A;){const ye=oe/h|0,we=oe%h;ee.unshift({x:c[we],y:f[ye]}),oe=$[oe]}return ee.unshift({x:e.x,y:e.y}),Eo(ee,n)}if(O[v])continue;O[v]=1;const L=v/h|0,E=v%h,D=c[E],K=f[L],ae=N[v];for(let ee=0;ee<4;ee++){const oe=E+w[ee][0],ye=L+w[ee][1];if(oe<0||oe>=h||ye<0||ye>=b)continue;const we=k(oe,ye);if(O[we])continue;const Me=c[oe],le=f[ye];if(Co(Me,le,n)||!Vn(D,K,Me,le,n))continue;const Se=Math.abs(Me-D)+Math.abs(le-K),se=ae>=0&&ae!==ee?Y:0,fe=B[v]+Se+se;fe<B[we]&&($[we]=v,N[we]=ee,B[we]=fe,_[we]=fe+Math.abs(c[F]-Me)+Math.abs(f[j]-le),U.push(we))}}return null}function Eo(e,t){if(!e||e.length<=2)return e;const n=[e[0]];for(let r=1;r<e.length-1;r++){const i=n[n.length-1],o=e[r],c=e[r+1],f=Math.abs(i.x-o.x)<.5&&Math.abs(o.x-c.x)<.5,m=Math.abs(i.y-o.y)<.5&&Math.abs(o.y-c.y)<.5;(f||m)&&Vn(i.x,i.y,c.x,c.y,t)||n.push(o)}return n.push(e[e.length-1]),n}function So(e){const t=new Map,n=new Map;for(const i of e){const o=i._routedPoints;if(!(!o||o.length<2))for(let c=0;c<o.length-1;c++){const f=o[c],m=o[c+1];if(Math.abs(f.y-m.y)<.5){const d=Math.round(f.y*10)/10;t.has(d)||t.set(d,[]),t.get(d).push({edgeId:i.id,segIdx:c,x1:Math.min(f.x,m.x),x2:Math.max(f.x,m.x)})}else if(Math.abs(f.x-m.x)<.5){const d=Math.round(f.x*10)/10;n.has(d)||n.set(d,[]),n.get(d).push({edgeId:i.id,segIdx:c,y1:Math.min(f.y,m.y),y2:Math.max(f.y,m.y)})}}}const r=new Map;for(const i of e)i._routedPoints&&r.set(i.id,i._routedPoints.map(o=>({...o})));for(const[,i]of t){if(i.length<2)continue;const o=xr(i,"x1","x2");for(const c of o){if(c.length<2)continue;const f=(c.length-1)*wn/2;for(let m=0;m<c.length;m++){const d=c[m],h=-f+m*wn,b=r.get(d.edgeId);b&&(b[d.segIdx].y+=h,b[d.segIdx+1].y+=h)}}}for(const[,i]of n){if(i.length<2)continue;const o=xr(i,"y1","y2");for(const c of o){if(c.length<2)continue;const f=(c.length-1)*wn/2;for(let m=0;m<c.length;m++){const d=c[m],h=-f+m*wn,b=r.get(d.edgeId);b&&(b[d.segIdx].x+=h,b[d.segIdx+1].x+=h)}}}return e.map(i=>{const o=r.get(i.id);return o?{...i,_routedPoints:o}:i})}function xr(e,t,n){if(e.length<2)return[];const r=[...e].sort((c,f)=>c[t]-f[t]),i=[];let o=[r[0]];for(let c=1;c<r.length;c++){const f=o[o.length-1];r[c][t]<f[n]?o.push(r[c]):(o.length>1&&i.push(o),o=[r[c]])}return o.length>1&&i.push(o),i}function zn(e,t=6,n=!1){if(!e||e.length<2)return null;if(n)return zo(e);const r=t;let i=`M ${e[0].x},${e[0].y}`;for(let o=1;o<e.length-1;o++){const c=e[o-1],f=e[o],m=e[o+1],d=Math.abs(f.x-c.x)+Math.abs(f.y-c.y),h=Math.abs(m.x-f.x)+Math.abs(m.y-f.y),b=Math.min(r,d/2,h/2);if(b>.5){const k=f.x-c.x,S=f.y-c.y,P=m.x-f.x,F=m.y-f.y,j=Math.sqrt(k*k+S*S)||1,A=Math.sqrt(P*P+F*F)||1;i+=` L ${f.x-k/j*b},${f.y-S/j*b}`,i+=` Q ${f.x},${f.y} ${f.x+P/A*b},${f.y+F/A*b}`}else i+=` L ${f.x},${f.y}`}return i+=` L ${e[e.length-1].x},${e[e.length-1].y}`,i}function zo(e){if(e.length===2)return`M ${e[0].x},${e[0].y} L ${e[1].x},${e[1].y}`;if(e.length===3)return`M ${e[0].x},${e[0].y} Q ${e[1].x},${e[1].y} ${e[2].x},${e[2].y}`;const t=.3;let n=`M ${e[0].x},${e[0].y}`;for(let r=0;r<e.length-1;r++){const i=e[r===0?0:r-1],o=e[r],c=e[r+1],f=e[r+2<e.length?r+2:e.length-1],m=o.x+(c.x-i.x)*t,d=o.y+(c.y-i.y)*t,h=c.x-(f.x-o.x)*t,b=c.y-(f.y-o.y)*t;n+=` C ${m},${d} ${h},${b} ${c.x},${c.y}`}return n}function Pn(e){if(!e||e.length<2)return{x:0,y:0};let t=0;for(let r=1;r<e.length;r++)t+=Math.abs(e[r].x-e[r-1].x)+Math.abs(e[r].y-e[r-1].y);let n=t/2;for(let r=1;r<e.length;r++){const i=Math.abs(e[r].x-e[r-1].x)+Math.abs(e[r].y-e[r-1].y);if(n<=i){const o=i>0?n/i:0;return{x:e[r-1].x+(e[r].x-e[r-1].x)*o,y:e[r-1].y+(e[r].y-e[r-1].y)*o}}n-=i}return{x:e[0].x,y:e[0].y}}function Po(e,t){if(!e||!t||e.length===0||t.length===0)return t;const n={};for(const o of e)n[o.id]=o;const r=or(e,null),i=t.map(o=>{var N,O,U,Y;const c=o.type||"default";if(c==="bezier"||c==="simplebezier"||c==="default")return o;const f=n[o.source],m=n[o.target];if(!f||!m||f.hidden||m.hidden)return o;const d=yr(f,"source",o.sourceHandle),h=yr(m,"target",o.targetHandle),b=Sn(d,En),k=Sn(h,En),S=5,P=r.filter(w=>w.id!==o.source&&w.id!==o.target),F=f._absolutePosition||f.position,j=f.width||((N=f.measured)==null?void 0:N.width)||kn,A=f.height||((O=f.measured)==null?void 0:O.height)||Cn;P.push({id:o.source,x:F.x-S,y:F.y-S,w:j+2*S,h:A+2*S});const X=m._absolutePosition||m.position,B=m.width||((U=m.measured)==null?void 0:U.width)||kn,_=m.height||((Y=m.measured)==null?void 0:Y.height)||Cn;if(P.push({id:o.target,x:X.x-S,y:X.y-S,w:B+2*S,h:_+2*S}),P.length===0)return o;const $=Br(b,k,P);return $&&$.length>=2?($.unshift({x:d.x,y:d.y}),$.push({x:h.x,y:h.y}),{...o,_routedPoints:$}):o});return So(i)}function No(e,t,n,r,i,o,c,f){const m=or(c,f?new Set(f):null);if(m.length===0)return null;const d={x:e,y:t,dir:i||"right"},h={x:n,y:r,dir:o||"left"},b=Sn(d,En),k=Sn(h,En),S=Br(b,k,m);return S&&S.length>=2?(S.unshift({x:d.x,y:d.y}),S.push({x:h.x,y:h.y}),S):null}const sr=a.memo(function({id:t,sourceX:n,sourceY:r,targetX:i,targetY:o,label:c,labelStyle:f,labelShowBg:m,labelBgStyle:d,labelBgPadding:h,labelBgBorderRadius:b,style:k,markerEnd:S,markerStart:P,interactionWidth:F,routedPoints:j}){let A,X,B;if(j&&j.length>=2){A=zn(j);const _=Pn(j);X=_.x,B=_.y}else[A,X,B]=tr({sourceX:n,sourceY:r,targetX:i,targetY:o});return I.jsx(ln,{id:t,path:A,labelX:X,labelY:B,label:c,labelStyle:f,labelShowBg:m,labelBgStyle:d,labelBgPadding:h,labelBgBorderRadius:b,style:k,markerEnd:S,markerStart:P,interactionWidth:F})});sr.displayName="StraightEdge";const ir=a.memo(function({id:t,sourceX:n,sourceY:r,targetX:i,targetY:o,sourcePosition:c="bottom",targetPosition:f="top",label:m,labelStyle:d,labelShowBg:h,labelBgStyle:b,labelBgPadding:k,labelBgBorderRadius:S,style:P,markerEnd:F,markerStart:j,pathOptions:A,interactionWidth:X,routedPoints:B}){let _,$,N;if(B&&B.length>=2){_=zn(B);const O=Pn(B);$=O.x,N=O.y}else[_,$,N]=Rn({sourceX:n,sourceY:r,sourcePosition:c,targetX:i,targetY:o,targetPosition:f,borderRadius:A==null?void 0:A.borderRadius,offset:A==null?void 0:A.offset});return I.jsx(ln,{id:t,path:_,labelX:$,labelY:N,label:m,labelStyle:d,labelShowBg:h,labelBgStyle:b,labelBgPadding:k,labelBgBorderRadius:S,style:P,markerEnd:F,markerStart:j,interactionWidth:X})});ir.displayName="SmoothStepEdge";const $r=a.memo(function({id:t,...n}){var i;const r=a.useMemo(()=>{var o;return{borderRadius:0,offset:(o=n.pathOptions)==null?void 0:o.offset}},[(i=n.pathOptions)==null?void 0:i.offset]);return I.jsx(ir,{...n,id:t,pathOptions:r})});$r.displayName="StepEdge";const ar=a.memo(function({id:t,sourceX:n,sourceY:r,targetX:i,targetY:o,sourcePosition:c,targetPosition:f,label:m,labelStyle:d,labelShowBg:h,labelBgStyle:b,labelBgPadding:k,labelBgBorderRadius:S,style:P,markerEnd:F,markerStart:j,interactionWidth:A,routedPoints:X}){let B,_,$;if(X&&X.length>=2){B=zn(X);const N=Pn(X);_=N.x,$=N.y}else[B,_,$]=rr({sourceX:n,sourceY:r,targetX:i,targetY:o});return I.jsx(ln,{id:t,path:B,labelX:_,labelY:$,label:m,labelStyle:d,labelShowBg:h,labelBgStyle:b,labelBgPadding:k,labelBgBorderRadius:S,style:P,markerEnd:F,markerStart:j,interactionWidth:A})});ar.displayName="SimpleBezierEdge";const Io={input:Pr,output:Nr,group:Ir},To={bezier:er,straight:sr,simplebezier:ar},Lo=160,Bo=60;function $o(e){let t=!1;for(let n=0;n<e.length;n++){const r=e[n];if(!r.measured||r.measured.width==null||r.measured.height==null){t=!0;break}}return t?e.map(n=>{var r,i;return((r=n.measured)==null?void 0:r.width)!=null&&((i=n.measured)==null?void 0:i.height)!=null?n:{...n,measured:{width:n.width||Lo,height:n.height||Bo}}}):e}function jo({cards:e,nodes:t=[],edges:n=[],nodeTypes:r,edgeTypes:i,canvasNodeTypes:o,domNodeLimit:c=50,dark:f,gridSize:m,width:d="100%",height:h="420px",className:b="",style:k={},zoomMin:S,zoomMax:P,initialCamera:F,fitView:j,fitViewOptions:A,onNodesChange:X,onEdgesChange:B,onConnect:_,onConnectStart:$,onConnectEnd:N,onNodeClick:O,onNodeDoubleClick:U,onNodeMouseEnter:Y,onNodeMouseMove:w,onNodeMouseLeave:g,onNodeContextMenu:v,onNodeDragStart:L,onNodeDrag:E,onNodeDragStop:D,onEdgeClick:K,onEdgeDoubleClick:ae,onEdgeMouseEnter:ee,onEdgeMouseMove:oe,onEdgeMouseLeave:ye,onEdgeContextMenu:we,onPaneClick:Me,onPaneContextMenu:le,onPaneMouseEnter:Se,onPaneMouseMove:se,onPaneMouseLeave:fe,onSelectionChange:be,onInit:We,onMoveStart:xe,onMove:ue,onMoveEnd:Te,onDelete:He,onBeforeDelete:Fe,onError:rt,onDragOver:ht,onDrop:$e,onDragEnter:Le,onDragLeave:ze,nodesDraggable:Qe,nodesConnectable:Je,elementsSelectable:Ae,multiSelectionKeyCode:ot,selectionOnDrag:zt,selectionMode:De,connectionMode:et,connectionRadius:tt,connectOnClick:un,isValidConnection:dn,defaultEdgeOptions:qt,snapToGrid:pt,snapGrid:mt,deleteKeyCode:Pt,panActivationKeyCode:Nn,panOnScroll:In,panOnScrollMode:st,panOnScrollSpeed:cr,zoomOnScroll:Tn,zoomOnDoubleClick:Ln,zoomOnPinch:Nt,preventScrolling:It,translateExtent:Bn,nodeExtent:$n,autoPanOnNodeDrag:jn,autoPanOnConnect:kt,autoPanSpeed:ve,edgesReconnectable:Tt,elevateNodesOnSelect:Pe,elevateEdgesOnSelect:he,noDragClassName:vt,noPanClassName:te,onSelectionDragStart:Ne,onSelectionDrag:fn,onSelectionDragStop:Lt,edgeRouting:Bt=!0,onHudUpdate:$t,onNodesProcessed:An,showHud:Ye=!0,showHint:Oe=!0,hintText:jt="Drag to pan · Scroll to zoom",children:it,...hn}){const[Ve,gn]=a.useState({wx:0,wy:0,zoom:"1.00"}),yn=a.useRef(null),Zt=a.useRef(null),xn=a.useCallback(W=>{gn(W),$t==null||$t(W)},[$t]),bt=a.useMemo(()=>({...Io,...r}),[r]),at=a.useMemo(()=>({...To,...i}),[i]),Ke=a.useMemo(()=>$o(t),[t]),[J,ct]=a.useState(()=>new Set),Ct=a.useRef(J);Ct.current=J;const At=a.useCallback(W=>{ct(pe=>{const ne=new Set(pe);return ne.add(W),ne})},[]),Dt=a.useCallback(W=>{ct(pe=>{const ne=new Set(pe);return ne.delete(W),ne})},[]),Ht=a.useCallback(W=>{ct(pe=>{const ne=new Set(pe);return ne.has(W)?ne.delete(W):ne.add(W),ne})},[]),wt=a.useMemo(()=>Ke.filter(W=>W.type&&bt[W.type]),[Ke,bt]),_t=a.useMemo(()=>n.filter(W=>W.type&&at[W.type]),[n,at]),[Wt,Ft]=a.useState(()=>new Set),Yt=a.useRef(new Set),Ce=a.useMemo(()=>{const W=new Set(Wt);for(const ne of J)W.add(ne);for(const ne of wt)(ne.selected||ne.dragging)&&W.add(ne.id);const pe=Yt.current;if(pe.size===W.size){let ne=!0;for(const Ee of W)if(!pe.has(Ee)){ne=!1;break}if(ne)return pe}return Yt.current=W,W},[wt,J,Wt]),gt=a.useMemo(()=>{if(c===0)return[];const W=Ke.filter(pe=>Ce.has(pe.id));return W.sort((pe,ne)=>{const Ee=pe.type==="group"||!pe.parentId&&W.some(y=>y.parentId===pe.id),u=ne.type==="group"||!ne.parentId&&W.some(y=>y.parentId===ne.id);return Ee&&!u?-1:!Ee&&u?1:0})},[Ke,Ce,c]),_e=a.useMemo(()=>t.map(W=>Ce.has(W.id)?{...W,_customRendered:!0}:W),[t,Ce]),Dn=a.useMemo(()=>n.map(W=>W.type&&at[W.type]?{...W,_customRendered:!0}:W),[n,at]),{wrapRef:yt,canvasRef:Xt,canvasReady:lt,onPointerDown:Mt,onPointerMove:pn,onPointerUp:Be,store:de}=Mr({cards:e,nodes:_e,edges:Dn,dark:f,gridSize:m,zoomMin:S,zoomMax:P,initialCamera:F,fitView:j,fitViewOptions:A,onHudUpdate:xn,onNodesProcessed:An,onNodesChange:X,onEdgesChange:B,onConnect:_,onConnectStart:$,onConnectEnd:N,onNodeClick:O,onNodeDoubleClick:U,onNodeMouseEnter:Y,onNodeMouseMove:w,onNodeMouseLeave:g,onNodeContextMenu:v,onNodeDragStart:L,onNodeDrag:E,onNodeDragStop:D,onEdgeClick:K,onEdgeDoubleClick:ae,onEdgeMouseEnter:ee,onEdgeMouseMove:oe,onEdgeMouseLeave:ye,onEdgeContextMenu:we,onPaneClick:Me,onPaneContextMenu:le,onPaneMouseEnter:Se,onPaneMouseMove:se,onPaneMouseLeave:fe,onSelectionChange:be,onInit:We,onMoveStart:xe,onMove:ue,onMoveEnd:Te,onDelete:He,onBeforeDelete:Fe,onError:rt,nodesDraggable:Qe,nodesConnectable:Je,elementsSelectable:Ae,multiSelectionKeyCode:ot,selectionOnDrag:zt,selectionMode:De,connectionMode:et,connectionRadius:tt,connectOnClick:un,isValidConnection:dn,defaultEdgeOptions:qt,snapToGrid:pt,snapGrid:mt,deleteKeyCode:Pt,panActivationKeyCode:Nn,panOnScroll:In,panOnScrollMode:st,panOnScrollSpeed:cr,zoomOnScroll:Tn,zoomOnDoubleClick:Ln,zoomOnPinch:Nt,preventScrolling:It,translateExtent:Bn,nodeExtent:$n,autoPanOnNodeDrag:jn,autoPanOnConnect:kt,autoPanSpeed:ve,edgesReconnectable:Tt,elevateNodesOnSelect:Pe,elevateEdgesOnSelect:he,noDragClassName:vt,noPanClassName:te,onSelectionDragStart:Ne,onSelectionDrag:fn,onSelectionDragStop:Lt,edgeRouting:Bt}),Gt=a.useRef(wt);Gt.current=wt;const Qt=a.useRef(c);Qt.current=c,a.useEffect(()=>{let W;const pe=()=>{const Ee=Gt.current,u=Qt.current;if(u===0||!Ee.length)return;const y=de.cameraRef.current,l=de.wrapRef.current;if(!l)return;const p=l.clientWidth,C=l.clientHeight,z=(-y.x+p/2)/y.zoom,x=(-y.y+C/2)/y.zoom,M=Ct.current;let R=M.size;for(const T of Ee)(T.selected||T.dragging)&&R++;const H=Math.max(0,u-R);if(H===0)Ft(T=>T.size===0?T:new Set);else{const T=new Set(M);for(const Z of Ee)(Z.selected||Z.dragging)&&T.add(Z.id);const q=[];for(let Z=0;Z<Ee.length;Z++){const ie=Ee[Z];if(T.has(ie.id))continue;const V=ie._absolutePosition||ie.position,ce=V.x+(ie.width||160)/2-z,ke=V.y+(ie.height||60)/2-x;q.push({id:ie.id,dist:ce*ce+ke*ke})}q.sort((Z,ie)=>Z.dist-ie.dist);const G=new Set;for(let Z=0;Z<Math.min(H,q.length);Z++)G.add(q[Z].id);Ft(Z=>{if(Z.size!==G.size)return G;for(const ie of G)if(!Z.has(ie))return G;return Z})}},ne=setTimeout(pe,100);return W=setInterval(pe,500),()=>{clearTimeout(ne),clearInterval(W)}},[de.cameraRef,de.wrapRef]);const Rt=a.useRef(new Set);a.useEffect(()=>{if(!o||!de.workerRef.current)return;let W=!1;async function pe(Ee){const u=new Blob([Ee],{type:"image/svg+xml"}),y=URL.createObjectURL(u),l=new Image;return l.src=y,await l.decode(),URL.revokeObjectURL(y),createImageBitmap(l)}async function ne(){var p,C,z;const Ee={},u=[],y={},l={};for(const[x,M]of Object.entries(o)){if(typeof M=="function"){y[x]=M;continue}if(typeof M=="object"&&M!==null&&!(M instanceof ImageBitmap)&&!(M instanceof HTMLImageElement)&&!(M instanceof HTMLCanvasElement)&&("fill"in M||"stroke"in M||"title"in M||"accent"in M)){l[x]=M;continue}try{let R;M instanceof ImageBitmap?R=M:typeof M=="string"?R=await pe(M):M instanceof HTMLImageElement?R=await createImageBitmap(M):M instanceof HTMLCanvasElement&&(R=await createImageBitmap(M)),R&&!W&&(Ee[x]=R,u.push(R))}catch(R){console.warn(`[InfiniteCanvas] Failed to convert canvasNodeType "${x}":`,R)}}if(!W&&Object.keys(Ee).length>0&&((p=de.workerRef.current)==null||p.postMessage({type:"nodeTypeBitmaps",data:{bitmaps:Ee}},u)),!W&&Object.keys(l).length>0&&((C=de.workerRef.current)==null||C.postMessage({type:"nodeTypeConfigs",data:{configs:l}})),!W&&Object.keys(y).length>0){const x=new Map,M={},R={},H=[];let T=Rt.current.size;for(const q of t){const G=y[q.type];if(G)try{const Z=G(q.data);if(!Z)continue;let ie=x.get(Z);if(!ie&&(ie="bmp_"+T++,x.set(Z,ie),!Rt.current.has(Z))){const V=await pe(Z);if(W)return;M[ie]=V,H.push(V),Rt.current.add(Z)}R[q.id]=ie}catch(Z){console.warn(`[InfiniteCanvas] canvasNodeType fn error for node "${q.id}":`,Z)}}W||(z=de.workerRef.current)==null||z.postMessage({type:"nodeBitmaps",data:{cache:M,keys:R}},H)}}return ne(),()=>{W=!0}},[o,t,de.workerRef]);const qe=a.useContext(St),Jt=qe&&typeof qe.getState=="function";a.useEffect(()=>{Jt&&queueMicrotask(()=>{qe.setState({nodes:Ke,edges:n,nodesRef:de.nodesRef,edgesRef:de.edgesRef,onNodesChangeRef:de.onNodesChangeRef,onEdgesChangeRef:de.onEdgesChangeRef,cameraRef:de.cameraRef,wrapRef:de.wrapRef,workerRef:de.workerRef})})},[Jt,Ke,n,de,qe]);const Re=a.useMemo(()=>({...de,edgeLabelContainerRef:yn,viewportPortalRef:Zt,pinNode:At,unpinNode:Dt,togglePinNode:Ht,get pinnedNodeIds(){return Ct.current},get nodes(){return Ke},get edges(){return n},get viewport(){return de.cameraRef.current},get minZoom(){return de.zoomMin||.1},get maxZoom(){return de.zoomMax||5},get domNode(){return de.wrapRef.current},get width(){var W;return((W=de.wrapRef.current)==null?void 0:W.clientWidth)||0},get height(){var W;return((W=de.wrapRef.current)==null?void 0:W.clientHeight)||0}}),[de,Ke,n,At,Dt,Ht]),ut=a.useRef(null),dt=a.useRef(null),Vt=a.useRef(null),Kt=a.useRef(null),mn=a.useRef(null);a.useEffect(()=>{let W;const pe=()=>{const ne=de.cameraRef.current,Ee=`translate(${ne.x}px, ${ne.y}px) scale(${ne.zoom})`,u=`translate(${ne.x}, ${ne.y}) scale(${ne.zoom})`;ut.current&&(ut.current.style.transform=Ee),dt.current&&dt.current.setAttribute("transform",u),Vt.current&&(Vt.current.style.transform=Ee),Kt.current&&(Kt.current.style.transform=Ee);const y=yt.current;if(y){const l=ne.zoom<.15?"lod-minimal":ne.zoom<.35?"lod-reduced":null;l!==mn.current&&(y.classList.remove("lod-minimal","lod-reduced"),l&&y.classList.add(l),mn.current=l)}W=requestAnimationFrame(pe)};return W=requestAnimationFrame(pe),()=>cancelAnimationFrame(W)},[de]);const[Ot,Hn]=a.useState(null);a.useEffect(()=>{if(!gt.length)return;let W;const pe=()=>{var M,R;const ne=de.cameraRef.current,Ee=de.wrapRef.current;if(!Ee){W=requestAnimationFrame(pe);return}const u=Ee.getBoundingClientRect(),y=200,l=-ne.x/ne.zoom-y,p=-ne.y/ne.zoom-y,C=(u.width-ne.x)/ne.zoom+y,z=(u.height-ne.y)/ne.zoom+y,x=new Set;for(const H of gt){const T=H._absolutePosition||H.position,q=H.width||((M=H.measured)==null?void 0:M.width)||200,G=H.height||((R=H.measured)==null?void 0:R.height)||100;T.x+q>=l&&T.x<=C&&T.y+G>=p&&T.y<=z&&x.add(H.id)}Hn(H=>{if(!H||H.size!==x.size)return x;for(const T of x)if(!H.has(T))return x;return H}),W=requestAnimationFrame(pe)};return W=requestAnimationFrame(pe),()=>cancelAnimationFrame(W)},[gt,de]);const _n=a.useMemo(()=>Ot?gt.filter(W=>Ot.has(W.id)):gt,[gt,Ot]),Wn=gt.length>0,Fn=_t.length>0;return I.jsx(St.Provider,{value:Re,children:I.jsxs("div",{ref:yt,className:`ric-wrap ${b}`,style:{width:d,height:h,...k},onPointerDown:Mt,onPointerMove:pn,onPointerUp:Be,onDragOver:ht,onDrop:$e,onDragEnter:Le,onDragLeave:ze,tabIndex:0,children:[I.jsx("canvas",{ref:Xt,className:"ric-canvas"}),!lt&&I.jsx("div",{className:"ric-loader",children:I.jsx("div",{className:"ric-spinner"})}),Fn&&I.jsx("svg",{className:"ric-edges-overlay",style:{position:"absolute",top:0,left:0,width:"100%",height:"100%",pointerEvents:"none",overflow:"visible"},children:I.jsx("g",{ref:dt,children:_t.map(W=>I.jsx(yo,{edge:W,edgeType:at[W.type],nodes:t,reconnectable:Tt},W.id))})}),Wn&&I.jsx("div",{ref:ut,className:"ric-nodes-overlay",style:{position:"absolute",top:0,left:0,width:0,height:0,transformOrigin:"0 0",pointerEvents:"none",zIndex:10},children:_n.map(W=>I.jsx(uo,{node:W,nodeType:bt[W.type]},W.id))}),I.jsx("div",{ref:W=>{yn.current=W,Vt.current=W},className:"ric-edge-labels",style:{position:"absolute",top:0,left:0,width:0,height:0,transformOrigin:"0 0",pointerEvents:"none",zIndex:5}}),I.jsx("div",{ref:W=>{Zt.current=W,Kt.current=W},className:"ric-viewport-portal",style:{position:"absolute",top:0,left:0,width:0,height:0,transformOrigin:"0 0",pointerEvents:"none",zIndex:6}}),Oe&&I.jsx("div",{className:"ric-hint",children:jt}),Ye&&I.jsxs("div",{className:"ric-info",children:["world: (",Ve.wx,", ",Ve.wy,")   zoom: ",Ve.zoom,"x",Ve.nodeCount>0&&I.jsxs(I.Fragment,{children:["   nodes: ",Ve.nodeCount]}),Ve.edgeCount>0&&I.jsxs(I.Fragment,{children:["   edges: ",Ve.edgeCount]})]}),I.jsx(Sr,{selectionKeyCode:ot||"Shift",selectionMode:De||"partial"}),it]})})}function Ao({children:e}){const t=a.useRef(null);return t.current||(t.current=ao()),I.jsx(St.Provider,{value:t.current,children:e})}function jr(e,t){const n=[],r=new Map,i=[];for(const o of e)if(o.type==="add")i.push(o);else if(o.type==="remove"||o.type==="replace")r.set(o.id,[o]);else{const c=r.get(o.id);c?c.push(o):r.set(o.id,[o])}for(const o of t){const c=r.get(o.id);if(!c){n.push(o);continue}if(c[0].type==="remove")continue;if(c[0].type==="replace"){n.push({...c[0].item});continue}const f={...o};for(const m of c)Do(m,f);n.push(f)}for(const o of i)o.index!==void 0?n.splice(o.index,0,{...o.item}):n.push({...o.item});return n}function Do(e,t){switch(e.type){case"select":t.selected=e.selected;break;case"position":e.position!==void 0&&(t.position=e.position),e.dragging!==void 0&&(t.dragging=e.dragging);break;case"dimensions":e.dimensions!==void 0&&(t.measured={...e.dimensions},(e.setAttributes===!0||e.setAttributes==="width")&&(t.width=e.dimensions.width),(e.setAttributes===!0||e.setAttributes==="height")&&(t.height=e.dimensions.height)),e.handleBounds!==void 0&&(t.handleBounds=e.handleBounds);break}}function Ar(e,t){return jr(e,t)}function Dr(e,t){return jr(e,t)}function Ho(e,t){return!e.source||!e.target?(console.warn("addEdge: source and target are required"),t):t.some(r=>r.source===e.source&&r.target===e.target&&(r.sourceHandle||null)===(e.sourceHandle||null)&&(r.targetHandle||null)===(e.targetHandle||null))?t:[...t,{id:e.id||`e-${e.source}-${e.target}`,...e}]}function _o(e){const[t,n]=a.useState(e),r=a.useCallback(i=>n(o=>Ar(i,o)),[]);return[t,n,r]}function Wo(e){const[t,n]=a.useState(e),r=a.useCallback(i=>n(o=>Dr(i,o)),[]);return[t,n,r]}function Hr(){const e=Rr(),t=a.useCallback(()=>typeof e.getState=="function"?e.getState():e,[e]),n=a.useCallback(()=>[...t().nodesRef.current],[t]),r=a.useCallback(()=>[...t().edgesRef.current],[t]),i=a.useCallback(w=>t().nodesRef.current.find(g=>g.id===w),[t]),o=a.useCallback(w=>t().edgesRef.current.find(g=>g.id===w),[t]),c=a.useCallback(w=>{var g,v,L,E;if(typeof w=="function"){const D=w(t().nodesRef.current);(v=(g=t().onNodesChangeRef).current)==null||v.call(g,[...t().nodesRef.current.map(K=>({id:K.id,type:"remove"})),...D.map(K=>({type:"add",item:K}))])}else(E=(L=t().onNodesChangeRef).current)==null||E.call(L,[...t().nodesRef.current.map(D=>({id:D.id,type:"remove"})),...w.map(D=>({type:"add",item:D}))])},[t]),f=a.useCallback(w=>{var g,v,L,E;if(typeof w=="function"){const D=w(t().edgesRef.current);(v=(g=t().onEdgesChangeRef).current)==null||v.call(g,[...t().edgesRef.current.map(K=>({id:K.id,type:"remove"})),...D.map(K=>({type:"add",item:K}))])}else(E=(L=t().onEdgesChangeRef).current)==null||E.call(L,[...t().edgesRef.current.map(D=>({id:D.id,type:"remove"})),...w.map(D=>({type:"add",item:D}))])},[t]),m=a.useCallback(w=>{var v,L;const g=Array.isArray(w)?w:[w];(L=(v=t().onNodesChangeRef).current)==null||L.call(v,g.map(E=>({type:"add",item:E})))},[t]),d=a.useCallback(w=>{var v,L;const g=Array.isArray(w)?w:[w];(L=(v=t().onEdgesChangeRef).current)==null||L.call(v,g.map(E=>({type:"add",item:E})))},[t]),h=a.useCallback(({nodes:w=[],edges:g=[]})=>{if(w.length&&t().onNodesChangeRef.current){t().onNodesChangeRef.current(w.map(L=>({id:L.id,type:"remove"})));const v=br(w,t().edgesRef.current);v.length&&t().onEdgesChangeRef.current&&t().onEdgesChangeRef.current(v.map(L=>({id:L.id,type:"remove"})))}g.length&&t().onEdgesChangeRef.current&&t().onEdgesChangeRef.current(g.map(v=>({id:v.id,type:"remove"})))},[t]),b=a.useCallback(()=>{const w=t().cameraRef.current;return{x:w.x,y:w.y,zoom:w.zoom}},[t]),k=a.useRef(null),S=a.useCallback((w,g)=>{if(k.current&&cancelAnimationFrame(k.current),!g||g<=0){t().cameraRef.current={...w},t().sendCamera();return}const v={...t().cameraRef.current},L=performance.now(),E=D=>{const K=D-L,ae=Math.min(K/g,1),ee=1-Math.pow(1-ae,3);t().cameraRef.current={x:v.x+(w.x-v.x)*ee,y:v.y+(w.y-v.y)*ee,zoom:v.zoom+(w.zoom-v.zoom)*ee},t().sendCamera(),ae<1&&(k.current=requestAnimationFrame(E))};k.current=requestAnimationFrame(E)},[t]),P=a.useCallback((w,g)=>{const v={x:w.x??t().cameraRef.current.x,y:w.y??t().cameraRef.current.y,zoom:w.zoom??t().cameraRef.current.zoom};S(v,g==null?void 0:g.duration)},[t,S]),F=a.useCallback(()=>t().cameraRef.current.zoom,[t]),j=a.useCallback(w=>{const g=t().cameraRef.current,v=t().wrapRef.current;if(!v)return;const L=v.getBoundingClientRect(),E=L.width/2,D=L.height/2,K=1.2,ae={x:E-(E-g.x)*K,y:D-(D-g.y)*K,zoom:Math.min(t().zoomMax,g.zoom*K)};S(ae,w==null?void 0:w.duration)},[t,S]),A=a.useCallback(w=>{const g=t().cameraRef.current,v=t().wrapRef.current;if(!v)return;const L=v.getBoundingClientRect(),E=L.width/2,D=L.height/2,K=1/1.2,ae={x:E-(E-g.x)*K,y:D-(D-g.y)*K,zoom:Math.max(t().zoomMin,g.zoom*K)};S(ae,w==null?void 0:w.duration)},[t,S]),X=a.useCallback((w,g)=>{const v=t().cameraRef.current,L=t().wrapRef.current;if(!L)return;const E=L.getBoundingClientRect(),D=E.width/2,K=E.height/2,ae=Math.min(t().zoomMax,Math.max(t().zoomMin,w)),ee=ae/v.zoom,oe={x:D-(D-v.x)*ee,y:K-(K-v.y)*ee,zoom:ae};S(oe,g==null?void 0:g.duration)},[t,S]),B=a.useCallback((w={})=>{const g=t().nodesRef.current;if(!g.length)return;const v=t().wrapRef.current;if(!v)return;const L=v.getBoundingClientRect(),E=w.padding??.1,D=w.nodes?g.filter(ee=>w.nodes.some(oe=>oe.id===ee.id)):g;if(!D.length)return;const K=Mn(D),ae=Ut(K,L.width,L.height,E);w.maxZoom&&(ae.zoom=Math.min(ae.zoom,w.maxZoom)),w.minZoom&&(ae.zoom=Math.max(ae.zoom,w.minZoom)),S(ae,w.duration)},[t,S]),_=a.useCallback((w,g={})=>{const v=t().wrapRef.current;if(!v)return;const L=v.getBoundingClientRect(),E=g.padding??.1,D=Ut(w,L.width,L.height,E);g.maxZoom&&(D.zoom=Math.min(D.zoom,g.maxZoom)),g.minZoom&&(D.zoom=Math.max(D.zoom,g.minZoom)),S(D,g.duration)},[t,S]),$=a.useCallback((w,g,v={})=>{const L=t().wrapRef.current;if(!L)return;const E=L.getBoundingClientRect(),D=v.zoom??t().cameraRef.current.zoom,K={x:E.width/2-w*D,y:E.height/2-g*D,zoom:D};S(K,v.duration)},[t,S]),N=a.useCallback(()=>({nodes:[...t().nodesRef.current],edges:[...t().edgesRef.current],viewport:{...t().cameraRef.current}}),[t]),O=a.useCallback(w=>t().screenToWorld(w.x,w.y),[t]),U=a.useCallback(w=>{const g=t().cameraRef.current,v=t().wrapRef.current;if(!v)return{x:0,y:0};const L=v.getBoundingClientRect();return{x:w.x*g.zoom+g.x+L.left,y:w.y*g.zoom+g.y+L.top}},[t]),Y=a.useCallback((w,g)=>{var E,D;const v=t().nodesRef.current.find(K=>K.id===w);if(!v)return;const L=typeof g=="function"?g(v.data):{...v.data,...g};(D=(E=t().onNodesChangeRef).current)==null||D.call(E,[{id:w,type:"replace",item:{...v,data:L}}])},[t]);return{getNodes:n,getEdges:r,getNode:i,getEdge:o,setNodes:c,setEdges:f,addNodes:m,addEdges:d,deleteElements:h,getViewport:b,setViewport:P,getZoom:F,zoomIn:j,zoomOut:A,zoomTo:X,fitView:B,fitBounds:_,setCenter:$,screenToFlowPosition:O,flowToScreenPosition:U,updateNodeData:Y,toObject:N}}function Fo(){return Ie().nodes}function Yo(){return Ie().edges}function Xo(){return Ie().viewport}function Oo(){return Ie().connection}function Uo(e){const t=Ie(),n=Array.isArray(e)?e:[e];return a.useMemo(()=>n.map(r=>{const i=t.nodes.find(o=>o.id===r);return i?{id:i.id,type:i.type,data:i.data}:null}).filter(Boolean),[t.nodes,...n])}function qo(e){const t=Ie();return a.useMemo(()=>t.edges.filter(n=>n.source===e||n.target===e),[t.edges,e])}function Zo({nodeId:e,type:t,handleId:n}){const r=Ie();return a.useMemo(()=>r.edges.filter(i=>t==="source"?i.source===e&&(n?i.sourceHandle===n:!0):i.target===e&&(n?i.targetHandle===n:!0)),[r.edges,e,t,n])}function Go({onChange:e,onStart:t,onEnd:n}){const r=Ie(),i=a.useRef(e),o=a.useRef(t),c=a.useRef(n);a.useEffect(()=>{i.current=e},[e]),a.useEffect(()=>{o.current=t},[t]),a.useEffect(()=>{c.current=n},[n]),a.useEffect(()=>{const f=m=>{var d;(d=i.current)==null||d.call(i,{x:m.x,y:m.y,zoom:m.zoom})};return r.viewportListeners.add(f),()=>r.viewportListeners.delete(f)},[s])}function Qo({onChange:e}){const t=Ie(),n=a.useRef(e);a.useEffect(()=>{n.current=e},[e]),a.useEffect(()=>{const r=i=>{var o;(o=n.current)==null||o.call(n,i)};return t.selectionListeners.add(r),()=>t.selectionListeners.delete(r)},[s])}function Jo(e){const[t,n]=a.useState(!1),r=Array.isArray(e)?e:[e];return a.useEffect(()=>{const i=c=>{r.includes(c.key)&&n(!0)},o=c=>{r.includes(c.key)&&n(!1)};return window.addEventListener("keydown",i),window.addEventListener("keyup",o),()=>{window.removeEventListener("keydown",i),window.removeEventListener("keyup",o)}},[r.join(",")]),t}function Vo(){const e=Ie();return a.useCallback(t=>{var n;(n=e.workerRef.current)==null||n.postMessage({type:"nodes",data:{nodes:[...s().nodesRef.current]}})},[s])}const Ko=e=>{var t;return((t=e.nodes)==null?void 0:t.length)>0};function es(e={}){return Ie(Ko)}function ts(e){const t=Ie();return a.useMemo(()=>t.nodes.find(n=>n.id===e)||void 0,[t.nodes,e])}function ns(e,t){return Ie(e,t)}function rs(){return Rr()}function os({maxHistorySize:e=100}={}){const t=Ie(),n=a.useRef([]),r=a.useRef([]),[,i]=a.useState(0),o=a.useRef(null),c=a.useCallback(()=>{const d={nodes:s().nodesRef.current.map(h=>({...h,data:{...h.data}})),edges:s().edgesRef.current.map(h=>({...h}))};o.current&&JSON.stringify(o.current.nodes.map(h=>h.id))===JSON.stringify(d.nodes.map(h=>h.id))&&JSON.stringify(o.current.edges.map(h=>h.id))===JSON.stringify(d.edges.map(h=>h.id))||(n.current.push(d),n.current.length>e&&n.current.shift(),r.current=[],o.current=d,i(h=>h+1))},[t,e]),f=a.useCallback(()=>{var h,b,k,S;const d=n.current.pop();d&&(r.current.push({nodes:s().nodesRef.current.map(P=>({...P,data:{...P.data}})),edges:s().edgesRef.current.map(P=>({...P}))}),(b=(h=s().onNodesChangeRef).current)==null||b.call(h,[...s().nodesRef.current.map(P=>({id:P.id,type:"remove"})),...d.nodes.map(P=>({type:"add",item:P}))]),(S=(k=s().onEdgesChangeRef).current)==null||S.call(k,[...s().edgesRef.current.map(P=>({id:P.id,type:"remove"})),...d.edges.map(P=>({type:"add",item:P}))]),o.current=d,i(P=>P+1))},[s]),m=a.useCallback(()=>{var h,b,k,S;const d=r.current.pop();d&&(n.current.push({nodes:s().nodesRef.current.map(P=>({...P,data:{...P.data}})),edges:s().edgesRef.current.map(P=>({...P}))}),(b=(h=s().onNodesChangeRef).current)==null||b.call(h,[...s().nodesRef.current.map(P=>({id:P.id,type:"remove"})),...d.nodes.map(P=>({type:"add",item:P}))]),(S=(k=s().onEdgesChangeRef).current)==null||S.call(k,[...s().edgesRef.current.map(P=>({id:P.id,type:"remove"})),...d.edges.map(P=>({type:"add",item:P}))]),o.current=d,i(P=>P+1))},[s]);return{undo:f,redo:m,takeSnapshot:c,canUndo:n.current.length>0,canRedo:r.current.length>0}}function ss(e){const t=a.useRef(e);return a.useEffect(()=>{t.current=e},[e]),a.useCallback(n=>r=>{const i=t.current(r);i!==!1&&i!=null&&n(Array.isArray(i)?i:r)},[])}function is(e){const t=a.useRef(e);return a.useEffect(()=>{t.current=e},[e]),a.useCallback(n=>r=>{const i=t.current(r);i!==!1&&i!=null&&n(Array.isArray(i)?i:r)},[])}const Un=160,qn=60;function as({width:e=200,height:t=150,nodeColor:n="#3b82f6",nodeStrokeColor:r="#fff",maskColor:i="rgba(0,0,0,0.1)",style:o={},className:c=""}){const f=Ie(),m=a.useRef(null),d=a.useRef(null),h=a.useCallback(()=>{const b=m.current;if(!b)return;const k=b.getContext("2d"),S=window.devicePixelRatio||1;b.width=e*S,b.height=t*S,k.scale(S,S),k.clearRect(0,0,e,t);const P=f.nodesRef.current;if(!P.length)return;let F=1/0,j=1/0,A=-1/0,X=-1/0;for(const g of P){const v=g.width||Un,L=g.height||qn;g.position.x<F&&(F=g.position.x),g.position.y<j&&(j=g.position.y),g.position.x+v>A&&(A=g.position.x+v),g.position.y+L>X&&(X=g.position.y+L)}const B=40;F-=B,j-=B,A+=B,X+=B;const _=A-F,$=X-j,N=Math.min(e/_,t/$),O=(e-_*N)/2,U=(t-$*N)/2;for(const g of P){if(g.hidden)continue;const v=g.width||Un,L=g.height||qn,E=(g.position.x-F)*N+O,D=(g.position.y-j)*N+U,K=v*N,ae=L*N;k.fillStyle=g.selected?"#f59e0b":typeof n=="function"?n(g):n,k.fillRect(E,D,Math.max(K,2),Math.max(ae,2))}const Y=f.cameraRef.current,w=f.wrapRef.current;if(w){const g=w.getBoundingClientRect(),v=-Y.x/Y.zoom,L=-Y.y/Y.zoom,E=g.width/Y.zoom,D=g.height/Y.zoom;k.fillStyle=i,k.fillRect(0,0,e,t);const K=(v-F)*N+O,ae=(L-j)*N+U,ee=E*N,oe=D*N;k.clearRect(K,ae,ee,oe);for(const ye of P){if(ye.hidden)continue;const we=ye.width||Un,Me=ye.height||qn,le=(ye.position.x-F)*N+O,Se=(ye.position.y-j)*N+U;k.fillStyle=ye.selected?"#f59e0b":typeof n=="function"?n(ye):n,k.fillRect(le,Se,Math.max(we*N,2),Math.max(Me*N,2))}k.strokeStyle="#3b82f6",k.lineWidth=1.5,k.strokeRect(K,ae,ee,oe)}},[f,e,t,n,r,i]);return a.useEffect(()=>{let b=!0;function k(){b&&(h(),d.current=requestAnimationFrame(k))}const S=setInterval(()=>{cancelAnimationFrame(d.current),d.current=requestAnimationFrame(k)},66);return h(),()=>{b=!1,clearInterval(S),cancelAnimationFrame(d.current)}},[h]),I.jsx("canvas",{ref:m,className:`ric-minimap ${c}`,style:{position:"absolute",bottom:30,right:10,width:e,height:t,borderRadius:4,border:"1px solid rgba(0,0,0,0.1)",background:"rgba(255,255,255,0.9)",pointerEvents:"none",...o}})}function cs(){return I.jsxs("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",width:"16",height:"16",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:[I.jsx("line",{x1:"12",y1:"5",x2:"12",y2:"19"}),I.jsx("line",{x1:"5",y1:"12",x2:"19",y2:"12"})]})}function ls(){return I.jsx("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",width:"16",height:"16",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:I.jsx("line",{x1:"5",y1:"12",x2:"19",y2:"12"})})}function us(){return I.jsx("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",width:"16",height:"16",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:I.jsx("path",{d:"M15 3h6v6M9 21H3v-6M21 3l-7 7M3 21l7-7"})})}function ds(){return I.jsxs("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",width:"16",height:"16",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:[I.jsx("rect",{x:"3",y:"11",width:"18",height:"11",rx:"2"}),I.jsx("path",{d:"M7 11V7a5 5 0 0 1 10 0v4"})]})}function fs(){return I.jsxs("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",width:"16",height:"16",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:[I.jsx("rect",{x:"3",y:"11",width:"18",height:"11",rx:"2"}),I.jsx("path",{d:"M7 11V7a5 5 0 0 1 9.9-1"})]})}function sn({children:e,className:t="",...n}){return I.jsx("button",{className:`ric-controls-button ${t}`,style:gs,...n,children:e})}function hs({showZoom:e=!0,showFitView:t=!0,showInteractive:n=!1,fitViewOptions:r,onZoomIn:i,onZoomOut:o,onFitView:c,onInteractiveChange:f,position:m="bottom-left",orientation:d="vertical",style:h={},className:b="","aria-label":k="Canvas controls",children:S}){const P=Ie(),{zoomIn:F,zoomOut:j,fitView:A,getZoom:X}=Hr(),[B,_]=a.useState(!0),$=X()<=P.zoomMin,N=X()>=P.zoomMax,O=a.useCallback(()=>{F(),i==null||i()},[F,i]),U=a.useCallback(()=>{j(),o==null||o()},[j,o]),Y=a.useCallback(()=>{A(r||{padding:.1}),c==null||c()},[A,r,c]),w=a.useCallback(()=>{const v=!B;_(v),f==null||f(v)},[B,f]),g={"top-left":{top:10,left:10},"top-right":{top:10,right:10},"top-center":{top:10,left:"50%",transform:"translateX(-50%)"},"bottom-left":{bottom:30,left:10},"bottom-right":{bottom:30,right:10},"bottom-center":{bottom:30,left:"50%",transform:"translateX(-50%)"}}[m]||{bottom:30,left:10};return I.jsxs("div",{className:`ric-controls ${b}`,style:{position:"absolute",display:"flex",flexDirection:d==="horizontal"?"row":"column",gap:2,zIndex:5,...g,...h},role:"toolbar","aria-label":k,children:[e&&I.jsxs(I.Fragment,{children:[I.jsx(sn,{onClick:O,disabled:N,title:"Zoom in","aria-label":"Zoom in",className:"ric-controls-zoomin",children:I.jsx(cs,{})}),I.jsx(sn,{onClick:U,disabled:$,title:"Zoom out","aria-label":"Zoom out",className:"ric-controls-zoomout",children:I.jsx(ls,{})})]}),t&&I.jsx(sn,{onClick:Y,title:"Fit view","aria-label":"Fit view",className:"ric-controls-fitview",children:I.jsx(us,{})}),n&&I.jsx(sn,{onClick:w,title:B?"Lock interactivity":"Unlock interactivity","aria-label":B?"Lock interactivity":"Unlock interactivity",className:"ric-controls-interactive",children:B?I.jsx(fs,{}):I.jsx(ds,{})}),S]})}const gs={width:28,height:28,display:"flex",alignItems:"center",justifyContent:"center",border:"1px solid rgba(0,0,0,0.12)",borderRadius:4,background:"#fff",cursor:"pointer",fontSize:16,lineHeight:1,color:"#333",padding:0},ys=a.memo(hs);function xs({variant:e="lines",gap:t=40,size:n=1,color:r,style:i={},className:o=""}){const c=Ie();return c.workerRef.current&&c.workerRef.current.postMessage({type:"background",data:{variant:e,gap:t,size:n,color:r}}),null}function ps({position:e="top-left",style:t={},className:n="",children:r}){const i={"top-left":{top:10,left:10},"top-right":{top:10,right:10},"top-center":{top:10,left:"50%",transform:"translateX(-50%)"},"bottom-left":{bottom:10,left:10},"bottom-right":{bottom:10,right:10},"bottom-center":{bottom:10,left:"50%",transform:"translateX(-50%)"}}[e]||{top:10,left:10};return I.jsx("div",{className:`ric-panel ${n}`,style:{position:"absolute",zIndex:5,pointerEvents:"all",...i,...t},onPointerDown:o=>o.stopPropagation(),children:r})}function ms({minWidth:e=10,minHeight:t=10,maxWidth:n=1/0,maxHeight:r=1/0,isVisible:i=!0,handleStyle:o={},lineStyle:c={},color:f="#3b82f6",onResizeStart:m,onResize:d,onResizeEnd:h}){const b=a.useContext(cn),k=Ie(),S=a.useRef(null),P=a.useCallback((A,X)=>{A.stopPropagation(),A.preventDefault();const B=k.nodesRef.current.find(N=>N.id===b);if(!B)return;S.current={direction:X,startX:A.clientX,startY:A.clientY,width:B.width||160,height:B.height||60},m==null||m(A,{width:S.current.width,height:S.current.height});const _=N=>{var L,E;if(!S.current)return;const O=S.current,U=k.cameraRef.current,Y=(N.clientX-O.startX)/U.zoom,w=(N.clientY-O.startY)/U.zoom;let g=O.width,v=O.height;O.direction.includes("e")&&(g=Math.min(n,Math.max(e,O.width+Y))),O.direction.includes("w")&&(g=Math.min(n,Math.max(e,O.width-Y))),O.direction.includes("s")&&(v=Math.min(r,Math.max(t,O.height+w))),O.direction.includes("n")&&(v=Math.min(r,Math.max(t,O.height-w))),(E=(L=k.onNodesChangeRef).current)==null||E.call(L,[{id:b,type:"dimensions",dimensions:{width:g,height:v},setAttributes:!0}]),d==null||d(N,{width:g,height:v})},$=N=>{S.current=null,h==null||h(N,{}),window.removeEventListener("pointermove",_),window.removeEventListener("pointerup",$)};window.addEventListener("pointermove",_),window.addEventListener("pointerup",$)},[b,k,e,t,n,r,m,d,h]);if(!i)return null;const F=8,j={position:"absolute",width:F,height:F,background:f,border:"1px solid #fff",borderRadius:2,zIndex:20,...o};return I.jsxs(I.Fragment,{children:[I.jsx("div",{style:{...j,bottom:-F/2,right:-F/2,cursor:"nwse-resize"},onPointerDown:A=>P(A,"se")}),I.jsx("div",{style:{...j,bottom:-F/2,left:-F/2,cursor:"nesw-resize"},onPointerDown:A=>P(A,"sw")}),I.jsx("div",{style:{...j,top:-F/2,right:-F/2,cursor:"nesw-resize"},onPointerDown:A=>P(A,"ne")}),I.jsx("div",{style:{...j,top:-F/2,left:-F/2,cursor:"nwse-resize"},onPointerDown:A=>P(A,"nw")}),I.jsx("div",{style:{...j,top:"50%",right:-F/2,cursor:"ew-resize",transform:"translateY(-50%)"},onPointerDown:A=>P(A,"e")}),I.jsx("div",{style:{...j,top:"50%",left:-F/2,cursor:"ew-resize",transform:"translateY(-50%)"},onPointerDown:A=>P(A,"w")}),I.jsx("div",{style:{...j,left:"50%",top:-F/2,cursor:"ns-resize",transform:"translateX(-50%)"},onPointerDown:A=>P(A,"n")}),I.jsx("div",{style:{...j,left:"50%",bottom:-F/2,cursor:"ns-resize",transform:"translateX(-50%)"},onPointerDown:A=>P(A,"s")})]})}function vs({isVisible:e,position:t="top",offset:n=10,align:r="center",children:i,style:o={},className:c=""}){const f=a.useContext(cn),d=Ie().nodes.find(k=>k.id===f);if(!(e!==void 0?e:d==null?void 0:d.selected))return null;const b={top:{bottom:"100%",left:r==="start"?0:r==="end"?void 0:"50%",right:r==="end"?0:void 0,transform:r==="center"?"translateX(-50%)":void 0,marginBottom:n},bottom:{top:"100%",left:r==="start"?0:r==="end"?void 0:"50%",right:r==="end"?0:void 0,transform:r==="center"?"translateX(-50%)":void 0,marginTop:n},left:{right:"100%",top:r==="start"?0:r==="end"?void 0:"50%",bottom:r==="end"?0:void 0,transform:r==="center"?"translateY(-50%)":void 0,marginRight:n},right:{left:"100%",top:r==="start"?0:r==="end"?void 0:"50%",bottom:r==="end"?0:void 0,transform:r==="center"?"translateY(-50%)":void 0,marginLeft:n}}[t]||{};return I.jsx("div",{className:`ric-node-toolbar ${c}`,style:{position:"absolute",zIndex:1e3,pointerEvents:"all",...b,...o},onPointerDown:k=>k.stopPropagation(),children:i})}function bs({isVisible:e=!1,x:t=0,y:n=0,alignX:r="center",alignY:i="center",children:o,style:c={},className:f=""}){if(!e)return null;const m=r==="center"?"-50%":r==="right"?"-100%":"0",d=i==="center"?"-50%":i==="bottom"?"-100%":"0";return I.jsx("div",{className:`ric-edge-toolbar ${f}`,style:{position:"absolute",left:t,top:n,transform:`translate(${m}, ${d})`,zIndex:1e3,pointerEvents:"all",...c},children:o})}function ws({children:e}){var r;const n=(r=Ie().edgeLabelContainerRef)==null?void 0:r.current;return n?pr.createPortal(e,n):null}function Ms({children:e}){var r;const n=(r=Ie().viewportPortalRef)==null?void 0:r.current;return n?pr.createPortal(e,n):null}function _r({fromX:e,fromY:t,toX:n,toY:r,fromPosition:i="right",toPosition:o="left",connectionLineType:c="default",connectionLineStyle:f,connectionLineComponent:m}){if(m)return I.jsx(m,{fromX:e,fromY:t,toX:n,toY:r,fromPosition:i,toPosition:o});let d;switch(c){case"straight":[d]=tr({sourceX:e,sourceY:t,targetX:n,targetY:r});break;case"step":[d]=Rn({sourceX:e,sourceY:t,targetX:n,targetY:r,sourcePosition:i,targetPosition:o,borderRadius:0});break;case"smoothstep":[d]=Rn({sourceX:e,sourceY:t,targetX:n,targetY:r,sourcePosition:i,targetPosition:o});break;case"simplebezier":[d]=rr({sourceX:e,sourceY:t,targetX:n,targetY:r});break;default:[d]=nr({sourceX:e,sourceY:t,targetX:n,targetY:r,sourcePosition:i,targetPosition:o});break}return I.jsx("path",{d,fill:"none",className:"ric-connection-line",stroke:"#b1b1b7",strokeWidth:1.5,style:f})}_r.displayName="ConnectionLine";const Rs=a.memo(_r),ks=Object.freeze({Top:"top",Bottom:"bottom",Left:"left",Right:"right"}),Cs=Object.freeze({Arrow:"arrow",ArrowClosed:"arrowclosed"});function Es(e){const t=e.width||e.measured&&e.measured.width||0,n=e.height||e.measured&&e.measured.height||0,r=e._absolutePosition||e.position||{x:0,y:0};return{x:r.x,y:r.y,x2:r.x+t,y2:r.y+n}}exports.Background=xs;exports.BaseEdge=ln;exports.BezierEdge=er;exports.ConnectionLine=Rs;exports.ControlButton=sn;exports.Controls=ys;exports.DefaultNode=vo;exports.EdgeLabelRenderer=ws;exports.EdgeText=Lr;exports.EdgeToolbar=bs;exports.GroupNode=Ir;exports.Handle=an;exports.InfiniteCanvas=jo;exports.InfiniteCanvasProvider=Ao;exports.InputNode=Pr;exports.MarkerType=Cs;exports.MiniMap=as;exports.NodeResizer=ms;exports.NodeToolbar=vs;exports.OutputNode=Nr;exports.Panel=ps;exports.Position=ks;exports.SelectionBox=Sr;exports.SimpleBezierEdge=ar;exports.SmoothStepEdge=ir;exports.StepEdge=$r;exports.StraightEdge=sr;exports.ViewportPortal=Ms;exports.addEdge=Ho;exports.applyEdgeChanges=Dr;exports.applyNodeChanges=Ar;exports.boxToRect=Qr;exports.buildObstacles=or;exports.clampPosition=Gn;exports.computeRoutedEdges=Po;exports.getBezierEdgeCenter=bo;exports.getBezierPath=nr;exports.getBoundsOfBoxes=Jr;exports.getConnectedEdges=br;exports.getEdgeCenter=wo;exports.getIncomers=Ur;exports.getNodeDimensions=Kn;exports.getNodesBounds=Mn;exports.getNodesInside=Zr;exports.getOutgoers=qr;exports.getOverlappingArea=Vr;exports.getRoutedLabelPosition=Pn;exports.getSimpleBezierPath=rr;exports.getSmoothStepPath=Rn;exports.getStraightPath=tr;exports.getViewportForBounds=Ut;exports.isEdge=Or;exports.isNode=Xr;exports.nodeToBox=Es;exports.nodeToRect=Kr;exports.reconnectEdge=Mo;exports.rectToBox=Gr;exports.routeSinglePath=No;exports.routedPointsToPath=zn;exports.snapPosition=Zn;exports.useConnection=Oo;exports.useEdges=Yo;exports.useEdgesState=Wo;exports.useHandleConnections=Zo;exports.useInfiniteCanvas=Mr;exports.useInternalNode=ts;exports.useKeyPress=Jo;exports.useNodeConnections=qo;exports.useNodeId=co;exports.useNodes=Fo;exports.useNodesData=Uo;exports.useNodesInitialized=es;exports.useNodesState=_o;exports.useOnEdgesChangeMiddleware=is;exports.useOnNodesChangeMiddleware=ss;exports.useOnSelectionChange=Qo;exports.useOnViewportChange=Go;exports.useReactFlow=Hr;exports.useStore=ns;exports.useStoreApi=rs;exports.useUndoRedo=os;exports.useUpdateNodeInternals=Vo;exports.useViewport=Xo;