Math.sqrt(Math.pow(t.x-e.x,2)+Math.pow(t.y-e.y,2));function LS({source:e,sourcePosition:t=q.Bottom,target:n,targetPosition:r=q.Top,center:o,offset:i,stepPosition:s}){const l=uf[t],a=uf[r],u={x:e.x+l.x*i,y:e.y+l.y*i},p={x:n.x+a.x*i,y:n.y+a.y*i},c=RS({source:u,sourcePosition:t,target:p}),d=c.x!==0?"x":"y",x=c[d];let y=[],w,k;const m={x:0,y:0},g={x:0,y:0},[,,h,v]=a0({sourceX:e.x,sourceY:e.y,targetX:n.x,targetY:n.y});if(l[d]*a[d]===-1){d==="x"?(w=o.x??u.x+(p.x-u.x)*s,k=o.y??(u.y+p.y)/2):(w=o.x??(u.x+p.x)/2,k=o.y??u.y+(p.y-u.y)*s);const S=[{x:w,y:u.y},{x:w,y:p.y}],E=[{x:u.x,y:k},{x:p.x,y:k}];l[d]===x?y=d==="x"?S:E:y=d==="x"?E:S}else{const S=[{x:u.x,y:p.y}],E=[{x:p.x,y:u.y}];if(d==="x"?y=l.x===x?E:S:y=l.y===x?S:E,t===r){const I=Math.abs(e[d]-n[d]);if(I<=i){const P=Math.min(i-1,i-I);l[d]===x?m[d]=(u[d]>e[d]?-1:1)*P:g[d]=(p[d]>n[d]?-1:1)*P}}if(t!==r){const I=d==="x"?"y":"x",P=l[d]===a[I],C=u[I]>p[I],L=u[I]=T?(w=(b.x+A.x)/2,k=y[0].y):(w=y[0].x,k=(b.y+A.y)/2)}return[[e,{x:u.x+m.x,y:u.y+m.y},...y,{x:p.x+g.x,y:p.y+g.y},n],w,k,h,v]}function AS(e,t,n,r){const o=Math.min(cf(e,t)/2,cf(t,n)/2,r),{x:i,y:s}=t;if(e.x===i&&i===n.x||e.y===s&&s===n.y)return`L${i} ${s}`;if(e.y===s){const u=e.x{let v="";return h>0&&hn.id===t):e[0])||null}function eu(e,t){return e?typeof e=="string"?e:`${t?`${t}__`:""}${Object.keys(e).sort().map(r=>`${r}=${e[r]}`).join("&")}`:""}function DS(e,{id:t,defaultColor:n,defaultMarkerStart:r,defaultMarkerEnd:o}){const i=new Set;return e.reduce((s,l)=>([l.markerStart||r,l.markerEnd||o].forEach(a=>{if(a&&typeof a=="object"){const u=eu(a,t);i.has(u)||(s.push({id:u,color:a.color||n,...a}),i.add(u))}}),s),[]).sort((s,l)=>s.id.localeCompare(l.id))}const c0=1e3,OS=10,pc={nodeOrigin:[0,0],nodeExtent:To,elevateNodesOnSelect:!0,zIndexMode:"basic",defaults:{}},BS={...pc,checkEquality:!0};function hc(e,t){const n={...e};for(const r in t)t[r]!==void 0&&(n[r]=t[r]);return n}function FS(e,t,n){const r=hc(pc,n);for(const o of e.values())if(o.parentId)mc(o,e,t,r);else{const i=Uo(o,r.nodeOrigin),s=_r(o.extent)?o.extent:r.nodeExtent,l=Rn(i,s,Ht(o));o.internals.positionAbsolute=l}}function HS(e,t){if(!e.handles)return e.measured?t==null?void 0:t.internals.handleBounds:void 0;const n=[],r=[];for(const o of e.handles){const i={id:o.id,width:o.width??1,height:o.height??1,nodeId:e.id,x:o.x,y:o.y,position:o.position,type:o.type};o.type==="source"?n.push(i):o.type==="target"&&r.push(i)}return{source:n,target:r}}function gc(e){return e==="manual"}function tu(e,t,n,r={}){var u,p;const o=hc(BS,r),i={i:0},s=new Map(t),l=o!=null&&o.elevateNodesOnSelect&&!gc(o.zIndexMode)?c0:0;let a=e.length>0;t.clear(),n.clear();for(const c of e){let d=s.get(c.id);if(o.checkEquality&&c===(d==null?void 0:d.internals.userNode))t.set(c.id,d);else{const x=Uo(c,o.nodeOrigin),y=_r(c.extent)?c.extent:o.nodeExtent,w=Rn(x,y,Ht(c));d={...o.defaults,...c,measured:{width:(u=c.measured)==null?void 0:u.width,height:(p=c.measured)==null?void 0:p.height},internals:{positionAbsolute:w,handleBounds:HS(c,d),z:d0(c,l,o.zIndexMode),userNode:c}},t.set(c.id,d)}(d.measured===void 0||d.measured.width===void 0||d.measured.height===void 0)&&!d.hidden&&(a=!1),c.parentId&&mc(d,t,n,r,i)}return a}function VS(e,t){if(!e.parentId)return;const n=t.get(e.parentId);n?n.set(e.id,e):t.set(e.parentId,new Map([[e.id,e]]))}function mc(e,t,n,r,o){const{elevateNodesOnSelect:i,nodeOrigin:s,nodeExtent:l,zIndexMode:a}=hc(pc,r),u=e.parentId,p=t.get(u);if(!p){console.warn(`Parent node ${u} not found. Please make sure that parent nodes are in front of their child nodes in the nodes array.`);return}VS(e,n),o&&!p.parentId&&p.internals.rootParentIndex===void 0&&a==="auto"&&(p.internals.rootParentIndex=++o.i,p.internals.z=p.internals.z+o.i*OS),o&&p.internals.rootParentIndex!==void 0&&(o.i=p.internals.rootParentIndex);const c=i&&!gc(a)?c0:0,{x:d,y:x,z:y}=WS(e,p,s,l,c,a),{positionAbsolute:w}=e.internals,k=d!==w.x||x!==w.y;(k||y!==e.internals.z)&&t.set(e.id,{...e,internals:{...e.internals,positionAbsolute:k?{x:d,y:x}:w,z:y}})}function d0(e,t,n){const r=ct(e.zIndex)?e.zIndex:0;return gc(n)?r:r+(e.selected?t:0)}function WS(e,t,n,r,o,i){const{x:s,y:l}=t.internals.positionAbsolute,a=Ht(e),u=Uo(e,n),p=_r(e.extent)?Rn(u,e.extent,a):u;let c=Rn({x:s+p.x,y:l+p.y},r,a);e.extent==="parent"&&(c=qg(c,a,t));const d=d0(e,o,i),x=t.internals.z??0;return{x:c.x,y:c.y,z:x>=d?x+1:d}}function yc(e,t,n,r=[0,0]){var s;const o=[],i=new Map;for(const l of e){const a=t.get(l.parentId);if(!a)continue;const u=((s=i.get(l.parentId))==null?void 0:s.expandedRect)??kr(a),p=e0(u,l.rect);i.set(l.parentId,{expandedRect:p,parent:a})}return i.size>0&&i.forEach(({expandedRect:l,parent:a},u)=>{var h;const p=a.internals.positionAbsolute,c=Ht(a),d=a.origin??r,x=l.x0||y>0||m||g)&&(o.push({id:u,type:"position",position:{x:a.position.x-x+m,y:a.position.y-y+g}}),(h=n.get(u))==null||h.forEach(v=>{e.some(_=>_.id===v.id)||o.push({id:v.id,type:"position",position:{x:v.position.x+x,y:v.position.y+y}})})),(c.width0){const x=yc(d,t,n,o);u.push(...x)}return{changes:u,updatedInternals:a}}async function YS({delta:e,panZoom:t,transform:n,translateExtent:r,width:o,height:i}){if(!t||!e.x&&!e.y)return Promise.resolve(!1);const s=await t.setViewportConstrained({x:n[0]+e.x,y:n[1]+e.y,zoom:n[2]},[[0,0],[o,i]],r),l=!!s&&(s.x!==n[0]||s.y!==n[1]||s.k!==n[2]);return Promise.resolve(l)}function hf(e,t,n,r,o,i){let s=o;const l=r.get(s)||new Map;r.set(s,l.set(n,t)),s=`${o}-${e}`;const a=r.get(s)||new Map;if(r.set(s,a.set(n,t)),i){s=`${o}-${e}-${i}`;const u=r.get(s)||new Map;r.set(s,u.set(n,t))}}function f0(e,t,n){e.clear(),t.clear();for(const r of n){const{source:o,target:i,sourceHandle:s=null,targetHandle:l=null}=r,a={edgeId:r.id,source:o,target:i,sourceHandle:s,targetHandle:l},u=`${o}-${s}--${i}-${l}`,p=`${i}-${l}--${o}-${s}`;hf("source",a,p,e,o,s),hf("target",a,u,e,i,l),t.set(r.id,r)}}function p0(e,t){if(!e.parentId)return!1;const n=t.get(e.parentId);return n?n.selected?!0:p0(n,t):!1}function gf(e,t,n){var o;let r=e;do{if((o=r==null?void 0:r.matches)!=null&&o.call(r,t))return!0;if(r===n)return!1;r=r==null?void 0:r.parentElement}while(r);return!1}function XS(e,t,n,r){const o=new Map;for(const[i,s]of e)if((s.selected||s.id===r)&&(!s.parentId||!p0(s,e))&&(s.draggable||t&&typeof s.draggable>"u")){const l=e.get(i);l&&o.set(i,{id:i,position:l.position||{x:0,y:0},distance:{x:n.x-l.internals.positionAbsolute.x,y:n.y-l.internals.positionAbsolute.y},extent:l.extent,parentId:l.parentId,origin:l.origin,expandParent:l.expandParent,internals:{positionAbsolute:l.internals.positionAbsolute||{x:0,y:0}},measured:{width:l.measured.width??0,height:l.measured.height??0}})}return o}function Al({nodeId:e,dragItems:t,nodeLookup:n,dragging:r=!0}){var s,l,a;const o=[];for(const[u,p]of t){const c=(s=n.get(u))==null?void 0:s.internals.userNode;c&&o.push({...c,position:p.position,dragging:r})}if(!e)return[o[0],o];const i=(l=n.get(e))==null?void 0:l.internals.userNode;return[i?{...i,position:((a=t.get(e))==null?void 0:a.position)||i.position,dragging:r}:o[0],o]}function QS({dragItems:e,snapGrid:t,x:n,y:r}){const o=e.values().next().value;if(!o)return null;const i={x:n-o.distance.x,y:r-o.distance.y},s=Xo(i,t);return{x:s.x-i.x,y:s.y-i.y}}function GS({onNodeMouseDown:e,getStoreItems:t,onDragStart:n,onDrag:r,onDragStop:o}){let i={x:null,y:null},s=0,l=new Map,a=!1,u={x:0,y:0},p=null,c=!1,d=null,x=!1,y=!1,w=null;function k({noDragClassName:g,handleSelector:h,domNode:v,isSelectable:_,nodeId:S,nodeClickDistance:E=0}){d=We(v);function b({x:I,y:P}){const{nodeLookup:C,nodeExtent:L,snapGrid:M,snapToGrid:R,nodeOrigin:N,onNodeDrag:j,onSelectionDrag:$,onError:O,updateNodePositions:B}=t();i={x:I,y:P};let W=!1;const V=l.size>1,Y=V&&L?qa(Yo(l)):null,X=V&&R?QS({dragItems:l,snapGrid:M,x:I,y:P}):null;for(const[Q,H]of l){if(!C.has(Q))continue;let K={x:I-H.distance.x,y:P-H.distance.y};R&&(K=X?{x:Math.round(K.x+X.x),y:Math.round(K.y+X.y)}:Xo(K,M));let ee=null;if(V&&L&&!H.extent&&Y){const{positionAbsolute:Z}=H.internals,re=Z.x-Y.x+L[0][0],le=Z.x+H.measured.width-Y.x2+L[1][0],ie=Z.y-Y.y+L[0][1],je=Z.y+H.measured.height-Y.y2+L[1][1];ee=[[re,ie],[le,je]]}const{position:G,positionAbsolute:J}=Zg({nodeId:Q,nextPosition:K,nodeLookup:C,nodeExtent:ee||L,nodeOrigin:N,onError:O});W=W||H.position.x!==G.x||H.position.y!==G.y,H.position=G,H.internals.positionAbsolute=J}if(y=y||W,!!W&&(B(l,!0),w&&(r||j||!S&&$))){const[Q,H]=Al({nodeId:S,dragItems:l,nodeLookup:C});r==null||r(w,l,Q,H),j==null||j(w,Q,H),S||$==null||$(w,H)}}async function A(){if(!p)return;const{transform:I,panBy:P,autoPanSpeed:C,autoPanOnNodeDrag:L}=t();if(!L){a=!1,cancelAnimationFrame(s);return}const[M,R]=Jg(u,p,C);(M!==0||R!==0)&&(i.x=(i.x??0)-M/I[2],i.y=(i.y??0)-R/I[2],await P({x:M,y:R})&&b(i)),s=requestAnimationFrame(A)}function D(I){var V;const{nodeLookup:P,multiSelectionActive:C,nodesDraggable:L,transform:M,snapGrid:R,snapToGrid:N,selectNodesOnDrag:j,onNodeDragStart:$,onSelectionDragStart:O,unselectNodesAndEdges:B}=t();c=!0,(!j||!_)&&!C&&S&&((V=P.get(S))!=null&&V.selected||B()),_&&j&&S&&(e==null||e(S));const W=uo(I.sourceEvent,{transform:M,snapGrid:R,snapToGrid:N,containerBounds:p});if(i=W,l=XS(P,L,W,S),l.size>0&&(n||$||!S&&O)){const[Y,X]=Al({nodeId:S,dragItems:l,nodeLookup:P});n==null||n(I.sourceEvent,l,Y,X),$==null||$(I.sourceEvent,Y,X),S||O==null||O(I.sourceEvent,X)}}const T=zg().clickDistance(E).on("start",I=>{const{domNode:P,nodeDragThreshold:C,transform:L,snapGrid:M,snapToGrid:R}=t();p=(P==null?void 0:P.getBoundingClientRect())||null,x=!1,y=!1,w=I.sourceEvent,C===0&&D(I),i=uo(I.sourceEvent,{transform:L,snapGrid:M,snapToGrid:R,containerBounds:p}),u=dt(I.sourceEvent,p)}).on("drag",I=>{const{autoPanOnNodeDrag:P,transform:C,snapGrid:L,snapToGrid:M,nodeDragThreshold:R,nodeLookup:N}=t(),j=uo(I.sourceEvent,{transform:C,snapGrid:L,snapToGrid:M,containerBounds:p});if(w=I.sourceEvent,(I.sourceEvent.type==="touchmove"&&I.sourceEvent.touches.length>1||S&&!N.has(S))&&(x=!0),!x){if(!a&&P&&c&&(a=!0,A()),!c){const $=dt(I.sourceEvent,p),O=$.x-u.x,B=$.y-u.y;Math.sqrt(O*O+B*B)>R&&D(I)}(i.x!==j.xSnapped||i.y!==j.ySnapped)&&l&&c&&(u=dt(I.sourceEvent,p),b(j))}}).on("end",I=>{if(!(!c||x)&&(a=!1,c=!1,cancelAnimationFrame(s),l.size>0)){const{nodeLookup:P,updateNodePositions:C,onNodeDragStop:L,onSelectionDragStop:M}=t();if(y&&(C(l,!1),y=!1),o||L||!S&&M){const[R,N]=Al({nodeId:S,dragItems:l,nodeLookup:P,dragging:!1});o==null||o(I.sourceEvent,l,R,N),L==null||L(I.sourceEvent,R,N),S||M==null||M(I.sourceEvent,N)}}}).filter(I=>{const P=I.target;return!I.button&&(!g||!gf(P,`.${g}`,v))&&(!h||gf(P,h,v))});d.call(T)}function m(){d==null||d.on(".drag",null)}return{update:k,destroy:m}}function KS(e,t,n){const r=[],o={x:e.x-n,y:e.y-n,width:n*2,height:n*2};for(const i of t.values())Ro(o,kr(i))>0&&r.push(i);return r}const ZS=250;function qS(e,t,n,r){var l,a;let o=[],i=1/0;const s=KS(e,n,t+ZS);for(const u of s){const p=[...((l=u.internals.handleBounds)==null?void 0:l.source)??[],...((a=u.internals.handleBounds)==null?void 0:a.target)??[]];for(const c of p){if(r.nodeId===c.nodeId&&r.type===c.type&&r.id===c.id)continue;const{x:d,y:x}=Ln(u,c,c.position,!0),y=Math.sqrt(Math.pow(d-e.x,2)+Math.pow(x-e.y,2));y>t||(y1){const u=r.type==="source"?"target":"source";return o.find(p=>p.type===u)??o[0]}return o[0]}function h0(e,t,n,r,o,i=!1){var u,p,c;const s=r.get(e);if(!s)return null;const l=o==="strict"?(u=s.internals.handleBounds)==null?void 0:u[t]:[...((p=s.internals.handleBounds)==null?void 0:p.source)??[],...((c=s.internals.handleBounds)==null?void 0:c.target)??[]],a=(n?l==null?void 0:l.find(d=>d.id===n):l==null?void 0:l[0])??null;return a&&i?{...a,...Ln(s,a,a.position,!0)}:a}function g0(e,t){return e||(t!=null&&t.classList.contains("target")?"target":t!=null&&t.classList.contains("source")?"source":null)}function JS(e,t){let n=null;return t?n=!0:e&&!t&&(n=!1),n}const m0=()=>!0;function ek(e,{connectionMode:t,connectionRadius:n,handleId:r,nodeId:o,edgeUpdaterType:i,isTarget:s,domNode:l,nodeLookup:a,lib:u,autoPanOnConnect:p,flowId:c,panBy:d,cancelConnection:x,onConnectStart:y,onConnect:w,onConnectEnd:k,isValidConnection:m=m0,onReconnectEnd:g,updateConnection:h,getTransform:v,getFromHandle:_,autoPanSpeed:S,dragThreshold:E=1,handleDomNode:b}){const A=r0(e.target);let D=0,T;const{x:I,y:P}=dt(e),C=g0(i,b),L=l==null?void 0:l.getBoundingClientRect();let M=!1;if(!L||!C)return;const R=h0(o,C,r,a,t);if(!R)return;let N=dt(e,L),j=!1,$=null,O=!1,B=null;function W(){if(!p||!L)return;const[G,J]=Jg(N,L,S);d({x:G,y:J}),D=requestAnimationFrame(W)}const V={...R,nodeId:o,type:C,position:R.position},Y=a.get(o);let Q={inProgress:!0,isValid:null,from:Ln(Y,V,q.Left,!0),fromHandle:V,fromPosition:V.position,fromNode:Y,to:N,toHandle:null,toPosition:nf[V.position],toNode:null,pointer:N};function H(){M=!0,h(Q),y==null||y(e,{nodeId:o,handleId:r,handleType:C})}E===0&&H();function K(G){if(!M){const{x:je,y:Vt}=dt(G),jt=je-I,gn=Vt-P;if(!(jt*jt+gn*gn>E*E))return;H()}if(!_()||!V){ee(G);return}const J=v();N=dt(G,L),T=qS(Qo(N,J,!1,[1,1]),n,a,V),j||(W(),j=!0);const Z=y0(G,{handle:T,connectionMode:t,fromNodeId:o,fromHandleId:r,fromType:s?"target":"source",isValidConnection:m,doc:A,lib:u,flowId:c,nodeLookup:a});B=Z.handleDomNode,$=Z.connection,O=JS(!!T,Z.isValid);const re=a.get(o),le=re?Ln(re,V,q.Left,!0):Q.from,ie={...Q,from:le,isValid:O,to:Z.toHandle&&O?bs({x:Z.toHandle.x,y:Z.toHandle.y},J):N,toHandle:Z.toHandle,toPosition:O&&Z.toHandle?Z.toHandle.position:nf[V.position],toNode:Z.toHandle?a.get(Z.toHandle.nodeId):null,pointer:N};h(ie),Q=ie}function ee(G){if(!("touches"in G&&G.touches.length>0)){if(M){(T||B)&&$&&O&&(w==null||w($));const{inProgress:J,...Z}=Q,re={...Z,toPosition:Q.toHandle?Q.toPosition:null};k==null||k(G,re),i&&(g==null||g(G,re))}x(),cancelAnimationFrame(D),j=!1,O=!1,$=null,B=null,A.removeEventListener("mousemove",K),A.removeEventListener("mouseup",ee),A.removeEventListener("touchmove",K),A.removeEventListener("touchend",ee)}}A.addEventListener("mousemove",K),A.addEventListener("mouseup",ee),A.addEventListener("touchmove",K),A.addEventListener("touchend",ee)}function y0(e,{handle:t,connectionMode:n,fromNodeId:r,fromHandleId:o,fromType:i,doc:s,lib:l,flowId:a,isValidConnection:u=m0,nodeLookup:p}){const c=i==="target",d=t?s.querySelector(`.${l}-flow__handle[data-id="${a}-${t==null?void 0:t.nodeId}-${t==null?void 0:t.id}-${t==null?void 0:t.type}"]`):null,{x,y}=dt(e),w=s.elementFromPoint(x,y),k=w!=null&&w.classList.contains(`${l}-flow__handle`)?w:d,m={handleDomNode:k,isValid:!1,connection:null,toHandle:null};if(k){const g=g0(void 0,k),h=k.getAttribute("data-nodeid"),v=k.getAttribute("data-handleid"),_=k.classList.contains("connectable"),S=k.classList.contains("connectableend");if(!h||!g)return m;const E={source:c?h:r,sourceHandle:c?v:o,target:c?r:h,targetHandle:c?o:v};m.connection=E;const A=_&&S&&(n===wr.Strict?c&&g==="source"||!c&&g==="target":h!==r||v!==o);m.isValid=A&&u(E),m.toHandle=h0(h,g,v,p,n,!0)}return m}const nu={onPointerDown:ek,isValid:y0};function tk({domNode:e,panZoom:t,getTransform:n,getViewScale:r}){const o=We(e);function i({translateExtent:l,width:a,height:u,zoomStep:p=1,pannable:c=!0,zoomable:d=!0,inversePan:x=!1}){const y=h=>{if(h.sourceEvent.type!=="wheel"||!t)return;const v=n(),_=h.sourceEvent.ctrlKey&&Lo()?10:1,S=-h.sourceEvent.deltaY*(h.sourceEvent.deltaMode===1?.05:h.sourceEvent.deltaMode?1:.002)*p,E=v[2]*Math.pow(2,S*_);t.scaleTo(E)};let w=[0,0];const k=h=>{(h.sourceEvent.type==="mousedown"||h.sourceEvent.type==="touchstart")&&(w=[h.sourceEvent.clientX??h.sourceEvent.touches[0].clientX,h.sourceEvent.clientY??h.sourceEvent.touches[0].clientY])},m=h=>{const v=n();if(h.sourceEvent.type!=="mousemove"&&h.sourceEvent.type!=="touchmove"||!t)return;const _=[h.sourceEvent.clientX??h.sourceEvent.touches[0].clientX,h.sourceEvent.clientY??h.sourceEvent.touches[0].clientY],S=[_[0]-w[0],_[1]-w[1]];w=_;const E=r()*Math.max(v[2],Math.log(v[2]))*(x?-1:1),b={x:v[0]-S[0]*E,y:v[1]-S[1]*E},A=[[0,0],[a,u]];t.setViewportConstrained({x:b.x,y:b.y,zoom:v[2]},A,l)},g=Ug().on("start",k).on("zoom",c?m:null).on("zoom.wheel",d?y:null);o.call(g,{})}function s(){o.on("zoom",null)}return{update:i,destroy:s,pointer:lt}}const Zs=e=>({x:e.x,y:e.y,zoom:e.k}),$l=({x:e,y:t,zoom:n})=>Qs.translate(e,t).scale(n),tr=(e,t)=>e.target.closest(`.${t}`),x0=(e,t)=>t===2&&Array.isArray(e)&&e.includes(2),nk=e=>((e*=2)<=1?e*e*e:(e-=2)*e*e+2)/2,Dl=(e,t=0,n=nk,r=()=>{})=>{const o=typeof t=="number"&&t>0;return o||r(),o?e.transition().duration(t).ease(n).on("end",r):e},v0=e=>{const t=e.ctrlKey&&Lo()?10:1;return-e.deltaY*(e.deltaMode===1?.05:e.deltaMode?1:.002)*t};function rk({zoomPanValues:e,noWheelClassName:t,d3Selection:n,d3Zoom:r,panOnScrollMode:o,panOnScrollSpeed:i,zoomOnPinch:s,onPanZoomStart:l,onPanZoom:a,onPanZoomEnd:u}){return p=>{if(tr(p,t))return p.ctrlKey&&p.preventDefault(),!1;p.preventDefault(),p.stopImmediatePropagation();const c=n.property("__zoom").k||1;if(p.ctrlKey&&s){const k=lt(p),m=v0(p),g=c*Math.pow(2,m);r.scaleTo(n,g,k,p);return}const d=p.deltaMode===1?20:1;let x=o===bn.Vertical?0:p.deltaX*d,y=o===bn.Horizontal?0:p.deltaY*d;!Lo()&&p.shiftKey&&o!==bn.Vertical&&(x=p.deltaY*d,y=0),r.translateBy(n,-(x/c)*i,-(y/c)*i,{internal:!0});const w=Zs(n.property("__zoom"));clearTimeout(e.panScrollTimeout),e.isPanScrolling?(a==null||a(p,w),e.panScrollTimeout=setTimeout(()=>{u==null||u(p,w),e.isPanScrolling=!1},150)):(e.isPanScrolling=!0,l==null||l(p,w))}}function ok({noWheelClassName:e,preventScrolling:t,d3ZoomHandler:n}){return function(r,o){const i=r.type==="wheel",s=!t&&i&&!r.ctrlKey,l=tr(r,e);if(r.ctrlKey&&i&&l&&r.preventDefault(),s||l)return null;r.preventDefault(),n.call(this,r,o)}}function ik({zoomPanValues:e,onDraggingChange:t,onPanZoomStart:n}){return r=>{var i,s,l;if((i=r.sourceEvent)!=null&&i.internal)return;const o=Zs(r.transform);e.mouseButton=((s=r.sourceEvent)==null?void 0:s.button)||0,e.isZoomingOrPanning=!0,e.prevViewport=o,((l=r.sourceEvent)==null?void 0:l.type)==="mousedown"&&t(!0),n&&(n==null||n(r.sourceEvent,o))}}function sk({zoomPanValues:e,panOnDrag:t,onPaneContextMenu:n,onTransformChange:r,onPanZoom:o}){return i=>{var s,l;e.usedRightMouseButton=!!(n&&x0(t,e.mouseButton??0)),(s=i.sourceEvent)!=null&&s.sync||r([i.transform.x,i.transform.y,i.transform.k]),o&&!((l=i.sourceEvent)!=null&&l.internal)&&(o==null||o(i.sourceEvent,Zs(i.transform)))}}function lk({zoomPanValues:e,panOnDrag:t,panOnScroll:n,onDraggingChange:r,onPanZoomEnd:o,onPaneContextMenu:i}){return s=>{var l;if(!((l=s.sourceEvent)!=null&&l.internal)&&(e.isZoomingOrPanning=!1,i&&x0(t,e.mouseButton??0)&&!e.usedRightMouseButton&&s.sourceEvent&&i(s.sourceEvent),e.usedRightMouseButton=!1,r(!1),o)){const a=Zs(s.transform);e.prevViewport=a,clearTimeout(e.timerId),e.timerId=setTimeout(()=>{o==null||o(s.sourceEvent,a)},n?150:0)}}}function ak({zoomActivationKeyPressed:e,zoomOnScroll:t,zoomOnPinch:n,panOnDrag:r,panOnScroll:o,zoomOnDoubleClick:i,userSelectionActive:s,noWheelClassName:l,noPanClassName:a,lib:u,connectionInProgress:p}){return c=>{var k;const d=e||t,x=n&&c.ctrlKey,y=c.type==="wheel";if(c.button===1&&c.type==="mousedown"&&(tr(c,`${u}-flow__node`)||tr(c,`${u}-flow__edge`)))return!0;if(!r&&!d&&!o&&!i&&!n||s||p&&!y||tr(c,l)&&y||tr(c,a)&&(!y||o&&y&&!e)||!n&&c.ctrlKey&&y)return!1;if(!n&&c.type==="touchstart"&&((k=c.touches)==null?void 0:k.length)>1)return c.preventDefault(),!1;if(!d&&!o&&!x&&y||!r&&(c.type==="mousedown"||c.type==="touchstart")||Array.isArray(r)&&!r.includes(c.button)&&c.type==="mousedown")return!1;const w=Array.isArray(r)&&r.includes(c.button)||!c.button||c.button<=1;return(!c.ctrlKey||y)&&w}}function uk({domNode:e,minZoom:t,maxZoom:n,translateExtent:r,viewport:o,onPanZoom:i,onPanZoomStart:s,onPanZoomEnd:l,onDraggingChange:a}){const u={isZoomingOrPanning:!1,usedRightMouseButton:!1,prevViewport:{},mouseButton:0,timerId:void 0,panScrollTimeout:void 0,isPanScrolling:!1},p=e.getBoundingClientRect(),c=Ug().scaleExtent([t,n]).translateExtent(r),d=We(e).call(c);g({x:o.x,y:o.y,zoom:Sr(o.zoom,t,n)},[[0,0],[p.width,p.height]],r);const x=d.on("wheel.zoom"),y=d.on("dblclick.zoom");c.wheelDelta(v0);function w(T,I){return d?new Promise(P=>{c==null||c.interpolate((I==null?void 0:I.interpolate)==="linear"?ao:Vi).transform(Dl(d,I==null?void 0:I.duration,I==null?void 0:I.ease,()=>P(!0)),T)}):Promise.resolve(!1)}function k({noWheelClassName:T,noPanClassName:I,onPaneContextMenu:P,userSelectionActive:C,panOnScroll:L,panOnDrag:M,panOnScrollMode:R,panOnScrollSpeed:N,preventScrolling:j,zoomOnPinch:$,zoomOnScroll:O,zoomOnDoubleClick:B,zoomActivationKeyPressed:W,lib:V,onTransformChange:Y,connectionInProgress:X,paneClickDistance:Q,selectionOnDrag:H}){C&&!u.isZoomingOrPanning&&m();const K=L&&!W&&!C;c.clickDistance(H?1/0:!ct(Q)||Q<0?0:Q);const ee=K?rk({zoomPanValues:u,noWheelClassName:T,d3Selection:d,d3Zoom:c,panOnScrollMode:R,panOnScrollSpeed:N,zoomOnPinch:$,onPanZoomStart:s,onPanZoom:i,onPanZoomEnd:l}):ok({noWheelClassName:T,preventScrolling:j,d3ZoomHandler:x});if(d.on("wheel.zoom",ee,{passive:!1}),!C){const J=ik({zoomPanValues:u,onDraggingChange:a,onPanZoomStart:s});c.on("start",J);const Z=sk({zoomPanValues:u,panOnDrag:M,onPaneContextMenu:!!P,onPanZoom:i,onTransformChange:Y});c.on("zoom",Z);const re=lk({zoomPanValues:u,panOnDrag:M,panOnScroll:L,onPaneContextMenu:P,onPanZoomEnd:l,onDraggingChange:a});c.on("end",re)}const G=ak({zoomActivationKeyPressed:W,panOnDrag:M,zoomOnScroll:O,panOnScroll:L,zoomOnDoubleClick:B,zoomOnPinch:$,userSelectionActive:C,noPanClassName:I,noWheelClassName:T,lib:V,connectionInProgress:X});c.filter(G),B?d.on("dblclick.zoom",y):d.on("dblclick.zoom",null)}function m(){c.on("zoom",null)}async function g(T,I,P){const C=$l(T),L=c==null?void 0:c.constrain()(C,I,P);return L&&await w(L),new Promise(M=>M(L))}async function h(T,I){const P=$l(T);return await w(P,I),new Promise(C=>C(P))}function v(T){if(d){const I=$l(T),P=d.property("__zoom");(P.k!==T.zoom||P.x!==T.x||P.y!==T.y)&&(c==null||c.transform(d,I,null,{sync:!0}))}}function _(){const T=d?Wg(d.node()):{x:0,y:0,k:1};return{x:T.x,y:T.y,zoom:T.k}}function S(T,I){return d?new Promise(P=>{c==null||c.interpolate((I==null?void 0:I.interpolate)==="linear"?ao:Vi).scaleTo(Dl(d,I==null?void 0:I.duration,I==null?void 0:I.ease,()=>P(!0)),T)}):Promise.resolve(!1)}function E(T,I){return d?new Promise(P=>{c==null||c.interpolate((I==null?void 0:I.interpolate)==="linear"?ao:Vi).scaleBy(Dl(d,I==null?void 0:I.duration,I==null?void 0:I.ease,()=>P(!0)),T)}):Promise.resolve(!1)}function b(T){c==null||c.scaleExtent(T)}function A(T){c==null||c.translateExtent(T)}function D(T){const I=!ct(T)||T<0?0:T;c==null||c.clickDistance(I)}return{update:k,destroy:m,setViewport:h,setViewportConstrained:g,getViewport:_,scaleTo:S,scaleBy:E,setScaleExtent:b,setTranslateExtent:A,syncViewport:v,setClickDistance:D}}var An;(function(e){e.Line="line",e.Handle="handle"})(An||(An={}));const ck=["top-left","top-right","bottom-left","bottom-right"],dk=["top","right","bottom","left"];function fk({width:e,prevWidth:t,height:n,prevHeight:r,affectsX:o,affectsY:i}){const s=e-t,l=n-r,a=[s>0?1:s<0?-1:0,l>0?1:l<0?-1:0];return s&&o&&(a[0]=a[0]*-1),l&&i&&(a[1]=a[1]*-1),a}function mf(e){const t=e.includes("right")||e.includes("left"),n=e.includes("bottom")||e.includes("top"),r=e.includes("left"),o=e.includes("top");return{isHorizontal:t,isVertical:n,affectsX:r,affectsY:o}}function Ut(e,t){return Math.max(0,t-e)}function Yt(e,t){return Math.max(0,e-t)}function Si(e,t,n){return Math.max(0,t-e,e-n)}function yf(e,t){return e?!t:t}function pk(e,t,n,r,o,i,s,l){let{affectsX:a,affectsY:u}=t;const{isHorizontal:p,isVertical:c}=t,d=p&&c,{xSnapped:x,ySnapped:y}=n,{minWidth:w,maxWidth:k,minHeight:m,maxHeight:g}=r,{x:h,y:v,width:_,height:S,aspectRatio:E}=e;let b=Math.floor(p?x-e.pointerX:0),A=Math.floor(c?y-e.pointerY:0);const D=_+(a?-b:b),T=S+(u?-A:A),I=-i[0]*_,P=-i[1]*S;let C=Si(D,w,k),L=Si(T,m,g);if(s){let N=0,j=0;a&&b<0?N=Ut(h+b+I,s[0][0]):!a&&b>0&&(N=Yt(h+D+I,s[1][0])),u&&A<0?j=Ut(v+A+P,s[0][1]):!u&&A>0&&(j=Yt(v+T+P,s[1][1])),C=Math.max(C,N),L=Math.max(L,j)}if(l){let N=0,j=0;a&&b>0?N=Yt(h+b,l[0][0]):!a&&b<0&&(N=Ut(h+D,l[1][0])),u&&A>0?j=Yt(v+A,l[0][1]):!u&&A<0&&(j=Ut(v+T,l[1][1])),C=Math.max(C,N),L=Math.max(L,j)}if(o){if(p){const N=Si(D/E,m,g)*E;if(C=Math.max(C,N),s){let j=0;!a&&!u||a&&!u&&d?j=Yt(v+P+D/E,s[1][1])*E:j=Ut(v+P+(a?b:-b)/E,s[0][1])*E,C=Math.max(C,j)}if(l){let j=0;!a&&!u||a&&!u&&d?j=Ut(v+D/E,l[1][1])*E:j=Yt(v+(a?b:-b)/E,l[0][1])*E,C=Math.max(C,j)}}if(c){const N=Si(T*E,w,k)/E;if(L=Math.max(L,N),s){let j=0;!a&&!u||u&&!a&&d?j=Yt(h+T*E+I,s[1][0])/E:j=Ut(h+(u?A:-A)*E+I,s[0][0])/E,L=Math.max(L,j)}if(l){let j=0;!a&&!u||u&&!a&&d?j=Ut(h+T*E,l[1][0])/E:j=Yt(h+(u?A:-A)*E,l[0][0])/E,L=Math.max(L,j)}}}A=A+(A<0?L:-L),b=b+(b<0?C:-C),o&&(d?D>T*E?A=(yf(a,u)?-b:b)/E:b=(yf(a,u)?-A:A)*E:p?(A=b/E,u=a):(b=A*E,a=u));const M=a?h+b:h,R=u?v+A:v;return{width:_+(a?-b:b),height:S+(u?-A:A),x:i[0]*b*(a?-1:1)+M,y:i[1]*A*(u?-1:1)+R}}const w0={width:0,height:0,x:0,y:0},hk={...w0,pointerX:0,pointerY:0,aspectRatio:1};function gk(e){return[[0,0],[e.measured.width,e.measured.height]]}function mk(e,t,n){const r=t.position.x+e.position.x,o=t.position.y+e.position.y,i=e.measured.width??0,s=e.measured.height??0,l=n[0]*i,a=n[1]*s;return[[r-l,o-a],[r+i-l,o+s-a]]}function yk({domNode:e,nodeId:t,getStoreItems:n,onChange:r,onEnd:o}){const i=We(e);let s={controlDirection:mf("bottom-right"),boundaries:{minWidth:0,minHeight:0,maxWidth:Number.MAX_VALUE,maxHeight:Number.MAX_VALUE},resizeDirection:void 0,keepAspectRatio:!1};function l({controlPosition:u,boundaries:p,keepAspectRatio:c,resizeDirection:d,onResizeStart:x,onResize:y,onResizeEnd:w,shouldResize:k}){let m={...w0},g={...hk};s={boundaries:p,resizeDirection:d,keepAspectRatio:c,controlDirection:mf(u)};let h,v=null,_=[],S,E,b,A=!1;const D=zg().on("start",T=>{const{nodeLookup:I,transform:P,snapGrid:C,snapToGrid:L,nodeOrigin:M,paneDomNode:R}=n();if(h=I.get(t),!h)return;v=(R==null?void 0:R.getBoundingClientRect())??null;const{xSnapped:N,ySnapped:j}=uo(T.sourceEvent,{transform:P,snapGrid:C,snapToGrid:L,containerBounds:v});m={width:h.measured.width??0,height:h.measured.height??0,x:h.position.x??0,y:h.position.y??0},g={...m,pointerX:N,pointerY:j,aspectRatio:m.width/m.height},S=void 0,h.parentId&&(h.extent==="parent"||h.expandParent)&&(S=I.get(h.parentId),E=S&&h.extent==="parent"?gk(S):void 0),_=[],b=void 0;for(const[$,O]of I)if(O.parentId===t&&(_.push({id:$,position:{...O.position},extent:O.extent}),O.extent==="parent"||O.expandParent)){const B=mk(O,h,O.origin??M);b?b=[[Math.min(B[0][0],b[0][0]),Math.min(B[0][1],b[0][1])],[Math.max(B[1][0],b[1][0]),Math.max(B[1][1],b[1][1])]]:b=B}x==null||x(T,{...m})}).on("drag",T=>{const{transform:I,snapGrid:P,snapToGrid:C,nodeOrigin:L}=n(),M=uo(T.sourceEvent,{transform:I,snapGrid:P,snapToGrid:C,containerBounds:v}),R=[];if(!h)return;const{x:N,y:j,width:$,height:O}=m,B={},W=h.origin??L,{width:V,height:Y,x:X,y:Q}=pk(g,s.controlDirection,M,s.boundaries,s.keepAspectRatio,W,E,b),H=V!==$,K=Y!==O,ee=X!==N&&H,G=Q!==j&&K;if(!ee&&!G&&!H&&!K)return;if((ee||G||W[0]===1||W[1]===1)&&(B.x=ee?X:m.x,B.y=G?Q:m.y,m.x=B.x,m.y=B.y,_.length>0)){const le=X-N,ie=Q-j;for(const je of _)je.position={x:je.position.x-le+W[0]*(V-$),y:je.position.y-ie+W[1]*(Y-O)},R.push(je)}if((H||K)&&(B.width=H&&(!s.resizeDirection||s.resizeDirection==="horizontal")?V:m.width,B.height=K&&(!s.resizeDirection||s.resizeDirection==="vertical")?Y:m.height,m.width=B.width,m.height=B.height),S&&h.expandParent){const le=W[0]*(B.width??0);B.x&&B.x{A&&(w==null||w(T,{...m}),o==null||o({...m}),A=!1)});i.call(D)}function a(){i.on(".drag",null)}return{update:l,destroy:a}}var S0={exports:{}},k0={},_0={exports:{}},E0={};/**
- * @license React
- * use-sync-external-store-shim.production.js
- *
- * Copyright (c) Meta Platforms, Inc. and affiliates.
- *
- * This source code is licensed under the MIT license found in the
- * LICENSE file in the root directory of this source tree.
- */var Er=z;function xk(e,t){return e===t&&(e!==0||1/e===1/t)||e!==e&&t!==t}var vk=typeof Object.is=="function"?Object.is:xk,wk=Er.useState,Sk=Er.useEffect,kk=Er.useLayoutEffect,_k=Er.useDebugValue;function Ek(e,t){var n=t(),r=wk({inst:{value:n,getSnapshot:t}}),o=r[0].inst,i=r[1];return kk(function(){o.value=n,o.getSnapshot=t,Ol(o)&&i({inst:o})},[e,n,t]),Sk(function(){return Ol(o)&&i({inst:o}),e(function(){Ol(o)&&i({inst:o})})},[e]),_k(n),n}function Ol(e){var t=e.getSnapshot;e=e.value;try{var n=t();return!vk(e,n)}catch{return!0}}function Ck(e,t){return t()}var bk=typeof window>"u"||typeof window.document>"u"||typeof window.document.createElement>"u"?Ck:Ek;E0.useSyncExternalStore=Er.useSyncExternalStore!==void 0?Er.useSyncExternalStore:bk;_0.exports=E0;var Nk=_0.exports;/**
- * @license React
- * use-sync-external-store-shim/with-selector.production.js
- *
- * Copyright (c) Meta Platforms, Inc. and affiliates.
- *
- * This source code is licensed under the MIT license found in the
- * LICENSE file in the root directory of this source tree.
- */var qs=z,jk=Nk;function Mk(e,t){return e===t&&(e!==0||1/e===1/t)||e!==e&&t!==t}var zk=typeof Object.is=="function"?Object.is:Mk,Pk=jk.useSyncExternalStore,Tk=qs.useRef,Ik=qs.useEffect,Rk=qs.useMemo,Lk=qs.useDebugValue;k0.useSyncExternalStoreWithSelector=function(e,t,n,r,o){var i=Tk(null);if(i.current===null){var s={hasValue:!1,value:null};i.current=s}else s=i.current;i=Rk(function(){function a(x){if(!u){if(u=!0,p=x,x=r(x),o!==void 0&&s.hasValue){var y=s.value;if(o(y,x))return c=y}return c=x}if(y=c,zk(p,x))return y;var w=r(x);return o!==void 0&&o(y,w)?(p=x,y):(p=x,c=w)}var u=!1,p,c,d=n===void 0?null:n;return[function(){return a(t())},d===null?void 0:function(){return a(d())}]},[t,n,r,o]);var l=Pk(e,i[0],i[1]);return Ik(function(){s.hasValue=!0,s.value=l},[l]),Lk(l),l};S0.exports=k0;var Ak=S0.exports;const $k=np(Ak),Dk={},xf=e=>{let t;const n=new Set,r=(p,c)=>{const d=typeof p=="function"?p(t):p;if(!Object.is(d,t)){const x=t;t=c??(typeof d!="object"||d===null)?d:Object.assign({},t,d),n.forEach(y=>y(t,x))}},o=()=>t,a={setState:r,getState:o,getInitialState:()=>u,subscribe:p=>(n.add(p),()=>n.delete(p)),destroy:()=>{(Dk?"production":void 0)!=="production"&&console.warn("[DEPRECATED] The `destroy` method will be unsupported in a future version. Instead use unsubscribe function returned by subscribe. Everything will be garbage-collected if store is garbage-collected."),n.clear()}},u=t=e(r,o,a);return a},Ok=e=>e?xf(e):xf,{useDebugValue:Bk}=pp,{useSyncExternalStoreWithSelector:Fk}=$k,Hk=e=>e;function C0(e,t=Hk,n){const r=Fk(e.subscribe,e.getState,e.getServerState||e.getInitialState,t,n);return Bk(r),r}const vf=(e,t)=>{const n=Ok(e),r=(o,i=t)=>C0(n,o,i);return Object.assign(r,n),r},Vk=(e,t)=>e?vf(e,t):vf;function fe(e,t){if(Object.is(e,t))return!0;if(typeof e!="object"||e===null||typeof t!="object"||t===null)return!1;if(e instanceof Map&&t instanceof Map){if(e.size!==t.size)return!1;for(const[r,o]of e)if(!Object.is(o,t.get(r)))return!1;return!0}if(e instanceof Set&&t instanceof Set){if(e.size!==t.size)return!1;for(const r of e)if(!t.has(r))return!1;return!0}const n=Object.keys(e);if(n.length!==Object.keys(t).length)return!1;for(const r of n)if(!Object.prototype.hasOwnProperty.call(t,r)||!Object.is(e[r],t[r]))return!1;return!0}const Js=z.createContext(null),Wk=Js.Provider,b0=bt.error001();function ne(e,t){const n=z.useContext(Js);if(n===null)throw new Error(b0);return C0(n,e,t)}function pe(){const e=z.useContext(Js);if(e===null)throw new Error(b0);return z.useMemo(()=>({getState:e.getState,setState:e.setState,subscribe:e.subscribe}),[e])}const wf={display:"none"},Uk={position:"absolute",width:1,height:1,margin:-1,border:0,padding:0,overflow:"hidden",clip:"rect(0px, 0px, 0px, 0px)",clipPath:"inset(100%)"},N0="react-flow__node-desc",j0="react-flow__edge-desc",Yk="react-flow__aria-live",Xk=e=>e.ariaLiveMessage,Qk=e=>e.ariaLabelConfig;function Gk({rfId:e}){const t=ne(Xk);return f.jsx("div",{id:`${Yk}-${e}`,"aria-live":"assertive","aria-atomic":"true",style:Uk,children:t})}function Kk({rfId:e,disableKeyboardA11y:t}){const n=ne(Qk);return f.jsxs(f.Fragment,{children:[f.jsx("div",{id:`${N0}-${e}`,style:wf,children:t?n["node.a11yDescription.default"]:n["node.a11yDescription.keyboardDisabled"]}),f.jsx("div",{id:`${j0}-${e}`,style:wf,children:n["edge.a11yDescription.default"]}),!t&&f.jsx(Gk,{rfId:e})]})}const el=z.forwardRef(({position:e="top-left",children:t,className:n,style:r,...o},i)=>{const s=`${e}`.split("-");return f.jsx("div",{className:we(["react-flow__panel",n,...s]),style:r,ref:i,...o,children:t})});el.displayName="Panel";function Zk({proOptions:e,position:t="bottom-right"}){return e!=null&&e.hideAttribution?null:f.jsx(el,{position:t,className:"react-flow__attribution","data-message":"Please only hide this attribution when you are subscribed to React Flow Pro: https://pro.reactflow.dev",children:f.jsx("a",{href:"https://reactflow.dev",target:"_blank",rel:"noopener noreferrer","aria-label":"React Flow attribution",children:"React Flow"})})}const qk=e=>{const t=[],n=[];for(const[,r]of e.nodeLookup)r.selected&&t.push(r.internals.userNode);for(const[,r]of e.edgeLookup)r.selected&&n.push(r);return{selectedNodes:t,selectedEdges:n}},ki=e=>e.id;function Jk(e,t){return fe(e.selectedNodes.map(ki),t.selectedNodes.map(ki))&&fe(e.selectedEdges.map(ki),t.selectedEdges.map(ki))}function e_({onSelectionChange:e}){const t=pe(),{selectedNodes:n,selectedEdges:r}=ne(qk,Jk);return z.useEffect(()=>{const o={nodes:n,edges:r};e==null||e(o),t.getState().onSelectionChangeHandlers.forEach(i=>i(o))},[n,r,e]),null}const t_=e=>!!e.onSelectionChangeHandlers;function n_({onSelectionChange:e}){const t=ne(t_);return e||t?f.jsx(e_,{onSelectionChange:e}):null}const M0=[0,0],r_={x:0,y:0,zoom:1},o_=["nodes","edges","defaultNodes","defaultEdges","onConnect","onConnectStart","onConnectEnd","onClickConnectStart","onClickConnectEnd","nodesDraggable","autoPanOnNodeFocus","nodesConnectable","nodesFocusable","edgesFocusable","edgesReconnectable","elevateNodesOnSelect","elevateEdgesOnSelect","minZoom","maxZoom","nodeExtent","onNodesChange","onEdgesChange","elementsSelectable","connectionMode","snapGrid","snapToGrid","translateExtent","connectOnClick","defaultEdgeOptions","fitView","fitViewOptions","onNodesDelete","onEdgesDelete","onDelete","onNodeDrag","onNodeDragStart","onNodeDragStop","onSelectionDrag","onSelectionDragStart","onSelectionDragStop","onMoveStart","onMove","onMoveEnd","noPanClassName","nodeOrigin","autoPanOnConnect","autoPanOnNodeDrag","onError","connectionRadius","isValidConnection","selectNodesOnDrag","nodeDragThreshold","connectionDragThreshold","onBeforeDelete","debug","autoPanSpeed","ariaLabelConfig","zIndexMode"],Sf=[...o_,"rfId"],i_=e=>({setNodes:e.setNodes,setEdges:e.setEdges,setMinZoom:e.setMinZoom,setMaxZoom:e.setMaxZoom,setTranslateExtent:e.setTranslateExtent,setNodeExtent:e.setNodeExtent,reset:e.reset,setDefaultNodesAndEdges:e.setDefaultNodesAndEdges}),kf={translateExtent:To,nodeOrigin:M0,minZoom:.5,maxZoom:2,elementsSelectable:!0,noPanClassName:"nopan",rfId:"1"};function s_(e){const{setNodes:t,setEdges:n,setMinZoom:r,setMaxZoom:o,setTranslateExtent:i,setNodeExtent:s,reset:l,setDefaultNodesAndEdges:a}=ne(i_,fe),u=pe();z.useEffect(()=>(a(e.defaultNodes,e.defaultEdges),()=>{p.current=kf,l()}),[]);const p=z.useRef(kf);return z.useEffect(()=>{for(const c of Sf){const d=e[c],x=p.current[c];d!==x&&(typeof e[c]>"u"||(c==="nodes"?t(d):c==="edges"?n(d):c==="minZoom"?r(d):c==="maxZoom"?o(d):c==="translateExtent"?i(d):c==="nodeExtent"?s(d):c==="ariaLabelConfig"?u.setState({ariaLabelConfig:NS(d)}):c==="fitView"?u.setState({fitViewQueued:d}):c==="fitViewOptions"?u.setState({fitViewOptions:d}):u.setState({[c]:d})))}p.current=e},Sf.map(c=>e[c])),null}function _f(){return typeof window>"u"||!window.matchMedia?null:window.matchMedia("(prefers-color-scheme: dark)")}function l_(e){var r;const[t,n]=z.useState(e==="system"?null:e);return z.useEffect(()=>{if(e!=="system"){n(e);return}const o=_f(),i=()=>n(o!=null&&o.matches?"dark":"light");return i(),o==null||o.addEventListener("change",i),()=>{o==null||o.removeEventListener("change",i)}},[e]),t!==null?t:(r=_f())!=null&&r.matches?"dark":"light"}const Ef=typeof document<"u"?document:null;function Ao(e=null,t={target:Ef,actInsideInputWithModifier:!0}){const[n,r]=z.useState(!1),o=z.useRef(!1),i=z.useRef(new Set([])),[s,l]=z.useMemo(()=>{if(e!==null){const u=(Array.isArray(e)?e:[e]).filter(c=>typeof c=="string").map(c=>c.replace("+",`
-`).replace(`
-
-`,`
-+`).split(`
-`)),p=u.reduce((c,d)=>c.concat(...d),[]);return[u,p]}return[[],[]]},[e]);return z.useEffect(()=>{const a=(t==null?void 0:t.target)??Ef,u=(t==null?void 0:t.actInsideInputWithModifier)??!0;if(e!==null){const p=x=>{var k,m;if(o.current=x.ctrlKey||x.metaKey||x.shiftKey||x.altKey,(!o.current||o.current&&!u)&&o0(x))return!1;const w=bf(x.code,l);if(i.current.add(x[w]),Cf(s,i.current,!1)){const g=((m=(k=x.composedPath)==null?void 0:k.call(x))==null?void 0:m[0])||x.target,h=(g==null?void 0:g.nodeName)==="BUTTON"||(g==null?void 0:g.nodeName)==="A";t.preventDefault!==!1&&(o.current||!h)&&x.preventDefault(),r(!0)}},c=x=>{const y=bf(x.code,l);Cf(s,i.current,!0)?(r(!1),i.current.clear()):i.current.delete(x[y]),x.key==="Meta"&&i.current.clear(),o.current=!1},d=()=>{i.current.clear(),r(!1)};return a==null||a.addEventListener("keydown",p),a==null||a.addEventListener("keyup",c),window.addEventListener("blur",d),window.addEventListener("contextmenu",d),()=>{a==null||a.removeEventListener("keydown",p),a==null||a.removeEventListener("keyup",c),window.removeEventListener("blur",d),window.removeEventListener("contextmenu",d)}}},[e,r]),n}function Cf(e,t,n){return e.filter(r=>n||r.length===t.size).some(r=>r.every(o=>t.has(o)))}function bf(e,t){return t.includes(e)?"code":"key"}const a_=()=>{const e=pe();return z.useMemo(()=>({zoomIn:t=>{const{panZoom:n}=e.getState();return n?n.scaleBy(1.2,{duration:t==null?void 0:t.duration}):Promise.resolve(!1)},zoomOut:t=>{const{panZoom:n}=e.getState();return n?n.scaleBy(1/1.2,{duration:t==null?void 0:t.duration}):Promise.resolve(!1)},zoomTo:(t,n)=>{const{panZoom:r}=e.getState();return r?r.scaleTo(t,{duration:n==null?void 0:n.duration}):Promise.resolve(!1)},getZoom:()=>e.getState().transform[2],setViewport:async(t,n)=>{const{transform:[r,o,i],panZoom:s}=e.getState();return s?(await s.setViewport({x:t.x??r,y:t.y??o,zoom:t.zoom??i},n),Promise.resolve(!0)):Promise.resolve(!1)},getViewport:()=>{const[t,n,r]=e.getState().transform;return{x:t,y:n,zoom:r}},setCenter:async(t,n,r)=>e.getState().setCenter(t,n,r),fitBounds:async(t,n)=>{const{width:r,height:o,minZoom:i,maxZoom:s,panZoom:l}=e.getState(),a=dc(t,r,o,i,s,(n==null?void 0:n.padding)??.1);return l?(await l.setViewport(a,{duration:n==null?void 0:n.duration,ease:n==null?void 0:n.ease,interpolate:n==null?void 0:n.interpolate}),Promise.resolve(!0)):Promise.resolve(!1)},screenToFlowPosition:(t,n={})=>{const{transform:r,snapGrid:o,snapToGrid:i,domNode:s}=e.getState();if(!s)return t;const{x:l,y:a}=s.getBoundingClientRect(),u={x:t.x-l,y:t.y-a},p=n.snapGrid??o,c=n.snapToGrid??i;return Qo(u,r,c,p)},flowToScreenPosition:t=>{const{transform:n,domNode:r}=e.getState();if(!r)return t;const{x:o,y:i}=r.getBoundingClientRect(),s=bs(t,n);return{x:s.x+o,y:s.y+i}}}),[])};function z0(e,t){const n=[],r=new Map,o=[];for(const i of e)if(i.type==="add"){o.push(i);continue}else if(i.type==="remove"||i.type==="replace")r.set(i.id,[i]);else{const s=r.get(i.id);s?s.push(i):r.set(i.id,[i])}for(const i of t){const s=r.get(i.id);if(!s){n.push(i);continue}if(s[0].type==="remove")continue;if(s[0].type==="replace"){n.push({...s[0].item});continue}const l={...i};for(const a of s)u_(a,l);n.push(l)}return o.length&&o.forEach(i=>{i.index!==void 0?n.splice(i.index,0,{...i.item}):n.push({...i.item})}),n}function u_(e,t){switch(e.type){case"select":{t.selected=e.selected;break}case"position":{typeof e.position<"u"&&(t.position=e.position),typeof e.dragging<"u"&&(t.dragging=e.dragging);break}case"dimensions":{typeof e.dimensions<"u"&&(t.measured={...e.dimensions},e.setAttributes&&((e.setAttributes===!0||e.setAttributes==="width")&&(t.width=e.dimensions.width),(e.setAttributes===!0||e.setAttributes==="height")&&(t.height=e.dimensions.height))),typeof e.resizing=="boolean"&&(t.resizing=e.resizing);break}}}function P0(e,t){return z0(e,t)}function T0(e,t){return z0(e,t)}function xn(e,t){return{id:e,type:"select",selected:t}}function nr(e,t=new Set,n=!1){const r=[];for(const[o,i]of e){const s=t.has(o);!(i.selected===void 0&&!s)&&i.selected!==s&&(n&&(i.selected=s),r.push(xn(i.id,s)))}return r}function Nf({items:e=[],lookup:t}){var o;const n=[],r=new Map(e.map(i=>[i.id,i]));for(const[i,s]of e.entries()){const l=t.get(s.id),a=((o=l==null?void 0:l.internals)==null?void 0:o.userNode)??l;a!==void 0&&a!==s&&n.push({id:s.id,item:s,type:"replace"}),a===void 0&&n.push({item:s,type:"add",index:i})}for(const[i]of t)r.get(i)===void 0&&n.push({id:i,type:"remove"});return n}function jf(e){return{id:e.id,type:"remove"}}const Mf=e=>yS(e),c_=e=>Kg(e);function I0(e){return z.forwardRef(e)}const d_=typeof window<"u"?z.useLayoutEffect:z.useEffect;function zf(e){const[t,n]=z.useState(BigInt(0)),[r]=z.useState(()=>f_(()=>n(o=>o+BigInt(1))));return d_(()=>{const o=r.get();o.length&&(e(o),r.reset())},[t]),r}function f_(e){let t=[];return{get:()=>t,reset:()=>{t=[]},push:n=>{t.push(n),e()}}}const R0=z.createContext(null);function p_({children:e}){const t=pe(),n=z.useCallback(l=>{const{nodes:a=[],setNodes:u,hasDefaultNodes:p,onNodesChange:c,nodeLookup:d,fitViewQueued:x,onNodesChangeMiddlewareMap:y}=t.getState();let w=a;for(const m of l)w=typeof m=="function"?m(w):m;let k=Nf({items:w,lookup:d});for(const m of y.values())k=m(k);p&&u(w),k.length>0?c==null||c(k):x&&window.requestAnimationFrame(()=>{const{fitViewQueued:m,nodes:g,setNodes:h}=t.getState();m&&h(g)})},[]),r=zf(n),o=z.useCallback(l=>{const{edges:a=[],setEdges:u,hasDefaultEdges:p,onEdgesChange:c,edgeLookup:d}=t.getState();let x=a;for(const y of l)x=typeof y=="function"?y(x):y;p?u(x):c&&c(Nf({items:x,lookup:d}))},[]),i=zf(o),s=z.useMemo(()=>({nodeQueue:r,edgeQueue:i}),[]);return f.jsx(R0.Provider,{value:s,children:e})}function h_(){const e=z.useContext(R0);if(!e)throw new Error("useBatchContext must be used within a BatchProvider");return e}const g_=e=>!!e.panZoom;function xc(){const e=a_(),t=pe(),n=h_(),r=ne(g_),o=z.useMemo(()=>{const i=c=>t.getState().nodeLookup.get(c),s=c=>{n.nodeQueue.push(c)},l=c=>{n.edgeQueue.push(c)},a=c=>{var m,g;const{nodeLookup:d,nodeOrigin:x}=t.getState(),y=Mf(c)?c:d.get(c.id),w=y.parentId?n0(y.position,y.measured,y.parentId,d,x):y.position,k={...y,position:w,width:((m=y.measured)==null?void 0:m.width)??y.width,height:((g=y.measured)==null?void 0:g.height)??y.height};return kr(k)},u=(c,d,x={replace:!1})=>{s(y=>y.map(w=>{if(w.id===c){const k=typeof d=="function"?d(w):d;return x.replace&&Mf(k)?k:{...w,...k}}return w}))},p=(c,d,x={replace:!1})=>{l(y=>y.map(w=>{if(w.id===c){const k=typeof d=="function"?d(w):d;return x.replace&&c_(k)?k:{...w,...k}}return w}))};return{getNodes:()=>t.getState().nodes.map(c=>({...c})),getNode:c=>{var d;return(d=i(c))==null?void 0:d.internals.userNode},getInternalNode:i,getEdges:()=>{const{edges:c=[]}=t.getState();return c.map(d=>({...d}))},getEdge:c=>t.getState().edgeLookup.get(c),setNodes:s,setEdges:l,addNodes:c=>{const d=Array.isArray(c)?c:[c];n.nodeQueue.push(x=>[...x,...d])},addEdges:c=>{const d=Array.isArray(c)?c:[c];n.edgeQueue.push(x=>[...x,...d])},toObject:()=>{const{nodes:c=[],edges:d=[],transform:x}=t.getState(),[y,w,k]=x;return{nodes:c.map(m=>({...m})),edges:d.map(m=>({...m})),viewport:{x:y,y:w,zoom:k}}},deleteElements:async({nodes:c=[],edges:d=[]})=>{const{nodes:x,edges:y,onNodesDelete:w,onEdgesDelete:k,triggerNodeChanges:m,triggerEdgeChanges:g,onDelete:h,onBeforeDelete:v}=t.getState(),{nodes:_,edges:S}=await kS({nodesToRemove:c,edgesToRemove:d,nodes:x,edges:y,onBeforeDelete:v}),E=S.length>0,b=_.length>0;if(E){const A=S.map(jf);k==null||k(S),g(A)}if(b){const A=_.map(jf);w==null||w(_),m(A)}return(b||E)&&(h==null||h({nodes:_,edges:S})),{deletedNodes:_,deletedEdges:S}},getIntersectingNodes:(c,d=!0,x)=>{const y=of(c),w=y?c:a(c),k=x!==void 0;return w?(x||t.getState().nodes).filter(m=>{const g=t.getState().nodeLookup.get(m.id);if(g&&!y&&(m.id===c.id||!g.internals.positionAbsolute))return!1;const h=kr(k?m:g),v=Ro(h,w);return d&&v>0||v>=h.width*h.height||v>=w.width*w.height}):[]},isNodeIntersecting:(c,d,x=!0)=>{const w=of(c)?c:a(c);if(!w)return!1;const k=Ro(w,d);return x&&k>0||k>=d.width*d.height||k>=w.width*w.height},updateNode:u,updateNodeData:(c,d,x={replace:!1})=>{u(c,y=>{const w=typeof d=="function"?d(y):d;return x.replace?{...y,data:w}:{...y,data:{...y.data,...w}}},x)},updateEdge:p,updateEdgeData:(c,d,x={replace:!1})=>{p(c,y=>{const w=typeof d=="function"?d(y):d;return x.replace?{...y,data:w}:{...y,data:{...y.data,...w}}},x)},getNodesBounds:c=>{const{nodeLookup:d,nodeOrigin:x}=t.getState();return xS(c,{nodeLookup:d,nodeOrigin:x})},getHandleConnections:({type:c,id:d,nodeId:x})=>{var y;return Array.from(((y=t.getState().connectionLookup.get(`${x}-${c}${d?`-${d}`:""}`))==null?void 0:y.values())??[])},getNodeConnections:({type:c,handleId:d,nodeId:x})=>{var y;return Array.from(((y=t.getState().connectionLookup.get(`${x}${c?d?`-${c}-${d}`:`-${c}`:""}`))==null?void 0:y.values())??[])},fitView:async c=>{const d=t.getState().fitViewResolver??bS();return t.setState({fitViewQueued:!0,fitViewOptions:c,fitViewResolver:d}),n.nodeQueue.push(x=>[...x]),d.promise}}},[]);return z.useMemo(()=>({...o,...e,viewportInitialized:r}),[r])}const Pf=e=>e.selected,m_=typeof window<"u"?window:void 0;function y_({deleteKeyCode:e,multiSelectionKeyCode:t}){const n=pe(),{deleteElements:r}=xc(),o=Ao(e,{actInsideInputWithModifier:!1}),i=Ao(t,{target:m_});z.useEffect(()=>{if(o){const{edges:s,nodes:l}=n.getState();r({nodes:l.filter(Pf),edges:s.filter(Pf)}),n.setState({nodesSelectionActive:!1})}},[o]),z.useEffect(()=>{n.setState({multiSelectionActive:i})},[i])}function x_(e){const t=pe();z.useEffect(()=>{const n=()=>{var o,i,s,l;if(!e.current||!(((i=(o=e.current).checkVisibility)==null?void 0:i.call(o))??!0))return!1;const r=fc(e.current);(r.height===0||r.width===0)&&((l=(s=t.getState()).onError)==null||l.call(s,"004",bt.error004())),t.setState({width:r.width||500,height:r.height||500})};if(e.current){n(),window.addEventListener("resize",n);const r=new ResizeObserver(()=>n());return r.observe(e.current),()=>{window.removeEventListener("resize",n),r&&e.current&&r.unobserve(e.current)}}},[])}const tl={position:"absolute",width:"100%",height:"100%",top:0,left:0},v_=e=>({userSelectionActive:e.userSelectionActive,lib:e.lib,connectionInProgress:e.connection.inProgress});function w_({onPaneContextMenu:e,zoomOnScroll:t=!0,zoomOnPinch:n=!0,panOnScroll:r=!1,panOnScrollSpeed:o=.5,panOnScrollMode:i=bn.Free,zoomOnDoubleClick:s=!0,panOnDrag:l=!0,defaultViewport:a,translateExtent:u,minZoom:p,maxZoom:c,zoomActivationKeyCode:d,preventScrolling:x=!0,children:y,noWheelClassName:w,noPanClassName:k,onViewportChange:m,isControlledViewport:g,paneClickDistance:h,selectionOnDrag:v}){const _=pe(),S=z.useRef(null),{userSelectionActive:E,lib:b,connectionInProgress:A}=ne(v_,fe),D=Ao(d),T=z.useRef();x_(S);const I=z.useCallback(P=>{m==null||m({x:P[0],y:P[1],zoom:P[2]}),g||_.setState({transform:P})},[m,g]);return z.useEffect(()=>{if(S.current){T.current=uk({domNode:S.current,minZoom:p,maxZoom:c,translateExtent:u,viewport:a,onDraggingChange:M=>_.setState(R=>R.paneDragging===M?R:{paneDragging:M}),onPanZoomStart:(M,R)=>{const{onViewportChangeStart:N,onMoveStart:j}=_.getState();j==null||j(M,R),N==null||N(R)},onPanZoom:(M,R)=>{const{onViewportChange:N,onMove:j}=_.getState();j==null||j(M,R),N==null||N(R)},onPanZoomEnd:(M,R)=>{const{onViewportChangeEnd:N,onMoveEnd:j}=_.getState();j==null||j(M,R),N==null||N(R)}});const{x:P,y:C,zoom:L}=T.current.getViewport();return _.setState({panZoom:T.current,transform:[P,C,L],domNode:S.current.closest(".react-flow")}),()=>{var M;(M=T.current)==null||M.destroy()}}},[]),z.useEffect(()=>{var P;(P=T.current)==null||P.update({onPaneContextMenu:e,zoomOnScroll:t,zoomOnPinch:n,panOnScroll:r,panOnScrollSpeed:o,panOnScrollMode:i,zoomOnDoubleClick:s,panOnDrag:l,zoomActivationKeyPressed:D,preventScrolling:x,noPanClassName:k,userSelectionActive:E,noWheelClassName:w,lib:b,onTransformChange:I,connectionInProgress:A,selectionOnDrag:v,paneClickDistance:h})},[e,t,n,r,o,i,s,l,D,x,k,E,w,b,I,A,v,h]),f.jsx("div",{className:"react-flow__renderer",ref:S,style:tl,children:y})}const S_=e=>({userSelectionActive:e.userSelectionActive,userSelectionRect:e.userSelectionRect});function k_(){const{userSelectionActive:e,userSelectionRect:t}=ne(S_,fe);return e&&t?f.jsx("div",{className:"react-flow__selection react-flow__container",style:{width:t.width,height:t.height,transform:`translate(${t.x}px, ${t.y}px)`}}):null}const Bl=(e,t)=>n=>{n.target===t.current&&(e==null||e(n))},__=e=>({userSelectionActive:e.userSelectionActive,elementsSelectable:e.elementsSelectable,connectionInProgress:e.connection.inProgress,dragging:e.paneDragging});function E_({isSelecting:e,selectionKeyPressed:t,selectionMode:n=Io.Full,panOnDrag:r,paneClickDistance:o,selectionOnDrag:i,onSelectionStart:s,onSelectionEnd:l,onPaneClick:a,onPaneContextMenu:u,onPaneScroll:p,onPaneMouseEnter:c,onPaneMouseMove:d,onPaneMouseLeave:x,children:y}){const w=pe(),{userSelectionActive:k,elementsSelectable:m,dragging:g,connectionInProgress:h}=ne(__,fe),v=m&&(e||k),_=z.useRef(null),S=z.useRef(),E=z.useRef(new Set),b=z.useRef(new Set),A=z.useRef(!1),D=N=>{if(A.current||h){A.current=!1;return}a==null||a(N),w.getState().resetSelectedElements(),w.setState({nodesSelectionActive:!1})},T=N=>{if(Array.isArray(r)&&(r!=null&&r.includes(2))){N.preventDefault();return}u==null||u(N)},I=p?N=>p(N):void 0,P=N=>{A.current&&(N.stopPropagation(),A.current=!1)},C=N=>{var Y,X;const{domNode:j}=w.getState();if(S.current=j==null?void 0:j.getBoundingClientRect(),!S.current)return;const $=N.target===_.current;if(!$&&!!N.target.closest(".nokey")||!e||!(i&&$||t)||N.button!==0||!N.isPrimary)return;(X=(Y=N.target)==null?void 0:Y.setPointerCapture)==null||X.call(Y,N.pointerId),A.current=!1;const{x:W,y:V}=dt(N.nativeEvent,S.current);w.setState({userSelectionRect:{width:0,height:0,startX:W,startY:V,x:W,y:V}}),$||(N.stopPropagation(),N.preventDefault())},L=N=>{const{userSelectionRect:j,transform:$,nodeLookup:O,edgeLookup:B,connectionLookup:W,triggerNodeChanges:V,triggerEdgeChanges:Y,defaultEdgeOptions:X,resetSelectedElements:Q}=w.getState();if(!S.current||!j)return;const{x:H,y:K}=dt(N.nativeEvent,S.current),{startX:ee,startY:G}=j;if(!A.current){const ie=t?0:o;if(Math.hypot(H-ee,K-G)<=ie)return;Q(),s==null||s(N)}A.current=!0;const J={startX:ee,startY:G,x:Hie.id)),b.current=new Set;const le=(X==null?void 0:X.selectable)??!0;for(const ie of E.current){const je=W.get(ie);if(je)for(const{edgeId:Vt}of je.values()){const jt=B.get(Vt);jt&&(jt.selectable??le)&&b.current.add(Vt)}}if(!sf(Z,E.current)){const ie=nr(O,E.current,!0);V(ie)}if(!sf(re,b.current)){const ie=nr(B,b.current);Y(ie)}w.setState({userSelectionRect:J,userSelectionActive:!0,nodesSelectionActive:!1})},M=N=>{var j,$;N.button===0&&(($=(j=N.target)==null?void 0:j.releasePointerCapture)==null||$.call(j,N.pointerId),!k&&N.target===_.current&&w.getState().userSelectionRect&&(D==null||D(N)),w.setState({userSelectionActive:!1,userSelectionRect:null}),A.current&&(l==null||l(N),w.setState({nodesSelectionActive:E.current.size>0})))},R=r===!0||Array.isArray(r)&&r.includes(0);return f.jsxs("div",{className:we(["react-flow__pane",{draggable:R,dragging:g,selection:e}]),onClick:v?void 0:Bl(D,_),onContextMenu:Bl(T,_),onWheel:Bl(I,_),onPointerEnter:v?void 0:c,onPointerMove:v?L:d,onPointerUp:v?M:void 0,onPointerDownCapture:v?C:void 0,onClickCapture:v?P:void 0,onPointerLeave:x,ref:_,style:tl,children:[y,f.jsx(k_,{})]})}function ru({id:e,store:t,unselect:n=!1,nodeRef:r}){const{addSelectedNodes:o,unselectNodesAndEdges:i,multiSelectionActive:s,nodeLookup:l,onError:a}=t.getState(),u=l.get(e);if(!u){a==null||a("012",bt.error012(e));return}t.setState({nodesSelectionActive:!1}),u.selected?(n||u.selected&&s)&&(i({nodes:[u],edges:[]}),requestAnimationFrame(()=>{var p;return(p=r==null?void 0:r.current)==null?void 0:p.blur()})):o([e])}function L0({nodeRef:e,disabled:t=!1,noDragClassName:n,handleSelector:r,nodeId:o,isSelectable:i,nodeClickDistance:s}){const l=pe(),[a,u]=z.useState(!1),p=z.useRef();return z.useEffect(()=>{p.current=GS({getStoreItems:()=>l.getState(),onNodeMouseDown:c=>{ru({id:c,store:l,nodeRef:e})},onDragStart:()=>{u(!0)},onDragStop:()=>{u(!1)}})},[]),z.useEffect(()=>{if(!(t||!e.current||!p.current))return p.current.update({noDragClassName:n,handleSelector:r,domNode:e.current,isSelectable:i,nodeId:o,nodeClickDistance:s}),()=>{var c;(c=p.current)==null||c.destroy()}},[n,r,t,i,e,o,s]),a}const C_=e=>t=>t.selected&&(t.draggable||e&&typeof t.draggable>"u");function A0(){const e=pe();return z.useCallback(n=>{const{nodeExtent:r,snapToGrid:o,snapGrid:i,nodesDraggable:s,onError:l,updateNodePositions:a,nodeLookup:u,nodeOrigin:p}=e.getState(),c=new Map,d=C_(s),x=o?i[0]:5,y=o?i[1]:5,w=n.direction.x*x*n.factor,k=n.direction.y*y*n.factor;for(const[,m]of u){if(!d(m))continue;let g={x:m.internals.positionAbsolute.x+w,y:m.internals.positionAbsolute.y+k};o&&(g=Xo(g,i));const{position:h,positionAbsolute:v}=Zg({nodeId:m.id,nextPosition:g,nodeLookup:u,nodeExtent:r,nodeOrigin:p,onError:l});m.position=h,m.internals.positionAbsolute=v,c.set(m.id,m)}a(c)},[])}const vc=z.createContext(null),b_=vc.Provider;vc.Consumer;const $0=()=>z.useContext(vc),N_=e=>({connectOnClick:e.connectOnClick,noPanClassName:e.noPanClassName,rfId:e.rfId}),j_=(e,t,n)=>r=>{const{connectionClickStartHandle:o,connectionMode:i,connection:s}=r,{fromHandle:l,toHandle:a,isValid:u}=s,p=(a==null?void 0:a.nodeId)===e&&(a==null?void 0:a.id)===t&&(a==null?void 0:a.type)===n;return{connectingFrom:(l==null?void 0:l.nodeId)===e&&(l==null?void 0:l.id)===t&&(l==null?void 0:l.type)===n,connectingTo:p,clickConnecting:(o==null?void 0:o.nodeId)===e&&(o==null?void 0:o.id)===t&&(o==null?void 0:o.type)===n,isPossibleEndHandle:i===wr.Strict?(l==null?void 0:l.type)!==n:e!==(l==null?void 0:l.nodeId)||t!==(l==null?void 0:l.id),connectionInProcess:!!l,clickConnectionInProcess:!!o,valid:p&&u}};function M_({type:e="source",position:t=q.Top,isValidConnection:n,isConnectable:r=!0,isConnectableStart:o=!0,isConnectableEnd:i=!0,id:s,onConnect:l,children:a,className:u,onMouseDown:p,onTouchStart:c,...d},x){var L,M;const y=s||null,w=e==="target",k=pe(),m=$0(),{connectOnClick:g,noPanClassName:h,rfId:v}=ne(N_,fe),{connectingFrom:_,connectingTo:S,clickConnecting:E,isPossibleEndHandle:b,connectionInProcess:A,clickConnectionInProcess:D,valid:T}=ne(j_(m,y,e),fe);m||(M=(L=k.getState()).onError)==null||M.call(L,"010",bt.error010());const I=R=>{const{defaultEdgeOptions:N,onConnect:j,hasDefaultEdges:$}=k.getState(),O={...N,...R};if($){const{edges:B,setEdges:W}=k.getState();W(IS(O,B))}j==null||j(O),l==null||l(O)},P=R=>{if(!m)return;const N=i0(R.nativeEvent);if(o&&(N&&R.button===0||!N)){const j=k.getState();nu.onPointerDown(R.nativeEvent,{handleDomNode:R.currentTarget,autoPanOnConnect:j.autoPanOnConnect,connectionMode:j.connectionMode,connectionRadius:j.connectionRadius,domNode:j.domNode,nodeLookup:j.nodeLookup,lib:j.lib,isTarget:w,handleId:y,nodeId:m,flowId:j.rfId,panBy:j.panBy,cancelConnection:j.cancelConnection,onConnectStart:j.onConnectStart,onConnectEnd:(...$)=>{var O,B;return(B=(O=k.getState()).onConnectEnd)==null?void 0:B.call(O,...$)},updateConnection:j.updateConnection,onConnect:I,isValidConnection:n||((...$)=>{var O,B;return((B=(O=k.getState()).isValidConnection)==null?void 0:B.call(O,...$))??!0}),getTransform:()=>k.getState().transform,getFromHandle:()=>k.getState().connection.fromHandle,autoPanSpeed:j.autoPanSpeed,dragThreshold:j.connectionDragThreshold})}N?p==null||p(R):c==null||c(R)},C=R=>{const{onClickConnectStart:N,onClickConnectEnd:j,connectionClickStartHandle:$,connectionMode:O,isValidConnection:B,lib:W,rfId:V,nodeLookup:Y,connection:X}=k.getState();if(!m||!$&&!o)return;if(!$){N==null||N(R.nativeEvent,{nodeId:m,handleId:y,handleType:e}),k.setState({connectionClickStartHandle:{nodeId:m,type:e,id:y}});return}const Q=r0(R.target),H=n||B,{connection:K,isValid:ee}=nu.isValid(R.nativeEvent,{handle:{nodeId:m,id:y,type:e},connectionMode:O,fromNodeId:$.nodeId,fromHandleId:$.id||null,fromType:$.type,isValidConnection:H,flowId:V,doc:Q,lib:W,nodeLookup:Y});ee&&K&&I(K);const G=structuredClone(X);delete G.inProgress,G.toPosition=G.toHandle?G.toHandle.position:null,j==null||j(R,G),k.setState({connectionClickStartHandle:null})};return f.jsx("div",{"data-handleid":y,"data-nodeid":m,"data-handlepos":t,"data-id":`${v}-${m}-${y}-${e}`,className:we(["react-flow__handle",`react-flow__handle-${t}`,"nodrag",h,u,{source:!w,target:w,connectable:r,connectablestart:o,connectableend:i,clickconnecting:E,connectingfrom:_,connectingto:S,valid:T,connectionindicator:r&&(!A||b)&&(A||D?i:o)}]),onMouseDown:P,onTouchStart:P,onClick:g?C:void 0,ref:x,...d,children:a})}const Cr=z.memo(I0(M_));function z_({data:e,isConnectable:t,sourcePosition:n=q.Bottom}){return f.jsxs(f.Fragment,{children:[e==null?void 0:e.label,f.jsx(Cr,{type:"source",position:n,isConnectable:t})]})}function P_({data:e,isConnectable:t,targetPosition:n=q.Top,sourcePosition:r=q.Bottom}){return f.jsxs(f.Fragment,{children:[f.jsx(Cr,{type:"target",position:n,isConnectable:t}),e==null?void 0:e.label,f.jsx(Cr,{type:"source",position:r,isConnectable:t})]})}function T_(){return null}function I_({data:e,isConnectable:t,targetPosition:n=q.Top}){return f.jsxs(f.Fragment,{children:[f.jsx(Cr,{type:"target",position:n,isConnectable:t}),e==null?void 0:e.label]})}const Ns={ArrowUp:{x:0,y:-1},ArrowDown:{x:0,y:1},ArrowLeft:{x:-1,y:0},ArrowRight:{x:1,y:0}},Tf={input:z_,default:P_,output:I_,group:T_};function R_(e){var t,n,r,o;return e.internals.handleBounds===void 0?{width:e.width??e.initialWidth??((t=e.style)==null?void 0:t.width),height:e.height??e.initialHeight??((n=e.style)==null?void 0:n.height)}:{width:e.width??((r=e.style)==null?void 0:r.width),height:e.height??((o=e.style)==null?void 0:o.height)}}const L_=e=>{const{width:t,height:n,x:r,y:o}=Yo(e.nodeLookup,{filter:i=>!!i.selected});return{width:ct(t)?t:null,height:ct(n)?n:null,userSelectionActive:e.userSelectionActive,transformString:`translate(${e.transform[0]}px,${e.transform[1]}px) scale(${e.transform[2]}) translate(${r}px,${o}px)`}};function A_({onSelectionContextMenu:e,noPanClassName:t,disableKeyboardA11y:n}){const r=pe(),{width:o,height:i,transformString:s,userSelectionActive:l}=ne(L_,fe),a=A0(),u=z.useRef(null);z.useEffect(()=>{var x;n||(x=u.current)==null||x.focus({preventScroll:!0})},[n]);const p=!l&&o!==null&&i!==null;if(L0({nodeRef:u,disabled:!p}),!p)return null;const c=e?x=>{const y=r.getState().nodes.filter(w=>w.selected);e(x,y)}:void 0,d=x=>{Object.prototype.hasOwnProperty.call(Ns,x.key)&&(x.preventDefault(),a({direction:Ns[x.key],factor:x.shiftKey?4:1}))};return f.jsx("div",{className:we(["react-flow__nodesselection","react-flow__container",t]),style:{transform:s},children:f.jsx("div",{ref:u,className:"react-flow__nodesselection-rect",onContextMenu:c,tabIndex:n?void 0:-1,onKeyDown:n?void 0:d,style:{width:o,height:i}})})}const If=typeof window<"u"?window:void 0,$_=e=>({nodesSelectionActive:e.nodesSelectionActive,userSelectionActive:e.userSelectionActive});function D0({children:e,onPaneClick:t,onPaneMouseEnter:n,onPaneMouseMove:r,onPaneMouseLeave:o,onPaneContextMenu:i,onPaneScroll:s,paneClickDistance:l,deleteKeyCode:a,selectionKeyCode:u,selectionOnDrag:p,selectionMode:c,onSelectionStart:d,onSelectionEnd:x,multiSelectionKeyCode:y,panActivationKeyCode:w,zoomActivationKeyCode:k,elementsSelectable:m,zoomOnScroll:g,zoomOnPinch:h,panOnScroll:v,panOnScrollSpeed:_,panOnScrollMode:S,zoomOnDoubleClick:E,panOnDrag:b,defaultViewport:A,translateExtent:D,minZoom:T,maxZoom:I,preventScrolling:P,onSelectionContextMenu:C,noWheelClassName:L,noPanClassName:M,disableKeyboardA11y:R,onViewportChange:N,isControlledViewport:j}){const{nodesSelectionActive:$,userSelectionActive:O}=ne($_,fe),B=Ao(u,{target:If}),W=Ao(w,{target:If}),V=W||b,Y=W||v,X=p&&V!==!0,Q=B||O||X;return y_({deleteKeyCode:a,multiSelectionKeyCode:y}),f.jsx(w_,{onPaneContextMenu:i,elementsSelectable:m,zoomOnScroll:g,zoomOnPinch:h,panOnScroll:Y,panOnScrollSpeed:_,panOnScrollMode:S,zoomOnDoubleClick:E,panOnDrag:!B&&V,defaultViewport:A,translateExtent:D,minZoom:T,maxZoom:I,zoomActivationKeyCode:k,preventScrolling:P,noWheelClassName:L,noPanClassName:M,onViewportChange:N,isControlledViewport:j,paneClickDistance:l,selectionOnDrag:X,children:f.jsxs(E_,{onSelectionStart:d,onSelectionEnd:x,onPaneClick:t,onPaneMouseEnter:n,onPaneMouseMove:r,onPaneMouseLeave:o,onPaneContextMenu:i,onPaneScroll:s,panOnDrag:V,isSelecting:!!Q,selectionMode:c,selectionKeyPressed:B,paneClickDistance:l,selectionOnDrag:X,children:[e,$&&f.jsx(A_,{onSelectionContextMenu:C,noPanClassName:M,disableKeyboardA11y:R})]})})}D0.displayName="FlowRenderer";const D_=z.memo(D0),O_=e=>t=>e?cc(t.nodeLookup,{x:0,y:0,width:t.width,height:t.height},t.transform,!0).map(n=>n.id):Array.from(t.nodeLookup.keys());function B_(e){return ne(z.useCallback(O_(e),[e]),fe)}const F_=e=>e.updateNodeInternals;function H_(){const e=ne(F_),[t]=z.useState(()=>typeof ResizeObserver>"u"?null:new ResizeObserver(n=>{const r=new Map;n.forEach(o=>{const i=o.target.getAttribute("data-id");r.set(i,{id:i,nodeElement:o.target,force:!0})}),e(r)}));return z.useEffect(()=>()=>{t==null||t.disconnect()},[t]),t}function V_({node:e,nodeType:t,hasDimensions:n,resizeObserver:r}){const o=pe(),i=z.useRef(null),s=z.useRef(null),l=z.useRef(e.sourcePosition),a=z.useRef(e.targetPosition),u=z.useRef(t),p=n&&!!e.internals.handleBounds;return z.useEffect(()=>{i.current&&!e.hidden&&(!p||s.current!==i.current)&&(s.current&&(r==null||r.unobserve(s.current)),r==null||r.observe(i.current),s.current=i.current)},[p,e.hidden]),z.useEffect(()=>()=>{s.current&&(r==null||r.unobserve(s.current),s.current=null)},[]),z.useEffect(()=>{if(i.current){const c=u.current!==t,d=l.current!==e.sourcePosition,x=a.current!==e.targetPosition;(c||d||x)&&(u.current=t,l.current=e.sourcePosition,a.current=e.targetPosition,o.getState().updateNodeInternals(new Map([[e.id,{id:e.id,nodeElement:i.current,force:!0}]])))}},[e.id,t,e.sourcePosition,e.targetPosition]),i}function W_({id:e,onClick:t,onMouseEnter:n,onMouseMove:r,onMouseLeave:o,onContextMenu:i,onDoubleClick:s,nodesDraggable:l,elementsSelectable:a,nodesConnectable:u,nodesFocusable:p,resizeObserver:c,noDragClassName:d,noPanClassName:x,disableKeyboardA11y:y,rfId:w,nodeTypes:k,nodeClickDistance:m,onError:g}){const{node:h,internals:v,isParent:_}=ne(H=>{const K=H.nodeLookup.get(e),ee=H.parentLookup.has(e);return{node:K,internals:K.internals,isParent:ee}},fe);let S=h.type||"default",E=(k==null?void 0:k[S])||Tf[S];E===void 0&&(g==null||g("003",bt.error003(S)),S="default",E=(k==null?void 0:k.default)||Tf.default);const b=!!(h.draggable||l&&typeof h.draggable>"u"),A=!!(h.selectable||a&&typeof h.selectable>"u"),D=!!(h.connectable||u&&typeof h.connectable>"u"),T=!!(h.focusable||p&&typeof h.focusable>"u"),I=pe(),P=t0(h),C=V_({node:h,nodeType:S,hasDimensions:P,resizeObserver:c}),L=L0({nodeRef:C,disabled:h.hidden||!b,noDragClassName:d,handleSelector:h.dragHandle,nodeId:e,isSelectable:A,nodeClickDistance:m}),M=A0();if(h.hidden)return null;const R=Ht(h),N=R_(h),j=A||b||t||n||r||o,$=n?H=>n(H,{...v.userNode}):void 0,O=r?H=>r(H,{...v.userNode}):void 0,B=o?H=>o(H,{...v.userNode}):void 0,W=i?H=>i(H,{...v.userNode}):void 0,V=s?H=>s(H,{...v.userNode}):void 0,Y=H=>{const{selectNodesOnDrag:K,nodeDragThreshold:ee}=I.getState();A&&(!K||!b||ee>0)&&ru({id:e,store:I,nodeRef:C}),t&&t(H,{...v.userNode})},X=H=>{if(!(o0(H.nativeEvent)||y)){if(Yg.includes(H.key)&&A){const K=H.key==="Escape";ru({id:e,store:I,unselect:K,nodeRef:C})}else if(b&&h.selected&&Object.prototype.hasOwnProperty.call(Ns,H.key)){H.preventDefault();const{ariaLabelConfig:K}=I.getState();I.setState({ariaLiveMessage:K["node.a11yDescription.ariaLiveMessage"]({direction:H.key.replace("Arrow","").toLowerCase(),x:~~v.positionAbsolute.x,y:~~v.positionAbsolute.y})}),M({direction:Ns[H.key],factor:H.shiftKey?4:1})}}},Q=()=>{var re;if(y||!((re=C.current)!=null&&re.matches(":focus-visible")))return;const{transform:H,width:K,height:ee,autoPanOnNodeFocus:G,setCenter:J}=I.getState();if(!G)return;cc(new Map([[e,h]]),{x:0,y:0,width:K,height:ee},H,!0).length>0||J(h.position.x+R.width/2,h.position.y+R.height/2,{zoom:H[2]})};return f.jsx("div",{className:we(["react-flow__node",`react-flow__node-${S}`,{[x]:b},h.className,{selected:h.selected,selectable:A,parent:_,draggable:b,dragging:L}]),ref:C,style:{zIndex:v.z,transform:`translate(${v.positionAbsolute.x}px,${v.positionAbsolute.y}px)`,pointerEvents:j?"all":"none",visibility:P?"visible":"hidden",...h.style,...N},"data-id":e,"data-testid":`rf__node-${e}`,onMouseEnter:$,onMouseMove:O,onMouseLeave:B,onContextMenu:W,onClick:Y,onDoubleClick:V,onKeyDown:T?X:void 0,tabIndex:T?0:void 0,onFocus:T?Q:void 0,role:h.ariaRole??(T?"group":void 0),"aria-roledescription":"node","aria-describedby":y?void 0:`${N0}-${w}`,"aria-label":h.ariaLabel,...h.domAttributes,children:f.jsx(b_,{value:e,children:f.jsx(E,{id:e,data:h.data,type:S,positionAbsoluteX:v.positionAbsolute.x,positionAbsoluteY:v.positionAbsolute.y,selected:h.selected??!1,selectable:A,draggable:b,deletable:h.deletable??!0,isConnectable:D,sourcePosition:h.sourcePosition,targetPosition:h.targetPosition,dragging:L,dragHandle:h.dragHandle,zIndex:v.z,parentId:h.parentId,...R})})})}var U_=z.memo(W_);const Y_=e=>({nodesDraggable:e.nodesDraggable,nodesConnectable:e.nodesConnectable,nodesFocusable:e.nodesFocusable,elementsSelectable:e.elementsSelectable,onError:e.onError});function O0(e){const{nodesDraggable:t,nodesConnectable:n,nodesFocusable:r,elementsSelectable:o,onError:i}=ne(Y_,fe),s=B_(e.onlyRenderVisibleElements),l=H_();return f.jsx("div",{className:"react-flow__nodes",style:tl,children:s.map(a=>f.jsx(U_,{id:a,nodeTypes:e.nodeTypes,nodeExtent:e.nodeExtent,onClick:e.onNodeClick,onMouseEnter:e.onNodeMouseEnter,onMouseMove:e.onNodeMouseMove,onMouseLeave:e.onNodeMouseLeave,onContextMenu:e.onNodeContextMenu,onDoubleClick:e.onNodeDoubleClick,noDragClassName:e.noDragClassName,noPanClassName:e.noPanClassName,rfId:e.rfId,disableKeyboardA11y:e.disableKeyboardA11y,resizeObserver:l,nodesDraggable:t,nodesConnectable:n,nodesFocusable:r,elementsSelectable:o,nodeClickDistance:e.nodeClickDistance,onError:i},a))})}O0.displayName="NodeRenderer";const X_=z.memo(O0);function Q_(e){return ne(z.useCallback(n=>{if(!e)return n.edges.map(o=>o.id);const r=[];if(n.width&&n.height)for(const o of n.edges){const i=n.nodeLookup.get(o.source),s=n.nodeLookup.get(o.target);i&&s&&zS({sourceNode:i,targetNode:s,width:n.width,height:n.height,transform:n.transform})&&r.push(o.id)}return r},[e]),fe)}const G_=({color:e="none",strokeWidth:t=1})=>{const n={strokeWidth:t,...e&&{stroke:e}};return f.jsx("polyline",{className:"arrow",style:n,strokeLinecap:"round",fill:"none",strokeLinejoin:"round",points:"-5,-4 0,0 -5,4"})},K_=({color:e="none",strokeWidth:t=1})=>{const n={strokeWidth:t,...e&&{stroke:e,fill:e}};return f.jsx("polyline",{className:"arrowclosed",style:n,strokeLinecap:"round",strokeLinejoin:"round",points:"-5,-4 0,0 -5,4 -5,-4"})},Rf={[Es.Arrow]:G_,[Es.ArrowClosed]:K_};function Z_(e){const t=pe();return z.useMemo(()=>{var o,i;return Object.prototype.hasOwnProperty.call(Rf,e)?Rf[e]:((i=(o=t.getState()).onError)==null||i.call(o,"009",bt.error009(e)),null)},[e])}const q_=({id:e,type:t,color:n,width:r=12.5,height:o=12.5,markerUnits:i="strokeWidth",strokeWidth:s,orient:l="auto-start-reverse"})=>{const a=Z_(t);return a?f.jsx("marker",{className:"react-flow__arrowhead",id:e,markerWidth:`${r}`,markerHeight:`${o}`,viewBox:"-10 -10 20 20",markerUnits:i,orient:l,refX:"0",refY:"0",children:f.jsx(a,{color:n,strokeWidth:s})}):null},B0=({defaultColor:e,rfId:t})=>{const n=ne(i=>i.edges),r=ne(i=>i.defaultEdgeOptions),o=z.useMemo(()=>DS(n,{id:t,defaultColor:e,defaultMarkerStart:r==null?void 0:r.markerStart,defaultMarkerEnd:r==null?void 0:r.markerEnd}),[n,r,t,e]);return o.length?f.jsx("svg",{className:"react-flow__marker","aria-hidden":"true",children:f.jsx("defs",{children:o.map(i=>f.jsx(q_,{id:i.id,type:i.type,color:i.color,width:i.width,height:i.height,markerUnits:i.markerUnits,strokeWidth:i.strokeWidth,orient:i.orient},i.id))})}):null};B0.displayName="MarkerDefinitions";var J_=z.memo(B0);function F0({x:e,y:t,label:n,labelStyle:r,labelShowBg:o=!0,labelBgStyle:i,labelBgPadding:s=[2,4],labelBgBorderRadius:l=2,children:a,className:u,...p}){const[c,d]=z.useState({x:1,y:0,width:0,height:0}),x=we(["react-flow__edge-textwrapper",u]),y=z.useRef(null);return z.useEffect(()=>{if(y.current){const w=y.current.getBBox();d({x:w.x,y:w.y,width:w.width,height:w.height})}},[n]),n?f.jsxs("g",{transform:`translate(${e-c.width/2} ${t-c.height/2})`,className:x,visibility:c.width?"visible":"hidden",...p,children:[o&&f.jsx("rect",{width:c.width+2*s[0],x:-s[0],y:-s[1],height:c.height+2*s[1],className:"react-flow__edge-textbg",style:i,rx:l,ry:l}),f.jsx("text",{className:"react-flow__edge-text",y:c.height/2,dy:"0.3em",ref:y,style:r,children:n}),a]}):null}F0.displayName="EdgeText";const eE=z.memo(F0);function nl({path:e,labelX:t,labelY:n,label:r,labelStyle:o,labelShowBg:i,labelBgStyle:s,labelBgPadding:l,labelBgBorderRadius:a,interactionWidth:u=20,...p}){return f.jsxs(f.Fragment,{children:[f.jsx("path",{...p,d:e,fill:"none",className:we(["react-flow__edge-path",p.className])}),u?f.jsx("path",{d:e,fill:"none",strokeOpacity:0,strokeWidth:u,className:"react-flow__edge-interaction"}):null,r&&ct(t)&&ct(n)?f.jsx(eE,{x:t,y:n,label:r,labelStyle:o,labelShowBg:i,labelBgStyle:s,labelBgPadding:l,labelBgBorderRadius:a}):null]})}function Lf({pos:e,x1:t,y1:n,x2:r,y2:o}){return e===q.Left||e===q.Right?[.5*(t+r),n]:[t,.5*(n+o)]}function H0({sourceX:e,sourceY:t,sourcePosition:n=q.Bottom,targetX:r,targetY:o,targetPosition:i=q.Top}){const[s,l]=Lf({pos:n,x1:e,y1:t,x2:r,y2:o}),[a,u]=Lf({pos:i,x1:r,y1:o,x2:e,y2:t}),[p,c,d,x]=s0({sourceX:e,sourceY:t,targetX:r,targetY:o,sourceControlX:s,sourceControlY:l,targetControlX:a,targetControlY:u});return[`M${e},${t} C${s},${l} ${a},${u} ${r},${o}`,p,c,d,x]}function V0(e){return z.memo(({id:t,sourceX:n,sourceY:r,targetX:o,targetY:i,sourcePosition:s,targetPosition:l,label:a,labelStyle:u,labelShowBg:p,labelBgStyle:c,labelBgPadding:d,labelBgBorderRadius:x,style:y,markerEnd:w,markerStart:k,interactionWidth:m})=>{const[g,h,v]=H0({sourceX:n,sourceY:r,sourcePosition:s,targetX:o,targetY:i,targetPosition:l}),_=e.isInternal?void 0:t;return f.jsx(nl,{id:_,path:g,labelX:h,labelY:v,label:a,labelStyle:u,labelShowBg:p,labelBgStyle:c,labelBgPadding:d,labelBgBorderRadius:x,style:y,markerEnd:w,markerStart:k,interactionWidth:m})})}const tE=V0({isInternal:!1}),W0=V0({isInternal:!0});tE.displayName="SimpleBezierEdge";W0.displayName="SimpleBezierEdgeInternal";function U0(e){return z.memo(({id:t,sourceX:n,sourceY:r,targetX:o,targetY:i,label:s,labelStyle:l,labelShowBg:a,labelBgStyle:u,labelBgPadding:p,labelBgBorderRadius:c,style:d,sourcePosition:x=q.Bottom,targetPosition:y=q.Top,markerEnd:w,markerStart:k,pathOptions:m,interactionWidth:g})=>{const[h,v,_]=Ja({sourceX:n,sourceY:r,sourcePosition:x,targetX:o,targetY:i,targetPosition:y,borderRadius:m==null?void 0:m.borderRadius,offset:m==null?void 0:m.offset,stepPosition:m==null?void 0:m.stepPosition}),S=e.isInternal?void 0:t;return f.jsx(nl,{id:S,path:h,labelX:v,labelY:_,label:s,labelStyle:l,labelShowBg:a,labelBgStyle:u,labelBgPadding:p,labelBgBorderRadius:c,style:d,markerEnd:w,markerStart:k,interactionWidth:g})})}const Y0=U0({isInternal:!1}),X0=U0({isInternal:!0});Y0.displayName="SmoothStepEdge";X0.displayName="SmoothStepEdgeInternal";function Q0(e){return z.memo(({id:t,...n})=>{var o;const r=e.isInternal?void 0:t;return f.jsx(Y0,{...n,id:r,pathOptions:z.useMemo(()=>{var i;return{borderRadius:0,offset:(i=n.pathOptions)==null?void 0:i.offset}},[(o=n.pathOptions)==null?void 0:o.offset])})})}const nE=Q0({isInternal:!1}),G0=Q0({isInternal:!0});nE.displayName="StepEdge";G0.displayName="StepEdgeInternal";function K0(e){return z.memo(({id:t,sourceX:n,sourceY:r,targetX:o,targetY:i,label:s,labelStyle:l,labelShowBg:a,labelBgStyle:u,labelBgPadding:p,labelBgBorderRadius:c,style:d,markerEnd:x,markerStart:y,interactionWidth:w})=>{const[k,m,g]=u0({sourceX:n,sourceY:r,targetX:o,targetY:i}),h=e.isInternal?void 0:t;return f.jsx(nl,{id:h,path:k,labelX:m,labelY:g,label:s,labelStyle:l,labelShowBg:a,labelBgStyle:u,labelBgPadding:p,labelBgBorderRadius:c,style:d,markerEnd:x,markerStart:y,interactionWidth:w})})}const rE=K0({isInternal:!1}),Z0=K0({isInternal:!0});rE.displayName="StraightEdge";Z0.displayName="StraightEdgeInternal";function q0(e){return z.memo(({id:t,sourceX:n,sourceY:r,targetX:o,targetY:i,sourcePosition:s=q.Bottom,targetPosition:l=q.Top,label:a,labelStyle:u,labelShowBg:p,labelBgStyle:c,labelBgPadding:d,labelBgBorderRadius:x,style:y,markerEnd:w,markerStart:k,pathOptions:m,interactionWidth:g})=>{const[h,v,_]=l0({sourceX:n,sourceY:r,sourcePosition:s,targetX:o,targetY:i,targetPosition:l,curvature:m==null?void 0:m.curvature}),S=e.isInternal?void 0:t;return f.jsx(nl,{id:S,path:h,labelX:v,labelY:_,label:a,labelStyle:u,labelShowBg:p,labelBgStyle:c,labelBgPadding:d,labelBgBorderRadius:x,style:y,markerEnd:w,markerStart:k,interactionWidth:g})})}const oE=q0({isInternal:!1}),J0=q0({isInternal:!0});oE.displayName="BezierEdge";J0.displayName="BezierEdgeInternal";const Af={default:J0,straight:Z0,step:G0,smoothstep:X0,simplebezier:W0},$f={sourceX:null,sourceY:null,targetX:null,targetY:null,sourcePosition:null,targetPosition:null},iE=(e,t,n)=>n===q.Left?e-t:n===q.Right?e+t:e,sE=(e,t,n)=>n===q.Top?e-t:n===q.Bottom?e+t:e,Df="react-flow__edgeupdater";function Of({position:e,centerX:t,centerY:n,radius:r=10,onMouseDown:o,onMouseEnter:i,onMouseOut:s,type:l}){return f.jsx("circle",{onMouseDown:o,onMouseEnter:i,onMouseOut:s,className:we([Df,`${Df}-${l}`]),cx:iE(t,r,e),cy:sE(n,r,e),r,stroke:"transparent",fill:"transparent"})}function lE({isReconnectable:e,reconnectRadius:t,edge:n,sourceX:r,sourceY:o,targetX:i,targetY:s,sourcePosition:l,targetPosition:a,onReconnect:u,onReconnectStart:p,onReconnectEnd:c,setReconnecting:d,setUpdateHover:x}){const y=pe(),w=(v,_)=>{if(v.button!==0)return;const{autoPanOnConnect:S,domNode:E,connectionMode:b,connectionRadius:A,lib:D,onConnectStart:T,cancelConnection:I,nodeLookup:P,rfId:C,panBy:L,updateConnection:M}=y.getState(),R=_.type==="target",N=(O,B)=>{d(!1),c==null||c(O,n,_.type,B)},j=O=>u==null?void 0:u(n,O),$=(O,B)=>{d(!0),p==null||p(v,n,_.type),T==null||T(O,B)};nu.onPointerDown(v.nativeEvent,{autoPanOnConnect:S,connectionMode:b,connectionRadius:A,domNode:E,handleId:_.id,nodeId:_.nodeId,nodeLookup:P,isTarget:R,edgeUpdaterType:_.type,lib:D,flowId:C,cancelConnection:I,panBy:L,isValidConnection:(...O)=>{var B,W;return((W=(B=y.getState()).isValidConnection)==null?void 0:W.call(B,...O))??!0},onConnect:j,onConnectStart:$,onConnectEnd:(...O)=>{var B,W;return(W=(B=y.getState()).onConnectEnd)==null?void 0:W.call(B,...O)},onReconnectEnd:N,updateConnection:M,getTransform:()=>y.getState().transform,getFromHandle:()=>y.getState().connection.fromHandle,dragThreshold:y.getState().connectionDragThreshold,handleDomNode:v.currentTarget})},k=v=>w(v,{nodeId:n.target,id:n.targetHandle??null,type:"target"}),m=v=>w(v,{nodeId:n.source,id:n.sourceHandle??null,type:"source"}),g=()=>x(!0),h=()=>x(!1);return f.jsxs(f.Fragment,{children:[(e===!0||e==="source")&&f.jsx(Of,{position:l,centerX:r,centerY:o,radius:t,onMouseDown:k,onMouseEnter:g,onMouseOut:h,type:"source"}),(e===!0||e==="target")&&f.jsx(Of,{position:a,centerX:i,centerY:s,radius:t,onMouseDown:m,onMouseEnter:g,onMouseOut:h,type:"target"})]})}function aE({id:e,edgesFocusable:t,edgesReconnectable:n,elementsSelectable:r,onClick:o,onDoubleClick:i,onContextMenu:s,onMouseEnter:l,onMouseMove:a,onMouseLeave:u,reconnectRadius:p,onReconnect:c,onReconnectStart:d,onReconnectEnd:x,rfId:y,edgeTypes:w,noPanClassName:k,onError:m,disableKeyboardA11y:g}){let h=ne(J=>J.edgeLookup.get(e));const v=ne(J=>J.defaultEdgeOptions);h=v?{...v,...h}:h;let _=h.type||"default",S=(w==null?void 0:w[_])||Af[_];S===void 0&&(m==null||m("011",bt.error011(_)),_="default",S=(w==null?void 0:w.default)||Af.default);const E=!!(h.focusable||t&&typeof h.focusable>"u"),b=typeof c<"u"&&(h.reconnectable||n&&typeof h.reconnectable>"u"),A=!!(h.selectable||r&&typeof h.selectable>"u"),D=z.useRef(null),[T,I]=z.useState(!1),[P,C]=z.useState(!1),L=pe(),{zIndex:M,sourceX:R,sourceY:N,targetX:j,targetY:$,sourcePosition:O,targetPosition:B}=ne(z.useCallback(J=>{const Z=J.nodeLookup.get(h.source),re=J.nodeLookup.get(h.target);if(!Z||!re)return{zIndex:h.zIndex,...$f};const le=$S({id:e,sourceNode:Z,targetNode:re,sourceHandle:h.sourceHandle||null,targetHandle:h.targetHandle||null,connectionMode:J.connectionMode,onError:m});return{zIndex:MS({selected:h.selected,zIndex:h.zIndex,sourceNode:Z,targetNode:re,elevateOnSelect:J.elevateEdgesOnSelect,zIndexMode:J.zIndexMode}),...le||$f}},[h.source,h.target,h.sourceHandle,h.targetHandle,h.selected,h.zIndex]),fe),W=z.useMemo(()=>h.markerStart?`url('#${eu(h.markerStart,y)}')`:void 0,[h.markerStart,y]),V=z.useMemo(()=>h.markerEnd?`url('#${eu(h.markerEnd,y)}')`:void 0,[h.markerEnd,y]);if(h.hidden||R===null||N===null||j===null||$===null)return null;const Y=J=>{var ie;const{addSelectedEdges:Z,unselectNodesAndEdges:re,multiSelectionActive:le}=L.getState();A&&(L.setState({nodesSelectionActive:!1}),h.selected&&le?(re({nodes:[],edges:[h]}),(ie=D.current)==null||ie.blur()):Z([e])),o&&o(J,h)},X=i?J=>{i(J,{...h})}:void 0,Q=s?J=>{s(J,{...h})}:void 0,H=l?J=>{l(J,{...h})}:void 0,K=a?J=>{a(J,{...h})}:void 0,ee=u?J=>{u(J,{...h})}:void 0,G=J=>{var Z;if(!g&&Yg.includes(J.key)&&A){const{unselectNodesAndEdges:re,addSelectedEdges:le}=L.getState();J.key==="Escape"?((Z=D.current)==null||Z.blur(),re({edges:[h]})):le([e])}};return f.jsx("svg",{style:{zIndex:M},children:f.jsxs("g",{className:we(["react-flow__edge",`react-flow__edge-${_}`,h.className,k,{selected:h.selected,animated:h.animated,inactive:!A&&!o,updating:T,selectable:A}]),onClick:Y,onDoubleClick:X,onContextMenu:Q,onMouseEnter:H,onMouseMove:K,onMouseLeave:ee,onKeyDown:E?G:void 0,tabIndex:E?0:void 0,role:h.ariaRole??(E?"group":"img"),"aria-roledescription":"edge","data-id":e,"data-testid":`rf__edge-${e}`,"aria-label":h.ariaLabel===null?void 0:h.ariaLabel||`Edge from ${h.source} to ${h.target}`,"aria-describedby":E?`${j0}-${y}`:void 0,ref:D,...h.domAttributes,children:[!P&&f.jsx(S,{id:e,source:h.source,target:h.target,type:h.type,selected:h.selected,animated:h.animated,selectable:A,deletable:h.deletable??!0,label:h.label,labelStyle:h.labelStyle,labelShowBg:h.labelShowBg,labelBgStyle:h.labelBgStyle,labelBgPadding:h.labelBgPadding,labelBgBorderRadius:h.labelBgBorderRadius,sourceX:R,sourceY:N,targetX:j,targetY:$,sourcePosition:O,targetPosition:B,data:h.data,style:h.style,sourceHandleId:h.sourceHandle,targetHandleId:h.targetHandle,markerStart:W,markerEnd:V,pathOptions:"pathOptions"in h?h.pathOptions:void 0,interactionWidth:h.interactionWidth}),b&&f.jsx(lE,{edge:h,isReconnectable:b,reconnectRadius:p,onReconnect:c,onReconnectStart:d,onReconnectEnd:x,sourceX:R,sourceY:N,targetX:j,targetY:$,sourcePosition:O,targetPosition:B,setUpdateHover:I,setReconnecting:C})]})})}var uE=z.memo(aE);const cE=e=>({edgesFocusable:e.edgesFocusable,edgesReconnectable:e.edgesReconnectable,elementsSelectable:e.elementsSelectable,connectionMode:e.connectionMode,onError:e.onError});function em({defaultMarkerColor:e,onlyRenderVisibleElements:t,rfId:n,edgeTypes:r,noPanClassName:o,onReconnect:i,onEdgeContextMenu:s,onEdgeMouseEnter:l,onEdgeMouseMove:a,onEdgeMouseLeave:u,onEdgeClick:p,reconnectRadius:c,onEdgeDoubleClick:d,onReconnectStart:x,onReconnectEnd:y,disableKeyboardA11y:w}){const{edgesFocusable:k,edgesReconnectable:m,elementsSelectable:g,onError:h}=ne(cE,fe),v=Q_(t);return f.jsxs("div",{className:"react-flow__edges",children:[f.jsx(J_,{defaultColor:e,rfId:n}),v.map(_=>f.jsx(uE,{id:_,edgesFocusable:k,edgesReconnectable:m,elementsSelectable:g,noPanClassName:o,onReconnect:i,onContextMenu:s,onMouseEnter:l,onMouseMove:a,onMouseLeave:u,onClick:p,reconnectRadius:c,onDoubleClick:d,onReconnectStart:x,onReconnectEnd:y,rfId:n,onError:h,edgeTypes:r,disableKeyboardA11y:w},_))]})}em.displayName="EdgeRenderer";const dE=z.memo(em),fE=e=>`translate(${e.transform[0]}px,${e.transform[1]}px) scale(${e.transform[2]})`;function pE({children:e}){const t=ne(fE);return f.jsx("div",{className:"react-flow__viewport xyflow__viewport react-flow__container",style:{transform:t},children:e})}function hE(e){const t=xc(),n=z.useRef(!1);z.useEffect(()=>{!n.current&&t.viewportInitialized&&e&&(setTimeout(()=>e(t),1),n.current=!0)},[e,t.viewportInitialized])}const gE=e=>{var t;return(t=e.panZoom)==null?void 0:t.syncViewport};function mE(e){const t=ne(gE),n=pe();return z.useEffect(()=>{e&&(t==null||t(e),n.setState({transform:[e.x,e.y,e.zoom]}))},[e,t]),null}function yE(e){return e.connection.inProgress?{...e.connection,to:Qo(e.connection.to,e.transform)}:{...e.connection}}function xE(e){return yE}function vE(e){const t=xE();return ne(t,fe)}const wE=e=>({nodesConnectable:e.nodesConnectable,isValid:e.connection.isValid,inProgress:e.connection.inProgress,width:e.width,height:e.height});function SE({containerStyle:e,style:t,type:n,component:r}){const{nodesConnectable:o,width:i,height:s,isValid:l,inProgress:a}=ne(wE,fe);return!(i&&o&&a)?null:f.jsx("svg",{style:e,width:i,height:s,className:"react-flow__connectionline react-flow__container",children:f.jsx("g",{className:we(["react-flow__connection",Gg(l)]),children:f.jsx(tm,{style:t,type:n,CustomComponent:r,isValid:l})})})}const tm=({style:e,type:t=Zt.Bezier,CustomComponent:n,isValid:r})=>{const{inProgress:o,from:i,fromNode:s,fromHandle:l,fromPosition:a,to:u,toNode:p,toHandle:c,toPosition:d,pointer:x}=vE();if(!o)return;if(n)return f.jsx(n,{connectionLineType:t,connectionLineStyle:e,fromNode:s,fromHandle:l,fromX:i.x,fromY:i.y,toX:u.x,toY:u.y,fromPosition:a,toPosition:d,connectionStatus:Gg(r),toNode:p,toHandle:c,pointer:x});let y="";const w={sourceX:i.x,sourceY:i.y,sourcePosition:a,targetX:u.x,targetY:u.y,targetPosition:d};switch(t){case Zt.Bezier:[y]=l0(w);break;case Zt.SimpleBezier:[y]=H0(w);break;case Zt.Step:[y]=Ja({...w,borderRadius:0});break;case Zt.SmoothStep:[y]=Ja(w);break;default:[y]=u0(w)}return f.jsx("path",{d:y,fill:"none",className:"react-flow__connection-path",style:e})};tm.displayName="ConnectionLine";const kE={};function Bf(e=kE){z.useRef(e),pe(),z.useEffect(()=>{},[e])}function _E(){pe(),z.useRef(!1),z.useEffect(()=>{},[])}function nm({nodeTypes:e,edgeTypes:t,onInit:n,onNodeClick:r,onEdgeClick:o,onNodeDoubleClick:i,onEdgeDoubleClick:s,onNodeMouseEnter:l,onNodeMouseMove:a,onNodeMouseLeave:u,onNodeContextMenu:p,onSelectionContextMenu:c,onSelectionStart:d,onSelectionEnd:x,connectionLineType:y,connectionLineStyle:w,connectionLineComponent:k,connectionLineContainerStyle:m,selectionKeyCode:g,selectionOnDrag:h,selectionMode:v,multiSelectionKeyCode:_,panActivationKeyCode:S,zoomActivationKeyCode:E,deleteKeyCode:b,onlyRenderVisibleElements:A,elementsSelectable:D,defaultViewport:T,translateExtent:I,minZoom:P,maxZoom:C,preventScrolling:L,defaultMarkerColor:M,zoomOnScroll:R,zoomOnPinch:N,panOnScroll:j,panOnScrollSpeed:$,panOnScrollMode:O,zoomOnDoubleClick:B,panOnDrag:W,onPaneClick:V,onPaneMouseEnter:Y,onPaneMouseMove:X,onPaneMouseLeave:Q,onPaneScroll:H,onPaneContextMenu:K,paneClickDistance:ee,nodeClickDistance:G,onEdgeContextMenu:J,onEdgeMouseEnter:Z,onEdgeMouseMove:re,onEdgeMouseLeave:le,reconnectRadius:ie,onReconnect:je,onReconnectStart:Vt,onReconnectEnd:jt,noDragClassName:gn,noWheelClassName:Mr,noPanClassName:zr,disableKeyboardA11y:Pr,nodeExtent:rl,rfId:Ko,viewport:On,onViewportChange:Tr}){return Bf(e),Bf(t),_E(),hE(n),mE(On),f.jsx(D_,{onPaneClick:V,onPaneMouseEnter:Y,onPaneMouseMove:X,onPaneMouseLeave:Q,onPaneContextMenu:K,onPaneScroll:H,paneClickDistance:ee,deleteKeyCode:b,selectionKeyCode:g,selectionOnDrag:h,selectionMode:v,onSelectionStart:d,onSelectionEnd:x,multiSelectionKeyCode:_,panActivationKeyCode:S,zoomActivationKeyCode:E,elementsSelectable:D,zoomOnScroll:R,zoomOnPinch:N,zoomOnDoubleClick:B,panOnScroll:j,panOnScrollSpeed:$,panOnScrollMode:O,panOnDrag:W,defaultViewport:T,translateExtent:I,minZoom:P,maxZoom:C,onSelectionContextMenu:c,preventScrolling:L,noDragClassName:gn,noWheelClassName:Mr,noPanClassName:zr,disableKeyboardA11y:Pr,onViewportChange:Tr,isControlledViewport:!!On,children:f.jsxs(pE,{children:[f.jsx(dE,{edgeTypes:t,onEdgeClick:o,onEdgeDoubleClick:s,onReconnect:je,onReconnectStart:Vt,onReconnectEnd:jt,onlyRenderVisibleElements:A,onEdgeContextMenu:J,onEdgeMouseEnter:Z,onEdgeMouseMove:re,onEdgeMouseLeave:le,reconnectRadius:ie,defaultMarkerColor:M,noPanClassName:zr,disableKeyboardA11y:Pr,rfId:Ko}),f.jsx(SE,{style:w,type:y,component:k,containerStyle:m}),f.jsx("div",{className:"react-flow__edgelabel-renderer"}),f.jsx(X_,{nodeTypes:e,onNodeClick:r,onNodeDoubleClick:i,onNodeMouseEnter:l,onNodeMouseMove:a,onNodeMouseLeave:u,onNodeContextMenu:p,nodeClickDistance:G,onlyRenderVisibleElements:A,noPanClassName:zr,noDragClassName:gn,disableKeyboardA11y:Pr,nodeExtent:rl,rfId:Ko}),f.jsx("div",{className:"react-flow__viewport-portal"})]})})}nm.displayName="GraphView";const EE=z.memo(nm),Ff=({nodes:e,edges:t,defaultNodes:n,defaultEdges:r,width:o,height:i,fitView:s,fitViewOptions:l,minZoom:a=.5,maxZoom:u=2,nodeOrigin:p,nodeExtent:c,zIndexMode:d="basic"}={})=>{const x=new Map,y=new Map,w=new Map,k=new Map,m=r??t??[],g=n??e??[],h=p??[0,0],v=c??To;f0(w,k,m);const _=tu(g,x,y,{nodeOrigin:h,nodeExtent:v,zIndexMode:d});let S=[0,0,1];if(s&&o&&i){const E=Yo(x,{filter:T=>!!((T.width||T.initialWidth)&&(T.height||T.initialHeight))}),{x:b,y:A,zoom:D}=dc(E,o,i,a,u,(l==null?void 0:l.padding)??.1);S=[b,A,D]}return{rfId:"1",width:o??0,height:i??0,transform:S,nodes:g,nodesInitialized:_,nodeLookup:x,parentLookup:y,edges:m,edgeLookup:k,connectionLookup:w,onNodesChange:null,onEdgesChange:null,hasDefaultNodes:n!==void 0,hasDefaultEdges:r!==void 0,panZoom:null,minZoom:a,maxZoom:u,translateExtent:To,nodeExtent:v,nodesSelectionActive:!1,userSelectionActive:!1,userSelectionRect:null,connectionMode:wr.Strict,domNode:null,paneDragging:!1,noPanClassName:"nopan",nodeOrigin:h,nodeDragThreshold:1,connectionDragThreshold:1,snapGrid:[15,15],snapToGrid:!1,nodesDraggable:!0,nodesConnectable:!0,nodesFocusable:!0,edgesFocusable:!0,edgesReconnectable:!0,elementsSelectable:!0,elevateNodesOnSelect:!0,elevateEdgesOnSelect:!0,selectNodesOnDrag:!0,multiSelectionActive:!1,fitViewQueued:s??!1,fitViewOptions:l,fitViewResolver:null,connection:{...Qg},connectionClickStartHandle:null,connectOnClick:!0,ariaLiveMessage:"",autoPanOnConnect:!0,autoPanOnNodeDrag:!0,autoPanOnNodeFocus:!0,autoPanSpeed:15,connectionRadius:20,onError:_S,isValidConnection:void 0,onSelectionChangeHandlers:[],lib:"react",debug:!1,ariaLabelConfig:Xg,zIndexMode:d,onNodesChangeMiddlewareMap:new Map,onEdgesChangeMiddlewareMap:new Map}},CE=({nodes:e,edges:t,defaultNodes:n,defaultEdges:r,width:o,height:i,fitView:s,fitViewOptions:l,minZoom:a,maxZoom:u,nodeOrigin:p,nodeExtent:c,zIndexMode:d})=>Vk((x,y)=>{async function w(){const{nodeLookup:k,panZoom:m,fitViewOptions:g,fitViewResolver:h,width:v,height:_,minZoom:S,maxZoom:E}=y();m&&(await SS({nodes:k,width:v,height:_,panZoom:m,minZoom:S,maxZoom:E},g),h==null||h.resolve(!0),x({fitViewResolver:null}))}return{...Ff({nodes:e,edges:t,width:o,height:i,fitView:s,fitViewOptions:l,minZoom:a,maxZoom:u,nodeOrigin:p,nodeExtent:c,defaultNodes:n,defaultEdges:r,zIndexMode:d}),setNodes:k=>{const{nodeLookup:m,parentLookup:g,nodeOrigin:h,elevateNodesOnSelect:v,fitViewQueued:_,zIndexMode:S}=y(),E=tu(k,m,g,{nodeOrigin:h,nodeExtent:c,elevateNodesOnSelect:v,checkEquality:!0,zIndexMode:S});_&&E?(w(),x({nodes:k,nodesInitialized:E,fitViewQueued:!1,fitViewOptions:void 0})):x({nodes:k,nodesInitialized:E})},setEdges:k=>{const{connectionLookup:m,edgeLookup:g}=y();f0(m,g,k),x({edges:k})},setDefaultNodesAndEdges:(k,m)=>{if(k){const{setNodes:g}=y();g(k),x({hasDefaultNodes:!0})}if(m){const{setEdges:g}=y();g(m),x({hasDefaultEdges:!0})}},updateNodeInternals:k=>{const{triggerNodeChanges:m,nodeLookup:g,parentLookup:h,domNode:v,nodeOrigin:_,nodeExtent:S,debug:E,fitViewQueued:b,zIndexMode:A}=y(),{changes:D,updatedInternals:T}=US(k,g,h,v,_,S,A);T&&(FS(g,h,{nodeOrigin:_,nodeExtent:S,zIndexMode:A}),b?(w(),x({fitViewQueued:!1,fitViewOptions:void 0})):x({}),(D==null?void 0:D.length)>0&&(E&&console.log("React Flow: trigger node changes",D),m==null||m(D)))},updateNodePositions:(k,m=!1)=>{const g=[];let h=[];const{nodeLookup:v,triggerNodeChanges:_,connection:S,updateConnection:E,onNodesChangeMiddlewareMap:b}=y();for(const[A,D]of k){const T=v.get(A),I=!!(T!=null&&T.expandParent&&(T!=null&&T.parentId)&&(D!=null&&D.position)),P={id:A,type:"position",position:I?{x:Math.max(0,D.position.x),y:Math.max(0,D.position.y)}:D.position,dragging:m};if(T&&S.inProgress&&S.fromNode.id===T.id){const C=Ln(T,S.fromHandle,q.Left,!0);E({...S,from:C})}I&&T.parentId&&g.push({id:A,parentId:T.parentId,rect:{...D.internals.positionAbsolute,width:D.measured.width??0,height:D.measured.height??0}}),h.push(P)}if(g.length>0){const{parentLookup:A,nodeOrigin:D}=y(),T=yc(g,v,A,D);h.push(...T)}for(const A of b.values())h=A(h);_(h)},triggerNodeChanges:k=>{const{onNodesChange:m,setNodes:g,nodes:h,hasDefaultNodes:v,debug:_}=y();if(k!=null&&k.length){if(v){const S=P0(k,h);g(S)}_&&console.log("React Flow: trigger node changes",k),m==null||m(k)}},triggerEdgeChanges:k=>{const{onEdgesChange:m,setEdges:g,edges:h,hasDefaultEdges:v,debug:_}=y();if(k!=null&&k.length){if(v){const S=T0(k,h);g(S)}_&&console.log("React Flow: trigger edge changes",k),m==null||m(k)}},addSelectedNodes:k=>{const{multiSelectionActive:m,edgeLookup:g,nodeLookup:h,triggerNodeChanges:v,triggerEdgeChanges:_}=y();if(m){const S=k.map(E=>xn(E,!0));v(S);return}v(nr(h,new Set([...k]),!0)),_(nr(g))},addSelectedEdges:k=>{const{multiSelectionActive:m,edgeLookup:g,nodeLookup:h,triggerNodeChanges:v,triggerEdgeChanges:_}=y();if(m){const S=k.map(E=>xn(E,!0));_(S);return}_(nr(g,new Set([...k]))),v(nr(h,new Set,!0))},unselectNodesAndEdges:({nodes:k,edges:m}={})=>{const{edges:g,nodes:h,nodeLookup:v,triggerNodeChanges:_,triggerEdgeChanges:S}=y(),E=k||h,b=m||g,A=[];for(const T of E){if(!T.selected)continue;const I=v.get(T.id);I&&(I.selected=!1),A.push(xn(T.id,!1))}const D=[];for(const T of b)T.selected&&D.push(xn(T.id,!1));_(A),S(D)},setMinZoom:k=>{const{panZoom:m,maxZoom:g}=y();m==null||m.setScaleExtent([k,g]),x({minZoom:k})},setMaxZoom:k=>{const{panZoom:m,minZoom:g}=y();m==null||m.setScaleExtent([g,k]),x({maxZoom:k})},setTranslateExtent:k=>{var m;(m=y().panZoom)==null||m.setTranslateExtent(k),x({translateExtent:k})},resetSelectedElements:()=>{const{edges:k,nodes:m,triggerNodeChanges:g,triggerEdgeChanges:h,elementsSelectable:v}=y();if(!v)return;const _=m.reduce((E,b)=>b.selected?[...E,xn(b.id,!1)]:E,[]),S=k.reduce((E,b)=>b.selected?[...E,xn(b.id,!1)]:E,[]);g(_),h(S)},setNodeExtent:k=>{const{nodes:m,nodeLookup:g,parentLookup:h,nodeOrigin:v,elevateNodesOnSelect:_,nodeExtent:S,zIndexMode:E}=y();k[0][0]===S[0][0]&&k[0][1]===S[0][1]&&k[1][0]===S[1][0]&&k[1][1]===S[1][1]||(tu(m,g,h,{nodeOrigin:v,nodeExtent:k,elevateNodesOnSelect:_,checkEquality:!1,zIndexMode:E}),x({nodeExtent:k}))},panBy:k=>{const{transform:m,width:g,height:h,panZoom:v,translateExtent:_}=y();return YS({delta:k,panZoom:v,transform:m,translateExtent:_,width:g,height:h})},setCenter:async(k,m,g)=>{const{width:h,height:v,maxZoom:_,panZoom:S}=y();if(!S)return Promise.resolve(!1);const E=typeof(g==null?void 0:g.zoom)<"u"?g.zoom:_;return await S.setViewport({x:h/2-k*E,y:v/2-m*E,zoom:E},{duration:g==null?void 0:g.duration,ease:g==null?void 0:g.ease,interpolate:g==null?void 0:g.interpolate}),Promise.resolve(!0)},cancelConnection:()=>{x({connection:{...Qg}})},updateConnection:k=>{x({connection:k})},reset:()=>x({...Ff()})}},Object.is);function bE({initialNodes:e,initialEdges:t,defaultNodes:n,defaultEdges:r,initialWidth:o,initialHeight:i,initialMinZoom:s,initialMaxZoom:l,initialFitViewOptions:a,fitView:u,nodeOrigin:p,nodeExtent:c,zIndexMode:d,children:x}){const[y]=z.useState(()=>CE({nodes:e,edges:t,defaultNodes:n,defaultEdges:r,width:o,height:i,fitView:u,minZoom:s,maxZoom:l,fitViewOptions:a,nodeOrigin:p,nodeExtent:c,zIndexMode:d}));return f.jsx(Wk,{value:y,children:f.jsx(p_,{children:x})})}function NE({children:e,nodes:t,edges:n,defaultNodes:r,defaultEdges:o,width:i,height:s,fitView:l,fitViewOptions:a,minZoom:u,maxZoom:p,nodeOrigin:c,nodeExtent:d,zIndexMode:x}){return z.useContext(Js)?f.jsx(f.Fragment,{children:e}):f.jsx(bE,{initialNodes:t,initialEdges:n,defaultNodes:r,defaultEdges:o,initialWidth:i,initialHeight:s,fitView:l,initialFitViewOptions:a,initialMinZoom:u,initialMaxZoom:p,nodeOrigin:c,nodeExtent:d,zIndexMode:x,children:e})}const jE={width:"100%",height:"100%",overflow:"hidden",position:"relative",zIndex:0};function ME({nodes:e,edges:t,defaultNodes:n,defaultEdges:r,className:o,nodeTypes:i,edgeTypes:s,onNodeClick:l,onEdgeClick:a,onInit:u,onMove:p,onMoveStart:c,onMoveEnd:d,onConnect:x,onConnectStart:y,onConnectEnd:w,onClickConnectStart:k,onClickConnectEnd:m,onNodeMouseEnter:g,onNodeMouseMove:h,onNodeMouseLeave:v,onNodeContextMenu:_,onNodeDoubleClick:S,onNodeDragStart:E,onNodeDrag:b,onNodeDragStop:A,onNodesDelete:D,onEdgesDelete:T,onDelete:I,onSelectionChange:P,onSelectionDragStart:C,onSelectionDrag:L,onSelectionDragStop:M,onSelectionContextMenu:R,onSelectionStart:N,onSelectionEnd:j,onBeforeDelete:$,connectionMode:O,connectionLineType:B=Zt.Bezier,connectionLineStyle:W,connectionLineComponent:V,connectionLineContainerStyle:Y,deleteKeyCode:X="Backspace",selectionKeyCode:Q="Shift",selectionOnDrag:H=!1,selectionMode:K=Io.Full,panActivationKeyCode:ee="Space",multiSelectionKeyCode:G=Lo()?"Meta":"Control",zoomActivationKeyCode:J=Lo()?"Meta":"Control",snapToGrid:Z,snapGrid:re,onlyRenderVisibleElements:le=!1,selectNodesOnDrag:ie,nodesDraggable:je,autoPanOnNodeFocus:Vt,nodesConnectable:jt,nodesFocusable:gn,nodeOrigin:Mr=M0,edgesFocusable:zr,edgesReconnectable:Pr,elementsSelectable:rl=!0,defaultViewport:Ko=r_,minZoom:On=.5,maxZoom:Tr=2,translateExtent:kc=To,preventScrolling:um=!0,nodeExtent:ol,defaultMarkerColor:cm="#b1b1b7",zoomOnScroll:dm=!0,zoomOnPinch:fm=!0,panOnScroll:pm=!1,panOnScrollSpeed:hm=.5,panOnScrollMode:gm=bn.Free,zoomOnDoubleClick:mm=!0,panOnDrag:ym=!0,onPaneClick:xm,onPaneMouseEnter:vm,onPaneMouseMove:wm,onPaneMouseLeave:Sm,onPaneScroll:km,onPaneContextMenu:_m,paneClickDistance:Em=1,nodeClickDistance:Cm=0,children:bm,onReconnect:Nm,onReconnectStart:jm,onReconnectEnd:Mm,onEdgeContextMenu:zm,onEdgeDoubleClick:Pm,onEdgeMouseEnter:Tm,onEdgeMouseMove:Im,onEdgeMouseLeave:Rm,reconnectRadius:Lm=10,onNodesChange:Am,onEdgesChange:$m,noDragClassName:Dm="nodrag",noWheelClassName:Om="nowheel",noPanClassName:_c="nopan",fitView:Ec,fitViewOptions:Cc,connectOnClick:Bm,attributionPosition:Fm,proOptions:Hm,defaultEdgeOptions:Vm,elevateNodesOnSelect:Wm=!0,elevateEdgesOnSelect:Um=!1,disableKeyboardA11y:bc=!1,autoPanOnConnect:Ym,autoPanOnNodeDrag:Xm,autoPanSpeed:Qm,connectionRadius:Gm,isValidConnection:Km,onError:Zm,style:qm,id:Nc,nodeDragThreshold:Jm,connectionDragThreshold:ey,viewport:ty,onViewportChange:ny,width:ry,height:oy,colorMode:iy="light",debug:sy,onScroll:Zo,ariaLabelConfig:ly,zIndexMode:jc="basic",...ay},uy){const il=Nc||"1",cy=l_(iy),dy=z.useCallback(Mc=>{Mc.currentTarget.scrollTo({top:0,left:0,behavior:"instant"}),Zo==null||Zo(Mc)},[Zo]);return f.jsx("div",{"data-testid":"rf__wrapper",...ay,onScroll:dy,style:{...qm,...jE},ref:uy,className:we(["react-flow",o,cy]),id:Nc,role:"application",children:f.jsxs(NE,{nodes:e,edges:t,width:ry,height:oy,fitView:Ec,fitViewOptions:Cc,minZoom:On,maxZoom:Tr,nodeOrigin:Mr,nodeExtent:ol,zIndexMode:jc,children:[f.jsx(EE,{onInit:u,onNodeClick:l,onEdgeClick:a,onNodeMouseEnter:g,onNodeMouseMove:h,onNodeMouseLeave:v,onNodeContextMenu:_,onNodeDoubleClick:S,nodeTypes:i,edgeTypes:s,connectionLineType:B,connectionLineStyle:W,connectionLineComponent:V,connectionLineContainerStyle:Y,selectionKeyCode:Q,selectionOnDrag:H,selectionMode:K,deleteKeyCode:X,multiSelectionKeyCode:G,panActivationKeyCode:ee,zoomActivationKeyCode:J,onlyRenderVisibleElements:le,defaultViewport:Ko,translateExtent:kc,minZoom:On,maxZoom:Tr,preventScrolling:um,zoomOnScroll:dm,zoomOnPinch:fm,zoomOnDoubleClick:mm,panOnScroll:pm,panOnScrollSpeed:hm,panOnScrollMode:gm,panOnDrag:ym,onPaneClick:xm,onPaneMouseEnter:vm,onPaneMouseMove:wm,onPaneMouseLeave:Sm,onPaneScroll:km,onPaneContextMenu:_m,paneClickDistance:Em,nodeClickDistance:Cm,onSelectionContextMenu:R,onSelectionStart:N,onSelectionEnd:j,onReconnect:Nm,onReconnectStart:jm,onReconnectEnd:Mm,onEdgeContextMenu:zm,onEdgeDoubleClick:Pm,onEdgeMouseEnter:Tm,onEdgeMouseMove:Im,onEdgeMouseLeave:Rm,reconnectRadius:Lm,defaultMarkerColor:cm,noDragClassName:Dm,noWheelClassName:Om,noPanClassName:_c,rfId:il,disableKeyboardA11y:bc,nodeExtent:ol,viewport:ty,onViewportChange:ny}),f.jsx(s_,{nodes:e,edges:t,defaultNodes:n,defaultEdges:r,onConnect:x,onConnectStart:y,onConnectEnd:w,onClickConnectStart:k,onClickConnectEnd:m,nodesDraggable:je,autoPanOnNodeFocus:Vt,nodesConnectable:jt,nodesFocusable:gn,edgesFocusable:zr,edgesReconnectable:Pr,elementsSelectable:rl,elevateNodesOnSelect:Wm,elevateEdgesOnSelect:Um,minZoom:On,maxZoom:Tr,nodeExtent:ol,onNodesChange:Am,onEdgesChange:$m,snapToGrid:Z,snapGrid:re,connectionMode:O,translateExtent:kc,connectOnClick:Bm,defaultEdgeOptions:Vm,fitView:Ec,fitViewOptions:Cc,onNodesDelete:D,onEdgesDelete:T,onDelete:I,onNodeDragStart:E,onNodeDrag:b,onNodeDragStop:A,onSelectionDrag:L,onSelectionDragStart:C,onSelectionDragStop:M,onMove:p,onMoveStart:c,onMoveEnd:d,noPanClassName:_c,nodeOrigin:Mr,rfId:il,autoPanOnConnect:Ym,autoPanOnNodeDrag:Xm,autoPanSpeed:Qm,onError:Zm,connectionRadius:Gm,isValidConnection:Km,selectNodesOnDrag:ie,nodeDragThreshold:Jm,connectionDragThreshold:ey,onBeforeDelete:$,debug:sy,ariaLabelConfig:ly,zIndexMode:jc}),f.jsx(n_,{onSelectionChange:P}),bm,f.jsx(Zk,{proOptions:Hm,position:Fm}),f.jsx(Kk,{rfId:il,disableKeyboardA11y:bc})]})})}var zE=I0(ME);function PE(e){const[t,n]=z.useState(e),r=z.useCallback(o=>n(i=>P0(o,i)),[]);return[t,n,r]}function TE(e){const[t,n]=z.useState(e),r=z.useCallback(o=>n(i=>T0(o,i)),[]);return[t,n,r]}function IE({dimensions:e,lineWidth:t,variant:n,className:r}){return f.jsx("path",{strokeWidth:t,d:`M${e[0]/2} 0 V${e[1]} M0 ${e[1]/2} H${e[0]}`,className:we(["react-flow__background-pattern",n,r])})}function RE({radius:e,className:t}){return f.jsx("circle",{cx:e,cy:e,r:e,className:we(["react-flow__background-pattern","dots",t])})}var un;(function(e){e.Lines="lines",e.Dots="dots",e.Cross="cross"})(un||(un={}));const LE={[un.Dots]:1,[un.Lines]:1,[un.Cross]:6},AE=e=>({transform:e.transform,patternId:`pattern-${e.rfId}`});function rm({id:e,variant:t=un.Dots,gap:n=20,size:r,lineWidth:o=1,offset:i=0,color:s,bgColor:l,style:a,className:u,patternClassName:p}){const c=z.useRef(null),{transform:d,patternId:x}=ne(AE,fe),y=r||LE[t],w=t===un.Dots,k=t===un.Cross,m=Array.isArray(n)?n:[n,n],g=[m[0]*d[2]||1,m[1]*d[2]||1],h=y*d[2],v=Array.isArray(i)?i:[i,i],_=k?[h,h]:g,S=[v[0]*d[2]||1+_[0]/2,v[1]*d[2]||1+_[1]/2],E=`${x}${e||""}`;return f.jsxs("svg",{className:we(["react-flow__background",u]),style:{...a,...tl,"--xy-background-color-props":l,"--xy-background-pattern-color-props":s},ref:c,"data-testid":"rf__background",children:[f.jsx("pattern",{id:E,x:d[0]%g[0],y:d[1]%g[1],width:g[0],height:g[1],patternUnits:"userSpaceOnUse",patternTransform:`translate(-${S[0]},-${S[1]})`,children:w?f.jsx(RE,{radius:h/2,className:p}):f.jsx(IE,{dimensions:_,lineWidth:o,variant:t,className:p})}),f.jsx("rect",{x:"0",y:"0",width:"100%",height:"100%",fill:`url(#${E})`})]})}rm.displayName="Background";const $E=z.memo(rm);function DE(){return f.jsx("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",children:f.jsx("path",{d:"M32 18.133H18.133V32h-4.266V18.133H0v-4.266h13.867V0h4.266v13.867H32z"})})}function OE(){return f.jsx("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 5",children:f.jsx("path",{d:"M0 0h32v4.2H0z"})})}function BE(){return f.jsx("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 30",children:f.jsx("path",{d:"M3.692 4.63c0-.53.4-.938.939-.938h5.215V0H4.708C2.13 0 0 2.054 0 4.63v5.216h3.692V4.631zM27.354 0h-5.2v3.692h5.17c.53 0 .984.4.984.939v5.215H32V4.631A4.624 4.624 0 0027.354 0zm.954 24.83c0 .532-.4.94-.939.94h-5.215v3.768h5.215c2.577 0 4.631-2.13 4.631-4.707v-5.139h-3.692v5.139zm-23.677.94c-.531 0-.939-.4-.939-.94v-5.138H0v5.139c0 2.577 2.13 4.707 4.708 4.707h5.138V25.77H4.631z"})})}function FE(){return f.jsx("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 25 32",children:f.jsx("path",{d:"M21.333 10.667H19.81V7.619C19.81 3.429 16.38 0 12.19 0 8 0 4.571 3.429 4.571 7.619v3.048H3.048A3.056 3.056 0 000 13.714v15.238A3.056 3.056 0 003.048 32h18.285a3.056 3.056 0 003.048-3.048V13.714a3.056 3.056 0 00-3.048-3.047zM12.19 24.533a3.056 3.056 0 01-3.047-3.047 3.056 3.056 0 013.047-3.048 3.056 3.056 0 013.048 3.048 3.056 3.056 0 01-3.048 3.047zm4.724-13.866H7.467V7.619c0-2.59 2.133-4.724 4.723-4.724 2.591 0 4.724 2.133 4.724 4.724v3.048z"})})}function HE(){return f.jsx("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 25 32",children:f.jsx("path",{d:"M21.333 10.667H19.81V7.619C19.81 3.429 16.38 0 12.19 0c-4.114 1.828-1.37 2.133.305 2.438 1.676.305 4.42 2.59 4.42 5.181v3.048H3.047A3.056 3.056 0 000 13.714v15.238A3.056 3.056 0 003.048 32h18.285a3.056 3.056 0 003.048-3.048V13.714a3.056 3.056 0 00-3.048-3.047zM12.19 24.533a3.056 3.056 0 01-3.047-3.047 3.056 3.056 0 013.047-3.048 3.056 3.056 0 013.048 3.048 3.056 3.056 0 01-3.048 3.047z"})})}function _i({children:e,className:t,...n}){return f.jsx("button",{type:"button",className:we(["react-flow__controls-button",t]),...n,children:e})}const VE=e=>({isInteractive:e.nodesDraggable||e.nodesConnectable||e.elementsSelectable,minZoomReached:e.transform[2]<=e.minZoom,maxZoomReached:e.transform[2]>=e.maxZoom,ariaLabelConfig:e.ariaLabelConfig});function om({style:e,showZoom:t=!0,showFitView:n=!0,showInteractive:r=!0,fitViewOptions:o,onZoomIn:i,onZoomOut:s,onFitView:l,onInteractiveChange:a,className:u,children:p,position:c="bottom-left",orientation:d="vertical","aria-label":x}){const y=pe(),{isInteractive:w,minZoomReached:k,maxZoomReached:m,ariaLabelConfig:g}=ne(VE,fe),{zoomIn:h,zoomOut:v,fitView:_}=xc(),S=()=>{h(),i==null||i()},E=()=>{v(),s==null||s()},b=()=>{_(o),l==null||l()},A=()=>{y.setState({nodesDraggable:!w,nodesConnectable:!w,elementsSelectable:!w}),a==null||a(!w)},D=d==="horizontal"?"horizontal":"vertical";return f.jsxs(el,{className:we(["react-flow__controls",D,u]),position:c,style:e,"data-testid":"rf__controls","aria-label":x??g["controls.ariaLabel"],children:[t&&f.jsxs(f.Fragment,{children:[f.jsx(_i,{onClick:S,className:"react-flow__controls-zoomin",title:g["controls.zoomIn.ariaLabel"],"aria-label":g["controls.zoomIn.ariaLabel"],disabled:m,children:f.jsx(DE,{})}),f.jsx(_i,{onClick:E,className:"react-flow__controls-zoomout",title:g["controls.zoomOut.ariaLabel"],"aria-label":g["controls.zoomOut.ariaLabel"],disabled:k,children:f.jsx(OE,{})})]}),n&&f.jsx(_i,{className:"react-flow__controls-fitview",onClick:b,title:g["controls.fitView.ariaLabel"],"aria-label":g["controls.fitView.ariaLabel"],children:f.jsx(BE,{})}),r&&f.jsx(_i,{className:"react-flow__controls-interactive",onClick:A,title:g["controls.interactive.ariaLabel"],"aria-label":g["controls.interactive.ariaLabel"],children:w?f.jsx(HE,{}):f.jsx(FE,{})}),p]})}om.displayName="Controls";const WE=z.memo(om);function UE({id:e,x:t,y:n,width:r,height:o,style:i,color:s,strokeColor:l,strokeWidth:a,className:u,borderRadius:p,shapeRendering:c,selected:d,onClick:x}){const{background:y,backgroundColor:w}=i||{},k=s||y||w;return f.jsx("rect",{className:we(["react-flow__minimap-node",{selected:d},u]),x:t,y:n,rx:p,ry:p,width:r,height:o,style:{fill:k,stroke:l,strokeWidth:a},shapeRendering:c,onClick:x?m=>x(m,e):void 0})}const YE=z.memo(UE),XE=e=>e.nodes.map(t=>t.id),Fl=e=>e instanceof Function?e:()=>e;function QE({nodeStrokeColor:e,nodeColor:t,nodeClassName:n="",nodeBorderRadius:r=5,nodeStrokeWidth:o,nodeComponent:i=YE,onClick:s}){const l=ne(XE,fe),a=Fl(t),u=Fl(e),p=Fl(n),c=typeof window>"u"||window.chrome?"crispEdges":"geometricPrecision";return f.jsx(f.Fragment,{children:l.map(d=>f.jsx(KE,{id:d,nodeColorFunc:a,nodeStrokeColorFunc:u,nodeClassNameFunc:p,nodeBorderRadius:r,nodeStrokeWidth:o,NodeComponent:i,onClick:s,shapeRendering:c},d))})}function GE({id:e,nodeColorFunc:t,nodeStrokeColorFunc:n,nodeClassNameFunc:r,nodeBorderRadius:o,nodeStrokeWidth:i,shapeRendering:s,NodeComponent:l,onClick:a}){const{node:u,x:p,y:c,width:d,height:x}=ne(y=>{const w=y.nodeLookup.get(e);if(!w)return{node:void 0,x:0,y:0,width:0,height:0};const k=w.internals.userNode,{x:m,y:g}=w.internals.positionAbsolute,{width:h,height:v}=Ht(k);return{node:k,x:m,y:g,width:h,height:v}},fe);return!u||u.hidden||!t0(u)?null:f.jsx(l,{x:p,y:c,width:d,height:x,style:u.style,selected:!!u.selected,className:r(u),color:t(u),borderRadius:o,strokeColor:n(u),strokeWidth:i,shapeRendering:s,onClick:a,id:u.id})}const KE=z.memo(GE);var ZE=z.memo(QE);const qE=200,JE=150,eC=e=>!e.hidden,tC=e=>{const t={x:-e.transform[0]/e.transform[2],y:-e.transform[1]/e.transform[2],width:e.width/e.transform[2],height:e.height/e.transform[2]};return{viewBB:t,boundingRect:e.nodeLookup.size>0?e0(Yo(e.nodeLookup,{filter:eC}),t):t,rfId:e.rfId,panZoom:e.panZoom,translateExtent:e.translateExtent,flowWidth:e.width,flowHeight:e.height,ariaLabelConfig:e.ariaLabelConfig}},nC="react-flow__minimap-desc";function im({style:e,className:t,nodeStrokeColor:n,nodeColor:r,nodeClassName:o="",nodeBorderRadius:i=5,nodeStrokeWidth:s,nodeComponent:l,bgColor:a,maskColor:u,maskStrokeColor:p,maskStrokeWidth:c,position:d="bottom-right",onClick:x,onNodeClick:y,pannable:w=!1,zoomable:k=!1,ariaLabel:m,inversePan:g,zoomStep:h=1,offsetScale:v=5}){const _=pe(),S=z.useRef(null),{boundingRect:E,viewBB:b,rfId:A,panZoom:D,translateExtent:T,flowWidth:I,flowHeight:P,ariaLabelConfig:C}=ne(tC,fe),L=(e==null?void 0:e.width)??qE,M=(e==null?void 0:e.height)??JE,R=E.width/L,N=E.height/M,j=Math.max(R,N),$=j*L,O=j*M,B=v*j,W=E.x-($-E.width)/2-B,V=E.y-(O-E.height)/2-B,Y=$+B*2,X=O+B*2,Q=`${nC}-${A}`,H=z.useRef(0),K=z.useRef();H.current=j,z.useEffect(()=>{if(S.current&&D)return K.current=tk({domNode:S.current,panZoom:D,getTransform:()=>_.getState().transform,getViewScale:()=>H.current}),()=>{var Z;(Z=K.current)==null||Z.destroy()}},[D]),z.useEffect(()=>{var Z;(Z=K.current)==null||Z.update({translateExtent:T,width:I,height:P,inversePan:g,pannable:w,zoomStep:h,zoomable:k})},[w,k,g,h,T,I,P]);const ee=x?Z=>{var ie;const[re,le]=((ie=K.current)==null?void 0:ie.pointer(Z))||[0,0];x(Z,{x:re,y:le})}:void 0,G=y?z.useCallback((Z,re)=>{const le=_.getState().nodeLookup.get(re).internals.userNode;y(Z,le)},[]):void 0,J=m??C["minimap.ariaLabel"];return f.jsx(el,{position:d,style:{...e,"--xy-minimap-background-color-props":typeof a=="string"?a:void 0,"--xy-minimap-mask-background-color-props":typeof u=="string"?u:void 0,"--xy-minimap-mask-stroke-color-props":typeof p=="string"?p:void 0,"--xy-minimap-mask-stroke-width-props":typeof c=="number"?c*j:void 0,"--xy-minimap-node-background-color-props":typeof r=="string"?r:void 0,"--xy-minimap-node-stroke-color-props":typeof n=="string"?n:void 0,"--xy-minimap-node-stroke-width-props":typeof s=="number"?s:void 0},className:we(["react-flow__minimap",t]),"data-testid":"rf__minimap",children:f.jsxs("svg",{width:L,height:M,viewBox:`${W} ${V} ${Y} ${X}`,className:"react-flow__minimap-svg",role:"img","aria-labelledby":Q,ref:S,onClick:ee,children:[J&&f.jsx("title",{id:Q,children:J}),f.jsx(ZE,{onClick:G,nodeColor:r,nodeStrokeColor:n,nodeBorderRadius:i,nodeClassName:o,nodeStrokeWidth:s,nodeComponent:l}),f.jsx("path",{className:"react-flow__minimap-mask",d:`M${W-B},${V-B}h${Y+B*2}v${X+B*2}h${-Y-B*2}z
- M${b.x},${b.y}h${b.width}v${b.height}h${-b.width}z`,fillRule:"evenodd",pointerEvents:"none"})]})})}im.displayName="MiniMap";z.memo(im);const rC=e=>t=>e?`${Math.max(1/t.transform[2],1)}`:void 0,oC={[An.Line]:"right",[An.Handle]:"bottom-right"};function iC({nodeId:e,position:t,variant:n=An.Handle,className:r,style:o=void 0,children:i,color:s,minWidth:l=10,minHeight:a=10,maxWidth:u=Number.MAX_VALUE,maxHeight:p=Number.MAX_VALUE,keepAspectRatio:c=!1,resizeDirection:d,autoScale:x=!0,shouldResize:y,onResizeStart:w,onResize:k,onResizeEnd:m}){const g=$0(),h=typeof e=="string"?e:g,v=pe(),_=z.useRef(null),S=n===An.Handle,E=ne(z.useCallback(rC(S&&x),[S,x]),fe),b=z.useRef(null),A=t??oC[n];z.useEffect(()=>{if(!(!_.current||!h))return b.current||(b.current=yk({domNode:_.current,nodeId:h,getStoreItems:()=>{const{nodeLookup:T,transform:I,snapGrid:P,snapToGrid:C,nodeOrigin:L,domNode:M}=v.getState();return{nodeLookup:T,transform:I,snapGrid:P,snapToGrid:C,nodeOrigin:L,paneDomNode:M}},onChange:(T,I)=>{const{triggerNodeChanges:P,nodeLookup:C,parentLookup:L,nodeOrigin:M}=v.getState(),R=[],N={x:T.x,y:T.y},j=C.get(h);if(j&&j.expandParent&&j.parentId){const $=j.origin??M,O=T.width??j.measured.width??0,B=T.height??j.measured.height??0,W={id:j.id,parentId:j.parentId,rect:{width:O,height:B,...n0({x:T.x??j.position.x,y:T.y??j.position.y},{width:O,height:B},j.parentId,C,$)}},V=yc([W],C,L,M);R.push(...V),N.x=T.x?Math.max($[0]*O,T.x):void 0,N.y=T.y?Math.max($[1]*B,T.y):void 0}if(N.x!==void 0&&N.y!==void 0){const $={id:h,type:"position",position:{...N}};R.push($)}if(T.width!==void 0&&T.height!==void 0){const O={id:h,type:"dimensions",resizing:!0,setAttributes:d?d==="horizontal"?"width":"height":!0,dimensions:{width:T.width,height:T.height}};R.push(O)}for(const $ of I){const O={...$,type:"position"};R.push(O)}P(R)},onEnd:({width:T,height:I})=>{const P={id:h,type:"dimensions",resizing:!1,dimensions:{width:T,height:I}};v.getState().triggerNodeChanges([P])}})),b.current.update({controlPosition:A,boundaries:{minWidth:l,minHeight:a,maxWidth:u,maxHeight:p},keepAspectRatio:c,resizeDirection:d,onResizeStart:w,onResize:k,onResizeEnd:m,shouldResize:y}),()=>{var T;(T=b.current)==null||T.destroy()}},[A,l,a,u,p,c,w,k,m,y]);const D=A.split("-");return f.jsx("div",{className:we(["react-flow__resize-control","nodrag",...D,n,r]),ref:_,style:{...o,scale:E,...s&&{[S?"backgroundColor":"borderColor"]:s}},children:i})}const Hf=z.memo(iC);function sC({nodeId:e,isVisible:t=!0,handleClassName:n,handleStyle:r,lineClassName:o,lineStyle:i,color:s,minWidth:l=10,minHeight:a=10,maxWidth:u=Number.MAX_VALUE,maxHeight:p=Number.MAX_VALUE,keepAspectRatio:c=!1,autoScale:d=!0,shouldResize:x,onResizeStart:y,onResize:w,onResizeEnd:k}){return t?f.jsxs(f.Fragment,{children:[dk.map(m=>f.jsx(Hf,{className:o,style:i,nodeId:e,position:m,variant:An.Line,color:s,minWidth:l,minHeight:a,maxWidth:u,maxHeight:p,onResizeStart:y,keepAspectRatio:c,autoScale:d,shouldResize:x,onResize:w,onResizeEnd:k},m)),ck.map(m=>f.jsx(Hf,{className:n,style:r,nodeId:e,position:m,color:s,minWidth:l,minHeight:a,maxWidth:u,maxHeight:p,onResizeStart:y,keepAspectRatio:c,autoScale:d,shouldResize:x,onResize:w,onResizeEnd:k},m))]}):null}const ou={compute:"#10b981",database:"#8b5cf6",storage:"#6366f1",network:"#3b82f6",security:"#ef4444",serverless:"#f59e0b",cache:"#8b5cf6",queue:"#f97316",cdn:"#3b82f6",monitoring:"#06b6d4",ml:"#ec4899",analytics:"#a855f7",containers:"#14b8a6",streaming:"#f97316",orchestration:"#a78bfa"},lC={ec2:"compute",ecs:"compute",eks:"compute",emr:"compute",fargate:"compute",codepipeline:"compute",codecommit:"storage",codebuild:"compute",dms:"compute",migration_hub:"compute",compute_engine:"compute",gke:"containers",app_engine:"serverless",cloud_build:"compute",virtual_machines:"compute",aks:"containers",container_apps:"containers",azure_devops:"compute",azure_migrate:"compute",rds:"database",aurora:"database",dynamodb:"database",cloud_sql:"database",azure_sql:"database",cosmos_db:"database",redshift:"database",bigquery:"database",firestore:"database",spanner:"database",alloydb:"database",s3:"storage",cloud_storage:"storage",blob_storage:"storage",ebs:"storage",ecr:"storage",fsx:"storage",efs:"storage",artifact_registry:"storage",alb:"network",nlb:"network",route53:"network",cloud_load_balancing:"network",app_gateway:"network",cloud_dns:"network",direct_connect:"network",vpn:"network",azure_lb:"network",azure_dns:"network",cloud_interconnect:"network",api_management:"network",cloudfront:"cdn",cloud_cdn:"cdn",azure_cdn:"cdn",waf:"security",cognito:"security",kms:"security",cloudtrail:"security",guardduty:"security",shield:"security",security_hub:"security",config:"security",inspector:"security",cloud_armor:"security",firebase_auth:"security",azure_waf:"security",azure_ad:"security",azure_firewall:"security",azure_sentinel:"security",azure_policy:"security",lambda:"serverless",api_gateway:"serverless",cloud_functions:"serverless",cloud_run:"serverless",azure_functions:"serverless",step_functions:"serverless",glue:"serverless",app_service:"serverless",elasticache:"cache",memorystore:"cache",azure_cache:"cache",sqs:"queue",sns:"queue",pub_sub:"queue",service_bus:"queue",kinesis:"queue",eventbridge:"queue",cloudwatch:"monitoring",cloud_logging:"monitoring",azure_monitor:"monitoring",sagemaker:"ml",vertex_ai:"ml",azure_ml:"ml",athena:"analytics",dataproc:"analytics",data_factory:"analytics",synapse:"analytics",dataflow:"streaming",event_hubs:"streaming",cloud_composer:"orchestration",logic_apps:"orchestration",databricks_sql_warehouse:"analytics",databricks_cluster:"compute",databricks_job:"orchestration",databricks_pipeline:"streaming",databricks_model_serving:"ml",databricks_unity_catalog:"security",databricks_vector_search:"database",databricks_genie:"analytics",databricks_notebook:"compute",databricks_secret_scope:"security",databricks_dashboard:"analytics",databricks_volume:"storage"},Vf={compute:"M5 12H3l9-9 9 9h-2M5 12v7a2 2 0 002 2h10a2 2 0 002-2v-7",database:"M12 2C6.48 2 2 4.24 2 7v10c0 2.76 4.48 5 10 5s10-2.24 10-5V7c0-2.76-4.48-5-10-5zM2 12c0 2.76 4.48 5 10 5s10-2.24 10-5",storage:"M20 7H4a1 1 0 00-1 1v8a1 1 0 001 1h16a1 1 0 001-1V8a1 1 0 00-1-1zM4 12h16",network:"M12 2a10 10 0 100 20 10 10 0 000-20zm0 0a14.5 14.5 0 014 10 14.5 14.5 0 01-4 10 14.5 14.5 0 01-4-10A14.5 14.5 0 0112 2zM2 12h20",security:"M12 2l7 4v5c0 5.25-3.5 10.74-7 12-3.5-1.26-7-6.75-7-12V6l7-4z",serverless:"M13 2L3 14h9l-1 8 10-12h-9l1-8z",cache:"M4 4h16v4H4zM4 10h16v4H4zM4 16h16v4H4z",queue:"M4 6h16M4 12h16M4 18h16",cdn:"M12 2a10 10 0 100 20 10 10 0 000-20zm-1 17.93A8 8 0 013 12a8 8 0 018-7.93M12 2v20M2 12h20M4.22 7h15.56M4.22 17h15.56",monitoring:"M3 3v18h18M7 16l4-8 4 4 4-6",ml:"M12 2a4 4 0 014 4c0 1.95-1.4 3.57-3.24 3.9L12 14l-.76-4.1A4 4 0 018 6a4 4 0 014-4zM8 14h8M6 18h12M9 22h6",analytics:"M18 20V10M12 20V4M6 20v-6",containers:"M21 16V8a2 2 0 00-1-1.73l-7-4a2 2 0 00-2 0l-7 4A2 2 0 003 8v8a2 2 0 001 1.73l7 4a2 2 0 002 0l7-4A2 2 0 0021 16zM3.27 6.96L12 12l8.73-5.04M12 22.08V12",streaming:"M2 12c2-3 4-3 6 0s4 3 6 0 4-3 6 0 4 3 6 0",orchestration:"M12 2v4M12 18v4M4.93 4.93l2.83 2.83M16.24 16.24l2.83 2.83M2 12h4M18 12h4M4.93 19.07l2.83-2.83M16.24 7.76l2.83-2.83"};function wc(e){return lC[e]||"compute"}function sm(e){return ou[e]||"#94a3b8"}function Sc(e){return Vf[e]||Vf.compute}function aC({data:e}){const t=e,n=wc(t.service),r=sm(n),o=Sc(n);return f.jsxs("div",{style:{background:"#ffffff",border:`2px solid ${r}`,borderRadius:10,padding:"8px 12px",color:"#0f172a",minWidth:160,position:"relative",boxShadow:"0 1px 3px rgba(0,0,0,0.08)"},children:[f.jsx(Cr,{type:"target",position:q.Top,style:{background:r}}),f.jsxs("div",{style:{display:"flex",alignItems:"center",gap:6,marginBottom:4},children:[f.jsx("svg",{width:16,height:16,viewBox:"0 0 24 24",fill:"none",stroke:r,strokeWidth:2,strokeLinecap:"round",strokeLinejoin:"round",style:{display:"block",width:28,height:28,padding:5,borderRadius:6,background:`${r}22`},children:f.jsx("path",{d:o})}),f.jsx("span",{style:{fontSize:9,color:"#64748b",textTransform:"uppercase",letterSpacing:1},children:n})]}),f.jsx("div",{style:{fontWeight:600,fontSize:13,marginBottom:2,color:"#0f172a"},children:t.label}),f.jsxs("div",{style:{fontSize:11,color:"#64748b"},children:[t.service,f.jsx("span",{style:{marginLeft:6,padding:"1px 4px",borderRadius:3,background:"#e2e8f0",color:"#475569",fontSize:9,textTransform:"uppercase"},children:t.provider})]}),t.monthlyCost!=null&&t.monthlyCost>0&&f.jsxs("div",{style:{fontSize:10,color:"#2563eb",marginTop:4},children:["$",t.monthlyCost.toFixed(0),"/mo"]}),f.jsx(Cr,{type:"source",position:q.Bottom,style:{background:r}})]})}const uC=z.memo(aC);function cC({data:e,selected:t}){return f.jsxs(f.Fragment,{children:[f.jsx(sC,{color:e.dotColor,isVisible:t??!1,minWidth:200,minHeight:100,lineStyle:{borderWidth:1.5},handleStyle:{width:8,height:8,borderRadius:2}}),f.jsxs("div",{style:{position:"absolute",top:6,left:8,display:"inline-flex",alignItems:"center",gap:5,padding:"3px 10px 3px 7px",borderRadius:5,background:e.labelBg,border:`1px solid ${e.dotColor}30`,boxShadow:"0 1px 2px rgba(0,0,0,0.04)",pointerEvents:"none"},children:[f.jsx("span",{style:{width:7,height:7,borderRadius:"50%",background:e.dotColor,flexShrink:0}}),f.jsx("span",{style:{color:e.labelColor,fontSize:11,fontWeight:600,letterSpacing:"0.02em",whiteSpace:"nowrap",lineHeight:1},children:e.label})]})]})}function dC({components:e}){const[t,n]=z.useState(!1),r=z.useMemo(()=>{if(!e||e.length===0)return Object.keys(ou).map(i=>({category:i,count:0}));const o={};for(const i of e){const s=wc(i.service);o[s]=(o[s]||0)+1}return Object.entries(o).sort(([,i],[,s])=>s-i).map(([i,s])=>({category:i,count:s}))},[e]);return f.jsxs("div",{style:{position:"absolute",bottom:16,left:16,zIndex:10,background:"#ffffff",border:"1px solid #e2e8f0",borderRadius:8,padding:"8px 12px",fontSize:11,color:"#64748b",boxShadow:"0 1px 4px rgba(0,0,0,0.08)",maxHeight:t?"auto":260,overflowY:t?"visible":"auto"},children:[f.jsxs("div",{onClick:()=>n(o=>!o),style:{fontWeight:600,marginBottom:t?0:4,color:"#0f172a",cursor:"pointer",userSelect:"none",display:"flex",alignItems:"center",justifyContent:"space-between",gap:8},children:["Legend",f.jsx("span",{style:{fontSize:10,color:"#94a3b8"},children:t?"+":"-"})]}),!t&&r.map(({category:o,count:i})=>{const s=ou[o]||"#94a3b8",l=Sc(o);return f.jsxs("div",{style:{display:"flex",alignItems:"center",gap:6,marginBottom:2},children:[f.jsx("svg",{width:12,height:12,viewBox:"0 0 24 24",fill:"none",stroke:s,strokeWidth:2.5,strokeLinecap:"round",strokeLinejoin:"round",style:{flexShrink:0},children:f.jsx("path",{d:l})}),f.jsx("span",{style:{textTransform:"capitalize"},children:o}),i>0&&f.jsxs("span",{style:{color:"#94a3b8",fontSize:10},children:["(",i,")"]})]},o)})]})}function fC({onExportSvg:e,onExportPng:t,showBoundaries:n,onToggleBoundaries:r}){const o={padding:"4px 10px",borderRadius:4,border:"1px solid #e2e8f0",background:"#ffffff",color:"#475569",cursor:"pointer",fontSize:11};return f.jsxs("div",{style:{position:"absolute",top:16,right:16,zIndex:10,display:"flex",gap:4,background:"#ffffff",padding:4,border:"1px solid #e2e8f0",borderRadius:8,boxShadow:"0 1px 4px rgba(0,0,0,0.08)"},children:[e&&f.jsx("button",{style:o,onClick:e,children:"Export SVG"}),t&&f.jsx("button",{style:o,onClick:t,children:"Export PNG"}),f.jsxs("button",{style:{...o,background:n?"#f1f5f9":"#ffffff"},onClick:r,children:[n?"Hide":"Show"," Boundaries"]})]})}const Wf={borderTop:"1px solid #e2e8f0",margin:"12px 0"},Ei={fontSize:11,fontWeight:600,color:"#64748b",textTransform:"uppercase",letterSpacing:"0.05em",marginBottom:8},Hl={display:"block",fontSize:12,fontWeight:600,color:"#64748b",marginBottom:5},Vr={width:"100%",boxSizing:"border-box",border:"1px solid #cbd5e1",borderRadius:6,padding:"8px 10px",color:"#0f172a",fontSize:13,outline:"none",background:"#ffffff"},Vl={display:"flex",justifyContent:"space-between",alignItems:"center",gap:10,color:"#475569",fontSize:13,marginBottom:7};function lm(e){return typeof e=="boolean"?e?"true":"false":e==null?"":String(e)}function pC(e,t){return Object.entries(e??{}).filter(([n,r])=>r!=null&&n!=="tags").map(([n,r])=>`${n}=${lm(r)}`).join(`
-`)}function hC(e){const t=e==null?void 0:e.tags;return!t||typeof t!="object"||Array.isArray(t)?"":Object.entries(t).map(([n,r])=>`${n}=${lm(r)}`).join(`
-`)}function gC(e){const t=e.trim();return t==="true"?!0:t==="false"?!1:t!==""&&!Number.isNaN(Number(t))?Number(t):e}function Uf(e){const t={};for(const n of e.split(`
-`)){const r=n.trim();if(!r)continue;const o=r.indexOf("=");if(o===-1){t[r]=!0;continue}const i=r.slice(0,o).trim();i&&(t[i]=gC(r.slice(o+1)))}return t}function mC({component:e,cost:t,onClose:n,onApply:r,onDelete:o}){var S;const i=e!==null,[s,l]=z.useState(""),[a,u]=z.useState(""),[p,c]=z.useState("2"),[d,x]=z.useState(""),[y,w]=z.useState("");z.useEffect(()=>{e&&(l(e.label),u(e.description??""),c(String(e.tier??2)),x(pC(e.config)),w(hC(e.config)))},[e]);const k=e?wc(e.service):"compute",m=sm(k),g=Sc(k),h=(t==null?void 0:t.monthly)??null,v=z.useMemo(()=>{const E=Number(p);return Number.isFinite(E)?E:2},[p]),_=()=>{if(!e)return;const E=Uf(d),b=Uf(y);Object.keys(b).length>0&&(E.tags=b),r({...e,label:s.trim()||e.label,description:a,tier:v,config:E})};return f.jsxs("div",{style:{position:"absolute",top:0,right:0,width:340,height:"100%",background:"#ffffff",borderLeft:"1px solid #e2e8f0",transform:i?"translateX(0)":"translateX(100%)",transition:"transform 0.2s ease",zIndex:20,display:"flex",flexDirection:"column",overflow:"hidden",boxShadow:"-2px 0 8px rgba(0,0,0,0.06)"},children:[f.jsxs("div",{style:{padding:"16px 16px 12px",borderBottom:"1px solid #e2e8f0"},children:[f.jsxs("div",{style:{display:"flex",alignItems:"center",gap:10,marginBottom:8},children:[f.jsx("div",{style:{width:36,height:36,borderRadius:8,background:`${m}22`,border:`1.5px solid ${m}`,display:"flex",alignItems:"center",justifyContent:"center",flexShrink:0},children:f.jsx("svg",{width:20,height:20,viewBox:"0 0 24 24",fill:"none",stroke:m,strokeWidth:2,strokeLinecap:"round",strokeLinejoin:"round",style:{display:"block"},children:f.jsx("path",{d:g})})}),f.jsx("span",{style:{fontSize:16,fontWeight:700,color:"#0f172a",flex:1,overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:(e==null?void 0:e.label)??"Resource"}),f.jsx("button",{onClick:n,style:{background:"none",border:"none",color:"#94a3b8",cursor:"pointer",fontSize:18,lineHeight:1,padding:"2px 4px",flexShrink:0},"aria-label":"Close panel",children:"x"})]}),f.jsxs("div",{style:{display:"flex",alignItems:"center",gap:8},children:[f.jsx("span",{style:{background:"#f1f5f9",color:"#475569",borderRadius:4,fontSize:11,fontWeight:600,padding:"2px 8px",textTransform:"uppercase"},children:e==null?void 0:e.provider}),f.jsx("span",{style:{color:"#64748b",fontSize:12},children:e==null?void 0:e.service})]})]}),f.jsxs("div",{style:{flex:1,overflowY:"auto",padding:"12px 16px"},children:[f.jsx("div",{style:Ei,children:"Overview"}),f.jsx("label",{style:Hl,htmlFor:"resource-label",children:"Label"}),f.jsx("input",{id:"resource-label","aria-label":"Label",value:s,onChange:E=>l(E.target.value),style:{...Vr,marginBottom:10}}),f.jsx("label",{style:Hl,htmlFor:"resource-description",children:"Description"}),f.jsx("textarea",{id:"resource-description","aria-label":"Description",value:a,onChange:E=>u(E.target.value),rows:3,style:{...Vr,marginBottom:10,resize:"vertical",minHeight:72}}),f.jsx("label",{style:Hl,htmlFor:"resource-tier",children:"Tier"}),f.jsx("input",{id:"resource-tier","aria-label":"Tier",type:"number",value:p,onChange:E=>c(E.target.value),style:{...Vr,marginBottom:10}}),f.jsxs("div",{style:Vl,children:[f.jsx("span",{children:"Service"}),f.jsx("strong",{style:{color:"#0f172a"},children:e==null?void 0:e.service})]}),f.jsxs("div",{style:Vl,children:[f.jsx("span",{children:"Provider"}),f.jsx("strong",{style:{color:"#0f172a"},children:(S=e==null?void 0:e.provider)==null?void 0:S.toUpperCase()})]}),f.jsx("div",{style:Wf}),f.jsx("div",{style:Ei,children:"Cost"}),h!==null?f.jsxs("div",{style:Vl,children:[f.jsx("span",{children:"Monthly"}),f.jsxs("strong",{style:{color:"#2563eb"},children:["$",h.toLocaleString(void 0,{minimumFractionDigits:2,maximumFractionDigits:2})]})]}):f.jsx("p",{style:{color:"#94a3b8",fontSize:13},children:"No cost data"}),f.jsx("div",{style:Wf}),f.jsx("div",{style:Ei,children:"Configuration"}),f.jsx("textarea",{"aria-label":"Configuration",value:d,onChange:E=>x(E.target.value),rows:7,style:{...Vr,resize:"vertical",minHeight:140,fontFamily:"ui-monospace, SFMono-Regular, Menlo, monospace"}}),f.jsx("div",{style:{...Ei,marginTop:16},children:"Tags"}),f.jsx("textarea",{"aria-label":"Tags",value:y,onChange:E=>w(E.target.value),rows:5,style:{...Vr,resize:"vertical",minHeight:110,fontFamily:"ui-monospace, SFMono-Regular, Menlo, monospace"}})]}),f.jsxs("div",{style:{padding:12,borderTop:"1px solid #e2e8f0",display:"flex",gap:8},children:[f.jsx("button",{onClick:_,disabled:!e,style:{flex:1,border:"none",borderRadius:6,padding:"10px 12px",background:"#2563eb",color:"#ffffff",cursor:e?"pointer":"not-allowed",fontSize:14,fontWeight:700},children:"Apply"}),f.jsx("button",{onClick:()=>e&&o(e.id),disabled:!e,style:{border:"1px solid #fecaca",borderRadius:6,padding:"10px 12px",background:"#fef2f2",color:"#b91c1c",cursor:e?"pointer":"not-allowed",fontSize:14,fontWeight:700},children:"Delete"})]})]})}const Yf="/api",Wl={border:"1px solid #cbd5e1",background:"#ffffff",color:"#0f172a",borderRadius:6,padding:"7px 10px",cursor:"pointer",fontSize:12,fontWeight:600};function yC({provider:e,standardsResult:t,onAddResource:n,onAddModule:r,onCheckStandards:o}){const i=(e||"aws").toLowerCase(),[s,l]=z.useState(!0),[a,u]=z.useState("resources"),[p,c]=z.useState(""),[d,x]=z.useState([]),[y,w]=z.useState([]);z.useEffect(()=>{fetch(`${Yf}/catalog/services?provider=${encodeURIComponent(i)}`).then(g=>g.ok?g.json():null).then(g=>x((g==null?void 0:g.services)??[])).catch(()=>x([]))},[i]),z.useEffect(()=>{fetch(`${Yf}/modules`).then(g=>g.ok?g.json():null).then(g=>w((g==null?void 0:g.modules)??[])).catch(()=>w([]))},[]);const k=z.useMemo(()=>{const g=p.trim().toLowerCase();return g?d.filter(h=>[h.name,h.service_key,h.category,h.description??""].some(v=>v.toLowerCase().includes(g))):d},[d,p]),m=z.useMemo(()=>{const g=p.trim().toLowerCase(),h=y.filter(v=>v.provider.toLowerCase()===i);return g?h.filter(v=>[v.name,v.id,v.category,v.description??"",...v.tags??[]].some(_=>_.toLowerCase().includes(g))):h},[y,i,p]);return s?f.jsxs("div",{style:{position:"absolute",top:0,left:0,width:320,height:"100%",zIndex:14,background:"#ffffff",borderRight:"1px solid #e2e8f0",boxShadow:"2px 0 8px rgba(0,0,0,0.06)",display:"flex",flexDirection:"column"},children:[f.jsxs("div",{style:{padding:14,borderBottom:"1px solid #e2e8f0"},children:[f.jsxs("div",{style:{display:"flex",justifyContent:"space-between",alignItems:"center",marginBottom:10},children:[f.jsx("div",{style:{fontSize:15,fontWeight:700,color:"#0f172a"},children:"Catalog"}),f.jsx("button",{onClick:()=>l(!1),style:{border:"none",background:"transparent",color:"#64748b",cursor:"pointer",fontSize:18},"aria-label":"Close catalog",children:"x"})]}),f.jsx("div",{style:{display:"grid",gridTemplateColumns:"1fr 1fr 1fr",gap:4,marginBottom:10},children:["resources","modules","standards"].map(g=>f.jsx("button",{onClick:()=>u(g),style:{...Wl,padding:"6px 4px",borderColor:a===g?"#2563eb":"#cbd5e1",color:a===g?"#2563eb":"#475569",background:a===g?"#eff6ff":"#ffffff",textTransform:"capitalize"},children:g},g))}),a!=="standards"&&f.jsx("input",{value:p,onChange:g=>c(g.target.value),placeholder:"Search",style:{width:"100%",boxSizing:"border-box",border:"1px solid #cbd5e1",borderRadius:6,padding:"8px 10px",color:"#0f172a",fontSize:13,outline:"none"}})]}),f.jsxs("div",{style:{flex:1,overflowY:"auto",padding:12},children:[a==="resources"&&k.map(g=>f.jsxs("button",{onClick:()=>n(g),style:{width:"100%",textAlign:"left",border:"1px solid #e2e8f0",background:"#ffffff",borderRadius:8,padding:10,marginBottom:8,cursor:"pointer"},children:[f.jsxs("div",{style:{display:"flex",justifyContent:"space-between",gap:8},children:[f.jsx("span",{style:{color:"#0f172a",fontSize:13,fontWeight:700},children:g.name}),f.jsx("span",{style:{color:"#64748b",fontSize:10,textTransform:"uppercase"},children:g.category.replace(/_/g," ")})]}),f.jsx("div",{style:{color:"#64748b",fontSize:11,marginTop:4},children:g.service_key})]},`${g.provider}:${g.service_key}`)),a==="resources"&&k.length===0&&f.jsxs("p",{style:{color:"#64748b",fontSize:13},children:["No resources found for ",i.toUpperCase(),"."]}),a==="modules"&&m.map(g=>f.jsxs("button",{onClick:()=>r(g.id),style:{width:"100%",textAlign:"left",border:"1px solid #bfdbfe",background:"#eff6ff",borderRadius:8,padding:10,marginBottom:8,cursor:"pointer"},children:[f.jsx("div",{style:{color:"#0f172a",fontSize:13,fontWeight:700},children:g.name}),f.jsx("div",{style:{color:"#475569",fontSize:12,marginTop:4,lineHeight:1.35},children:g.description}),f.jsx("div",{style:{color:"#2563eb",fontSize:11,marginTop:6,textTransform:"uppercase"},children:g.category})]},g.id)),a==="modules"&&m.length===0&&f.jsxs("p",{style:{color:"#64748b",fontSize:13},children:["No approved modules found for ",i.toUpperCase(),"."]}),a==="standards"&&f.jsxs(f.Fragment,{children:[f.jsx("button",{onClick:o,style:{...Wl,width:"100%",marginBottom:12},children:"Check Standards"}),!t&&f.jsx("p",{style:{color:"#64748b",fontSize:13},children:"No standards check has run."}),(t==null?void 0:t.passed)&&f.jsx("div",{style:{color:"#166534",background:"#dcfce7",borderRadius:8,padding:10,fontSize:13},children:"Standards passed."}),t&&!t.passed&&f.jsx("div",{children:t.violations.map((g,h)=>f.jsxs("div",{style:{border:"1px solid #fecaca",background:"#fef2f2",borderRadius:8,padding:10,marginBottom:8},children:[f.jsx("div",{style:{color:"#991b1b",fontSize:12,fontWeight:700},children:g.code.replace(/_/g," ")}),f.jsx("div",{style:{color:"#7f1d1d",fontSize:12,marginTop:4,lineHeight:1.4},children:g.message})]},`${g.code}:${h}`))})]})]})]}):f.jsx("button",{onClick:()=>l(!0),style:{...Wl,position:"absolute",left:16,top:16,zIndex:15,boxShadow:"0 1px 4px rgba(0,0,0,0.08)"},children:"Add Resource"})}const Xf=200,Ci=90,Qf=300,xC=240,yt=32,vC=36,Wr=4,Ul="/api",wC={0:"Edge / CDN",1:"Network / Ingress",2:"Application",3:"Data Layer",4:"Platform Services",5:"Platform Services"},SC={0:"edge",1:"subnet",2:"subnet",3:"subnet"},Yl={0:{border:"#60a5fa",bg:"rgba(219, 234, 254, 0.18)",labelColor:"#1d4ed8",labelBg:"rgba(219, 234, 254, 0.92)",dot:"#3b82f6"},1:{border:"#34d399",bg:"rgba(209, 250, 229, 0.18)",labelColor:"#047857",labelBg:"rgba(209, 250, 229, 0.92)",dot:"#10b981"},2:{border:"#fb923c",bg:"rgba(255, 237, 213, 0.18)",labelColor:"#9a3412",labelBg:"rgba(255, 237, 213, 0.92)",dot:"#f97316"},3:{border:"#a78bfa",bg:"rgba(237, 233, 254, 0.18)",labelColor:"#5b21b6",labelBg:"rgba(237, 233, 254, 0.92)",dot:"#8b5cf6"},4:{border:"#2dd4bf",bg:"rgba(204, 251, 241, 0.18)",labelColor:"#0f766e",labelBg:"rgba(204, 251, 241, 0.92)",dot:"#14b8a6"},5:{border:"#2dd4bf",bg:"rgba(204, 251, 241, 0.18)",labelColor:"#0f766e",labelBg:"rgba(204, 251, 241, 0.92)",dot:"#14b8a6"}},Hn={border:"#94a3b8",bg:"rgba(241, 245, 249, 0.35)",labelColor:"#475569",labelBg:"rgba(241, 245, 249, 0.92)",dot:"#94a3b8"},kC={cloudService:uC,boundaryGroup:cC};function iu(e){return JSON.parse(JSON.stringify(e))}function bi(e){return iu(e??{})}function Ni(e,t="resource"){let n=e.trim().toLowerCase().replace(/[^a-z0-9_-]+/g,"_").replace(/^[_-]+|[_-]+$/g,"");return n||(n=t),/^[a-z_]/.test(n)||(n=`${t}_${n}`),n}function Xl(e,t){let n=e,r=2;for(;t.has(n);)n=`${e}-${r}`,r+=1;return t.add(n),n}function _C(e){const t=e.toLowerCase();return t.includes("cdn")||t.includes("edge")?0:t.includes("network")||t.includes("security")?1:t.includes("database")||t.includes("cache")?3:t.includes("storage")||t.includes("analytics")||t.includes("data")?4:2}function Gf(e){return{x:360+e%3*260,y:80+Math.floor(e/3)*150}}function EC(e,t){if(t==="vpc")return Hn;const n=e.match(/^tier-(\d+)$/);return n&&Yl[parseInt(n[1])]||Yl[2]}function CC(e){const t={};for(const i of e){const s=i.tier??2;t[s]||(t[s]=[]),t[s].push(i.id)}const n=Object.keys(t).map(Number).sort(),r=[];for(const i of n)r.push({id:`tier-${i}`,kind:SC[i]||"subnet",label:wC[i]||`Tier ${i}`,component_ids:t[i]});const o=r.filter(i=>i.id!=="tier-0").flatMap(i=>i.component_ids);return o.length>=2&&r.unshift({id:"vpc",kind:"vpc",label:"VPC / Virtual Network",component_ids:o}),r}function bC(e,t,n){var y,w,k,m;const r=[],o=e.boundaries||[],i=o.length>0?o:CC(e.components),s=((w=(y=e.metadata)==null?void 0:y.canvas)==null?void 0:w.nodes)??{},l={};if(t){for(const g of i)if(g.kind!=="vpc")for(const h of g.component_ids)l[h]||(l[h]=g.id)}const a={};for(const g of e.components){const h=g.tier??2;a[h]||(a[h]=[]),a[h].push(g)}const u=Object.keys(a).map(Number).sort(),p={};let c=40;const d={};for(const g of u){d[g]=c;const h=Math.ceil(a[g].length/Wr);c+=xC+(h-1)*(Ci+60)}for(const g of u){const h=a[g],v=d[g];for(let _=0;_0){const g=i.find(v=>v.kind==="vpc");let h;if(g&&g.component_ids.length>0){const v=g.component_ids.map(D=>{var T;return((T=p[D])==null?void 0:T.x)??0}),_=g.component_ids.map(D=>{var T;return((T=p[D])==null?void 0:T.y)??0}),S=Math.min(...v)-yt,E=Math.min(..._)-yt-24-vC,b=Math.max(...v)+Xf+yt,A=Math.max(..._)+Ci+yt;h=`boundary-${g.id}`,x[g.id]={x:S,y:E},r.push({id:h,type:"boundaryGroup",position:{x:S,y:E},data:{label:g.label||g.id,labelColor:Hn.labelColor,labelBg:Hn.labelBg,dotColor:Hn.dot},style:{background:Hn.bg,border:`2px dashed ${Hn.border}`,borderRadius:16,padding:yt,width:b-S,height:A-E},zIndex:-2})}for(const v of i){if(v.kind==="vpc"||v.component_ids.length===0)continue;const _=v.component_ids.map(P=>{var C;return((C=p[P])==null?void 0:C.x)??0}),S=v.component_ids.map(P=>{var C;return((C=p[P])==null?void 0:C.y)??0}),E=Math.min(..._)-yt,b=Math.min(...S)-yt-24,A=Math.max(..._)+Xf+yt,D=Math.max(...S)+Ci+yt;x[v.id]={x:E,y:b};const T=EC(v.id,v.kind),I=!!(h&&g&&v.component_ids.some(P=>g.component_ids.includes(P)));r.push({id:`boundary-${v.id}`,type:"boundaryGroup",position:I?{x:E-x[g.id].x,y:b-x[g.id].y}:{x:E,y:b},data:{label:v.label||v.id,labelColor:T.labelColor,labelBg:T.labelBg,dotColor:T.dot},style:{background:T.bg,border:`1.5px solid ${T.border}`,borderRadius:10,padding:yt,width:A-E,height:D-b},zIndex:-1,parentId:I?h:void 0})}}for(const g of u){const h=a[g];for(const v of h){const _=l[v.id],S=t&&_&&x[_];let E=((k=p[v.id])==null?void 0:k.x)??0,b=((m=p[v.id])==null?void 0:m.y)??0;S&&(E-=x[_].x,b-=x[_].y),r.push({id:v.id,type:"cloudService",position:{x:E,y:b},data:{label:v.label,service:v.service,provider:v.provider,description:v.description,tier:v.tier,config:v.config||{},monthlyCost:n[v.id]},parentId:S?`boundary-${_}`:void 0,extent:S?"parent":void 0})}}return r}function am(e,t){return`edge:${e.source}:${e.target}:${t}`}function Kf(e){return e.connections.map((t,n)=>{let r=t.label||"";return t.protocol&&!r.includes(t.protocol)&&(r=t.protocol+(t.port?`:${t.port}`:"")),{id:am(t,n),source:t.source,target:t.target,label:r,style:{stroke:"#94a3b8"},labelStyle:{fill:"#64748b",fontSize:11},animated:!0}})}function NC(e,t){return e&&e.map(n=>({...n,component_ids:n.component_ids.filter(r=>r!==t)}))}function jC({spec:e,onSpecChange:t}){const[n,r]=z.useState(!0),[o,i]=z.useState(null),[s,l]=z.useState(null),a=z.useCallback(P=>{l(null),t(P)},[t]),u=z.useCallback(async P=>{try{const C=await fetch(`${Ul}/export`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({spec:e,format:P})});if(!C.ok)return;const L=await C.blob(),M=URL.createObjectURL(L),R=document.createElement("a");R.href=M,R.download=`architecture.${P}`,R.click(),URL.revokeObjectURL(M)}catch{}},[e]),p=z.useMemo(()=>{var C;const P={};for(const L of((C=e.cost_estimate)==null?void 0:C.breakdown)??[])P[L.component_id]=L.monthly;return P},[e.cost_estimate]),c=z.useMemo(()=>o?e.components.find(P=>P.id===o)??null:null,[o,e.components]),d=z.useMemo(()=>{var P;return o?((P=e.cost_estimate)==null?void 0:P.breakdown.find(C=>C.component_id===o))??null:null},[o,e.cost_estimate]),[x,y,w]=PE([]),[k,m,g]=TE([]);z.useEffect(()=>{y(bC(e,n,p)),m(Kf(e))},[e,n,p,y,m]);const h=z.useCallback((P,C)=>{C.id.startsWith("boundary-")||i(C.id)},[]),v=z.useCallback(()=>{i(null)},[]),_=z.useCallback((P,C)=>{if(C.id.startsWith("boundary-"))return;const L=bi(e.metadata),M=L.canvas??{},R={...M.nodes??{}},N=x.find($=>$.id===C.parentId),j=N?{x:N.position.x+C.position.x,y:N.position.y+C.position.y}:{x:C.position.x,y:C.position.y};R[C.id]=j,L.canvas={...M,nodes:R},a({...e,metadata:L})},[a,x,e]),S=z.useCallback(P=>{!P.source||!P.target||P.source===P.target||e.connections.some(L=>L.source===P.source&&L.target===P.target)||a({...e,connections:[...e.connections,{source:P.source,target:P.target,label:"HTTPS",protocol:"HTTPS",port:443}]})},[a,e]),E=z.useCallback(P=>{if(P.length===0)return;if(!window.confirm(`Delete ${P.length===1?"this connection":"these connections"}?`)){m(Kf(e));return}const C=new Set(P.map(L=>L.id));a({...e,connections:e.connections.filter((L,M)=>!C.has(am(L,M)))})},[a,m,e]),b=z.useCallback(P=>{a({...e,components:e.components.map(C=>C.id===P.id?P:C)})},[a,e]),A=z.useCallback(P=>{var R,N;const C=e.components.find(j=>j.id===P);if(!C||!window.confirm(`Delete ${C.label||C.id} and its connections?`))return;const L=bi(e.metadata);(R=L.canvas)!=null&&R.nodes&&delete L.canvas.nodes[P];const M=((N=L.modules)==null?void 0:N.instances)??{};for(const j of Object.values(M))j.component_ids.includes(P)&&(j.component_ids=j.component_ids.filter($=>$!==P),j.partial=!0,j.approved=!1,delete j.terraform);L.modules&&(L.modules.instances=M),a({...e,components:e.components.filter(j=>j.id!==P),connections:e.connections.filter(j=>j.source!==P&&j.target!==P),boundaries:NC(e.boundaries,P),metadata:L}),i(null)},[a,e]),D=z.useCallback(P=>{const C=new Set(e.components.map($=>$.id)),L=Xl(Ni(P.service_key),C),M=bi(e.metadata),R=M.canvas??{},N={...R.nodes??{}};N[L]=Gf(Object.keys(N).length+e.components.length),M.canvas={...R,nodes:N};const j={id:L,service:P.service_key,provider:P.provider.toLowerCase(),label:P.name,description:P.description??"",tier:_C(P.category),config:iu(P.default_config??{})};a({...e,components:[...e.components,j],metadata:M}),i(L)},[a,e]),T=z.useCallback(async P=>{var C;try{const L=await fetch(`${Ul}/modules/${encodeURIComponent(P)}`);if(!L.ok)return;const R=(await L.json()).module,N=new Set(e.components.map(G=>G.id)),j=bi(e.metadata),$=j.modules??{},O={...$.instances??{}},B=new Set(Object.keys(O)),W=Xl(Ni(R.id,"module"),B),V=Ni(R.naming.component_id_prefix,W),Y={};for(const G of R.fragment.components)Y[G.id]=Xl(Ni(`${V}_${G.id}`,V),N);const X=j.canvas??{},Q={...X.nodes??{}},H=Object.keys(Q).length+e.components.length,K=R.fragment.components.map((G,J)=>{const Z=iu(G.config??{}),re={...R.default_tags??{},...typeof Z.tags=="object"&&Z.tags!==null?Z.tags:{}};Z.tags=re;const le=Y[G.id];return Q[le]=Gf(H+J),{...G,id:le,provider:G.provider.toLowerCase(),config:Z}}),ee=R.fragment.connections.map(G=>({...G,source:Y[G.source],target:Y[G.target]}));O[W]={module_id:R.id,module_version:R.terraform.version,component_ids:K.map(G=>G.id),expected_component_count:K.length,required_tags:[...R.required_tags],naming_prefix:V,approved:R.approved,terraform:{...R.terraform}},j.canvas={...X,nodes:Q},j.modules={...$,instances:O},a({...e,components:[...e.components,...K],connections:[...e.connections,...ee],metadata:j}),i(((C=K[0])==null?void 0:C.id)??null)}catch{}},[a,e]),I=z.useCallback(async()=>{try{const P=await fetch(`${Ul}/canvas/validate`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({spec:e})});if(!P.ok)return;l(await P.json())}catch{l({passed:!1,violations:[{code:"request_failed",severity:"error",message:"Standards check failed."}]})}},[e]);return f.jsxs("div",{style:{width:"100%",height:"100%",position:"relative"},children:[f.jsx(yC,{provider:e.provider||"aws",standardsResult:s,onAddResource:D,onAddModule:T,onCheckStandards:I}),f.jsxs(zE,{nodes:x,edges:k,nodeTypes:kC,onNodesChange:w,onEdgesChange:g,onEdgesDelete:E,onConnect:S,onNodeDragStop:_,fitView:!0,proOptions:{hideAttribution:!0},style:{background:"#f8fafc"},onNodeClick:h,onPaneClick:v,children:[f.jsx($E,{color:"#e2e8f0",gap:20}),f.jsx(WE,{style:{background:"#ffffff",border:"1px solid #e2e8f0",borderRadius:8}})]}),f.jsx(dC,{components:e.components}),f.jsx(fC,{showBoundaries:n,onToggleBoundaries:()=>r(P=>!P),onExportSvg:()=>u("svg"),onExportPng:()=>u("png")}),f.jsx(mC,{component:c??null,cost:d,onClose:()=>i(null),onApply:P=>b({...P,description:P.description??"",config:P.config??{}}),onDelete:A})]})}function MC({estimate:e}){return f.jsxs("div",{style:{padding:32},children:[f.jsx("h2",{style:{fontSize:18,marginBottom:16,color:"#0f172a"},children:"Cost Breakdown"}),f.jsxs("table",{style:{width:"100%",maxWidth:700,borderCollapse:"collapse",fontSize:14},children:[f.jsx("thead",{children:f.jsxs("tr",{style:{borderBottom:"2px solid #e2e8f0",background:"#f8fafc"},children:[f.jsx("th",{style:{textAlign:"left",padding:"10px 12px",color:"#475569"},children:"Component"}),f.jsx("th",{style:{textAlign:"left",padding:"10px 12px",color:"#475569"},children:"Service"}),f.jsx("th",{style:{textAlign:"right",padding:"10px 12px",color:"#475569"},children:"Monthly"}),f.jsx("th",{style:{textAlign:"left",padding:"10px 12px",color:"#475569"},children:"Notes"})]})}),f.jsx("tbody",{children:e.breakdown.map(t=>f.jsxs("tr",{style:{borderBottom:"1px solid #f1f5f9"},children:[f.jsx("td",{style:{padding:"10px 12px",color:"#0f172a"},children:t.component_id}),f.jsx("td",{style:{padding:"10px 12px",color:"#475569"},children:t.service}),f.jsxs("td",{style:{padding:"10px 12px",textAlign:"right",fontFamily:"monospace",color:"#0f172a"},children:["$",t.monthly.toFixed(2)]}),f.jsx("td",{style:{padding:"10px 12px",color:"#64748b",fontSize:12},children:t.notes})]},t.component_id))}),f.jsx("tfoot",{children:f.jsxs("tr",{style:{borderTop:"2px solid #e2e8f0",background:"#f0f9ff"},children:[f.jsx("td",{style:{padding:"12px",fontWeight:700,fontSize:15,color:"#0f172a"},colSpan:2,children:"Total"}),f.jsxs("td",{style:{padding:"12px",textAlign:"right",fontWeight:700,fontSize:15,fontFamily:"monospace",color:"#2563eb"},children:["$",e.monthly_total.toFixed(2)]}),f.jsxs("td",{style:{padding:"12px",color:"#64748b",fontSize:12},children:[e.currency,"/month"]})]})})]})]})}function zC({spec:e,onDownloadTerraform:t,onDownloadYaml:n,validationSummary:r,usage:o}){var s,l;if(!e)return null;const i=[];return o!=null&&o.model&&i.push(o.model.replace("claude-","").replace("anthropic.","")),(o==null?void 0:o.input_tokens)!=null&&(o==null?void 0:o.output_tokens)!=null&&i.push(`${((o.input_tokens+o.output_tokens)/1e3).toFixed(1)}k tokens`),(o==null?void 0:o.cost_usd)!=null&&i.push(`$${o.cost_usd.toFixed(4)}`),(o==null?void 0:o.latency_ms)!=null&&i.push(`${(o.latency_ms/1e3).toFixed(1)}s`),f.jsxs("div",{style:{display:"flex",alignItems:"center",gap:"1rem",padding:"0.5rem 1rem",background:"#ffffff",borderRadius:"0.375rem",marginBottom:"0.5rem",fontSize:"0.875rem",borderBottom:"1px solid #e2e8f0"},children:[f.jsxs("span",{style:{color:"#64748b"},children:["Components: ",f.jsx("strong",{style:{color:"#334155"},children:((s=e.components)==null?void 0:s.length)||0})]}),e.cost_estimate&&f.jsxs("span",{style:{color:"#64748b"},children:["Est. ",f.jsxs("strong",{style:{color:"#2563eb"},children:["$",(l=e.cost_estimate.monthly_total)==null?void 0:l.toFixed(0),"/mo"]})]}),f.jsxs("span",{style:{color:"#64748b"},children:[(e.provider||"aws").toUpperCase()," / ",e.region||"us-east-1"]}),r&&f.jsxs("span",{style:{padding:"0.125rem 0.5rem",borderRadius:"0.25rem",fontSize:"0.75rem",fontWeight:600,background:r.passed===r.total?"#d1fae5":"#fee2e2",color:r.passed===r.total?"#065f46":"#991b1b"},children:["WA: ",r.passed,"/",r.total]}),i.length>0&&f.jsx("span",{style:{color:"#94a3b8",fontSize:"0.75rem"},children:i.join(" · ")}),f.jsxs("div",{style:{marginLeft:"auto",display:"flex",gap:"0.5rem"},children:[t&&f.jsx("button",{onClick:t,style:{padding:"0.25rem 0.75rem",background:"#2563eb",color:"white",border:"none",borderRadius:"0.25rem",cursor:"pointer",fontSize:"0.75rem"},children:"Download Terraform"}),n&&f.jsx("button",{onClick:n,style:{padding:"0.25rem 0.75rem",background:"#f8fafc",color:"#475569",border:"1px solid #e2e8f0",borderRadius:"0.25rem",cursor:"pointer",fontSize:"0.75rem"},children:"Download YAML"})]})]})}async function Go(e){if(e.status===429){const t=e.headers.get("Retry-After"),n=t?` Retry after ${t}s.`:"";try{const r=await e.json();return`${r.message||r.detail||"Rate limited"}${n}`}catch{return`Rate limited.${n}`}}try{const t=await e.json();return su(t,e.statusText)}catch{return e.statusText||"Request failed"}}function su(e,t="Request failed"){const n=e.message||e.detail||t;return e.suggestion?`${n} — ${e.suggestion}`:n}const PC=[{key:"hipaa",label:"HIPAA"},{key:"pci-dss",label:"PCI-DSS"},{key:"soc2",label:"SOC 2"},{key:"fedramp",label:"FedRAMP"},{key:"gdpr",label:"GDPR"},{key:"well-architected",label:"Well-Architected"}],ji={critical:0,high:1,medium:2,low:3},$o={critical:{bg:"#fef2f2",text:"#991b1b",border:"#fca5a5"},high:{bg:"#fff7ed",text:"#9a3412",border:"#fdba74"},medium:{bg:"#fffbeb",text:"#92400e",border:"#fcd34d"},low:{bg:"#f0fdf4",text:"#166534",border:"#86efac"}},TC={data_protection:"Data Protection",monitoring:"Monitoring & Logging",identity:"Identity & Access",network_security:"Network Security",reliability:"Reliability",compliance:"Compliance",operations:"Operations",security:"Security",cost:"Cost Optimization"};function IC({score:e,passed:t}){const n=Math.round(e*100),r=54,o=8,i=2*Math.PI*r,s=i*(1-e),l=t?"#16a34a":n>=70?"#f59e0b":"#dc2626";return f.jsxs("div",{style:{display:"flex",flexDirection:"column",alignItems:"center",gap:6},children:[f.jsxs("svg",{width:136,height:136,viewBox:"0 0 136 136",children:[f.jsx("circle",{cx:68,cy:68,r,fill:"none",stroke:"#f1f5f9",strokeWidth:o}),f.jsx("circle",{cx:68,cy:68,r,fill:"none",stroke:l,strokeWidth:o,strokeDasharray:i,strokeDashoffset:s,strokeLinecap:"round",transform:"rotate(-90 68 68)",style:{transition:"stroke-dashoffset 0.6s ease"}}),f.jsxs("text",{x:68,y:62,textAnchor:"middle",fontSize:28,fontWeight:700,fill:"#0f172a",children:[n,"%"]}),f.jsx("text",{x:68,y:82,textAnchor:"middle",fontSize:11,fill:"#64748b",children:"compliance"})]}),f.jsx("span",{style:{display:"inline-block",padding:"3px 12px",borderRadius:4,fontSize:12,fontWeight:600,background:t?"#dcfce7":"#fee2e2",color:t?"#166534":"#991b1b"},children:t?"PASSED":"FAILED"})]})}function RC({severity:e}){const t=$o[e]||$o.medium;return f.jsx("span",{style:{display:"inline-block",padding:"1px 8px",borderRadius:4,fontSize:11,fontWeight:600,background:t.bg,color:t.text,border:`1px solid ${t.border}`,textTransform:"uppercase",letterSpacing:"0.02em"},children:e})}function Zf({check:e,expanded:t,onToggle:n}){const r=$o[e.severity]||$o.medium;return f.jsxs("div",{style:{borderLeft:`3px solid ${e.passed?"#86efac":r.border}`,background:"#ffffff",borderRadius:"0 6px 6px 0",marginBottom:6,cursor:"pointer",transition:"box-shadow 0.15s ease"},onClick:n,onMouseEnter:o=>{o.currentTarget.style.boxShadow="0 1px 4px rgba(0,0,0,0.06)"},onMouseLeave:o=>{o.currentTarget.style.boxShadow="none"},children:[f.jsxs("div",{style:{display:"flex",alignItems:"center",gap:10,padding:"10px 14px"},children:[f.jsx("span",{style:{fontSize:14,flexShrink:0,width:18,textAlign:"center"},children:e.passed?f.jsx("span",{style:{color:"#16a34a"},children:"✓"}):f.jsx("span",{style:{color:"#dc2626",fontWeight:700},children:"✕"})}),f.jsx("span",{style:{flex:1,fontSize:13,color:"#0f172a",fontWeight:500},children:e.name.replace(/_/g," ").replace(/\b\w/g,o=>o.toUpperCase())}),f.jsx(RC,{severity:e.severity}),f.jsx("span",{style:{fontSize:11,color:"#94a3b8",transform:t?"rotate(180deg)":"rotate(0deg)",transition:"transform 0.15s ease",flexShrink:0},children:"▼"})]}),t&&f.jsxs("div",{style:{padding:"0 14px 12px 42px",fontSize:12,lineHeight:1.6},children:[f.jsx("div",{style:{color:"#475569",marginBottom:4},children:e.detail}),e.recommendation&&f.jsxs("div",{style:{marginTop:6,padding:"8px 12px",background:"#f8fafc",borderRadius:4,border:"1px solid #e2e8f0",color:"#334155"},children:[f.jsx("span",{style:{fontWeight:600,color:"#475569",fontSize:11},children:"Recommendation: "}),e.recommendation]})]})]})}function LC({spec:e,apiBase:t}){const[n,r]=z.useState(null),[o,i]=z.useState(null),[s,l]=z.useState(!1),[a,u]=z.useState(null),[p,c]=z.useState(new Set),[d,x]=z.useState(!1),y=z.useCallback(async _=>{i(_),l(!0),u(null),c(new Set),x(!1);try{const S=_==="well-architected",E=await fetch(`${t}/validate`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({spec:e,compliance:S?[]:[_],well_architected:S})});if(!E.ok)throw new Error(await Go(E));const b=await E.json();r(b.results)}catch(S){u(S instanceof Error?S.message:"Validation failed"),r(null)}finally{l(!1)}},[e,t]),w=z.useCallback(_=>{c(S=>{const E=new Set(S);return E.has(_)?E.delete(_):E.add(_),E})},[]),k=(n==null?void 0:n[0])??null,m=k?k.checks.filter(_=>!_.passed).sort((_,S)=>(ji[_.severity]??9)-(ji[S.severity]??9)):[],g=k?k.checks.filter(_=>_.passed).sort((_,S)=>(ji[_.severity]??9)-(ji[S.severity]??9)):[],h={};for(const _ of m){const S=_.category;h[S]||(h[S]=[]),h[S].push(_)}const v=k?k.checks.reduce((_,S)=>(S.passed||(_[S.severity]=(_[S.severity]||0)+1),_),{}):{};return f.jsxs("div",{style:{padding:32,maxWidth:900},children:[f.jsx("h2",{style:{fontSize:18,marginBottom:16,color:"#0f172a",fontWeight:700},children:"Validate Architecture"}),f.jsx("div",{style:{display:"flex",gap:8,marginBottom:24},children:PC.map(_=>{const S=o===_.key;return f.jsx("button",{onClick:()=>y(_.key),disabled:s,style:{padding:"8px 18px",borderRadius:6,border:S?"1.5px solid #2563eb":"1px solid #e2e8f0",background:S?"#eff6ff":"#ffffff",color:S?"#1d4ed8":"#475569",cursor:s?"wait":"pointer",fontSize:13,fontWeight:S?600:500,transition:"all 0.15s ease",opacity:s&&!S?.6:1},children:_.label},_.key)})}),s&&f.jsxs("div",{style:{display:"flex",alignItems:"center",gap:10,padding:24,color:"#64748b",fontSize:14},children:[f.jsx("span",{style:{display:"inline-block",width:16,height:16,border:"2px solid #e2e8f0",borderTopColor:"#2563eb",borderRadius:"50%",animation:"spin 0.6s linear infinite"}}),"Running ",o==null?void 0:o.toUpperCase()," validation...",f.jsx("style",{children:"@keyframes spin { to { transform: rotate(360deg); } }"})]}),a&&f.jsx("div",{style:{padding:"12px 16px",background:"#fef2f2",border:"1px solid #fca5a5",borderRadius:8,color:"#991b1b",fontSize:13},children:a}),k&&!s&&f.jsxs("div",{style:{display:"flex",flexDirection:"column",gap:24},children:[f.jsxs("div",{style:{display:"flex",gap:24,alignItems:"flex-start",padding:20,background:"#ffffff",border:"1px solid #e2e8f0",borderRadius:10},children:[f.jsx(IC,{score:k.score,passed:k.passed}),f.jsxs("div",{style:{flex:1},children:[f.jsx("div",{style:{fontSize:16,fontWeight:700,color:"#0f172a",marginBottom:4},children:k.framework}),f.jsxs("div",{style:{fontSize:13,color:"#64748b",marginBottom:14},children:[k.checks.length," checks evaluated ·"," ",g.length," passed ·"," ",m.length," failed"]}),f.jsx("div",{style:{display:"flex",gap:10,flexWrap:"wrap"},children:["critical","high","medium","low"].map(_=>{const S=v[_]||0,E=$o[_];return f.jsxs("div",{style:{display:"flex",alignItems:"center",gap:8,padding:"6px 12px",borderRadius:6,background:S>0?E.bg:"#f8fafc",border:`1px solid ${S>0?E.border:"#e2e8f0"}`,minWidth:100},children:[f.jsx("span",{style:{fontSize:18,fontWeight:700,color:S>0?E.text:"#cbd5e1",lineHeight:1},children:S}),f.jsx("span",{style:{fontSize:11,fontWeight:600,color:S>0?E.text:"#94a3b8",textTransform:"uppercase",letterSpacing:"0.03em"},children:_})]},_)})})]})]}),m.length>0&&f.jsxs("div",{children:[f.jsxs("h3",{style:{fontSize:14,fontWeight:600,color:"#0f172a",marginBottom:12,display:"flex",alignItems:"center",gap:8},children:[f.jsx("span",{style:{color:"#dc2626"},children:"✕"}),"Failed Checks (",m.length,")"]}),Object.entries(h).map(([_,S])=>f.jsxs("div",{style:{marginBottom:16},children:[f.jsx("div",{style:{fontSize:11,fontWeight:600,color:"#64748b",textTransform:"uppercase",letterSpacing:"0.05em",marginBottom:6,paddingLeft:4},children:TC[_]||_.replace(/_/g," ")}),S.map(E=>{const b=`${_}-${E.name}`;return f.jsx(Zf,{check:E,expanded:p.has(b),onToggle:()=>w(b)},b)})]},_))]}),g.length>0&&f.jsxs("div",{children:[f.jsxs("button",{onClick:()=>x(_=>!_),style:{display:"flex",alignItems:"center",gap:8,background:"none",border:"none",cursor:"pointer",padding:"4px 0",fontSize:14,fontWeight:600,color:"#0f172a"},children:[f.jsx("span",{style:{color:"#16a34a"},children:"✓"}),"Passed Checks (",g.length,")",f.jsx("span",{style:{fontSize:11,color:"#94a3b8",transform:d?"rotate(180deg)":"rotate(0deg)",transition:"transform 0.15s ease"},children:"▼"})]}),d&&f.jsx("div",{style:{marginTop:8},children:g.map(_=>{const S=`passed-${_.category}-${_.name}`;return f.jsx(Zf,{check:_,expanded:p.has(S),onToggle:()=>w(S)},S)})})]}),f.jsxs("div",{style:{fontSize:11,color:"#94a3b8",borderTop:"1px solid #f1f5f9",paddingTop:12,lineHeight:1.5},children:["Score = percentage of checks passed. A framework is marked FAILED if any critical-severity check fails, regardless of overall score. Checks are defined in the Cloudwright Validator based on ",k.framework," control requirements."]})]}),!k&&!s&&!a&&f.jsx("div",{style:{padding:40,textAlign:"center",color:"#94a3b8",fontSize:14,background:"#f8fafc",borderRadius:8,border:"1px dashed #e2e8f0"},children:"Select a compliance framework above to validate your architecture."})]})}const AC=[{key:"hipaa",label:"HIPAA"},{key:"soc2",label:"SOC 2"},{key:"pci-dss",label:"PCI-DSS"},{key:"fedramp",label:"FedRAMP"},{key:"gdpr",label:"GDPR"},{key:"iso27001",label:"ISO 27001"},{key:"nist",label:"NIST 800-53"}],qf={critical:{bg:"#fef2f2",text:"#991b1b",border:"#fca5a5"},high:{bg:"#fff7ed",text:"#9a3412",border:"#fdba74"},medium:{bg:"#fffbeb",text:"#92400e",border:"#fcd34d"},low:{bg:"#f0fdf4",text:"#166534",border:"#86efac"}};function $C({spec:e,apiBase:t}){const[n,r]=z.useState(["hipaa","soc2","fedramp"]),[o,i]=z.useState(null),[s,l]=z.useState(!1),[a,u]=z.useState(null),p=d=>r(x=>x.includes(d)?x.filter(y=>y!==d):[...x,d]),c=z.useCallback(async()=>{l(!0),u(null);try{const d=await fetch(`${t}/compliance`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({spec:e,frameworks:n})});if(!d.ok)throw new Error(await Go(d));i(await d.json())}catch(d){u(d instanceof Error?d.message:"Compliance scan failed")}finally{l(!1)}},[e,t,n]);return f.jsxs("div",{style:{padding:24,maxWidth:920},children:[f.jsx("h2",{style:{fontSize:18,marginBottom:6,color:"#0f172a"},children:"Compliance Control Mapping"}),f.jsx("p",{style:{fontSize:13,color:"#64748b",marginBottom:16},children:"Every design-stage finding mapped to the framework control it violates — before any infrastructure exists. Folds in a Checkov deep scan when available."}),f.jsx("div",{style:{display:"flex",flexWrap:"wrap",gap:8,marginBottom:16},children:AC.map(d=>f.jsx("button",{onClick:()=>p(d.key),style:{padding:"6px 14px",borderRadius:999,border:`1px solid ${n.includes(d.key)?"#2563eb":"#cbd5e1"}`,background:n.includes(d.key)?"#2563eb":"#ffffff",color:n.includes(d.key)?"#ffffff":"#475569",fontSize:13,cursor:"pointer"},children:d.label},d.key))}),f.jsx("button",{onClick:c,disabled:s||n.length===0,style:{padding:"10px 22px",borderRadius:8,border:"none",background:s?"#94a3b8":"#0f172a",color:"#ffffff",fontSize:14,fontWeight:600,cursor:s?"default":"pointer"},children:s?"Scanning…":"Run compliance scan"}),a&&f.jsx("div",{style:{marginTop:16,padding:12,background:"#fef2f2",border:"1px solid #fca5a5",borderRadius:8,color:"#991b1b",fontSize:13},children:a}),o&&f.jsxs("div",{style:{marginTop:24},children:[f.jsxs("div",{style:{fontSize:12,color:"#64748b",marginBottom:8},children:["Scanner: ",f.jsx("strong",{children:o.scanner}),o.checkov_used?" (Checkov deep scan included)":""]}),f.jsxs("table",{style:{width:"100%",borderCollapse:"collapse",marginBottom:24},children:[f.jsx("thead",{children:f.jsxs("tr",{style:{background:"#f8fafc",textAlign:"left"},children:[f.jsx("th",{style:Ur,children:"Framework"}),f.jsx("th",{style:Ur,children:"Controls satisfied"}),f.jsx("th",{style:Ur,children:"Violated"}),f.jsx("th",{style:Ur,children:"Findings"}),f.jsx("th",{style:Ur,children:"Status"})]})}),f.jsx("tbody",{children:o.frameworks.map(d=>f.jsxs("tr",{style:{borderTop:"1px solid #e2e8f0"},children:[f.jsx("td",{style:Yr,children:f.jsx("strong",{children:d.framework})}),f.jsxs("td",{style:Yr,children:[d.controls_satisfied,"/",d.controls_total]}),f.jsx("td",{style:{...Yr,color:"#991b1b"},children:d.controls_violated.length?d.controls_violated.join(", "):"—"}),f.jsx("td",{style:Yr,children:d.findings}),f.jsx("td",{style:Yr,children:f.jsx("span",{style:{padding:"2px 10px",borderRadius:999,fontSize:12,fontWeight:600,background:d.status==="pass"?"#dcfce7":"#fee2e2",color:d.status==="pass"?"#166534":"#991b1b"},children:d.status.toUpperCase()})})]},d.framework))})]}),f.jsxs("h3",{style:{fontSize:15,color:"#0f172a",marginBottom:12},children:["Findings (",o.findings.length,")"]}),o.findings.map((d,x)=>{const y=qf[d.severity]||qf.low;return f.jsxs("div",{style:{border:`1px solid ${y.border}`,background:y.bg,borderRadius:8,padding:14,marginBottom:10},children:[f.jsxs("div",{style:{display:"flex",gap:8,alignItems:"center"},children:[f.jsxs("span",{style:{fontSize:11,fontWeight:700,color:y.text,textTransform:"uppercase"},children:["[",d.severity,"]"]}),f.jsx("span",{style:{fontSize:14,color:"#0f172a"},children:d.message}),f.jsxs("span",{style:{fontSize:11,color:"#64748b"},children:["(",d.source,")"]})]}),d.controls.length>0&&f.jsx("div",{style:{display:"flex",flexWrap:"wrap",gap:6,marginTop:8},children:d.controls.map((w,k)=>f.jsxs("span",{title:w.title,style:{fontSize:11,padding:"2px 8px",borderRadius:4,background:"#e0e7ff",color:"#3730a3",fontFamily:"monospace"},children:[w.framework," ",w.control_id]},k))}),f.jsx("div",{style:{fontSize:12,color:"#475569",marginTop:8},children:d.remediation})]},x)})]})]})}const Ur={padding:"10px 12px",fontSize:12,color:"#475569",fontWeight:600},Yr={padding:"10px 12px",fontSize:13,color:"#0f172a"},DC=[{key:"terraform",label:"Terraform"},{key:"pulumi-python",label:"Pulumi (Python)"},{key:"pulumi-ts",label:"Pulumi (TS)"}];function OC({spec:e,apiBase:t}){const[n,r]=z.useState("terraform"),[o,i]=z.useState(null),[s,l]=z.useState(!1),[a,u]=z.useState(null),p=z.useCallback(async()=>{l(!0),u(null),i(null);try{const c=await fetch(`${t}/plan`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({spec:e,target:n,run_plan:!0})});if(!c.ok)throw new Error(await Go(c));i(await c.json())}catch(c){u(c instanceof Error?c.message:"Plan failed")}finally{l(!1)}},[e,t,n]);return f.jsxs("div",{style:{padding:24,maxWidth:920},children:[f.jsx("h2",{style:{fontSize:18,marginBottom:6,color:"#0f172a"},children:"Plan / Preview — prove it deploys"}),f.jsxs("p",{style:{fontSize:13,color:"#64748b",marginBottom:16},children:["Runs ",f.jsx("code",{children:"terraform validate/plan"})," or ",f.jsx("code",{children:"pulumi preview"})," against the exported artifact. Read-only — nothing is applied. Validation needs no credentials and is the offline proof of deployability."]}),f.jsx("div",{style:{display:"flex",gap:8,marginBottom:16},children:DC.map(c=>f.jsx("button",{onClick:()=>r(c.key),style:{padding:"6px 14px",borderRadius:8,border:`1px solid ${n===c.key?"#2563eb":"#cbd5e1"}`,background:n===c.key?"#2563eb":"#ffffff",color:n===c.key?"#ffffff":"#475569",fontSize:13,cursor:"pointer"},children:c.label},c.key))}),f.jsx("button",{onClick:p,disabled:s,style:{padding:"10px 22px",borderRadius:8,border:"none",background:s?"#94a3b8":"#0f172a",color:"#ffffff",fontSize:14,fontWeight:600,cursor:s?"default":"pointer"},children:s?"Running plan…":"Run plan"}),a&&f.jsx("div",{style:{marginTop:16,padding:12,background:"#fef2f2",border:"1px solid #fca5a5",borderRadius:8,color:"#991b1b",fontSize:13},children:a}),o&&f.jsxs("div",{style:{marginTop:24},children:[f.jsxs("div",{style:{display:"inline-block",padding:"8px 18px",borderRadius:8,fontSize:15,fontWeight:700,background:o.ok?"#dcfce7":"#fee2e2",color:o.ok?"#166534":"#991b1b",marginBottom:16},children:[o.ok?"DEPLOYABLE":"NOT DEPLOYABLE",o.ok&&!o.plan_ran?" (validate only — no credentials)":""]}),o.summary&&f.jsxs("div",{style:{fontSize:14,marginBottom:16},children:["Resource diff:"," ",f.jsxs("span",{style:{color:"#166534"},children:["+",o.summary.add]})," ",f.jsxs("span",{style:{color:"#92400e"},children:["~",o.summary.change]})," ",f.jsxs("span",{style:{color:"#991b1b"},children:["-",o.summary.destroy]})]}),f.jsx("ul",{style:{fontSize:13,color:"#334155",marginBottom:16,paddingLeft:18},children:o.messages.map((c,d)=>f.jsx("li",{style:{marginBottom:4},children:c},d))}),o.output_tail&&f.jsx("pre",{style:{background:"#0f172a",color:"#e2e8f0",padding:14,borderRadius:8,fontSize:12,overflowX:"auto",maxHeight:280},children:o.output_tail})]})]})}const Ql=[{key:"terraform",label:"Terraform",ext:"tf",lang:"hcl",desc:"HashiCorp Configuration Language"},{key:"cloudformation",label:"CloudFormation",ext:"yaml",lang:"yaml",desc:"AWS CloudFormation template"},{key:"mermaid",label:"Mermaid",ext:"mmd",lang:"mermaid",desc:"Mermaid diagram markup"},{key:"d2",label:"D2",ext:"d2",lang:"d2",desc:"D2 diagram language"},{key:"sbom",label:"SBOM",ext:"json",lang:"json",desc:"CycloneDX Software BOM"},{key:"aibom",label:"AIBOM",ext:"json",lang:"json",desc:"OWASP AI Bill of Materials"},{key:"html",label:"HTML Report",ext:"html",lang:"html",desc:"Self-contained shareable report"}];function Jf({format:e}){const t={terraform:"HCL",cloudformation:"CFN",mermaid:"MMD",d2:"D2",sbom:"BOM",aibom:"AI"},n={terraform:"#7c3aed",cloudformation:"#ea580c",mermaid:"#0891b2",d2:"#4f46e5",sbom:"#059669",aibom:"#2563eb"};return f.jsx("span",{style:{display:"inline-flex",alignItems:"center",justifyContent:"center",width:32,height:20,borderRadius:4,fontSize:10,fontWeight:700,background:`${n[e]||"#64748b"}14`,color:n[e]||"#64748b",letterSpacing:"0.02em",flexShrink:0},children:t[e]||e.slice(0,3).toUpperCase()})}function BC({spec:e,apiBase:t}){const[n,r]=z.useState(null),[o,i]=z.useState(""),[s,l]=z.useState(!1),[a,u]=z.useState(null),[p,c]=z.useState(!1),d=z.useRef(null),x=z.useCallback(async g=>{r(g),l(!0),u(null),c(!1);try{const h=await fetch(`${t}/export`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({spec:e,format:g})});if(!h.ok)throw new Error(await Go(h));const v=await h.json();i(v.content||JSON.stringify(v,null,2))}catch(h){u(h instanceof Error?h.message:"Export failed"),i("")}finally{l(!1)}},[e,t]),y=z.useCallback(async()=>{var g,h;try{await navigator.clipboard.writeText(o),c(!0),setTimeout(()=>c(!1),2e3)}catch{const v=d.current;if(v){const _=document.createRange();_.selectNodeContents(v),(g=window.getSelection())==null||g.removeAllRanges(),(h=window.getSelection())==null||h.addRange(_)}}},[o]),w=z.useCallback(()=>{if(!o||!n)return;const g=Ql.find(S=>S.key===n),h=new Blob([o],{type:"text/plain"}),v=URL.createObjectURL(h),_=document.createElement("a");_.href=v,_.download=`architecture.${(g==null?void 0:g.ext)||"txt"}`,_.click(),URL.revokeObjectURL(v)},[o,n]),k=o?o.split(`
-`).length:0,m=Ql.find(g=>g.key===n);return f.jsxs("div",{style:{padding:32,maxWidth:960},children:[f.jsx("h2",{style:{fontSize:18,marginBottom:16,color:"#0f172a",fontWeight:700},children:"Export Architecture"}),f.jsx("div",{style:{display:"grid",gridTemplateColumns:"repeat(3, 1fr)",gap:10,marginBottom:24},children:Ql.map(g=>{const h=n===g.key;return f.jsxs("button",{onClick:()=>x(g.key),disabled:s,style:{display:"flex",alignItems:"center",gap:10,padding:"10px 14px",borderRadius:8,border:h?"1.5px solid #2563eb":"1px solid #e2e8f0",background:h?"#eff6ff":"#ffffff",cursor:s?"wait":"pointer",textAlign:"left",transition:"all 0.15s ease",opacity:s&&!h?.6:1},children:[f.jsx(Jf,{format:g.key}),f.jsxs("div",{children:[f.jsx("div",{style:{fontSize:13,fontWeight:h?600:500,color:h?"#1d4ed8":"#0f172a"},children:g.label}),f.jsx("div",{style:{fontSize:11,color:"#94a3b8"},children:g.desc})]})]},g.key)})}),s&&f.jsxs("div",{style:{display:"flex",alignItems:"center",gap:10,padding:24,color:"#64748b",fontSize:14},children:[f.jsx("span",{style:{display:"inline-block",width:16,height:16,border:"2px solid #e2e8f0",borderTopColor:"#2563eb",borderRadius:"50%",animation:"spin 0.6s linear infinite"}}),"Generating ",(m==null?void 0:m.label)||n,"...",f.jsx("style",{children:"@keyframes spin { to { transform: rotate(360deg); } }"})]}),a&&f.jsx("div",{style:{padding:"12px 16px",background:"#fef2f2",border:"1px solid #fca5a5",borderRadius:8,color:"#991b1b",fontSize:13},children:a}),o&&!s&&f.jsxs("div",{style:{border:"1px solid #e2e8f0",borderRadius:10,overflow:"hidden"},children:[f.jsxs("div",{style:{display:"flex",alignItems:"center",justifyContent:"space-between",padding:"8px 14px",background:"#f8fafc",borderBottom:"1px solid #e2e8f0"},children:[f.jsxs("div",{style:{display:"flex",alignItems:"center",gap:8},children:[f.jsx(Jf,{format:n||""}),f.jsxs("span",{style:{fontSize:12,color:"#64748b"},children:["architecture.",(m==null?void 0:m.ext)||"txt"]}),f.jsxs("span",{style:{fontSize:11,color:"#cbd5e1"},children:[k," lines"]})]}),f.jsxs("div",{style:{display:"flex",gap:6},children:[f.jsx("button",{onClick:y,style:{padding:"4px 12px",borderRadius:4,border:"1px solid #e2e8f0",background:p?"#dcfce7":"#ffffff",color:p?"#166534":"#475569",cursor:"pointer",fontSize:12,fontWeight:500,transition:"all 0.15s ease"},children:p?"Copied":"Copy"}),f.jsx("button",{onClick:w,style:{padding:"4px 12px",borderRadius:4,border:"1px solid #e2e8f0",background:"#ffffff",color:"#475569",cursor:"pointer",fontSize:12,fontWeight:500},children:"Download"})]})]}),f.jsx("div",{style:{maxHeight:560,overflow:"auto"},children:f.jsx("pre",{ref:d,style:{margin:0,padding:16,fontSize:12,lineHeight:1.7,color:"#334155",background:"#ffffff",fontFamily:"'SF Mono', 'Cascadia Code', 'Fira Code', Menlo, monospace",counterReset:"line",whiteSpace:"pre-wrap",wordBreak:"break-word"},children:o})})]}),!o&&!s&&!a&&f.jsx("div",{style:{padding:40,textAlign:"center",color:"#94a3b8",fontSize:14,background:"#f8fafc",borderRadius:8,border:"1px dashed #e2e8f0"},children:"Select an export format above to generate infrastructure code."})]})}const FC={0:"Edge / CDN",1:"Load Balancing",2:"Compute",3:"Data",4:"Supporting"};function Gl(e){if(e===null)return"null";if(typeof e=="number"||typeof e=="boolean")return String(e);const t=String(e);return/^[A-Za-z0-9_./:@-]+$/.test(t)?t:JSON.stringify(t)}function lu(e,t=0){const n=" ".repeat(t);if(Array.isArray(e))return e.length===0?"[]":e.map(r=>{if(r&&typeof r=="object"){const o=lu(r,t+2);return`${n}- ${o.trimStart()}`}return`${n}- ${Gl(r)}`}).join(`
-`);if(e&&typeof e=="object"){const r=Object.entries(e).filter(([,o])=>o!==void 0);return r.length===0?"{}":r.map(([o,i])=>{if(i&&typeof i=="object"){const s=lu(i,t+2);return`${n}${o}:
-${s}`}return`${n}${o}: ${Gl(i)}`}).join(`
-`)}return Gl(e)}function Mi({label:e,value:t,sub:n}){return f.jsxs("div",{style:{padding:"14px 16px",background:"#ffffff",border:"1px solid #e2e8f0",borderRadius:8,flex:1,minWidth:120},children:[f.jsx("div",{style:{fontSize:22,fontWeight:700,color:"#0f172a",lineHeight:1.2},children:t}),f.jsx("div",{style:{fontSize:12,color:"#64748b",marginTop:2},children:e}),n&&f.jsx("div",{style:{fontSize:11,color:"#94a3b8",marginTop:2},children:n})]})}function HC({spec:e,yaml:t}){var x;const[n,r]=z.useState("overview"),[o,i]=z.useState(!1),s=z.useRef(null),l=z.useMemo(()=>lu(e)||t||"",[e,t]),a=z.useMemo(()=>{const y=new Set(e.components.map(w=>w.provider));return Array.from(y)},[e.components]),u=z.useMemo(()=>{const y=new Set(e.components.map(w=>w.service));return Array.from(y)},[e.components]),p=z.useMemo(()=>{const y={};for(const w of e.components){const k=w.tier??2;y[k]||(y[k]=[]),y[k].push(w)}return y},[e.components]),c=z.useCallback(async()=>{var y,w;try{await navigator.clipboard.writeText(l),i(!0),setTimeout(()=>i(!1),2e3)}catch{const k=s.current;if(k){const m=document.createRange();m.selectNodeContents(k),(y=window.getSelection())==null||y.removeAllRanges(),(w=window.getSelection())==null||w.addRange(m)}}},[l]),d=z.useCallback(()=>{var m;const y=new Blob([l],{type:"text/yaml"}),w=URL.createObjectURL(y),k=document.createElement("a");k.href=w,k.download=`${((m=e.name)==null?void 0:m.replace(/\s+/g,"-").toLowerCase())||"architecture"}.yaml`,k.click(),URL.revokeObjectURL(w)},[l,e.name]);return f.jsxs("div",{style:{padding:32,maxWidth:960},children:[f.jsxs("div",{style:{display:"flex",alignItems:"baseline",gap:12,marginBottom:20},children:[f.jsx("h2",{style:{fontSize:18,color:"#0f172a",fontWeight:700,margin:0},children:e.name||"Architecture Spec"}),e.provider&&f.jsx("span",{style:{fontSize:12,fontWeight:600,color:"#475569",background:"#f1f5f9",padding:"2px 8px",borderRadius:4},children:e.provider.toUpperCase()}),e.region&&f.jsx("span",{style:{fontSize:12,color:"#94a3b8"},children:e.region})]}),f.jsx("div",{style:{display:"flex",gap:0,marginBottom:20,borderBottom:"1px solid #e2e8f0"},children:["overview","yaml"].map(y=>f.jsx("button",{onClick:()=>r(y),style:{padding:"8px 18px",background:"none",border:"none",borderBottom:n===y?"2px solid #2563eb":"2px solid transparent",color:n===y?"#1d4ed8":"#64748b",fontWeight:n===y?600:500,fontSize:13,cursor:"pointer",transition:"all 0.15s ease"},children:y==="overview"?"Overview":"YAML Source"},y))}),n==="overview"&&f.jsxs("div",{style:{display:"flex",flexDirection:"column",gap:20},children:[f.jsxs("div",{style:{display:"flex",gap:12},children:[f.jsx(Mi,{label:"Components",value:e.components.length}),f.jsx(Mi,{label:"Connections",value:e.connections.length}),f.jsx(Mi,{label:"Services",value:u.length,sub:a.join(", ")}),e.cost_estimate&&f.jsx(Mi,{label:"Monthly Cost",value:`$${e.cost_estimate.monthly_total.toLocaleString()}`,sub:e.cost_estimate.currency})]}),f.jsx("div",{style:{border:"1px solid #e2e8f0",borderRadius:10,overflow:"hidden"},children:f.jsxs("table",{style:{width:"100%",borderCollapse:"collapse",fontSize:13},children:[f.jsx("thead",{children:f.jsxs("tr",{style:{background:"#f8fafc"},children:[f.jsx("th",{style:xt,children:"Component"}),f.jsx("th",{style:xt,children:"Service"}),f.jsx("th",{style:xt,children:"Provider"}),f.jsx("th",{style:xt,children:"Tier"}),f.jsx("th",{style:xt,children:"Description"})]})}),f.jsx("tbody",{children:Object.keys(p).map(Number).sort().flatMap(y=>p[y].map(w=>f.jsxs("tr",{style:{borderBottom:"1px solid #f1f5f9"},children:[f.jsxs("td",{style:vt,children:[f.jsx("span",{style:{fontWeight:600,color:"#0f172a"},children:w.label}),f.jsx("div",{style:{fontSize:11,color:"#94a3b8"},children:w.id})]}),f.jsx("td",{style:vt,children:f.jsx("code",{style:{fontSize:12,background:"#f1f5f9",padding:"1px 6px",borderRadius:3,color:"#334155"},children:w.service})}),f.jsx("td",{style:vt,children:f.jsx("span",{style:{fontSize:12,color:"#475569"},children:w.provider})}),f.jsx("td",{style:vt,children:f.jsx("span",{style:{fontSize:11,fontWeight:600,color:"#64748b",background:"#f1f5f9",padding:"2px 8px",borderRadius:4},children:FC[y]||`Tier ${y}`})}),f.jsx("td",{style:{...vt,color:"#64748b",maxWidth:240},children:w.description})]},w.id)))})]})}),e.connections.length>0&&f.jsxs("div",{style:{border:"1px solid #e2e8f0",borderRadius:10,overflow:"hidden"},children:[f.jsxs("div",{style:{padding:"10px 16px",background:"#f8fafc",borderBottom:"1px solid #e2e8f0",fontSize:13,fontWeight:600,color:"#0f172a"},children:["Connections (",e.connections.length,")"]}),f.jsxs("table",{style:{width:"100%",borderCollapse:"collapse",fontSize:13},children:[f.jsx("thead",{children:f.jsxs("tr",{style:{background:"#fafafa"},children:[f.jsx("th",{style:xt,children:"Source"}),f.jsx("th",{style:xt}),f.jsx("th",{style:xt,children:"Target"}),f.jsx("th",{style:xt,children:"Protocol"}),f.jsx("th",{style:xt,children:"Label"})]})}),f.jsx("tbody",{children:e.connections.map((y,w)=>{const k=e.components.find(g=>g.id===y.source),m=e.components.find(g=>g.id===y.target);return f.jsxs("tr",{style:{borderBottom:"1px solid #f1f5f9"},children:[f.jsx("td",{style:vt,children:f.jsx("span",{style:{fontWeight:500,color:"#0f172a"},children:(k==null?void 0:k.label)||y.source})}),f.jsx("td",{style:{...vt,textAlign:"center",color:"#94a3b8",fontSize:14},children:"→"}),f.jsx("td",{style:vt,children:f.jsx("span",{style:{fontWeight:500,color:"#0f172a"},children:(m==null?void 0:m.label)||y.target})}),f.jsx("td",{style:vt,children:y.protocol&&f.jsxs("code",{style:{fontSize:11,background:"#f1f5f9",padding:"1px 6px",borderRadius:3,color:"#334155"},children:[y.protocol,y.port?`:${y.port}`:""]})}),f.jsx("td",{style:{...vt,color:"#64748b"},children:y.label})]},w)})})]})]}),e.boundaries&&e.boundaries.length>0&&f.jsxs("div",{style:{border:"1px solid #e2e8f0",borderRadius:10,overflow:"hidden"},children:[f.jsxs("div",{style:{padding:"10px 16px",background:"#f8fafc",borderBottom:"1px solid #e2e8f0",fontSize:13,fontWeight:600,color:"#0f172a"},children:["Boundaries (",e.boundaries.length,")"]}),f.jsx("div",{style:{padding:16,display:"flex",flexWrap:"wrap",gap:10},children:e.boundaries.map(y=>f.jsxs("div",{style:{padding:"8px 14px",border:"1px dashed #cbd5e1",borderRadius:8,background:"#fafafa",fontSize:13},children:[f.jsx("div",{style:{fontWeight:600,color:"#0f172a"},children:y.label||y.id}),f.jsxs("div",{style:{fontSize:11,color:"#94a3b8"},children:[y.kind," · ",y.component_ids.length," components"]})]},y.id))})]})]}),n==="yaml"&&f.jsxs("div",{style:{border:"1px solid #e2e8f0",borderRadius:10,overflow:"hidden"},children:[f.jsxs("div",{style:{display:"flex",alignItems:"center",justifyContent:"space-between",padding:"8px 14px",background:"#f8fafc",borderBottom:"1px solid #e2e8f0"},children:[f.jsxs("div",{style:{display:"flex",alignItems:"center",gap:8},children:[f.jsx("span",{style:{fontSize:10,fontWeight:700,color:"#7c3aed",background:"#7c3aed14",padding:"2px 8px",borderRadius:4},children:"YAML"}),f.jsxs("span",{style:{fontSize:12,color:"#64748b"},children:[((x=e.name)==null?void 0:x.replace(/\s+/g,"-").toLowerCase())||"architecture",".yaml"]}),f.jsxs("span",{style:{fontSize:11,color:"#cbd5e1"},children:[l.split(`
-`).length," lines"]})]}),f.jsxs("div",{style:{display:"flex",gap:6},children:[f.jsx("button",{onClick:c,style:{padding:"4px 12px",borderRadius:4,border:"1px solid #e2e8f0",background:o?"#dcfce7":"#ffffff",color:o?"#166534":"#475569",cursor:"pointer",fontSize:12,fontWeight:500,transition:"all 0.15s ease"},children:o?"Copied":"Copy"}),f.jsx("button",{onClick:d,style:{padding:"4px 12px",borderRadius:4,border:"1px solid #e2e8f0",background:"#ffffff",color:"#475569",cursor:"pointer",fontSize:12,fontWeight:500},children:"Download"})]})]}),f.jsx("div",{style:{maxHeight:600,overflow:"auto"},children:f.jsx("pre",{ref:s,style:{margin:0,padding:16,fontSize:13,lineHeight:1.7,color:"#334155",background:"#ffffff",fontFamily:"'SF Mono', 'Cascadia Code', 'Fira Code', Menlo, monospace",whiteSpace:"pre-wrap",wordBreak:"break-word"},children:l||"No YAML available"})})]})]})}const xt={padding:"10px 14px",textAlign:"left",fontSize:11,fontWeight:600,color:"#64748b",textTransform:"uppercase",letterSpacing:"0.05em"},vt={padding:"10px 14px",color:"#0f172a"},Ze="/api",VC=["Add caching layer","Reduce cost","Increase redundancy","Add monitoring","Add security"];function ep(e){var s;if((s=e.metadata)!=null&&s.suggestions&&e.metadata.suggestions.length>0)return e.metadata.suggestions.slice(0,3);const t=e.components.map(l=>l.label.toLowerCase()),n=e.components.map(l=>l.service.toLowerCase()),r=t.some(l=>l.includes("cache")||l.includes("redis")||l.includes("elasticache"))||n.some(l=>l.includes("cache")||l.includes("redis")),o=t.some(l=>l.includes("monitor")||l.includes("cloudwatch")||l.includes("grafana"))||n.some(l=>l.includes("cloudwatch")||l.includes("monitor")),i=t.some(l=>l.includes("waf")||l.includes("firewall")||l.includes("security"))||n.some(l=>l.includes("waf")||l.includes("shield"));return VC.filter(l=>!(l==="Add caching layer"&&r||l==="Add monitoring"&&o||l==="Add security"&&i)).slice(0,3)}function WC(e){return e.split(/(\*\*.*?\*\*)/g).map((t,n)=>t.startsWith("**")&&t.endsWith("**")?f.jsx("strong",{children:t.slice(2,-2)},n):f.jsx("span",{children:t},n))}async function Kl(e,t){var i;let n=e;const[r,o]=await Promise.all([fetch(`${Ze}/cost`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({spec:n})}).then(s=>s.ok?s.json():null).catch(()=>null),fetch(`${Ze}/validate`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({spec:n,compliance:[],well_architected:!0})}).then(s=>s.ok?s.json():null).catch(()=>null)]);if(r!=null&&r.estimate&&(n={...n,cost_estimate:r.estimate}),((i=o==null?void 0:o.results)==null?void 0:i.length)>0){const s=o.results[0].checks||[],l=s.filter(a=>a.passed).length;t({passed:l,total:s.length})}return n}async function tp(e,t,n){var a;const r=e?`${Ze}/modify/stream`:`${Ze}/design/stream`,o=await fetch(r,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(t)});if(!o.ok){n.onError(await Go(o));return}const i=(a=o.body)==null?void 0:a.getReader();if(!i)return;const s=new TextDecoder;let l="";for(;;){const{done:u,value:p}=await i.read();if(u)break;l+=s.decode(p,{stream:!0});const c=l.split(`
-`);l=c.pop()||"";for(const d of c)if(d.startsWith("data: "))try{const x=JSON.parse(d.slice(6));switch(x.stage){case"generating":case"costing":case"validating":n.onStage(x.stage,x.message);break;case"generated":n.onSpec(x.spec,x.yaml),x.usage&&n.onUsage&&n.onUsage(x.usage);break;case"costed":n.onCost(x.cost_estimate);break;case"validated":n.onValidation(x.passed,x.total);break;case"done":n.onDone(x.spec,x.yaml),x.usage&&n.onUsage&&n.onUsage(x.usage);break;case"error":n.onError(x.message);break}}catch{}}}function UC(){var _;const[e,t]=z.useState([]),[n,r]=z.useState(""),[o,i]=z.useState("idle"),[s,l]=z.useState(null),[a,u]=z.useState("diagram"),[p,c]=z.useState(""),[d,x]=z.useState(null),[y,w]=z.useState(null),k=z.useRef(null),m=z.useRef(null);z.useEffect(()=>{var S;(S=m.current)==null||S.scrollIntoView({behavior:"smooth"})},[e]);const g=async()=>{var T;if(!n.trim()||o!=="idle")return;const S={role:"user",content:n};t(I=>[...I,S]),r("");const E=s!==null;i(E?"modifying":"generating");let b=null,A="",D=!1;try{const I=E?{spec:s,instruction:n}:{description:n};try{await tp(E,I,{onStage:M=>{M==="generating"?i("generating"):(M==="costing"||M==="validating")&&i("costing")},onSpec:M=>{l(M),b=M,i("costing")},onCost:M=>{M&&b&&(b={...b,cost_estimate:M},l(b))},onValidation:(M,R)=>{M!==null&&x({passed:M,total:R})},onDone:(M,R)=>{b=M,A=R,l(M),i("done")},onUsage:M=>w(M),onError:M=>{throw new Error(M)}}),D=b!==null}catch{i(E?"modifying":"generating")}if(!D){const M=E?await fetch(`${Ze}/modify`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({spec:s,instruction:n})}):await fetch(`${Ze}/design`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({description:n})}),R=await M.json();if(!M.ok)throw new Error(su(R));b=R.spec,A=R.yaml,R.usage&&w(R.usage),i("costing"),b=await Kl(b,x),l(b),i("done")}const P=b,L={role:"assistant",content:`${E?"Modified":"Designed"} **${P.name}** with ${P.components.length} components on ${P.provider.toUpperCase()}.${P.cost_estimate?` Estimated cost: $${P.cost_estimate.monthly_total.toFixed(2)}/mo.`:""}`,spec:P,yaml:A,suggestions:ep(P)};t(M=>[...M,L]),u("diagram")}catch(I){const P=I instanceof Error?I.message:"Unknown error";t(C=>[...C,{role:"assistant",content:`Error: ${P}`}])}finally{i("idle"),(T=k.current)==null||T.focus()}},h=async S=>{if(s)try{const E=await fetch(`${Ze}/download`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({spec:s,format:S})});if(!E.ok)return;const b=await E.blob(),D=(E.headers.get("Content-Disposition")||"").match(/filename=([^\s;]+)/),T=D?D[1]:`architecture.${S==="terraform"?"tf":"yaml"}`,I=URL.createObjectURL(b),P=document.createElement("a");P.href=I,P.download=T,P.click(),URL.revokeObjectURL(I)}catch{}},v=async S=>{l(S),x(null);try{const E=await Kl(S,x);l(E)}catch{}};return f.jsxs("div",{style:{display:"flex",height:"100vh",background:"#ffffff"},children:[f.jsxs("div",{style:{width:420,borderRight:"1px solid #e2e8f0",display:"flex",flexDirection:"column",background:"#f8fafc"},children:[f.jsxs("div",{style:{padding:"16px 20px",borderBottom:"1px solid #e2e8f0",display:"flex",alignItems:"center",justifyContent:"space-between"},children:[f.jsxs("div",{children:[f.jsx("h1",{style:{fontSize:20,fontWeight:700,color:"#0f172a"},children:"Cloudwright"}),f.jsx("p",{style:{fontSize:12,color:"#64748b",marginTop:4},children:"Architecture Intelligence"})]}),s&&f.jsx("button",{onClick:()=>{if(window.confirm("Discard current session and start fresh?")){try{localStorage.setItem("cloudwright_last_session",JSON.stringify(e))}catch{}l(null),t([]),x(null)}},style:{padding:"5px 12px",borderRadius:6,border:"1px solid #e2e8f0",background:"#ffffff",color:"#64748b",cursor:"pointer",fontSize:12,fontWeight:500},children:"New"})]}),f.jsxs("div",{style:{flex:1,overflowY:"auto",padding:16},children:[e.length===0&&f.jsxs("div",{style:{color:"#64748b",padding:20,textAlign:"center"},children:[f.jsx("p",{style:{fontSize:14},children:"Describe your cloud architecture"}),f.jsx("p",{style:{fontSize:12,marginTop:8,color:"#94a3b8"},children:'"3-tier web app on AWS with CloudFront, ALB, EC2, and RDS"'})]}),e.map((S,E)=>f.jsxs("div",{style:{marginBottom:12},children:[f.jsx("div",{style:{padding:"10px 14px",borderRadius:8,background:S.role==="user"?"#2563eb":"#f1f5f9",color:S.role==="user"?"#ffffff":"#1e293b",fontSize:14,lineHeight:1.5},children:WC(S.content)}),S.role==="assistant"&&S.spec&&S.suggestions&&S.suggestions.length>0&&f.jsx("div",{style:{display:"flex",gap:6,marginTop:6,flexWrap:"wrap"},children:S.suggestions.map(b=>f.jsx("button",{onClick:()=>{var A;r(b),(A=k.current)==null||A.focus()},disabled:o!=="idle",style:{padding:"4px 10px",borderRadius:12,border:"1px solid #cbd5e1",background:"#ffffff",color:"#2563eb",cursor:o!=="idle"?"not-allowed":"pointer",fontSize:12,fontWeight:500},children:b},b))})]},E)),o!=="idle"&&f.jsxs("div",{style:{padding:"10px 14px",color:"#64748b",fontSize:14},children:[o==="generating"&&"Generating architecture...",o==="modifying"&&"Modifying architecture...",o==="costing"&&"Estimating cost & validating...",o==="done"&&"Finalizing..."]}),f.jsx("div",{ref:m})]}),f.jsx("div",{style:{padding:16,borderTop:"1px solid #e2e8f0"},children:f.jsxs("div",{style:{display:"flex",gap:8},children:[f.jsx("input",{ref:k,value:n,onChange:S=>r(S.target.value),onKeyDown:S=>S.key==="Enter"&&g(),placeholder:"Describe your architecture...",style:{flex:1,padding:"10px 14px",borderRadius:8,border:"1px solid #e2e8f0",background:"#ffffff",color:"#0f172a",fontSize:14,outline:"none"}}),f.jsx("button",{onClick:g,disabled:o!=="idle"||!n.trim(),style:{padding:"10px 20px",borderRadius:8,border:"none",background:o!=="idle"?"#e2e8f0":"#2563eb",color:o!=="idle"?"#94a3b8":"#fff",cursor:o!=="idle"?"not-allowed":"pointer",fontSize:14,fontWeight:600},children:"Send"})]})})]}),f.jsxs("div",{style:{flex:1,display:"flex",flexDirection:"column",background:"#ffffff"},children:[f.jsx("div",{style:{display:"flex",borderBottom:"1px solid #e2e8f0",background:"#ffffff"},children:["diagram","cost","validate","compliance","plan","export","spec","modify"].map(S=>f.jsx("button",{onClick:()=>u(S),style:{padding:"12px 24px",border:"none",borderBottom:a===S?"2px solid #2563eb":"2px solid transparent",background:"transparent",color:a===S?"#2563eb":"#64748b",cursor:"pointer",fontSize:14,fontWeight:500,textTransform:"capitalize"},children:S},S))}),f.jsxs("div",{style:{flex:1,overflow:"auto",display:"flex",flexDirection:"column"},children:[f.jsx("div",{style:{padding:"0.5rem 1rem"},children:f.jsx(zC,{spec:s,onDownloadTerraform:s?()=>h("terraform"):void 0,onDownloadYaml:s?()=>h("yaml"):void 0,validationSummary:d,usage:y})}),f.jsxs("div",{style:{flex:1,overflow:"auto"},children:[a==="diagram"&&(s||o!=="idle")&&f.jsxs("div",{style:{position:"relative",width:"100%",height:"100%"},children:[s&&f.jsx(jC,{spec:s,onSpecChange:v}),o!=="idle"&&f.jsxs("div",{style:{position:"absolute",top:16,right:16,background:"rgba(37, 99, 235, 0.9)",color:"white",padding:"8px 16px",borderRadius:8,fontSize:13,fontWeight:500,display:"flex",alignItems:"center",gap:8},children:[f.jsx("span",{style:{width:8,height:8,borderRadius:"50%",background:"white",animation:"pulse 1s infinite"}}),o==="generating"?"Generating...":o==="modifying"?"Modifying...":o==="costing"?"Costing & validating...":"Finalizing..."]})]}),a==="diagram"&&!s&&o==="idle"&&f.jsx("div",{style:{padding:32,color:"#64748b"},children:"Design an architecture to see the diagram."}),a==="cost"&&(s==null?void 0:s.cost_estimate)&&f.jsx(MC,{estimate:s.cost_estimate}),a==="cost"&&(!s||!s.cost_estimate)&&f.jsx("div",{style:{padding:32,color:"#64748b"},children:"No cost estimate available."}),a==="spec"&&s&&f.jsx(HC,{spec:s,yaml:((_=e.findLast(S=>S.yaml))==null?void 0:_.yaml)||"No YAML available"}),a==="spec"&&!s&&f.jsx("div",{style:{padding:32,color:"#64748b"},children:"Design an architecture first."}),a==="validate"&&s&&f.jsx(LC,{spec:s,apiBase:Ze}),a==="validate"&&!s&&f.jsx("div",{style:{padding:32,color:"#64748b"},children:"Design an architecture first."}),a==="compliance"&&s&&f.jsx($C,{spec:s,apiBase:Ze}),a==="compliance"&&!s&&f.jsx("div",{style:{padding:32,color:"#64748b"},children:"Design an architecture first."}),a==="plan"&&s&&f.jsx(OC,{spec:s,apiBase:Ze}),a==="plan"&&!s&&f.jsx("div",{style:{padding:32,color:"#64748b"},children:"Design an architecture first."}),a==="export"&&s&&f.jsx(BC,{spec:s,apiBase:Ze}),a==="export"&&!s&&f.jsx("div",{style:{padding:32,color:"#64748b"},children:"Design an architecture first."}),a==="modify"&&s&&f.jsxs("div",{style:{padding:32,maxWidth:800},children:[f.jsx("h2",{style:{fontSize:18,marginBottom:16,color:"#0f172a"},children:"Modify Architecture"}),o!=="idle"&&f.jsxs("div",{style:{marginBottom:12,fontSize:13,color:"#64748b"},children:[o==="modifying"&&"Modifying architecture...",o==="costing"&&"Estimating cost & validating...",o==="done"&&"Finalizing..."]}),f.jsx("div",{style:{display:"flex",gap:8},children:f.jsx("input",{value:p,onChange:S=>c(S.target.value),onKeyDown:async S=>{if(S.key==="Enter"&&p.trim()&&o==="idle"){const E=p;c(""),i("modifying");let b=null,A="",D=!1;try{try{await tp(!0,{spec:s,instruction:E},{onStage:I=>{I==="generating"?i("modifying"):(I==="costing"||I==="validating")&&i("costing")},onSpec:I=>{l(I),b=I,i("costing")},onCost:I=>{I&&b&&(b={...b,cost_estimate:I},l(b))},onValidation:(I,P)=>{I!==null&&x({passed:I,total:P})},onDone:(I,P)=>{b=I,A=P,l(I),i("done")},onUsage:I=>w(I),onError:I=>{throw new Error(I)}}),D=b!==null}catch{i("modifying")}if(!D){const I=await fetch(`${Ze}/modify`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({spec:s,instruction:E})}),P=await I.json();if(!I.ok)throw new Error(su(P,"Modification failed"));P.usage&&w(P.usage);const C=P.spec;A=P.yaml,i("costing"),b=await Kl(C,x),l(b),i("done")}const T=b;t(I=>[...I,{role:"user",content:E},{role:"assistant",content:`Modified **${T.name}** with ${T.components.length} components on ${T.provider.toUpperCase()}.${T.cost_estimate?` Estimated cost: $${T.cost_estimate.monthly_total.toFixed(2)}/mo.`:""}`,spec:T,yaml:A,suggestions:ep(T)}])}catch(T){t(I=>[...I,{role:"user",content:E},{role:"assistant",content:`Error: ${T instanceof Error?T.message:"Modification failed"}`}])}finally{i("idle")}}},placeholder:"e.g. Add a Redis cache between web and database",style:{flex:1,padding:"10px 14px",borderRadius:8,border:"1px solid #e2e8f0",background:"#ffffff",color:"#0f172a",fontSize:14,outline:"none"}})}),f.jsx("p",{style:{fontSize:12,color:"#64748b",marginTop:8},children:"Press Enter to apply modification"})]}),a==="modify"&&!s&&f.jsx("div",{style:{padding:32,color:"#64748b"},children:"Design an architecture first."})]})]})]})]})}Zl.createRoot(document.getElementById("root")).render(f.jsx(pp.StrictMode,{children:f.jsx(UC,{})}));
diff --git a/packages/web/cloudwright_web/static/index.html b/packages/web/cloudwright_web/static/index.html
index ac78efa..1bc55bb 100644
--- a/packages/web/cloudwright_web/static/index.html
+++ b/packages/web/cloudwright_web/static/index.html
@@ -8,7 +8,7 @@
* { margin: 0; padding: 0; box-sizing: border-box; }
body { font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif; background: #ffffff; color: #0f172a; }
-
+
diff --git a/packages/web/frontend/src/App.tsx b/packages/web/frontend/src/App.tsx
index b760fa1..6175ca1 100644
--- a/packages/web/frontend/src/App.tsx
+++ b/packages/web/frontend/src/App.tsx
@@ -5,6 +5,7 @@ import SummaryBar from "./components/SummaryBar";
import ValidationPanel from "./components/ValidationPanel";
import CompliancePanel from "./components/CompliancePanel";
import PlanPanel from "./components/PlanPanel";
+import ReviewPanel from "./components/ReviewPanel";
import ExportPanel from "./components/ExportPanel";
import SpecPanel from "./components/SpecPanel";
import { parseApiError, formatApiError } from "./lib/apiError";
@@ -224,7 +225,7 @@ function App() {
const [loadingStage, setLoadingStage] = useState("idle");
const [currentSpec, setCurrentSpec] = useState(null);
const [activeTab, setActiveTab] = useState<
- "diagram" | "cost" | "validate" | "compliance" | "plan" | "export" | "spec" | "modify"
+ "diagram" | "cost" | "validate" | "compliance" | "plan" | "review" | "export" | "spec" | "modify"
>("diagram");
const [modifyInput, setModifyInput] = useState("");
@@ -514,7 +515,7 @@ function App() {
{/* Tabs */}
- {(["diagram", "cost", "validate", "compliance", "plan", "export", "spec", "modify"] as const).map((tab) => (
+ {(["diagram", "cost", "validate", "compliance", "plan", "review", "export", "spec", "modify"] as const).map((tab) => (