diff --git a/README.md b/README.md index c68f7a9..ff0086b 100644 --- a/README.md +++ b/README.md @@ -21,7 +21,7 @@ plus the jobs the view enqueues (`send_invoice_email.delay`, `rebuild_ledger.sen ## App -`loadpath serve --port 7345` opens a local desktop-style UI. Tokens stay on the machine in `~/.loadpath/settings.json`. AI is used **only** for residual uncertainty the graph cannot close. The rail and Settings page ship a dozen themes (Obsidian, Nord, Solarized, Paper, high-contrast, …); the choice stays in `localStorage`. Last repo, git range, and SCM slug are remembered the same way. Copy the markdown brief, or post **one** PR comment (updated in place) from the Review tab. +`loadpath serve --port 7345` opens a local desktop-style UI: icon rail, labeled toolbar, merge-box confidence, and an inspectable impact graph. Tokens stay on the machine in `~/.loadpath/settings.json`. AI is used **only** for residual uncertainty the graph cannot close. A dozen themes (Obsidian, Nord, Solarized, Paper, high-contrast, …) live in Settings and `localStorage`. Last repo, git range, and SCM slug are remembered the same way. Copy the markdown brief, or post **one** PR comment (updated in place) from the Review tab. Keyboard: `1`–`5` switches tabs. Outside Settings and Pull requests, `⌘`/`Ctrl`+`Enter` runs a review. ### Review diff --git a/docs/screenshots/architecture.png b/docs/screenshots/architecture.png index a965ff4..8060ac1 100644 Binary files a/docs/screenshots/architecture.png and b/docs/screenshots/architecture.png differ diff --git a/docs/screenshots/graph.png b/docs/screenshots/graph.png index 71419ed..ebba12b 100644 Binary files a/docs/screenshots/graph.png and b/docs/screenshots/graph.png differ diff --git a/docs/screenshots/pull-requests.png b/docs/screenshots/pull-requests.png index d42ed19..e1cd9b0 100644 Binary files a/docs/screenshots/pull-requests.png and b/docs/screenshots/pull-requests.png differ diff --git a/docs/screenshots/review.png b/docs/screenshots/review.png index c00fd7d..d1d31d7 100644 Binary files a/docs/screenshots/review.png and b/docs/screenshots/review.png differ diff --git a/docs/screenshots/settings.png b/docs/screenshots/settings.png index 80dd3d8..8c28e07 100644 Binary files a/docs/screenshots/settings.png and b/docs/screenshots/settings.png differ diff --git a/src/loadpath/static/assets/index-5LvtBaA5.js b/src/loadpath/static/assets/index-5LvtBaA5.js new file mode 100644 index 0000000..d210ee7 --- /dev/null +++ b/src/loadpath/static/assets/index-5LvtBaA5.js @@ -0,0 +1,62 @@ +(function(){const r=document.createElement("link").relList;if(r&&r.supports&&r.supports("modulepreload"))return;for(const a of document.querySelectorAll('link[rel="modulepreload"]'))l(a);new MutationObserver(a=>{for(const c of a)if(c.type==="childList")for(const d of c.addedNodes)d.tagName==="LINK"&&d.rel==="modulepreload"&&l(d)}).observe(document,{childList:!0,subtree:!0});function o(a){const c={};return a.integrity&&(c.integrity=a.integrity),a.referrerPolicy&&(c.referrerPolicy=a.referrerPolicy),a.crossOrigin==="use-credentials"?c.credentials="include":a.crossOrigin==="anonymous"?c.credentials="omit":c.credentials="same-origin",c}function l(a){if(a.ep)return;a.ep=!0;const c=o(a);fetch(a.href,c)}})();function np(t){return t&&t.__esModule&&Object.prototype.hasOwnProperty.call(t,"default")?t.default:t}var gu={exports:{}},Ki={},mu={exports:{}},je={};/** + * @license React + * react.production.min.js + * + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */var Df;function j0(){if(Df)return je;Df=1;var t=Symbol.for("react.element"),r=Symbol.for("react.portal"),o=Symbol.for("react.fragment"),l=Symbol.for("react.strict_mode"),a=Symbol.for("react.profiler"),c=Symbol.for("react.provider"),d=Symbol.for("react.context"),h=Symbol.for("react.forward_ref"),p=Symbol.for("react.suspense"),y=Symbol.for("react.memo"),m=Symbol.for("react.lazy"),v=Symbol.iterator;function g(j){return j===null||typeof j!="object"?null:(j=v&&j[v]||j["@@iterator"],typeof j=="function"?j:null)}var S={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},_=Object.assign,M={};function k(j,T,ee){this.props=j,this.context=T,this.refs=M,this.updater=ee||S}k.prototype.isReactComponent={},k.prototype.setState=function(j,T){if(typeof j!="object"&&typeof j!="function"&&j!=null)throw Error("setState(...): takes an object of state variables to update or a function which returns an object of state variables.");this.updater.enqueueSetState(this,j,T,"setState")},k.prototype.forceUpdate=function(j){this.updater.enqueueForceUpdate(this,j,"forceUpdate")};function E(){}E.prototype=k.prototype;function z(j,T,ee){this.props=j,this.context=T,this.refs=M,this.updater=ee||S}var N=z.prototype=new E;N.constructor=z,_(N,k.prototype),N.isPureReactComponent=!0;var P=Array.isArray,b=Object.prototype.hasOwnProperty,$={current:null},H={key:!0,ref:!0,__self:!0,__source:!0};function X(j,T,ee){var re,ue={},de=null,ce=null;if(T!=null)for(re in T.ref!==void 0&&(ce=T.ref),T.key!==void 0&&(de=""+T.key),T)b.call(T,re)&&!H.hasOwnProperty(re)&&(ue[re]=T[re]);var Q=arguments.length-2;if(Q===1)ue.children=ee;else if(1>>1,T=A[j];if(0>>1;ja(ue,O))dea(ce,ue)?(A[j]=ce,A[de]=O,j=de):(A[j]=ue,A[re]=O,j=re);else if(dea(ce,O))A[j]=ce,A[de]=O,j=de;else break e}}return L}function a(A,L){var O=A.sortIndex-L.sortIndex;return O!==0?O:A.id-L.id}if(typeof performance=="object"&&typeof performance.now=="function"){var c=performance;t.unstable_now=function(){return c.now()}}else{var d=Date,h=d.now();t.unstable_now=function(){return d.now()-h}}var p=[],y=[],m=1,v=null,g=3,S=!1,_=!1,M=!1,k=typeof setTimeout=="function"?setTimeout:null,E=typeof clearTimeout=="function"?clearTimeout:null,z=typeof setImmediate<"u"?setImmediate:null;typeof navigator<"u"&&navigator.scheduling!==void 0&&navigator.scheduling.isInputPending!==void 0&&navigator.scheduling.isInputPending.bind(navigator.scheduling);function N(A){for(var L=o(y);L!==null;){if(L.callback===null)l(y);else if(L.startTime<=A)l(y),L.sortIndex=L.expirationTime,r(p,L);else break;L=o(y)}}function P(A){if(M=!1,N(A),!_)if(o(p)!==null)_=!0,F(b);else{var L=o(y);L!==null&&V(P,L.startTime-A)}}function b(A,L){_=!1,M&&(M=!1,E(X),X=-1),S=!0;var O=g;try{for(N(L),v=o(p);v!==null&&(!(v.expirationTime>L)||A&&!Z());){var j=v.callback;if(typeof j=="function"){v.callback=null,g=v.priorityLevel;var T=j(v.expirationTime<=L);L=t.unstable_now(),typeof T=="function"?v.callback=T:v===o(p)&&l(p),N(L)}else l(p);v=o(p)}if(v!==null)var ee=!0;else{var re=o(y);re!==null&&V(P,re.startTime-L),ee=!1}return ee}finally{v=null,g=O,S=!1}}var $=!1,H=null,X=-1,K=5,ne=-1;function Z(){return!(t.unstable_now()-neA||125j?(A.sortIndex=O,r(y,A),o(p)===null&&A===o(y)&&(M?(E(X),X=-1):M=!0,V(P,O-j))):(A.sortIndex=T,r(p,A),_||S||(_=!0,F(b))),A},t.unstable_shouldYield=Z,t.unstable_wrapCallback=function(A){var L=g;return function(){var O=g;g=L;try{return A.apply(this,arguments)}finally{g=O}}}})(xu)),xu}var Vf;function z0(){return Vf||(Vf=1,vu.exports=T0()),vu.exports}/** + * @license React + * react-dom.production.min.js + * + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */var Bf;function R0(){if(Bf)return wt;Bf=1;var t=fo(),r=z0();function o(e){for(var n="https://reactjs.org/docs/error-decoder.html?invariant="+e,i=1;i"u"||typeof window.document>"u"||typeof window.document.createElement>"u"),p=Object.prototype.hasOwnProperty,y=/^[:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD][:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD\-.0-9\u00B7\u0300-\u036F\u203F-\u2040]*$/,m={},v={};function g(e){return p.call(v,e)?!0:p.call(m,e)?!1:y.test(e)?v[e]=!0:(m[e]=!0,!1)}function S(e,n,i,s){if(i!==null&&i.type===0)return!1;switch(typeof n){case"function":case"symbol":return!0;case"boolean":return s?!1:i!==null?!i.acceptsBooleans:(e=e.toLowerCase().slice(0,5),e!=="data-"&&e!=="aria-");default:return!1}}function _(e,n,i,s){if(n===null||typeof n>"u"||S(e,n,i,s))return!0;if(s)return!1;if(i!==null)switch(i.type){case 3:return!n;case 4:return n===!1;case 5:return isNaN(n);case 6:return isNaN(n)||1>n}return!1}function M(e,n,i,s,u,f,w){this.acceptsBooleans=n===2||n===3||n===4,this.attributeName=s,this.attributeNamespace=u,this.mustUseProperty=i,this.propertyName=e,this.type=n,this.sanitizeURL=f,this.removeEmptyString=w}var k={};"children dangerouslySetInnerHTML defaultValue defaultChecked innerHTML suppressContentEditableWarning suppressHydrationWarning style".split(" ").forEach(function(e){k[e]=new M(e,0,!1,e,null,!1,!1)}),[["acceptCharset","accept-charset"],["className","class"],["htmlFor","for"],["httpEquiv","http-equiv"]].forEach(function(e){var n=e[0];k[n]=new M(n,1,!1,e[1],null,!1,!1)}),["contentEditable","draggable","spellCheck","value"].forEach(function(e){k[e]=new M(e,2,!1,e.toLowerCase(),null,!1,!1)}),["autoReverse","externalResourcesRequired","focusable","preserveAlpha"].forEach(function(e){k[e]=new M(e,2,!1,e,null,!1,!1)}),"allowFullScreen async autoFocus autoPlay controls default defer disabled disablePictureInPicture disableRemotePlayback formNoValidate hidden loop noModule noValidate open playsInline readOnly required reversed scoped seamless itemScope".split(" ").forEach(function(e){k[e]=new M(e,3,!1,e.toLowerCase(),null,!1,!1)}),["checked","multiple","muted","selected"].forEach(function(e){k[e]=new M(e,3,!0,e,null,!1,!1)}),["capture","download"].forEach(function(e){k[e]=new M(e,4,!1,e,null,!1,!1)}),["cols","rows","size","span"].forEach(function(e){k[e]=new M(e,6,!1,e,null,!1,!1)}),["rowSpan","start"].forEach(function(e){k[e]=new M(e,5,!1,e.toLowerCase(),null,!1,!1)});var E=/[\-:]([a-z])/g;function z(e){return e[1].toUpperCase()}"accent-height alignment-baseline arabic-form baseline-shift cap-height clip-path clip-rule color-interpolation color-interpolation-filters color-profile color-rendering dominant-baseline enable-background fill-opacity fill-rule flood-color flood-opacity font-family font-size font-size-adjust font-stretch font-style font-variant font-weight glyph-name glyph-orientation-horizontal glyph-orientation-vertical horiz-adv-x horiz-origin-x image-rendering letter-spacing lighting-color marker-end marker-mid marker-start overline-position overline-thickness paint-order panose-1 pointer-events rendering-intent shape-rendering stop-color stop-opacity strikethrough-position strikethrough-thickness stroke-dasharray stroke-dashoffset stroke-linecap stroke-linejoin stroke-miterlimit stroke-opacity stroke-width text-anchor text-decoration text-rendering underline-position underline-thickness unicode-bidi unicode-range units-per-em v-alphabetic v-hanging v-ideographic v-mathematical vector-effect vert-adv-y vert-origin-x vert-origin-y word-spacing writing-mode xmlns:xlink x-height".split(" ").forEach(function(e){var n=e.replace(E,z);k[n]=new M(n,1,!1,e,null,!1,!1)}),"xlink:actuate xlink:arcrole xlink:role xlink:show xlink:title xlink:type".split(" ").forEach(function(e){var n=e.replace(E,z);k[n]=new M(n,1,!1,e,"http://www.w3.org/1999/xlink",!1,!1)}),["xml:base","xml:lang","xml:space"].forEach(function(e){var n=e.replace(E,z);k[n]=new M(n,1,!1,e,"http://www.w3.org/XML/1998/namespace",!1,!1)}),["tabIndex","crossOrigin"].forEach(function(e){k[e]=new M(e,1,!1,e.toLowerCase(),null,!1,!1)}),k.xlinkHref=new M("xlinkHref",1,!1,"xlink:href","http://www.w3.org/1999/xlink",!0,!1),["src","href","action","formAction"].forEach(function(e){k[e]=new M(e,1,!1,e.toLowerCase(),null,!0,!0)});function N(e,n,i,s){var u=k.hasOwnProperty(n)?k[n]:null;(u!==null?u.type!==0:s||!(2I||u[w]!==f[I]){var R=` +`+u[w].replace(" at new "," at ");return e.displayName&&R.includes("")&&(R=R.replace("",e.displayName)),R}while(1<=w&&0<=I);break}}}finally{ee=!1,Error.prepareStackTrace=i}return(e=e?e.displayName||e.name:"")?T(e):""}function ue(e){switch(e.tag){case 5:return T(e.type);case 16:return T("Lazy");case 13:return T("Suspense");case 19:return T("SuspenseList");case 0:case 2:case 15:return e=re(e.type,!1),e;case 11:return e=re(e.type.render,!1),e;case 1:return e=re(e.type,!0),e;default:return""}}function de(e){if(e==null)return null;if(typeof e=="function")return e.displayName||e.name||null;if(typeof e=="string")return e;switch(e){case H:return"Fragment";case $:return"Portal";case K:return"Profiler";case X:return"StrictMode";case J:return"Suspense";case C:return"SuspenseList"}if(typeof e=="object")switch(e.$$typeof){case Z:return(e.displayName||"Context")+".Consumer";case ne:return(e._context.displayName||"Context")+".Provider";case te:var n=e.render;return e=e.displayName,e||(e=n.displayName||n.name||"",e=e!==""?"ForwardRef("+e+")":"ForwardRef"),e;case B:return n=e.displayName||null,n!==null?n:de(e.type)||"Memo";case F:n=e._payload,e=e._init;try{return de(e(n))}catch{}}return null}function ce(e){var n=e.type;switch(e.tag){case 24:return"Cache";case 9:return(n.displayName||"Context")+".Consumer";case 10:return(n._context.displayName||"Context")+".Provider";case 18:return"DehydratedFragment";case 11:return e=n.render,e=e.displayName||e.name||"",n.displayName||(e!==""?"ForwardRef("+e+")":"ForwardRef");case 7:return"Fragment";case 5:return n;case 4:return"Portal";case 3:return"Root";case 6:return"Text";case 16:return de(n);case 8:return n===X?"StrictMode":"Mode";case 22:return"Offscreen";case 12:return"Profiler";case 21:return"Scope";case 13:return"Suspense";case 19:return"SuspenseList";case 25:return"TracingMarker";case 1:case 0:case 17:case 2:case 14:case 15:if(typeof n=="function")return n.displayName||n.name||null;if(typeof n=="string")return n}return null}function Q(e){switch(typeof e){case"boolean":case"number":case"string":case"undefined":return e;case"object":return e;default:return""}}function se(e){var n=e.type;return(e=e.nodeName)&&e.toLowerCase()==="input"&&(n==="checkbox"||n==="radio")}function pe(e){var n=se(e)?"checked":"value",i=Object.getOwnPropertyDescriptor(e.constructor.prototype,n),s=""+e[n];if(!e.hasOwnProperty(n)&&typeof i<"u"&&typeof i.get=="function"&&typeof i.set=="function"){var u=i.get,f=i.set;return Object.defineProperty(e,n,{configurable:!0,get:function(){return u.call(this)},set:function(w){s=""+w,f.call(this,w)}}),Object.defineProperty(e,n,{enumerable:i.enumerable}),{getValue:function(){return s},setValue:function(w){s=""+w},stopTracking:function(){e._valueTracker=null,delete e[n]}}}}function Se(e){e._valueTracker||(e._valueTracker=pe(e))}function ve(e){if(!e)return!1;var n=e._valueTracker;if(!n)return!0;var i=n.getValue(),s="";return e&&(s=se(e)?e.checked?"true":"false":e.value),e=s,e!==i?(n.setValue(e),!0):!1}function me(e){if(e=e||(typeof document<"u"?document:void 0),typeof e>"u")return null;try{return e.activeElement||e.body}catch{return e.body}}function Ce(e,n){var i=n.checked;return O({},n,{defaultChecked:void 0,defaultValue:void 0,value:void 0,checked:i??e._wrapperState.initialChecked})}function Me(e,n){var i=n.defaultValue==null?"":n.defaultValue,s=n.checked!=null?n.checked:n.defaultChecked;i=Q(n.value!=null?n.value:i),e._wrapperState={initialChecked:s,initialValue:i,controlled:n.type==="checkbox"||n.type==="radio"?n.checked!=null:n.value!=null}}function Pe(e,n){n=n.checked,n!=null&&N(e,"checked",n,!1)}function ze(e,n){Pe(e,n);var i=Q(n.value),s=n.type;if(i!=null)s==="number"?(i===0&&e.value===""||e.value!=i)&&(e.value=""+i):e.value!==""+i&&(e.value=""+i);else if(s==="submit"||s==="reset"){e.removeAttribute("value");return}n.hasOwnProperty("value")?lt(e,n.type,i):n.hasOwnProperty("defaultValue")&<(e,n.type,Q(n.defaultValue)),n.checked==null&&n.defaultChecked!=null&&(e.defaultChecked=!!n.defaultChecked)}function Ze(e,n,i){if(n.hasOwnProperty("value")||n.hasOwnProperty("defaultValue")){var s=n.type;if(!(s!=="submit"&&s!=="reset"||n.value!==void 0&&n.value!==null))return;n=""+e._wrapperState.initialValue,i||n===e.value||(e.value=n),e.defaultValue=n}i=e.name,i!==""&&(e.name=""),e.defaultChecked=!!e._wrapperState.initialChecked,i!==""&&(e.name=i)}function lt(e,n,i){(n!=="number"||me(e.ownerDocument)!==e)&&(i==null?e.defaultValue=""+e._wrapperState.initialValue:e.defaultValue!==""+i&&(e.defaultValue=""+i))}var Je=Array.isArray;function et(e,n,i,s){if(e=e.options,n){n={};for(var u=0;u"+n.valueOf().toString()+"",n=we.firstChild;e.firstChild;)e.removeChild(e.firstChild);for(;n.firstChild;)e.appendChild(n.firstChild)}});function Ke(e,n){if(n){var i=e.firstChild;if(i&&i===e.lastChild&&i.nodeType===3){i.nodeValue=n;return}}e.textContent=n}var un={animationIterationCount:!0,aspectRatio:!0,borderImageOutset:!0,borderImageSlice:!0,borderImageWidth:!0,boxFlex:!0,boxFlexGroup:!0,boxOrdinalGroup:!0,columnCount:!0,columns:!0,flex:!0,flexGrow:!0,flexPositive:!0,flexShrink:!0,flexNegative:!0,flexOrder:!0,gridArea:!0,gridRow:!0,gridRowEnd:!0,gridRowSpan:!0,gridRowStart:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnSpan:!0,gridColumnStart:!0,fontWeight:!0,lineClamp:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,tabSize:!0,widows:!0,zIndex:!0,zoom:!0,fillOpacity:!0,floodOpacity:!0,stopOpacity:!0,strokeDasharray:!0,strokeDashoffset:!0,strokeMiterlimit:!0,strokeOpacity:!0,strokeWidth:!0},kl=["Webkit","ms","Moz","O"];Object.keys(un).forEach(function(e){kl.forEach(function(n){n=n+e.charAt(0).toUpperCase()+e.substring(1),un[n]=un[e]})});function wo(e,n,i){return n==null||typeof n=="boolean"||n===""?"":i||typeof n!="number"||n===0||un.hasOwnProperty(e)&&un[e]?(""+n).trim():n+"px"}function So(e,n){e=e.style;for(var i in n)if(n.hasOwnProperty(i)){var s=i.indexOf("--")===0,u=wo(i,n[i],s);i==="float"&&(i="cssFloat"),s?e.setProperty(i,u):e[i]=u}}var El=O({menuitem:!0},{area:!0,base:!0,br:!0,col:!0,embed:!0,hr:!0,img:!0,input:!0,keygen:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0});function si(e,n){if(n){if(El[e]&&(n.children!=null||n.dangerouslySetInnerHTML!=null))throw Error(o(137,e));if(n.dangerouslySetInnerHTML!=null){if(n.children!=null)throw Error(o(60));if(typeof n.dangerouslySetInnerHTML!="object"||!("__html"in n.dangerouslySetInnerHTML))throw Error(o(61))}if(n.style!=null&&typeof n.style!="object")throw Error(o(62))}}function li(e,n){if(e.indexOf("-")===-1)return typeof n.is=="string";switch(e){case"annotation-xml":case"color-profile":case"font-face":case"font-face-src":case"font-face-uri":case"font-face-format":case"font-face-name":case"missing-glyph":return!1;default:return!0}}var ai=null;function ui(e){return e=e.target||e.srcElement||window,e.correspondingUseElement&&(e=e.correspondingUseElement),e.nodeType===3?e.parentNode:e}var ci=null,_n=null,kn=null;function _o(e){if(e=Li(e)){if(typeof ci!="function")throw Error(o(280));var n=e.stateNode;n&&(n=Zo(n),ci(e.stateNode,e.type,n))}}function ko(e){_n?kn?kn.push(e):kn=[e]:_n=e}function Eo(){if(_n){var e=_n,n=kn;if(kn=_n=null,_o(e),n)for(e=0;e>>=0,e===0?32:31-(Ll(e)/Al|0)|0}var Nr=64,Cr=4194304;function qn(e){switch(e&-e){case 1:return 1;case 2:return 2;case 4:return 4;case 8:return 8;case 16:return 16;case 32:return 32;case 64:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:return e&4194240;case 4194304:case 8388608:case 16777216:case 33554432:case 67108864:return e&130023424;case 134217728:return 134217728;case 268435456:return 268435456;case 536870912:return 536870912;case 1073741824:return 1073741824;default:return e}}function cn(e,n){var i=e.pendingLanes;if(i===0)return 0;var s=0,u=e.suspendedLanes,f=e.pingedLanes,w=i&268435455;if(w!==0){var I=w&~u;I!==0?s=qn(I):(f&=w,f!==0&&(s=qn(f)))}else w=i&~u,w!==0?s=qn(w):f!==0&&(s=qn(f));if(s===0)return 0;if(n!==0&&n!==s&&(n&u)===0&&(u=s&-s,f=n&-n,u>=f||u===16&&(f&4194240)!==0))return n;if((s&4)!==0&&(s|=i&16),n=e.entangledLanes,n!==0)for(e=e.entanglements,n&=s;0i;i++)n.push(e);return n}function Jn(e,n,i){e.pendingLanes|=n,n!==536870912&&(e.suspendedLanes=0,e.pingedLanes=0),e=e.eventTimes,n=31-Ct(n),e[n]=i}function Ol(e,n){var i=e.pendingLanes&~n;e.pendingLanes=n,e.suspendedLanes=0,e.pingedLanes=0,e.expiredLanes&=n,e.mutableReadLanes&=n,e.entangledLanes&=n,n=e.entanglements;var s=e.eventTimes;for(e=e.expirationTimes;0=Ni),Pc=" ",Ic=!1;function Tc(e,n){switch(e){case"keyup":return _m.indexOf(n.keyCode)!==-1;case"keydown":return n.keyCode!==229;case"keypress":case"mousedown":case"focusout":return!0;default:return!1}}function zc(e){return e=e.detail,typeof e=="object"&&"data"in e?e.data:null}var Ir=!1;function Em(e,n){switch(e){case"compositionend":return zc(n);case"keypress":return n.which!==32?null:(Ic=!0,Pc);case"textInput":return e=n.data,e===Pc&&Ic?null:e;default:return null}}function Nm(e,n){if(Ir)return e==="compositionend"||!Kl&&Tc(e,n)?(e=kc(),Ho=Bl=Mn=null,Ir=!1,e):null;switch(e){case"paste":return null;case"keypress":if(!(n.ctrlKey||n.altKey||n.metaKey)||n.ctrlKey&&n.altKey){if(n.char&&1=n)return{node:i,offset:n-e};e=s}e:{for(;i;){if(i.nextSibling){i=i.nextSibling;break e}i=i.parentNode}i=void 0}i=bc(i)}}function Hc(e,n){return e&&n?e===n?!0:e&&e.nodeType===3?!1:n&&n.nodeType===3?Hc(e,n.parentNode):"contains"in e?e.contains(n):e.compareDocumentPosition?!!(e.compareDocumentPosition(n)&16):!1:!1}function Vc(){for(var e=window,n=me();n instanceof e.HTMLIFrameElement;){try{var i=typeof n.contentWindow.location.href=="string"}catch{i=!1}if(i)e=n.contentWindow;else break;n=me(e.document)}return n}function Zl(e){var n=e&&e.nodeName&&e.nodeName.toLowerCase();return n&&(n==="input"&&(e.type==="text"||e.type==="search"||e.type==="tel"||e.type==="url"||e.type==="password")||n==="textarea"||e.contentEditable==="true")}function Lm(e){var n=Vc(),i=e.focusedElem,s=e.selectionRange;if(n!==i&&i&&i.ownerDocument&&Hc(i.ownerDocument.documentElement,i)){if(s!==null&&Zl(i)){if(n=s.start,e=s.end,e===void 0&&(e=n),"selectionStart"in i)i.selectionStart=n,i.selectionEnd=Math.min(e,i.value.length);else if(e=(n=i.ownerDocument||document)&&n.defaultView||window,e.getSelection){e=e.getSelection();var u=i.textContent.length,f=Math.min(s.start,u);s=s.end===void 0?f:Math.min(s.end,u),!e.extend&&f>s&&(u=s,s=f,f=u),u=Fc(i,f);var w=Fc(i,s);u&&w&&(e.rangeCount!==1||e.anchorNode!==u.node||e.anchorOffset!==u.offset||e.focusNode!==w.node||e.focusOffset!==w.offset)&&(n=n.createRange(),n.setStart(u.node,u.offset),e.removeAllRanges(),f>s?(e.addRange(n),e.extend(w.node,w.offset)):(n.setEnd(w.node,w.offset),e.addRange(n)))}}for(n=[],e=i;e=e.parentNode;)e.nodeType===1&&n.push({element:e,left:e.scrollLeft,top:e.scrollTop});for(typeof i.focus=="function"&&i.focus(),i=0;i=document.documentMode,Tr=null,Jl=null,Pi=null,ea=!1;function Bc(e,n,i){var s=i.window===i?i.document:i.nodeType===9?i:i.ownerDocument;ea||Tr==null||Tr!==me(s)||(s=Tr,"selectionStart"in s&&Zl(s)?s={start:s.selectionStart,end:s.selectionEnd}:(s=(s.ownerDocument&&s.ownerDocument.defaultView||window).getSelection(),s={anchorNode:s.anchorNode,anchorOffset:s.anchorOffset,focusNode:s.focusNode,focusOffset:s.focusOffset}),Pi&&Mi(Pi,s)||(Pi=s,s=Ko(Jl,"onSelect"),0$r||(e.current=fa[$r],fa[$r]=null,$r--)}function $e(e,n){$r++,fa[$r]=e.current,e.current=n}var zn={},at=Tn(zn),gt=Tn(!1),tr=zn;function Dr(e,n){var i=e.type.contextTypes;if(!i)return zn;var s=e.stateNode;if(s&&s.__reactInternalMemoizedUnmaskedChildContext===n)return s.__reactInternalMemoizedMaskedChildContext;var u={},f;for(f in i)u[f]=n[f];return s&&(e=e.stateNode,e.__reactInternalMemoizedUnmaskedChildContext=n,e.__reactInternalMemoizedMaskedChildContext=u),u}function mt(e){return e=e.childContextTypes,e!=null}function Jo(){Oe(gt),Oe(at)}function id(e,n,i){if(at.current!==zn)throw Error(o(168));$e(at,n),$e(gt,i)}function od(e,n,i){var s=e.stateNode;if(n=n.childContextTypes,typeof s.getChildContext!="function")return i;s=s.getChildContext();for(var u in s)if(!(u in n))throw Error(o(108,ce(e)||"Unknown",u));return O({},i,s)}function es(e){return e=(e=e.stateNode)&&e.__reactInternalMemoizedMergedChildContext||zn,tr=at.current,$e(at,e),$e(gt,gt.current),!0}function sd(e,n,i){var s=e.stateNode;if(!s)throw Error(o(169));i?(e=od(e,n,tr),s.__reactInternalMemoizedMergedChildContext=e,Oe(gt),Oe(at),$e(at,e)):Oe(gt),$e(gt,i)}var fn=null,ts=!1,ha=!1;function ld(e){fn===null?fn=[e]:fn.push(e)}function Ym(e){ts=!0,ld(e)}function Rn(){if(!ha&&fn!==null){ha=!0;var e=0,n=Le;try{var i=fn;for(Le=1;e>=w,u-=w,hn=1<<32-Ct(n)+u|i<Ne?(rt=Ee,Ee=null):rt=Ee.sibling;var Re=ie(U,Ee,Y[Ne],ae);if(Re===null){Ee===null&&(Ee=rt);break}e&&Ee&&Re.alternate===null&&n(U,Ee),D=f(Re,D,Ne),ke===null?xe=Re:ke.sibling=Re,ke=Re,Ee=rt}if(Ne===Y.length)return i(U,Ee),Fe&&rr(U,Ne),xe;if(Ee===null){for(;NeNe?(rt=Ee,Ee=null):rt=Ee.sibling;var Vn=ie(U,Ee,Re.value,ae);if(Vn===null){Ee===null&&(Ee=rt);break}e&&Ee&&Vn.alternate===null&&n(U,Ee),D=f(Vn,D,Ne),ke===null?xe=Vn:ke.sibling=Vn,ke=Vn,Ee=rt}if(Re.done)return i(U,Ee),Fe&&rr(U,Ne),xe;if(Ee===null){for(;!Re.done;Ne++,Re=Y.next())Re=le(U,Re.value,ae),Re!==null&&(D=f(Re,D,Ne),ke===null?xe=Re:ke.sibling=Re,ke=Re);return Fe&&rr(U,Ne),xe}for(Ee=s(U,Ee);!Re.done;Ne++,Re=Y.next())Re=fe(Ee,U,Ne,Re.value,ae),Re!==null&&(e&&Re.alternate!==null&&Ee.delete(Re.key===null?Ne:Re.key),D=f(Re,D,Ne),ke===null?xe=Re:ke.sibling=Re,ke=Re);return e&&Ee.forEach(function(C0){return n(U,C0)}),Fe&&rr(U,Ne),xe}function Ye(U,D,Y,ae){if(typeof Y=="object"&&Y!==null&&Y.type===H&&Y.key===null&&(Y=Y.props.children),typeof Y=="object"&&Y!==null){switch(Y.$$typeof){case b:e:{for(var xe=Y.key,ke=D;ke!==null;){if(ke.key===xe){if(xe=Y.type,xe===H){if(ke.tag===7){i(U,ke.sibling),D=u(ke,Y.props.children),D.return=U,U=D;break e}}else if(ke.elementType===xe||typeof xe=="object"&&xe!==null&&xe.$$typeof===F&&hd(xe)===ke.type){i(U,ke.sibling),D=u(ke,Y.props),D.ref=Ai(U,ke,Y),D.return=U,U=D;break e}i(U,ke);break}else n(U,ke);ke=ke.sibling}Y.type===H?(D=dr(Y.props.children,U.mode,ae,Y.key),D.return=U,U=D):(ae=Ps(Y.type,Y.key,Y.props,null,U.mode,ae),ae.ref=Ai(U,D,Y),ae.return=U,U=ae)}return w(U);case $:e:{for(ke=Y.key;D!==null;){if(D.key===ke)if(D.tag===4&&D.stateNode.containerInfo===Y.containerInfo&&D.stateNode.implementation===Y.implementation){i(U,D.sibling),D=u(D,Y.children||[]),D.return=U,U=D;break e}else{i(U,D);break}else n(U,D);D=D.sibling}D=cu(Y,U.mode,ae),D.return=U,U=D}return w(U);case F:return ke=Y._init,Ye(U,D,ke(Y._payload),ae)}if(Je(Y))return ge(U,D,Y,ae);if(L(Y))return ye(U,D,Y,ae);os(U,Y)}return typeof Y=="string"&&Y!==""||typeof Y=="number"?(Y=""+Y,D!==null&&D.tag===6?(i(U,D.sibling),D=u(D,Y),D.return=U,U=D):(i(U,D),D=uu(Y,U.mode,ae),D.return=U,U=D),w(U)):i(U,D)}return Ye}var Hr=pd(!0),gd=pd(!1),ss=Tn(null),ls=null,Vr=null,xa=null;function wa(){xa=Vr=ls=null}function Sa(e){var n=ss.current;Oe(ss),e._currentValue=n}function _a(e,n,i){for(;e!==null;){var s=e.alternate;if((e.childLanes&n)!==n?(e.childLanes|=n,s!==null&&(s.childLanes|=n)):s!==null&&(s.childLanes&n)!==n&&(s.childLanes|=n),e===i)break;e=e.return}}function Br(e,n){ls=e,xa=Vr=null,e=e.dependencies,e!==null&&e.firstContext!==null&&((e.lanes&n)!==0&&(yt=!0),e.firstContext=null)}function Dt(e){var n=e._currentValue;if(xa!==e)if(e={context:e,memoizedValue:n,next:null},Vr===null){if(ls===null)throw Error(o(308));Vr=e,ls.dependencies={lanes:0,firstContext:e}}else Vr=Vr.next=e;return n}var ir=null;function ka(e){ir===null?ir=[e]:ir.push(e)}function md(e,n,i,s){var u=n.interleaved;return u===null?(i.next=i,ka(n)):(i.next=u.next,u.next=i),n.interleaved=i,gn(e,s)}function gn(e,n){e.lanes|=n;var i=e.alternate;for(i!==null&&(i.lanes|=n),i=e,e=e.return;e!==null;)e.childLanes|=n,i=e.alternate,i!==null&&(i.childLanes|=n),i=e,e=e.return;return i.tag===3?i.stateNode:null}var Ln=!1;function Ea(e){e.updateQueue={baseState:e.memoizedState,firstBaseUpdate:null,lastBaseUpdate:null,shared:{pending:null,interleaved:null,lanes:0},effects:null}}function yd(e,n){e=e.updateQueue,n.updateQueue===e&&(n.updateQueue={baseState:e.baseState,firstBaseUpdate:e.firstBaseUpdate,lastBaseUpdate:e.lastBaseUpdate,shared:e.shared,effects:e.effects})}function mn(e,n){return{eventTime:e,lane:n,tag:0,payload:null,callback:null,next:null}}function An(e,n,i){var s=e.updateQueue;if(s===null)return null;if(s=s.shared,(Ie&2)!==0){var u=s.pending;return u===null?n.next=n:(n.next=u.next,u.next=n),s.pending=n,gn(e,i)}return u=s.interleaved,u===null?(n.next=n,ka(s)):(n.next=u.next,u.next=n),s.interleaved=n,gn(e,i)}function as(e,n,i){if(n=n.updateQueue,n!==null&&(n=n.shared,(i&4194240)!==0)){var s=n.lanes;s&=e.pendingLanes,i|=s,n.lanes=i,jr(e,i)}}function vd(e,n){var i=e.updateQueue,s=e.alternate;if(s!==null&&(s=s.updateQueue,i===s)){var u=null,f=null;if(i=i.firstBaseUpdate,i!==null){do{var w={eventTime:i.eventTime,lane:i.lane,tag:i.tag,payload:i.payload,callback:i.callback,next:null};f===null?u=f=w:f=f.next=w,i=i.next}while(i!==null);f===null?u=f=n:f=f.next=n}else u=f=n;i={baseState:s.baseState,firstBaseUpdate:u,lastBaseUpdate:f,shared:s.shared,effects:s.effects},e.updateQueue=i;return}e=i.lastBaseUpdate,e===null?i.firstBaseUpdate=n:e.next=n,i.lastBaseUpdate=n}function us(e,n,i,s){var u=e.updateQueue;Ln=!1;var f=u.firstBaseUpdate,w=u.lastBaseUpdate,I=u.shared.pending;if(I!==null){u.shared.pending=null;var R=I,G=R.next;R.next=null,w===null?f=G:w.next=G,w=R;var oe=e.alternate;oe!==null&&(oe=oe.updateQueue,I=oe.lastBaseUpdate,I!==w&&(I===null?oe.firstBaseUpdate=G:I.next=G,oe.lastBaseUpdate=R))}if(f!==null){var le=u.baseState;w=0,oe=G=R=null,I=f;do{var ie=I.lane,fe=I.eventTime;if((s&ie)===ie){oe!==null&&(oe=oe.next={eventTime:fe,lane:0,tag:I.tag,payload:I.payload,callback:I.callback,next:null});e:{var ge=e,ye=I;switch(ie=n,fe=i,ye.tag){case 1:if(ge=ye.payload,typeof ge=="function"){le=ge.call(fe,le,ie);break e}le=ge;break e;case 3:ge.flags=ge.flags&-65537|128;case 0:if(ge=ye.payload,ie=typeof ge=="function"?ge.call(fe,le,ie):ge,ie==null)break e;le=O({},le,ie);break e;case 2:Ln=!0}}I.callback!==null&&I.lane!==0&&(e.flags|=64,ie=u.effects,ie===null?u.effects=[I]:ie.push(I))}else fe={eventTime:fe,lane:ie,tag:I.tag,payload:I.payload,callback:I.callback,next:null},oe===null?(G=oe=fe,R=le):oe=oe.next=fe,w|=ie;if(I=I.next,I===null){if(I=u.shared.pending,I===null)break;ie=I,I=ie.next,ie.next=null,u.lastBaseUpdate=ie,u.shared.pending=null}}while(!0);if(oe===null&&(R=le),u.baseState=R,u.firstBaseUpdate=G,u.lastBaseUpdate=oe,n=u.shared.interleaved,n!==null){u=n;do w|=u.lane,u=u.next;while(u!==n)}else f===null&&(u.shared.lanes=0);lr|=w,e.lanes=w,e.memoizedState=le}}function xd(e,n,i){if(e=n.effects,n.effects=null,e!==null)for(n=0;ni?i:4,e(!0);var s=Pa.transition;Pa.transition={};try{e(!1),n()}finally{Le=i,Pa.transition=s}}function Od(){return Ot().memoizedState}function Gm(e,n,i){var s=bn(e);if(i={lane:s,action:i,hasEagerState:!1,eagerState:null,next:null},bd(e))Fd(n,i);else if(i=md(e,n,i,s),i!==null){var u=pt();Yt(i,e,s,u),Hd(i,n,s)}}function qm(e,n,i){var s=bn(e),u={lane:s,action:i,hasEagerState:!1,eagerState:null,next:null};if(bd(e))Fd(n,u);else{var f=e.alternate;if(e.lanes===0&&(f===null||f.lanes===0)&&(f=n.lastRenderedReducer,f!==null))try{var w=n.lastRenderedState,I=f(w,i);if(u.hasEagerState=!0,u.eagerState=I,Ht(I,w)){var R=n.interleaved;R===null?(u.next=u,ka(n)):(u.next=R.next,R.next=u),n.interleaved=u;return}}catch{}finally{}i=md(e,n,u,s),i!==null&&(u=pt(),Yt(i,e,s,u),Hd(i,n,s))}}function bd(e){var n=e.alternate;return e===Be||n!==null&&n===Be}function Fd(e,n){bi=fs=!0;var i=e.pending;i===null?n.next=n:(n.next=i.next,i.next=n),e.pending=n}function Hd(e,n,i){if((i&4194240)!==0){var s=n.lanes;s&=e.pendingLanes,i|=s,n.lanes=i,jr(e,i)}}var gs={readContext:Dt,useCallback:ut,useContext:ut,useEffect:ut,useImperativeHandle:ut,useInsertionEffect:ut,useLayoutEffect:ut,useMemo:ut,useReducer:ut,useRef:ut,useState:ut,useDebugValue:ut,useDeferredValue:ut,useTransition:ut,useMutableSource:ut,useSyncExternalStore:ut,useId:ut,unstable_isNewReconciler:!1},Zm={readContext:Dt,useCallback:function(e,n){return rn().memoizedState=[e,n===void 0?null:n],e},useContext:Dt,useEffect:Id,useImperativeHandle:function(e,n,i){return i=i!=null?i.concat([e]):null,hs(4194308,4,Rd.bind(null,n,e),i)},useLayoutEffect:function(e,n){return hs(4194308,4,e,n)},useInsertionEffect:function(e,n){return hs(4,2,e,n)},useMemo:function(e,n){var i=rn();return n=n===void 0?null:n,e=e(),i.memoizedState=[e,n],e},useReducer:function(e,n,i){var s=rn();return n=i!==void 0?i(n):n,s.memoizedState=s.baseState=n,e={pending:null,interleaved:null,lanes:0,dispatch:null,lastRenderedReducer:e,lastRenderedState:n},s.queue=e,e=e.dispatch=Gm.bind(null,Be,e),[s.memoizedState,e]},useRef:function(e){var n=rn();return e={current:e},n.memoizedState=e},useState:Md,useDebugValue:$a,useDeferredValue:function(e){return rn().memoizedState=e},useTransition:function(){var e=Md(!1),n=e[0];return e=Km.bind(null,e[1]),rn().memoizedState=e,[n,e]},useMutableSource:function(){},useSyncExternalStore:function(e,n,i){var s=Be,u=rn();if(Fe){if(i===void 0)throw Error(o(407));i=i()}else{if(i=n(),nt===null)throw Error(o(349));(sr&30)!==0||kd(s,n,i)}u.memoizedState=i;var f={value:i,getSnapshot:n};return u.queue=f,Id(Nd.bind(null,s,f,e),[e]),s.flags|=2048,Vi(9,Ed.bind(null,s,f,i,n),void 0,null),i},useId:function(){var e=rn(),n=nt.identifierPrefix;if(Fe){var i=pn,s=hn;i=(s&~(1<<32-Ct(s)-1)).toString(32)+i,n=":"+n+"R"+i,i=Fi++,0<\/script>",e=e.removeChild(e.firstChild)):typeof s.is=="string"?e=w.createElement(i,{is:s.is}):(e=w.createElement(i),i==="select"&&(w=e,s.multiple?w.multiple=!0:s.size&&(w.size=s.size))):e=w.createElementNS(e,i),e[tn]=n,e[Ri]=s,af(e,n,!1,!1),n.stateNode=e;e:{switch(w=li(i,s),i){case"dialog":De("cancel",e),De("close",e),u=s;break;case"iframe":case"object":case"embed":De("load",e),u=s;break;case"video":case"audio":for(u=0;uQr&&(n.flags|=128,s=!0,Bi(f,!1),n.lanes=4194304)}else{if(!s)if(e=cs(w),e!==null){if(n.flags|=128,s=!0,i=e.updateQueue,i!==null&&(n.updateQueue=i,n.flags|=4),Bi(f,!0),f.tail===null&&f.tailMode==="hidden"&&!w.alternate&&!Fe)return ct(n),null}else 2*He()-f.renderingStartTime>Qr&&i!==1073741824&&(n.flags|=128,s=!0,Bi(f,!1),n.lanes=4194304);f.isBackwards?(w.sibling=n.child,n.child=w):(i=f.last,i!==null?i.sibling=w:n.child=w,f.last=w)}return f.tail!==null?(n=f.tail,f.rendering=n,f.tail=n.sibling,f.renderingStartTime=He(),n.sibling=null,i=Ve.current,$e(Ve,s?i&1|2:i&1),n):(ct(n),null);case 22:case 23:return su(),s=n.memoizedState!==null,e!==null&&e.memoizedState!==null!==s&&(n.flags|=8192),s&&(n.mode&1)!==0?(It&1073741824)!==0&&(ct(n),n.subtreeFlags&6&&(n.flags|=8192)):ct(n),null;case 24:return null;case 25:return null}throw Error(o(156,n.tag))}function s0(e,n){switch(ga(n),n.tag){case 1:return mt(n.type)&&Jo(),e=n.flags,e&65536?(n.flags=e&-65537|128,n):null;case 3:return Ur(),Oe(gt),Oe(at),Ma(),e=n.flags,(e&65536)!==0&&(e&128)===0?(n.flags=e&-65537|128,n):null;case 5:return Ca(n),null;case 13:if(Oe(Ve),e=n.memoizedState,e!==null&&e.dehydrated!==null){if(n.alternate===null)throw Error(o(340));Fr()}return e=n.flags,e&65536?(n.flags=e&-65537|128,n):null;case 19:return Oe(Ve),null;case 4:return Ur(),null;case 10:return Sa(n.type._context),null;case 22:case 23:return su(),null;case 24:return null;default:return null}}var xs=!1,dt=!1,l0=typeof WeakSet=="function"?WeakSet:Set,he=null;function Yr(e,n){var i=e.ref;if(i!==null)if(typeof i=="function")try{i(null)}catch(s){We(e,n,s)}else i.current=null}function Qa(e,n,i){try{i()}catch(s){We(e,n,s)}}var df=!1;function a0(e,n){if(sa=bo,e=Vc(),Zl(e)){if("selectionStart"in e)var i={start:e.selectionStart,end:e.selectionEnd};else e:{i=(i=e.ownerDocument)&&i.defaultView||window;var s=i.getSelection&&i.getSelection();if(s&&s.rangeCount!==0){i=s.anchorNode;var u=s.anchorOffset,f=s.focusNode;s=s.focusOffset;try{i.nodeType,f.nodeType}catch{i=null;break e}var w=0,I=-1,R=-1,G=0,oe=0,le=e,ie=null;t:for(;;){for(var fe;le!==i||u!==0&&le.nodeType!==3||(I=w+u),le!==f||s!==0&&le.nodeType!==3||(R=w+s),le.nodeType===3&&(w+=le.nodeValue.length),(fe=le.firstChild)!==null;)ie=le,le=fe;for(;;){if(le===e)break t;if(ie===i&&++G===u&&(I=w),ie===f&&++oe===s&&(R=w),(fe=le.nextSibling)!==null)break;le=ie,ie=le.parentNode}le=fe}i=I===-1||R===-1?null:{start:I,end:R}}else i=null}i=i||{start:0,end:0}}else i=null;for(la={focusedElem:e,selectionRange:i},bo=!1,he=n;he!==null;)if(n=he,e=n.child,(n.subtreeFlags&1028)!==0&&e!==null)e.return=n,he=e;else for(;he!==null;){n=he;try{var ge=n.alternate;if((n.flags&1024)!==0)switch(n.tag){case 0:case 11:case 15:break;case 1:if(ge!==null){var ye=ge.memoizedProps,Ye=ge.memoizedState,U=n.stateNode,D=U.getSnapshotBeforeUpdate(n.elementType===n.type?ye:Bt(n.type,ye),Ye);U.__reactInternalSnapshotBeforeUpdate=D}break;case 3:var Y=n.stateNode.containerInfo;Y.nodeType===1?Y.textContent="":Y.nodeType===9&&Y.documentElement&&Y.removeChild(Y.documentElement);break;case 5:case 6:case 4:case 17:break;default:throw Error(o(163))}}catch(ae){We(n,n.return,ae)}if(e=n.sibling,e!==null){e.return=n.return,he=e;break}he=n.return}return ge=df,df=!1,ge}function Ui(e,n,i){var s=n.updateQueue;if(s=s!==null?s.lastEffect:null,s!==null){var u=s=s.next;do{if((u.tag&e)===e){var f=u.destroy;u.destroy=void 0,f!==void 0&&Qa(n,i,f)}u=u.next}while(u!==s)}}function ws(e,n){if(n=n.updateQueue,n=n!==null?n.lastEffect:null,n!==null){var i=n=n.next;do{if((i.tag&e)===e){var s=i.create;i.destroy=s()}i=i.next}while(i!==n)}}function Ka(e){var n=e.ref;if(n!==null){var i=e.stateNode;switch(e.tag){case 5:e=i;break;default:e=i}typeof n=="function"?n(e):n.current=e}}function ff(e){var n=e.alternate;n!==null&&(e.alternate=null,ff(n)),e.child=null,e.deletions=null,e.sibling=null,e.tag===5&&(n=e.stateNode,n!==null&&(delete n[tn],delete n[Ri],delete n[da],delete n[Um],delete n[Wm])),e.stateNode=null,e.return=null,e.dependencies=null,e.memoizedProps=null,e.memoizedState=null,e.pendingProps=null,e.stateNode=null,e.updateQueue=null}function hf(e){return e.tag===5||e.tag===3||e.tag===4}function pf(e){e:for(;;){for(;e.sibling===null;){if(e.return===null||hf(e.return))return null;e=e.return}for(e.sibling.return=e.return,e=e.sibling;e.tag!==5&&e.tag!==6&&e.tag!==18;){if(e.flags&2||e.child===null||e.tag===4)continue e;e.child.return=e,e=e.child}if(!(e.flags&2))return e.stateNode}}function Ga(e,n,i){var s=e.tag;if(s===5||s===6)e=e.stateNode,n?i.nodeType===8?i.parentNode.insertBefore(e,n):i.insertBefore(e,n):(i.nodeType===8?(n=i.parentNode,n.insertBefore(e,i)):(n=i,n.appendChild(e)),i=i._reactRootContainer,i!=null||n.onclick!==null||(n.onclick=qo));else if(s!==4&&(e=e.child,e!==null))for(Ga(e,n,i),e=e.sibling;e!==null;)Ga(e,n,i),e=e.sibling}function qa(e,n,i){var s=e.tag;if(s===5||s===6)e=e.stateNode,n?i.insertBefore(e,n):i.appendChild(e);else if(s!==4&&(e=e.child,e!==null))for(qa(e,n,i),e=e.sibling;e!==null;)qa(e,n,i),e=e.sibling}var ot=null,Ut=!1;function $n(e,n,i){for(i=i.child;i!==null;)gf(e,n,i),i=i.sibling}function gf(e,n,i){if(Nt&&typeof Nt.onCommitFiberUnmount=="function")try{Nt.onCommitFiberUnmount(Er,i)}catch{}switch(i.tag){case 5:dt||Yr(i,n);case 6:var s=ot,u=Ut;ot=null,$n(e,n,i),ot=s,Ut=u,ot!==null&&(Ut?(e=ot,i=i.stateNode,e.nodeType===8?e.parentNode.removeChild(i):e.removeChild(i)):ot.removeChild(i.stateNode));break;case 18:ot!==null&&(Ut?(e=ot,i=i.stateNode,e.nodeType===8?ca(e.parentNode,i):e.nodeType===1&&ca(e,i),_i(e)):ca(ot,i.stateNode));break;case 4:s=ot,u=Ut,ot=i.stateNode.containerInfo,Ut=!0,$n(e,n,i),ot=s,Ut=u;break;case 0:case 11:case 14:case 15:if(!dt&&(s=i.updateQueue,s!==null&&(s=s.lastEffect,s!==null))){u=s=s.next;do{var f=u,w=f.destroy;f=f.tag,w!==void 0&&((f&2)!==0||(f&4)!==0)&&Qa(i,n,w),u=u.next}while(u!==s)}$n(e,n,i);break;case 1:if(!dt&&(Yr(i,n),s=i.stateNode,typeof s.componentWillUnmount=="function"))try{s.props=i.memoizedProps,s.state=i.memoizedState,s.componentWillUnmount()}catch(I){We(i,n,I)}$n(e,n,i);break;case 21:$n(e,n,i);break;case 22:i.mode&1?(dt=(s=dt)||i.memoizedState!==null,$n(e,n,i),dt=s):$n(e,n,i);break;default:$n(e,n,i)}}function mf(e){var n=e.updateQueue;if(n!==null){e.updateQueue=null;var i=e.stateNode;i===null&&(i=e.stateNode=new l0),n.forEach(function(s){var u=y0.bind(null,e,s);i.has(s)||(i.add(s),s.then(u,u))})}}function Wt(e,n){var i=n.deletions;if(i!==null)for(var s=0;su&&(u=w),s&=~f}if(s=u,s=He()-s,s=(120>s?120:480>s?480:1080>s?1080:1920>s?1920:3e3>s?3e3:4320>s?4320:1960*c0(s/1960))-s,10e?16:e,On===null)var s=!1;else{if(e=On,On=null,Ns=0,(Ie&6)!==0)throw Error(o(331));var u=Ie;for(Ie|=4,he=e.current;he!==null;){var f=he,w=f.child;if((he.flags&16)!==0){var I=f.deletions;if(I!==null){for(var R=0;RHe()-eu?ur(e,0):Ja|=i),xt(e,n)}function Pf(e,n){n===0&&((e.mode&1)===0?n=1:(n=Cr,Cr<<=1,(Cr&130023424)===0&&(Cr=4194304)));var i=pt();e=gn(e,n),e!==null&&(Jn(e,n,i),xt(e,i))}function m0(e){var n=e.memoizedState,i=0;n!==null&&(i=n.retryLane),Pf(e,i)}function y0(e,n){var i=0;switch(e.tag){case 13:var s=e.stateNode,u=e.memoizedState;u!==null&&(i=u.retryLane);break;case 19:s=e.stateNode;break;default:throw Error(o(314))}s!==null&&s.delete(n),Pf(e,i)}var If;If=function(e,n,i){if(e!==null)if(e.memoizedProps!==n.pendingProps||gt.current)yt=!0;else{if((e.lanes&i)===0&&(n.flags&128)===0)return yt=!1,i0(e,n,i);yt=(e.flags&131072)!==0}else yt=!1,Fe&&(n.flags&1048576)!==0&&ad(n,rs,n.index);switch(n.lanes=0,n.tag){case 2:var s=n.type;vs(e,n),e=n.pendingProps;var u=Dr(n,at.current);Br(n,i),u=Ta(null,n,s,e,u,i);var f=za();return n.flags|=1,typeof u=="object"&&u!==null&&typeof u.render=="function"&&u.$$typeof===void 0?(n.tag=1,n.memoizedState=null,n.updateQueue=null,mt(s)?(f=!0,es(n)):f=!1,n.memoizedState=u.state!==null&&u.state!==void 0?u.state:null,Ea(n),u.updater=ms,n.stateNode=u,u._reactInternals=n,Oa(n,s,e,i),n=Va(null,n,s,!0,f,i)):(n.tag=0,Fe&&f&&pa(n),ht(null,n,u,i),n=n.child),n;case 16:s=n.elementType;e:{switch(vs(e,n),e=n.pendingProps,u=s._init,s=u(s._payload),n.type=s,u=n.tag=x0(s),e=Bt(s,e),u){case 0:n=Ha(null,n,s,e,i);break e;case 1:n=tf(null,n,s,e,i);break e;case 11:n=Gd(null,n,s,e,i);break e;case 14:n=qd(null,n,s,Bt(s.type,e),i);break e}throw Error(o(306,s,""))}return n;case 0:return s=n.type,u=n.pendingProps,u=n.elementType===s?u:Bt(s,u),Ha(e,n,s,u,i);case 1:return s=n.type,u=n.pendingProps,u=n.elementType===s?u:Bt(s,u),tf(e,n,s,u,i);case 3:e:{if(nf(n),e===null)throw Error(o(387));s=n.pendingProps,f=n.memoizedState,u=f.element,yd(e,n),us(n,s,null,i);var w=n.memoizedState;if(s=w.element,f.isDehydrated)if(f={element:s,isDehydrated:!1,cache:w.cache,pendingSuspenseBoundaries:w.pendingSuspenseBoundaries,transitions:w.transitions},n.updateQueue.baseState=f,n.memoizedState=f,n.flags&256){u=Wr(Error(o(423)),n),n=rf(e,n,s,i,u);break e}else if(s!==u){u=Wr(Error(o(424)),n),n=rf(e,n,s,i,u);break e}else for(Pt=In(n.stateNode.containerInfo.firstChild),Mt=n,Fe=!0,Vt=null,i=gd(n,null,s,i),n.child=i;i;)i.flags=i.flags&-3|4096,i=i.sibling;else{if(Fr(),s===u){n=yn(e,n,i);break e}ht(e,n,s,i)}n=n.child}return n;case 5:return wd(n),e===null&&ya(n),s=n.type,u=n.pendingProps,f=e!==null?e.memoizedProps:null,w=u.children,aa(s,u)?w=null:f!==null&&aa(s,f)&&(n.flags|=32),ef(e,n),ht(e,n,w,i),n.child;case 6:return e===null&&ya(n),null;case 13:return of(e,n,i);case 4:return Na(n,n.stateNode.containerInfo),s=n.pendingProps,e===null?n.child=Hr(n,null,s,i):ht(e,n,s,i),n.child;case 11:return s=n.type,u=n.pendingProps,u=n.elementType===s?u:Bt(s,u),Gd(e,n,s,u,i);case 7:return ht(e,n,n.pendingProps,i),n.child;case 8:return ht(e,n,n.pendingProps.children,i),n.child;case 12:return ht(e,n,n.pendingProps.children,i),n.child;case 10:e:{if(s=n.type._context,u=n.pendingProps,f=n.memoizedProps,w=u.value,$e(ss,s._currentValue),s._currentValue=w,f!==null)if(Ht(f.value,w)){if(f.children===u.children&&!gt.current){n=yn(e,n,i);break e}}else for(f=n.child,f!==null&&(f.return=n);f!==null;){var I=f.dependencies;if(I!==null){w=f.child;for(var R=I.firstContext;R!==null;){if(R.context===s){if(f.tag===1){R=mn(-1,i&-i),R.tag=2;var G=f.updateQueue;if(G!==null){G=G.shared;var oe=G.pending;oe===null?R.next=R:(R.next=oe.next,oe.next=R),G.pending=R}}f.lanes|=i,R=f.alternate,R!==null&&(R.lanes|=i),_a(f.return,i,n),I.lanes|=i;break}R=R.next}}else if(f.tag===10)w=f.type===n.type?null:f.child;else if(f.tag===18){if(w=f.return,w===null)throw Error(o(341));w.lanes|=i,I=w.alternate,I!==null&&(I.lanes|=i),_a(w,i,n),w=f.sibling}else w=f.child;if(w!==null)w.return=f;else for(w=f;w!==null;){if(w===n){w=null;break}if(f=w.sibling,f!==null){f.return=w.return,w=f;break}w=w.return}f=w}ht(e,n,u.children,i),n=n.child}return n;case 9:return u=n.type,s=n.pendingProps.children,Br(n,i),u=Dt(u),s=s(u),n.flags|=1,ht(e,n,s,i),n.child;case 14:return s=n.type,u=Bt(s,n.pendingProps),u=Bt(s.type,u),qd(e,n,s,u,i);case 15:return Zd(e,n,n.type,n.pendingProps,i);case 17:return s=n.type,u=n.pendingProps,u=n.elementType===s?u:Bt(s,u),vs(e,n),n.tag=1,mt(s)?(e=!0,es(n)):e=!1,Br(n,i),Bd(n,s,u),Oa(n,s,u,i),Va(null,n,s,!0,e,i);case 19:return lf(e,n,i);case 22:return Jd(e,n,i)}throw Error(o(156,n.tag))};function Tf(e,n){return Io(e,n)}function v0(e,n,i,s){this.tag=e,this.key=i,this.sibling=this.child=this.return=this.stateNode=this.type=this.elementType=null,this.index=0,this.ref=null,this.pendingProps=n,this.dependencies=this.memoizedState=this.updateQueue=this.memoizedProps=null,this.mode=s,this.subtreeFlags=this.flags=0,this.deletions=null,this.childLanes=this.lanes=0,this.alternate=null}function Ft(e,n,i,s){return new v0(e,n,i,s)}function au(e){return e=e.prototype,!(!e||!e.isReactComponent)}function x0(e){if(typeof e=="function")return au(e)?1:0;if(e!=null){if(e=e.$$typeof,e===te)return 11;if(e===B)return 14}return 2}function Hn(e,n){var i=e.alternate;return i===null?(i=Ft(e.tag,n,e.key,e.mode),i.elementType=e.elementType,i.type=e.type,i.stateNode=e.stateNode,i.alternate=e,e.alternate=i):(i.pendingProps=n,i.type=e.type,i.flags=0,i.subtreeFlags=0,i.deletions=null),i.flags=e.flags&14680064,i.childLanes=e.childLanes,i.lanes=e.lanes,i.child=e.child,i.memoizedProps=e.memoizedProps,i.memoizedState=e.memoizedState,i.updateQueue=e.updateQueue,n=e.dependencies,i.dependencies=n===null?null:{lanes:n.lanes,firstContext:n.firstContext},i.sibling=e.sibling,i.index=e.index,i.ref=e.ref,i}function Ps(e,n,i,s,u,f){var w=2;if(s=e,typeof e=="function")au(e)&&(w=1);else if(typeof e=="string")w=5;else e:switch(e){case H:return dr(i.children,u,f,n);case X:w=8,u|=8;break;case K:return e=Ft(12,i,n,u|2),e.elementType=K,e.lanes=f,e;case J:return e=Ft(13,i,n,u),e.elementType=J,e.lanes=f,e;case C:return e=Ft(19,i,n,u),e.elementType=C,e.lanes=f,e;case V:return Is(i,u,f,n);default:if(typeof e=="object"&&e!==null)switch(e.$$typeof){case ne:w=10;break e;case Z:w=9;break e;case te:w=11;break e;case B:w=14;break e;case F:w=16,s=null;break e}throw Error(o(130,e==null?e:typeof e,""))}return n=Ft(w,i,n,u),n.elementType=e,n.type=s,n.lanes=f,n}function dr(e,n,i,s){return e=Ft(7,e,s,n),e.lanes=i,e}function Is(e,n,i,s){return e=Ft(22,e,s,n),e.elementType=V,e.lanes=i,e.stateNode={isHidden:!1},e}function uu(e,n,i){return e=Ft(6,e,null,n),e.lanes=i,e}function cu(e,n,i){return n=Ft(4,e.children!==null?e.children:[],e.key,n),n.lanes=i,n.stateNode={containerInfo:e.containerInfo,pendingChildren:null,implementation:e.implementation},n}function w0(e,n,i,s,u){this.tag=n,this.containerInfo=e,this.finishedWork=this.pingCache=this.current=this.pendingChildren=null,this.timeoutHandle=-1,this.callbackNode=this.pendingContext=this.context=null,this.callbackPriority=0,this.eventTimes=Zn(0),this.expirationTimes=Zn(-1),this.entangledLanes=this.finishedLanes=this.mutableReadLanes=this.expiredLanes=this.pingedLanes=this.suspendedLanes=this.pendingLanes=0,this.entanglements=Zn(0),this.identifierPrefix=s,this.onRecoverableError=u,this.mutableSourceEagerHydrationData=null}function du(e,n,i,s,u,f,w,I,R){return e=new w0(e,n,i,I,R),n===1?(n=1,f===!0&&(n|=8)):n=0,f=Ft(3,null,null,n),e.current=f,f.stateNode=e,f.memoizedState={element:s,isDehydrated:i,cache:null,transitions:null,pendingSuspenseBoundaries:null},Ea(f),e}function S0(e,n,i){var s=3"u"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!="function"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(t)}catch(r){console.error(r)}}return t(),yu.exports=R0(),yu.exports}var Wf;function L0(){if(Wf)return Ds;Wf=1;var t=rp();return Ds.createRoot=t.createRoot,Ds.hydrateRoot=t.hydrateRoot,Ds}var A0=L0();async function Tt(t,r){const o=await fetch(t,{...r,headers:{"Content-Type":"application/json",...(r==null?void 0:r.headers)||{}}});if(!o.ok){const l=await o.text();throw new Error(l||o.statusText)}return o.json()}const St={health:()=>Tt("/api/health"),settings:()=>Tt("/api/settings"),saveSettings:t=>Tt("/api/settings",{method:"PUT",body:JSON.stringify(t)}),repos:()=>Tt("/api/repos"),index:(t,r=!0)=>Tt("/api/index",{method:"POST",body:JSON.stringify({repo_path:t,incremental:r})}),indexStatus:t=>Tt(`/api/index?repo_path=${encodeURIComponent(t)}`),architecture:t=>Tt(`/api/architecture?repo_path=${encodeURIComponent(t)}`),review:(t,r,o,l=!0)=>Tt("/api/review",{method:"POST",body:JSON.stringify({repo_path:t,base:r,head:o||null,reindex:l,incremental:!0,three_dot:!0})}),init:(t,r=!1)=>Tt("/api/init",{method:"POST",body:JSON.stringify({repo_path:t,overwrite:r})}),postComment:(t,r,o,l)=>Tt("/api/prs/comment",{method:"POST",body:JSON.stringify({provider:t,repo:r,number:o,markdown:l})}),graph:(t,r="full")=>Tt(`/api/graph?repo_path=${encodeURIComponent(t)}&scope=${r}`),prs:(t,r,o="open")=>Tt("/api/prs",{method:"POST",body:JSON.stringify({provider:t,repo:r,state:o})}),residual:t=>Tt("/api/ai/residual",{method:"POST",body:JSON.stringify({review:t})})};function $0(t){return t.replaceAll("_"," ")}function Qu(t){return t.split(".").pop()||t}function D0(t){if(!t)return"";const r=new Date(t);return Number.isNaN(r.getTime())?t:r.toLocaleString()}function O0(t){return t.split(/[\\/]/).filter(Boolean).pop()||t}function ho({className:t,children:r}){return x.jsx("svg",{className:t,width:"16",height:"16",viewBox:"0 0 16 16",fill:"none",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round","aria-hidden":"true",children:r})}function b0({className:t}){return x.jsxs(ho,{className:t,children:[x.jsx("path",{d:"M3 3.5h6.5L13 7v5.5H3z"}),x.jsx("path",{d:"M9.5 3.5V7H13"}),x.jsx("path",{d:"M5.5 9.5h5M5.5 11.5h3.5"})]})}function F0({className:t}){return x.jsxs(ho,{className:t,children:[x.jsx("rect",{x:"2.5",y:"2.5",width:"4.5",height:"4.5",rx:"0.8"}),x.jsx("rect",{x:"9",y:"2.5",width:"4.5",height:"4.5",rx:"0.8"}),x.jsx("rect",{x:"2.5",y:"9",width:"4.5",height:"4.5",rx:"0.8"}),x.jsx("rect",{x:"9",y:"9",width:"4.5",height:"4.5",rx:"0.8"})]})}function H0({className:t}){return x.jsxs(ho,{className:t,children:[x.jsx("circle",{cx:"4",cy:"8",r:"1.6"}),x.jsx("circle",{cx:"12",cy:"4",r:"1.6"}),x.jsx("circle",{cx:"12",cy:"12",r:"1.6"}),x.jsx("path",{d:"M5.5 7.2 10.4 4.8M5.5 8.8 10.4 11.2"})]})}function V0({className:t}){return x.jsxs(ho,{className:t,children:[x.jsx("circle",{cx:"4.5",cy:"4",r:"1.4"}),x.jsx("circle",{cx:"4.5",cy:"12",r:"1.4"}),x.jsx("circle",{cx:"11.5",cy:"12",r:"1.4"}),x.jsx("path",{d:"M4.5 5.5v5M4.5 8h4.2a3 3 0 0 1 3 3"})]})}function B0({className:t}){return x.jsxs(ho,{className:t,children:[x.jsx("circle",{cx:"8",cy:"8",r:"2.1"}),x.jsx("path",{d:"M8 2.5v1.6M8 11.9v1.6M2.5 8h1.6M11.9 8h1.6M4.1 4.1l1.1 1.1M10.8 10.8l1.1 1.1M11.9 4.1l-1.1 1.1M5.2 10.8l-1.1 1.1"})]})}function Qe(t){if(typeof t=="string"||typeof t=="number")return""+t;let r="";if(Array.isArray(t))for(let o=0,l;o{}};function dl(){for(var t=0,r=arguments.length,o={},l;t=0&&(l=o.slice(a+1),o=o.slice(0,a)),o&&!r.hasOwnProperty(o))throw new Error("unknown type: "+o);return{type:o,name:l}})}Xs.prototype=dl.prototype={constructor:Xs,on:function(t,r){var o=this._,l=W0(t+"",o),a,c=-1,d=l.length;if(arguments.length<2){for(;++c0)for(var o=new Array(a),l=0,a,c;l=0&&(r=t.slice(0,o))!=="xmlns"&&(t=t.slice(o+1)),Xf.hasOwnProperty(r)?{space:Xf[r],local:t}:t}function X0(t){return function(){var r=this.ownerDocument,o=this.namespaceURI;return o===Lu&&r.documentElement.namespaceURI===Lu?r.createElement(t):r.createElementNS(o,t)}}function Q0(t){return function(){return this.ownerDocument.createElementNS(t.space,t.local)}}function ip(t){var r=fl(t);return(r.local?Q0:X0)(r)}function K0(){}function Ku(t){return t==null?K0:function(){return this.querySelector(t)}}function G0(t){typeof t!="function"&&(t=Ku(t));for(var r=this._groups,o=r.length,l=new Array(o),a=0;a=N&&(N=z+1);!(b=k[N])&&++N<_;);P._next=b||null}}return d=new Rt(d,l),d._enter=h,d._exit=p,d}function my(t){return typeof t=="object"&&"length"in t?t:Array.from(t)}function yy(){return new Rt(this._exit||this._groups.map(ap),this._parents)}function vy(t,r,o){var l=this.enter(),a=this,c=this.exit();return typeof t=="function"?(l=t(l),l&&(l=l.selection())):l=l.append(t+""),r!=null&&(a=r(a),a&&(a=a.selection())),o==null?c.remove():o(c),l&&a?l.merge(a).order():a}function xy(t){for(var r=t.selection?t.selection():t,o=this._groups,l=r._groups,a=o.length,c=l.length,d=Math.min(a,c),h=new Array(a),p=0;p=0;)(d=l[a])&&(c&&d.compareDocumentPosition(c)^4&&c.parentNode.insertBefore(d,c),c=d);return this}function Sy(t){t||(t=_y);function r(v,g){return v&&g?t(v.__data__,g.__data__):!v-!g}for(var o=this._groups,l=o.length,a=new Array(l),c=0;cr?1:t>=r?0:NaN}function ky(){var t=arguments[0];return arguments[0]=this,t.apply(null,arguments),this}function Ey(){return Array.from(this)}function Ny(){for(var t=this._groups,r=0,o=t.length;r1?this.each((r==null?$y:typeof r=="function"?Oy:Dy)(t,r,o??"")):ei(this.node(),t)}function ei(t,r){return t.style.getPropertyValue(r)||up(t).getComputedStyle(t,null).getPropertyValue(r)}function Fy(t){return function(){delete this[t]}}function Hy(t,r){return function(){this[t]=r}}function Vy(t,r){return function(){var o=r.apply(this,arguments);o==null?delete this[t]:this[t]=o}}function By(t,r){return arguments.length>1?this.each((r==null?Fy:typeof r=="function"?Vy:Hy)(t,r)):this.node()[t]}function cp(t){return t.trim().split(/^|\s+/)}function Gu(t){return t.classList||new dp(t)}function dp(t){this._node=t,this._names=cp(t.getAttribute("class")||"")}dp.prototype={add:function(t){var r=this._names.indexOf(t);r<0&&(this._names.push(t),this._node.setAttribute("class",this._names.join(" ")))},remove:function(t){var r=this._names.indexOf(t);r>=0&&(this._names.splice(r,1),this._node.setAttribute("class",this._names.join(" ")))},contains:function(t){return this._names.indexOf(t)>=0}};function fp(t,r){for(var o=Gu(t),l=-1,a=r.length;++l=0&&(o=r.slice(l+1),r=r.slice(0,l)),{type:r,name:o}})}function yv(t){return function(){var r=this.__on;if(r){for(var o=0,l=-1,a=r.length,c;o()=>t;function Au(t,{sourceEvent:r,subject:o,target:l,identifier:a,active:c,x:d,y:h,dx:p,dy:y,dispatch:m}){Object.defineProperties(this,{type:{value:t,enumerable:!0,configurable:!0},sourceEvent:{value:r,enumerable:!0,configurable:!0},subject:{value:o,enumerable:!0,configurable:!0},target:{value:l,enumerable:!0,configurable:!0},identifier:{value:a,enumerable:!0,configurable:!0},active:{value:c,enumerable:!0,configurable:!0},x:{value:d,enumerable:!0,configurable:!0},y:{value:h,enumerable:!0,configurable:!0},dx:{value:p,enumerable:!0,configurable:!0},dy:{value:y,enumerable:!0,configurable:!0},_:{value:m}})}Au.prototype.on=function(){var t=this._.on.apply(this._,arguments);return t===this._?this:t};function jv(t){return!t.ctrlKey&&!t.button}function Mv(){return this.parentNode}function Pv(t,r){return r??{x:t.x,y:t.y}}function Iv(){return navigator.maxTouchPoints||"ontouchstart"in this}function vp(){var t=jv,r=Mv,o=Pv,l=Iv,a={},c=dl("start","drag","end"),d=0,h,p,y,m,v=0;function g(P){P.on("mousedown.drag",S).filter(l).on("touchstart.drag",k).on("touchmove.drag",E,Cv).on("touchend.drag touchcancel.drag",z).style("touch-action","none").style("-webkit-tap-highlight-color","rgba(0,0,0,0)")}function S(P,b){if(!(m||!t.call(this,P,b))){var $=N(this,r.call(this,P,b),P,b,"mouse");$&&(zt(P.view).on("mousemove.drag",_,no).on("mouseup.drag",M,no),mp(P.view),wu(P),y=!1,h=P.clientX,p=P.clientY,$("start",P))}}function _(P){if(Zr(P),!y){var b=P.clientX-h,$=P.clientY-p;y=b*b+$*$>v}a.mouse("drag",P)}function M(P){zt(P.view).on("mousemove.drag mouseup.drag",null),yp(P.view,y),Zr(P),a.mouse("end",P)}function k(P,b){if(t.call(this,P,b)){var $=P.changedTouches,H=r.call(this,P,b),X=$.length,K,ne;for(K=0;K>8&15|r>>4&240,r>>4&15|r&240,(r&15)<<4|r&15,1):o===8?bs(r>>24&255,r>>16&255,r>>8&255,(r&255)/255):o===4?bs(r>>12&15|r>>8&240,r>>8&15|r>>4&240,r>>4&15|r&240,((r&15)<<4|r&15)/255):null):(r=zv.exec(t))?new _t(r[1],r[2],r[3],1):(r=Rv.exec(t))?new _t(r[1]*255/100,r[2]*255/100,r[3]*255/100,1):(r=Lv.exec(t))?bs(r[1],r[2],r[3],r[4]):(r=Av.exec(t))?bs(r[1]*255/100,r[2]*255/100,r[3]*255/100,r[4]):(r=$v.exec(t))?eh(r[1],r[2]/100,r[3]/100,1):(r=Dv.exec(t))?eh(r[1],r[2]/100,r[3]/100,r[4]):Qf.hasOwnProperty(t)?qf(Qf[t]):t==="transparent"?new _t(NaN,NaN,NaN,0):null}function qf(t){return new _t(t>>16&255,t>>8&255,t&255,1)}function bs(t,r,o,l){return l<=0&&(t=r=o=NaN),new _t(t,r,o,l)}function Fv(t){return t instanceof go||(t=mr(t)),t?(t=t.rgb(),new _t(t.r,t.g,t.b,t.opacity)):new _t}function $u(t,r,o,l){return arguments.length===1?Fv(t):new _t(t,r,o,l??1)}function _t(t,r,o,l){this.r=+t,this.g=+r,this.b=+o,this.opacity=+l}qu(_t,$u,xp(go,{brighter(t){return t=t==null?Js:Math.pow(Js,t),new _t(this.r*t,this.g*t,this.b*t,this.opacity)},darker(t){return t=t==null?ro:Math.pow(ro,t),new _t(this.r*t,this.g*t,this.b*t,this.opacity)},rgb(){return this},clamp(){return new _t(pr(this.r),pr(this.g),pr(this.b),el(this.opacity))},displayable(){return-.5<=this.r&&this.r<255.5&&-.5<=this.g&&this.g<255.5&&-.5<=this.b&&this.b<255.5&&0<=this.opacity&&this.opacity<=1},hex:Zf,formatHex:Zf,formatHex8:Hv,formatRgb:Jf,toString:Jf}));function Zf(){return`#${hr(this.r)}${hr(this.g)}${hr(this.b)}`}function Hv(){return`#${hr(this.r)}${hr(this.g)}${hr(this.b)}${hr((isNaN(this.opacity)?1:this.opacity)*255)}`}function Jf(){const t=el(this.opacity);return`${t===1?"rgb(":"rgba("}${pr(this.r)}, ${pr(this.g)}, ${pr(this.b)}${t===1?")":`, ${t})`}`}function el(t){return isNaN(t)?1:Math.max(0,Math.min(1,t))}function pr(t){return Math.max(0,Math.min(255,Math.round(t)||0))}function hr(t){return t=pr(t),(t<16?"0":"")+t.toString(16)}function eh(t,r,o,l){return l<=0?t=r=o=NaN:o<=0||o>=1?t=r=NaN:r<=0&&(t=NaN),new Qt(t,r,o,l)}function wp(t){if(t instanceof Qt)return new Qt(t.h,t.s,t.l,t.opacity);if(t instanceof go||(t=mr(t)),!t)return new Qt;if(t instanceof Qt)return t;t=t.rgb();var r=t.r/255,o=t.g/255,l=t.b/255,a=Math.min(r,o,l),c=Math.max(r,o,l),d=NaN,h=c-a,p=(c+a)/2;return h?(r===c?d=(o-l)/h+(o0&&p<1?0:d,new Qt(d,h,p,t.opacity)}function Vv(t,r,o,l){return arguments.length===1?wp(t):new Qt(t,r,o,l??1)}function Qt(t,r,o,l){this.h=+t,this.s=+r,this.l=+o,this.opacity=+l}qu(Qt,Vv,xp(go,{brighter(t){return t=t==null?Js:Math.pow(Js,t),new Qt(this.h,this.s,this.l*t,this.opacity)},darker(t){return t=t==null?ro:Math.pow(ro,t),new Qt(this.h,this.s,this.l*t,this.opacity)},rgb(){var t=this.h%360+(this.h<0)*360,r=isNaN(t)||isNaN(this.s)?0:this.s,o=this.l,l=o+(o<.5?o:1-o)*r,a=2*o-l;return new _t(Su(t>=240?t-240:t+120,a,l),Su(t,a,l),Su(t<120?t+240:t-120,a,l),this.opacity)},clamp(){return new Qt(th(this.h),Fs(this.s),Fs(this.l),el(this.opacity))},displayable(){return(0<=this.s&&this.s<=1||isNaN(this.s))&&0<=this.l&&this.l<=1&&0<=this.opacity&&this.opacity<=1},formatHsl(){const t=el(this.opacity);return`${t===1?"hsl(":"hsla("}${th(this.h)}, ${Fs(this.s)*100}%, ${Fs(this.l)*100}%${t===1?")":`, ${t})`}`}}));function th(t){return t=(t||0)%360,t<0?t+360:t}function Fs(t){return Math.max(0,Math.min(1,t||0))}function Su(t,r,o){return(t<60?r+(o-r)*t/60:t<180?o:t<240?r+(o-r)*(240-t)/60:r)*255}const Zu=t=>()=>t;function Bv(t,r){return function(o){return t+o*r}}function Uv(t,r,o){return t=Math.pow(t,o),r=Math.pow(r,o)-t,o=1/o,function(l){return Math.pow(t+l*r,o)}}function Wv(t){return(t=+t)==1?Sp:function(r,o){return o-r?Uv(r,o,t):Zu(isNaN(r)?o:r)}}function Sp(t,r){var o=r-t;return o?Bv(t,o):Zu(isNaN(t)?r:t)}const tl=(function t(r){var o=Wv(r);function l(a,c){var d=o((a=$u(a)).r,(c=$u(c)).r),h=o(a.g,c.g),p=o(a.b,c.b),y=Sp(a.opacity,c.opacity);return function(m){return a.r=d(m),a.g=h(m),a.b=p(m),a.opacity=y(m),a+""}}return l.gamma=t,l})(1);function Yv(t,r){r||(r=[]);var o=t?Math.min(r.length,t.length):0,l=r.slice(),a;return function(c){for(a=0;ao&&(c=r.slice(o,c),h[d]?h[d]+=c:h[++d]=c),(l=l[0])===(a=a[0])?h[d]?h[d]+=a:h[++d]=a:(h[++d]=null,p.push({i:d,x:sn(l,a)})),o=_u.lastIndex;return o180?m+=360:m-y>180&&(y+=360),g.push({i:v.push(a(v)+"rotate(",null,l)-2,x:sn(y,m)})):m&&v.push(a(v)+"rotate("+m+l)}function h(y,m,v,g){y!==m?g.push({i:v.push(a(v)+"skewX(",null,l)-2,x:sn(y,m)}):m&&v.push(a(v)+"skewX("+m+l)}function p(y,m,v,g,S,_){if(y!==v||m!==g){var M=S.push(a(S)+"scale(",null,",",null,")");_.push({i:M-4,x:sn(y,v)},{i:M-2,x:sn(m,g)})}else(v!==1||g!==1)&&S.push(a(S)+"scale("+v+","+g+")")}return function(y,m){var v=[],g=[];return y=t(y),m=t(m),c(y.translateX,y.translateY,m.translateX,m.translateY,v,g),d(y.rotate,m.rotate,v,g),h(y.skewX,m.skewX,v,g),p(y.scaleX,y.scaleY,m.scaleX,m.scaleY,v,g),y=m=null,function(S){for(var _=-1,M=g.length,k;++_=0&&t._call.call(void 0,r),t=t._next;--ti}function ih(){yr=(rl=oo.now())+hl,ti=Zi=0;try{lx()}finally{ti=0,ux(),yr=0}}function ax(){var t=oo.now(),r=t-rl;r>Np&&(hl-=r,rl=t)}function ux(){for(var t,r=nl,o,l=1/0;r;)r._call?(l>r._time&&(l=r._time),t=r,r=r._next):(o=r._next,r._next=null,r=t?t._next=o:nl=o);Ji=t,bu(l)}function bu(t){if(!ti){Zi&&(Zi=clearTimeout(Zi));var r=t-yr;r>24?(t<1/0&&(Zi=setTimeout(ih,t-oo.now()-hl)),Gi&&(Gi=clearInterval(Gi))):(Gi||(rl=oo.now(),Gi=setInterval(ax,Np)),ti=1,Cp(ih))}}function oh(t,r,o){var l=new il;return r=r==null?0:+r,l.restart(a=>{l.stop(),t(a+r)},r,o),l}var cx=dl("start","end","cancel","interrupt"),dx=[],Mp=0,sh=1,Fu=2,Ks=3,lh=4,Hu=5,Gs=6;function pl(t,r,o,l,a,c){var d=t.__transition;if(!d)t.__transition={};else if(o in d)return;fx(t,o,{name:r,index:l,group:a,on:cx,tween:dx,time:c.time,delay:c.delay,duration:c.duration,ease:c.ease,timer:null,state:Mp})}function ec(t,r){var o=Zt(t,r);if(o.state>Mp)throw new Error("too late; already scheduled");return o}function an(t,r){var o=Zt(t,r);if(o.state>Ks)throw new Error("too late; already running");return o}function Zt(t,r){var o=t.__transition;if(!o||!(o=o[r]))throw new Error("transition not found");return o}function fx(t,r,o){var l=t.__transition,a;l[r]=o,o.timer=jp(c,0,o.time);function c(y){o.state=sh,o.timer.restart(d,o.delay,o.time),o.delay<=y&&d(y-o.delay)}function d(y){var m,v,g,S;if(o.state!==sh)return p();for(m in l)if(S=l[m],S.name===o.name){if(S.state===Ks)return oh(d);S.state===lh?(S.state=Gs,S.timer.stop(),S.on.call("interrupt",t,t.__data__,S.index,S.group),delete l[m]):+mFu&&l.state=0&&(r=r.slice(0,o)),!r||r==="start"})}function Vx(t,r,o){var l,a,c=Hx(r)?ec:an;return function(){var d=c(this,t),h=d.on;h!==l&&(a=(l=h).copy()).on(r,o),d.on=a}}function Bx(t,r){var o=this._id;return arguments.length<2?Zt(this.node(),o).on.on(t):this.each(Vx(o,t,r))}function Ux(t){return function(){var r=this.parentNode;for(var o in this.__transition)if(+o!==t)return;r&&r.removeChild(this)}}function Wx(){return this.on("end.remove",Ux(this._id))}function Yx(t){var r=this._name,o=this._id;typeof t!="function"&&(t=Ku(t));for(var l=this._groups,a=l.length,c=new Array(a),d=0;d()=>t;function yw(t,{sourceEvent:r,target:o,transform:l,dispatch:a}){Object.defineProperties(this,{type:{value:t,enumerable:!0,configurable:!0},sourceEvent:{value:r,enumerable:!0,configurable:!0},target:{value:o,enumerable:!0,configurable:!0},transform:{value:l,enumerable:!0,configurable:!0},_:{value:a}})}function wn(t,r,o){this.k=t,this.x=r,this.y=o}wn.prototype={constructor:wn,scale:function(t){return t===1?this:new wn(this.k*t,this.x,this.y)},translate:function(t,r){return t===0&r===0?this:new wn(this.k,this.x+this.k*t,this.y+this.k*r)},apply:function(t){return[t[0]*this.k+this.x,t[1]*this.k+this.y]},applyX:function(t){return t*this.k+this.x},applyY:function(t){return t*this.k+this.y},invert:function(t){return[(t[0]-this.x)/this.k,(t[1]-this.y)/this.k]},invertX:function(t){return(t-this.x)/this.k},invertY:function(t){return(t-this.y)/this.k},rescaleX:function(t){return t.copy().domain(t.range().map(this.invertX,this).map(t.invert,t))},rescaleY:function(t){return t.copy().domain(t.range().map(this.invertY,this).map(t.invert,t))},toString:function(){return"translate("+this.x+","+this.y+") scale("+this.k+")"}};var gl=new wn(1,0,0);zp.prototype=wn.prototype;function zp(t){for(;!t.__zoom;)if(!(t=t.parentNode))return gl;return t.__zoom}function ku(t){t.stopImmediatePropagation()}function qi(t){t.preventDefault(),t.stopImmediatePropagation()}function vw(t){return(!t.ctrlKey||t.type==="wheel")&&!t.button}function xw(){var t=this;return t instanceof SVGElement?(t=t.ownerSVGElement||t,t.hasAttribute("viewBox")?(t=t.viewBox.baseVal,[[t.x,t.y],[t.x+t.width,t.y+t.height]]):[[0,0],[t.width.baseVal.value,t.height.baseVal.value]]):[[0,0],[t.clientWidth,t.clientHeight]]}function ah(){return this.__zoom||gl}function ww(t){return-t.deltaY*(t.deltaMode===1?.05:t.deltaMode?1:.002)*(t.ctrlKey?10:1)}function Sw(){return navigator.maxTouchPoints||"ontouchstart"in this}function _w(t,r,o){var l=t.invertX(r[0][0])-o[0][0],a=t.invertX(r[1][0])-o[1][0],c=t.invertY(r[0][1])-o[0][1],d=t.invertY(r[1][1])-o[1][1];return t.translate(a>l?(l+a)/2:Math.min(0,l)||Math.max(0,a),d>c?(c+d)/2:Math.min(0,c)||Math.max(0,d))}function Rp(){var t=vw,r=xw,o=_w,l=ww,a=Sw,c=[0,1/0],d=[[-1/0,-1/0],[1/0,1/0]],h=250,p=Qs,y=dl("start","zoom","end"),m,v,g,S=500,_=150,M=0,k=10;function E(C){C.property("__zoom",ah).on("wheel.zoom",X,{passive:!1}).on("mousedown.zoom",K).on("dblclick.zoom",ne).filter(a).on("touchstart.zoom",Z).on("touchmove.zoom",te).on("touchend.zoom touchcancel.zoom",J).style("-webkit-tap-highlight-color","rgba(0,0,0,0)")}E.transform=function(C,B,F,V){var A=C.selection?C.selection():C;A.property("__zoom",ah),C!==A?b(C,B,F,V):A.interrupt().each(function(){$(this,arguments).event(V).start().zoom(null,typeof B=="function"?B.apply(this,arguments):B).end()})},E.scaleBy=function(C,B,F,V){E.scaleTo(C,function(){var A=this.__zoom.k,L=typeof B=="function"?B.apply(this,arguments):B;return A*L},F,V)},E.scaleTo=function(C,B,F,V){E.transform(C,function(){var A=r.apply(this,arguments),L=this.__zoom,O=F==null?P(A):typeof F=="function"?F.apply(this,arguments):F,j=L.invert(O),T=typeof B=="function"?B.apply(this,arguments):B;return o(N(z(L,T),O,j),A,d)},F,V)},E.translateBy=function(C,B,F,V){E.transform(C,function(){return o(this.__zoom.translate(typeof B=="function"?B.apply(this,arguments):B,typeof F=="function"?F.apply(this,arguments):F),r.apply(this,arguments),d)},null,V)},E.translateTo=function(C,B,F,V,A){E.transform(C,function(){var L=r.apply(this,arguments),O=this.__zoom,j=V==null?P(L):typeof V=="function"?V.apply(this,arguments):V;return o(gl.translate(j[0],j[1]).scale(O.k).translate(typeof B=="function"?-B.apply(this,arguments):-B,typeof F=="function"?-F.apply(this,arguments):-F),L,d)},V,A)};function z(C,B){return B=Math.max(c[0],Math.min(c[1],B)),B===C.k?C:new wn(B,C.x,C.y)}function N(C,B,F){var V=B[0]-F[0]*C.k,A=B[1]-F[1]*C.k;return V===C.x&&A===C.y?C:new wn(C.k,V,A)}function P(C){return[(+C[0][0]+ +C[1][0])/2,(+C[0][1]+ +C[1][1])/2]}function b(C,B,F,V){C.on("start.zoom",function(){$(this,arguments).event(V).start()}).on("interrupt.zoom end.zoom",function(){$(this,arguments).event(V).end()}).tween("zoom",function(){var A=this,L=arguments,O=$(A,L).event(V),j=r.apply(A,L),T=F==null?P(j):typeof F=="function"?F.apply(A,L):F,ee=Math.max(j[1][0]-j[0][0],j[1][1]-j[0][1]),re=A.__zoom,ue=typeof B=="function"?B.apply(A,L):B,de=p(re.invert(T).concat(ee/re.k),ue.invert(T).concat(ee/ue.k));return function(ce){if(ce===1)ce=ue;else{var Q=de(ce),se=ee/Q[2];ce=new wn(se,T[0]-Q[0]*se,T[1]-Q[1]*se)}O.zoom(null,ce)}})}function $(C,B,F){return!F&&C.__zooming||new H(C,B)}function H(C,B){this.that=C,this.args=B,this.active=0,this.sourceEvent=null,this.extent=r.apply(C,B),this.taps=0}H.prototype={event:function(C){return C&&(this.sourceEvent=C),this},start:function(){return++this.active===1&&(this.that.__zooming=this,this.emit("start")),this},zoom:function(C,B){return this.mouse&&C!=="mouse"&&(this.mouse[1]=B.invert(this.mouse[0])),this.touch0&&C!=="touch"&&(this.touch0[1]=B.invert(this.touch0[0])),this.touch1&&C!=="touch"&&(this.touch1[1]=B.invert(this.touch1[0])),this.that.__zoom=B,this.emit("zoom"),this},end:function(){return--this.active===0&&(delete this.that.__zooming,this.emit("end")),this},emit:function(C){var B=zt(this.that).datum();y.call(C,this.that,new yw(C,{sourceEvent:this.sourceEvent,target:E,transform:this.that.__zoom,dispatch:y}),B)}};function X(C,...B){if(!t.apply(this,arguments))return;var F=$(this,B).event(C),V=this.__zoom,A=Math.max(c[0],Math.min(c[1],V.k*Math.pow(2,l.apply(this,arguments)))),L=Xt(C);if(F.wheel)(F.mouse[0][0]!==L[0]||F.mouse[0][1]!==L[1])&&(F.mouse[1]=V.invert(F.mouse[0]=L)),clearTimeout(F.wheel);else{if(V.k===A)return;F.mouse=[L,V.invert(L)],qs(this),F.start()}qi(C),F.wheel=setTimeout(O,_),F.zoom("mouse",o(N(z(V,A),F.mouse[0],F.mouse[1]),F.extent,d));function O(){F.wheel=null,F.end()}}function K(C,...B){if(g||!t.apply(this,arguments))return;var F=C.currentTarget,V=$(this,B,!0).event(C),A=zt(C.view).on("mousemove.zoom",T,!0).on("mouseup.zoom",ee,!0),L=Xt(C,F),O=C.clientX,j=C.clientY;mp(C.view),ku(C),V.mouse=[L,this.__zoom.invert(L)],qs(this),V.start();function T(re){if(qi(re),!V.moved){var ue=re.clientX-O,de=re.clientY-j;V.moved=ue*ue+de*de>M}V.event(re).zoom("mouse",o(N(V.that.__zoom,V.mouse[0]=Xt(re,F),V.mouse[1]),V.extent,d))}function ee(re){A.on("mousemove.zoom mouseup.zoom",null),yp(re.view,V.moved),qi(re),V.event(re).end()}}function ne(C,...B){if(t.apply(this,arguments)){var F=this.__zoom,V=Xt(C.changedTouches?C.changedTouches[0]:C,this),A=F.invert(V),L=F.k*(C.shiftKey?.5:2),O=o(N(z(F,L),V,A),r.apply(this,B),d);qi(C),h>0?zt(this).transition().duration(h).call(b,O,V,C):zt(this).call(E.transform,O,V,C)}}function Z(C,...B){if(t.apply(this,arguments)){var F=C.touches,V=F.length,A=$(this,B,C.changedTouches.length===V).event(C),L,O,j,T;for(ku(C),O=0;O`Seems like you have not used ${t==="svelte"?"SvelteFlowProvider":"ReactFlowProvider"} as an ancestor. Help: https://${t}flow.dev/error#001`,error002:()=>"It looks like you've created a new nodeTypes or edgeTypes object. If this wasn't on purpose please define the nodeTypes/edgeTypes outside of the component or memoize them.",error003:t=>`Node type "${t}" not found. Using fallback type "default".`,error004:()=>"The parent container needs a width and a height to render the graph.",error005:()=>"Only child nodes can use a parent extent.",error006:()=>"Can't create edge. An edge needs a source and a target.",error007:t=>`The old edge with id=${t} does not exist.`,error009:t=>`Marker type "${t}" doesn't exist.`,error008:(t,{id:r,sourceHandle:o,targetHandle:l})=>`Couldn't create edge for ${t} handle id: "${t==="source"?o:l}", edge id: ${r}.`,error010:()=>"Handle: No node id found. Make sure to only use a Handle inside a custom Node.",error011:t=>`Edge type "${t}" not found. Using fallback type "default".`,error012:t=>`Node with id "${t}" does not exist, it may have been removed. This can happen when a node is deleted before the "onNodeClick" handler is called.`,error013:(t="react")=>`It seems that you haven't loaded the styles. Please import '@xyflow/${t}/dist/style.css' or base.css to make sure everything is working properly.`,error014:()=>"useNodeConnections: No node ID found. Call useNodeConnections inside a custom Node or provide a node ID.",error015:()=>"It seems that you are trying to drag a node that is not initialized. Please use onNodesChange as explained in the docs.",error016:t=>`Edge with id "${t}" does not exist, it may have been removed. This can happen when an edge is deleted before the "onEdgeClick" handler is called.`},so=[[Number.NEGATIVE_INFINITY,Number.NEGATIVE_INFINITY],[Number.POSITIVE_INFINITY,Number.POSITIVE_INFINITY]],Lp=["Enter"," ","Escape"],Ap={"node.a11yDescription.default":"Press enter or space to select a node. Press delete to remove it and escape to cancel.","node.a11yDescription.keyboardDisabled":"Press enter or space to select a node. You can then use the arrow keys to move the node around. Press delete to remove it and escape to cancel.","node.a11yDescription.ariaLiveMessage":({direction:t,x:r,y:o})=>`Moved selected node ${t}. New position, x: ${r}, y: ${o}`,"edge.a11yDescription.default":"Press enter or space to select an edge. You can then press delete to remove it or escape to cancel.","controls.ariaLabel":"Control Panel","controls.zoomIn.ariaLabel":"Zoom In","controls.zoomOut.ariaLabel":"Zoom Out","controls.fitView.ariaLabel":"Fit View","controls.interactive.ariaLabel":"Toggle Interactivity","minimap.ariaLabel":"Mini Map","handle.ariaLabel":"Handle"};var ni;(function(t){t.Strict="strict",t.Loose="loose"})(ni||(ni={}));var gr;(function(t){t.Free="free",t.Vertical="vertical",t.Horizontal="horizontal"})(gr||(gr={}));var lo;(function(t){t.Partial="partial",t.Full="full"})(lo||(lo={}));const $p={inProgress:!1,isValid:null,from:null,fromHandle:null,fromPosition:null,fromNode:null,to:null,toHandle:null,toPosition:null,toNode:null,pointer:null};var Yn;(function(t){t.Bezier="default",t.Straight="straight",t.Step="step",t.SmoothStep="smoothstep",t.SimpleBezier="simplebezier"})(Yn||(Yn={}));var ol;(function(t){t.Arrow="arrow",t.ArrowClosed="arrowclosed"})(ol||(ol={}));var _e;(function(t){t.Left="left",t.Top="top",t.Right="right",t.Bottom="bottom"})(_e||(_e={}));const uh={[_e.Left]:_e.Right,[_e.Right]:_e.Left,[_e.Top]:_e.Bottom,[_e.Bottom]:_e.Top};function Dp(t){return t===null?null:t?"valid":"invalid"}const Op=t=>!!t&&typeof t=="object"&&"id"in t&&"source"in t&&"target"in t,kw=t=>!!t&&typeof t=="object"&&"id"in t&&"position"in t&&!("source"in t)&&!("target"in t),nc=t=>!!t&&typeof t=="object"&&"id"in t&&"internals"in t&&!("source"in t)&&!("target"in t),mo=(t,r=[0,0])=>{const{width:o,height:l}=Jt(t),a=t.origin??r,c=o*a[0],d=l*a[1];return{x:t.position.x-c,y:t.position.y-d}},Ew=(t,r={nodeOrigin:[0,0]})=>{if(t.length===0)return{x:0,y:0,width:0,height:0};let o=!1;const l=t.reduce((a,c)=>{const d=typeof c=="string";let h=!r.nodeLookup&&!d?c:void 0;return r.nodeLookup&&(h=d?r.nodeLookup.get(c):nc(c)?c:r.nodeLookup.get(c.id)),h?(o=!0,ml(a,sl(h,r.nodeOrigin))):a},{x:1/0,y:1/0,x2:-1/0,y2:-1/0});return o?yl(l):{x:0,y:0,width:0,height:0}},yo=(t,r={})=>{let o={x:1/0,y:1/0,x2:-1/0,y2:-1/0},l=!1;return t.forEach(a=>{(r.filter===void 0||r.filter(a))&&(o=ml(o,sl(a)),l=!0)}),l?yl(o):{x:0,y:0,width:0,height:0}},rc=(t,r,[o,l,a]=[0,0,1],c=!1,d=!1)=>{const h=(r.x-o)/a,p=(r.y-l)/a,y=r.width/a,m=r.height/a,v=[];for(const g of t.values()){const{measured:S,selectable:_=!0,hidden:M=!1}=g;if(d&&!_||M)continue;const k=S.width??g.width??g.initialWidth??0,E=S.height??g.height??g.initialHeight??0,{x:z,y:N}=g.internals.positionAbsolute,P=Vp(h,p,y,m,z,N,k,E),b=k*E,$=c&&P>0;(!g.internals.handleBounds||$||P>=b||g.dragging)&&v.push(g)}return v},Nw=(t,r)=>{const o=new Set;return t.forEach(l=>{o.add(l.id)}),r.filter(l=>o.has(l.source)||o.has(l.target))};function Cw(t,r){const o=new Map,l=r!=null&&r.nodes?new Set(r.nodes.map(a=>a.id)):null;return t.forEach(a=>{let c;if(r!=null&&r.includeHiddenNodes){const{width:d,height:h}=Jt(a);c=d>0&&h>0}else c=!!(a.measured.width&&a.measured.height&&!a.hidden);c&&(!l||l.has(a.id))&&o.set(a.id,a)}),o}async function jw({nodes:t,width:r,height:o,panZoom:l,minZoom:a,maxZoom:c},d){if(t.size===0)return!0;const h=Cw(t,d),p=yo(h),y=oc(p,r,o,(d==null?void 0:d.minZoom)??a,(d==null?void 0:d.maxZoom)??c,(d==null?void 0:d.padding)??.1);return await l.setViewport(y,{duration:d==null?void 0:d.duration,ease:d==null?void 0:d.ease,interpolate:d==null?void 0:d.interpolate}),!0}function bp({nodeId:t,nextPosition:r,nodeLookup:o,nodeOrigin:l=[0,0],nodeExtent:a,onError:c}){const d=o.get(t),h=d.parentId?o.get(d.parentId):void 0,{x:p,y}=h?h.internals.positionAbsolute:{x:0,y:0},m=d.origin??l;let v=d.extent||a;if(d.extent==="parent"&&!d.expandParent)if(!h)c==null||c("005",qt.error005());else{const{width:S,height:_}=Jt(h);S&&_&&(v=[[p,y],[p+S,y+_]])}else h&&xr(d.extent)&&(v=[[d.extent[0][0]+p,d.extent[0][1]+y],[d.extent[1][0]+p,d.extent[1][1]+y]]);const g=xr(v)?vr(r,v,d.measured):r;return(d.measured.width===void 0||d.measured.height===void 0)&&(c==null||c("015",qt.error015())),{position:{x:g.x-p+(d.measured.width??0)*m[0],y:g.y-y+(d.measured.height??0)*m[1]},positionAbsolute:g}}async function Mw({nodesToRemove:t=[],edgesToRemove:r=[],nodes:o,edges:l,onBeforeDelete:a}){const c=new Set(t.map(g=>g.id)),d=[];for(const g of o){if(g.deletable===!1)continue;const S=c.has(g.id),_=!S&&g.parentId&&d.find(M=>M.id===g.parentId);(S||_)&&d.push(g)}const h=new Set(r.map(g=>g.id)),p=l.filter(g=>g.deletable!==!1),m=Nw(d,p);for(const g of p)h.has(g.id)&&!m.find(_=>_.id===g.id)&&m.push(g);if(!a)return{edges:m,nodes:d};const v=await a({nodes:d,edges:m});return typeof v=="boolean"?v?{edges:m,nodes:d}:{edges:[],nodes:[]}:v}const ri=(t,r=0,o=1)=>Math.min(Math.max(t,r),o),vr=(t={x:0,y:0},r,o)=>({x:ri(t.x,r[0][0],r[1][0]-((o==null?void 0:o.width)??0)),y:ri(t.y,r[0][1],r[1][1]-((o==null?void 0:o.height)??0))});function Fp(t,r,o){const{width:l,height:a}=Jt(o),{x:c,y:d}=o.internals.positionAbsolute;return vr(t,[[c,d],[c+l,d+a]],r)}const ch=(t,r,o)=>to?-ri(Math.abs(t-o),1,r)/r:0,ic=(t,r,o=15,l=40)=>{const a=ch(t.x,l,r.width-l)*o,c=ch(t.y,l,r.height-l)*o;return[a,c]},ml=(t,r)=>({x:Math.min(t.x,r.x),y:Math.min(t.y,r.y),x2:Math.max(t.x2,r.x2),y2:Math.max(t.y2,r.y2)}),Vu=({x:t,y:r,width:o,height:l})=>({x:t,y:r,x2:t+o,y2:r+l}),yl=({x:t,y:r,x2:o,y2:l})=>({x:t,y:r,width:o-t,height:l-r}),ao=(t,r=[0,0])=>{var a,c;const{x:o,y:l}=nc(t)?t.internals.positionAbsolute:mo(t,r);return{x:o,y:l,width:((a=t.measured)==null?void 0:a.width)??t.width??t.initialWidth??0,height:((c=t.measured)==null?void 0:c.height)??t.height??t.initialHeight??0}},sl=(t,r=[0,0])=>{var a,c;const{x:o,y:l}=nc(t)?t.internals.positionAbsolute:mo(t,r);return{x:o,y:l,x2:o+(((a=t.measured)==null?void 0:a.width)??t.width??t.initialWidth??0),y2:l+(((c=t.measured)==null?void 0:c.height)??t.height??t.initialHeight??0)}},Hp=(t,r)=>yl(ml(Vu(t),Vu(r))),Vp=(t,r,o,l,a,c,d,h)=>{const p=Math.max(0,Math.min(t+o,a+d)-Math.max(t,a)),y=Math.max(0,Math.min(r+l,c+h)-Math.max(r,c));return Math.ceil(p*y)},ll=(t,r)=>Vp(t.x,t.y,t.width,t.height,r.x,r.y,r.width,r.height),dh=t=>Kt(t.width)&&Kt(t.height)&&Kt(t.x)&&Kt(t.y),Kt=t=>!isNaN(t)&&isFinite(t),Bp=(t,r)=>(o,l)=>{},vo=(t,r=[1,1])=>({x:r[0]*Math.round(t.x/r[0]),y:r[1]*Math.round(t.y/r[1])}),xo=({x:t,y:r},[o,l,a],c=!1,d=[1,1])=>{const h={x:(t-o)/a,y:(r-l)/a};return c?vo(h,d):h},ii=({x:t,y:r},[o,l,a])=>({x:t*a+o,y:r*a+l});function Gr(t,r){if(typeof t=="number")return Math.floor((r-r/(1+t))*.5);if(typeof t=="string"&&t.endsWith("px")){const o=parseFloat(t);if(!Number.isNaN(o))return Math.floor(o)}if(typeof t=="string"&&t.endsWith("%")){const o=parseFloat(t);if(!Number.isNaN(o))return Math.floor(r*o*.01)}return console.error(`The padding value "${t}" is invalid. Please provide a number or a string with a valid unit (px or %).`),0}function Pw(t,r,o){if(typeof t=="string"||typeof t=="number"){const l=Gr(t,o),a=Gr(t,r);return{top:l,right:a,bottom:l,left:a,x:a*2,y:l*2}}if(typeof t=="object"){const l=Gr(t.top??t.y??0,o),a=Gr(t.bottom??t.y??0,o),c=Gr(t.left??t.x??0,r),d=Gr(t.right??t.x??0,r);return{top:l,right:d,bottom:a,left:c,x:c+d,y:l+a}}return{top:0,right:0,bottom:0,left:0,x:0,y:0}}function Iw(t,r,o,l,a,c){const{x:d,y:h}=ii(t,[r,o,l]),{x:p,y}=ii({x:t.x+t.width,y:t.y+t.height},[r,o,l]),m=a-p,v=c-y;return{left:Math.floor(d),top:Math.floor(h),right:Math.floor(m),bottom:Math.floor(v)}}const oc=(t,r,o,l,a,c)=>{const d=Pw(c,r,o),h=(r-d.x)/t.width,p=(o-d.y)/t.height,y=Math.min(h,p),m=ri(y,l,a),v=t.x+t.width/2,g=t.y+t.height/2,S=r/2-v*m,_=o/2-g*m,M=Iw(t,S,_,m,r,o),k={left:Math.min(M.left-d.left,0),top:Math.min(M.top-d.top,0),right:Math.min(M.right-d.right,0),bottom:Math.min(M.bottom-d.bottom,0)};return{x:S-k.left+k.right,y:_-k.top+k.bottom,zoom:m}},uo=()=>{var t;return typeof navigator<"u"&&((t=navigator==null?void 0:navigator.userAgent)==null?void 0:t.indexOf("Mac"))>=0};function xr(t){return t!=null&&t!=="parent"}function Jt(t){var r,o;return{width:((r=t.measured)==null?void 0:r.width)??t.width??t.initialWidth??0,height:((o=t.measured)==null?void 0:o.height)??t.height??t.initialHeight??0}}function Up(t){var r,o;return(((r=t.measured)==null?void 0:r.width)??t.width??t.initialWidth)!==void 0&&(((o=t.measured)==null?void 0:o.height)??t.height??t.initialHeight)!==void 0}function Wp(t,r={width:0,height:0},o,l,a){const c={...t},d=l.get(o);if(d){const h=d.origin||a;c.x+=d.internals.positionAbsolute.x-(r.width??0)*h[0],c.y+=d.internals.positionAbsolute.y-(r.height??0)*h[1]}return c}function fh(t,r){if(t.size!==r.size)return!1;for(const o of t)if(!r.has(o))return!1;return!0}function Tw(){let t,r;return{promise:new Promise((l,a)=>{t=l,r=a}),resolve:t,reject:r}}function zw(t){return{...Ap,...t||{}}}function to(t,{snapGrid:r=[0,0],snapToGrid:o=!1,transform:l,containerBounds:a}){const{x:c,y:d}=Gt(t),h=xo({x:c-((a==null?void 0:a.left)??0),y:d-((a==null?void 0:a.top)??0)},l),{x:p,y}=o?vo(h,r):h;return{xSnapped:p,ySnapped:y,...h}}const sc=t=>({width:t.offsetWidth,height:t.offsetHeight}),Yp=t=>{var r;return((r=t==null?void 0:t.getRootNode)==null?void 0:r.call(t))||(window==null?void 0:window.document)},Rw=["INPUT","SELECT","TEXTAREA"];function Xp(t){var l,a;const r=((a=(l=t.composedPath)==null?void 0:l.call(t))==null?void 0:a[0])||t.target;return(r==null?void 0:r.nodeType)!==1?!1:Rw.includes(r.nodeName)||r.hasAttribute("contenteditable")||!!r.closest(".nokey")}const Qp=t=>"clientX"in t,Gt=(t,r)=>{var c,d;const o=Qp(t),l=o?t.clientX:(c=t.touches)==null?void 0:c[0].clientX,a=o?t.clientY:(d=t.touches)==null?void 0:d[0].clientY;return{x:l-((r==null?void 0:r.left)??0),y:a-((r==null?void 0:r.top)??0)}},hh=(t,r,o,l,a)=>{const c=r.querySelectorAll(`.${t}`);return!c||!c.length?null:Array.from(c).map(d=>{const h=d.getBoundingClientRect();return{id:d.getAttribute("data-handleid"),type:t,nodeId:a,position:d.getAttribute("data-handlepos"),x:(h.left-o.left)/l,y:(h.top-o.top)/l,...sc(d)}})};function Kp({sourceX:t,sourceY:r,targetX:o,targetY:l,sourceControlX:a,sourceControlY:c,targetControlX:d,targetControlY:h}){const p=t*.125+a*.375+d*.375+o*.125,y=r*.125+c*.375+h*.375+l*.125,m=Math.abs(p-t),v=Math.abs(y-r);return[p,y,m,v]}function Bs(t,r){return t>=0?.5*t:r*25*Math.sqrt(-t)}function ph({pos:t,x1:r,y1:o,x2:l,y2:a,c}){switch(t){case _e.Left:return[r-Bs(r-l,c),o];case _e.Right:return[r+Bs(l-r,c),o];case _e.Top:return[r,o-Bs(o-a,c)];case _e.Bottom:return[r,o+Bs(a-o,c)]}}function Gp({sourceX:t,sourceY:r,sourcePosition:o=_e.Bottom,targetX:l,targetY:a,targetPosition:c=_e.Top,curvature:d=.25}){const[h,p]=ph({pos:o,x1:t,y1:r,x2:l,y2:a,c:d}),[y,m]=ph({pos:c,x1:l,y1:a,x2:t,y2:r,c:d}),[v,g,S,_]=Kp({sourceX:t,sourceY:r,targetX:l,targetY:a,sourceControlX:h,sourceControlY:p,targetControlX:y,targetControlY:m});return[`M${t},${r} C${h},${p} ${y},${m} ${l},${a}`,v,g,S,_]}function qp({sourceX:t,sourceY:r,targetX:o,targetY:l}){const a=Math.abs(o-t)/2,c=o0}const $w=({source:t,sourceHandle:r,target:o,targetHandle:l})=>`xy-edge__${t}${r||""}-${o}${l||""}`,Dw=(t,r)=>r.some(o=>o.source===t.source&&o.target===t.target&&(o.sourceHandle===t.sourceHandle||!o.sourceHandle&&!t.sourceHandle)&&(o.targetHandle===t.targetHandle||!o.targetHandle&&!t.targetHandle)),Ow=(t,r,o={})=>{var c;if(!t.source||!t.target)return(c=o.onError)==null||c.call(o,"006",qt.error006()),r;const l=o.getEdgeId||$w;let a;return Op(t)?a={...t}:a={...t,id:l(t)},Dw(a,r)?r:(a.sourceHandle===null&&delete a.sourceHandle,a.targetHandle===null&&delete a.targetHandle,r.concat(a))};function Zp({sourceX:t,sourceY:r,targetX:o,targetY:l}){const[a,c,d,h]=qp({sourceX:t,sourceY:r,targetX:o,targetY:l});return[`M ${t},${r}L ${o},${l}`,a,c,d,h]}const gh={[_e.Left]:{x:-1,y:0},[_e.Right]:{x:1,y:0},[_e.Top]:{x:0,y:-1},[_e.Bottom]:{x:0,y:1}},bw=({source:t,sourcePosition:r=_e.Bottom,target:o})=>r===_e.Left||r===_e.Right?t.xMath.sqrt(Math.pow(r.x-t.x,2)+Math.pow(r.y-t.y,2));function Fw({source:t,sourcePosition:r=_e.Bottom,target:o,targetPosition:l=_e.Top,center:a,offset:c,stepPosition:d}){const h=gh[r],p=gh[l],y={x:t.x+h.x*c,y:t.y+h.y*c},m={x:o.x+p.x*c,y:o.y+p.y*c},v=bw({source:y,sourcePosition:r,target:m}),g=v.x!==0?"x":"y",S=v[g];let _=[],M,k;const E={x:0,y:0},z={x:0,y:0},[,,N,P]=qp({sourceX:t.x,sourceY:t.y,targetX:o.x,targetY:o.y});if(h[g]*p[g]===-1){g==="x"?(M=a.x??y.x+(m.x-y.x)*d,k=a.y??(y.y+m.y)/2):(M=a.x??(y.x+m.x)/2,k=a.y??y.y+(m.y-y.y)*d);const X=[{x:M,y:y.y},{x:M,y:m.y}],K=[{x:y.x,y:k},{x:m.x,y:k}];h[g]===S?_=g==="x"?X:K:_=g==="x"?K:X}else{const X=[{x:y.x,y:m.y}],K=[{x:m.x,y:y.y}];if(g==="x"?_=h.x===S?K:X:_=h.y===S?X:K,r===l){const C=Math.abs(t[g]-o[g]);if(C<=c){const B=Math.min(c-1,c-C);h[g]===S?E[g]=(y[g]>t[g]?-1:1)*B:z[g]=(m[g]>o[g]?-1:1)*B}}if(r!==l){const C=g==="x"?"y":"x",B=h[g]===p[C],F=y[C]>m[C],V=y[C]=J?(M=(ne.x+Z.x)/2,k=_[0].y):(M=_[0].x,k=(ne.y+Z.y)/2)}const b={x:y.x+E.x,y:y.y+E.y},$={x:m.x+z.x,y:m.y+z.y};return[[t,...b.x!==_[0].x||b.y!==_[0].y?[b]:[],..._,...$.x!==_[_.length-1].x||$.y!==_[_.length-1].y?[$]:[],o],M,k,N,P]}function Hw(t,r,o,l){const a=Math.min(mh(t,r)/2,mh(r,o)/2,l),{x:c,y:d}=r;if(t.x===c&&c===o.x||t.y===d&&d===o.y)return`L${c} ${d}`;if(t.y===d){const y=t.xo.id===r):t[0])||null}function Uu(t,r){return t?typeof t=="string"?t:`${r?`${r}__`:""}${Object.keys(t).sort().map(l=>`${l}=${t[l]}`).join("&")}`:""}function Bw(t,{id:r,defaultColor:o,defaultMarkerStart:l,defaultMarkerEnd:a}){const c=new Set;return t.reduce((d,h)=>([h.markerStart||l,h.markerEnd||a].forEach(p=>{if(p&&typeof p=="object"){const y=Uu(p,r);c.has(y)||(d.push({id:y,color:p.color||o,...p}),c.add(y))}}),d),[]).sort((d,h)=>d.id.localeCompare(h.id))}const Jp=1e3,Uw=10,lc={nodeOrigin:[0,0],nodeExtent:so,elevateNodesOnSelect:!0,zIndexMode:"basic",defaults:{}},Ww={...lc,checkEquality:!0};function ac(t,r){const o={...t};for(const l in r)r[l]!==void 0&&(o[l]=r[l]);return o}function Yw(t,r,o){const l=ac(lc,o);for(const a of t.values())if(a.parentId)cc(a,t,r,l);else{const c=mo(a,l.nodeOrigin),d=xr(a.extent)?a.extent:l.nodeExtent,h=vr(c,d,Jt(a));a.internals.positionAbsolute=h}}function Xw(t,r){if(!t.handles)return t.measured?r==null?void 0:r.internals.handleBounds:void 0;const o=[],l=[];for(const a of t.handles){const c={id:a.id,width:a.width??1,height:a.height??1,nodeId:t.id,x:a.x,y:a.y,position:a.position,type:a.type};a.type==="source"?o.push(c):a.type==="target"&&l.push(c)}return{source:o,target:l}}function uc(t){return t==="manual"}function Wu(t,r,o,l={}){var m,v;const a=ac(Ww,l),c={i:0},d=new Map(r),h=a!=null&&a.elevateNodesOnSelect&&!uc(a.zIndexMode)?Jp:0;let p=t.length>0,y=!1;r.clear(),o.clear();for(const g of t){let S=d.get(g.id);if(a.checkEquality&&g===(S==null?void 0:S.internals.userNode))r.set(g.id,S);else{const _=mo(g,a.nodeOrigin),M=xr(g.extent)?g.extent:a.nodeExtent,k=vr(_,M,Jt(g));S={...a.defaults,...g,measured:{width:(m=g.measured)==null?void 0:m.width,height:(v=g.measured)==null?void 0:v.height},internals:{positionAbsolute:k,handleBounds:Xw(g,S),z:eg(g,h,a.zIndexMode),userNode:g}},r.set(g.id,S)}(S.measured===void 0||S.measured.width===void 0||S.measured.height===void 0)&&!S.hidden&&(p=!1),g.parentId&&cc(S,r,o,l,c),y||(y=g.selected??!1)}return{nodesInitialized:p,hasSelectedNodes:y}}function Qw(t,r){if(!t.parentId)return;const o=r.get(t.parentId);o?o.set(t.id,t):r.set(t.parentId,new Map([[t.id,t]]))}function cc(t,r,o,l,a){const{elevateNodesOnSelect:c,nodeOrigin:d,nodeExtent:h,zIndexMode:p}=ac(lc,l),y=t.parentId,m=r.get(y);if(!m){console.warn(`Parent node ${y} not found. Please make sure that parent nodes are in front of their child nodes in the nodes array.`);return}Qw(t,o),a&&!m.parentId&&m.internals.rootParentIndex===void 0&&p==="auto"&&(m.internals.rootParentIndex=++a.i,m.internals.z=m.internals.z+a.i*Uw),a&&m.internals.rootParentIndex!==void 0&&(a.i=m.internals.rootParentIndex);const v=c&&!uc(p)?Jp:0,{x:g,y:S,z:_}=Kw(t,m,d,h,v,p),{positionAbsolute:M}=t.internals,k=g!==M.x||S!==M.y;(k||_!==t.internals.z)&&r.set(t.id,{...t,internals:{...t.internals,positionAbsolute:k?{x:g,y:S}:M,z:_}})}function eg(t,r,o){const l=Kt(t.zIndex)?t.zIndex:0;return uc(o)?l:l+(t.selected?r:0)}function Kw(t,r,o,l,a,c){const{x:d,y:h}=r.internals.positionAbsolute,p=Jt(t),y=mo(t,o),m=xr(t.extent)?vr(y,t.extent,p):y;let v=vr({x:d+m.x,y:h+m.y},l,p);t.extent==="parent"&&(v=Fp(v,p,r));const g=eg(t,a,c),S=r.internals.z??0;return{x:v.x,y:v.y,z:S>=g?S+1:g}}function dc(t,r,o,l=[0,0]){var d;const a=[],c=new Map;for(const h of t){const p=r.get(h.parentId);if(!p)continue;const y=((d=c.get(h.parentId))==null?void 0:d.expandedRect)??ao(p),m=Hp(y,h.rect);c.set(h.parentId,{expandedRect:m,parent:p})}return c.size>0&&c.forEach(({expandedRect:h,parent:p},y)=>{var N;const m=p.internals.positionAbsolute,v=Jt(p),g=p.origin??l,S=h.x0||_>0||E||z)&&(a.push({id:y,type:"position",position:{x:p.position.x-S+E,y:p.position.y-_+z}}),(N=o.get(y))==null||N.forEach(P=>{t.some(b=>b.id===P.id)||a.push({id:P.id,type:"position",position:{x:P.position.x+S,y:P.position.y+_}})})),(v.width0){const S=dc(g,r,o,a);y.push(...S)}return{changes:y,updatedInternals:p}}async function qw({delta:t,panZoom:r,transform:o,translateExtent:l,width:a,height:c}){if(!r||!t.x&&!t.y)return!1;const d=await r.setViewportConstrained({x:o[0]+t.x,y:o[1]+t.y,zoom:o[2]},[[0,0],[a,c]],l);return!!d&&(d.x!==o[0]||d.y!==o[1]||d.k!==o[2])}function wh(t,r,o,l,a,c){let d=a;const h=l.get(d)||new Map;l.set(d,h.set(o,r)),d=`${a}-${t}`;const p=l.get(d)||new Map;if(l.set(d,p.set(o,r)),c){d=`${a}-${t}-${c}`;const y=l.get(d)||new Map;l.set(d,y.set(o,r))}}function tg(t,r,o){t.clear(),r.clear();for(const l of o){const{source:a,target:c,sourceHandle:d=null,targetHandle:h=null}=l,p={edgeId:l.id,source:a,target:c,sourceHandle:d,targetHandle:h},y=`${a}-${d}--${c}-${h}`,m=`${c}-${h}--${a}-${d}`;wh("source",p,m,t,a,d),wh("target",p,y,t,c,h),r.set(l.id,l)}}function ng(t,r){if(!t.parentId)return!1;const o=r.get(t.parentId);return o?o.selected?!0:ng(o,r):!1}function Sh(t,r,o){var a;let l=t;do{if((a=l==null?void 0:l.matches)!=null&&a.call(l,r))return!0;if(l===o)return!1;l=l==null?void 0:l.parentElement}while(l);return!1}function Zw(t,r,o,l){const a=new Map;for(const[c,d]of t)if((d.selected||d.id===l)&&(!d.parentId||!ng(d,t))&&(d.draggable||r&&typeof d.draggable>"u")){const h=t.get(c);h&&a.set(c,{id:c,position:h.position||{x:0,y:0},distance:{x:o.x-h.internals.positionAbsolute.x,y:o.y-h.internals.positionAbsolute.y},extent:h.extent,parentId:h.parentId,origin:h.origin,expandParent:h.expandParent,internals:{positionAbsolute:h.internals.positionAbsolute||{x:0,y:0}},measured:{width:h.measured.width??0,height:h.measured.height??0}})}return a}function Eu({nodeId:t,dragItems:r,nodeLookup:o,dragging:l=!0}){var d,h,p;const a=[];for(const[y,m]of r){const v=(d=o.get(y))==null?void 0:d.internals.userNode;v&&a.push({...v,position:m.position,dragging:l})}if(!t)return[a[0],a];const c=(h=o.get(t))==null?void 0:h.internals.userNode;return[c?{...c,position:((p=r.get(t))==null?void 0:p.position)||c.position,dragging:l}:a[0],a]}function Jw({dragItems:t,snapGrid:r,x:o,y:l}){const a=t.values().next().value;if(!a)return null;const c={x:o-a.distance.x,y:l-a.distance.y},d=vo(c,r);return{x:d.x-c.x,y:d.y-c.y}}function e1({onNodeMouseDown:t,getStoreItems:r,onDragStart:o,onDrag:l,onDragStop:a}){let c={x:null,y:null},d=0,h=new Map,p=!1,y={x:0,y:0},m=null,v=!1,g=null,S=!1,_=!1,M=null;function k({noDragClassName:z,handleSelector:N,domNode:P,isSelectable:b,nodeId:$,nodeClickDistance:H=0}){g=zt(P);function X({x:te,y:J}){const{nodeLookup:C,nodeExtent:B,snapGrid:F,snapToGrid:V,nodeOrigin:A,onNodeDrag:L,onSelectionDrag:O,onError:j,updateNodePositions:T}=r();c={x:te,y:J};let ee=!1;const re=h.size>1,ue=re&&B?Vu(yo(h)):null,de=re&&V?Jw({dragItems:h,snapGrid:F,x:te,y:J}):null;for(const[ce,Q]of h){if(!C.has(ce))continue;let se={x:te-Q.distance.x,y:J-Q.distance.y};V&&(se=de?{x:Math.round(se.x+de.x),y:Math.round(se.y+de.y)}:vo(se,F));let pe=null;if(re&&B&&!Q.extent&&ue){const{positionAbsolute:me}=Q.internals,Ce=me.x-ue.x+B[0][0],Me=me.x+Q.measured.width-ue.x2+B[1][0],Pe=me.y-ue.y+B[0][1],ze=me.y+Q.measured.height-ue.y2+B[1][1];pe=[[Ce,Pe],[Me,ze]]}const{position:Se,positionAbsolute:ve}=bp({nodeId:ce,nextPosition:se,nodeLookup:C,nodeExtent:pe||B,nodeOrigin:A,onError:j});ee=ee||Q.position.x!==Se.x||Q.position.y!==Se.y,Q.position=Se,Q.internals.positionAbsolute=ve}if(_=_||ee,!!ee&&(T(h,!0),M&&(l||L||!$&&O))){const[ce,Q]=Eu({nodeId:$,dragItems:h,nodeLookup:C});l==null||l(M,h,ce,Q),L==null||L(M,ce,Q),$||O==null||O(M,Q)}}async function K(){if(!m)return;const{transform:te,panBy:J,autoPanSpeed:C,autoPanOnNodeDrag:B}=r();if(!B){p=!1,cancelAnimationFrame(d);return}const[F,V]=ic(y,m,C);(F!==0||V!==0)&&(c.x=(c.x??0)-F/te[2],c.y=(c.y??0)-V/te[2],await J({x:F,y:V})&&X(c)),d=requestAnimationFrame(K)}function ne(te){var re;const{nodeLookup:J,multiSelectionActive:C,nodesDraggable:B,transform:F,snapGrid:V,snapToGrid:A,selectNodesOnDrag:L,onNodeDragStart:O,onSelectionDragStart:j,unselectNodesAndEdges:T}=r();v=!0,(!L||!b)&&!C&&$&&((re=J.get($))!=null&&re.selected||T()),b&&L&&$&&(t==null||t($));const ee=to(te.sourceEvent,{transform:F,snapGrid:V,snapToGrid:A,containerBounds:m});if(c=ee,h=Zw(J,B,ee,$),h.size>0&&(o||O||!$&&j)){const[ue,de]=Eu({nodeId:$,dragItems:h,nodeLookup:J});o==null||o(te.sourceEvent,h,ue,de),O==null||O(te.sourceEvent,ue,de),$||j==null||j(te.sourceEvent,de)}}const Z=vp().clickDistance(H).on("start",te=>{const{domNode:J,nodeDragThreshold:C,transform:B,snapGrid:F,snapToGrid:V}=r();m=(J==null?void 0:J.getBoundingClientRect())||null,S=!1,_=!1,M=te.sourceEvent,C===0&&ne(te),c=to(te.sourceEvent,{transform:B,snapGrid:F,snapToGrid:V,containerBounds:m}),y=Gt(te.sourceEvent,m)}).on("drag",te=>{const{autoPanOnNodeDrag:J,transform:C,snapGrid:B,snapToGrid:F,nodeDragThreshold:V,nodeLookup:A}=r(),L=to(te.sourceEvent,{transform:C,snapGrid:B,snapToGrid:F,containerBounds:m});if(M=te.sourceEvent,(te.sourceEvent.type==="touchmove"&&te.sourceEvent.touches.length>1||$&&!A.has($))&&(S=!0),!S){if(!p&&J&&v&&(p=!0,K()),!v){const O=Gt(te.sourceEvent,m),j=O.x-y.x,T=O.y-y.y;Math.sqrt(j*j+T*T)>V&&ne(te)}(c.x!==L.xSnapped||c.y!==L.ySnapped)&&h&&v&&(y=Gt(te.sourceEvent,m),X(L))}}).on("end",te=>{if(!v||S){S&&h.size>0&&r().updateNodePositions(h,!1);return}if(p=!1,v=!1,cancelAnimationFrame(d),h.size>0){const{nodeLookup:J,updateNodePositions:C,onNodeDragStop:B,onSelectionDragStop:F}=r();if(_&&(C(h,!1),_=!1),a||B||!$&&F){const[V,A]=Eu({nodeId:$,dragItems:h,nodeLookup:J,dragging:!1});a==null||a(te.sourceEvent,h,V,A),B==null||B(te.sourceEvent,V,A),$||F==null||F(te.sourceEvent,A)}}}).filter(te=>{const J=te.target;return!te.button&&(!z||!Sh(J,`.${z}`,P))&&(!N||Sh(J,N,P))});g.call(Z)}function E(){g==null||g.on(".drag",null)}return{update:k,destroy:E}}function t1(t,r,o){const l=[],a={x:t.x-o,y:t.y-o,width:o*2,height:o*2};for(const c of r.values())ll(a,ao(c))>0&&l.push(c);return l}const n1=250;function r1(t,r,o,l){var h,p;let a=[],c=1/0;const d=t1(t,o,r+n1);for(const y of d){const m=[...((h=y.internals.handleBounds)==null?void 0:h.source)??[],...((p=y.internals.handleBounds)==null?void 0:p.target)??[]];for(const v of m){if(l.nodeId===v.nodeId&&l.type===v.type&&l.id===v.id)continue;const{x:g,y:S}=wr(y,v,v.position,!0),_=Math.sqrt(Math.pow(g-t.x,2)+Math.pow(S-t.y,2));_>r||(_1){const y=l.type==="source"?"target":"source";return a.find(m=>m.type===y)??a[0]}return a[0]}function rg(t,r,o,l,a,c=!1){var y,m,v;const d=l.get(t);if(!d)return null;const h=a==="strict"?(y=d.internals.handleBounds)==null?void 0:y[r]:[...((m=d.internals.handleBounds)==null?void 0:m.source)??[],...((v=d.internals.handleBounds)==null?void 0:v.target)??[]],p=(o?h==null?void 0:h.find(g=>g.id===o):h==null?void 0:h[0])??null;return p&&c?{...p,...wr(d,p,p.position,!0)}:p}function ig(t,r){return t||(r!=null&&r.classList.contains("target")?"target":r!=null&&r.classList.contains("source")?"source":null)}function i1(t,r){let o=null;return r?o=!0:t&&!r&&(o=!1),o}const og=()=>!0;function o1(t,{connectionMode:r,connectionRadius:o,handleId:l,nodeId:a,edgeUpdaterType:c,isTarget:d,domNode:h,nodeLookup:p,lib:y,autoPanOnConnect:m,flowId:v,panBy:g,cancelConnection:S,onConnectStart:_,onConnect:M,onConnectEnd:k,isValidConnection:E=og,onReconnectEnd:z,updateConnection:N,getTransform:P,getFromHandle:b,autoPanSpeed:$,dragThreshold:H=1,handleDomNode:X}){const K=Yp(t.target);let ne=0,Z;const{x:te,y:J}=Gt(t),C=ig(c,X),B=h==null?void 0:h.getBoundingClientRect();let F=!1;if(!B||!C)return;const V=rg(a,C,l,p,r);if(!V)return;let A=Gt(t,B),L=!1,O=null,j=!1,T=null;function ee(){if(!m||!B)return;const[Se,ve]=ic(A,B,$);g({x:Se,y:ve}),ne=requestAnimationFrame(ee)}const re={...V,nodeId:a,type:C,position:V.position},ue=p.get(a);let ce={inProgress:!0,isValid:null,from:wr(ue,re,_e.Left,!0),fromHandle:re,fromPosition:re.position,fromNode:ue,to:A,toHandle:null,toPosition:uh[re.position],toNode:null,pointer:A};function Q(){F=!0,N(ce),_==null||_(t,{nodeId:a,handleId:l,handleType:C})}H===0&&Q();function se(Se){if(!F){const{x:ze,y:Ze}=Gt(Se),lt=ze-te,Je=Ze-J;if(!(lt*lt+Je*Je>H*H))return;Q()}if(!b()||!re){pe(Se);return}const ve=P();A=Gt(Se,B),Z=r1(xo(A,ve,!1,[1,1]),o,p,re),L||(ee(),L=!0);const me=sg(Se,{handle:Z,connectionMode:r,fromNodeId:a,fromHandleId:l,fromType:d?"target":"source",isValidConnection:E,doc:K,lib:y,flowId:v,nodeLookup:p});T=me.handleDomNode,O=me.connection,j=i1(!!Z,me.isValid);const Ce=p.get(a),Me=Ce?wr(Ce,re,_e.Left,!0):ce.from,Pe={...ce,from:Me,isValid:j,to:me.toHandle&&j?ii({x:me.toHandle.x,y:me.toHandle.y},ve):A,toHandle:me.toHandle,toPosition:j&&me.toHandle?me.toHandle.position:uh[re.position],toNode:me.toHandle?p.get(me.toHandle.nodeId):null,pointer:A};N(Pe),ce=Pe}function pe(Se){if(!("touches"in Se&&Se.touches.length>0)){if(F){(Z||T)&&O&&j&&(M==null||M(O));const{inProgress:ve,...me}=ce,Ce={...me,toPosition:ce.toHandle?ce.toPosition:null};k==null||k(Se,Ce),c&&(z==null||z(Se,Ce))}S(),cancelAnimationFrame(ne),L=!1,j=!1,O=null,T=null,K.removeEventListener("mousemove",se),K.removeEventListener("mouseup",pe),K.removeEventListener("touchmove",se),K.removeEventListener("touchend",pe)}}K.addEventListener("mousemove",se),K.addEventListener("mouseup",pe),K.addEventListener("touchmove",se),K.addEventListener("touchend",pe)}function sg(t,{handle:r,connectionMode:o,fromNodeId:l,fromHandleId:a,fromType:c,doc:d,lib:h,flowId:p,isValidConnection:y=og,nodeLookup:m}){const v=c==="target",g=r?d.querySelector(`.${h}-flow__handle[data-id="${p}-${r==null?void 0:r.nodeId}-${r==null?void 0:r.id}-${r==null?void 0:r.type}"]`):null,{x:S,y:_}=Gt(t),M=d.elementFromPoint(S,_),k=M!=null&&M.classList.contains(`${h}-flow__handle`)?M:g,E={handleDomNode:k,isValid:!1,connection:null,toHandle:null};if(k){const z=ig(void 0,k),N=k.getAttribute("data-nodeid"),P=k.getAttribute("data-handleid"),b=k.classList.contains("connectable"),$=k.classList.contains("connectableend");if(!N||!z)return E;const H={source:v?N:l,sourceHandle:v?P:a,target:v?l:N,targetHandle:v?a:P};E.connection=H;const K=b&&$&&(o===ni.Strict?v&&z==="source"||!v&&z==="target":N!==l||P!==a);E.isValid=K&&y(H),E.toHandle=rg(N,z,P,m,o,!0)}return E}const Yu={onPointerDown:o1,isValid:sg};function s1({domNode:t,panZoom:r,getTransform:o,getViewScale:l}){const a=zt(t);function c({translateExtent:h,width:p,height:y,zoomStep:m=1,pannable:v=!0,zoomable:g=!0,inversePan:S=!1}){const _=N=>{if(N.sourceEvent.type!=="wheel"||!r)return;const P=o(),b=N.sourceEvent.ctrlKey&&uo()?10:1,$=-N.sourceEvent.deltaY*(N.sourceEvent.deltaMode===1?.05:N.sourceEvent.deltaMode?1:.002)*m,H=P[2]*Math.pow(2,$*b);r.scaleTo(H)};let M=[0,0];const k=N=>{(N.sourceEvent.type==="mousedown"||N.sourceEvent.type==="touchstart")&&(M=[N.sourceEvent.clientX??N.sourceEvent.touches[0].clientX,N.sourceEvent.clientY??N.sourceEvent.touches[0].clientY])},E=N=>{const P=o();if(N.sourceEvent.type!=="mousemove"&&N.sourceEvent.type!=="touchmove"||!r)return;const b=[N.sourceEvent.clientX??N.sourceEvent.touches[0].clientX,N.sourceEvent.clientY??N.sourceEvent.touches[0].clientY],$=[b[0]-M[0],b[1]-M[1]];M=b;const H=l()*Math.max(P[2],Math.log(P[2]))*(S?-1:1),X={x:P[0]-$[0]*H,y:P[1]-$[1]*H},K=[[0,0],[p,y]];r.setViewportConstrained({x:X.x,y:X.y,zoom:P[2]},K,h)},z=Rp().on("start",k).on("zoom",v?E:null).on("zoom.wheel",g?_:null);a.call(z,{})}function d(){a.on("zoom",null)}return{update:c,destroy:d,pointer:Xt}}const vl=t=>({x:t.x,y:t.y,zoom:t.k}),Nu=({x:t,y:r,zoom:o})=>gl.translate(t,r).scale(o),Wn=(t,r)=>t.target.closest(`.${r}`),lg=(t,r)=>r===2&&Array.isArray(t)&&t.includes(2),l1=t=>((t*=2)<=1?t*t*t:(t-=2)*t*t+2)/2,Cu=(t,r=0,o=l1,l=()=>{})=>{const a=typeof r=="number"&&r>0;return a||l(),a?t.transition().duration(r).ease(o).on("end",l):t},ag=t=>{const r=t.ctrlKey&&uo()?10:1;return-t.deltaY*(t.deltaMode===1?.05:t.deltaMode?1:.002)*r};function a1({zoomPanValues:t,noWheelClassName:r,d3Selection:o,d3Zoom:l,panOnScrollMode:a,panOnScrollSpeed:c,zoomOnPinch:d,onPanZoomStart:h,onPanZoom:p,onPanZoomEnd:y}){return m=>{if(Wn(m,r))return m.ctrlKey&&m.preventDefault(),!1;m.preventDefault(),m.stopImmediatePropagation();const v=o.property("__zoom").k||1;if(m.ctrlKey&&d){const k=Xt(m),E=ag(m),z=v*Math.pow(2,E);l.scaleTo(o,z,k,m);return}const g=m.deltaMode===1?20:1;let S=a===gr.Vertical?0:m.deltaX*g,_=a===gr.Horizontal?0:m.deltaY*g;!uo()&&m.shiftKey&&a!==gr.Vertical&&(S=m.deltaY*g,_=0),l.translateBy(o,-(S/v)*c,-(_/v)*c,{internal:!0});const M=vl(o.property("__zoom"));clearTimeout(t.panScrollTimeout),t.isPanScrolling?p==null||p(m,M):(t.isPanScrolling=!0,h==null||h(m,M)),t.panScrollTimeout=setTimeout(()=>{y==null||y(m,M),t.isPanScrolling=!1},150)}}function u1({noWheelClassName:t,preventScrolling:r,d3ZoomHandler:o}){return function(l,a){const c=l.type==="wheel",d=!r&&c&&!l.ctrlKey,h=Wn(l,t);if(l.ctrlKey&&c&&h&&l.preventDefault(),d||h)return null;l.preventDefault(),o.call(this,l,a)}}function c1({zoomPanValues:t,onDraggingChange:r,onPanZoomStart:o}){return l=>{var c,d,h;if((c=l.sourceEvent)!=null&&c.internal)return;const a=vl(l.transform);t.mouseButton=((d=l.sourceEvent)==null?void 0:d.button)||0,t.isZoomingOrPanning=!0,t.prevViewport=a,((h=l.sourceEvent)==null?void 0:h.type)==="mousedown"&&r(!0),o&&(o==null||o(l.sourceEvent,a))}}function d1({zoomPanValues:t,panOnDrag:r,onPaneContextMenu:o,onTransformChange:l,onPanZoom:a}){return c=>{var d,h;t.usedRightMouseButton=!!(o&&lg(r,t.mouseButton??0)),(d=c.sourceEvent)!=null&&d.sync||l([c.transform.x,c.transform.y,c.transform.k]),a&&!((h=c.sourceEvent)!=null&&h.internal)&&(a==null||a(c.sourceEvent,vl(c.transform)))}}function f1({zoomPanValues:t,panOnDrag:r,panOnScroll:o,onDraggingChange:l,onPanZoomEnd:a,onPaneContextMenu:c}){return d=>{var h;if(!((h=d.sourceEvent)!=null&&h.internal)&&(t.isZoomingOrPanning=!1,c&&lg(r,t.mouseButton??0)&&!t.usedRightMouseButton&&d.sourceEvent&&c(d.sourceEvent),t.usedRightMouseButton=!1,l(!1),a)){const p=vl(d.transform);t.prevViewport=p,clearTimeout(t.timerId),t.timerId=setTimeout(()=>{a==null||a(d.sourceEvent,p)},o?150:0)}}}function h1({panActivationKeyPressed:t,zoomActivationKeyPressed:r,zoomOnScroll:o,zoomOnPinch:l,panOnDrag:a,panOnScroll:c,zoomOnDoubleClick:d,userSelectionActive:h,noWheelClassName:p,noPanClassName:y,lib:m,connectionInProgress:v}){return g=>{var E;const S=r||o,_=l&&g.ctrlKey,M=g.type==="wheel";if(g.button===1&&g.type==="mousedown"&&(Wn(g,`${m}-flow__node`)||Wn(g,`${m}-flow__edge`)||Wn(g,`${m}-flow__selection`)||Wn(g,`${m}-flow__nodesselection`)))return!0;if(!a&&!S&&!c&&!d&&!l||h||v&&!M||Wn(g,p)&&M||Wn(g,y)&&(!M||c&&M&&!r)||!l&&g.ctrlKey&&M)return!1;if(!l&&g.type==="touchstart"&&((E=g.touches)==null?void 0:E.length)>1)return g.preventDefault(),!1;if(!S&&!c&&!_&&M||!a&&(g.type==="mousedown"||g.type==="touchstart")||Array.isArray(a)&&!a.includes(g.button)&&g.type==="mousedown")return!1;const k=Array.isArray(a)&&a.includes(g.button)||!g.button||g.button<=1;return(!g.ctrlKey||M||t)&&k}}function p1({domNode:t,minZoom:r,maxZoom:o,translateExtent:l,viewport:a,onPanZoom:c,onPanZoomStart:d,onPanZoomEnd:h,onDraggingChange:p}){const y={isZoomingOrPanning:!1,usedRightMouseButton:!1,prevViewport:{},mouseButton:0,timerId:void 0,panScrollTimeout:void 0,isPanScrolling:!1},m=t.getBoundingClientRect();let v=[[0,0],[m.width,m.height]];const g=typeof ResizeObserver<"u"?new ResizeObserver(J=>{const C=J[0];C&&(v=[[0,0],[C.contentRect.width,C.contentRect.height]])}):null;g==null||g.observe(t);const S=Rp().extent(()=>v).scaleExtent([r,o]).translateExtent(l),_=zt(t).call(S);P({x:a.x,y:a.y,zoom:ri(a.zoom,r,o)},[[0,0],[m.width,m.height]],l);const M=_.on("wheel.zoom"),k=_.on("dblclick.zoom");S.wheelDelta(ag);async function E(J,C){return _?new Promise(B=>{S==null||S.interpolate((C==null?void 0:C.interpolate)==="linear"?eo:Qs).transform(Cu(_,C==null?void 0:C.duration,C==null?void 0:C.ease,()=>B(!0)),J)}):!1}function z({noWheelClassName:J,noPanClassName:C,onPaneContextMenu:B,userSelectionActive:F,panOnScroll:V,panOnDrag:A,panOnScrollMode:L,panOnScrollSpeed:O,preventScrolling:j,zoomOnPinch:T,zoomOnScroll:ee,zoomOnDoubleClick:re,panActivationKeyPressed:ue=!1,zoomActivationKeyPressed:de,lib:ce,onTransformChange:Q,connectionInProgress:se,paneClickDistance:pe,selectionOnDrag:Se}){F&&!y.isZoomingOrPanning&&N();const ve=V&&!de&&!F;S.clickDistance(Se?1/0:!Kt(pe)||pe<0?0:pe);const me=ve?a1({zoomPanValues:y,noWheelClassName:J,d3Selection:_,d3Zoom:S,panOnScrollMode:L,panOnScrollSpeed:O,zoomOnPinch:T,onPanZoomStart:d,onPanZoom:c,onPanZoomEnd:h}):u1({noWheelClassName:J,preventScrolling:j,d3ZoomHandler:M});_.on("wheel.zoom",me,{passive:!1});const Ce=c1({zoomPanValues:y,onDraggingChange:p,onPanZoomStart:d});S.on("start",Ce);const Me=d1({zoomPanValues:y,panOnDrag:A,onPaneContextMenu:!!B,onPanZoom:c,onTransformChange:Q});S.on("zoom",Me);const Pe=f1({zoomPanValues:y,panOnDrag:A,panOnScroll:V,onPaneContextMenu:B,onPanZoomEnd:h,onDraggingChange:p});S.on("end",Pe);const ze=h1({panActivationKeyPressed:ue,zoomActivationKeyPressed:de,panOnDrag:A,zoomOnScroll:ee,panOnScroll:V,zoomOnDoubleClick:re,zoomOnPinch:T,userSelectionActive:F,noPanClassName:C,noWheelClassName:J,lib:ce,connectionInProgress:se});S.filter(ze),re?_.on("dblclick.zoom",k):_.on("dblclick.zoom",null)}function N(){S.on("zoom",null)}async function P(J,C,B){const F=Nu(J),V=S==null?void 0:S.constrain()(F,C,B);return V&&await E(V),V}async function b(J,C){const B=Nu(J);return await E(B,C),B}function $(J){if(_){const C=Nu(J),B=_.property("__zoom");(B.k!==J.zoom||B.x!==J.x||B.y!==J.y)&&(S==null||S.transform(_,C,null,{sync:!0}))}}function H(){const J=_?zp(_.node()):{x:0,y:0,k:1};return{x:J.x,y:J.y,zoom:J.k}}async function X(J,C){return _?new Promise(B=>{S==null||S.interpolate((C==null?void 0:C.interpolate)==="linear"?eo:Qs).scaleTo(Cu(_,C==null?void 0:C.duration,C==null?void 0:C.ease,()=>B(!0)),J)}):!1}async function K(J,C){return _?new Promise(B=>{S==null||S.interpolate((C==null?void 0:C.interpolate)==="linear"?eo:Qs).scaleBy(Cu(_,C==null?void 0:C.duration,C==null?void 0:C.ease,()=>B(!0)),J)}):!1}function ne(J){S==null||S.scaleExtent(J)}function Z(J){S==null||S.translateExtent(J)}function te(J){const C=!Kt(J)||J<0?0:J;S==null||S.clickDistance(C)}return{update:z,destroy:N,setViewport:b,setViewportConstrained:P,getViewport:H,scaleTo:X,scaleBy:K,setScaleExtent:ne,setTranslateExtent:Z,syncViewport:$,setClickDistance:te}}var oi;(function(t){t.Line="line",t.Handle="handle"})(oi||(oi={}));function g1({width:t,prevWidth:r,height:o,prevHeight:l,affectsX:a,affectsY:c}){const d=t-r,h=o-l,p=[d>0?1:d<0?-1:0,h>0?1:h<0?-1:0];return d&&a&&(p[0]=p[0]*-1),h&&c&&(p[1]=p[1]*-1),p}function _h(t){const r=t.includes("right")||t.includes("left"),o=t.includes("bottom")||t.includes("top"),l=t.includes("left"),a=t.includes("top");return{isHorizontal:r,isVertical:o,affectsX:l,affectsY:a}}function Bn(t,r){return Math.max(0,r-t)}function Un(t,r){return Math.max(0,t-r)}function Us(t,r,o){return Math.max(0,r-t,t-o)}function kh(t,r){return t?!r:r}function m1(t,r,o,l,a,c,d,h){let{affectsX:p,affectsY:y}=r;const{isHorizontal:m,isVertical:v}=r,g=m&&v,{xSnapped:S,ySnapped:_}=o,{minWidth:M,maxWidth:k,minHeight:E,maxHeight:z}=l,{x:N,y:P,width:b,height:$,aspectRatio:H}=t;let X=Math.floor(m?S-t.pointerX:0),K=Math.floor(v?_-t.pointerY:0);const ne=b+(p?-X:X),Z=$+(y?-K:K),te=-c[0]*b,J=-c[1]*$;let C=Us(ne,M,k),B=Us(Z,E,z);if(d){let A=0,L=0;p&&X<0?A=Bn(N+X+te,d[0][0]):!p&&X>0&&(A=Un(N+ne+te,d[1][0])),y&&K<0?L=Bn(P+K+J,d[0][1]):!y&&K>0&&(L=Un(P+Z+J,d[1][1])),C=Math.max(C,A),B=Math.max(B,L)}if(h){let A=0,L=0;p&&X>0?A=Un(N+X,h[0][0]):!p&&X<0&&(A=Bn(N+ne,h[1][0])),y&&K>0?L=Un(P+K,h[0][1]):!y&&K<0&&(L=Bn(P+Z,h[1][1])),C=Math.max(C,A),B=Math.max(B,L)}if(a){if(m){const A=Us(ne/H,E,z)*H;if(C=Math.max(C,A),d){let L=0;!p&&!y||p&&!y&&g?L=Un(P+J+ne/H,d[1][1])*H:L=Bn(P+J+(p?X:-X)/H,d[0][1])*H,C=Math.max(C,L)}if(h){let L=0;!p&&!y||p&&!y&&g?L=Bn(P+ne/H,h[1][1])*H:L=Un(P+(p?X:-X)/H,h[0][1])*H,C=Math.max(C,L)}}if(v){const A=Us(Z*H,M,k)/H;if(B=Math.max(B,A),d){let L=0;!p&&!y||y&&!p&&g?L=Un(N+Z*H+te,d[1][0])/H:L=Bn(N+(y?K:-K)*H+te,d[0][0])/H,B=Math.max(B,L)}if(h){let L=0;!p&&!y||y&&!p&&g?L=Bn(N+Z*H,h[1][0])/H:L=Un(N+(y?K:-K)*H,h[0][0])/H,B=Math.max(B,L)}}}K=K+(K<0?B:-B),X=X+(X<0?C:-C),a&&(g?ne>Z*H?K=(kh(p,y)?-X:X)/H:X=(kh(p,y)?-K:K)*H:m?(K=X/H,y=p):(X=K*H,p=y));const F=p?N+X:N,V=y?P+K:P;return{width:b+(p?-X:X),height:$+(y?-K:K),x:c[0]*X*(p?-1:1)+F,y:c[1]*K*(y?-1:1)+V}}const ug={width:0,height:0,x:0,y:0},y1={...ug,pointerX:0,pointerY:0,aspectRatio:1};function v1(t,r,o){const l=r.position.x+t.position.x,a=r.position.y+t.position.y,c=t.measured.width??0,d=t.measured.height??0,h=o[0]*c,p=o[1]*d;return[[l-h,a-p],[l+c-h,a+d-p]]}function x1({domNode:t,nodeId:r,getStoreItems:o,onChange:l,onEnd:a}){const c=zt(t);let d={controlDirection:_h("bottom-right"),boundaries:{minWidth:0,minHeight:0,maxWidth:Number.MAX_VALUE,maxHeight:Number.MAX_VALUE},resizeDirection:void 0,keepAspectRatio:!1};function h({controlPosition:y,boundaries:m,keepAspectRatio:v,resizeDirection:g,onResizeStart:S,onResize:_,onResizeEnd:M,shouldResize:k}){let E={...ug},z={...y1};d={boundaries:m,resizeDirection:g,keepAspectRatio:v,controlDirection:_h(y)};let N,P=null,b=[],$,H,X,K=!1;const ne=vp().on("start",Z=>{const{nodeLookup:te,transform:J,snapGrid:C,snapToGrid:B,nodeOrigin:F,paneDomNode:V}=o();if(N=te.get(r),!N)return;P=(V==null?void 0:V.getBoundingClientRect())??null;const{xSnapped:A,ySnapped:L}=to(Z.sourceEvent,{transform:J,snapGrid:C,snapToGrid:B,containerBounds:P});E={width:N.measured.width??0,height:N.measured.height??0,x:N.position.x??0,y:N.position.y??0},z={...E,pointerX:A,pointerY:L,aspectRatio:E.width/E.height},$=void 0,H=xr(N.extent)?N.extent:void 0,N.parentId&&(N.extent==="parent"||N.expandParent)&&($=te.get(N.parentId)),$&&N.extent==="parent"&&(H=[[0,0],[$.measured.width,$.measured.height]]),b=[],X=void 0;for(const[O,j]of te)if(j.parentId===r&&(b.push({id:O,position:{...j.position},extent:j.extent}),j.extent==="parent"||j.expandParent)){const T=v1(j,N,j.origin??F);X?X=[[Math.min(T[0][0],X[0][0]),Math.min(T[0][1],X[0][1])],[Math.max(T[1][0],X[1][0]),Math.max(T[1][1],X[1][1])]]:X=T}S==null||S(Z,{...E})}).on("drag",Z=>{const{transform:te,snapGrid:J,snapToGrid:C,nodeOrigin:B}=o(),F=to(Z.sourceEvent,{transform:te,snapGrid:J,snapToGrid:C,containerBounds:P}),V=[];if(!N)return;const{x:A,y:L,width:O,height:j}=E,T={},ee=N.origin??B,{width:re,height:ue,x:de,y:ce}=m1(z,d.controlDirection,F,d.boundaries,d.keepAspectRatio,ee,H,X),Q=re!==O,se=ue!==j,pe=de!==A&&Q,Se=ce!==L&&se;if(!pe&&!Se&&!Q&&!se)return;if((pe||Se||ee[0]===1||ee[1]===1)&&(T.x=pe?de:E.x,T.y=Se?ce:E.y,E.x=T.x,E.y=T.y,b.length>0)){const Me=de-A,Pe=ce-L;for(const ze of b)ze.position={x:ze.position.x-Me+ee[0]*(re-O),y:ze.position.y-Pe+ee[1]*(ue-j)},V.push(ze)}if((Q||se)&&(T.width=Q&&(!d.resizeDirection||d.resizeDirection==="horizontal")?re:E.width,T.height=se&&(!d.resizeDirection||d.resizeDirection==="vertical")?ue:E.height,E.width=T.width,E.height=T.height),$&&N.expandParent){const Me=ee[0]*(T.width??0);T.x&&T.x{K&&(M==null||M(Z,{...E}),a==null||a({...E}),K=!1)});c.call(ne)}function p(){c.on(".drag",null)}return{update:h,destroy:p}}var ju={exports:{}},Mu={},Pu={exports:{}},Iu={};/** + * @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 Eh;function w1(){if(Eh)return Iu;Eh=1;var t=fo();function r(v,g){return v===g&&(v!==0||1/v===1/g)||v!==v&&g!==g}var o=typeof Object.is=="function"?Object.is:r,l=t.useState,a=t.useEffect,c=t.useLayoutEffect,d=t.useDebugValue;function h(v,g){var S=g(),_=l({inst:{value:S,getSnapshot:g}}),M=_[0].inst,k=_[1];return c(function(){M.value=S,M.getSnapshot=g,p(M)&&k({inst:M})},[v,S,g]),a(function(){return p(M)&&k({inst:M}),v(function(){p(M)&&k({inst:M})})},[v]),d(S),S}function p(v){var g=v.getSnapshot;v=v.value;try{var S=g();return!o(v,S)}catch{return!0}}function y(v,g){return g()}var m=typeof window>"u"||typeof window.document>"u"||typeof window.document.createElement>"u"?y:h;return Iu.useSyncExternalStore=t.useSyncExternalStore!==void 0?t.useSyncExternalStore:m,Iu}var Nh;function S1(){return Nh||(Nh=1,Pu.exports=w1()),Pu.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 Ch;function _1(){if(Ch)return Mu;Ch=1;var t=fo(),r=S1();function o(y,m){return y===m&&(y!==0||1/y===1/m)||y!==y&&m!==m}var l=typeof Object.is=="function"?Object.is:o,a=r.useSyncExternalStore,c=t.useRef,d=t.useEffect,h=t.useMemo,p=t.useDebugValue;return Mu.useSyncExternalStoreWithSelector=function(y,m,v,g,S){var _=c(null);if(_.current===null){var M={hasValue:!1,value:null};_.current=M}else M=_.current;_=h(function(){function E($){if(!z){if(z=!0,N=$,$=g($),S!==void 0&&M.hasValue){var H=M.value;if(S(H,$))return P=H}return P=$}if(H=P,l(N,$))return H;var X=g($);return S!==void 0&&S(H,X)?(N=$,H):(N=$,P=X)}var z=!1,N,P,b=v===void 0?null:v;return[function(){return E(m())},b===null?void 0:function(){return E(b())}]},[m,v,g,S]);var k=a(y,_[0],_[1]);return d(function(){M.hasValue=!0,M.value=k},[k]),p(k),k},Mu}var jh;function k1(){return jh||(jh=1,ju.exports=_1()),ju.exports}var E1=k1();const N1=np(E1),C1={},Mh=t=>{let r;const o=new Set,l=(m,v)=>{const g=typeof m=="function"?m(r):m;if(!Object.is(g,r)){const S=r;r=v??(typeof g!="object"||g===null)?g:Object.assign({},r,g),o.forEach(_=>_(r,S))}},a=()=>r,p={setState:l,getState:a,getInitialState:()=>y,subscribe:m=>(o.add(m),()=>o.delete(m)),destroy:()=>{(C1?"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."),o.clear()}},y=r=t(l,a,p);return p},j1=t=>t?Mh(t):Mh,{useDebugValue:M1}=I0,{useSyncExternalStoreWithSelector:P1}=N1,I1=t=>t;function cg(t,r=I1,o){const l=P1(t.subscribe,t.getState,t.getServerState||t.getInitialState,r,o);return M1(l),l}const Ph=(t,r)=>{const o=j1(t),l=(a,c=r)=>cg(o,a,c);return Object.assign(l,o),l},T1=(t,r)=>t?Ph(t,r):Ph;function Ue(t,r){if(Object.is(t,r))return!0;if(typeof t!="object"||t===null||typeof r!="object"||r===null)return!1;if(t instanceof Map&&r instanceof Map){if(t.size!==r.size)return!1;for(const[l,a]of t)if(!Object.is(a,r.get(l)))return!1;return!0}if(t instanceof Set&&r instanceof Set){if(t.size!==r.size)return!1;for(const l of t)if(!r.has(l))return!1;return!0}const o=Object.keys(t);if(o.length!==Object.keys(r).length)return!1;for(const l of o)if(!Object.prototype.hasOwnProperty.call(r,l)||!Object.is(t[l],r[l]))return!1;return!0}rp();const xl=W.createContext(null),z1=xl.Provider,dg=qt.error001("react");function Te(t,r){const o=W.useContext(xl);if(o===null)throw new Error(dg);return cg(o,t,r)}function be(){const t=W.useContext(xl);if(t===null)throw new Error(dg);return W.useMemo(()=>({getState:t.getState,setState:t.setState,subscribe:t.subscribe}),[t])}const Ih={display:"none"},R1={position:"absolute",width:1,height:1,margin:-1,border:0,padding:0,overflow:"hidden",clip:"rect(0px, 0px, 0px, 0px)",clipPath:"inset(100%)"},fg="react-flow__node-desc",hg="react-flow__edge-desc",L1="react-flow__aria-live",A1=t=>t.ariaLiveMessage,$1=t=>t.ariaLabelConfig;function D1({rfId:t}){const r=Te(A1);return x.jsx("div",{id:`${L1}-${t}`,"aria-live":"assertive","aria-atomic":"true",style:R1,children:r})}function O1({rfId:t,disableKeyboardA11y:r}){const o=Te($1);return x.jsxs(x.Fragment,{children:[x.jsx("div",{id:`${fg}-${t}`,style:Ih,children:r?o["node.a11yDescription.default"]:o["node.a11yDescription.keyboardDisabled"]}),x.jsx("div",{id:`${hg}-${t}`,style:Ih,children:o["edge.a11yDescription.default"]}),!r&&x.jsx(D1,{rfId:t})]})}const wl=W.forwardRef(({position:t="top-left",children:r,className:o,style:l,...a},c)=>{const d=`${t}`.split("-");return x.jsx("div",{className:Qe(["react-flow__panel",o,...d]),style:l,ref:c,...a,children:r})});wl.displayName="Panel";const Th="https://reactflow.dev?utm_source=attribution";function b1({proOptions:t,position:r="bottom-right"}){return t!=null&&t.hideAttribution?null:x.jsx(wl,{position:r,className:"react-flow__attribution","data-message":`Please only hide this attribution when you are subscribed to React Flow Pro: ${Th}`,children:x.jsx("a",{href:Th,target:"_blank",rel:"noopener noreferrer","aria-label":"React Flow attribution",children:"React Flow"})})}const F1=t=>{const r=[],o=[];for(const[,l]of t.nodeLookup)l.selected&&r.push(l.internals.userNode);for(const[,l]of t.edgeLookup)l.selected&&o.push(l);return{selectedNodes:r,selectedEdges:o}},Ws=t=>t.id;function H1(t,r){return Ue(t.selectedNodes.map(Ws),r.selectedNodes.map(Ws))&&Ue(t.selectedEdges.map(Ws),r.selectedEdges.map(Ws))}function V1({onSelectionChange:t}){const r=be(),{selectedNodes:o,selectedEdges:l}=Te(F1,H1);return W.useEffect(()=>{const a={nodes:o,edges:l};t==null||t(a),r.getState().onSelectionChangeHandlers.forEach(c=>c(a))},[o,l,t]),null}const B1=t=>!!t.onSelectionChangeHandlers;function U1({onSelectionChange:t}){const r=Te(B1);return t||r?x.jsx(V1,{onSelectionChange:t}):null}const pg=[0,0],W1={x:0,y:0,zoom:1},Y1=["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"],zh=[...Y1,"rfId"],X1=t=>({setNodes:t.setNodes,setEdges:t.setEdges,setMinZoom:t.setMinZoom,setMaxZoom:t.setMaxZoom,setTranslateExtent:t.setTranslateExtent,setNodeExtent:t.setNodeExtent,reset:t.reset,setDefaultNodesAndEdges:t.setDefaultNodesAndEdges}),Rh={translateExtent:so,nodeOrigin:pg,minZoom:.5,maxZoom:2,elementsSelectable:!0,noPanClassName:"nopan",rfId:"1"};function Q1(t){const{setNodes:r,setEdges:o,setMinZoom:l,setMaxZoom:a,setTranslateExtent:c,setNodeExtent:d,reset:h,setDefaultNodesAndEdges:p}=Te(X1,Ue),y=be();W.useEffect(()=>(p(t.defaultNodes,t.defaultEdges),()=>{m.current=Rh,h()}),[]);const m=W.useRef(Rh);return W.useEffect(()=>{for(const v of zh){const g=t[v],S=m.current[v];g!==S&&(typeof t[v]>"u"||(v==="nodes"?r(g):v==="edges"?o(g):v==="minZoom"?l(g):v==="maxZoom"?a(g):v==="translateExtent"?c(g):v==="nodeExtent"?d(g):v==="ariaLabelConfig"?y.setState({ariaLabelConfig:zw(g)}):v==="fitView"?y.setState({fitViewQueued:g}):v==="fitViewOptions"?y.setState({fitViewOptions:g}):y.setState({[v]:g})))}m.current=t},zh.map(v=>t[v])),null}function Lh(){return typeof window>"u"||!window.matchMedia?null:window.matchMedia("(prefers-color-scheme: dark)")}function K1(t){var l;const[r,o]=W.useState(t==="system"?null:t);return W.useEffect(()=>{if(t!=="system"){o(t);return}const a=Lh(),c=()=>o(a!=null&&a.matches?"dark":"light");return c(),a==null||a.addEventListener("change",c),()=>{a==null||a.removeEventListener("change",c)}},[t]),r!==null?r:(l=Lh())!=null&&l.matches?"dark":"light"}const Ah=typeof document<"u"?document:null;function co(t=null,r={target:Ah,actInsideInputWithModifier:!0}){const[o,l]=W.useState(!1),a=W.useRef(!1),c=W.useRef(new Set([])),[d,h]=W.useMemo(()=>{if(t!==null){const y=(Array.isArray(t)?t:[t]).filter(v=>typeof v=="string").map(v=>v.replace(/\+/g,` +`).replace(` + +`,` ++`).split(` +`)),m=y.reduce((v,g)=>v.concat(...g),[]);return[y,m]}return[[],[]]},[t]);return W.useEffect(()=>{const p=(r==null?void 0:r.target)??Ah,y=(r==null?void 0:r.actInsideInputWithModifier)??!0;if(t!==null){const m=S=>{var k,E;if(a.current=S.ctrlKey||S.metaKey||S.shiftKey||S.altKey,(!a.current||a.current&&!y)&&Xp(S))return!1;const M=Dh(S.code,h);if(c.current.add(S[M]),$h(d,c.current,!1)){const z=((E=(k=S.composedPath)==null?void 0:k.call(S))==null?void 0:E[0])||S.target,N=(z==null?void 0:z.nodeName)==="BUTTON"||(z==null?void 0:z.nodeName)==="A";r.preventDefault!==!1&&(a.current||!N)&&S.preventDefault(),l(!0)}},v=S=>{const _=Dh(S.code,h);$h(d,c.current,!0)?(l(!1),c.current.clear()):c.current.delete(S[_]),S.key==="Meta"&&c.current.clear(),a.current=!1},g=()=>{c.current.clear(),l(!1)};return p==null||p.addEventListener("keydown",m),p==null||p.addEventListener("keyup",v),window.addEventListener("blur",g),window.addEventListener("contextmenu",g),()=>{p==null||p.removeEventListener("keydown",m),p==null||p.removeEventListener("keyup",v),window.removeEventListener("blur",g),window.removeEventListener("contextmenu",g)}}},[t,l]),o}function $h(t,r,o){return t.filter(l=>o||l.length===r.size).some(l=>l.every(a=>r.has(a)))}function Dh(t,r){return r.includes(t)?"code":"key"}const G1=()=>{const t=be();return W.useMemo(()=>({zoomIn:async r=>{const{panZoom:o}=t.getState();return o?o.scaleBy(1.2,r):!1},zoomOut:async r=>{const{panZoom:o}=t.getState();return o?o.scaleBy(1/1.2,r):!1},zoomTo:async(r,o)=>{const{panZoom:l}=t.getState();return l?l.scaleTo(r,o):!1},getZoom:()=>t.getState().transform[2],setViewport:async(r,o)=>{const{transform:[l,a,c],panZoom:d}=t.getState();return d?(await d.setViewport({x:r.x??l,y:r.y??a,zoom:r.zoom??c},o),!0):!1},getViewport:()=>{const[r,o,l]=t.getState().transform;return{x:r,y:o,zoom:l}},setCenter:async(r,o,l)=>t.getState().setCenter(r,o,l),fitBounds:async(r,o)=>{const{width:l,height:a,minZoom:c,maxZoom:d,panZoom:h}=t.getState(),p=oc(r,l,a,c,d,(o==null?void 0:o.padding)??.1);return h?(await h.setViewport(p,{duration:o==null?void 0:o.duration,ease:o==null?void 0:o.ease,interpolate:o==null?void 0:o.interpolate}),!0):!1},screenToFlowPosition:(r,o={})=>{const{transform:l,snapGrid:a,snapToGrid:c,domNode:d}=t.getState();if(!d)return r;const{x:h,y:p}=d.getBoundingClientRect(),y={x:r.x-h,y:r.y-p},m=o.snapGrid??a,v=o.snapToGrid??c;return xo(y,l,v,m)},flowToScreenPosition:r=>{const{transform:o,domNode:l}=t.getState();if(!l)return r;const{x:a,y:c}=l.getBoundingClientRect(),d=ii(r,o);return{x:d.x+a,y:d.y+c}}}),[])};function gg(t,r){const o=[],l=new Map,a=[];for(const c of t)if(c.type==="add"){a.push(c);continue}else if(c.type==="remove"||c.type==="replace")l.set(c.id,[c]);else{const d=l.get(c.id);d?d.push(c):l.set(c.id,[c])}for(const c of r){const d=l.get(c.id);if(!d){o.push(c);continue}if(d[0].type==="remove")continue;if(d[0].type==="replace"){o.push({...d[0].item});continue}const h={...c};for(const p of d)q1(p,h);o.push(h)}return a.length&&a.forEach(c=>{c.index!==void 0?o.splice(c.index,0,{...c.item}):o.push({...c.item})}),o}function q1(t,r){switch(t.type){case"select":{r.selected=t.selected;break}case"position":{typeof t.position<"u"&&(r.position=t.position),typeof t.dragging<"u"&&(r.dragging=t.dragging);break}case"dimensions":{typeof t.dimensions<"u"&&(r.measured={...t.dimensions},t.setAttributes&&((t.setAttributes===!0||t.setAttributes==="width")&&(r.width=t.dimensions.width),(t.setAttributes===!0||t.setAttributes==="height")&&(r.height=t.dimensions.height))),typeof t.resizing=="boolean"&&(r.resizing=t.resizing);break}}}function Z1(t,r){return gg(t,r)}function J1(t,r){return gg(t,r)}function fr(t,r){return{id:t,type:"select",selected:r}}function qr(t,r=new Set,o=!1){const l=[];for(const[a,c]of t){const d=r.has(a);!(c.selected===void 0&&!d)&&c.selected!==d&&(o&&(c.selected=d),l.push(fr(c.id,d)))}return l}function Oh({items:t=[],lookup:r}){var a;const o=[],l=new Map(t.map(c=>[c.id,c]));for(const[c,d]of t.entries()){const h=r.get(d.id),p=((a=h==null?void 0:h.internals)==null?void 0:a.userNode)??h;p!==void 0&&p!==d&&o.push({id:d.id,item:d,type:"replace"}),p===void 0&&o.push({item:d,type:"add",index:c})}for(const[c]of r)l.get(c)===void 0&&o.push({id:c,type:"remove"});return o}function bh(t){return{id:t.id,type:"remove"}}const eS=Bp();function tS(t,r,o={}){return Ow(t,r,{...o,onError:o.onError??eS})}const Fh=t=>kw(t),nS=t=>Op(t);function mg(t){return W.forwardRef(t)}const yg=typeof window<"u"?W.useLayoutEffect:W.useEffect;function Hh(t){const[r,o]=W.useState(BigInt(0)),[l]=W.useState(()=>rS(()=>o(a=>a+BigInt(1))));return yg(()=>{const a=l.get();a.length&&(t(a),l.reset())},[r]),l}function rS(t){let r=[];return{get:()=>r,reset:()=>{r=[]},push:o=>{r.push(o),t()}}}const vg=W.createContext(null);function iS({children:t}){const r=be(),o=W.useCallback(h=>{const{nodes:p=[],setNodes:y,hasDefaultNodes:m,onNodesChange:v,nodeLookup:g,fitViewQueued:S,onNodesChangeMiddlewareMap:_}=r.getState();let M=p;for(const E of h)M=typeof E=="function"?E(M):E;let k=Oh({items:M,lookup:g});for(const E of _.values())k=E(k);m&&y(M),k.length>0?v==null||v(k):S&&window.requestAnimationFrame(()=>{const{fitViewQueued:E,nodes:z,setNodes:N}=r.getState();E&&N(z)})},[]),l=Hh(o),a=W.useCallback(h=>{const{edges:p=[],setEdges:y,hasDefaultEdges:m,onEdgesChange:v,edgeLookup:g}=r.getState();let S=p;for(const _ of h)S=typeof _=="function"?_(S):_;m?y(S):v&&v(Oh({items:S,lookup:g}))},[]),c=Hh(a),d=W.useMemo(()=>({nodeQueue:l,edgeQueue:c}),[]);return x.jsx(vg.Provider,{value:d,children:t})}function oS(){const t=W.useContext(vg);if(!t)throw new Error("useBatchContext must be used within a BatchProvider");return t}const sS=t=>!!t.panZoom;function fc(){const t=G1(),r=be(),o=oS(),l=Te(sS),a=W.useMemo(()=>{const c=v=>r.getState().nodeLookup.get(v),d=v=>{o.nodeQueue.push(v)},h=v=>{o.edgeQueue.push(v)},p=v=>{var E,z;const{nodeLookup:g,nodeOrigin:S}=r.getState(),_=Fh(v)?v:g.get(v.id),M=_.parentId?Wp(_.position,_.measured,_.parentId,g,S):_.position,k={..._,position:M,width:((E=_.measured)==null?void 0:E.width)??_.width,height:((z=_.measured)==null?void 0:z.height)??_.height};return ao(k)},y=(v,g,S={replace:!1})=>{d(_=>_.map(M=>{if(M.id===v){const k=typeof g=="function"?g(M):g;return S.replace&&Fh(k)?k:{...M,...k}}return M}))},m=(v,g,S={replace:!1})=>{h(_=>_.map(M=>{if(M.id===v){const k=typeof g=="function"?g(M):g;return S.replace&&nS(k)?k:{...M,...k}}return M}))};return{getNodes:()=>r.getState().nodes.map(v=>({...v})),getNode:v=>{var g;return(g=c(v))==null?void 0:g.internals.userNode},getInternalNode:c,getEdges:()=>{const{edges:v=[]}=r.getState();return v.map(g=>({...g}))},getEdge:v=>r.getState().edgeLookup.get(v),setNodes:d,setEdges:h,addNodes:v=>{const g=Array.isArray(v)?v:[v];o.nodeQueue.push(S=>[...S,...g])},addEdges:v=>{const g=Array.isArray(v)?v:[v];o.edgeQueue.push(S=>[...S,...g])},toObject:()=>{const{nodes:v=[],edges:g=[],transform:S}=r.getState(),[_,M,k]=S;return{nodes:v.map(E=>({...E})),edges:g.map(E=>({...E})),viewport:{x:_,y:M,zoom:k}}},deleteElements:async({nodes:v=[],edges:g=[]})=>{const{nodes:S,edges:_,onNodesDelete:M,onEdgesDelete:k,triggerNodeChanges:E,triggerEdgeChanges:z,onDelete:N,onBeforeDelete:P}=r.getState(),{nodes:b,edges:$}=await Mw({nodesToRemove:v,edgesToRemove:g,nodes:S,edges:_,onBeforeDelete:P}),H=$.length>0,X=b.length>0;if(H){const K=$.map(bh);k==null||k($),z(K)}if(X){const K=b.map(bh);M==null||M(b),E(K)}return(X||H)&&(N==null||N({nodes:b,edges:$})),{deletedNodes:b,deletedEdges:$}},getIntersectingNodes:(v,g=!0,S)=>{const _=dh(v),M=_?v:p(v),k=S!==void 0;return M?(S||r.getState().nodes).filter(E=>{const z=r.getState().nodeLookup.get(E.id);if(z&&!_&&(E.id===v.id||!z.internals.positionAbsolute))return!1;const N=ao(k?E:z),P=ll(N,M);return g&&P>0||P>=N.width*N.height||P>=M.width*M.height}):[]},isNodeIntersecting:(v,g,S=!0)=>{const M=dh(v)?v:p(v);if(!M)return!1;const k=ll(M,g);return S&&k>0||k>=g.width*g.height||k>=M.width*M.height},updateNode:y,updateNodeData:(v,g,S={replace:!1})=>{y(v,_=>{const M=typeof g=="function"?g(_):g;return S.replace?{..._,data:M}:{..._,data:{..._.data,...M}}},S)},updateEdge:m,updateEdgeData:(v,g,S={replace:!1})=>{m(v,_=>{const M=typeof g=="function"?g(_):g;return S.replace?{..._,data:M}:{..._,data:{..._.data,...M}}},S)},getNodesBounds:v=>{const{nodeLookup:g,nodeOrigin:S}=r.getState();return Ew(v,{nodeLookup:g,nodeOrigin:S})},getHandleConnections:({type:v,id:g,nodeId:S})=>{var _;return Array.from(((_=r.getState().connectionLookup.get(`${S}-${v}${g?`-${g}`:""}`))==null?void 0:_.values())??[])},getNodeConnections:({type:v,handleId:g,nodeId:S})=>{var _;return Array.from(((_=r.getState().connectionLookup.get(`${S}${v?g?`-${v}-${g}`:`-${v}`:""}`))==null?void 0:_.values())??[])},fitView:async v=>{const g=r.getState().fitViewResolver??Tw();return r.setState({fitViewQueued:!0,fitViewOptions:v,fitViewResolver:g}),o.nodeQueue.push(S=>[...S]),g.promise}}},[]);return W.useMemo(()=>({...a,...t,viewportInitialized:l}),[l])}const Vh=t=>t.selected,lS=typeof window<"u"?window:void 0;function aS({deleteKeyCode:t,multiSelectionKeyCode:r}){const o=be(),{deleteElements:l}=fc(),a=co(t,{actInsideInputWithModifier:!1}),c=co(r,{target:lS});W.useEffect(()=>{if(a){const{edges:d,nodes:h}=o.getState();l({nodes:h.filter(Vh),edges:d.filter(Vh)}),o.setState({nodesSelectionActive:!1})}},[a]),W.useEffect(()=>{o.setState({multiSelectionActive:c})},[c])}function uS(t){const r=be();W.useEffect(()=>{const o=()=>{var a,c,d,h;if(!t.current||!(((c=(a=t.current).checkVisibility)==null?void 0:c.call(a))??!0))return!1;const l=sc(t.current);(l.height===0||l.width===0)&&((h=(d=r.getState()).onError)==null||h.call(d,"004",qt.error004())),r.setState({width:l.width||500,height:l.height||500})};if(t.current){o(),window.addEventListener("resize",o);const l=new ResizeObserver(()=>o());return l.observe(t.current),()=>{window.removeEventListener("resize",o),l&&t.current&&l.unobserve(t.current)}}},[])}const Sl={position:"absolute",width:"100%",height:"100%",top:0,left:0},cS=t=>({userSelectionActive:t.userSelectionActive,lib:t.lib,connectionInProgress:t.connection.inProgress});function dS({onPaneContextMenu:t,zoomOnScroll:r=!0,zoomOnPinch:o=!0,panOnScroll:l=!1,panActivationKeyPressed:a,panOnScrollSpeed:c=.5,panOnScrollMode:d=gr.Free,zoomOnDoubleClick:h=!0,panOnDrag:p=!0,defaultViewport:y,translateExtent:m,minZoom:v,maxZoom:g,zoomActivationKeyCode:S,preventScrolling:_=!0,children:M,noWheelClassName:k,noPanClassName:E,onViewportChange:z,isControlledViewport:N,paneClickDistance:P,selectionOnDrag:b}){const $=be(),H=W.useRef(null),{userSelectionActive:X,lib:K,connectionInProgress:ne}=Te(cS,Ue),Z=co(S),te=W.useRef();uS(H);const J=W.useCallback(C=>{z==null||z({x:C[0],y:C[1],zoom:C[2]}),N||$.setState({transform:C})},[z,N]);return W.useEffect(()=>{if(H.current){te.current=p1({domNode:H.current,minZoom:v,maxZoom:g,translateExtent:m,viewport:y,onDraggingChange:V=>$.setState(A=>A.paneDragging===V?A:{paneDragging:V}),onPanZoomStart:(V,A)=>{const{onViewportChangeStart:L,onMoveStart:O}=$.getState();O==null||O(V,A),L==null||L(A)},onPanZoom:(V,A)=>{const{onViewportChange:L,onMove:O}=$.getState();O==null||O(V,A),L==null||L(A)},onPanZoomEnd:(V,A)=>{const{onViewportChangeEnd:L,onMoveEnd:O}=$.getState();O==null||O(V,A),L==null||L(A)}});const{x:C,y:B,zoom:F}=te.current.getViewport();return $.setState({panZoom:te.current,transform:[C,B,F],domNode:H.current.closest(".react-flow")}),()=>{var V;(V=te.current)==null||V.destroy()}}},[]),W.useEffect(()=>{var C;(C=te.current)==null||C.update({onPaneContextMenu:t,zoomOnScroll:r,zoomOnPinch:o,panOnScroll:l,panActivationKeyPressed:a,panOnScrollSpeed:c,panOnScrollMode:d,zoomOnDoubleClick:h,panOnDrag:p,zoomActivationKeyPressed:Z,preventScrolling:_,noPanClassName:E,userSelectionActive:X,noWheelClassName:k,lib:K,onTransformChange:J,connectionInProgress:ne,selectionOnDrag:b,paneClickDistance:P})},[t,r,o,l,a,c,d,h,p,Z,_,E,X,k,K,J,ne,b,P]),x.jsx("div",{className:"react-flow__renderer",ref:H,style:Sl,children:M})}const fS=t=>({userSelectionActive:t.userSelectionActive,userSelectionRect:t.userSelectionRect});function hS(){const{userSelectionActive:t,userSelectionRect:r}=Te(fS,Ue);return t&&r?x.jsx("div",{className:"react-flow__selection react-flow__container",style:{width:r.width,height:r.height,transform:`translate(${r.x}px, ${r.y}px)`}}):null}const Tu=(t,r)=>o=>{o.target===r.current&&(t==null||t(o))},pS=t=>({userSelectionActive:t.userSelectionActive,elementsSelectable:t.elementsSelectable,dragging:t.paneDragging,panBy:t.panBy,autoPanSpeed:t.autoPanSpeed});function gS({isSelecting:t,selectionKeyPressed:r,selectionMode:o=lo.Full,panOnDrag:l,autoPanOnSelection:a,paneClickDistance:c,selectionOnDrag:d,onSelectionStart:h,onSelectionEnd:p,onPaneClick:y,onPaneContextMenu:m,onPaneScroll:v,onPaneMouseEnter:g,onPaneMouseMove:S,onPaneMouseLeave:_,children:M}){const k=W.useRef(0),E=be(),{userSelectionActive:z,elementsSelectable:N,dragging:P,panBy:b,autoPanSpeed:$}=Te(pS,Ue),H=N&&(t||z),X=W.useRef(null),K=W.useRef(),ne=W.useRef(new Set),Z=W.useRef(new Set),te=W.useRef(!1),J=W.useRef(!1),C=W.useRef({x:0,y:0}),B=W.useRef(!1),F=Q=>{if(J.current||te.current||E.getState().connection.inProgress){J.current=!1,te.current=!1;return}y==null||y(Q),E.getState().resetSelectedElements(),E.setState({nodesSelectionActive:!1})},V=Q=>{if(Array.isArray(l)&&(l!=null&&l.includes(2))){Q.preventDefault();return}m==null||m(Q)},A=v?Q=>v(Q):void 0,L=Q=>{J.current&&(Q.stopPropagation(),J.current=!1)},O=Q=>{var ze,Ze;if(Q.pointerType==="touch"&&l!==!1&&!r)return;const{domNode:se,transform:pe}=E.getState();if(K.current=se==null?void 0:se.getBoundingClientRect(),!K.current)return;const Se=Q.target===X.current;if(!Se&&!!Q.target.closest(".nokey")||!t||!(d&&Se||r)||Q.button!==0||!Q.isPrimary)return;(Ze=(ze=Q.target)==null?void 0:ze.setPointerCapture)==null||Ze.call(ze,Q.pointerId),J.current=!1;const{x:Ce,y:Me}=Gt(Q.nativeEvent,K.current),Pe=xo({x:Ce,y:Me},pe);E.setState({userSelectionRect:{width:0,height:0,startX:Pe.x,startY:Pe.y,x:Ce,y:Me}}),Se||(Q.stopPropagation(),Q.preventDefault())};function j(Q,se){const{userSelectionRect:pe}=E.getState();if(!pe)return;const{transform:Se,nodeLookup:ve,edgeLookup:me,connectionLookup:Ce,triggerNodeChanges:Me,triggerEdgeChanges:Pe,defaultEdgeOptions:ze}=E.getState(),Ze={x:pe.startX,y:pe.startY},{x:lt,y:Je}=ii(Ze,Se),et={startX:Ze.x,startY:Ze.y,x:Qit.id)),Z.current=new Set;const Et=(ze==null?void 0:ze.selectable)??!0;for(const it of ne.current){const ft=Ce.get(it);if(ft)for(const{edgeId:q}of ft.values()){const we=me.get(q);we&&(we.selectable??Et)&&Z.current.add(q)}}if(!fh(Lt,ne.current)){const it=qr(ve,ne.current,!0);Me(it)}if(!fh(kt,Z.current)){const it=qr(me,Z.current);Pe(it)}E.setState({userSelectionRect:et,userSelectionActive:!0,nodesSelectionActive:!1})}function T(){if(!a||!K.current)return;const[Q,se]=ic(C.current,K.current,$);b({x:Q,y:se}).then(pe=>{if(!J.current||!pe){k.current=requestAnimationFrame(T);return}const{x:Se,y:ve}=C.current;j(Se,ve),k.current=requestAnimationFrame(T)})}const ee=()=>{cancelAnimationFrame(k.current),k.current=0,B.current=!1};W.useEffect(()=>()=>ee(),[]);const re=Q=>{const{userSelectionRect:se,transform:pe,resetSelectedElements:Se}=E.getState();if(!K.current||!se)return;const{x:ve,y:me}=Gt(Q.nativeEvent,K.current);C.current={x:ve,y:me};const Ce=ii({x:se.startX,y:se.startY},pe);if(!J.current){const Me=r?0:c;if(Math.hypot(ve-Ce.x,me-Ce.y)<=Me)return;Se(),h==null||h(Q)}J.current=!0,B.current||(T(),B.current=!0),j(ve,me)},ue=Q=>{var se,pe;if(!H){Q.target===X.current&&E.getState().connection.inProgress&&(te.current=!0);return}Q.button===0&&((pe=(se=Q.target)==null?void 0:se.releasePointerCapture)==null||pe.call(se,Q.pointerId),!z&&Q.target===X.current&&E.getState().userSelectionRect&&(F==null||F(Q)),E.setState({userSelectionActive:!1,userSelectionRect:null}),J.current&&(p==null||p(Q),E.setState({nodesSelectionActive:ne.current.size>0})),ee())},de=Q=>{var se,pe;(pe=(se=Q.target)==null?void 0:se.releasePointerCapture)==null||pe.call(se,Q.pointerId),ee()},ce=l===!0||Array.isArray(l)&&l.includes(0);return x.jsxs("div",{className:Qe(["react-flow__pane",{draggable:ce,dragging:P,selection:t}]),onClick:H?void 0:Tu(F,X),onContextMenu:Tu(V,X),onWheel:Tu(A,X),onPointerEnter:H?void 0:g,onPointerMove:H?re:S,onPointerUp:ue,onPointerCancel:H?de:void 0,onPointerDownCapture:H?O:void 0,onClickCapture:H?L:void 0,onPointerLeave:_,ref:X,style:Sl,children:[M,x.jsx(hS,{})]})}function Xu({id:t,store:r,unselect:o=!1,nodeRef:l}){const{addSelectedNodes:a,unselectNodesAndEdges:c,multiSelectionActive:d,nodeLookup:h,onError:p}=r.getState(),y=h.get(t);if(!y){p==null||p("012",qt.error012(t));return}r.setState({nodesSelectionActive:!1}),y.selected?(o||y.selected&&d)&&(c({nodes:[y],edges:[]}),requestAnimationFrame(()=>{var m;return(m=l==null?void 0:l.current)==null?void 0:m.blur()})):a([t])}function xg({nodeRef:t,disabled:r=!1,noDragClassName:o,handleSelector:l,nodeId:a,isSelectable:c,nodeClickDistance:d}){const h=be(),[p,y]=W.useState(!1),m=W.useRef();return W.useEffect(()=>{if(!r)return m.current=e1({getStoreItems:()=>h.getState(),onNodeMouseDown:v=>{Xu({id:v,store:h,nodeRef:t})},onDragStart:()=>{y(!0)},onDragStop:()=>{y(!1)}}),()=>{var v;(v=m.current)==null||v.destroy(),m.current=void 0}},[r,h,t]),W.useEffect(()=>{r||!t.current||!m.current||m.current.update({noDragClassName:o,handleSelector:l,domNode:t.current,isSelectable:c,nodeId:a,nodeClickDistance:d})},[o,l,r,c,t,a,d]),p}const mS=t=>r=>r.selected&&(r.draggable||t&&typeof r.draggable>"u");function wg(){const t=be();return W.useCallback(o=>{const{nodeExtent:l,snapToGrid:a,snapGrid:c,nodesDraggable:d,onError:h,updateNodePositions:p,nodeLookup:y,nodeOrigin:m}=t.getState(),v=new Map,g=mS(d),S=a?c[0]:5,_=a?c[1]:5,M=o.direction.x*S*o.factor,k=o.direction.y*_*o.factor;for(const[,E]of y){if(!g(E))continue;let z={x:E.internals.positionAbsolute.x+M,y:E.internals.positionAbsolute.y+k};a&&(z=vo(z,c));const{position:N,positionAbsolute:P}=bp({nodeId:E.id,nextPosition:z,nodeLookup:y,nodeExtent:l,nodeOrigin:m,onError:h});E.position=N,E.internals.positionAbsolute=P,v.set(E.id,E)}p(v)},[])}const hc=W.createContext(null),yS=hc.Provider;hc.Consumer;const Sg=()=>W.useContext(hc),vS=t=>({connectOnClick:t.connectOnClick,noPanClassName:t.noPanClassName,rfId:t.rfId}),_g=W.createContext(null);function xS({children:t}){const r=Te(vS,Ue);return x.jsx(_g.Provider,{value:r,children:t})}function wS(){const t=W.useContext(_g);if(!t)throw new Error("useHandleConfig must be used within a HandleConfigProvider");return t}const SS={connectingFrom:!1,connectingTo:!1,clickConnecting:!1,isPossibleEndHandle:!0,connectionInProcess:!1,clickConnectionInProcess:!1,valid:!1},_S=(t,r,o)=>l=>{const{connectionClickStartHandle:a,connectionMode:c,connection:d}=l,{fromHandle:h,toHandle:p,isValid:y}=d;if(!h&&!a)return SS;const m=(p==null?void 0:p.nodeId)===t&&(p==null?void 0:p.id)===r&&(p==null?void 0:p.type)===o;return{connectingFrom:(h==null?void 0:h.nodeId)===t&&(h==null?void 0:h.id)===r&&(h==null?void 0:h.type)===o,connectingTo:m,clickConnecting:(a==null?void 0:a.nodeId)===t&&(a==null?void 0:a.id)===r&&(a==null?void 0:a.type)===o,isPossibleEndHandle:c===ni.Strict?(h==null?void 0:h.type)!==o:t!==(h==null?void 0:h.nodeId)||r!==(h==null?void 0:h.id),connectionInProcess:!!h,clickConnectionInProcess:!!a,valid:m&&y}};function kS({type:t="source",position:r=_e.Top,isValidConnection:o,isConnectable:l=!0,isConnectableStart:a=!0,isConnectableEnd:c=!0,id:d,onConnect:h,children:p,className:y,onMouseDown:m,onTouchStart:v,...g},S){var B,F;const _=d||null,M=t==="target",k=be(),E=Sg(),{connectOnClick:z,noPanClassName:N,rfId:P}=wS(),{connectingFrom:b,connectingTo:$,clickConnecting:H,isPossibleEndHandle:X,connectionInProcess:K,clickConnectionInProcess:ne,valid:Z}=Te(_S(E,_,t),Ue);E||(F=(B=k.getState()).onError)==null||F.call(B,"010",qt.error010());const te=V=>{const{defaultEdgeOptions:A,onConnect:L,hasDefaultEdges:O}=k.getState(),j={...A,...V};if(O){const{edges:T,setEdges:ee,onError:re}=k.getState();ee(tS(j,T,{onError:re}))}L==null||L(j),h==null||h(j)},J=V=>{if(!E)return;const A=Qp(V.nativeEvent);if(a&&(A&&V.button===0||!A)){const L=k.getState();Yu.onPointerDown(V.nativeEvent,{handleDomNode:V.currentTarget,autoPanOnConnect:L.autoPanOnConnect,connectionMode:L.connectionMode,connectionRadius:L.connectionRadius,domNode:L.domNode,nodeLookup:L.nodeLookup,lib:L.lib,isTarget:M,handleId:_,nodeId:E,flowId:L.rfId,panBy:L.panBy,cancelConnection:L.cancelConnection,onConnectStart:L.onConnectStart,onConnectEnd:(...O)=>{var j,T;return(T=(j=k.getState()).onConnectEnd)==null?void 0:T.call(j,...O)},updateConnection:L.updateConnection,onConnect:te,isValidConnection:o||((...O)=>{var j,T;return((T=(j=k.getState()).isValidConnection)==null?void 0:T.call(j,...O))??!0}),getTransform:()=>k.getState().transform,getFromHandle:()=>k.getState().connection.fromHandle,autoPanSpeed:L.autoPanSpeed,dragThreshold:L.connectionDragThreshold})}A?m==null||m(V):v==null||v(V)},C=V=>{const{onClickConnectStart:A,onClickConnectEnd:L,connectionClickStartHandle:O,connectionMode:j,isValidConnection:T,lib:ee,rfId:re,nodeLookup:ue,connection:de}=k.getState();if(!E||!O&&!a)return;if(!O){A==null||A(V.nativeEvent,{nodeId:E,handleId:_,handleType:t}),k.setState({connectionClickStartHandle:{nodeId:E,type:t,id:_}});return}const ce=Yp(V.target),Q=o||T,{connection:se,isValid:pe}=Yu.isValid(V.nativeEvent,{handle:{nodeId:E,id:_,type:t},connectionMode:j,fromNodeId:O.nodeId,fromHandleId:O.id||null,fromType:O.type,isValidConnection:Q,flowId:re,doc:ce,lib:ee,nodeLookup:ue});pe&&se&&te(se);const Se=structuredClone(de);delete Se.inProgress,Se.toPosition=Se.toHandle?Se.toHandle.position:null,L==null||L(V,Se),k.setState({connectionClickStartHandle:null})};return x.jsx("div",{"data-handleid":_,"data-nodeid":E,"data-handlepos":r,"data-id":`${P}-${E}-${_}-${t}`,className:Qe(["react-flow__handle",`react-flow__handle-${r}`,"nodrag",N,y,{source:!M,target:M,connectable:l,connectablestart:a,connectableend:c,clickconnecting:H,connectingfrom:b,connectingto:$,valid:Z,connectionindicator:l&&(!K||X)&&(K||ne?c:a)}]),onMouseDown:J,onTouchStart:J,onClick:z?C:void 0,ref:S,...g,children:p})}const al=W.memo(mg(kS));function ES({data:t,isConnectable:r,sourcePosition:o=_e.Bottom}){return x.jsxs(x.Fragment,{children:[t==null?void 0:t.label,x.jsx(al,{type:"source",position:o,isConnectable:r})]})}function NS({data:t,isConnectable:r,targetPosition:o=_e.Top,sourcePosition:l=_e.Bottom}){return x.jsxs(x.Fragment,{children:[x.jsx(al,{type:"target",position:o,isConnectable:r}),t==null?void 0:t.label,x.jsx(al,{type:"source",position:l,isConnectable:r})]})}function CS(){return null}function jS({data:t,isConnectable:r,targetPosition:o=_e.Top}){return x.jsxs(x.Fragment,{children:[x.jsx(al,{type:"target",position:o,isConnectable:r}),t==null?void 0:t.label]})}const ul={ArrowUp:{x:0,y:-1},ArrowDown:{x:0,y:1},ArrowLeft:{x:-1,y:0},ArrowRight:{x:1,y:0}},Bh={input:ES,default:NS,output:jS,group:CS};function MS(t){var r,o,l,a;return t.internals.handleBounds===void 0?{width:t.width??t.initialWidth??((r=t.style)==null?void 0:r.width),height:t.height??t.initialHeight??((o=t.style)==null?void 0:o.height)}:{width:t.width??((l=t.style)==null?void 0:l.width),height:t.height??((a=t.style)==null?void 0:a.height)}}const PS=t=>{const{width:r,height:o,x:l,y:a}=yo(t.nodeLookup,{filter:c=>!!c.selected});return{width:Kt(r)?r:null,height:Kt(o)?o:null,userSelectionActive:t.userSelectionActive,transformString:`translate(${t.transform[0]}px,${t.transform[1]}px) scale(${t.transform[2]}) translate(${l}px,${a}px)`}};function IS({onSelectionContextMenu:t,noPanClassName:r,disableKeyboardA11y:o}){const l=be(),{width:a,height:c,transformString:d,userSelectionActive:h}=Te(PS,Ue),p=wg(),y=W.useRef(null);W.useEffect(()=>{var S;o||(S=y.current)==null||S.focus({preventScroll:!0})},[o]);const m=!h&&a!==null&&c!==null;if(xg({nodeRef:y,disabled:!m}),!m)return null;const v=t?S=>{const _=l.getState().nodes.filter(M=>M.selected);t(S,_)}:void 0,g=S=>{Object.prototype.hasOwnProperty.call(ul,S.key)&&(S.preventDefault(),p({direction:ul[S.key],factor:S.shiftKey?4:1}))};return x.jsx("div",{className:Qe(["react-flow__nodesselection","react-flow__container",r]),style:{transform:d},children:x.jsx("div",{ref:y,className:"react-flow__nodesselection-rect",onContextMenu:v,tabIndex:o?void 0:-1,onKeyDown:o?void 0:g,style:{width:a,height:c}})})}const Uh=typeof window<"u"?window:void 0,TS=t=>({nodesSelectionActive:t.nodesSelectionActive,userSelectionActive:t.userSelectionActive});function kg({children:t,onPaneClick:r,onPaneMouseEnter:o,onPaneMouseMove:l,onPaneMouseLeave:a,onPaneContextMenu:c,onPaneScroll:d,paneClickDistance:h,deleteKeyCode:p,selectionKeyCode:y,selectionOnDrag:m,selectionMode:v,onSelectionStart:g,onSelectionEnd:S,multiSelectionKeyCode:_,panActivationKeyCode:M,zoomActivationKeyCode:k,elementsSelectable:E,zoomOnScroll:z,zoomOnPinch:N,panOnScroll:P,panOnScrollSpeed:b,panOnScrollMode:$,zoomOnDoubleClick:H,panOnDrag:X,autoPanOnSelection:K,defaultViewport:ne,translateExtent:Z,minZoom:te,maxZoom:J,preventScrolling:C,onSelectionContextMenu:B,noWheelClassName:F,noPanClassName:V,disableKeyboardA11y:A,onViewportChange:L,isControlledViewport:O}){const{nodesSelectionActive:j,userSelectionActive:T}=Te(TS,Ue),ee=co(y,{target:Uh}),re=co(M,{target:Uh}),ue=re||X,de=re||P,ce=m&&ue!==!0,Q=ee||T||ce;return aS({deleteKeyCode:p,multiSelectionKeyCode:_}),x.jsx(dS,{onPaneContextMenu:c,elementsSelectable:E,zoomOnScroll:z,zoomOnPinch:N,panOnScroll:de,panActivationKeyPressed:re,panOnScrollSpeed:b,panOnScrollMode:$,zoomOnDoubleClick:H,panOnDrag:!ee&&ue,defaultViewport:ne,translateExtent:Z,minZoom:te,maxZoom:J,zoomActivationKeyCode:k,preventScrolling:C,noWheelClassName:F,noPanClassName:V,onViewportChange:L,isControlledViewport:O,paneClickDistance:h,selectionOnDrag:ce,children:x.jsxs(gS,{onSelectionStart:g,onSelectionEnd:S,onPaneClick:r,onPaneMouseEnter:o,onPaneMouseMove:l,onPaneMouseLeave:a,onPaneContextMenu:c,onPaneScroll:d,panOnDrag:ue,autoPanOnSelection:K,isSelecting:!!Q,selectionMode:v,selectionKeyPressed:ee,paneClickDistance:h,selectionOnDrag:ce,children:[t,j&&x.jsx(IS,{onSelectionContextMenu:B,noPanClassName:V,disableKeyboardA11y:A})]})})}kg.displayName="FlowRenderer";const zS=W.memo(kg),RS=t=>r=>t?rc(r.nodeLookup,{x:0,y:0,width:r.width,height:r.height},r.transform,!0).map(o=>o.id):Array.from(r.nodeLookup.keys());function LS(t){return Te(W.useCallback(RS(t),[t]),Ue)}const AS=t=>t.updateNodeInternals;function $S(){const t=Te(AS),[r]=W.useState(()=>typeof ResizeObserver>"u"?null:new ResizeObserver(o=>{const l=new Map;o.forEach(a=>{const c=a.target.getAttribute("data-id");l.set(c,{id:c,nodeElement:a.target,force:!0})}),t(l)}));return W.useEffect(()=>()=>{r==null||r.disconnect()},[r]),r}function DS({node:t,nodeType:r,hasDimensions:o,resizeObserver:l}){const a=be(),c=W.useRef(null),d=W.useRef(null),h=W.useRef(t.sourcePosition),p=W.useRef(t.targetPosition),y=W.useRef(r),m=o&&!!t.internals.handleBounds;return W.useEffect(()=>{c.current&&!t.hidden&&(!m||d.current!==c.current)&&(d.current&&(l==null||l.unobserve(d.current)),l==null||l.observe(c.current),d.current=c.current)},[m,t.hidden]),W.useEffect(()=>()=>{d.current&&(l==null||l.unobserve(d.current),d.current=null)},[]),W.useEffect(()=>{if(c.current){const v=y.current!==r,g=h.current!==t.sourcePosition,S=p.current!==t.targetPosition;(v||g||S)&&(y.current=r,h.current=t.sourcePosition,p.current=t.targetPosition,a.getState().updateNodeInternals(new Map([[t.id,{id:t.id,nodeElement:c.current,force:!0}]])))}},[t.id,r,t.sourcePosition,t.targetPosition]),c}function OS({id:t,onClick:r,onMouseEnter:o,onMouseMove:l,onMouseLeave:a,onContextMenu:c,onDoubleClick:d,nodesDraggable:h,elementsSelectable:p,nodesConnectable:y,nodesFocusable:m,resizeObserver:v,noDragClassName:g,noPanClassName:S,disableKeyboardA11y:_,rfId:M,nodeTypes:k,nodeClickDistance:E,onError:z}){const{node:N,internals:P,isParent:b}=Te(Q=>{const se=Q.nodeLookup.get(t),pe=Q.parentLookup.has(t);return{node:se,internals:se.internals,isParent:pe}},Ue);let $=N.type||"default",H=(k==null?void 0:k[$])||Bh[$];H===void 0&&(z==null||z("003",qt.error003($)),$="default",H=(k==null?void 0:k.default)||Bh.default);const X=!!(N.draggable||h&&typeof N.draggable>"u"),K=!!(N.selectable||p&&typeof N.selectable>"u"),ne=!!(N.connectable||y&&typeof N.connectable>"u"),Z=!!(N.focusable||m&&typeof N.focusable>"u"),te=be(),J=Up(N),C=DS({node:N,nodeType:$,hasDimensions:J,resizeObserver:v}),B=xg({nodeRef:C,disabled:N.hidden||!X,noDragClassName:g,handleSelector:N.dragHandle,nodeId:t,isSelectable:K,nodeClickDistance:E}),F=wg();if(N.hidden)return null;const V=Jt(N),A=MS(N),L=K||X||r||o||l||a,O=o?Q=>o(Q,{...P.userNode}):void 0,j=l?Q=>l(Q,{...P.userNode}):void 0,T=a?Q=>a(Q,{...P.userNode}):void 0,ee=c?Q=>c(Q,{...P.userNode}):void 0,re=d?Q=>d(Q,{...P.userNode}):void 0,ue=Q=>{const{selectNodesOnDrag:se,nodeDragThreshold:pe}=te.getState();K&&(!se||!X||pe>0)&&Xu({id:t,store:te,nodeRef:C}),r&&r(Q,{...P.userNode})},de=Q=>{if(!(Xp(Q.nativeEvent)||_)){if(Lp.includes(Q.key)&&K){const se=Q.key==="Escape";Xu({id:t,store:te,unselect:se,nodeRef:C})}else if(X&&N.selected&&Object.prototype.hasOwnProperty.call(ul,Q.key)){Q.preventDefault();const{ariaLabelConfig:se}=te.getState();te.setState({ariaLiveMessage:se["node.a11yDescription.ariaLiveMessage"]({direction:Q.key.replace("Arrow","").toLowerCase(),x:~~P.positionAbsolute.x,y:~~P.positionAbsolute.y})}),F({direction:ul[Q.key],factor:Q.shiftKey?4:1})}}},ce=()=>{var Ce;if(_||!((Ce=C.current)!=null&&Ce.matches(":focus-visible")))return;const{transform:Q,width:se,height:pe,autoPanOnNodeFocus:Se,setCenter:ve}=te.getState();if(!Se)return;rc(new Map([[t,N]]),{x:0,y:0,width:se,height:pe},Q,!0).length>0||ve(N.position.x+V.width/2,N.position.y+V.height/2,{zoom:Q[2]})};return x.jsx("div",{className:Qe(["react-flow__node",`react-flow__node-${$}`,{[S]:X},N.className,{selected:N.selected,selectable:K,parent:b,draggable:X,dragging:B}]),ref:C,style:{zIndex:P.z,transform:`translate(${P.positionAbsolute.x}px,${P.positionAbsolute.y}px)`,pointerEvents:L?"all":"none",visibility:J?"visible":"hidden",...N.style,...A},"data-id":t,"data-testid":`rf__node-${t}`,onMouseEnter:O,onMouseMove:j,onMouseLeave:T,onContextMenu:ee,onClick:ue,onDoubleClick:re,onKeyDown:Z?de:void 0,tabIndex:Z?0:void 0,onFocus:Z?ce:void 0,role:N.ariaRole??(Z?"group":void 0),"aria-roledescription":"node","aria-describedby":_?void 0:`${fg}-${M}`,"aria-label":N.ariaLabel,...N.domAttributes,children:x.jsx(yS,{value:t,children:x.jsx(H,{id:t,data:N.data,type:$,positionAbsoluteX:P.positionAbsolute.x,positionAbsoluteY:P.positionAbsolute.y,selected:N.selected??!1,selectable:K,draggable:X,deletable:N.deletable??!0,isConnectable:ne,sourcePosition:N.sourcePosition,targetPosition:N.targetPosition,dragging:B,dragHandle:N.dragHandle,zIndex:P.z,parentId:N.parentId,...V})})})}var bS=W.memo(OS);const FS=t=>({nodesConnectable:t.nodesConnectable,nodesFocusable:t.nodesFocusable,elementsSelectable:t.elementsSelectable,onError:t.onError});function Eg(t){const{nodesConnectable:r,nodesFocusable:o,elementsSelectable:l,onError:a}=Te(FS,Ue),c=LS(t.onlyRenderVisibleElements),d=$S();return x.jsx("div",{className:"react-flow__nodes",style:Sl,children:c.map(h=>x.jsx(bS,{id:h,nodeTypes:t.nodeTypes,nodeExtent:t.nodeExtent,onClick:t.onNodeClick,onMouseEnter:t.onNodeMouseEnter,onMouseMove:t.onNodeMouseMove,onMouseLeave:t.onNodeMouseLeave,onContextMenu:t.onNodeContextMenu,onDoubleClick:t.onNodeDoubleClick,noDragClassName:t.noDragClassName,noPanClassName:t.noPanClassName,rfId:t.rfId,disableKeyboardA11y:t.disableKeyboardA11y,resizeObserver:d,nodesDraggable:t.nodesDraggable??!0,nodesConnectable:r,nodesFocusable:o,elementsSelectable:l,nodeClickDistance:t.nodeClickDistance,onError:a},h))})}Eg.displayName="NodeRenderer";const HS=W.memo(Eg);function VS(t){return Te(W.useCallback(o=>{if(!t)return o.edges.map(a=>a.id);const l=[];if(o.width&&o.height)for(const a of o.edges){const c=o.nodeLookup.get(a.source),d=o.nodeLookup.get(a.target);c&&d&&Aw({sourceNode:c,targetNode:d,width:o.width,height:o.height,transform:o.transform})&&l.push(a.id)}return l},[t]),Ue)}const BS=({color:t="none",strokeWidth:r=1})=>{const o={strokeWidth:r,...t&&{stroke:t}};return x.jsx("polyline",{className:"arrow",style:o,strokeLinecap:"round",fill:"none",strokeLinejoin:"round",points:"-5,-4 0,0 -5,4"})},US=({color:t="none",strokeWidth:r=1})=>{const o={strokeWidth:r,...t&&{stroke:t,fill:t}};return x.jsx("polyline",{className:"arrowclosed",style:o,strokeLinecap:"round",strokeLinejoin:"round",points:"-5,-4 0,0 -5,4 -5,-4"})},Wh={[ol.Arrow]:BS,[ol.ArrowClosed]:US};function WS(t){const r=be();return W.useMemo(()=>{var a,c;return Object.prototype.hasOwnProperty.call(Wh,t)?Wh[t]:((c=(a=r.getState()).onError)==null||c.call(a,"009",qt.error009(t)),null)},[t])}const YS=({id:t,type:r,color:o,width:l=12.5,height:a=12.5,markerUnits:c="strokeWidth",strokeWidth:d,orient:h="auto-start-reverse"})=>{const p=WS(r);return p?x.jsx("marker",{className:"react-flow__arrowhead",id:t,markerWidth:`${l}`,markerHeight:`${a}`,viewBox:"-10 -10 20 20",markerUnits:c,orient:h,refX:"0",refY:"0",children:x.jsx(p,{color:o,strokeWidth:d})}):null},Ng=({defaultColor:t,rfId:r})=>{const o=Te(c=>c.edges),l=Te(c=>c.defaultEdgeOptions),a=W.useMemo(()=>Bw(o,{id:r,defaultColor:t,defaultMarkerStart:l==null?void 0:l.markerStart,defaultMarkerEnd:l==null?void 0:l.markerEnd}),[o,l,r,t]);return a.length?x.jsx("svg",{className:"react-flow__marker","aria-hidden":"true",children:x.jsx("defs",{children:a.map(c=>x.jsx(YS,{id:c.id,type:c.type,color:c.color,width:c.width,height:c.height,markerUnits:c.markerUnits,strokeWidth:c.strokeWidth,orient:c.orient},c.id))})}):null};Ng.displayName="MarkerDefinitions";var XS=W.memo(Ng);function Cg({x:t,y:r,label:o,labelStyle:l,labelShowBg:a=!0,labelBgStyle:c,labelBgPadding:d=[2,4],labelBgBorderRadius:h=2,children:p,className:y,...m}){const[v,g]=W.useState({x:1,y:0,width:0,height:0}),S=Qe(["react-flow__edge-textwrapper",y]),_=W.useRef(null);return W.useEffect(()=>{if(_.current){const M=_.current.getBBox();g({x:M.x,y:M.y,width:M.width,height:M.height})}},[o]),o?x.jsxs("g",{transform:`translate(${t-v.width/2} ${r-v.height/2})`,className:S,visibility:v.width?"visible":"hidden",...m,children:[a&&x.jsx("rect",{width:v.width+2*d[0],x:-d[0],y:-d[1],height:v.height+2*d[1],className:"react-flow__edge-textbg",style:c,rx:h,ry:h}),x.jsx("text",{className:"react-flow__edge-text",y:v.height/2,dy:"0.3em",ref:_,style:l,children:o}),p]}):null}Cg.displayName="EdgeText";const QS=W.memo(Cg);function _l({path:t,labelX:r,labelY:o,label:l,labelStyle:a,labelShowBg:c,labelBgStyle:d,labelBgPadding:h,labelBgBorderRadius:p,interactionWidth:y=20,...m}){return x.jsxs(x.Fragment,{children:[x.jsx("path",{...m,d:t,fill:"none",className:Qe(["react-flow__edge-path",m.className])}),y?x.jsx("path",{d:t,fill:"none",strokeOpacity:0,strokeWidth:y,className:"react-flow__edge-interaction"}):null,l&&Kt(r)&&Kt(o)?x.jsx(QS,{x:r,y:o,label:l,labelStyle:a,labelShowBg:c,labelBgStyle:d,labelBgPadding:h,labelBgBorderRadius:p}):null]})}function Yh({pos:t,x1:r,y1:o,x2:l,y2:a}){return t===_e.Left||t===_e.Right?[.5*(r+l),o]:[r,.5*(o+a)]}function jg({sourceX:t,sourceY:r,sourcePosition:o=_e.Bottom,targetX:l,targetY:a,targetPosition:c=_e.Top}){const[d,h]=Yh({pos:o,x1:t,y1:r,x2:l,y2:a}),[p,y]=Yh({pos:c,x1:l,y1:a,x2:t,y2:r}),[m,v,g,S]=Kp({sourceX:t,sourceY:r,targetX:l,targetY:a,sourceControlX:d,sourceControlY:h,targetControlX:p,targetControlY:y});return[`M${t},${r} C${d},${h} ${p},${y} ${l},${a}`,m,v,g,S]}function Mg(t){return W.memo(({id:r,sourceX:o,sourceY:l,targetX:a,targetY:c,sourcePosition:d,targetPosition:h,label:p,labelStyle:y,labelShowBg:m,labelBgStyle:v,labelBgPadding:g,labelBgBorderRadius:S,style:_,markerEnd:M,markerStart:k,interactionWidth:E})=>{const[z,N,P]=jg({sourceX:o,sourceY:l,sourcePosition:d,targetX:a,targetY:c,targetPosition:h}),b=t.isInternal?void 0:r;return x.jsx(_l,{id:b,path:z,labelX:N,labelY:P,label:p,labelStyle:y,labelShowBg:m,labelBgStyle:v,labelBgPadding:g,labelBgBorderRadius:S,style:_,markerEnd:M,markerStart:k,interactionWidth:E})})}const KS=Mg({isInternal:!1}),Pg=Mg({isInternal:!0});KS.displayName="SimpleBezierEdge";Pg.displayName="SimpleBezierEdgeInternal";function Ig(t){return W.memo(({id:r,sourceX:o,sourceY:l,targetX:a,targetY:c,label:d,labelStyle:h,labelShowBg:p,labelBgStyle:y,labelBgPadding:m,labelBgBorderRadius:v,style:g,sourcePosition:S=_e.Bottom,targetPosition:_=_e.Top,markerEnd:M,markerStart:k,pathOptions:E,interactionWidth:z})=>{const[N,P,b]=Bu({sourceX:o,sourceY:l,sourcePosition:S,targetX:a,targetY:c,targetPosition:_,borderRadius:E==null?void 0:E.borderRadius,offset:E==null?void 0:E.offset,stepPosition:E==null?void 0:E.stepPosition}),$=t.isInternal?void 0:r;return x.jsx(_l,{id:$,path:N,labelX:P,labelY:b,label:d,labelStyle:h,labelShowBg:p,labelBgStyle:y,labelBgPadding:m,labelBgBorderRadius:v,style:g,markerEnd:M,markerStart:k,interactionWidth:z})})}const Tg=Ig({isInternal:!1}),zg=Ig({isInternal:!0});Tg.displayName="SmoothStepEdge";zg.displayName="SmoothStepEdgeInternal";function Rg(t){return W.memo(({id:r,...o})=>{var a;const l=t.isInternal?void 0:r;return x.jsx(Tg,{...o,id:l,pathOptions:W.useMemo(()=>{var c;return{borderRadius:0,offset:(c=o.pathOptions)==null?void 0:c.offset}},[(a=o.pathOptions)==null?void 0:a.offset])})})}const GS=Rg({isInternal:!1}),Lg=Rg({isInternal:!0});GS.displayName="StepEdge";Lg.displayName="StepEdgeInternal";function Ag(t){return W.memo(({id:r,sourceX:o,sourceY:l,targetX:a,targetY:c,label:d,labelStyle:h,labelShowBg:p,labelBgStyle:y,labelBgPadding:m,labelBgBorderRadius:v,style:g,markerEnd:S,markerStart:_,interactionWidth:M})=>{const[k,E,z]=Zp({sourceX:o,sourceY:l,targetX:a,targetY:c}),N=t.isInternal?void 0:r;return x.jsx(_l,{id:N,path:k,labelX:E,labelY:z,label:d,labelStyle:h,labelShowBg:p,labelBgStyle:y,labelBgPadding:m,labelBgBorderRadius:v,style:g,markerEnd:S,markerStart:_,interactionWidth:M})})}const qS=Ag({isInternal:!1}),$g=Ag({isInternal:!0});qS.displayName="StraightEdge";$g.displayName="StraightEdgeInternal";function Dg(t){return W.memo(({id:r,sourceX:o,sourceY:l,targetX:a,targetY:c,sourcePosition:d=_e.Bottom,targetPosition:h=_e.Top,label:p,labelStyle:y,labelShowBg:m,labelBgStyle:v,labelBgPadding:g,labelBgBorderRadius:S,style:_,markerEnd:M,markerStart:k,pathOptions:E,interactionWidth:z})=>{const[N,P,b]=Gp({sourceX:o,sourceY:l,sourcePosition:d,targetX:a,targetY:c,targetPosition:h,curvature:E==null?void 0:E.curvature}),$=t.isInternal?void 0:r;return x.jsx(_l,{id:$,path:N,labelX:P,labelY:b,label:p,labelStyle:y,labelShowBg:m,labelBgStyle:v,labelBgPadding:g,labelBgBorderRadius:S,style:_,markerEnd:M,markerStart:k,interactionWidth:z})})}const ZS=Dg({isInternal:!1}),Og=Dg({isInternal:!0});ZS.displayName="BezierEdge";Og.displayName="BezierEdgeInternal";const Xh={default:Og,straight:$g,step:Lg,smoothstep:zg,simplebezier:Pg},Qh={sourceX:null,sourceY:null,targetX:null,targetY:null,sourcePosition:null,targetPosition:null,zIndex:void 0},JS=(t,r,o)=>o===_e.Left?t-r:o===_e.Right?t+r:t,e_=(t,r,o)=>o===_e.Top?t-r:o===_e.Bottom?t+r:t,Kh="react-flow__edgeupdater";function Gh({position:t,centerX:r,centerY:o,radius:l=10,onMouseDown:a,onMouseEnter:c,onMouseOut:d,type:h}){return x.jsx("circle",{onMouseDown:a,onMouseEnter:c,onMouseOut:d,className:Qe([Kh,`${Kh}-${h}`]),cx:JS(r,l,t),cy:e_(o,l,t),r:l,stroke:"transparent",fill:"transparent"})}function t_({isReconnectable:t,reconnectRadius:r,edge:o,sourceX:l,sourceY:a,targetX:c,targetY:d,sourcePosition:h,targetPosition:p,onReconnect:y,onReconnectStart:m,onReconnectEnd:v,setReconnecting:g,setUpdateHover:S}){const _=be(),M=(P,b)=>{if(P.button!==0)return;const{autoPanOnConnect:$,domNode:H,connectionMode:X,connectionRadius:K,lib:ne,onConnectStart:Z,cancelConnection:te,nodeLookup:J,rfId:C,panBy:B,updateConnection:F}=_.getState(),V=b.type==="target",A=(j,T)=>{g(!1),v==null||v(j,o,b.type,T)},L=j=>y==null?void 0:y(o,j),O=(j,T)=>{g(!0),m==null||m(P,o,b.type),Z==null||Z(j,T)};Yu.onPointerDown(P.nativeEvent,{autoPanOnConnect:$,connectionMode:X,connectionRadius:K,domNode:H,handleId:b.id,nodeId:b.nodeId,nodeLookup:J,isTarget:V,edgeUpdaterType:b.type,lib:ne,flowId:C,cancelConnection:te,panBy:B,isValidConnection:(...j)=>{var T,ee;return((ee=(T=_.getState()).isValidConnection)==null?void 0:ee.call(T,...j))??!0},onConnect:L,onConnectStart:O,onConnectEnd:(...j)=>{var T,ee;return(ee=(T=_.getState()).onConnectEnd)==null?void 0:ee.call(T,...j)},onReconnectEnd:A,updateConnection:F,getTransform:()=>_.getState().transform,getFromHandle:()=>_.getState().connection.fromHandle,dragThreshold:_.getState().connectionDragThreshold,handleDomNode:P.currentTarget})},k=P=>M(P,{nodeId:o.target,id:o.targetHandle??null,type:"target"}),E=P=>M(P,{nodeId:o.source,id:o.sourceHandle??null,type:"source"}),z=()=>S(!0),N=()=>S(!1);return x.jsxs(x.Fragment,{children:[(t===!0||t==="source")&&x.jsx(Gh,{position:h,centerX:l,centerY:a,radius:r,onMouseDown:k,onMouseEnter:z,onMouseOut:N,type:"source"}),(t===!0||t==="target")&&x.jsx(Gh,{position:p,centerX:c,centerY:d,radius:r,onMouseDown:E,onMouseEnter:z,onMouseOut:N,type:"target"})]})}function n_({id:t,edgesFocusable:r,edgesReconnectable:o,elementsSelectable:l,onClick:a,onDoubleClick:c,onContextMenu:d,onMouseEnter:h,onMouseMove:p,onMouseLeave:y,reconnectRadius:m,onReconnect:v,onReconnectStart:g,onReconnectEnd:S,rfId:_,edgeTypes:M,noPanClassName:k,onError:E,disableKeyboardA11y:z}){let N=Te(ve=>ve.edgeLookup.get(t));const P=Te(ve=>ve.defaultEdgeOptions);N=P?{...P,...N}:N;let b=N.type||"default",$=(M==null?void 0:M[b])||Xh[b];$===void 0&&(E==null||E("011",qt.error011(b)),b="default",$=(M==null?void 0:M.default)||Xh.default);const H=!!(N.focusable||r&&typeof N.focusable>"u"),X=typeof v<"u"&&(N.reconnectable||o&&typeof N.reconnectable>"u"),K=!!(N.selectable||l&&typeof N.selectable>"u"),ne=W.useRef(null),[Z,te]=W.useState(!1),[J,C]=W.useState(!1),B=be(),{zIndex:F=N.zIndex,sourceX:V,sourceY:A,targetX:L,targetY:O,sourcePosition:j,targetPosition:T}=Te(W.useCallback(ve=>{const me=ve.nodeLookup.get(N.source),Ce=ve.nodeLookup.get(N.target);if(!me||!Ce)return Qh;const Me=Vw({id:t,sourceNode:me,targetNode:Ce,sourceHandle:N.sourceHandle||null,targetHandle:N.targetHandle||null,connectionMode:ve.connectionMode,onError:E}),Pe=Lw({selected:N.selected,zIndex:N.zIndex,sourceNode:me,targetNode:Ce,elevateOnSelect:ve.elevateEdgesOnSelect,zIndexMode:ve.zIndexMode});return{...Me||Qh,zIndex:Pe}},[N.source,N.target,N.sourceHandle,N.targetHandle,N.selected,N.zIndex,E]),Ue),ee=W.useMemo(()=>N.markerStart?`url('#${Uu(N.markerStart,_)}')`:void 0,[N.markerStart,_]),re=W.useMemo(()=>N.markerEnd?`url('#${Uu(N.markerEnd,_)}')`:void 0,[N.markerEnd,_]);if(N.hidden||V===null||A===null||L===null||O===null)return null;const ue=ve=>{var Pe;const{addSelectedEdges:me,unselectNodesAndEdges:Ce,multiSelectionActive:Me}=B.getState();K&&(B.setState({nodesSelectionActive:!1}),N.selected&&Me?(Ce({nodes:[],edges:[N]}),(Pe=ne.current)==null||Pe.blur()):me([t])),a&&a(ve,N)},de=c?ve=>{c(ve,{...N})}:void 0,ce=d?ve=>{d(ve,{...N})}:void 0,Q=h?ve=>{h(ve,{...N})}:void 0,se=p?ve=>{p(ve,{...N})}:void 0,pe=y?ve=>{y(ve,{...N})}:void 0,Se=ve=>{var me;if(!z&&Lp.includes(ve.key)&&K){const{unselectNodesAndEdges:Ce,addSelectedEdges:Me}=B.getState();ve.key==="Escape"?((me=ne.current)==null||me.blur(),Ce({edges:[N]})):Me([t])}};return x.jsx("svg",{style:{zIndex:F},children:x.jsxs("g",{className:Qe(["react-flow__edge",`react-flow__edge-${b}`,N.className,k,{selected:N.selected,animated:N.animated,inactive:!K&&!a,updating:Z,selectable:K}]),onClick:ue,onDoubleClick:de,onContextMenu:ce,onMouseEnter:Q,onMouseMove:se,onMouseLeave:pe,onKeyDown:H?Se:void 0,tabIndex:H?0:void 0,role:N.ariaRole??(H?"group":"img"),"aria-roledescription":"edge","data-id":t,"data-testid":`rf__edge-${t}`,"aria-label":N.ariaLabel===null?void 0:N.ariaLabel||`Edge from ${N.source} to ${N.target}`,"aria-describedby":H?`${hg}-${_}`:void 0,ref:ne,...N.domAttributes,children:[!J&&x.jsx($,{id:t,source:N.source,target:N.target,type:N.type,selected:N.selected,animated:N.animated,selectable:K,deletable:N.deletable??!0,label:N.label,labelStyle:N.labelStyle,labelShowBg:N.labelShowBg,labelBgStyle:N.labelBgStyle,labelBgPadding:N.labelBgPadding,labelBgBorderRadius:N.labelBgBorderRadius,sourceX:V,sourceY:A,targetX:L,targetY:O,sourcePosition:j,targetPosition:T,data:N.data,style:N.style,sourceHandleId:N.sourceHandle,targetHandleId:N.targetHandle,markerStart:ee,markerEnd:re,pathOptions:"pathOptions"in N?N.pathOptions:void 0,interactionWidth:N.interactionWidth}),X&&x.jsx(t_,{edge:N,isReconnectable:X,reconnectRadius:m,onReconnect:v,onReconnectStart:g,onReconnectEnd:S,sourceX:V,sourceY:A,targetX:L,targetY:O,sourcePosition:j,targetPosition:T,setUpdateHover:te,setReconnecting:C})]})})}var r_=W.memo(n_);const i_=t=>({edgesFocusable:t.edgesFocusable,edgesReconnectable:t.edgesReconnectable,elementsSelectable:t.elementsSelectable,connectionMode:t.connectionMode,onError:t.onError});function bg({defaultMarkerColor:t,onlyRenderVisibleElements:r,rfId:o,edgeTypes:l,noPanClassName:a,onReconnect:c,onEdgeContextMenu:d,onEdgeMouseEnter:h,onEdgeMouseMove:p,onEdgeMouseLeave:y,onEdgeClick:m,reconnectRadius:v,onEdgeDoubleClick:g,onReconnectStart:S,onReconnectEnd:_,disableKeyboardA11y:M}){const{edgesFocusable:k,edgesReconnectable:E,elementsSelectable:z,onError:N}=Te(i_,Ue),P=VS(r);return x.jsxs("div",{className:"react-flow__edges",children:[x.jsx(XS,{defaultColor:t,rfId:o}),P.map(b=>x.jsx(r_,{id:b,edgesFocusable:k,edgesReconnectable:E,elementsSelectable:z,noPanClassName:a,onReconnect:c,onContextMenu:d,onMouseEnter:h,onMouseMove:p,onMouseLeave:y,onClick:m,reconnectRadius:v,onDoubleClick:g,onReconnectStart:S,onReconnectEnd:_,rfId:o,onError:N,edgeTypes:l,disableKeyboardA11y:M},b))]})}bg.displayName="EdgeRenderer";const o_=W.memo(bg),qh=t=>`translate(${t[0]}px,${t[1]}px) scale(${t[2]})`;function s_({children:t}){const r=be(),o=W.useRef(null),[l]=W.useState(()=>r.getState().transform);return yg(()=>{let a=null;const c=()=>{const d=r.getState().transform;a&&d[0]===a[0]&&d[1]===a[1]&&d[2]===a[2]||(a=d,o.current&&(o.current.style.transform=qh(d)))};return c(),r.subscribe(c)},[r]),x.jsx("div",{ref:o,className:"react-flow__viewport xyflow__viewport react-flow__container",style:{transform:qh(l)},children:t})}function l_(t){const r=fc(),o=W.useRef(!1);W.useEffect(()=>{!o.current&&r.viewportInitialized&&t&&(setTimeout(()=>t(r),1),o.current=!0)},[t,r.viewportInitialized])}const a_=t=>{var r;return(r=t.panZoom)==null?void 0:r.syncViewport};function u_(t){const r=Te(a_),o=be();return W.useEffect(()=>{t&&(r==null||r(t),o.setState({transform:[t.x,t.y,t.zoom]}))},[t,r]),null}function c_(t){return t.connection.inProgress?{...t.connection,to:xo(t.connection.to,t.transform)}:{...t.connection}}function d_(t){return c_}function f_(t){const r=d_();return Te(r,Ue)}const h_=t=>({nodesConnectable:t.nodesConnectable,isValid:t.connection.isValid,inProgress:t.connection.inProgress,width:t.width,height:t.height});function p_({containerStyle:t,style:r,type:o,component:l}){const{nodesConnectable:a,width:c,height:d,isValid:h,inProgress:p}=Te(h_,Ue);return!(c&&a&&p)?null:x.jsx("svg",{style:t,width:c,height:d,className:"react-flow__connectionline react-flow__container",children:x.jsx("g",{className:Qe(["react-flow__connection",Dp(h)]),children:x.jsx(Fg,{style:r,type:o,CustomComponent:l,isValid:h})})})}const Fg=({style:t,type:r=Yn.Bezier,CustomComponent:o,isValid:l})=>{const{inProgress:a,from:c,fromNode:d,fromHandle:h,fromPosition:p,to:y,toNode:m,toHandle:v,toPosition:g,pointer:S}=f_();if(!a)return;if(o)return x.jsx(o,{connectionLineType:r,connectionLineStyle:t,fromNode:d,fromHandle:h,fromX:c.x,fromY:c.y,toX:y.x,toY:y.y,fromPosition:p,toPosition:g,connectionStatus:Dp(l),toNode:m,toHandle:v,pointer:S});let _="";const M={sourceX:c.x,sourceY:c.y,sourcePosition:p,targetX:y.x,targetY:y.y,targetPosition:g};switch(r){case Yn.Bezier:[_]=Gp(M);break;case Yn.SimpleBezier:[_]=jg(M);break;case Yn.Step:[_]=Bu({...M,borderRadius:0});break;case Yn.SmoothStep:[_]=Bu(M);break;default:[_]=Zp(M)}return x.jsx("path",{d:_,fill:"none",className:"react-flow__connection-path",style:t})};Fg.displayName="ConnectionLine";const g_={};function Zh(t=g_){W.useRef(t),be(),W.useEffect(()=>{},[t])}function m_(){be(),W.useRef(!1),W.useEffect(()=>{},[])}function Hg({nodeTypes:t,edgeTypes:r,onInit:o,onNodeClick:l,onEdgeClick:a,onNodeDoubleClick:c,onEdgeDoubleClick:d,onNodeMouseEnter:h,onNodeMouseMove:p,onNodeMouseLeave:y,onNodeContextMenu:m,onSelectionContextMenu:v,onSelectionStart:g,onSelectionEnd:S,connectionLineType:_,connectionLineStyle:M,connectionLineComponent:k,connectionLineContainerStyle:E,selectionKeyCode:z,selectionOnDrag:N,selectionMode:P,multiSelectionKeyCode:b,panActivationKeyCode:$,zoomActivationKeyCode:H,deleteKeyCode:X,onlyRenderVisibleElements:K,elementsSelectable:ne,defaultViewport:Z,translateExtent:te,minZoom:J,maxZoom:C,preventScrolling:B,defaultMarkerColor:F,zoomOnScroll:V,zoomOnPinch:A,panOnScroll:L,panOnScrollSpeed:O,panOnScrollMode:j,zoomOnDoubleClick:T,panOnDrag:ee,autoPanOnSelection:re,onPaneClick:ue,onPaneMouseEnter:de,onPaneMouseMove:ce,onPaneMouseLeave:Q,onPaneScroll:se,onPaneContextMenu:pe,paneClickDistance:Se,nodeClickDistance:ve,onEdgeContextMenu:me,onEdgeMouseEnter:Ce,onEdgeMouseMove:Me,onEdgeMouseLeave:Pe,reconnectRadius:ze,onReconnect:Ze,onReconnectStart:lt,onReconnectEnd:Je,noDragClassName:et,noWheelClassName:Lt,noPanClassName:kt,disableKeyboardA11y:Et,nodeExtent:it,rfId:ft,viewport:q,onViewportChange:we,nodesDraggable:Ae}){return Zh(t),Zh(r),m_(),l_(o),u_(q),x.jsx(zS,{onPaneClick:ue,onPaneMouseEnter:de,onPaneMouseMove:ce,onPaneMouseLeave:Q,onPaneContextMenu:pe,onPaneScroll:se,paneClickDistance:Se,deleteKeyCode:X,selectionKeyCode:z,selectionOnDrag:N,selectionMode:P,onSelectionStart:g,onSelectionEnd:S,multiSelectionKeyCode:b,panActivationKeyCode:$,zoomActivationKeyCode:H,elementsSelectable:ne,zoomOnScroll:V,zoomOnPinch:A,zoomOnDoubleClick:T,panOnScroll:L,panOnScrollSpeed:O,panOnScrollMode:j,panOnDrag:ee,autoPanOnSelection:re,defaultViewport:Z,translateExtent:te,minZoom:J,maxZoom:C,onSelectionContextMenu:v,preventScrolling:B,noDragClassName:et,noWheelClassName:Lt,noPanClassName:kt,disableKeyboardA11y:Et,onViewportChange:we,isControlledViewport:!!q,children:x.jsxs(s_,{children:[x.jsx(o_,{edgeTypes:r,onEdgeClick:a,onEdgeDoubleClick:d,onReconnect:Ze,onReconnectStart:lt,onReconnectEnd:Je,onlyRenderVisibleElements:K,onEdgeContextMenu:me,onEdgeMouseEnter:Ce,onEdgeMouseMove:Me,onEdgeMouseLeave:Pe,reconnectRadius:ze,defaultMarkerColor:F,noPanClassName:kt,disableKeyboardA11y:Et,rfId:ft}),x.jsx(p_,{style:M,type:_,component:k,containerStyle:E}),x.jsx("div",{className:"react-flow__edgelabel-renderer"}),x.jsx(HS,{nodeTypes:t,onNodeClick:l,onNodeDoubleClick:c,onNodeMouseEnter:h,onNodeMouseMove:p,onNodeMouseLeave:y,onNodeContextMenu:m,nodeClickDistance:ve,onlyRenderVisibleElements:K,noPanClassName:kt,noDragClassName:et,disableKeyboardA11y:Et,nodeExtent:it,rfId:ft,nodesDraggable:Ae}),x.jsx("div",{className:"react-flow__viewport-portal"})]})})}Hg.displayName="GraphView";const y_=W.memo(Hg),v_=Bp(),Jh=({nodes:t,edges:r,defaultNodes:o,defaultEdges:l,width:a,height:c,fitView:d,fitViewOptions:h,minZoom:p=.5,maxZoom:y=2,nodeOrigin:m,nodeExtent:v,zIndexMode:g="basic"}={})=>{const S=new Map,_=new Map,M=new Map,k=new Map,E=l??r??[],z=o??t??[],N=m??[0,0],P=v??so;tg(M,k,E);const{nodesInitialized:b}=Wu(z,S,_,{nodeOrigin:N,nodeExtent:P,zIndexMode:g});let $=[0,0,1];if(d&&a&&c){const H=yo(S,{filter:Z=>!!((Z.width||Z.initialWidth)&&(Z.height||Z.initialHeight))}),{x:X,y:K,zoom:ne}=oc(H,a,c,p,y,(h==null?void 0:h.padding)??.1);$=[X,K,ne]}return{rfId:"1",width:a??0,height:c??0,transform:$,nodes:z,nodesInitialized:b,nodeLookup:S,parentLookup:_,edges:E,edgeLookup:k,connectionLookup:M,onNodesChange:null,onEdgesChange:null,hasDefaultNodes:o!==void 0,hasDefaultEdges:l!==void 0,panZoom:null,minZoom:p,maxZoom:y,translateExtent:so,nodeExtent:P,nodesSelectionActive:!1,userSelectionActive:!1,userSelectionRect:null,connectionMode:ni.Strict,domNode:null,paneDragging:!1,noPanClassName:"nopan",nodeOrigin:N,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:d??!1,fitViewOptions:h,fitViewResolver:null,connection:{...$p},connectionClickStartHandle:null,connectOnClick:!0,ariaLiveMessage:"",autoPanOnConnect:!0,autoPanOnNodeDrag:!0,autoPanOnNodeFocus:!0,autoPanSpeed:15,connectionRadius:20,onError:v_,isValidConnection:void 0,onSelectionChangeHandlers:[],lib:"react",debug:!1,ariaLabelConfig:Ap,zIndexMode:g,onNodesChangeMiddlewareMap:new Map,onEdgesChangeMiddlewareMap:new Map}},x_=({nodes:t,edges:r,defaultNodes:o,defaultEdges:l,width:a,height:c,fitView:d,fitViewOptions:h,minZoom:p,maxZoom:y,nodeOrigin:m,nodeExtent:v,zIndexMode:g})=>T1((S,_)=>{async function M(){const{nodeLookup:k,panZoom:E,fitViewOptions:z,fitViewResolver:N,width:P,height:b,minZoom:$,maxZoom:H}=_();E&&(await jw({nodes:k,width:P,height:b,panZoom:E,minZoom:$,maxZoom:H},z),N==null||N.resolve(!0),S({fitViewResolver:null}))}return{...Jh({nodes:t,edges:r,width:a,height:c,fitView:d,fitViewOptions:h,minZoom:p,maxZoom:y,nodeOrigin:m,nodeExtent:v,defaultNodes:o,defaultEdges:l,zIndexMode:g}),setNodes:k=>{const{nodeLookup:E,parentLookup:z,nodeOrigin:N,nodeExtent:P,elevateNodesOnSelect:b,fitViewQueued:$,zIndexMode:H,nodesSelectionActive:X}=_(),{nodesInitialized:K,hasSelectedNodes:ne}=Wu(k,E,z,{nodeOrigin:N,nodeExtent:P,elevateNodesOnSelect:b,checkEquality:!0,zIndexMode:H}),Z=X&≠$&&K?(M(),S({nodes:k,nodesInitialized:K,fitViewQueued:!1,fitViewOptions:void 0,nodesSelectionActive:Z})):S({nodes:k,nodesInitialized:K,nodesSelectionActive:Z})},setEdges:k=>{const{connectionLookup:E,edgeLookup:z}=_();tg(E,z,k),S({edges:k})},setDefaultNodesAndEdges:(k,E)=>{if(k){const{setNodes:z}=_();z(k),S({hasDefaultNodes:!0})}if(E){const{setEdges:z}=_();z(E),S({hasDefaultEdges:!0})}},updateNodeInternals:k=>{const{triggerNodeChanges:E,nodeLookup:z,parentLookup:N,domNode:P,nodeOrigin:b,nodeExtent:$,debug:H,fitViewQueued:X,zIndexMode:K}=_(),{changes:ne,updatedInternals:Z}=Gw(k,z,N,P,b,$,K);Z&&(Yw(z,N,{nodeOrigin:b,nodeExtent:$,zIndexMode:K}),X?(M(),S({fitViewQueued:!1,fitViewOptions:void 0})):S({}),(ne==null?void 0:ne.length)>0&&(H&&console.log("React Flow: trigger node changes",ne),E==null||E(ne)))},updateNodePositions:(k,E=!1)=>{const z=[];let N=[];const{nodeLookup:P,triggerNodeChanges:b,connection:$,updateConnection:H,onNodesChangeMiddlewareMap:X}=_();for(const[K,ne]of k){const Z=P.get(K),te=!!(Z!=null&&Z.expandParent&&(Z!=null&&Z.parentId)&&(ne!=null&&ne.position)),J={id:K,type:"position",position:te?{x:Math.max(0,ne.position.x),y:Math.max(0,ne.position.y)}:ne.position,dragging:E};if(Z&&$.inProgress&&$.fromNode.id===Z.id){const C=wr(Z,$.fromHandle,_e.Left,!0);H({...$,from:C})}te&&Z.parentId&&z.push({id:K,parentId:Z.parentId,rect:{...ne.internals.positionAbsolute,width:ne.measured.width??0,height:ne.measured.height??0}}),N.push(J)}if(z.length>0){const{parentLookup:K,nodeOrigin:ne}=_(),Z=dc(z,P,K,ne);N.push(...Z)}for(const K of X.values())N=K(N);b(N)},triggerNodeChanges:k=>{const{onNodesChange:E,setNodes:z,nodes:N,hasDefaultNodes:P,debug:b}=_();if(k!=null&&k.length){if(P){const $=Z1(k,N);z($)}b&&console.log("React Flow: trigger node changes",k),E==null||E(k)}},triggerEdgeChanges:k=>{const{onEdgesChange:E,setEdges:z,edges:N,hasDefaultEdges:P,debug:b}=_();if(k!=null&&k.length){if(P){const $=J1(k,N);z($)}b&&console.log("React Flow: trigger edge changes",k),E==null||E(k)}},addSelectedNodes:k=>{const{multiSelectionActive:E,edgeLookup:z,nodeLookup:N,triggerNodeChanges:P,triggerEdgeChanges:b}=_();if(E){const $=k.map(H=>fr(H,!0));P($);return}P(qr(N,new Set([...k]),!0)),b(qr(z))},addSelectedEdges:k=>{const{multiSelectionActive:E,edgeLookup:z,nodeLookup:N,triggerNodeChanges:P,triggerEdgeChanges:b}=_();if(E){const $=k.map(H=>fr(H,!0));b($);return}b(qr(z,new Set([...k]))),P(qr(N,new Set,!0))},unselectNodesAndEdges:({nodes:k,edges:E}={})=>{const{edges:z,nodes:N,nodeLookup:P,triggerNodeChanges:b,triggerEdgeChanges:$}=_(),H=k||N,X=E||z,K=[];for(const Z of H){if(!Z.selected)continue;const te=P.get(Z.id);te&&(te.selected=!1),K.push(fr(Z.id,!1))}const ne=[];for(const Z of X)Z.selected&&ne.push(fr(Z.id,!1));b(K),$(ne)},setMinZoom:k=>{const{panZoom:E,maxZoom:z}=_();E==null||E.setScaleExtent([k,z]),S({minZoom:k})},setMaxZoom:k=>{const{panZoom:E,minZoom:z}=_();E==null||E.setScaleExtent([z,k]),S({maxZoom:k})},setTranslateExtent:k=>{var E;(E=_().panZoom)==null||E.setTranslateExtent(k),S({translateExtent:k})},resetSelectedElements:()=>{const{edges:k,nodes:E,triggerNodeChanges:z,triggerEdgeChanges:N,elementsSelectable:P}=_();if(!P)return;const b=E.reduce((H,X)=>X.selected?[...H,fr(X.id,!1)]:H,[]),$=k.reduce((H,X)=>X.selected?[...H,fr(X.id,!1)]:H,[]);z(b),N($)},setNodeExtent:k=>{const{nodes:E,nodeLookup:z,parentLookup:N,nodeOrigin:P,elevateNodesOnSelect:b,nodeExtent:$,zIndexMode:H}=_();k[0][0]===$[0][0]&&k[0][1]===$[0][1]&&k[1][0]===$[1][0]&&k[1][1]===$[1][1]||(Wu(E,z,N,{nodeOrigin:P,nodeExtent:k,elevateNodesOnSelect:b,checkEquality:!1,zIndexMode:H}),S({nodeExtent:k}))},panBy:k=>{const{transform:E,width:z,height:N,panZoom:P,translateExtent:b}=_();return qw({delta:k,panZoom:P,transform:E,translateExtent:b,width:z,height:N})},setCenter:async(k,E,z)=>{const{width:N,height:P,maxZoom:b,panZoom:$}=_();if(!$)return!1;const H=typeof(z==null?void 0:z.zoom)<"u"?z.zoom:b;return await $.setViewport({x:N/2-k*H,y:P/2-E*H,zoom:H},{duration:z==null?void 0:z.duration,ease:z==null?void 0:z.ease,interpolate:z==null?void 0:z.interpolate}),!0},cancelConnection:()=>{S({connection:{...$p}})},updateConnection:k=>{S({connection:k})},reset:()=>S({...Jh()})}},Object.is);function Vg({initialNodes:t,initialEdges:r,defaultNodes:o,defaultEdges:l,initialWidth:a,initialHeight:c,initialMinZoom:d,initialMaxZoom:h,initialFitViewOptions:p,fitView:y,nodeOrigin:m,nodeExtent:v,zIndexMode:g,children:S}){const[_]=W.useState(()=>x_({nodes:t,edges:r,defaultNodes:o,defaultEdges:l,width:a,height:c,fitView:y,minZoom:d,maxZoom:h,fitViewOptions:p,nodeOrigin:m,nodeExtent:v,zIndexMode:g}));return x.jsx(z1,{value:_,children:x.jsx(iS,{children:x.jsx(xS,{children:S})})})}function w_({children:t,nodes:r,edges:o,defaultNodes:l,defaultEdges:a,width:c,height:d,fitView:h,fitViewOptions:p,minZoom:y,maxZoom:m,nodeOrigin:v,nodeExtent:g,zIndexMode:S}){return W.useContext(xl)?x.jsx(x.Fragment,{children:t}):x.jsx(Vg,{initialNodes:r,initialEdges:o,defaultNodes:l,defaultEdges:a,initialWidth:c,initialHeight:d,fitView:h,initialFitViewOptions:p,initialMinZoom:y,initialMaxZoom:m,nodeOrigin:v,nodeExtent:g,zIndexMode:S,children:t})}const S_={width:"100%",height:"100%",overflow:"hidden",position:"relative",zIndex:0};function __({nodes:t,edges:r,defaultNodes:o,defaultEdges:l,className:a,nodeTypes:c,edgeTypes:d,onNodeClick:h,onEdgeClick:p,onInit:y,onMove:m,onMoveStart:v,onMoveEnd:g,onConnect:S,onConnectStart:_,onConnectEnd:M,onClickConnectStart:k,onClickConnectEnd:E,onNodeMouseEnter:z,onNodeMouseMove:N,onNodeMouseLeave:P,onNodeContextMenu:b,onNodeDoubleClick:$,onNodeDragStart:H,onNodeDrag:X,onNodeDragStop:K,onNodesDelete:ne,onEdgesDelete:Z,onDelete:te,onSelectionChange:J,onSelectionDragStart:C,onSelectionDrag:B,onSelectionDragStop:F,onSelectionContextMenu:V,onSelectionStart:A,onSelectionEnd:L,onBeforeDelete:O,connectionMode:j,connectionLineType:T=Yn.Bezier,connectionLineStyle:ee,connectionLineComponent:re,connectionLineContainerStyle:ue,deleteKeyCode:de="Backspace",selectionKeyCode:ce="Shift",selectionOnDrag:Q=!1,selectionMode:se=lo.Full,panActivationKeyCode:pe="Space",multiSelectionKeyCode:Se=uo()?"Meta":"Control",zoomActivationKeyCode:ve=uo()?"Meta":"Control",snapToGrid:me,snapGrid:Ce,onlyRenderVisibleElements:Me=!1,selectNodesOnDrag:Pe,nodesDraggable:ze,autoPanOnNodeFocus:Ze,nodesConnectable:lt,nodesFocusable:Je,nodeOrigin:et=pg,edgesFocusable:Lt,edgesReconnectable:kt,elementsSelectable:Et=!0,defaultViewport:it=W1,minZoom:ft=.5,maxZoom:q=2,translateExtent:we=so,preventScrolling:Ae=!0,nodeExtent:Ke,defaultMarkerColor:un="#b1b1b7",zoomOnScroll:kl=!0,zoomOnPinch:wo=!0,panOnScroll:So=!1,panOnScrollSpeed:El=.5,panOnScrollMode:si=gr.Free,zoomOnDoubleClick:li=!0,panOnDrag:ai=!0,onPaneClick:ui,onPaneMouseEnter:ci,onPaneMouseMove:_n,onPaneMouseLeave:kn,onPaneScroll:_o,onPaneContextMenu:ko,paneClickDistance:Eo=1,nodeClickDistance:No=0,children:Co,onReconnect:di,onReconnectStart:jo,onReconnectEnd:Qn,onEdgeContextMenu:fi,onEdgeDoubleClick:Kn,onEdgeMouseEnter:Nl,onEdgeMouseMove:Gn,onEdgeMouseLeave:Sr,reconnectRadius:_r=10,onNodesChange:hi,onEdgesChange:Cl,noDragClassName:jl="nodrag",noWheelClassName:Ml="nowheel",noPanClassName:en="nopan",fitView:pi,fitViewOptions:gi,connectOnClick:Pl,attributionPosition:Mo,proOptions:Po,defaultEdgeOptions:Io,elevateNodesOnSelect:To=!0,elevateEdgesOnSelect:Il=!1,disableKeyboardA11y:zo=!1,autoPanOnConnect:He,autoPanOnNodeDrag:Tl,autoPanOnSelection:mi=!0,autoPanSpeed:Ro,connectionRadius:kr,isValidConnection:zl,onError:Lo,style:Er,id:Nt,nodeDragThreshold:Rl,connectionDragThreshold:Ct,viewport:Ll,onViewportChange:Al,width:$l,height:Nr,colorMode:Cr="light",debug:qn,onScroll:cn,ariaLabelConfig:Dl,zIndexMode:Ao="basic",...yi},$o){const Zn=Nt||"1",Jn=K1(Cr),Ol=W.useCallback(jr=>{jr.currentTarget.scrollTo({top:0,left:0,behavior:"instant"}),cn==null||cn(jr)},[cn]);return x.jsx("div",{"data-testid":"rf__wrapper",...yi,onScroll:Ol,style:{...Er,...S_},ref:$o,className:Qe(["react-flow",a,Jn]),id:Nt,role:"application",children:x.jsxs(w_,{nodes:t,edges:r,width:$l,height:Nr,fitView:pi,fitViewOptions:gi,minZoom:ft,maxZoom:q,nodeOrigin:et,nodeExtent:Ke,zIndexMode:Ao,children:[x.jsx(Q1,{nodes:t,edges:r,defaultNodes:o,defaultEdges:l,onConnect:S,onConnectStart:_,onConnectEnd:M,onClickConnectStart:k,onClickConnectEnd:E,nodesDraggable:ze,autoPanOnNodeFocus:Ze,nodesConnectable:lt,nodesFocusable:Je,edgesFocusable:Lt,edgesReconnectable:kt,elementsSelectable:Et,elevateNodesOnSelect:To,elevateEdgesOnSelect:Il,minZoom:ft,maxZoom:q,nodeExtent:Ke,onNodesChange:hi,onEdgesChange:Cl,snapToGrid:me,snapGrid:Ce,connectionMode:j,translateExtent:we,connectOnClick:Pl,defaultEdgeOptions:Io,fitView:pi,fitViewOptions:gi,onNodesDelete:ne,onEdgesDelete:Z,onDelete:te,onNodeDragStart:H,onNodeDrag:X,onNodeDragStop:K,onSelectionDrag:B,onSelectionDragStart:C,onSelectionDragStop:F,onMove:m,onMoveStart:v,onMoveEnd:g,noPanClassName:en,nodeOrigin:et,rfId:Zn,autoPanOnConnect:He,autoPanOnNodeDrag:Tl,autoPanSpeed:Ro,onError:Lo,connectionRadius:kr,isValidConnection:zl,selectNodesOnDrag:Pe,nodeDragThreshold:Rl,connectionDragThreshold:Ct,onBeforeDelete:O,debug:qn,ariaLabelConfig:Dl,zIndexMode:Ao}),x.jsx(y_,{onInit:y,onNodeClick:h,onEdgeClick:p,onNodeMouseEnter:z,onNodeMouseMove:N,onNodeMouseLeave:P,onNodeContextMenu:b,onNodeDoubleClick:$,nodeTypes:c,edgeTypes:d,connectionLineType:T,connectionLineStyle:ee,connectionLineComponent:re,connectionLineContainerStyle:ue,selectionKeyCode:ce,selectionOnDrag:Q,selectionMode:se,deleteKeyCode:de,multiSelectionKeyCode:Se,panActivationKeyCode:pe,zoomActivationKeyCode:ve,onlyRenderVisibleElements:Me,defaultViewport:it,translateExtent:we,minZoom:ft,maxZoom:q,preventScrolling:Ae,zoomOnScroll:kl,zoomOnPinch:wo,zoomOnDoubleClick:li,panOnScroll:So,panOnScrollSpeed:El,panOnScrollMode:si,panOnDrag:ai,autoPanOnSelection:mi,onPaneClick:ui,onPaneMouseEnter:ci,onPaneMouseMove:_n,onPaneMouseLeave:kn,onPaneScroll:_o,onPaneContextMenu:ko,paneClickDistance:Eo,nodeClickDistance:No,onSelectionContextMenu:V,onSelectionStart:A,onSelectionEnd:L,onReconnect:di,onReconnectStart:jo,onReconnectEnd:Qn,onEdgeContextMenu:fi,onEdgeDoubleClick:Kn,onEdgeMouseEnter:Nl,onEdgeMouseMove:Gn,onEdgeMouseLeave:Sr,reconnectRadius:_r,defaultMarkerColor:un,noDragClassName:jl,noWheelClassName:Ml,noPanClassName:en,rfId:Zn,disableKeyboardA11y:zo,nodeExtent:Ke,viewport:Ll,onViewportChange:Al,nodesDraggable:ze}),x.jsx(U1,{onSelectionChange:J}),Co,x.jsx(b1,{proOptions:Po,position:Mo}),x.jsx(O1,{rfId:Zn,disableKeyboardA11y:zo})]})})}var k_=mg(__);function E_({dimensions:t,lineWidth:r,variant:o,className:l}){return x.jsx("path",{strokeWidth:r,d:`M${t[0]/2} 0 V${t[1]} M0 ${t[1]/2} H${t[0]}`,className:Qe(["react-flow__background-pattern",o,l])})}function N_({radius:t,className:r}){return x.jsx("circle",{cx:t,cy:t,r:t,className:Qe(["react-flow__background-pattern","dots",r])})}var Xn;(function(t){t.Lines="lines",t.Dots="dots",t.Cross="cross"})(Xn||(Xn={}));const C_={[Xn.Dots]:1,[Xn.Lines]:1,[Xn.Cross]:6},j_=t=>({transform:t.transform,patternId:`pattern-${t.rfId}`});function Bg({id:t,variant:r=Xn.Dots,gap:o=20,size:l,lineWidth:a=1,offset:c=0,color:d,bgColor:h,style:p,className:y,patternClassName:m}){const v=W.useRef(null),{transform:g,patternId:S}=Te(j_,Ue),_=l||C_[r],M=r===Xn.Dots,k=r===Xn.Cross,E=Array.isArray(o)?o:[o,o],z=[E[0]*g[2]||1,E[1]*g[2]||1],N=_*g[2],P=Array.isArray(c)?c:[c,c],b=k?[N,N]:z,$=[P[0]*g[2]+b[0]/2,P[1]*g[2]+b[1]/2],H=`${S}${t||""}`;return x.jsxs("svg",{className:Qe(["react-flow__background",y]),style:{...p,...Sl,"--xy-background-color-props":h,"--xy-background-pattern-color-props":d},ref:v,"data-testid":"rf__background",children:[x.jsx("pattern",{id:H,x:g[0]%z[0],y:g[1]%z[1],width:z[0],height:z[1],patternUnits:"userSpaceOnUse",patternTransform:`translate(-${$[0]},-${$[1]})`,children:M?x.jsx(N_,{radius:N/2,className:m}):x.jsx(E_,{dimensions:b,lineWidth:a,variant:r,className:m})}),x.jsx("rect",{x:"0",y:"0",width:"100%",height:"100%",fill:`url(#${H})`})]})}Bg.displayName="Background";const M_=W.memo(Bg);function P_(){return x.jsx("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",children:x.jsx("path",{d:"M32 18.133H18.133V32h-4.266V18.133H0v-4.266h13.867V0h4.266v13.867H32z"})})}function I_(){return x.jsx("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 5",children:x.jsx("path",{d:"M0 0h32v4.2H0z"})})}function T_(){return x.jsx("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 30",children:x.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 z_(){return x.jsx("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 25 32",children:x.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 R_(){return x.jsx("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 25 32",children:x.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 Ys({children:t,className:r,...o}){return x.jsx("button",{type:"button",className:Qe(["react-flow__controls-button",r]),...o,children:t})}const L_=t=>({isInteractive:t.nodesDraggable||t.nodesConnectable||t.elementsSelectable,minZoomReached:t.transform[2]<=t.minZoom,maxZoomReached:t.transform[2]>=t.maxZoom,ariaLabelConfig:t.ariaLabelConfig});function Ug({style:t,showZoom:r=!0,showFitView:o=!0,showInteractive:l=!0,fitViewOptions:a,onZoomIn:c,onZoomOut:d,onFitView:h,onInteractiveChange:p,className:y,children:m,position:v="bottom-left",orientation:g="vertical","aria-label":S}){const _=be(),{isInteractive:M,minZoomReached:k,maxZoomReached:E,ariaLabelConfig:z}=Te(L_,Ue),{zoomIn:N,zoomOut:P,fitView:b}=fc(),$=()=>{N(),c==null||c()},H=()=>{P(),d==null||d()},X=()=>{b(a),h==null||h()},K=()=>{_.setState({nodesDraggable:!M,nodesConnectable:!M,elementsSelectable:!M}),p==null||p(!M)},ne=g==="horizontal"?"horizontal":"vertical";return x.jsxs(wl,{className:Qe(["react-flow__controls",ne,y]),position:v,style:t,"data-testid":"rf__controls","aria-label":S??z["controls.ariaLabel"],children:[r&&x.jsxs(x.Fragment,{children:[x.jsx(Ys,{onClick:$,className:"react-flow__controls-zoomin",title:z["controls.zoomIn.ariaLabel"],"aria-label":z["controls.zoomIn.ariaLabel"],disabled:E,children:x.jsx(P_,{})}),x.jsx(Ys,{onClick:H,className:"react-flow__controls-zoomout",title:z["controls.zoomOut.ariaLabel"],"aria-label":z["controls.zoomOut.ariaLabel"],disabled:k,children:x.jsx(I_,{})})]}),o&&x.jsx(Ys,{className:"react-flow__controls-fitview",onClick:X,title:z["controls.fitView.ariaLabel"],"aria-label":z["controls.fitView.ariaLabel"],children:x.jsx(T_,{})}),l&&x.jsx(Ys,{className:"react-flow__controls-interactive",onClick:K,title:z["controls.interactive.ariaLabel"],"aria-label":z["controls.interactive.ariaLabel"],children:M?x.jsx(R_,{}):x.jsx(z_,{})}),m]})}Ug.displayName="Controls";const A_=W.memo(Ug);function $_({id:t,x:r,y:o,width:l,height:a,style:c,color:d,strokeColor:h,strokeWidth:p,className:y,borderRadius:m,shapeRendering:v,selected:g,onClick:S}){const{background:_,backgroundColor:M}=c||{},k=d||_||M;return x.jsx("rect",{className:Qe(["react-flow__minimap-node",{selected:g},y]),x:r,y:o,rx:m,ry:m,width:l,height:a,style:{fill:k,stroke:h,strokeWidth:p},shapeRendering:v,onClick:S?E=>S(E,t):void 0})}const D_=W.memo($_),O_=t=>t.nodes.map(r=>r.id),zu=t=>t instanceof Function?t:()=>t;function b_({nodeStrokeColor:t,nodeColor:r,nodeClassName:o="",nodeBorderRadius:l=5,nodeStrokeWidth:a,nodeComponent:c=D_,onClick:d}){const h=Te(O_,Ue),p=zu(r),y=zu(t),m=zu(o),v=typeof window>"u"||window.chrome?"crispEdges":"geometricPrecision";return x.jsx(x.Fragment,{children:h.map(g=>x.jsx(H_,{id:g,nodeColorFunc:p,nodeStrokeColorFunc:y,nodeClassNameFunc:m,nodeBorderRadius:l,nodeStrokeWidth:a,NodeComponent:c,onClick:d,shapeRendering:v},g))})}function F_({id:t,nodeColorFunc:r,nodeStrokeColorFunc:o,nodeClassNameFunc:l,nodeBorderRadius:a,nodeStrokeWidth:c,shapeRendering:d,NodeComponent:h,onClick:p}){const{node:y,x:m,y:v,width:g,height:S}=Te(_=>{const M=_.nodeLookup.get(t);if(!M)return{node:void 0,x:0,y:0,width:0,height:0};const k=M.internals.userNode,{x:E,y:z}=M.internals.positionAbsolute,{width:N,height:P}=Jt(k);return{node:k,x:E,y:z,width:N,height:P}},Ue);return!y||y.hidden||!Up(y)?null:x.jsx(h,{x:m,y:v,width:g,height:S,style:y.style,selected:!!y.selected,className:l(y),color:r(y),borderRadius:a,strokeColor:o(y),strokeWidth:c,shapeRendering:d,onClick:p,id:y.id})}const H_=W.memo(F_);var V_=W.memo(b_);const B_=200,U_=150,W_=t=>!t.hidden,Y_=t=>{const r={x:-t.transform[0]/t.transform[2],y:-t.transform[1]/t.transform[2],width:t.width/t.transform[2],height:t.height/t.transform[2]};return{viewBB:r,boundingRect:t.nodeLookup.size>0?Hp(yo(t.nodeLookup,{filter:W_}),r):r,rfId:t.rfId,panZoom:t.panZoom,translateExtent:t.translateExtent,flowWidth:t.width,flowHeight:t.height,ariaLabelConfig:t.ariaLabelConfig}},ep=(t,r)=>t.x===r.x&&t.y===r.y&&t.width===r.width&&t.height===r.height,X_=(t,r)=>ep(t.viewBB,r.viewBB)&&ep(t.boundingRect,r.boundingRect)&&t.rfId===r.rfId&&t.panZoom===r.panZoom&&t.translateExtent===r.translateExtent&&t.flowWidth===r.flowWidth&&t.flowHeight===r.flowHeight&&t.ariaLabelConfig===r.ariaLabelConfig,Q_="react-flow__minimap-desc";function Wg({style:t,className:r,nodeStrokeColor:o,nodeColor:l,nodeClassName:a="",nodeBorderRadius:c=5,nodeStrokeWidth:d,nodeComponent:h,bgColor:p,maskColor:y,maskStrokeColor:m,maskStrokeWidth:v,position:g="bottom-right",onClick:S,onNodeClick:_,pannable:M=!1,zoomable:k=!1,ariaLabel:E,inversePan:z,zoomStep:N=1,offsetScale:P=5}){const b=be(),$=W.useRef(null),{boundingRect:H,viewBB:X,rfId:K,panZoom:ne,translateExtent:Z,flowWidth:te,flowHeight:J,ariaLabelConfig:C}=Te(Y_,X_),B=(t==null?void 0:t.width)??B_,F=(t==null?void 0:t.height)??U_,V=H.width/B,A=H.height/F,L=Math.max(V,A),O=L*B,j=L*F,T=P*L,ee=H.x-(O-H.width)/2-T,re=H.y-(j-H.height)/2-T,ue=O+T*2,de=j+T*2,ce=`${Q_}-${K}`,Q=W.useRef(0),se=W.useRef();Q.current=L,W.useEffect(()=>{if($.current&&ne)return se.current=s1({domNode:$.current,panZoom:ne,getTransform:()=>b.getState().transform,getViewScale:()=>Q.current}),()=>{var me;(me=se.current)==null||me.destroy()}},[ne]),W.useEffect(()=>{var me;(me=se.current)==null||me.update({translateExtent:Z,width:te,height:J,inversePan:z,pannable:M,zoomStep:N,zoomable:k})},[M,k,z,N,Z,te,J]);const pe=S?me=>{var Pe;const[Ce,Me]=((Pe=se.current)==null?void 0:Pe.pointer(me))||[0,0];S(me,{x:Ce,y:Me})}:void 0,Se=_?W.useCallback((me,Ce)=>{const Me=b.getState().nodeLookup.get(Ce).internals.userNode;_(me,Me)},[]):void 0,ve=E??C["minimap.ariaLabel"];return x.jsx(wl,{position:g,style:{...t,"--xy-minimap-background-color-props":typeof p=="string"?p:void 0,"--xy-minimap-mask-background-color-props":typeof y=="string"?y:void 0,"--xy-minimap-mask-stroke-color-props":typeof m=="string"?m:void 0,"--xy-minimap-mask-stroke-width-props":typeof v=="number"?v*L:void 0,"--xy-minimap-node-background-color-props":typeof l=="string"?l:void 0,"--xy-minimap-node-stroke-color-props":typeof o=="string"?o:void 0,"--xy-minimap-node-stroke-width-props":typeof d=="number"?d:void 0},className:Qe(["react-flow__minimap",r]),"data-testid":"rf__minimap",children:x.jsxs("svg",{width:B,height:F,viewBox:`${ee} ${re} ${ue} ${de}`,className:"react-flow__minimap-svg",role:"img","aria-labelledby":ce,ref:$,onClick:pe,children:[ve&&x.jsx("title",{id:ce,children:ve}),x.jsx(V_,{onClick:Se,nodeColor:l,nodeStrokeColor:o,nodeBorderRadius:c,nodeClassName:a,nodeStrokeWidth:d,nodeComponent:h}),x.jsx("path",{className:"react-flow__minimap-mask",d:`M${ee-T},${re-T}h${ue+T*2}v${de+T*2}h${-ue-T*2}z + M${X.x},${X.y}h${X.width}v${X.height}h${-X.width}z`,fillRule:"evenodd",pointerEvents:"none"})]})})}Wg.displayName="MiniMap";const K_=W.memo(Wg),G_=t=>r=>t?`${Math.max(1/r.transform[2],1)}`:void 0,q_={[oi.Line]:"right",[oi.Handle]:"bottom-right"};function Z_({nodeId:t,position:r,variant:o=oi.Handle,className:l,style:a=void 0,children:c,color:d,minWidth:h=10,minHeight:p=10,maxWidth:y=Number.MAX_VALUE,maxHeight:m=Number.MAX_VALUE,keepAspectRatio:v=!1,resizeDirection:g,autoScale:S=!0,shouldResize:_,onResizeStart:M,onResize:k,onResizeEnd:E}){const z=Sg(),N=typeof t=="string"?t:z,P=be(),b=W.useRef(null),$=o===oi.Handle,H=Te(W.useCallback(G_($&&S),[$,S]),Ue),X=W.useRef(null),K=r??q_[o];W.useEffect(()=>{if(!(!b.current||!N))return X.current||(X.current=x1({domNode:b.current,nodeId:N,getStoreItems:()=>{const{nodeLookup:Z,transform:te,snapGrid:J,snapToGrid:C,nodeOrigin:B,domNode:F}=P.getState();return{nodeLookup:Z,transform:te,snapGrid:J,snapToGrid:C,nodeOrigin:B,paneDomNode:F}},onChange:(Z,te)=>{const{triggerNodeChanges:J,nodeLookup:C,parentLookup:B,nodeOrigin:F}=P.getState(),V=[],A={x:Z.x,y:Z.y},L=C.get(N);if(L&&L.expandParent&&L.parentId){const O=L.origin??F,j=Z.width??L.measured.width??0,T=Z.height??L.measured.height??0,ee={id:L.id,parentId:L.parentId,rect:{width:j,height:T,...Wp({x:Z.x??L.position.x,y:Z.y??L.position.y},{width:j,height:T},L.parentId,C,O)}},re=dc([ee],C,B,F);V.push(...re),A.x=Z.x?Math.max(O[0]*j,Z.x):void 0,A.y=Z.y?Math.max(O[1]*T,Z.y):void 0}if(A.x!==void 0&&A.y!==void 0){const O={id:N,type:"position",position:{...A}};V.push(O)}if(Z.width!==void 0&&Z.height!==void 0){const j={id:N,type:"dimensions",resizing:!0,setAttributes:g?g==="horizontal"?"width":"height":!0,dimensions:{width:Z.width,height:Z.height}};V.push(j)}for(const O of te){const j={...O,type:"position"};V.push(j)}J(V)},onEnd:({width:Z,height:te})=>{const J={id:N,type:"dimensions",resizing:!1,dimensions:{width:Z,height:te}};P.getState().triggerNodeChanges([J])}})),X.current.update({controlPosition:K,boundaries:{minWidth:h,minHeight:p,maxWidth:y,maxHeight:m},keepAspectRatio:v,resizeDirection:g,onResizeStart:M,onResize:k,onResizeEnd:E,shouldResize:_}),()=>{var Z;(Z=X.current)==null||Z.destroy()}},[K,h,p,y,m,v,M,k,E,_]);const ne=K.split("-");return x.jsx("div",{className:Qe(["react-flow__resize-control","nodrag",...ne,o,l]),ref:b,style:{...a,scale:H,...d&&{[$?"backgroundColor":"borderColor"]:d}},children:c})}W.memo(Z_);const J_={"arch.context":0,"django.app":0,"django.route":1,"django.url_name":1,"django.view":2,"django.viewset_action":2,"django.permission":2,"django.serializer":3,"django.serializer_field":4,"django.service":4,"django.model":5,"django.field":6,"django.relation":6,"django.task":7,"django.receiver":7,"django.signal":7,"django.test":7,"django.migration_op":7,"django.admin":7,"openapi.path":8,"react.api_client":9,"react.query_key":10,"react.hook":10,"react.feature":10,"react.route":11,"react.page":11,"react.component":12,"react.form_schema":13,"react.test":13,"react.context":12};function ek(t){return J_[t]??8}function tk(t){const r=new Map;for(const l of t){const a=ek(l.type),c=r.get(a)??[];c.push(l),r.set(a,c)}const o=new Map;for(const[l,a]of r)a.sort((c,d)=>c.name.localeCompare(d.name)),a.forEach((c,d)=>{o.set(c.id,{x:l*260,y:d*108})});return o}const nk={cheap:"var(--edge-cheap)",expensive:"var(--edge-expensive)",critical:"var(--edge-critical)"};function rk({data:t,selected:r}){return x.jsxs("div",{className:r?"lp-node selected":"lp-node",children:[x.jsx("div",{className:"t",children:Qu(t.type)}),x.jsx("div",{className:"n",children:t.name})]})}const ik={load:rk};function Ru({nodes:t,edges:r}){const[o,l]=W.useState(null),a=typeof window<"u"&&window.matchMedia("(prefers-reduced-motion: reduce)").matches,c=W.useMemo(()=>new Map(t.map(v=>[v.id,v])),[t]),d=o?c.get(o)??null:null,h=tk(t),p=t.map(v=>({id:v.id,type:"load",position:h.get(v.id)??{x:0,y:0},data:{name:v.name,type:v.type,file:v.file_path},selected:o===v.id})),y=r.filter(v=>c.has(v.src)&&c.has(v.dst)).map(v=>({id:v.id,source:v.src,target:v.dst,animated:!a&&v.weight==="critical",style:{stroke:nk[v.weight]||"var(--edge-cheap)",strokeWidth:v.weight==="critical"?2.4:1.2,strokeDasharray:v.confidence<.8?"6 4":void 0},label:v.type.replaceAll("_"," "),labelStyle:{fill:"var(--muted)",fontSize:10}})),m=(v,g)=>{l(g.id)};return x.jsxs("div",{style:{flex:1,minHeight:0,position:"relative"},children:[x.jsx(Vg,{children:x.jsxs(k_,{nodes:p,edges:y,nodeTypes:ik,fitView:!0,fitViewOptions:{padding:.2,maxZoom:1.15},minZoom:.25,nodesDraggable:!1,nodesConnectable:!1,elementsSelectable:!0,deleteKeyCode:null,onNodeClick:m,onPaneClick:()=>l(null),proOptions:{hideAttribution:!1},"data-testid":"impact-graph",children:[x.jsx(M_,{}),x.jsx(K_,{pannable:!0,zoomable:!0}),x.jsx(A_,{})]})}),d?x.jsxs("aside",{className:"inspector","data-testid":"graph-inspector",children:[x.jsx("div",{className:"t",children:Qu(d.type)}),x.jsx("div",{className:"n",children:d.name}),d.context?x.jsx("div",{className:"muted",children:d.context}):null,d.file_path?x.jsxs("div",{className:"file",children:[d.file_path,d.start_line?`:${d.start_line}`:""]}):null,x.jsx("div",{className:"muted",children:d.qualified_name})]}):null]})}const cl=[{id:"obsidian",label:"Obsidian",group:"dark"},{id:"nord",label:"Nord",group:"dark"},{id:"solarized-dark",label:"Solarized Dark",group:"dark"},{id:"forest",label:"Forest",group:"dark"},{id:"rose",label:"Rose Pine",group:"dark"},{id:"amber",label:"Midnight Amber",group:"dark"},{id:"volcano",label:"Volcano",group:"dark"},{id:"lavender",label:"Lavender",group:"dark"},{id:"paper",label:"Paper",group:"light"},{id:"solarized-light",label:"Solarized Light",group:"light"},{id:"seafoam",label:"Seafoam",group:"light"},{id:"high-contrast",label:"High Contrast",group:"light"}],ok="obsidian",Yg="loadpath.theme";function sk(t){return cl.some(r=>r.id===t)}function Xg(){try{const t=localStorage.getItem(Yg)||"";if(sk(t))return t}catch{}return ok}function lk(t){var r;return((r=cl.find(o=>o.id===t))==null?void 0:r.group)==="light"?"light":"dark"}function Qg(t){document.documentElement.dataset.theme=t,document.documentElement.style.colorScheme=lk(t);try{localStorage.setItem(Yg,t)}catch{}}const tp=[{id:"review",label:"Review",testId:"tab-review",shortcut:"1",icon:b0},{id:"architecture",label:"Architecture",testId:"tab-architecture",shortcut:"2",icon:F0},{id:"graph",label:"Impact graph",testId:"tab-graph",shortcut:"3",icon:H0},{id:"prs",label:"Pull requests",testId:"tab-prs",shortcut:"4",icon:V0},{id:"settings",label:"Settings",testId:"tab-settings",shortcut:"5",icon:B0}];function ak(){var Lt,kt,Et,it,ft;const[t,r]=W.useState("review"),[o,l]=W.useState(localStorage.getItem("loadpath.repo")||""),[a,c]=W.useState(localStorage.getItem("loadpath.base")||"HEAD~1"),[d,h]=W.useState(localStorage.getItem("loadpath.head")||"HEAD"),[p,y]=W.useState(null),[m,v]=W.useState(null),[g,S]=W.useState([]),[_,M]=W.useState("review"),[k,E]=W.useState(""),[z,N]=W.useState(""),[P,b]=W.useState(""),[$,H]=W.useState({}),[X,K]=W.useState([]),[ne,Z]=W.useState(localStorage.getItem("loadpath.scmRepo")||""),[te,J]=W.useState(localStorage.getItem("loadpath.provider")||"github"),[C,B]=W.useState(localStorage.getItem("loadpath.prNumber")||""),[F,V]=W.useState(""),[A,L]=W.useState(Xg),O=W.useRef(o);O.current=o;const j=q=>{L(q),Qg(q)},T=W.useRef(""),ee=q=>{T.current=q,N(q)};W.useEffect(()=>{St.settings().then(H).catch(()=>{}),St.repos().then(q=>S(q.repos)).catch(()=>{})},[]),W.useEffect(()=>{if(t!=="architecture"||!o)return;const q=o;let we=!1;return St.architecture(q).then(Ae=>{!we&&O.current===q&&v(Ae)}).catch(()=>{}),()=>{we=!0}},[t,o]);const re=q=>{l(q),localStorage.setItem("loadpath.repo",q)},ue=(q,we)=>{c(q),h(we),localStorage.setItem("loadpath.base",q),localStorage.setItem("loadpath.head",we)},de=(q,we,Ae)=>{J(q),Z(we),localStorage.setItem("loadpath.provider",q),localStorage.setItem("loadpath.scmRepo",we),Ae!==void 0&&(B(Ae),localStorage.setItem("loadpath.prNumber",Ae))},ce=async(q=o)=>{if(!q)return null;const we=await St.architecture(q);return O.current===q&&v(we),we},Q=async()=>{if(!T.current){E(""),b(""),ee("Tracing load path…"),re(o),ue(a,d);try{const q=await St.review(o,a,d,!0);y(q),M("review"),r("review"),await St.repos().then(we=>S(we.repos)).catch(()=>{}),await ce(o)}catch(q){E(q instanceof Error?q.message:String(q))}finally{ee("")}}},se=async(q=!0)=>{if(!T.current){E(""),b(""),ee(q?"Indexing…":"Full reindex…"),re(o);try{await St.index(o,q);const we=await ce(o);await St.repos().then(Ae=>S(Ae.repos)).catch(()=>{}),we!=null&&we.indexed&&(M("architecture"),r("architecture"))}catch(we){E(we instanceof Error?we.message:String(we))}finally{ee("")}}},pe=async()=>{if(!T.current){E(""),b(""),ee("Detecting layout…"),re(o);try{const q=await St.init(o);b(q.message),await St.repos().then(we=>S(we.repos)).catch(()=>{})}catch(q){E(q instanceof Error?q.message:String(q))}finally{ee("")}}},Se=async()=>{if(p!=null&&p.markdown)try{await navigator.clipboard.writeText(p.markdown),b("Copied markdown brief")}catch(q){E(q instanceof Error?q.message:String(q))}},ve=async()=>{if(!T.current){if(!(p!=null&&p.markdown)||!ne||!C){E("Pick a pull request first (Pull requests tab), then post the brief.");return}ee("Posting Loadpath brief…");try{const q=await St.postComment(te,ne,Number(C),p.markdown);b(q.updated?"Updated the Loadpath PR comment":"Posted the Loadpath PR comment")}catch(q){E(q instanceof Error?q.message:String(q))}finally{ee("")}}},me=async()=>{if(!T.current){E(""),ee("Fetching pull requests…");try{const q=await St.prs(te,ne);K(q.pull_requests)}catch(q){E(q instanceof Error?q.message:String(q))}finally{ee("")}}},Ce=async q=>{q.preventDefault();const we=new FormData(q.currentTarget),Ae={github_token:String(we.get("github_token")||""),bitbucket_token:String(we.get("bitbucket_token")||""),bitbucket_username:String(we.get("bitbucket_username")||""),ai_provider:String(we.get("ai_provider")||"none"),ai_api_key:String(we.get("ai_api_key")||""),ai_model:String(we.get("ai_model")||""),ai_base_url:String(we.get("ai_base_url")||""),workspaces:g.length?g.map(Ke=>({path:Ke.path,name:Ke.name})):o?[{path:o,name:O0(o)}]:[]};try{H(await St.saveSettings(Ae)),b("Settings saved on this machine")}catch(Ke){E(Ke instanceof Error?Ke.message:String(Ke))}},Me=async()=>{if(!(!p||T.current)){ee("Residual analysis…");try{const q=await St.residual(p);V(q.note)}catch(q){E(q instanceof Error?q.message:String(q))}finally{ee("")}}},Pe=W.useRef(Q);Pe.current=Q;const ze=W.useRef(t);ze.current=t,W.useEffect(()=>{const q=we=>{const Ae=we.target;if(Ae&&(Ae.tagName==="INPUT"||Ae.tagName==="TEXTAREA"||Ae.tagName==="SELECT"||Ae.isContentEditable)){we.key==="Escape"&&Ae.blur();return}if(we.key==="Escape"){E(""),b("");return}const Ke=tp.find(un=>un.shortcut===we.key);if(Ke&&!we.metaKey&&!we.ctrlKey&&!we.altKey&&r(Ke.id),(we.metaKey||we.ctrlKey)&&we.key==="Enter"){if(ze.current==="settings"||ze.current==="prs"||T.current)return;we.preventDefault(),Pe.current()}};return window.addEventListener("keydown",q),()=>window.removeEventListener("keydown",q)},[]);const Ze=W.useMemo(()=>_==="architecture"?(m==null?void 0:m.nodes)??[]:(p==null?void 0:p.nodes)??[],[_,m,p]),lt=W.useMemo(()=>_==="architecture"?(m==null?void 0:m.edges)??[]:(p==null?void 0:p.edges)??[],[_,m,p]),Je=p!=null&&p.index?`${p.index.counts.nodes} nodes · ${p.index.counts.edges} edges`:m!=null&&m.indexed?`${m.counts.nodes} nodes · ${m.counts.edges} edges`:"Not indexed",et=((p==null?void 0:p.findings)||[]).filter(q=>!q.waived);return x.jsxs("div",{className:"app",children:[x.jsx("a",{className:"skip",href:"#main",children:"Skip to content"}),x.jsxs("nav",{className:"rail","data-testid":"rail","aria-label":"Primary",children:[x.jsxs("div",{className:"brand",children:[x.jsx("div",{className:"brand-mark",children:"Loadpath"}),x.jsx("div",{className:"brand-sub",children:"Load-path review"})]}),tp.map(q=>{const we=q.icon,Ae=t===q.id;return x.jsxs("button",{type:"button","data-testid":q.testId,className:Ae?"nav-item active":"nav-item","aria-current":Ae?"page":void 0,"aria-label":q.label,onClick:()=>r(q.id),children:[x.jsx(we,{}),x.jsx("span",{children:q.label})]},q.id)}),x.jsxs("div",{className:"theme-pick",children:[x.jsx("label",{htmlFor:"theme-select",children:"Theme"}),x.jsx("select",{id:"theme-select","data-testid":"theme-select",value:A,onChange:q=>j(q.target.value),children:cl.map(q=>x.jsx("option",{value:q.id,children:q.label},q.id))})]}),x.jsxs("div",{className:"rail-foot",children:[x.jsx("div",{className:"muted",role:"status",children:z||Je}),x.jsxs("div",{className:"kbd-hint",children:[x.jsx("kbd",{children:"1"}),"–",x.jsx("kbd",{children:"5"})," tabs · ",x.jsx("kbd",{children:"Ctrl"}),"+",x.jsx("kbd",{children:"Enter"})," review"]})]})]}),x.jsxs("div",{className:"main",id:"main",children:[z?x.jsxs("div",{className:"progress",role:"status","aria-live":"polite","aria-busy":"true",children:[x.jsx("i",{}),x.jsx("span",{className:"sr-only",children:z})]}):null,x.jsxs("header",{className:"topbar","data-testid":"topbar",children:[g.length>0?x.jsxs("label",{className:"field workspace",children:[x.jsx("span",{children:"Workspace"}),x.jsxs("select",{"data-testid":"workspace-select",value:g.some(q=>q.path===o)?o:"",onChange:q=>{q.target.value&&re(q.target.value)},children:[x.jsx("option",{value:"",children:"Indexed repos…"}),g.map(q=>x.jsxs("option",{value:q.path,children:[q.name,q.indexed?` (${q.counts.nodes})`:""]},q.path))]})]}):null,x.jsxs("label",{className:"field path",children:[x.jsx("span",{children:"Repository"}),x.jsx("input",{"data-testid":"repo-path",placeholder:"Local monorepo path",value:o,onChange:q=>l(q.target.value),spellCheck:!1})]}),x.jsxs("label",{className:"field ref",children:[x.jsx("span",{children:"Base"}),x.jsx("input",{"data-testid":"base-ref",value:a,onChange:q=>ue(q.target.value,d),placeholder:"base",spellCheck:!1})]}),x.jsxs("label",{className:"field ref",children:[x.jsx("span",{children:"Head"}),x.jsx("input",{"data-testid":"head-ref",value:d,onChange:q=>ue(a,q.target.value),placeholder:"head",spellCheck:!1})]}),x.jsxs("div",{className:"topbar-actions",children:[x.jsx("button",{type:"button","data-testid":"btn-init",disabled:!!z,onClick:pe,children:"Draft config"}),x.jsx("button",{type:"button","data-testid":"btn-index",disabled:!!z,onClick:()=>se(!0),children:"Index"}),x.jsx("button",{type:"button","data-testid":"btn-review",className:"btn primary",disabled:!!z,onClick:Q,children:"Review"})]})]}),x.jsxs("div",{className:"alerts",children:[k?x.jsxs("div",{className:"error",children:[x.jsx("span",{children:k}),x.jsx("button",{type:"button",className:"dismiss",onClick:()=>E(""),"aria-label":"Dismiss error",children:"×"})]}):null,P?x.jsxs("div",{className:"banner","data-testid":"status-note",children:[x.jsx("span",{children:P}),x.jsx("button",{type:"button",className:"dismiss",onClick:()=>b(""),"aria-label":"Dismiss",children:"×"})]}):null,((Lt=p==null?void 0:p.index)!=null&&Lt.stale||m!=null&&m.stale)&&(t==="review"||t==="architecture")?x.jsx("div",{className:"banner stale","data-testid":"index-stale",children:"Index is stale — files changed since the last extract. Index again before trusting this walk."}):null,((kt=p==null?void 0:p.index)==null?void 0:kt.django_boot)==="failed"||(m==null?void 0:m.django_boot)==="failed"?x.jsx("div",{className:"banner warn","data-testid":"django-boot-failed",children:((Et=p==null?void 0:p.index)==null?void 0:Et.django_boot_detail)||(m==null?void 0:m.django_boot_detail)||"django.setup() failed"}):null,(it=p==null?void 0:p.workspace)!=null&&it.dirty_overlaps_review&&t==="review"?x.jsxs("div",{className:"banner warn","data-testid":"dirty-tree",children:["Uncommitted files overlap this review: ",(p.workspace.dirty_overlap||[]).slice(0,6).join(", ")]}):null]}),x.jsxs("div",{className:"stage",children:[t==="review"&&x.jsxs("div",{className:"content","data-testid":"review-layout",children:[x.jsx("aside",{className:"brief","data-testid":"brief",children:p?x.jsx(uk,{review:p,findings:et,aiNote:F,busy:!!z,onAskAi:Me,onCopy:Se,onPost:ve}):x.jsxs("div",{className:"empty","data-testid":"review-empty",children:[x.jsx("h2",{children:"Trace the force of this diff"}),x.jsx("p",{children:"The graph is the architecture. The brief is where this change travels — not a hunk list."}),x.jsxs("ol",{children:[x.jsx("li",{children:"Point at a Django + React monorepo, or pick an indexed workspace."}),x.jsxs("li",{children:["Index it. Missing ",x.jsx("code",{children:"loadpath.yml"})," is drafted from ",x.jsx("code",{children:"manage.py"})," and"," ",x.jsx("code",{children:"src/features"}),"."]}),x.jsx("li",{children:"Review a git range, or open a pull request so base/head become a three-dot merge-base."})]})]})}),x.jsx("div",{className:"graph-wrap","data-testid":"review-graph",children:p?x.jsx(Ru,{nodes:p.nodes,edges:p.edges}):null})]}),t==="architecture"&&x.jsxs("div",{className:"content","data-testid":"architecture-panel",children:[x.jsx("aside",{className:"brief","data-testid":"architecture-brief",children:m!=null&&m.indexed?x.jsx(ck,{architecture:m,busy:!!z,onReindex:()=>se(!1),onReview:Q}):x.jsx("p",{className:"muted","data-testid":"architecture-empty",children:"Index this repo to build the architecture graph. Review then walks that same graph for a git range — it does not start from a hunk list."})}),x.jsx("div",{className:"graph-wrap","data-testid":"architecture-graph",children:m!=null&&m.indexed?x.jsx(Ru,{nodes:m.nodes,edges:m.edges}):null})]}),t==="graph"&&x.jsxs("div",{className:"graph-wrap","data-testid":"graph-full",style:{height:"100%"},children:[x.jsxs("div",{className:"graph-modes",children:[x.jsxs("div",{className:"seg","aria-label":"Graph scope",children:[x.jsx("button",{type:"button","aria-pressed":_==="review","data-testid":"graph-mode-review",className:_==="review"?"active":"",onClick:()=>M("review"),children:"This review"}),x.jsx("button",{type:"button","aria-pressed":_==="architecture","data-testid":"graph-mode-architecture",className:_==="architecture"?"active":"",onClick:()=>M("architecture"),children:"Indexed architecture"})]}),x.jsxs("div",{className:"legend","aria-hidden":"true",children:[x.jsxs("span",{children:[x.jsx("i",{})," cheap"]}),x.jsxs("span",{children:[x.jsx("i",{className:"exp"})," expensive"]}),x.jsxs("span",{children:[x.jsx("i",{className:"crit"})," critical"]}),x.jsxs("span",{children:[x.jsx("i",{className:"dash"})," inferred"]})]})]}),Ze.length?x.jsx(Ru,{nodes:Ze,edges:lt}):x.jsx("p",{className:"empty",children:"Index the repo or run a review first. Click a node to inspect it."})]}),t==="prs"&&x.jsxs("div",{className:"pr-list","data-testid":"pr-list",children:[x.jsxs("div",{className:"pr-toolbar",children:[x.jsxs("label",{className:"field provider",children:[x.jsx("span",{children:"Provider"}),x.jsxs("select",{"data-testid":"pr-provider",value:te,onChange:q=>de(q.target.value,ne,C),children:[x.jsx("option",{value:"github",children:"GitHub"}),x.jsx("option",{value:"bitbucket",children:"Bitbucket"})]})]}),x.jsxs("label",{className:"field",children:[x.jsx("span",{children:"Repository"}),x.jsx("input",{"data-testid":"pr-repo",placeholder:"owner/repo",value:ne,onChange:q=>de(te,q.target.value,C),spellCheck:!1})]}),x.jsx("button",{type:"button","data-testid":"btn-list-prs",className:"btn",disabled:!!z,onClick:me,children:"List PRs"})]}),X.length===0?x.jsxs("div",{className:"empty",children:[x.jsx("h2",{children:"No pull requests loaded"}),x.jsx("p",{children:"Enter an owner/repo, then list open PRs. Reviewing a PR fills base and head from its SHAs."})]}):X.map(q=>x.jsxs("article",{className:"pr","data-testid":`pr-${q.number}`,children:[x.jsxs("h3",{children:["#",q.number," ",q.title]}),x.jsxs("div",{className:"pr-meta muted",children:[x.jsx("span",{className:`chip ${q.draft?"":"open"}`,children:q.draft?"draft":q.state}),x.jsx("span",{children:q.author}),x.jsxs("span",{children:[q.source_branch," → ",q.target_branch]})]}),x.jsxs("div",{className:"pr-actions",children:[x.jsxs("a",{href:q.url,target:"_blank",rel:"noreferrer",children:["Open on ",q.provider]}),x.jsx("button",{type:"button",className:"btn primary",onClick:()=>{ue(q.base_sha||q.target_branch,q.head_sha||q.source_branch),de(q.provider,q.repo,String(q.number)),r("review")},children:"Review this range"})]})]},`${q.provider}-${q.number}`))]}),t==="settings"&&x.jsxs("form",{className:"settings","data-testid":"settings-form",onSubmit:Ce,children:[x.jsxs("div",{children:[x.jsx("h1",{children:"Settings"}),x.jsx("p",{className:"muted",children:"Tokens stay on this machine in ~/.loadpath/settings.json. AI runs only on residual uncertainty the graph could not close."})]}),x.jsxs("section",{className:"settings-card",children:[x.jsx("h2",{children:"Appearance"}),x.jsx("p",{className:"muted",children:"Local to this browser. High contrast is a first-class theme, not an afterthought."}),x.jsx("div",{className:"theme-grid","data-testid":"theme-grid",children:cl.map(q=>x.jsxs("button",{type:"button",className:A===q.id?"theme-swatch active":"theme-swatch","data-testid":`theme-${q.id}`,onClick:()=>j(q.id),children:[x.jsx("div",{className:"name",children:q.label}),x.jsx("div",{className:"group",children:q.group})]},q.id))})]}),x.jsxs("section",{className:"settings-card",children:[x.jsx("h2",{children:"Source control"}),x.jsx("label",{htmlFor:"github_token",children:"GitHub token"}),x.jsx("input",{id:"github_token",name:"github_token",type:"password",placeholder:"ghp_…",autoComplete:"off"}),x.jsx("label",{htmlFor:"bitbucket_token",children:"Bitbucket token"}),x.jsx("input",{id:"bitbucket_token",name:"bitbucket_token",type:"password",autoComplete:"off"}),x.jsx("label",{htmlFor:"bitbucket_username",children:"Bitbucket username (app passwords)"}),x.jsx("input",{id:"bitbucket_username",name:"bitbucket_username",defaultValue:String($.bitbucket_username||"")})]}),x.jsxs("section",{className:"settings-card",children:[x.jsx("h2",{children:"Residual AI"}),x.jsx("label",{htmlFor:"ai_provider",children:"Provider"}),x.jsxs("select",{id:"ai_provider",name:"ai_provider",defaultValue:String(((ft=$.ai)==null?void 0:ft.provider)||"none"),children:[x.jsx("option",{value:"none",children:"none (graph only)"}),x.jsx("option",{value:"anthropic",children:"Anthropic"}),x.jsx("option",{value:"openai",children:"OpenAI"}),x.jsx("option",{value:"grok",children:"Grok / xAI"}),x.jsx("option",{value:"deepseek",children:"DeepSeek"}),x.jsx("option",{value:"cursor",children:"Cursor-compatible (OpenAI protocol)"}),x.jsx("option",{value:"ollama",children:"Ollama local"})]}),x.jsx("label",{htmlFor:"ai_api_key",children:"API key"}),x.jsx("input",{id:"ai_api_key",name:"ai_api_key",type:"password",autoComplete:"off"}),x.jsx("label",{htmlFor:"ai_model",children:"Model"}),x.jsx("input",{id:"ai_model",name:"ai_model",placeholder:"optional override"}),x.jsx("label",{htmlFor:"ai_base_url",children:"Base URL"}),x.jsx("input",{id:"ai_base_url",name:"ai_base_url",placeholder:"optional, OpenAI-compatible"}),x.jsx("button",{className:"btn primary",type:"submit",children:"Save"})]})]})]})]})]})}function uk({review:t,findings:r,aiNote:o,busy:l,onAskAi:a,onCopy:c,onPost:d}){var p,y,m,v,g,S,_,M;const h=[...new Set(t.confidence.reasons||[])];return x.jsxs(x.Fragment,{children:[x.jsxs("div",{className:`merge-box ${t.confidence.level}`,children:[x.jsxs("div",{className:`level ${t.confidence.level}`,children:[t.confidence.level.toUpperCase()," — ",t.title]}),h.length?x.jsx("ul",{className:"reasons",children:h.map(k=>x.jsx("li",{children:k},k))}):null,t.low_risk?x.jsx("span",{className:"chip",children:"low-risk"}):null,t.change_kinds.map(k=>x.jsx("span",{className:"chip",children:$0(k)},k))]}),x.jsxs("div",{className:"metrics",children:[x.jsxs("div",{className:"metric",children:[x.jsxs("div",{className:"n",children:[t.confidence.covered_sinks,"/",t.confidence.sinks]}),x.jsx("div",{className:"l",children:"Sinks tested"})]}),x.jsxs("div",{className:"metric",children:[x.jsx("div",{className:"n",children:r.length}),x.jsx("div",{className:"l",children:"Findings"})]}),x.jsxs("div",{className:"metric",children:[x.jsx("div",{className:"n",children:t.residuals.length}),x.jsx("div",{className:"l",children:"Residuals"})]})]}),x.jsx("pre",{className:"headline",children:t.headline}),t.index?x.jsxs("details",{className:"section",open:!0,children:[x.jsxs("summary",{children:["Index ",x.jsx("span",{className:"count",children:t.index.counts.nodes})]}),x.jsxs("div",{className:"muted",children:["Walked ",t.index.counts.nodes," nodes / ",t.index.counts.edges," edges",t.index.reindex_skipped?" from an unchanged index":t.index.reindexed?" after an incremental refresh":" from the existing index",t.index.django_boot&&t.index.django_boot!=="off"?` · Django boot ${t.index.django_boot}`:"",(p=t.workspace)!=null&&p.three_dot?" · three-dot range":""]})]}):null,x.jsxs("details",{className:"section",open:!0,children:[x.jsxs("summary",{children:["Read this ",x.jsx("span",{className:"count",children:t.read_order.length})]}),t.read_order.map((k,E)=>x.jsxs("div",{className:"read-item",children:[x.jsxs("span",{className:"file",children:[E+1,". ",k.path]}),x.jsx("div",{className:"why",children:k.why})]},k.path))]}),x.jsxs("details",{className:"section",children:[x.jsxs("summary",{children:["Clusters ",x.jsx("span",{className:"count",children:t.clusters.length})]}),t.clusters.map(k=>x.jsxs("div",{className:"muted",children:[x.jsx("strong",{children:k.title})," — ",k.files.join(", ")]},k.id))]}),x.jsxs("details",{className:"section",open:!0,children:[x.jsxs("summary",{children:["Architecture ",x.jsx("span",{className:"count",children:r.length})]}),r.length===0?x.jsx("div",{className:"muted",children:t.architecture_note}):r.map(k=>x.jsxs("div",{className:"finding",children:[x.jsx("span",{className:`chip ${k.severity}`,children:k.severity}),k.message]},k.rule+k.message))]}),x.jsxs("details",{className:"section",open:!0,children:[x.jsxs("summary",{children:["Residual ",x.jsx("span",{className:"count",children:t.residuals.length})]}),x.jsx("p",{className:"muted",children:"AI is only used here, on what the graph could not close."}),t.residuals.map(k=>x.jsx("div",{className:"residual muted",children:k},k))]}),(m=(y=t.evolution)==null?void 0:y.notes)!=null&&m.length||(g=(v=t.evolution)==null?void 0:v.hotspots)!=null&&g.some(k=>k.commits)?x.jsxs("details",{className:"section",children:[x.jsx("summary",{children:"Churn & coupling"}),(((S=t.evolution)==null?void 0:S.notes)||[]).map(k=>x.jsx("div",{className:"muted",children:k},k)),(((_=t.evolution)==null?void 0:_.hotspots)||[]).filter(k=>k.commits).slice(0,6).map(k=>x.jsxs("div",{className:"muted",children:[x.jsx("span",{className:"file",children:k.path})," — ",k.commits," commits, bus factor ",k.bus_factor]},k.path))]}):null,x.jsxs("div",{className:"btn-row",children:[x.jsx("button",{type:"button",className:"btn",disabled:l,onClick:a,children:"Ask configured model"}),x.jsx("button",{type:"button",className:"btn","data-testid":"btn-copy-markdown",onClick:c,children:"Copy markdown"}),x.jsx("button",{type:"button",className:"btn","data-testid":"btn-post-comment",onClick:d,children:"Post to PR"})]}),o?x.jsx("pre",{className:"headline",children:o}):null,x.jsx("div",{className:"kicker",children:"Reviewers"}),x.jsx("div",{className:"muted",children:t.suggested_reviewers.join(", ")||"—"}),(M=t.knowledge_owners)!=null&&M.length?x.jsxs("div",{className:"muted",children:["Knowledge: ",t.knowledge_owners.join(", ")]}):null]})}function ck({architecture:t,busy:r,onReindex:o,onReview:l}){const a=t.findings.filter(c=>!c.waived);return x.jsxs(x.Fragment,{children:[x.jsxs("div",{className:"merge-box high",children:[x.jsxs("div",{className:"level high",children:["INDEXED — ",t.counts.nodes," nodes"]}),x.jsxs("div",{className:"muted",style:{marginTop:8},children:[t.indexed_at?`Last index ${D0(t.indexed_at)}`:"Indexed",t.incremental?" · incremental":" · full",t.stale?" · stale":"",t.django_boot&&t.django_boot!=="off"?` · Django boot ${t.django_boot}`:""]}),x.jsxs("span",{className:"chip",children:[t.counts.edges," edges"]}),t.has_config?x.jsx("span",{className:"chip",children:"loadpath.yml"}):null]}),x.jsxs("details",{className:"section",open:!0,children:[x.jsx("summary",{children:"Bounded contexts"}),Object.values(t.contexts).map(c=>x.jsxs("div",{className:"muted",children:[x.jsx("strong",{children:c.name})," — ",(c.django_apps||[]).join(", ")||"no apps"," ·"," ",(c.owners||[]).join(", ")||"unowned"]},c.name))]}),x.jsxs("details",{className:"section",children:[x.jsxs("summary",{children:["Rules ",x.jsx("span",{className:"count",children:(t.rules||[]).length})]}),(t.rules||[]).map(c=>x.jsx("div",{className:"muted",children:c},c))]}),x.jsxs("details",{className:"section",open:!0,children:[x.jsxs("summary",{children:["Findings ",x.jsx("span",{className:"count",children:a.length})]}),a.length===0?x.jsx("div",{className:"muted",children:"No architecture rule hits on the full graph."}):a.map(c=>x.jsxs("div",{className:"finding",children:[x.jsx("span",{className:`chip ${c.severity}`,children:c.severity}),c.message]},c.rule+c.message))]}),x.jsxs("details",{className:"section",open:!0,children:[x.jsx("summary",{children:"Types"}),x.jsx("table",{className:"type-table",children:x.jsx("tbody",{children:Object.entries(t.type_counts||{}).sort((c,d)=>d[1]-c[1]).slice(0,12).map(([c,d])=>x.jsxs("tr",{children:[x.jsx("td",{children:Qu(c)}),x.jsx("td",{children:d})]},c))})})]}),x.jsxs("div",{className:"btn-row",children:[x.jsx("button",{type:"button",className:"btn",disabled:r,onClick:o,"data-testid":"btn-full-reindex",children:"Full reindex"}),x.jsx("button",{type:"button",className:"btn primary",disabled:r,onClick:l,children:"Review against this index"})]})]})}Qg(Xg());A0.createRoot(document.getElementById("root")).render(x.jsx(W.StrictMode,{children:x.jsx(ak,{})})); diff --git a/src/loadpath/static/assets/index-Dmb_oKHM.js b/src/loadpath/static/assets/index-Dmb_oKHM.js deleted file mode 100644 index 945c3a1..0000000 --- a/src/loadpath/static/assets/index-Dmb_oKHM.js +++ /dev/null @@ -1,62 +0,0 @@ -(function(){const r=document.createElement("link").relList;if(r&&r.supports&&r.supports("modulepreload"))return;for(const u of document.querySelectorAll('link[rel="modulepreload"]'))l(u);new MutationObserver(u=>{for(const c of u)if(c.type==="childList")for(const f of c.addedNodes)f.tagName==="LINK"&&f.rel==="modulepreload"&&l(f)}).observe(document,{childList:!0,subtree:!0});function i(u){const c={};return u.integrity&&(c.integrity=u.integrity),u.referrerPolicy&&(c.referrerPolicy=u.referrerPolicy),u.crossOrigin==="use-credentials"?c.credentials="include":u.crossOrigin==="anonymous"?c.credentials="omit":c.credentials="same-origin",c}function l(u){if(u.ep)return;u.ep=!0;const c=i(u);fetch(u.href,c)}})();function Jh(t){return t&&t.__esModule&&Object.prototype.hasOwnProperty.call(t,"default")?t.default:t}var ha={exports:{}},Zo={},pa={exports:{}},Me={};/** - * @license React - * react.production.min.js - * - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */var Ad;function E0(){if(Ad)return Me;Ad=1;var t=Symbol.for("react.element"),r=Symbol.for("react.portal"),i=Symbol.for("react.fragment"),l=Symbol.for("react.strict_mode"),u=Symbol.for("react.profiler"),c=Symbol.for("react.provider"),f=Symbol.for("react.context"),h=Symbol.for("react.forward_ref"),p=Symbol.for("react.suspense"),y=Symbol.for("react.memo"),g=Symbol.for("react.lazy"),v=Symbol.iterator;function m(M){return M===null||typeof M!="object"?null:(M=v&&M[v]||M["@@iterator"],typeof M=="function"?M:null)}var w={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},S=Object.assign,P={};function C(M,j,ne){this.props=M,this.context=j,this.refs=P,this.updater=ne||w}C.prototype.isReactComponent={},C.prototype.setState=function(M,j){if(typeof M!="object"&&typeof M!="function"&&M!=null)throw Error("setState(...): takes an object of state variables to update or a function which returns an object of state variables.");this.updater.enqueueSetState(this,M,j,"setState")},C.prototype.forceUpdate=function(M){this.updater.enqueueForceUpdate(this,M,"forceUpdate")};function k(){}k.prototype=C.prototype;function z(M,j,ne){this.props=M,this.context=j,this.refs=P,this.updater=ne||w}var _=z.prototype=new k;_.constructor=z,S(_,C.prototype),_.isPureReactComponent=!0;var I=Array.isArray,H=Object.prototype.hasOwnProperty,$={current:null},B={key:!0,ref:!0,__self:!0,__source:!0};function X(M,j,ne){var re,ae={},fe=null,ce=null;if(j!=null)for(re in j.ref!==void 0&&(ce=j.ref),j.key!==void 0&&(fe=""+j.key),j)H.call(j,re)&&!B.hasOwnProperty(re)&&(ae[re]=j[re]);var K=arguments.length-2;if(K===1)ae.children=ne;else if(1>>1,j=A[M];if(0>>1;Mu(ae,O))feu(ce,ae)?(A[M]=ce,A[fe]=O,M=fe):(A[M]=ae,A[re]=O,M=re);else if(feu(ce,O))A[M]=ce,A[fe]=O,M=fe;else break e}}return L}function u(A,L){var O=A.sortIndex-L.sortIndex;return O!==0?O:A.id-L.id}if(typeof performance=="object"&&typeof performance.now=="function"){var c=performance;t.unstable_now=function(){return c.now()}}else{var f=Date,h=f.now();t.unstable_now=function(){return f.now()-h}}var p=[],y=[],g=1,v=null,m=3,w=!1,S=!1,P=!1,C=typeof setTimeout=="function"?setTimeout:null,k=typeof clearTimeout=="function"?clearTimeout:null,z=typeof setImmediate<"u"?setImmediate:null;typeof navigator<"u"&&navigator.scheduling!==void 0&&navigator.scheduling.isInputPending!==void 0&&navigator.scheduling.isInputPending.bind(navigator.scheduling);function _(A){for(var L=i(y);L!==null;){if(L.callback===null)l(y);else if(L.startTime<=A)l(y),L.sortIndex=L.expirationTime,r(p,L);else break;L=i(y)}}function I(A){if(P=!1,_(A),!S)if(i(p)!==null)S=!0,V(H);else{var L=i(y);L!==null&&b(I,L.startTime-A)}}function H(A,L){S=!1,P&&(P=!1,k(X),X=-1),w=!0;var O=m;try{for(_(L),v=i(p);v!==null&&(!(v.expirationTime>L)||A&&!Z());){var M=v.callback;if(typeof M=="function"){v.callback=null,m=v.priorityLevel;var j=M(v.expirationTime<=L);L=t.unstable_now(),typeof j=="function"?v.callback=j:v===i(p)&&l(p),_(L)}else l(p);v=i(p)}if(v!==null)var ne=!0;else{var re=i(y);re!==null&&b(I,re.startTime-L),ne=!1}return ne}finally{v=null,m=O,w=!1}}var $=!1,B=null,X=-1,G=5,te=-1;function Z(){return!(t.unstable_now()-teA||125M?(A.sortIndex=O,r(y,A),i(p)===null&&A===i(y)&&(P?(k(X),X=-1):P=!0,b(I,O-M))):(A.sortIndex=j,r(p,A),S||w||(S=!0,V(H))),A},t.unstable_shouldYield=Z,t.unstable_wrapCallback=function(A){var L=m;return function(){var O=m;m=L;try{return A.apply(this,arguments)}finally{m=O}}}})(ya)),ya}var Hd;function I0(){return Hd||(Hd=1,ma.exports=P0()),ma.exports}/** - * @license React - * react-dom.production.min.js - * - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */var Vd;function T0(){if(Vd)return wt;Vd=1;var t=pi(),r=I0();function i(e){for(var n="https://reactjs.org/docs/error-decoder.html?invariant="+e,o=1;o"u"||typeof window.document>"u"||typeof window.document.createElement>"u"),p=Object.prototype.hasOwnProperty,y=/^[:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD][:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD\-.0-9\u00B7\u0300-\u036F\u203F-\u2040]*$/,g={},v={};function m(e){return p.call(v,e)?!0:p.call(g,e)?!1:y.test(e)?v[e]=!0:(g[e]=!0,!1)}function w(e,n,o,s){if(o!==null&&o.type===0)return!1;switch(typeof n){case"function":case"symbol":return!0;case"boolean":return s?!1:o!==null?!o.acceptsBooleans:(e=e.toLowerCase().slice(0,5),e!=="data-"&&e!=="aria-");default:return!1}}function S(e,n,o,s){if(n===null||typeof n>"u"||w(e,n,o,s))return!0;if(s)return!1;if(o!==null)switch(o.type){case 3:return!n;case 4:return n===!1;case 5:return isNaN(n);case 6:return isNaN(n)||1>n}return!1}function P(e,n,o,s,a,d,x){this.acceptsBooleans=n===2||n===3||n===4,this.attributeName=s,this.attributeNamespace=a,this.mustUseProperty=o,this.propertyName=e,this.type=n,this.sanitizeURL=d,this.removeEmptyString=x}var C={};"children dangerouslySetInnerHTML defaultValue defaultChecked innerHTML suppressContentEditableWarning suppressHydrationWarning style".split(" ").forEach(function(e){C[e]=new P(e,0,!1,e,null,!1,!1)}),[["acceptCharset","accept-charset"],["className","class"],["htmlFor","for"],["httpEquiv","http-equiv"]].forEach(function(e){var n=e[0];C[n]=new P(n,1,!1,e[1],null,!1,!1)}),["contentEditable","draggable","spellCheck","value"].forEach(function(e){C[e]=new P(e,2,!1,e.toLowerCase(),null,!1,!1)}),["autoReverse","externalResourcesRequired","focusable","preserveAlpha"].forEach(function(e){C[e]=new P(e,2,!1,e,null,!1,!1)}),"allowFullScreen async autoFocus autoPlay controls default defer disabled disablePictureInPicture disableRemotePlayback formNoValidate hidden loop noModule noValidate open playsInline readOnly required reversed scoped seamless itemScope".split(" ").forEach(function(e){C[e]=new P(e,3,!1,e.toLowerCase(),null,!1,!1)}),["checked","multiple","muted","selected"].forEach(function(e){C[e]=new P(e,3,!0,e,null,!1,!1)}),["capture","download"].forEach(function(e){C[e]=new P(e,4,!1,e,null,!1,!1)}),["cols","rows","size","span"].forEach(function(e){C[e]=new P(e,6,!1,e,null,!1,!1)}),["rowSpan","start"].forEach(function(e){C[e]=new P(e,5,!1,e.toLowerCase(),null,!1,!1)});var k=/[\-:]([a-z])/g;function z(e){return e[1].toUpperCase()}"accent-height alignment-baseline arabic-form baseline-shift cap-height clip-path clip-rule color-interpolation color-interpolation-filters color-profile color-rendering dominant-baseline enable-background fill-opacity fill-rule flood-color flood-opacity font-family font-size font-size-adjust font-stretch font-style font-variant font-weight glyph-name glyph-orientation-horizontal glyph-orientation-vertical horiz-adv-x horiz-origin-x image-rendering letter-spacing lighting-color marker-end marker-mid marker-start overline-position overline-thickness paint-order panose-1 pointer-events rendering-intent shape-rendering stop-color stop-opacity strikethrough-position strikethrough-thickness stroke-dasharray stroke-dashoffset stroke-linecap stroke-linejoin stroke-miterlimit stroke-opacity stroke-width text-anchor text-decoration text-rendering underline-position underline-thickness unicode-bidi unicode-range units-per-em v-alphabetic v-hanging v-ideographic v-mathematical vector-effect vert-adv-y vert-origin-x vert-origin-y word-spacing writing-mode xmlns:xlink x-height".split(" ").forEach(function(e){var n=e.replace(k,z);C[n]=new P(n,1,!1,e,null,!1,!1)}),"xlink:actuate xlink:arcrole xlink:role xlink:show xlink:title xlink:type".split(" ").forEach(function(e){var n=e.replace(k,z);C[n]=new P(n,1,!1,e,"http://www.w3.org/1999/xlink",!1,!1)}),["xml:base","xml:lang","xml:space"].forEach(function(e){var n=e.replace(k,z);C[n]=new P(n,1,!1,e,"http://www.w3.org/XML/1998/namespace",!1,!1)}),["tabIndex","crossOrigin"].forEach(function(e){C[e]=new P(e,1,!1,e.toLowerCase(),null,!1,!1)}),C.xlinkHref=new P("xlinkHref",1,!1,"xlink:href","http://www.w3.org/1999/xlink",!0,!1),["src","href","action","formAction"].forEach(function(e){C[e]=new P(e,1,!1,e.toLowerCase(),null,!0,!0)});function _(e,n,o,s){var a=C.hasOwnProperty(n)?C[n]:null;(a!==null?a.type!==0:s||!(2T||a[x]!==d[T]){var R=` -`+a[x].replace(" at new "," at ");return e.displayName&&R.includes("")&&(R=R.replace("",e.displayName)),R}while(1<=x&&0<=T);break}}}finally{ne=!1,Error.prepareStackTrace=o}return(e=e?e.displayName||e.name:"")?j(e):""}function ae(e){switch(e.tag){case 5:return j(e.type);case 16:return j("Lazy");case 13:return j("Suspense");case 19:return j("SuspenseList");case 0:case 2:case 15:return e=re(e.type,!1),e;case 11:return e=re(e.type.render,!1),e;case 1:return e=re(e.type,!0),e;default:return""}}function fe(e){if(e==null)return null;if(typeof e=="function")return e.displayName||e.name||null;if(typeof e=="string")return e;switch(e){case B:return"Fragment";case $:return"Portal";case G:return"Profiler";case X:return"StrictMode";case J:return"Suspense";case N:return"SuspenseList"}if(typeof e=="object")switch(e.$$typeof){case Z:return(e.displayName||"Context")+".Consumer";case te:return(e._context.displayName||"Context")+".Provider";case ee:var n=e.render;return e=e.displayName,e||(e=n.displayName||n.name||"",e=e!==""?"ForwardRef("+e+")":"ForwardRef"),e;case U:return n=e.displayName||null,n!==null?n:fe(e.type)||"Memo";case V:n=e._payload,e=e._init;try{return fe(e(n))}catch{}}return null}function ce(e){var n=e.type;switch(e.tag){case 24:return"Cache";case 9:return(n.displayName||"Context")+".Consumer";case 10:return(n._context.displayName||"Context")+".Provider";case 18:return"DehydratedFragment";case 11:return e=n.render,e=e.displayName||e.name||"",n.displayName||(e!==""?"ForwardRef("+e+")":"ForwardRef");case 7:return"Fragment";case 5:return n;case 4:return"Portal";case 3:return"Root";case 6:return"Text";case 16:return fe(n);case 8:return n===X?"StrictMode":"Mode";case 22:return"Offscreen";case 12:return"Profiler";case 21:return"Scope";case 13:return"Suspense";case 19:return"SuspenseList";case 25:return"TracingMarker";case 1:case 0:case 17:case 2:case 14:case 15:if(typeof n=="function")return n.displayName||n.name||null;if(typeof n=="string")return n}return null}function K(e){switch(typeof e){case"boolean":case"number":case"string":case"undefined":return e;case"object":return e;default:return""}}function se(e){var n=e.type;return(e=e.nodeName)&&e.toLowerCase()==="input"&&(n==="checkbox"||n==="radio")}function pe(e){var n=se(e)?"checked":"value",o=Object.getOwnPropertyDescriptor(e.constructor.prototype,n),s=""+e[n];if(!e.hasOwnProperty(n)&&typeof o<"u"&&typeof o.get=="function"&&typeof o.set=="function"){var a=o.get,d=o.set;return Object.defineProperty(e,n,{configurable:!0,get:function(){return a.call(this)},set:function(x){s=""+x,d.call(this,x)}}),Object.defineProperty(e,n,{enumerable:o.enumerable}),{getValue:function(){return s},setValue:function(x){s=""+x},stopTracking:function(){e._valueTracker=null,delete e[n]}}}}function we(e){e._valueTracker||(e._valueTracker=pe(e))}function ve(e){if(!e)return!1;var n=e._valueTracker;if(!n)return!0;var o=n.getValue(),s="";return e&&(s=se(e)?e.checked?"true":"false":e.value),e=s,e!==o?(n.setValue(e),!0):!1}function me(e){if(e=e||(typeof document<"u"?document:void 0),typeof e>"u")return null;try{return e.activeElement||e.body}catch{return e.body}}function Ne(e,n){var o=n.checked;return O({},n,{defaultChecked:void 0,defaultValue:void 0,value:void 0,checked:o??e._wrapperState.initialChecked})}function Pe(e,n){var o=n.defaultValue==null?"":n.defaultValue,s=n.checked!=null?n.checked:n.defaultChecked;o=K(n.value!=null?n.value:o),e._wrapperState={initialChecked:s,initialValue:o,controlled:n.type==="checkbox"||n.type==="radio"?n.checked!=null:n.value!=null}}function Ie(e,n){n=n.checked,n!=null&&_(e,"checked",n,!1)}function Re(e,n){Ie(e,n);var o=K(n.value),s=n.type;if(o!=null)s==="number"?(o===0&&e.value===""||e.value!=o)&&(e.value=""+o):e.value!==""+o&&(e.value=""+o);else if(s==="submit"||s==="reset"){e.removeAttribute("value");return}n.hasOwnProperty("value")?nt(e,n.type,o):n.hasOwnProperty("defaultValue")&&nt(e,n.type,K(n.defaultValue)),n.checked==null&&n.defaultChecked!=null&&(e.defaultChecked=!!n.defaultChecked)}function Ze(e,n,o){if(n.hasOwnProperty("value")||n.hasOwnProperty("defaultValue")){var s=n.type;if(!(s!=="submit"&&s!=="reset"||n.value!==void 0&&n.value!==null))return;n=""+e._wrapperState.initialValue,o||n===e.value||(e.value=n),e.defaultValue=n}o=e.name,o!==""&&(e.name=""),e.defaultChecked=!!e._wrapperState.initialChecked,o!==""&&(e.name=o)}function nt(e,n,o){(n!=="number"||me(e.ownerDocument)!==e)&&(o==null?e.defaultValue=""+e._wrapperState.initialValue:e.defaultValue!==""+o&&(e.defaultValue=""+o))}var Qe=Array.isArray;function Ge(e,n,o,s){if(e=e.options,n){n={};for(var a=0;a"+n.valueOf().toString()+"",n=dt.firstChild;e.firstChild;)e.removeChild(e.firstChild);for(;n.firstChild;)e.appendChild(n.firstChild)}});function F(e,n){if(n){var o=e.firstChild;if(o&&o===e.lastChild&&o.nodeType===3){o.nodeValue=n;return}}e.textContent=n}var Ce={animationIterationCount:!0,aspectRatio:!0,borderImageOutset:!0,borderImageSlice:!0,borderImageWidth:!0,boxFlex:!0,boxFlexGroup:!0,boxOrdinalGroup:!0,columnCount:!0,columns:!0,flex:!0,flexGrow:!0,flexPositive:!0,flexShrink:!0,flexNegative:!0,flexOrder:!0,gridArea:!0,gridRow:!0,gridRowEnd:!0,gridRowSpan:!0,gridRowStart:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnSpan:!0,gridColumnStart:!0,fontWeight:!0,lineClamp:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,tabSize:!0,widows:!0,zIndex:!0,zoom:!0,fillOpacity:!0,floodOpacity:!0,stopOpacity:!0,strokeDasharray:!0,strokeDashoffset:!0,strokeMiterlimit:!0,strokeOpacity:!0,strokeWidth:!0},Nt=["Webkit","ms","Moz","O"];Object.keys(Ce).forEach(function(e){Nt.forEach(function(n){n=n+e.charAt(0).toUpperCase()+e.substring(1),Ce[n]=Ce[e]})});function Gn(e,n,o){return n==null||typeof n=="boolean"||n===""?"":o||typeof n!="number"||n===0||Ce.hasOwnProperty(e)&&Ce[e]?(""+n).trim():n+"px"}function Si(e,n){e=e.style;for(var o in n)if(n.hasOwnProperty(o)){var s=o.indexOf("--")===0,a=Gn(o,n[o],s);o==="float"&&(o="cssFloat"),s?e.setProperty(o,a):e[o]=a}}var _l=O({menuitem:!0},{area:!0,base:!0,br:!0,col:!0,embed:!0,hr:!0,img:!0,input:!0,keygen:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0});function uo(e,n){if(n){if(_l[e]&&(n.children!=null||n.dangerouslySetInnerHTML!=null))throw Error(i(137,e));if(n.dangerouslySetInnerHTML!=null){if(n.children!=null)throw Error(i(60));if(typeof n.dangerouslySetInnerHTML!="object"||!("__html"in n.dangerouslySetInnerHTML))throw Error(i(61))}if(n.style!=null&&typeof n.style!="object")throw Error(i(62))}}function ao(e,n){if(e.indexOf("-")===-1)return typeof n.is=="string";switch(e){case"annotation-xml":case"color-profile":case"font-face":case"font-face-src":case"font-face-uri":case"font-face-format":case"font-face-name":case"missing-glyph":return!1;default:return!0}}var co=null;function fo(e){return e=e.target||e.srcElement||window,e.correspondingUseElement&&(e=e.correspondingUseElement),e.nodeType===3?e.parentNode:e}var ho=null,kn=null,En=null;function _i(e){if(e=Do(e)){if(typeof ho!="function")throw Error(i(280));var n=e.stateNode;n&&(n=Zi(n),ho(e.stateNode,e.type,n))}}function ki(e){kn?En?En.push(e):En=[e]:kn=e}function Ei(){if(kn){var e=kn,n=En;if(En=kn=null,_i(e),n)for(e=0;e>>=0,e===0?32:31-(zl(e)/Rl|0)|0}var Mr=64,Pr=4194304;function Jn(e){switch(e&-e){case 1:return 1;case 2:return 2;case 4:return 4;case 8:return 8;case 16:return 16;case 32:return 32;case 64:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:return e&4194240;case 4194304:case 8388608:case 16777216:case 33554432:case 67108864:return e&130023424;case 134217728:return 134217728;case 268435456:return 268435456;case 536870912:return 536870912;case 1073741824:return 1073741824;default:return e}}function fn(e,n){var o=e.pendingLanes;if(o===0)return 0;var s=0,a=e.suspendedLanes,d=e.pingedLanes,x=o&268435455;if(x!==0){var T=x&~a;T!==0?s=Jn(T):(d&=x,d!==0&&(s=Jn(d)))}else x=o&~a,x!==0?s=Jn(x):d!==0&&(s=Jn(d));if(s===0)return 0;if(n!==0&&n!==s&&(n&a)===0&&(a=s&-s,d=n&-n,a>=d||a===16&&(d&4194240)!==0))return n;if((s&4)!==0&&(s|=o&16),n=e.entangledLanes,n!==0)for(e=e.entanglements,n&=s;0o;o++)n.push(e);return n}function tr(e,n,o){e.pendingLanes|=n,n!==536870912&&(e.suspendedLanes=0,e.pingedLanes=0),e=e.eventTimes,n=31-Mt(n),e[n]=o}function $l(e,n){var o=e.pendingLanes&~n;e.pendingLanes=n,e.suspendedLanes=0,e.pingedLanes=0,e.expiredLanes&=n,e.mutableReadLanes&=n,e.entangledLanes&=n,n=e.entanglements;var s=e.eventTimes;for(e=e.expirationTimes;0=Po),Mc=" ",Pc=!1;function Ic(e,n){switch(e){case"keyup":return xm.indexOf(n.keyCode)!==-1;case"keydown":return n.keyCode!==229;case"keypress":case"mousedown":case"focusout":return!0;default:return!1}}function Tc(e){return e=e.detail,typeof e=="object"&&"data"in e?e.data:null}var zr=!1;function Sm(e,n){switch(e){case"compositionend":return Tc(n);case"keypress":return n.which!==32?null:(Pc=!0,Mc);case"textInput":return e=n.data,e===Mc&&Pc?null:e;default:return null}}function _m(e,n){if(zr)return e==="compositionend"||!Xl&&Ic(e,n)?(e=Sc(),Vi=Vl=In=null,zr=!1,e):null;switch(e){case"paste":return null;case"keypress":if(!(n.ctrlKey||n.altKey||n.metaKey)||n.ctrlKey&&n.altKey){if(n.char&&1=n)return{node:o,offset:n-e};e=s}e:{for(;o;){if(o.nextSibling){o=o.nextSibling;break e}o=o.parentNode}o=void 0}o=Dc(o)}}function Fc(e,n){return e&&n?e===n?!0:e&&e.nodeType===3?!1:n&&n.nodeType===3?Fc(e,n.parentNode):"contains"in e?e.contains(n):e.compareDocumentPosition?!!(e.compareDocumentPosition(n)&16):!1:!1}function Hc(){for(var e=window,n=me();n instanceof e.HTMLIFrameElement;){try{var o=typeof n.contentWindow.location.href=="string"}catch{o=!1}if(o)e=n.contentWindow;else break;n=me(e.document)}return n}function Kl(e){var n=e&&e.nodeName&&e.nodeName.toLowerCase();return n&&(n==="input"&&(e.type==="text"||e.type==="search"||e.type==="tel"||e.type==="url"||e.type==="password")||n==="textarea"||e.contentEditable==="true")}function jm(e){var n=Hc(),o=e.focusedElem,s=e.selectionRange;if(n!==o&&o&&o.ownerDocument&&Fc(o.ownerDocument.documentElement,o)){if(s!==null&&Kl(o)){if(n=s.start,e=s.end,e===void 0&&(e=n),"selectionStart"in o)o.selectionStart=n,o.selectionEnd=Math.min(e,o.value.length);else if(e=(n=o.ownerDocument||document)&&n.defaultView||window,e.getSelection){e=e.getSelection();var a=o.textContent.length,d=Math.min(s.start,a);s=s.end===void 0?d:Math.min(s.end,a),!e.extend&&d>s&&(a=s,s=d,d=a),a=Oc(o,d);var x=Oc(o,s);a&&x&&(e.rangeCount!==1||e.anchorNode!==a.node||e.anchorOffset!==a.offset||e.focusNode!==x.node||e.focusOffset!==x.offset)&&(n=n.createRange(),n.setStart(a.node,a.offset),e.removeAllRanges(),d>s?(e.addRange(n),e.extend(x.node,x.offset)):(n.setEnd(x.node,x.offset),e.addRange(n)))}}for(n=[],e=o;e=e.parentNode;)e.nodeType===1&&n.push({element:e,left:e.scrollLeft,top:e.scrollTop});for(typeof o.focus=="function"&&o.focus(),o=0;o=document.documentMode,Rr=null,ql=null,zo=null,Zl=!1;function Vc(e,n,o){var s=o.window===o?o.document:o.nodeType===9?o:o.ownerDocument;Zl||Rr==null||Rr!==me(s)||(s=Rr,"selectionStart"in s&&Kl(s)?s={start:s.selectionStart,end:s.selectionEnd}:(s=(s.ownerDocument&&s.ownerDocument.defaultView||window).getSelection(),s={anchorNode:s.anchorNode,anchorOffset:s.anchorOffset,focusNode:s.focusNode,focusOffset:s.focusOffset}),zo&&jo(zo,s)||(zo=s,s=Gi(ql,"onSelect"),0Or||(e.current=cu[Or],cu[Or]=null,Or--)}function Ae(e,n){Or++,cu[Or]=e.current,e.current=n}var Rn={},lt=zn(Rn),gt=zn(!1),rr=Rn;function Fr(e,n){var o=e.type.contextTypes;if(!o)return Rn;var s=e.stateNode;if(s&&s.__reactInternalMemoizedUnmaskedChildContext===n)return s.__reactInternalMemoizedMaskedChildContext;var a={},d;for(d in o)a[d]=n[d];return s&&(e=e.stateNode,e.__reactInternalMemoizedUnmaskedChildContext=n,e.__reactInternalMemoizedMaskedChildContext=a),a}function mt(e){return e=e.childContextTypes,e!=null}function Ji(){De(gt),De(lt)}function nf(e,n,o){if(lt.current!==Rn)throw Error(i(168));Ae(lt,n),Ae(gt,o)}function rf(e,n,o){var s=e.stateNode;if(n=n.childContextTypes,typeof s.getChildContext!="function")return o;s=s.getChildContext();for(var a in s)if(!(a in n))throw Error(i(108,ce(e)||"Unknown",a));return O({},o,s)}function es(e){return e=(e=e.stateNode)&&e.__reactInternalMemoizedMergedChildContext||Rn,rr=lt.current,Ae(lt,e),Ae(gt,gt.current),!0}function of(e,n,o){var s=e.stateNode;if(!s)throw Error(i(169));o?(e=rf(e,n,rr),s.__reactInternalMemoizedMergedChildContext=e,De(gt),De(lt),Ae(lt,e)):De(gt),Ae(gt,o)}var hn=null,ts=!1,fu=!1;function sf(e){hn===null?hn=[e]:hn.push(e)}function bm(e){ts=!0,sf(e)}function Ln(){if(!fu&&hn!==null){fu=!0;var e=0,n=Le;try{var o=hn;for(Le=1;e>=x,a-=x,pn=1<<32-Mt(n)+a|o<Ee?(tt=ke,ke=null):tt=ke.sibling;var ze=oe(W,ke,Y[Ee],ue);if(ze===null){ke===null&&(ke=tt);break}e&&ke&&ze.alternate===null&&n(W,ke),D=d(ze,D,Ee),_e===null?xe=ze:_e.sibling=ze,_e=ze,ke=tt}if(Ee===Y.length)return o(W,ke),Fe&&ir(W,Ee),xe;if(ke===null){for(;EeEe?(tt=ke,ke=null):tt=ke.sibling;var bn=oe(W,ke,ze.value,ue);if(bn===null){ke===null&&(ke=tt);break}e&&ke&&bn.alternate===null&&n(W,ke),D=d(bn,D,Ee),_e===null?xe=bn:_e.sibling=bn,_e=bn,ke=tt}if(ze.done)return o(W,ke),Fe&&ir(W,Ee),xe;if(ke===null){for(;!ze.done;Ee++,ze=Y.next())ze=le(W,ze.value,ue),ze!==null&&(D=d(ze,D,Ee),_e===null?xe=ze:_e.sibling=ze,_e=ze);return Fe&&ir(W,Ee),xe}for(ke=s(W,ke);!ze.done;Ee++,ze=Y.next())ze=de(ke,W,Ee,ze.value,ue),ze!==null&&(e&&ze.alternate!==null&&ke.delete(ze.key===null?Ee:ze.key),D=d(ze,D,Ee),_e===null?xe=ze:_e.sibling=ze,_e=ze);return e&&ke.forEach(function(k0){return n(W,k0)}),Fe&&ir(W,Ee),xe}function We(W,D,Y,ue){if(typeof Y=="object"&&Y!==null&&Y.type===B&&Y.key===null&&(Y=Y.props.children),typeof Y=="object"&&Y!==null){switch(Y.$$typeof){case H:e:{for(var xe=Y.key,_e=D;_e!==null;){if(_e.key===xe){if(xe=Y.type,xe===B){if(_e.tag===7){o(W,_e.sibling),D=a(_e,Y.props.children),D.return=W,W=D;break e}}else if(_e.elementType===xe||typeof xe=="object"&&xe!==null&&xe.$$typeof===V&&df(xe)===_e.type){o(W,_e.sibling),D=a(_e,Y.props),D.ref=Oo(W,_e,Y),D.return=W,W=D;break e}o(W,_e);break}else n(W,_e);_e=_e.sibling}Y.type===B?(D=hr(Y.props.children,W.mode,ue,Y.key),D.return=W,W=D):(ue=Is(Y.type,Y.key,Y.props,null,W.mode,ue),ue.ref=Oo(W,D,Y),ue.return=W,W=ue)}return x(W);case $:e:{for(_e=Y.key;D!==null;){if(D.key===_e)if(D.tag===4&&D.stateNode.containerInfo===Y.containerInfo&&D.stateNode.implementation===Y.implementation){o(W,D.sibling),D=a(D,Y.children||[]),D.return=W,W=D;break e}else{o(W,D);break}else n(W,D);D=D.sibling}D=ua(Y,W.mode,ue),D.return=W,W=D}return x(W);case V:return _e=Y._init,We(W,D,_e(Y._payload),ue)}if(Qe(Y))return ge(W,D,Y,ue);if(L(Y))return ye(W,D,Y,ue);is(W,Y)}return typeof Y=="string"&&Y!==""||typeof Y=="number"?(Y=""+Y,D!==null&&D.tag===6?(o(W,D.sibling),D=a(D,Y),D.return=W,W=D):(o(W,D),D=la(Y,W.mode,ue),D.return=W,W=D),x(W)):o(W,D)}return We}var br=hf(!0),pf=hf(!1),ss=zn(null),ls=null,Ur=null,yu=null;function vu(){yu=Ur=ls=null}function xu(e){var n=ss.current;De(ss),e._currentValue=n}function wu(e,n,o){for(;e!==null;){var s=e.alternate;if((e.childLanes&n)!==n?(e.childLanes|=n,s!==null&&(s.childLanes|=n)):s!==null&&(s.childLanes&n)!==n&&(s.childLanes|=n),e===o)break;e=e.return}}function Wr(e,n){ls=e,yu=Ur=null,e=e.dependencies,e!==null&&e.firstContext!==null&&((e.lanes&n)!==0&&(yt=!0),e.firstContext=null)}function Ot(e){var n=e._currentValue;if(yu!==e)if(e={context:e,memoizedValue:n,next:null},Ur===null){if(ls===null)throw Error(i(308));Ur=e,ls.dependencies={lanes:0,firstContext:e}}else Ur=Ur.next=e;return n}var sr=null;function Su(e){sr===null?sr=[e]:sr.push(e)}function gf(e,n,o,s){var a=n.interleaved;return a===null?(o.next=o,Su(n)):(o.next=a.next,a.next=o),n.interleaved=o,mn(e,s)}function mn(e,n){e.lanes|=n;var o=e.alternate;for(o!==null&&(o.lanes|=n),o=e,e=e.return;e!==null;)e.childLanes|=n,o=e.alternate,o!==null&&(o.childLanes|=n),o=e,e=e.return;return o.tag===3?o.stateNode:null}var An=!1;function _u(e){e.updateQueue={baseState:e.memoizedState,firstBaseUpdate:null,lastBaseUpdate:null,shared:{pending:null,interleaved:null,lanes:0},effects:null}}function mf(e,n){e=e.updateQueue,n.updateQueue===e&&(n.updateQueue={baseState:e.baseState,firstBaseUpdate:e.firstBaseUpdate,lastBaseUpdate:e.lastBaseUpdate,shared:e.shared,effects:e.effects})}function yn(e,n){return{eventTime:e,lane:n,tag:0,payload:null,callback:null,next:null}}function $n(e,n,o){var s=e.updateQueue;if(s===null)return null;if(s=s.shared,(Te&2)!==0){var a=s.pending;return a===null?n.next=n:(n.next=a.next,a.next=n),s.pending=n,mn(e,o)}return a=s.interleaved,a===null?(n.next=n,Su(s)):(n.next=a.next,a.next=n),s.interleaved=n,mn(e,o)}function us(e,n,o){if(n=n.updateQueue,n!==null&&(n=n.shared,(o&4194240)!==0)){var s=n.lanes;s&=e.pendingLanes,o|=s,n.lanes=o,Ir(e,o)}}function yf(e,n){var o=e.updateQueue,s=e.alternate;if(s!==null&&(s=s.updateQueue,o===s)){var a=null,d=null;if(o=o.firstBaseUpdate,o!==null){do{var x={eventTime:o.eventTime,lane:o.lane,tag:o.tag,payload:o.payload,callback:o.callback,next:null};d===null?a=d=x:d=d.next=x,o=o.next}while(o!==null);d===null?a=d=n:d=d.next=n}else a=d=n;o={baseState:s.baseState,firstBaseUpdate:a,lastBaseUpdate:d,shared:s.shared,effects:s.effects},e.updateQueue=o;return}e=o.lastBaseUpdate,e===null?o.firstBaseUpdate=n:e.next=n,o.lastBaseUpdate=n}function as(e,n,o,s){var a=e.updateQueue;An=!1;var d=a.firstBaseUpdate,x=a.lastBaseUpdate,T=a.shared.pending;if(T!==null){a.shared.pending=null;var R=T,q=R.next;R.next=null,x===null?d=q:x.next=q,x=R;var ie=e.alternate;ie!==null&&(ie=ie.updateQueue,T=ie.lastBaseUpdate,T!==x&&(T===null?ie.firstBaseUpdate=q:T.next=q,ie.lastBaseUpdate=R))}if(d!==null){var le=a.baseState;x=0,ie=q=R=null,T=d;do{var oe=T.lane,de=T.eventTime;if((s&oe)===oe){ie!==null&&(ie=ie.next={eventTime:de,lane:0,tag:T.tag,payload:T.payload,callback:T.callback,next:null});e:{var ge=e,ye=T;switch(oe=n,de=o,ye.tag){case 1:if(ge=ye.payload,typeof ge=="function"){le=ge.call(de,le,oe);break e}le=ge;break e;case 3:ge.flags=ge.flags&-65537|128;case 0:if(ge=ye.payload,oe=typeof ge=="function"?ge.call(de,le,oe):ge,oe==null)break e;le=O({},le,oe);break e;case 2:An=!0}}T.callback!==null&&T.lane!==0&&(e.flags|=64,oe=a.effects,oe===null?a.effects=[T]:oe.push(T))}else de={eventTime:de,lane:oe,tag:T.tag,payload:T.payload,callback:T.callback,next:null},ie===null?(q=ie=de,R=le):ie=ie.next=de,x|=oe;if(T=T.next,T===null){if(T=a.shared.pending,T===null)break;oe=T,T=oe.next,oe.next=null,a.lastBaseUpdate=oe,a.shared.pending=null}}while(!0);if(ie===null&&(R=le),a.baseState=R,a.firstBaseUpdate=q,a.lastBaseUpdate=ie,n=a.shared.interleaved,n!==null){a=n;do x|=a.lane,a=a.next;while(a!==n)}else d===null&&(a.shared.lanes=0);ar|=x,e.lanes=x,e.memoizedState=le}}function vf(e,n,o){if(e=n.effects,n.effects=null,e!==null)for(n=0;no?o:4,e(!0);var s=Mu.transition;Mu.transition={};try{e(!1),n()}finally{Le=o,Mu.transition=s}}function Df(){return Ft().memoizedState}function Xm(e,n,o){var s=Hn(e);if(o={lane:s,action:o,hasEagerState:!1,eagerState:null,next:null},Of(e))Ff(n,o);else if(o=gf(e,n,o,s),o!==null){var a=pt();Xt(o,e,s,a),Hf(o,n,s)}}function Qm(e,n,o){var s=Hn(e),a={lane:s,action:o,hasEagerState:!1,eagerState:null,next:null};if(Of(e))Ff(n,a);else{var d=e.alternate;if(e.lanes===0&&(d===null||d.lanes===0)&&(d=n.lastRenderedReducer,d!==null))try{var x=n.lastRenderedState,T=d(x,o);if(a.hasEagerState=!0,a.eagerState=T,Bt(T,x)){var R=n.interleaved;R===null?(a.next=a,Su(n)):(a.next=R.next,R.next=a),n.interleaved=a;return}}catch{}finally{}o=gf(e,n,a,s),o!==null&&(a=pt(),Xt(o,e,s,a),Hf(o,n,s))}}function Of(e){var n=e.alternate;return e===Be||n!==null&&n===Be}function Ff(e,n){Bo=ds=!0;var o=e.pending;o===null?n.next=n:(n.next=o.next,o.next=n),e.pending=n}function Hf(e,n,o){if((o&4194240)!==0){var s=n.lanes;s&=e.pendingLanes,o|=s,n.lanes=o,Ir(e,o)}}var gs={readContext:Ot,useCallback:ut,useContext:ut,useEffect:ut,useImperativeHandle:ut,useInsertionEffect:ut,useLayoutEffect:ut,useMemo:ut,useReducer:ut,useRef:ut,useState:ut,useDebugValue:ut,useDeferredValue:ut,useTransition:ut,useMutableSource:ut,useSyncExternalStore:ut,useId:ut,unstable_isNewReconciler:!1},Gm={readContext:Ot,useCallback:function(e,n){return on().memoizedState=[e,n===void 0?null:n],e},useContext:Ot,useEffect:If,useImperativeHandle:function(e,n,o){return o=o!=null?o.concat([e]):null,hs(4194308,4,zf.bind(null,n,e),o)},useLayoutEffect:function(e,n){return hs(4194308,4,e,n)},useInsertionEffect:function(e,n){return hs(4,2,e,n)},useMemo:function(e,n){var o=on();return n=n===void 0?null:n,e=e(),o.memoizedState=[e,n],e},useReducer:function(e,n,o){var s=on();return n=o!==void 0?o(n):n,s.memoizedState=s.baseState=n,e={pending:null,interleaved:null,lanes:0,dispatch:null,lastRenderedReducer:e,lastRenderedState:n},s.queue=e,e=e.dispatch=Xm.bind(null,Be,e),[s.memoizedState,e]},useRef:function(e){var n=on();return e={current:e},n.memoizedState=e},useState:Mf,useDebugValue:Lu,useDeferredValue:function(e){return on().memoizedState=e},useTransition:function(){var e=Mf(!1),n=e[0];return e=Ym.bind(null,e[1]),on().memoizedState=e,[n,e]},useMutableSource:function(){},useSyncExternalStore:function(e,n,o){var s=Be,a=on();if(Fe){if(o===void 0)throw Error(i(407));o=o()}else{if(o=n(),et===null)throw Error(i(349));(ur&30)!==0||_f(s,n,o)}a.memoizedState=o;var d={value:o,getSnapshot:n};return a.queue=d,If(Ef.bind(null,s,d,e),[e]),s.flags|=2048,Wo(9,kf.bind(null,s,d,o,n),void 0,null),o},useId:function(){var e=on(),n=et.identifierPrefix;if(Fe){var o=gn,s=pn;o=(s&~(1<<32-Mt(s)-1)).toString(32)+o,n=":"+n+"R"+o,o=bo++,0<\/script>",e=e.removeChild(e.firstChild)):typeof s.is=="string"?e=x.createElement(o,{is:s.is}):(e=x.createElement(o),o==="select"&&(x=e,s.multiple?x.multiple=!0:s.size&&(x.size=s.size))):e=x.createElementNS(e,o),e[nn]=n,e[$o]=s,sd(e,n,!1,!1),n.stateNode=e;e:{switch(x=ao(o,s),o){case"dialog":$e("cancel",e),$e("close",e),a=s;break;case"iframe":case"object":case"embed":$e("load",e),a=s;break;case"video":case"audio":for(a=0;aKr&&(n.flags|=128,s=!0,Yo(d,!1),n.lanes=4194304)}else{if(!s)if(e=cs(x),e!==null){if(n.flags|=128,s=!0,o=e.updateQueue,o!==null&&(n.updateQueue=o,n.flags|=4),Yo(d,!0),d.tail===null&&d.tailMode==="hidden"&&!x.alternate&&!Fe)return at(n),null}else 2*He()-d.renderingStartTime>Kr&&o!==1073741824&&(n.flags|=128,s=!0,Yo(d,!1),n.lanes=4194304);d.isBackwards?(x.sibling=n.child,n.child=x):(o=d.last,o!==null?o.sibling=x:n.child=x,d.last=x)}return d.tail!==null?(n=d.tail,d.rendering=n,d.tail=n.sibling,d.renderingStartTime=He(),n.sibling=null,o=Ve.current,Ae(Ve,s?o&1|2:o&1),n):(at(n),null);case 22:case 23:return oa(),s=n.memoizedState!==null,e!==null&&e.memoizedState!==null!==s&&(n.flags|=8192),s&&(n.mode&1)!==0?(jt&1073741824)!==0&&(at(n),n.subtreeFlags&6&&(n.flags|=8192)):at(n),null;case 24:return null;case 25:return null}throw Error(i(156,n.tag))}function r0(e,n){switch(hu(n),n.tag){case 1:return mt(n.type)&&Ji(),e=n.flags,e&65536?(n.flags=e&-65537|128,n):null;case 3:return Yr(),De(gt),De(lt),Cu(),e=n.flags,(e&65536)!==0&&(e&128)===0?(n.flags=e&-65537|128,n):null;case 5:return Eu(n),null;case 13:if(De(Ve),e=n.memoizedState,e!==null&&e.dehydrated!==null){if(n.alternate===null)throw Error(i(340));Br()}return e=n.flags,e&65536?(n.flags=e&-65537|128,n):null;case 19:return De(Ve),null;case 4:return Yr(),null;case 10:return xu(n.type._context),null;case 22:case 23:return oa(),null;case 24:return null;default:return null}}var xs=!1,ct=!1,o0=typeof WeakSet=="function"?WeakSet:Set,he=null;function Qr(e,n){var o=e.ref;if(o!==null)if(typeof o=="function")try{o(null)}catch(s){Ue(e,n,s)}else o.current=null}function Yu(e,n,o){try{o()}catch(s){Ue(e,n,s)}}var ad=!1;function i0(e,n){if(ou=Fi,e=Hc(),Kl(e)){if("selectionStart"in e)var o={start:e.selectionStart,end:e.selectionEnd};else e:{o=(o=e.ownerDocument)&&o.defaultView||window;var s=o.getSelection&&o.getSelection();if(s&&s.rangeCount!==0){o=s.anchorNode;var a=s.anchorOffset,d=s.focusNode;s=s.focusOffset;try{o.nodeType,d.nodeType}catch{o=null;break e}var x=0,T=-1,R=-1,q=0,ie=0,le=e,oe=null;t:for(;;){for(var de;le!==o||a!==0&&le.nodeType!==3||(T=x+a),le!==d||s!==0&&le.nodeType!==3||(R=x+s),le.nodeType===3&&(x+=le.nodeValue.length),(de=le.firstChild)!==null;)oe=le,le=de;for(;;){if(le===e)break t;if(oe===o&&++q===a&&(T=x),oe===d&&++ie===s&&(R=x),(de=le.nextSibling)!==null)break;le=oe,oe=le.parentNode}le=de}o=T===-1||R===-1?null:{start:T,end:R}}else o=null}o=o||{start:0,end:0}}else o=null;for(iu={focusedElem:e,selectionRange:o},Fi=!1,he=n;he!==null;)if(n=he,e=n.child,(n.subtreeFlags&1028)!==0&&e!==null)e.return=n,he=e;else for(;he!==null;){n=he;try{var ge=n.alternate;if((n.flags&1024)!==0)switch(n.tag){case 0:case 11:case 15:break;case 1:if(ge!==null){var ye=ge.memoizedProps,We=ge.memoizedState,W=n.stateNode,D=W.getSnapshotBeforeUpdate(n.elementType===n.type?ye:Ut(n.type,ye),We);W.__reactInternalSnapshotBeforeUpdate=D}break;case 3:var Y=n.stateNode.containerInfo;Y.nodeType===1?Y.textContent="":Y.nodeType===9&&Y.documentElement&&Y.removeChild(Y.documentElement);break;case 5:case 6:case 4:case 17:break;default:throw Error(i(163))}}catch(ue){Ue(n,n.return,ue)}if(e=n.sibling,e!==null){e.return=n.return,he=e;break}he=n.return}return ge=ad,ad=!1,ge}function Xo(e,n,o){var s=n.updateQueue;if(s=s!==null?s.lastEffect:null,s!==null){var a=s=s.next;do{if((a.tag&e)===e){var d=a.destroy;a.destroy=void 0,d!==void 0&&Yu(n,o,d)}a=a.next}while(a!==s)}}function ws(e,n){if(n=n.updateQueue,n=n!==null?n.lastEffect:null,n!==null){var o=n=n.next;do{if((o.tag&e)===e){var s=o.create;o.destroy=s()}o=o.next}while(o!==n)}}function Xu(e){var n=e.ref;if(n!==null){var o=e.stateNode;switch(e.tag){case 5:e=o;break;default:e=o}typeof n=="function"?n(e):n.current=e}}function cd(e){var n=e.alternate;n!==null&&(e.alternate=null,cd(n)),e.child=null,e.deletions=null,e.sibling=null,e.tag===5&&(n=e.stateNode,n!==null&&(delete n[nn],delete n[$o],delete n[au],delete n[Vm],delete n[Bm])),e.stateNode=null,e.return=null,e.dependencies=null,e.memoizedProps=null,e.memoizedState=null,e.pendingProps=null,e.stateNode=null,e.updateQueue=null}function fd(e){return e.tag===5||e.tag===3||e.tag===4}function dd(e){e:for(;;){for(;e.sibling===null;){if(e.return===null||fd(e.return))return null;e=e.return}for(e.sibling.return=e.return,e=e.sibling;e.tag!==5&&e.tag!==6&&e.tag!==18;){if(e.flags&2||e.child===null||e.tag===4)continue e;e.child.return=e,e=e.child}if(!(e.flags&2))return e.stateNode}}function Qu(e,n,o){var s=e.tag;if(s===5||s===6)e=e.stateNode,n?o.nodeType===8?o.parentNode.insertBefore(e,n):o.insertBefore(e,n):(o.nodeType===8?(n=o.parentNode,n.insertBefore(e,o)):(n=o,n.appendChild(e)),o=o._reactRootContainer,o!=null||n.onclick!==null||(n.onclick=qi));else if(s!==4&&(e=e.child,e!==null))for(Qu(e,n,o),e=e.sibling;e!==null;)Qu(e,n,o),e=e.sibling}function Gu(e,n,o){var s=e.tag;if(s===5||s===6)e=e.stateNode,n?o.insertBefore(e,n):o.appendChild(e);else if(s!==4&&(e=e.child,e!==null))for(Gu(e,n,o),e=e.sibling;e!==null;)Gu(e,n,o),e=e.sibling}var ot=null,Wt=!1;function Dn(e,n,o){for(o=o.child;o!==null;)hd(e,n,o),o=o.sibling}function hd(e,n,o){if(Ct&&typeof Ct.onCommitFiberUnmount=="function")try{Ct.onCommitFiberUnmount(Cr,o)}catch{}switch(o.tag){case 5:ct||Qr(o,n);case 6:var s=ot,a=Wt;ot=null,Dn(e,n,o),ot=s,Wt=a,ot!==null&&(Wt?(e=ot,o=o.stateNode,e.nodeType===8?e.parentNode.removeChild(o):e.removeChild(o)):ot.removeChild(o.stateNode));break;case 18:ot!==null&&(Wt?(e=ot,o=o.stateNode,e.nodeType===8?uu(e.parentNode,o):e.nodeType===1&&uu(e,o),No(e)):uu(ot,o.stateNode));break;case 4:s=ot,a=Wt,ot=o.stateNode.containerInfo,Wt=!0,Dn(e,n,o),ot=s,Wt=a;break;case 0:case 11:case 14:case 15:if(!ct&&(s=o.updateQueue,s!==null&&(s=s.lastEffect,s!==null))){a=s=s.next;do{var d=a,x=d.destroy;d=d.tag,x!==void 0&&((d&2)!==0||(d&4)!==0)&&Yu(o,n,x),a=a.next}while(a!==s)}Dn(e,n,o);break;case 1:if(!ct&&(Qr(o,n),s=o.stateNode,typeof s.componentWillUnmount=="function"))try{s.props=o.memoizedProps,s.state=o.memoizedState,s.componentWillUnmount()}catch(T){Ue(o,n,T)}Dn(e,n,o);break;case 21:Dn(e,n,o);break;case 22:o.mode&1?(ct=(s=ct)||o.memoizedState!==null,Dn(e,n,o),ct=s):Dn(e,n,o);break;default:Dn(e,n,o)}}function pd(e){var n=e.updateQueue;if(n!==null){e.updateQueue=null;var o=e.stateNode;o===null&&(o=e.stateNode=new o0),n.forEach(function(s){var a=p0.bind(null,e,s);o.has(s)||(o.add(s),s.then(a,a))})}}function Yt(e,n){var o=n.deletions;if(o!==null)for(var s=0;sa&&(a=x),s&=~d}if(s=a,s=He()-s,s=(120>s?120:480>s?480:1080>s?1080:1920>s?1920:3e3>s?3e3:4320>s?4320:1960*l0(s/1960))-s,10e?16:e,Fn===null)var s=!1;else{if(e=Fn,Fn=null,Ns=0,(Te&6)!==0)throw Error(i(331));var a=Te;for(Te|=4,he=e.current;he!==null;){var d=he,x=d.child;if((he.flags&16)!==0){var T=d.deletions;if(T!==null){for(var R=0;RHe()-Zu?fr(e,0):qu|=o),xt(e,n)}function Md(e,n){n===0&&((e.mode&1)===0?n=1:(n=Pr,Pr<<=1,(Pr&130023424)===0&&(Pr=4194304)));var o=pt();e=mn(e,n),e!==null&&(tr(e,n,o),xt(e,o))}function h0(e){var n=e.memoizedState,o=0;n!==null&&(o=n.retryLane),Md(e,o)}function p0(e,n){var o=0;switch(e.tag){case 13:var s=e.stateNode,a=e.memoizedState;a!==null&&(o=a.retryLane);break;case 19:s=e.stateNode;break;default:throw Error(i(314))}s!==null&&s.delete(n),Md(e,o)}var Pd;Pd=function(e,n,o){if(e!==null)if(e.memoizedProps!==n.pendingProps||gt.current)yt=!0;else{if((e.lanes&o)===0&&(n.flags&128)===0)return yt=!1,t0(e,n,o);yt=(e.flags&131072)!==0}else yt=!1,Fe&&(n.flags&1048576)!==0&&lf(n,rs,n.index);switch(n.lanes=0,n.tag){case 2:var s=n.type;vs(e,n),e=n.pendingProps;var a=Fr(n,lt.current);Wr(n,o),a=Iu(null,n,s,e,a,o);var d=Tu();return n.flags|=1,typeof a=="object"&&a!==null&&typeof a.render=="function"&&a.$$typeof===void 0?(n.tag=1,n.memoizedState=null,n.updateQueue=null,mt(s)?(d=!0,es(n)):d=!1,n.memoizedState=a.state!==null&&a.state!==void 0?a.state:null,_u(n),a.updater=ms,n.stateNode=a,a._reactInternals=n,$u(n,s,e,o),n=Hu(null,n,s,!0,d,o)):(n.tag=0,Fe&&d&&du(n),ht(null,n,a,o),n=n.child),n;case 16:s=n.elementType;e:{switch(vs(e,n),e=n.pendingProps,a=s._init,s=a(s._payload),n.type=s,a=n.tag=m0(s),e=Ut(s,e),a){case 0:n=Fu(null,n,s,e,o);break e;case 1:n=ed(null,n,s,e,o);break e;case 11:n=Gf(null,n,s,e,o);break e;case 14:n=Kf(null,n,s,Ut(s.type,e),o);break e}throw Error(i(306,s,""))}return n;case 0:return s=n.type,a=n.pendingProps,a=n.elementType===s?a:Ut(s,a),Fu(e,n,s,a,o);case 1:return s=n.type,a=n.pendingProps,a=n.elementType===s?a:Ut(s,a),ed(e,n,s,a,o);case 3:e:{if(td(n),e===null)throw Error(i(387));s=n.pendingProps,d=n.memoizedState,a=d.element,mf(e,n),as(n,s,null,o);var x=n.memoizedState;if(s=x.element,d.isDehydrated)if(d={element:s,isDehydrated:!1,cache:x.cache,pendingSuspenseBoundaries:x.pendingSuspenseBoundaries,transitions:x.transitions},n.updateQueue.baseState=d,n.memoizedState=d,n.flags&256){a=Xr(Error(i(423)),n),n=nd(e,n,s,o,a);break e}else if(s!==a){a=Xr(Error(i(424)),n),n=nd(e,n,s,o,a);break e}else for(Tt=jn(n.stateNode.containerInfo.firstChild),It=n,Fe=!0,bt=null,o=pf(n,null,s,o),n.child=o;o;)o.flags=o.flags&-3|4096,o=o.sibling;else{if(Br(),s===a){n=vn(e,n,o);break e}ht(e,n,s,o)}n=n.child}return n;case 5:return xf(n),e===null&&gu(n),s=n.type,a=n.pendingProps,d=e!==null?e.memoizedProps:null,x=a.children,su(s,a)?x=null:d!==null&&su(s,d)&&(n.flags|=32),Jf(e,n),ht(e,n,x,o),n.child;case 6:return e===null&&gu(n),null;case 13:return rd(e,n,o);case 4:return ku(n,n.stateNode.containerInfo),s=n.pendingProps,e===null?n.child=br(n,null,s,o):ht(e,n,s,o),n.child;case 11:return s=n.type,a=n.pendingProps,a=n.elementType===s?a:Ut(s,a),Gf(e,n,s,a,o);case 7:return ht(e,n,n.pendingProps,o),n.child;case 8:return ht(e,n,n.pendingProps.children,o),n.child;case 12:return ht(e,n,n.pendingProps.children,o),n.child;case 10:e:{if(s=n.type._context,a=n.pendingProps,d=n.memoizedProps,x=a.value,Ae(ss,s._currentValue),s._currentValue=x,d!==null)if(Bt(d.value,x)){if(d.children===a.children&&!gt.current){n=vn(e,n,o);break e}}else for(d=n.child,d!==null&&(d.return=n);d!==null;){var T=d.dependencies;if(T!==null){x=d.child;for(var R=T.firstContext;R!==null;){if(R.context===s){if(d.tag===1){R=yn(-1,o&-o),R.tag=2;var q=d.updateQueue;if(q!==null){q=q.shared;var ie=q.pending;ie===null?R.next=R:(R.next=ie.next,ie.next=R),q.pending=R}}d.lanes|=o,R=d.alternate,R!==null&&(R.lanes|=o),wu(d.return,o,n),T.lanes|=o;break}R=R.next}}else if(d.tag===10)x=d.type===n.type?null:d.child;else if(d.tag===18){if(x=d.return,x===null)throw Error(i(341));x.lanes|=o,T=x.alternate,T!==null&&(T.lanes|=o),wu(x,o,n),x=d.sibling}else x=d.child;if(x!==null)x.return=d;else for(x=d;x!==null;){if(x===n){x=null;break}if(d=x.sibling,d!==null){d.return=x.return,x=d;break}x=x.return}d=x}ht(e,n,a.children,o),n=n.child}return n;case 9:return a=n.type,s=n.pendingProps.children,Wr(n,o),a=Ot(a),s=s(a),n.flags|=1,ht(e,n,s,o),n.child;case 14:return s=n.type,a=Ut(s,n.pendingProps),a=Ut(s.type,a),Kf(e,n,s,a,o);case 15:return qf(e,n,n.type,n.pendingProps,o);case 17:return s=n.type,a=n.pendingProps,a=n.elementType===s?a:Ut(s,a),vs(e,n),n.tag=1,mt(s)?(e=!0,es(n)):e=!1,Wr(n,o),Bf(n,s,a),$u(n,s,a,o),Hu(null,n,s,!0,e,o);case 19:return id(e,n,o);case 22:return Zf(e,n,o)}throw Error(i(156,n.tag))};function Id(e,n){return Ti(e,n)}function g0(e,n,o,s){this.tag=e,this.key=o,this.sibling=this.child=this.return=this.stateNode=this.type=this.elementType=null,this.index=0,this.ref=null,this.pendingProps=n,this.dependencies=this.memoizedState=this.updateQueue=this.memoizedProps=null,this.mode=s,this.subtreeFlags=this.flags=0,this.deletions=null,this.childLanes=this.lanes=0,this.alternate=null}function Vt(e,n,o,s){return new g0(e,n,o,s)}function sa(e){return e=e.prototype,!(!e||!e.isReactComponent)}function m0(e){if(typeof e=="function")return sa(e)?1:0;if(e!=null){if(e=e.$$typeof,e===ee)return 11;if(e===U)return 14}return 2}function Bn(e,n){var o=e.alternate;return o===null?(o=Vt(e.tag,n,e.key,e.mode),o.elementType=e.elementType,o.type=e.type,o.stateNode=e.stateNode,o.alternate=e,e.alternate=o):(o.pendingProps=n,o.type=e.type,o.flags=0,o.subtreeFlags=0,o.deletions=null),o.flags=e.flags&14680064,o.childLanes=e.childLanes,o.lanes=e.lanes,o.child=e.child,o.memoizedProps=e.memoizedProps,o.memoizedState=e.memoizedState,o.updateQueue=e.updateQueue,n=e.dependencies,o.dependencies=n===null?null:{lanes:n.lanes,firstContext:n.firstContext},o.sibling=e.sibling,o.index=e.index,o.ref=e.ref,o}function Is(e,n,o,s,a,d){var x=2;if(s=e,typeof e=="function")sa(e)&&(x=1);else if(typeof e=="string")x=5;else e:switch(e){case B:return hr(o.children,a,d,n);case X:x=8,a|=8;break;case G:return e=Vt(12,o,n,a|2),e.elementType=G,e.lanes=d,e;case J:return e=Vt(13,o,n,a),e.elementType=J,e.lanes=d,e;case N:return e=Vt(19,o,n,a),e.elementType=N,e.lanes=d,e;case b:return Ts(o,a,d,n);default:if(typeof e=="object"&&e!==null)switch(e.$$typeof){case te:x=10;break e;case Z:x=9;break e;case ee:x=11;break e;case U:x=14;break e;case V:x=16,s=null;break e}throw Error(i(130,e==null?e:typeof e,""))}return n=Vt(x,o,n,a),n.elementType=e,n.type=s,n.lanes=d,n}function hr(e,n,o,s){return e=Vt(7,e,s,n),e.lanes=o,e}function Ts(e,n,o,s){return e=Vt(22,e,s,n),e.elementType=b,e.lanes=o,e.stateNode={isHidden:!1},e}function la(e,n,o){return e=Vt(6,e,null,n),e.lanes=o,e}function ua(e,n,o){return n=Vt(4,e.children!==null?e.children:[],e.key,n),n.lanes=o,n.stateNode={containerInfo:e.containerInfo,pendingChildren:null,implementation:e.implementation},n}function y0(e,n,o,s,a){this.tag=n,this.containerInfo=e,this.finishedWork=this.pingCache=this.current=this.pendingChildren=null,this.timeoutHandle=-1,this.callbackNode=this.pendingContext=this.context=null,this.callbackPriority=0,this.eventTimes=er(0),this.expirationTimes=er(-1),this.entangledLanes=this.finishedLanes=this.mutableReadLanes=this.expiredLanes=this.pingedLanes=this.suspendedLanes=this.pendingLanes=0,this.entanglements=er(0),this.identifierPrefix=s,this.onRecoverableError=a,this.mutableSourceEagerHydrationData=null}function aa(e,n,o,s,a,d,x,T,R){return e=new y0(e,n,o,T,R),n===1?(n=1,d===!0&&(n|=8)):n=0,d=Vt(3,null,null,n),e.current=d,d.stateNode=e,d.memoizedState={element:s,isDehydrated:o,cache:null,transitions:null,pendingSuspenseBoundaries:null},_u(d),e}function v0(e,n,o){var s=3"u"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!="function"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(t)}catch(r){console.error(r)}}return t(),ga.exports=T0(),ga.exports}var bd;function j0(){if(bd)return Ds;bd=1;var t=ep();return Ds.createRoot=t.createRoot,Ds.hydrateRoot=t.hydrateRoot,Ds}var z0=j0();async function zt(t,r){const i=await fetch(t,{...r,headers:{"Content-Type":"application/json",...(r==null?void 0:r.headers)||{}}});if(!i.ok){const l=await i.text();throw new Error(l||i.statusText)}return i.json()}const St={health:()=>zt("/api/health"),settings:()=>zt("/api/settings"),saveSettings:t=>zt("/api/settings",{method:"PUT",body:JSON.stringify(t)}),repos:()=>zt("/api/repos"),index:(t,r=!0)=>zt("/api/index",{method:"POST",body:JSON.stringify({repo_path:t,incremental:r})}),indexStatus:t=>zt(`/api/index?repo_path=${encodeURIComponent(t)}`),architecture:t=>zt(`/api/architecture?repo_path=${encodeURIComponent(t)}`),review:(t,r,i,l=!0)=>zt("/api/review",{method:"POST",body:JSON.stringify({repo_path:t,base:r,head:i||null,reindex:l,incremental:!0,three_dot:!0})}),init:(t,r=!1)=>zt("/api/init",{method:"POST",body:JSON.stringify({repo_path:t,overwrite:r})}),postComment:(t,r,i,l)=>zt("/api/prs/comment",{method:"POST",body:JSON.stringify({provider:t,repo:r,number:i,markdown:l})}),graph:(t,r="full")=>zt(`/api/graph?repo_path=${encodeURIComponent(t)}&scope=${r}`),prs:(t,r,i="open")=>zt("/api/prs",{method:"POST",body:JSON.stringify({provider:t,repo:r,state:i})}),residual:t=>zt("/api/ai/residual",{method:"POST",body:JSON.stringify({review:t})})};function Xe(t){if(typeof t=="string"||typeof t=="number")return""+t;let r="";if(Array.isArray(t))for(let i=0,l;i{}};function cl(){for(var t=0,r=arguments.length,i={},l;t=0&&(l=i.slice(u+1),i=i.slice(0,u)),i&&!r.hasOwnProperty(i))throw new Error("unknown type: "+i);return{type:i,name:l}})}Xs.prototype=cl.prototype={constructor:Xs,on:function(t,r){var i=this._,l=L0(t+"",i),u,c=-1,f=l.length;if(arguments.length<2){for(;++c0)for(var i=new Array(u),l=0,u,c;l=0&&(r=t.slice(0,i))!=="xmlns"&&(t=t.slice(i+1)),Wd.hasOwnProperty(r)?{space:Wd[r],local:t}:t}function $0(t){return function(){var r=this.ownerDocument,i=this.namespaceURI;return i===za&&r.documentElement.namespaceURI===za?r.createElement(t):r.createElementNS(i,t)}}function D0(t){return function(){return this.ownerDocument.createElementNS(t.space,t.local)}}function tp(t){var r=fl(t);return(r.local?D0:$0)(r)}function O0(){}function Xa(t){return t==null?O0:function(){return this.querySelector(t)}}function F0(t){typeof t!="function"&&(t=Xa(t));for(var r=this._groups,i=r.length,l=new Array(i),u=0;u=_&&(_=z+1);!(H=C[_])&&++_=0;)(f=l[u])&&(c&&f.compareDocumentPosition(c)^4&&c.parentNode.insertBefore(f,c),c=f);return this}function cy(t){t||(t=fy);function r(v,m){return v&&m?t(v.__data__,m.__data__):!v-!m}for(var i=this._groups,l=i.length,u=new Array(l),c=0;cr?1:t>=r?0:NaN}function dy(){var t=arguments[0];return arguments[0]=this,t.apply(null,arguments),this}function hy(){return Array.from(this)}function py(){for(var t=this._groups,r=0,i=t.length;r1?this.each((r==null?Ny:typeof r=="function"?My:Cy)(t,r,i??"")):no(this.node(),t)}function no(t,r){return t.style.getPropertyValue(r)||sp(t).getComputedStyle(t,null).getPropertyValue(r)}function Iy(t){return function(){delete this[t]}}function Ty(t,r){return function(){this[t]=r}}function jy(t,r){return function(){var i=r.apply(this,arguments);i==null?delete this[t]:this[t]=i}}function zy(t,r){return arguments.length>1?this.each((r==null?Iy:typeof r=="function"?jy:Ty)(t,r)):this.node()[t]}function lp(t){return t.trim().split(/^|\s+/)}function Qa(t){return t.classList||new up(t)}function up(t){this._node=t,this._names=lp(t.getAttribute("class")||"")}up.prototype={add:function(t){var r=this._names.indexOf(t);r<0&&(this._names.push(t),this._node.setAttribute("class",this._names.join(" ")))},remove:function(t){var r=this._names.indexOf(t);r>=0&&(this._names.splice(r,1),this._node.setAttribute("class",this._names.join(" ")))},contains:function(t){return this._names.indexOf(t)>=0}};function ap(t,r){for(var i=Qa(t),l=-1,u=r.length;++l=0&&(i=r.slice(l+1),r=r.slice(0,l)),{type:r,name:i}})}function sv(t){return function(){var r=this.__on;if(r){for(var i=0,l=-1,u=r.length,c;i()=>t;function Ra(t,{sourceEvent:r,subject:i,target:l,identifier:u,active:c,x:f,y:h,dx:p,dy:y,dispatch:g}){Object.defineProperties(this,{type:{value:t,enumerable:!0,configurable:!0},sourceEvent:{value:r,enumerable:!0,configurable:!0},subject:{value:i,enumerable:!0,configurable:!0},target:{value:l,enumerable:!0,configurable:!0},identifier:{value:u,enumerable:!0,configurable:!0},active:{value:c,enumerable:!0,configurable:!0},x:{value:f,enumerable:!0,configurable:!0},y:{value:h,enumerable:!0,configurable:!0},dx:{value:p,enumerable:!0,configurable:!0},dy:{value:y,enumerable:!0,configurable:!0},_:{value:g}})}Ra.prototype.on=function(){var t=this._.on.apply(this._,arguments);return t===this._?this:t};function mv(t){return!t.ctrlKey&&!t.button}function yv(){return this.parentNode}function vv(t,r){return r??{x:t.x,y:t.y}}function xv(){return navigator.maxTouchPoints||"ontouchstart"in this}function gp(){var t=mv,r=yv,i=vv,l=xv,u={},c=cl("start","drag","end"),f=0,h,p,y,g,v=0;function m(I){I.on("mousedown.drag",w).filter(l).on("touchstart.drag",C).on("touchmove.drag",k,gv).on("touchend.drag touchcancel.drag",z).style("touch-action","none").style("-webkit-tap-highlight-color","rgba(0,0,0,0)")}function w(I,H){if(!(g||!t.call(this,I,H))){var $=_(this,r.call(this,I,H),I,H,"mouse");$&&(Rt(I.view).on("mousemove.drag",S,ii).on("mouseup.drag",P,ii),hp(I.view),va(I),y=!1,h=I.clientX,p=I.clientY,$("start",I))}}function S(I){if(eo(I),!y){var H=I.clientX-h,$=I.clientY-p;y=H*H+$*$>v}u.mouse("drag",I)}function P(I){Rt(I.view).on("mousemove.drag mouseup.drag",null),pp(I.view,y),eo(I),u.mouse("end",I)}function C(I,H){if(t.call(this,I,H)){var $=I.changedTouches,B=r.call(this,I,H),X=$.length,G,te;for(G=0;G>8&15|r>>4&240,r>>4&15|r&240,(r&15)<<4|r&15,1):i===8?Fs(r>>24&255,r>>16&255,r>>8&255,(r&255)/255):i===4?Fs(r>>12&15|r>>8&240,r>>8&15|r>>4&240,r>>4&15|r&240,((r&15)<<4|r&15)/255):null):(r=Sv.exec(t))?new _t(r[1],r[2],r[3],1):(r=_v.exec(t))?new _t(r[1]*255/100,r[2]*255/100,r[3]*255/100,1):(r=kv.exec(t))?Fs(r[1],r[2],r[3],r[4]):(r=Ev.exec(t))?Fs(r[1]*255/100,r[2]*255/100,r[3]*255/100,r[4]):(r=Nv.exec(t))?Zd(r[1],r[2]/100,r[3]/100,1):(r=Cv.exec(t))?Zd(r[1],r[2]/100,r[3]/100,r[4]):Yd.hasOwnProperty(t)?Gd(Yd[t]):t==="transparent"?new _t(NaN,NaN,NaN,0):null}function Gd(t){return new _t(t>>16&255,t>>8&255,t&255,1)}function Fs(t,r,i,l){return l<=0&&(t=r=i=NaN),new _t(t,r,i,l)}function Iv(t){return t instanceof mi||(t=vr(t)),t?(t=t.rgb(),new _t(t.r,t.g,t.b,t.opacity)):new _t}function La(t,r,i,l){return arguments.length===1?Iv(t):new _t(t,r,i,l??1)}function _t(t,r,i,l){this.r=+t,this.g=+r,this.b=+i,this.opacity=+l}Ga(_t,La,mp(mi,{brighter(t){return t=t==null?Js:Math.pow(Js,t),new _t(this.r*t,this.g*t,this.b*t,this.opacity)},darker(t){return t=t==null?si:Math.pow(si,t),new _t(this.r*t,this.g*t,this.b*t,this.opacity)},rgb(){return this},clamp(){return new _t(mr(this.r),mr(this.g),mr(this.b),el(this.opacity))},displayable(){return-.5<=this.r&&this.r<255.5&&-.5<=this.g&&this.g<255.5&&-.5<=this.b&&this.b<255.5&&0<=this.opacity&&this.opacity<=1},hex:Kd,formatHex:Kd,formatHex8:Tv,formatRgb:qd,toString:qd}));function Kd(){return`#${gr(this.r)}${gr(this.g)}${gr(this.b)}`}function Tv(){return`#${gr(this.r)}${gr(this.g)}${gr(this.b)}${gr((isNaN(this.opacity)?1:this.opacity)*255)}`}function qd(){const t=el(this.opacity);return`${t===1?"rgb(":"rgba("}${mr(this.r)}, ${mr(this.g)}, ${mr(this.b)}${t===1?")":`, ${t})`}`}function el(t){return isNaN(t)?1:Math.max(0,Math.min(1,t))}function mr(t){return Math.max(0,Math.min(255,Math.round(t)||0))}function gr(t){return t=mr(t),(t<16?"0":"")+t.toString(16)}function Zd(t,r,i,l){return l<=0?t=r=i=NaN:i<=0||i>=1?t=r=NaN:r<=0&&(t=NaN),new Gt(t,r,i,l)}function yp(t){if(t instanceof Gt)return new Gt(t.h,t.s,t.l,t.opacity);if(t instanceof mi||(t=vr(t)),!t)return new Gt;if(t instanceof Gt)return t;t=t.rgb();var r=t.r/255,i=t.g/255,l=t.b/255,u=Math.min(r,i,l),c=Math.max(r,i,l),f=NaN,h=c-u,p=(c+u)/2;return h?(r===c?f=(i-l)/h+(i0&&p<1?0:f,new Gt(f,h,p,t.opacity)}function jv(t,r,i,l){return arguments.length===1?yp(t):new Gt(t,r,i,l??1)}function Gt(t,r,i,l){this.h=+t,this.s=+r,this.l=+i,this.opacity=+l}Ga(Gt,jv,mp(mi,{brighter(t){return t=t==null?Js:Math.pow(Js,t),new Gt(this.h,this.s,this.l*t,this.opacity)},darker(t){return t=t==null?si:Math.pow(si,t),new Gt(this.h,this.s,this.l*t,this.opacity)},rgb(){var t=this.h%360+(this.h<0)*360,r=isNaN(t)||isNaN(this.s)?0:this.s,i=this.l,l=i+(i<.5?i:1-i)*r,u=2*i-l;return new _t(xa(t>=240?t-240:t+120,u,l),xa(t,u,l),xa(t<120?t+240:t-120,u,l),this.opacity)},clamp(){return new Gt(Jd(this.h),Hs(this.s),Hs(this.l),el(this.opacity))},displayable(){return(0<=this.s&&this.s<=1||isNaN(this.s))&&0<=this.l&&this.l<=1&&0<=this.opacity&&this.opacity<=1},formatHsl(){const t=el(this.opacity);return`${t===1?"hsl(":"hsla("}${Jd(this.h)}, ${Hs(this.s)*100}%, ${Hs(this.l)*100}%${t===1?")":`, ${t})`}`}}));function Jd(t){return t=(t||0)%360,t<0?t+360:t}function Hs(t){return Math.max(0,Math.min(1,t||0))}function xa(t,r,i){return(t<60?r+(i-r)*t/60:t<180?i:t<240?r+(i-r)*(240-t)/60:r)*255}const Ka=t=>()=>t;function zv(t,r){return function(i){return t+i*r}}function Rv(t,r,i){return t=Math.pow(t,i),r=Math.pow(r,i)-t,i=1/i,function(l){return Math.pow(t+l*r,i)}}function Lv(t){return(t=+t)==1?vp:function(r,i){return i-r?Rv(r,i,t):Ka(isNaN(r)?i:r)}}function vp(t,r){var i=r-t;return i?zv(t,i):Ka(isNaN(t)?r:t)}const tl=(function t(r){var i=Lv(r);function l(u,c){var f=i((u=La(u)).r,(c=La(c)).r),h=i(u.g,c.g),p=i(u.b,c.b),y=vp(u.opacity,c.opacity);return function(g){return u.r=f(g),u.g=h(g),u.b=p(g),u.opacity=y(g),u+""}}return l.gamma=t,l})(1);function Av(t,r){r||(r=[]);var i=t?Math.min(r.length,t.length):0,l=r.slice(),u;return function(c){for(u=0;ui&&(c=r.slice(i,c),h[f]?h[f]+=c:h[++f]=c),(l=l[0])===(u=u[0])?h[f]?h[f]+=u:h[++f]=u:(h[++f]=null,p.push({i:f,x:ln(l,u)})),i=wa.lastIndex;return i180?g+=360:g-y>180&&(y+=360),m.push({i:v.push(u(v)+"rotate(",null,l)-2,x:ln(y,g)})):g&&v.push(u(v)+"rotate("+g+l)}function h(y,g,v,m){y!==g?m.push({i:v.push(u(v)+"skewX(",null,l)-2,x:ln(y,g)}):g&&v.push(u(v)+"skewX("+g+l)}function p(y,g,v,m,w,S){if(y!==v||g!==m){var P=w.push(u(w)+"scale(",null,",",null,")");S.push({i:P-4,x:ln(y,v)},{i:P-2,x:ln(g,m)})}else(v!==1||m!==1)&&w.push(u(w)+"scale("+v+","+m+")")}return function(y,g){var v=[],m=[];return y=t(y),g=t(g),c(y.translateX,y.translateY,g.translateX,g.translateY,v,m),f(y.rotate,g.rotate,v,m),h(y.skewX,g.skewX,v,m),p(y.scaleX,y.scaleY,g.scaleX,g.scaleY,v,m),y=g=null,function(w){for(var S=-1,P=m.length,C;++S=0&&t._call.call(void 0,r),t=t._next;--ro}function nh(){xr=(rl=ui.now())+dl,ro=ti=0;try{Kv()}finally{ro=0,Zv(),xr=0}}function qv(){var t=ui.now(),r=t-rl;r>_p&&(dl-=r,rl=t)}function Zv(){for(var t,r=nl,i,l=1/0;r;)r._call?(l>r._time&&(l=r._time),t=r,r=r._next):(i=r._next,r._next=null,r=t?t._next=i:nl=i);ni=t,Da(l)}function Da(t){if(!ro){ti&&(ti=clearTimeout(ti));var r=t-xr;r>24?(t<1/0&&(ti=setTimeout(nh,t-ui.now()-dl)),Jo&&(Jo=clearInterval(Jo))):(Jo||(rl=ui.now(),Jo=setInterval(qv,_p)),ro=1,kp(nh))}}function rh(t,r,i){var l=new ol;return r=r==null?0:+r,l.restart(u=>{l.stop(),t(u+r)},r,i),l}var Jv=cl("start","end","cancel","interrupt"),ex=[],Np=0,oh=1,Oa=2,Gs=3,ih=4,Fa=5,Ks=6;function hl(t,r,i,l,u,c){var f=t.__transition;if(!f)t.__transition={};else if(i in f)return;tx(t,i,{name:r,index:l,group:u,on:Jv,tween:ex,time:c.time,delay:c.delay,duration:c.duration,ease:c.ease,timer:null,state:Np})}function Za(t,r){var i=Jt(t,r);if(i.state>Np)throw new Error("too late; already scheduled");return i}function an(t,r){var i=Jt(t,r);if(i.state>Gs)throw new Error("too late; already running");return i}function Jt(t,r){var i=t.__transition;if(!i||!(i=i[r]))throw new Error("transition not found");return i}function tx(t,r,i){var l=t.__transition,u;l[r]=i,i.timer=Ep(c,0,i.time);function c(y){i.state=oh,i.timer.restart(f,i.delay,i.time),i.delay<=y&&f(y-i.delay)}function f(y){var g,v,m,w;if(i.state!==oh)return p();for(g in l)if(w=l[g],w.name===i.name){if(w.state===Gs)return rh(f);w.state===ih?(w.state=Ks,w.timer.stop(),w.on.call("interrupt",t,t.__data__,w.index,w.group),delete l[g]):+gOa&&l.state=0&&(r=r.slice(0,i)),!r||r==="start"})}function jx(t,r,i){var l,u,c=Tx(r)?Za:an;return function(){var f=c(this,t),h=f.on;h!==l&&(u=(l=h).copy()).on(r,i),f.on=u}}function zx(t,r){var i=this._id;return arguments.length<2?Jt(this.node(),i).on.on(t):this.each(jx(i,t,r))}function Rx(t){return function(){var r=this.parentNode;for(var i in this.__transition)if(+i!==t)return;r&&r.removeChild(this)}}function Lx(){return this.on("end.remove",Rx(this._id))}function Ax(t){var r=this._name,i=this._id;typeof t!="function"&&(t=Xa(t));for(var l=this._groups,u=l.length,c=new Array(u),f=0;f()=>t;function sw(t,{sourceEvent:r,target:i,transform:l,dispatch:u}){Object.defineProperties(this,{type:{value:t,enumerable:!0,configurable:!0},sourceEvent:{value:r,enumerable:!0,configurable:!0},target:{value:i,enumerable:!0,configurable:!0},transform:{value:l,enumerable:!0,configurable:!0},_:{value:u}})}function Sn(t,r,i){this.k=t,this.x=r,this.y=i}Sn.prototype={constructor:Sn,scale:function(t){return t===1?this:new Sn(this.k*t,this.x,this.y)},translate:function(t,r){return t===0&r===0?this:new Sn(this.k,this.x+this.k*t,this.y+this.k*r)},apply:function(t){return[t[0]*this.k+this.x,t[1]*this.k+this.y]},applyX:function(t){return t*this.k+this.x},applyY:function(t){return t*this.k+this.y},invert:function(t){return[(t[0]-this.x)/this.k,(t[1]-this.y)/this.k]},invertX:function(t){return(t-this.x)/this.k},invertY:function(t){return(t-this.y)/this.k},rescaleX:function(t){return t.copy().domain(t.range().map(this.invertX,this).map(t.invert,t))},rescaleY:function(t){return t.copy().domain(t.range().map(this.invertY,this).map(t.invert,t))},toString:function(){return"translate("+this.x+","+this.y+") scale("+this.k+")"}};var pl=new Sn(1,0,0);Ip.prototype=Sn.prototype;function Ip(t){for(;!t.__zoom;)if(!(t=t.parentNode))return pl;return t.__zoom}function Sa(t){t.stopImmediatePropagation()}function ei(t){t.preventDefault(),t.stopImmediatePropagation()}function lw(t){return(!t.ctrlKey||t.type==="wheel")&&!t.button}function uw(){var t=this;return t instanceof SVGElement?(t=t.ownerSVGElement||t,t.hasAttribute("viewBox")?(t=t.viewBox.baseVal,[[t.x,t.y],[t.x+t.width,t.y+t.height]]):[[0,0],[t.width.baseVal.value,t.height.baseVal.value]]):[[0,0],[t.clientWidth,t.clientHeight]]}function sh(){return this.__zoom||pl}function aw(t){return-t.deltaY*(t.deltaMode===1?.05:t.deltaMode?1:.002)*(t.ctrlKey?10:1)}function cw(){return navigator.maxTouchPoints||"ontouchstart"in this}function fw(t,r,i){var l=t.invertX(r[0][0])-i[0][0],u=t.invertX(r[1][0])-i[1][0],c=t.invertY(r[0][1])-i[0][1],f=t.invertY(r[1][1])-i[1][1];return t.translate(u>l?(l+u)/2:Math.min(0,l)||Math.max(0,u),f>c?(c+f)/2:Math.min(0,c)||Math.max(0,f))}function Tp(){var t=lw,r=uw,i=fw,l=aw,u=cw,c=[0,1/0],f=[[-1/0,-1/0],[1/0,1/0]],h=250,p=Qs,y=cl("start","zoom","end"),g,v,m,w=500,S=150,P=0,C=10;function k(N){N.property("__zoom",sh).on("wheel.zoom",X,{passive:!1}).on("mousedown.zoom",G).on("dblclick.zoom",te).filter(u).on("touchstart.zoom",Z).on("touchmove.zoom",ee).on("touchend.zoom touchcancel.zoom",J).style("-webkit-tap-highlight-color","rgba(0,0,0,0)")}k.transform=function(N,U,V,b){var A=N.selection?N.selection():N;A.property("__zoom",sh),N!==A?H(N,U,V,b):A.interrupt().each(function(){$(this,arguments).event(b).start().zoom(null,typeof U=="function"?U.apply(this,arguments):U).end()})},k.scaleBy=function(N,U,V,b){k.scaleTo(N,function(){var A=this.__zoom.k,L=typeof U=="function"?U.apply(this,arguments):U;return A*L},V,b)},k.scaleTo=function(N,U,V,b){k.transform(N,function(){var A=r.apply(this,arguments),L=this.__zoom,O=V==null?I(A):typeof V=="function"?V.apply(this,arguments):V,M=L.invert(O),j=typeof U=="function"?U.apply(this,arguments):U;return i(_(z(L,j),O,M),A,f)},V,b)},k.translateBy=function(N,U,V,b){k.transform(N,function(){return i(this.__zoom.translate(typeof U=="function"?U.apply(this,arguments):U,typeof V=="function"?V.apply(this,arguments):V),r.apply(this,arguments),f)},null,b)},k.translateTo=function(N,U,V,b,A){k.transform(N,function(){var L=r.apply(this,arguments),O=this.__zoom,M=b==null?I(L):typeof b=="function"?b.apply(this,arguments):b;return i(pl.translate(M[0],M[1]).scale(O.k).translate(typeof U=="function"?-U.apply(this,arguments):-U,typeof V=="function"?-V.apply(this,arguments):-V),L,f)},b,A)};function z(N,U){return U=Math.max(c[0],Math.min(c[1],U)),U===N.k?N:new Sn(U,N.x,N.y)}function _(N,U,V){var b=U[0]-V[0]*N.k,A=U[1]-V[1]*N.k;return b===N.x&&A===N.y?N:new Sn(N.k,b,A)}function I(N){return[(+N[0][0]+ +N[1][0])/2,(+N[0][1]+ +N[1][1])/2]}function H(N,U,V,b){N.on("start.zoom",function(){$(this,arguments).event(b).start()}).on("interrupt.zoom end.zoom",function(){$(this,arguments).event(b).end()}).tween("zoom",function(){var A=this,L=arguments,O=$(A,L).event(b),M=r.apply(A,L),j=V==null?I(M):typeof V=="function"?V.apply(A,L):V,ne=Math.max(M[1][0]-M[0][0],M[1][1]-M[0][1]),re=A.__zoom,ae=typeof U=="function"?U.apply(A,L):U,fe=p(re.invert(j).concat(ne/re.k),ae.invert(j).concat(ne/ae.k));return function(ce){if(ce===1)ce=ae;else{var K=fe(ce),se=ne/K[2];ce=new Sn(se,j[0]-K[0]*se,j[1]-K[1]*se)}O.zoom(null,ce)}})}function $(N,U,V){return!V&&N.__zooming||new B(N,U)}function B(N,U){this.that=N,this.args=U,this.active=0,this.sourceEvent=null,this.extent=r.apply(N,U),this.taps=0}B.prototype={event:function(N){return N&&(this.sourceEvent=N),this},start:function(){return++this.active===1&&(this.that.__zooming=this,this.emit("start")),this},zoom:function(N,U){return this.mouse&&N!=="mouse"&&(this.mouse[1]=U.invert(this.mouse[0])),this.touch0&&N!=="touch"&&(this.touch0[1]=U.invert(this.touch0[0])),this.touch1&&N!=="touch"&&(this.touch1[1]=U.invert(this.touch1[0])),this.that.__zoom=U,this.emit("zoom"),this},end:function(){return--this.active===0&&(delete this.that.__zooming,this.emit("end")),this},emit:function(N){var U=Rt(this.that).datum();y.call(N,this.that,new sw(N,{sourceEvent:this.sourceEvent,target:k,transform:this.that.__zoom,dispatch:y}),U)}};function X(N,...U){if(!t.apply(this,arguments))return;var V=$(this,U).event(N),b=this.__zoom,A=Math.max(c[0],Math.min(c[1],b.k*Math.pow(2,l.apply(this,arguments)))),L=Qt(N);if(V.wheel)(V.mouse[0][0]!==L[0]||V.mouse[0][1]!==L[1])&&(V.mouse[1]=b.invert(V.mouse[0]=L)),clearTimeout(V.wheel);else{if(b.k===A)return;V.mouse=[L,b.invert(L)],qs(this),V.start()}ei(N),V.wheel=setTimeout(O,S),V.zoom("mouse",i(_(z(b,A),V.mouse[0],V.mouse[1]),V.extent,f));function O(){V.wheel=null,V.end()}}function G(N,...U){if(m||!t.apply(this,arguments))return;var V=N.currentTarget,b=$(this,U,!0).event(N),A=Rt(N.view).on("mousemove.zoom",j,!0).on("mouseup.zoom",ne,!0),L=Qt(N,V),O=N.clientX,M=N.clientY;hp(N.view),Sa(N),b.mouse=[L,this.__zoom.invert(L)],qs(this),b.start();function j(re){if(ei(re),!b.moved){var ae=re.clientX-O,fe=re.clientY-M;b.moved=ae*ae+fe*fe>P}b.event(re).zoom("mouse",i(_(b.that.__zoom,b.mouse[0]=Qt(re,V),b.mouse[1]),b.extent,f))}function ne(re){A.on("mousemove.zoom mouseup.zoom",null),pp(re.view,b.moved),ei(re),b.event(re).end()}}function te(N,...U){if(t.apply(this,arguments)){var V=this.__zoom,b=Qt(N.changedTouches?N.changedTouches[0]:N,this),A=V.invert(b),L=V.k*(N.shiftKey?.5:2),O=i(_(z(V,L),b,A),r.apply(this,U),f);ei(N),h>0?Rt(this).transition().duration(h).call(H,O,b,N):Rt(this).call(k.transform,O,b,N)}}function Z(N,...U){if(t.apply(this,arguments)){var V=N.touches,b=V.length,A=$(this,U,N.changedTouches.length===b).event(N),L,O,M,j;for(Sa(N),O=0;O`Seems like you have not used ${t==="svelte"?"SvelteFlowProvider":"ReactFlowProvider"} as an ancestor. Help: https://${t}flow.dev/error#001`,error002:()=>"It looks like you've created a new nodeTypes or edgeTypes object. If this wasn't on purpose please define the nodeTypes/edgeTypes outside of the component or memoize them.",error003:t=>`Node type "${t}" not found. Using fallback type "default".`,error004:()=>"The parent container needs a width and a height to render the graph.",error005:()=>"Only child nodes can use a parent extent.",error006:()=>"Can't create edge. An edge needs a source and a target.",error007:t=>`The old edge with id=${t} does not exist.`,error009:t=>`Marker type "${t}" doesn't exist.`,error008:(t,{id:r,sourceHandle:i,targetHandle:l})=>`Couldn't create edge for ${t} handle id: "${t==="source"?i:l}", edge id: ${r}.`,error010:()=>"Handle: No node id found. Make sure to only use a Handle inside a custom Node.",error011:t=>`Edge type "${t}" not found. Using fallback type "default".`,error012:t=>`Node with id "${t}" does not exist, it may have been removed. This can happen when a node is deleted before the "onNodeClick" handler is called.`,error013:(t="react")=>`It seems that you haven't loaded the styles. Please import '@xyflow/${t}/dist/style.css' or base.css to make sure everything is working properly.`,error014:()=>"useNodeConnections: No node ID found. Call useNodeConnections inside a custom Node or provide a node ID.",error015:()=>"It seems that you are trying to drag a node that is not initialized. Please use onNodesChange as explained in the docs.",error016:t=>`Edge with id "${t}" does not exist, it may have been removed. This can happen when an edge is deleted before the "onEdgeClick" handler is called.`},ai=[[Number.NEGATIVE_INFINITY,Number.NEGATIVE_INFINITY],[Number.POSITIVE_INFINITY,Number.POSITIVE_INFINITY]],jp=["Enter"," ","Escape"],zp={"node.a11yDescription.default":"Press enter or space to select a node. Press delete to remove it and escape to cancel.","node.a11yDescription.keyboardDisabled":"Press enter or space to select a node. You can then use the arrow keys to move the node around. Press delete to remove it and escape to cancel.","node.a11yDescription.ariaLiveMessage":({direction:t,x:r,y:i})=>`Moved selected node ${t}. New position, x: ${r}, y: ${i}`,"edge.a11yDescription.default":"Press enter or space to select an edge. You can then press delete to remove it or escape to cancel.","controls.ariaLabel":"Control Panel","controls.zoomIn.ariaLabel":"Zoom In","controls.zoomOut.ariaLabel":"Zoom Out","controls.fitView.ariaLabel":"Fit View","controls.interactive.ariaLabel":"Toggle Interactivity","minimap.ariaLabel":"Mini Map","handle.ariaLabel":"Handle"};var oo;(function(t){t.Strict="strict",t.Loose="loose"})(oo||(oo={}));var yr;(function(t){t.Free="free",t.Vertical="vertical",t.Horizontal="horizontal"})(yr||(yr={}));var ci;(function(t){t.Partial="partial",t.Full="full"})(ci||(ci={}));const Rp={inProgress:!1,isValid:null,from:null,fromHandle:null,fromPosition:null,fromNode:null,to:null,toHandle:null,toPosition:null,toNode:null,pointer:null};var Xn;(function(t){t.Bezier="default",t.Straight="straight",t.Step="step",t.SmoothStep="smoothstep",t.SimpleBezier="simplebezier"})(Xn||(Xn={}));var il;(function(t){t.Arrow="arrow",t.ArrowClosed="arrowclosed"})(il||(il={}));var Se;(function(t){t.Left="left",t.Top="top",t.Right="right",t.Bottom="bottom"})(Se||(Se={}));const lh={[Se.Left]:Se.Right,[Se.Right]:Se.Left,[Se.Top]:Se.Bottom,[Se.Bottom]:Se.Top};function Lp(t){return t===null?null:t?"valid":"invalid"}const Ap=t=>!!t&&typeof t=="object"&&"id"in t&&"source"in t&&"target"in t,dw=t=>!!t&&typeof t=="object"&&"id"in t&&"position"in t&&!("source"in t)&&!("target"in t),ec=t=>!!t&&typeof t=="object"&&"id"in t&&"internals"in t&&!("source"in t)&&!("target"in t),yi=(t,r=[0,0])=>{const{width:i,height:l}=en(t),u=t.origin??r,c=i*u[0],f=l*u[1];return{x:t.position.x-c,y:t.position.y-f}},hw=(t,r={nodeOrigin:[0,0]})=>{if(t.length===0)return{x:0,y:0,width:0,height:0};let i=!1;const l=t.reduce((u,c)=>{const f=typeof c=="string";let h=!r.nodeLookup&&!f?c:void 0;return r.nodeLookup&&(h=f?r.nodeLookup.get(c):ec(c)?c:r.nodeLookup.get(c.id)),h?(i=!0,gl(u,sl(h,r.nodeOrigin))):u},{x:1/0,y:1/0,x2:-1/0,y2:-1/0});return i?ml(l):{x:0,y:0,width:0,height:0}},vi=(t,r={})=>{let i={x:1/0,y:1/0,x2:-1/0,y2:-1/0},l=!1;return t.forEach(u=>{(r.filter===void 0||r.filter(u))&&(i=gl(i,sl(u)),l=!0)}),l?ml(i):{x:0,y:0,width:0,height:0}},tc=(t,r,[i,l,u]=[0,0,1],c=!1,f=!1)=>{const h=(r.x-i)/u,p=(r.y-l)/u,y=r.width/u,g=r.height/u,v=[];for(const m of t.values()){const{measured:w,selectable:S=!0,hidden:P=!1}=m;if(f&&!S||P)continue;const C=w.width??m.width??m.initialWidth??0,k=w.height??m.height??m.initialHeight??0,{x:z,y:_}=m.internals.positionAbsolute,I=Fp(h,p,y,g,z,_,C,k),H=C*k,$=c&&I>0;(!m.internals.handleBounds||$||I>=H||m.dragging)&&v.push(m)}return v},pw=(t,r)=>{const i=new Set;return t.forEach(l=>{i.add(l.id)}),r.filter(l=>i.has(l.source)||i.has(l.target))};function gw(t,r){const i=new Map,l=r!=null&&r.nodes?new Set(r.nodes.map(u=>u.id)):null;return t.forEach(u=>{let c;if(r!=null&&r.includeHiddenNodes){const{width:f,height:h}=en(u);c=f>0&&h>0}else c=!!(u.measured.width&&u.measured.height&&!u.hidden);c&&(!l||l.has(u.id))&&i.set(u.id,u)}),i}async function mw({nodes:t,width:r,height:i,panZoom:l,minZoom:u,maxZoom:c},f){if(t.size===0)return!0;const h=gw(t,f),p=vi(h),y=rc(p,r,i,(f==null?void 0:f.minZoom)??u,(f==null?void 0:f.maxZoom)??c,(f==null?void 0:f.padding)??.1);return await l.setViewport(y,{duration:f==null?void 0:f.duration,ease:f==null?void 0:f.ease,interpolate:f==null?void 0:f.interpolate}),!0}function $p({nodeId:t,nextPosition:r,nodeLookup:i,nodeOrigin:l=[0,0],nodeExtent:u,onError:c}){const f=i.get(t),h=f.parentId?i.get(f.parentId):void 0,{x:p,y}=h?h.internals.positionAbsolute:{x:0,y:0},g=f.origin??l;let v=f.extent||u;if(f.extent==="parent"&&!f.expandParent)if(!h)c==null||c("005",Zt.error005());else{const{width:w,height:S}=en(h);w&&S&&(v=[[p,y],[p+w,y+S]])}else h&&Sr(f.extent)&&(v=[[f.extent[0][0]+p,f.extent[0][1]+y],[f.extent[1][0]+p,f.extent[1][1]+y]]);const m=Sr(v)?wr(r,v,f.measured):r;return(f.measured.width===void 0||f.measured.height===void 0)&&(c==null||c("015",Zt.error015())),{position:{x:m.x-p+(f.measured.width??0)*g[0],y:m.y-y+(f.measured.height??0)*g[1]},positionAbsolute:m}}async function yw({nodesToRemove:t=[],edgesToRemove:r=[],nodes:i,edges:l,onBeforeDelete:u}){const c=new Set(t.map(m=>m.id)),f=[];for(const m of i){if(m.deletable===!1)continue;const w=c.has(m.id),S=!w&&m.parentId&&f.find(P=>P.id===m.parentId);(w||S)&&f.push(m)}const h=new Set(r.map(m=>m.id)),p=l.filter(m=>m.deletable!==!1),g=pw(f,p);for(const m of p)h.has(m.id)&&!g.find(S=>S.id===m.id)&&g.push(m);if(!u)return{edges:g,nodes:f};const v=await u({nodes:f,edges:g});return typeof v=="boolean"?v?{edges:g,nodes:f}:{edges:[],nodes:[]}:v}const io=(t,r=0,i=1)=>Math.min(Math.max(t,r),i),wr=(t={x:0,y:0},r,i)=>({x:io(t.x,r[0][0],r[1][0]-((i==null?void 0:i.width)??0)),y:io(t.y,r[0][1],r[1][1]-((i==null?void 0:i.height)??0))});function Dp(t,r,i){const{width:l,height:u}=en(i),{x:c,y:f}=i.internals.positionAbsolute;return wr(t,[[c,f],[c+l,f+u]],r)}const uh=(t,r,i)=>ti?-io(Math.abs(t-i),1,r)/r:0,nc=(t,r,i=15,l=40)=>{const u=uh(t.x,l,r.width-l)*i,c=uh(t.y,l,r.height-l)*i;return[u,c]},gl=(t,r)=>({x:Math.min(t.x,r.x),y:Math.min(t.y,r.y),x2:Math.max(t.x2,r.x2),y2:Math.max(t.y2,r.y2)}),Ha=({x:t,y:r,width:i,height:l})=>({x:t,y:r,x2:t+i,y2:r+l}),ml=({x:t,y:r,x2:i,y2:l})=>({x:t,y:r,width:i-t,height:l-r}),fi=(t,r=[0,0])=>{var u,c;const{x:i,y:l}=ec(t)?t.internals.positionAbsolute:yi(t,r);return{x:i,y:l,width:((u=t.measured)==null?void 0:u.width)??t.width??t.initialWidth??0,height:((c=t.measured)==null?void 0:c.height)??t.height??t.initialHeight??0}},sl=(t,r=[0,0])=>{var u,c;const{x:i,y:l}=ec(t)?t.internals.positionAbsolute:yi(t,r);return{x:i,y:l,x2:i+(((u=t.measured)==null?void 0:u.width)??t.width??t.initialWidth??0),y2:l+(((c=t.measured)==null?void 0:c.height)??t.height??t.initialHeight??0)}},Op=(t,r)=>ml(gl(Ha(t),Ha(r))),Fp=(t,r,i,l,u,c,f,h)=>{const p=Math.max(0,Math.min(t+i,u+f)-Math.max(t,u)),y=Math.max(0,Math.min(r+l,c+h)-Math.max(r,c));return Math.ceil(p*y)},ll=(t,r)=>Fp(t.x,t.y,t.width,t.height,r.x,r.y,r.width,r.height),ah=t=>Kt(t.width)&&Kt(t.height)&&Kt(t.x)&&Kt(t.y),Kt=t=>!isNaN(t)&&isFinite(t),Hp=(t,r)=>(i,l)=>{},xi=(t,r=[1,1])=>({x:r[0]*Math.round(t.x/r[0]),y:r[1]*Math.round(t.y/r[1])}),wi=({x:t,y:r},[i,l,u],c=!1,f=[1,1])=>{const h={x:(t-i)/u,y:(r-l)/u};return c?xi(h,f):h},so=({x:t,y:r},[i,l,u])=>({x:t*u+i,y:r*u+l});function Zr(t,r){if(typeof t=="number")return Math.floor((r-r/(1+t))*.5);if(typeof t=="string"&&t.endsWith("px")){const i=parseFloat(t);if(!Number.isNaN(i))return Math.floor(i)}if(typeof t=="string"&&t.endsWith("%")){const i=parseFloat(t);if(!Number.isNaN(i))return Math.floor(r*i*.01)}return console.error(`The padding value "${t}" is invalid. Please provide a number or a string with a valid unit (px or %).`),0}function vw(t,r,i){if(typeof t=="string"||typeof t=="number"){const l=Zr(t,i),u=Zr(t,r);return{top:l,right:u,bottom:l,left:u,x:u*2,y:l*2}}if(typeof t=="object"){const l=Zr(t.top??t.y??0,i),u=Zr(t.bottom??t.y??0,i),c=Zr(t.left??t.x??0,r),f=Zr(t.right??t.x??0,r);return{top:l,right:f,bottom:u,left:c,x:c+f,y:l+u}}return{top:0,right:0,bottom:0,left:0,x:0,y:0}}function xw(t,r,i,l,u,c){const{x:f,y:h}=so(t,[r,i,l]),{x:p,y}=so({x:t.x+t.width,y:t.y+t.height},[r,i,l]),g=u-p,v=c-y;return{left:Math.floor(f),top:Math.floor(h),right:Math.floor(g),bottom:Math.floor(v)}}const rc=(t,r,i,l,u,c)=>{const f=vw(c,r,i),h=(r-f.x)/t.width,p=(i-f.y)/t.height,y=Math.min(h,p),g=io(y,l,u),v=t.x+t.width/2,m=t.y+t.height/2,w=r/2-v*g,S=i/2-m*g,P=xw(t,w,S,g,r,i),C={left:Math.min(P.left-f.left,0),top:Math.min(P.top-f.top,0),right:Math.min(P.right-f.right,0),bottom:Math.min(P.bottom-f.bottom,0)};return{x:w-C.left+C.right,y:S-C.top+C.bottom,zoom:g}},di=()=>{var t;return typeof navigator<"u"&&((t=navigator==null?void 0:navigator.userAgent)==null?void 0:t.indexOf("Mac"))>=0};function Sr(t){return t!=null&&t!=="parent"}function en(t){var r,i;return{width:((r=t.measured)==null?void 0:r.width)??t.width??t.initialWidth??0,height:((i=t.measured)==null?void 0:i.height)??t.height??t.initialHeight??0}}function Vp(t){var r,i;return(((r=t.measured)==null?void 0:r.width)??t.width??t.initialWidth)!==void 0&&(((i=t.measured)==null?void 0:i.height)??t.height??t.initialHeight)!==void 0}function Bp(t,r={width:0,height:0},i,l,u){const c={...t},f=l.get(i);if(f){const h=f.origin||u;c.x+=f.internals.positionAbsolute.x-(r.width??0)*h[0],c.y+=f.internals.positionAbsolute.y-(r.height??0)*h[1]}return c}function ch(t,r){if(t.size!==r.size)return!1;for(const i of t)if(!r.has(i))return!1;return!0}function ww(){let t,r;return{promise:new Promise((l,u)=>{t=l,r=u}),resolve:t,reject:r}}function Sw(t){return{...zp,...t||{}}}function oi(t,{snapGrid:r=[0,0],snapToGrid:i=!1,transform:l,containerBounds:u}){const{x:c,y:f}=qt(t),h=wi({x:c-((u==null?void 0:u.left)??0),y:f-((u==null?void 0:u.top)??0)},l),{x:p,y}=i?xi(h,r):h;return{xSnapped:p,ySnapped:y,...h}}const oc=t=>({width:t.offsetWidth,height:t.offsetHeight}),bp=t=>{var r;return((r=t==null?void 0:t.getRootNode)==null?void 0:r.call(t))||(window==null?void 0:window.document)},_w=["INPUT","SELECT","TEXTAREA"];function Up(t){var l,u;const r=((u=(l=t.composedPath)==null?void 0:l.call(t))==null?void 0:u[0])||t.target;return(r==null?void 0:r.nodeType)!==1?!1:_w.includes(r.nodeName)||r.hasAttribute("contenteditable")||!!r.closest(".nokey")}const Wp=t=>"clientX"in t,qt=(t,r)=>{var c,f;const i=Wp(t),l=i?t.clientX:(c=t.touches)==null?void 0:c[0].clientX,u=i?t.clientY:(f=t.touches)==null?void 0:f[0].clientY;return{x:l-((r==null?void 0:r.left)??0),y:u-((r==null?void 0:r.top)??0)}},fh=(t,r,i,l,u)=>{const c=r.querySelectorAll(`.${t}`);return!c||!c.length?null:Array.from(c).map(f=>{const h=f.getBoundingClientRect();return{id:f.getAttribute("data-handleid"),type:t,nodeId:u,position:f.getAttribute("data-handlepos"),x:(h.left-i.left)/l,y:(h.top-i.top)/l,...oc(f)}})};function Yp({sourceX:t,sourceY:r,targetX:i,targetY:l,sourceControlX:u,sourceControlY:c,targetControlX:f,targetControlY:h}){const p=t*.125+u*.375+f*.375+i*.125,y=r*.125+c*.375+h*.375+l*.125,g=Math.abs(p-t),v=Math.abs(y-r);return[p,y,g,v]}function bs(t,r){return t>=0?.5*t:r*25*Math.sqrt(-t)}function dh({pos:t,x1:r,y1:i,x2:l,y2:u,c}){switch(t){case Se.Left:return[r-bs(r-l,c),i];case Se.Right:return[r+bs(l-r,c),i];case Se.Top:return[r,i-bs(i-u,c)];case Se.Bottom:return[r,i+bs(u-i,c)]}}function Xp({sourceX:t,sourceY:r,sourcePosition:i=Se.Bottom,targetX:l,targetY:u,targetPosition:c=Se.Top,curvature:f=.25}){const[h,p]=dh({pos:i,x1:t,y1:r,x2:l,y2:u,c:f}),[y,g]=dh({pos:c,x1:l,y1:u,x2:t,y2:r,c:f}),[v,m,w,S]=Yp({sourceX:t,sourceY:r,targetX:l,targetY:u,sourceControlX:h,sourceControlY:p,targetControlX:y,targetControlY:g});return[`M${t},${r} C${h},${p} ${y},${g} ${l},${u}`,v,m,w,S]}function Qp({sourceX:t,sourceY:r,targetX:i,targetY:l}){const u=Math.abs(i-t)/2,c=i0}const Nw=({source:t,sourceHandle:r,target:i,targetHandle:l})=>`xy-edge__${t}${r||""}-${i}${l||""}`,Cw=(t,r)=>r.some(i=>i.source===t.source&&i.target===t.target&&(i.sourceHandle===t.sourceHandle||!i.sourceHandle&&!t.sourceHandle)&&(i.targetHandle===t.targetHandle||!i.targetHandle&&!t.targetHandle)),Mw=(t,r,i={})=>{var c;if(!t.source||!t.target)return(c=i.onError)==null||c.call(i,"006",Zt.error006()),r;const l=i.getEdgeId||Nw;let u;return Ap(t)?u={...t}:u={...t,id:l(t)},Cw(u,r)?r:(u.sourceHandle===null&&delete u.sourceHandle,u.targetHandle===null&&delete u.targetHandle,r.concat(u))};function Gp({sourceX:t,sourceY:r,targetX:i,targetY:l}){const[u,c,f,h]=Qp({sourceX:t,sourceY:r,targetX:i,targetY:l});return[`M ${t},${r}L ${i},${l}`,u,c,f,h]}const hh={[Se.Left]:{x:-1,y:0},[Se.Right]:{x:1,y:0},[Se.Top]:{x:0,y:-1},[Se.Bottom]:{x:0,y:1}},Pw=({source:t,sourcePosition:r=Se.Bottom,target:i})=>r===Se.Left||r===Se.Right?t.xMath.sqrt(Math.pow(r.x-t.x,2)+Math.pow(r.y-t.y,2));function Iw({source:t,sourcePosition:r=Se.Bottom,target:i,targetPosition:l=Se.Top,center:u,offset:c,stepPosition:f}){const h=hh[r],p=hh[l],y={x:t.x+h.x*c,y:t.y+h.y*c},g={x:i.x+p.x*c,y:i.y+p.y*c},v=Pw({source:y,sourcePosition:r,target:g}),m=v.x!==0?"x":"y",w=v[m];let S=[],P,C;const k={x:0,y:0},z={x:0,y:0},[,,_,I]=Qp({sourceX:t.x,sourceY:t.y,targetX:i.x,targetY:i.y});if(h[m]*p[m]===-1){m==="x"?(P=u.x??y.x+(g.x-y.x)*f,C=u.y??(y.y+g.y)/2):(P=u.x??(y.x+g.x)/2,C=u.y??y.y+(g.y-y.y)*f);const X=[{x:P,y:y.y},{x:P,y:g.y}],G=[{x:y.x,y:C},{x:g.x,y:C}];h[m]===w?S=m==="x"?X:G:S=m==="x"?G:X}else{const X=[{x:y.x,y:g.y}],G=[{x:g.x,y:y.y}];if(m==="x"?S=h.x===w?G:X:S=h.y===w?X:G,r===l){const N=Math.abs(t[m]-i[m]);if(N<=c){const U=Math.min(c-1,c-N);h[m]===w?k[m]=(y[m]>t[m]?-1:1)*U:z[m]=(g[m]>i[m]?-1:1)*U}}if(r!==l){const N=m==="x"?"y":"x",U=h[m]===p[N],V=y[N]>g[N],b=y[N]=J?(P=(te.x+Z.x)/2,C=S[0].y):(P=S[0].x,C=(te.y+Z.y)/2)}const H={x:y.x+k.x,y:y.y+k.y},$={x:g.x+z.x,y:g.y+z.y};return[[t,...H.x!==S[0].x||H.y!==S[0].y?[H]:[],...S,...$.x!==S[S.length-1].x||$.y!==S[S.length-1].y?[$]:[],i],P,C,_,I]}function Tw(t,r,i,l){const u=Math.min(ph(t,r)/2,ph(r,i)/2,l),{x:c,y:f}=r;if(t.x===c&&c===i.x||t.y===f&&f===i.y)return`L${c} ${f}`;if(t.y===f){const y=t.xi.id===r):t[0])||null}function Ba(t,r){return t?typeof t=="string"?t:`${r?`${r}__`:""}${Object.keys(t).sort().map(l=>`${l}=${t[l]}`).join("&")}`:""}function zw(t,{id:r,defaultColor:i,defaultMarkerStart:l,defaultMarkerEnd:u}){const c=new Set;return t.reduce((f,h)=>([h.markerStart||l,h.markerEnd||u].forEach(p=>{if(p&&typeof p=="object"){const y=Ba(p,r);c.has(y)||(f.push({id:y,color:p.color||i,...p}),c.add(y))}}),f),[]).sort((f,h)=>f.id.localeCompare(h.id))}const Kp=1e3,Rw=10,ic={nodeOrigin:[0,0],nodeExtent:ai,elevateNodesOnSelect:!0,zIndexMode:"basic",defaults:{}},Lw={...ic,checkEquality:!0};function sc(t,r){const i={...t};for(const l in r)r[l]!==void 0&&(i[l]=r[l]);return i}function Aw(t,r,i){const l=sc(ic,i);for(const u of t.values())if(u.parentId)uc(u,t,r,l);else{const c=yi(u,l.nodeOrigin),f=Sr(u.extent)?u.extent:l.nodeExtent,h=wr(c,f,en(u));u.internals.positionAbsolute=h}}function $w(t,r){if(!t.handles)return t.measured?r==null?void 0:r.internals.handleBounds:void 0;const i=[],l=[];for(const u of t.handles){const c={id:u.id,width:u.width??1,height:u.height??1,nodeId:t.id,x:u.x,y:u.y,position:u.position,type:u.type};u.type==="source"?i.push(c):u.type==="target"&&l.push(c)}return{source:i,target:l}}function lc(t){return t==="manual"}function ba(t,r,i,l={}){var g,v;const u=sc(Lw,l),c={i:0},f=new Map(r),h=u!=null&&u.elevateNodesOnSelect&&!lc(u.zIndexMode)?Kp:0;let p=t.length>0,y=!1;r.clear(),i.clear();for(const m of t){let w=f.get(m.id);if(u.checkEquality&&m===(w==null?void 0:w.internals.userNode))r.set(m.id,w);else{const S=yi(m,u.nodeOrigin),P=Sr(m.extent)?m.extent:u.nodeExtent,C=wr(S,P,en(m));w={...u.defaults,...m,measured:{width:(g=m.measured)==null?void 0:g.width,height:(v=m.measured)==null?void 0:v.height},internals:{positionAbsolute:C,handleBounds:$w(m,w),z:qp(m,h,u.zIndexMode),userNode:m}},r.set(m.id,w)}(w.measured===void 0||w.measured.width===void 0||w.measured.height===void 0)&&!w.hidden&&(p=!1),m.parentId&&uc(w,r,i,l,c),y||(y=m.selected??!1)}return{nodesInitialized:p,hasSelectedNodes:y}}function Dw(t,r){if(!t.parentId)return;const i=r.get(t.parentId);i?i.set(t.id,t):r.set(t.parentId,new Map([[t.id,t]]))}function uc(t,r,i,l,u){const{elevateNodesOnSelect:c,nodeOrigin:f,nodeExtent:h,zIndexMode:p}=sc(ic,l),y=t.parentId,g=r.get(y);if(!g){console.warn(`Parent node ${y} not found. Please make sure that parent nodes are in front of their child nodes in the nodes array.`);return}Dw(t,i),u&&!g.parentId&&g.internals.rootParentIndex===void 0&&p==="auto"&&(g.internals.rootParentIndex=++u.i,g.internals.z=g.internals.z+u.i*Rw),u&&g.internals.rootParentIndex!==void 0&&(u.i=g.internals.rootParentIndex);const v=c&&!lc(p)?Kp:0,{x:m,y:w,z:S}=Ow(t,g,f,h,v,p),{positionAbsolute:P}=t.internals,C=m!==P.x||w!==P.y;(C||S!==t.internals.z)&&r.set(t.id,{...t,internals:{...t.internals,positionAbsolute:C?{x:m,y:w}:P,z:S}})}function qp(t,r,i){const l=Kt(t.zIndex)?t.zIndex:0;return lc(i)?l:l+(t.selected?r:0)}function Ow(t,r,i,l,u,c){const{x:f,y:h}=r.internals.positionAbsolute,p=en(t),y=yi(t,i),g=Sr(t.extent)?wr(y,t.extent,p):y;let v=wr({x:f+g.x,y:h+g.y},l,p);t.extent==="parent"&&(v=Dp(v,p,r));const m=qp(t,u,c),w=r.internals.z??0;return{x:v.x,y:v.y,z:w>=m?w+1:m}}function ac(t,r,i,l=[0,0]){var f;const u=[],c=new Map;for(const h of t){const p=r.get(h.parentId);if(!p)continue;const y=((f=c.get(h.parentId))==null?void 0:f.expandedRect)??fi(p),g=Op(y,h.rect);c.set(h.parentId,{expandedRect:g,parent:p})}return c.size>0&&c.forEach(({expandedRect:h,parent:p},y)=>{var _;const g=p.internals.positionAbsolute,v=en(p),m=p.origin??l,w=h.x0||S>0||k||z)&&(u.push({id:y,type:"position",position:{x:p.position.x-w+k,y:p.position.y-S+z}}),(_=i.get(y))==null||_.forEach(I=>{t.some(H=>H.id===I.id)||u.push({id:I.id,type:"position",position:{x:I.position.x+w,y:I.position.y+S}})})),(v.width0){const w=ac(m,r,i,u);y.push(...w)}return{changes:y,updatedInternals:p}}async function Hw({delta:t,panZoom:r,transform:i,translateExtent:l,width:u,height:c}){if(!r||!t.x&&!t.y)return!1;const f=await r.setViewportConstrained({x:i[0]+t.x,y:i[1]+t.y,zoom:i[2]},[[0,0],[u,c]],l);return!!f&&(f.x!==i[0]||f.y!==i[1]||f.k!==i[2])}function vh(t,r,i,l,u,c){let f=u;const h=l.get(f)||new Map;l.set(f,h.set(i,r)),f=`${u}-${t}`;const p=l.get(f)||new Map;if(l.set(f,p.set(i,r)),c){f=`${u}-${t}-${c}`;const y=l.get(f)||new Map;l.set(f,y.set(i,r))}}function Zp(t,r,i){t.clear(),r.clear();for(const l of i){const{source:u,target:c,sourceHandle:f=null,targetHandle:h=null}=l,p={edgeId:l.id,source:u,target:c,sourceHandle:f,targetHandle:h},y=`${u}-${f}--${c}-${h}`,g=`${c}-${h}--${u}-${f}`;vh("source",p,g,t,u,f),vh("target",p,y,t,c,h),r.set(l.id,l)}}function Jp(t,r){if(!t.parentId)return!1;const i=r.get(t.parentId);return i?i.selected?!0:Jp(i,r):!1}function xh(t,r,i){var u;let l=t;do{if((u=l==null?void 0:l.matches)!=null&&u.call(l,r))return!0;if(l===i)return!1;l=l==null?void 0:l.parentElement}while(l);return!1}function Vw(t,r,i,l){const u=new Map;for(const[c,f]of t)if((f.selected||f.id===l)&&(!f.parentId||!Jp(f,t))&&(f.draggable||r&&typeof f.draggable>"u")){const h=t.get(c);h&&u.set(c,{id:c,position:h.position||{x:0,y:0},distance:{x:i.x-h.internals.positionAbsolute.x,y:i.y-h.internals.positionAbsolute.y},extent:h.extent,parentId:h.parentId,origin:h.origin,expandParent:h.expandParent,internals:{positionAbsolute:h.internals.positionAbsolute||{x:0,y:0}},measured:{width:h.measured.width??0,height:h.measured.height??0}})}return u}function _a({nodeId:t,dragItems:r,nodeLookup:i,dragging:l=!0}){var f,h,p;const u=[];for(const[y,g]of r){const v=(f=i.get(y))==null?void 0:f.internals.userNode;v&&u.push({...v,position:g.position,dragging:l})}if(!t)return[u[0],u];const c=(h=i.get(t))==null?void 0:h.internals.userNode;return[c?{...c,position:((p=r.get(t))==null?void 0:p.position)||c.position,dragging:l}:u[0],u]}function Bw({dragItems:t,snapGrid:r,x:i,y:l}){const u=t.values().next().value;if(!u)return null;const c={x:i-u.distance.x,y:l-u.distance.y},f=xi(c,r);return{x:f.x-c.x,y:f.y-c.y}}function bw({onNodeMouseDown:t,getStoreItems:r,onDragStart:i,onDrag:l,onDragStop:u}){let c={x:null,y:null},f=0,h=new Map,p=!1,y={x:0,y:0},g=null,v=!1,m=null,w=!1,S=!1,P=null;function C({noDragClassName:z,handleSelector:_,domNode:I,isSelectable:H,nodeId:$,nodeClickDistance:B=0}){m=Rt(I);function X({x:ee,y:J}){const{nodeLookup:N,nodeExtent:U,snapGrid:V,snapToGrid:b,nodeOrigin:A,onNodeDrag:L,onSelectionDrag:O,onError:M,updateNodePositions:j}=r();c={x:ee,y:J};let ne=!1;const re=h.size>1,ae=re&&U?Ha(vi(h)):null,fe=re&&b?Bw({dragItems:h,snapGrid:V,x:ee,y:J}):null;for(const[ce,K]of h){if(!N.has(ce))continue;let se={x:ee-K.distance.x,y:J-K.distance.y};b&&(se=fe?{x:Math.round(se.x+fe.x),y:Math.round(se.y+fe.y)}:xi(se,V));let pe=null;if(re&&U&&!K.extent&&ae){const{positionAbsolute:me}=K.internals,Ne=me.x-ae.x+U[0][0],Pe=me.x+K.measured.width-ae.x2+U[1][0],Ie=me.y-ae.y+U[0][1],Re=me.y+K.measured.height-ae.y2+U[1][1];pe=[[Ne,Ie],[Pe,Re]]}const{position:we,positionAbsolute:ve}=$p({nodeId:ce,nextPosition:se,nodeLookup:N,nodeExtent:pe||U,nodeOrigin:A,onError:M});ne=ne||K.position.x!==we.x||K.position.y!==we.y,K.position=we,K.internals.positionAbsolute=ve}if(S=S||ne,!!ne&&(j(h,!0),P&&(l||L||!$&&O))){const[ce,K]=_a({nodeId:$,dragItems:h,nodeLookup:N});l==null||l(P,h,ce,K),L==null||L(P,ce,K),$||O==null||O(P,K)}}async function G(){if(!g)return;const{transform:ee,panBy:J,autoPanSpeed:N,autoPanOnNodeDrag:U}=r();if(!U){p=!1,cancelAnimationFrame(f);return}const[V,b]=nc(y,g,N);(V!==0||b!==0)&&(c.x=(c.x??0)-V/ee[2],c.y=(c.y??0)-b/ee[2],await J({x:V,y:b})&&X(c)),f=requestAnimationFrame(G)}function te(ee){var re;const{nodeLookup:J,multiSelectionActive:N,nodesDraggable:U,transform:V,snapGrid:b,snapToGrid:A,selectNodesOnDrag:L,onNodeDragStart:O,onSelectionDragStart:M,unselectNodesAndEdges:j}=r();v=!0,(!L||!H)&&!N&&$&&((re=J.get($))!=null&&re.selected||j()),H&&L&&$&&(t==null||t($));const ne=oi(ee.sourceEvent,{transform:V,snapGrid:b,snapToGrid:A,containerBounds:g});if(c=ne,h=Vw(J,U,ne,$),h.size>0&&(i||O||!$&&M)){const[ae,fe]=_a({nodeId:$,dragItems:h,nodeLookup:J});i==null||i(ee.sourceEvent,h,ae,fe),O==null||O(ee.sourceEvent,ae,fe),$||M==null||M(ee.sourceEvent,fe)}}const Z=gp().clickDistance(B).on("start",ee=>{const{domNode:J,nodeDragThreshold:N,transform:U,snapGrid:V,snapToGrid:b}=r();g=(J==null?void 0:J.getBoundingClientRect())||null,w=!1,S=!1,P=ee.sourceEvent,N===0&&te(ee),c=oi(ee.sourceEvent,{transform:U,snapGrid:V,snapToGrid:b,containerBounds:g}),y=qt(ee.sourceEvent,g)}).on("drag",ee=>{const{autoPanOnNodeDrag:J,transform:N,snapGrid:U,snapToGrid:V,nodeDragThreshold:b,nodeLookup:A}=r(),L=oi(ee.sourceEvent,{transform:N,snapGrid:U,snapToGrid:V,containerBounds:g});if(P=ee.sourceEvent,(ee.sourceEvent.type==="touchmove"&&ee.sourceEvent.touches.length>1||$&&!A.has($))&&(w=!0),!w){if(!p&&J&&v&&(p=!0,G()),!v){const O=qt(ee.sourceEvent,g),M=O.x-y.x,j=O.y-y.y;Math.sqrt(M*M+j*j)>b&&te(ee)}(c.x!==L.xSnapped||c.y!==L.ySnapped)&&h&&v&&(y=qt(ee.sourceEvent,g),X(L))}}).on("end",ee=>{if(!v||w){w&&h.size>0&&r().updateNodePositions(h,!1);return}if(p=!1,v=!1,cancelAnimationFrame(f),h.size>0){const{nodeLookup:J,updateNodePositions:N,onNodeDragStop:U,onSelectionDragStop:V}=r();if(S&&(N(h,!1),S=!1),u||U||!$&&V){const[b,A]=_a({nodeId:$,dragItems:h,nodeLookup:J,dragging:!1});u==null||u(ee.sourceEvent,h,b,A),U==null||U(ee.sourceEvent,b,A),$||V==null||V(ee.sourceEvent,A)}}}).filter(ee=>{const J=ee.target;return!ee.button&&(!z||!xh(J,`.${z}`,I))&&(!_||xh(J,_,I))});m.call(Z)}function k(){m==null||m.on(".drag",null)}return{update:C,destroy:k}}function Uw(t,r,i){const l=[],u={x:t.x-i,y:t.y-i,width:i*2,height:i*2};for(const c of r.values())ll(u,fi(c))>0&&l.push(c);return l}const Ww=250;function Yw(t,r,i,l){var h,p;let u=[],c=1/0;const f=Uw(t,i,r+Ww);for(const y of f){const g=[...((h=y.internals.handleBounds)==null?void 0:h.source)??[],...((p=y.internals.handleBounds)==null?void 0:p.target)??[]];for(const v of g){if(l.nodeId===v.nodeId&&l.type===v.type&&l.id===v.id)continue;const{x:m,y:w}=_r(y,v,v.position,!0),S=Math.sqrt(Math.pow(m-t.x,2)+Math.pow(w-t.y,2));S>r||(S1){const y=l.type==="source"?"target":"source";return u.find(g=>g.type===y)??u[0]}return u[0]}function eg(t,r,i,l,u,c=!1){var y,g,v;const f=l.get(t);if(!f)return null;const h=u==="strict"?(y=f.internals.handleBounds)==null?void 0:y[r]:[...((g=f.internals.handleBounds)==null?void 0:g.source)??[],...((v=f.internals.handleBounds)==null?void 0:v.target)??[]],p=(i?h==null?void 0:h.find(m=>m.id===i):h==null?void 0:h[0])??null;return p&&c?{...p,..._r(f,p,p.position,!0)}:p}function tg(t,r){return t||(r!=null&&r.classList.contains("target")?"target":r!=null&&r.classList.contains("source")?"source":null)}function Xw(t,r){let i=null;return r?i=!0:t&&!r&&(i=!1),i}const ng=()=>!0;function Qw(t,{connectionMode:r,connectionRadius:i,handleId:l,nodeId:u,edgeUpdaterType:c,isTarget:f,domNode:h,nodeLookup:p,lib:y,autoPanOnConnect:g,flowId:v,panBy:m,cancelConnection:w,onConnectStart:S,onConnect:P,onConnectEnd:C,isValidConnection:k=ng,onReconnectEnd:z,updateConnection:_,getTransform:I,getFromHandle:H,autoPanSpeed:$,dragThreshold:B=1,handleDomNode:X}){const G=bp(t.target);let te=0,Z;const{x:ee,y:J}=qt(t),N=tg(c,X),U=h==null?void 0:h.getBoundingClientRect();let V=!1;if(!U||!N)return;const b=eg(u,N,l,p,r);if(!b)return;let A=qt(t,U),L=!1,O=null,M=!1,j=null;function ne(){if(!g||!U)return;const[we,ve]=nc(A,U,$);m({x:we,y:ve}),te=requestAnimationFrame(ne)}const re={...b,nodeId:u,type:N,position:b.position},ae=p.get(u);let ce={inProgress:!0,isValid:null,from:_r(ae,re,Se.Left,!0),fromHandle:re,fromPosition:re.position,fromNode:ae,to:A,toHandle:null,toPosition:lh[re.position],toNode:null,pointer:A};function K(){V=!0,_(ce),S==null||S(t,{nodeId:u,handleId:l,handleType:N})}B===0&&K();function se(we){if(!V){const{x:Re,y:Ze}=qt(we),nt=Re-ee,Qe=Ze-J;if(!(nt*nt+Qe*Qe>B*B))return;K()}if(!H()||!re){pe(we);return}const ve=I();A=qt(we,U),Z=Yw(wi(A,ve,!1,[1,1]),i,p,re),L||(ne(),L=!0);const me=rg(we,{handle:Z,connectionMode:r,fromNodeId:u,fromHandleId:l,fromType:f?"target":"source",isValidConnection:k,doc:G,lib:y,flowId:v,nodeLookup:p});j=me.handleDomNode,O=me.connection,M=Xw(!!Z,me.isValid);const Ne=p.get(u),Pe=Ne?_r(Ne,re,Se.Left,!0):ce.from,Ie={...ce,from:Pe,isValid:M,to:me.toHandle&&M?so({x:me.toHandle.x,y:me.toHandle.y},ve):A,toHandle:me.toHandle,toPosition:M&&me.toHandle?me.toHandle.position:lh[re.position],toNode:me.toHandle?p.get(me.toHandle.nodeId):null,pointer:A};_(Ie),ce=Ie}function pe(we){if(!("touches"in we&&we.touches.length>0)){if(V){(Z||j)&&O&&M&&(P==null||P(O));const{inProgress:ve,...me}=ce,Ne={...me,toPosition:ce.toHandle?ce.toPosition:null};C==null||C(we,Ne),c&&(z==null||z(we,Ne))}w(),cancelAnimationFrame(te),L=!1,M=!1,O=null,j=null,G.removeEventListener("mousemove",se),G.removeEventListener("mouseup",pe),G.removeEventListener("touchmove",se),G.removeEventListener("touchend",pe)}}G.addEventListener("mousemove",se),G.addEventListener("mouseup",pe),G.addEventListener("touchmove",se),G.addEventListener("touchend",pe)}function rg(t,{handle:r,connectionMode:i,fromNodeId:l,fromHandleId:u,fromType:c,doc:f,lib:h,flowId:p,isValidConnection:y=ng,nodeLookup:g}){const v=c==="target",m=r?f.querySelector(`.${h}-flow__handle[data-id="${p}-${r==null?void 0:r.nodeId}-${r==null?void 0:r.id}-${r==null?void 0:r.type}"]`):null,{x:w,y:S}=qt(t),P=f.elementFromPoint(w,S),C=P!=null&&P.classList.contains(`${h}-flow__handle`)?P:m,k={handleDomNode:C,isValid:!1,connection:null,toHandle:null};if(C){const z=tg(void 0,C),_=C.getAttribute("data-nodeid"),I=C.getAttribute("data-handleid"),H=C.classList.contains("connectable"),$=C.classList.contains("connectableend");if(!_||!z)return k;const B={source:v?_:l,sourceHandle:v?I:u,target:v?l:_,targetHandle:v?u:I};k.connection=B;const G=H&&$&&(i===oo.Strict?v&&z==="source"||!v&&z==="target":_!==l||I!==u);k.isValid=G&&y(B),k.toHandle=eg(_,z,I,g,i,!0)}return k}const Ua={onPointerDown:Qw,isValid:rg};function Gw({domNode:t,panZoom:r,getTransform:i,getViewScale:l}){const u=Rt(t);function c({translateExtent:h,width:p,height:y,zoomStep:g=1,pannable:v=!0,zoomable:m=!0,inversePan:w=!1}){const S=_=>{if(_.sourceEvent.type!=="wheel"||!r)return;const I=i(),H=_.sourceEvent.ctrlKey&&di()?10:1,$=-_.sourceEvent.deltaY*(_.sourceEvent.deltaMode===1?.05:_.sourceEvent.deltaMode?1:.002)*g,B=I[2]*Math.pow(2,$*H);r.scaleTo(B)};let P=[0,0];const C=_=>{(_.sourceEvent.type==="mousedown"||_.sourceEvent.type==="touchstart")&&(P=[_.sourceEvent.clientX??_.sourceEvent.touches[0].clientX,_.sourceEvent.clientY??_.sourceEvent.touches[0].clientY])},k=_=>{const I=i();if(_.sourceEvent.type!=="mousemove"&&_.sourceEvent.type!=="touchmove"||!r)return;const H=[_.sourceEvent.clientX??_.sourceEvent.touches[0].clientX,_.sourceEvent.clientY??_.sourceEvent.touches[0].clientY],$=[H[0]-P[0],H[1]-P[1]];P=H;const B=l()*Math.max(I[2],Math.log(I[2]))*(w?-1:1),X={x:I[0]-$[0]*B,y:I[1]-$[1]*B},G=[[0,0],[p,y]];r.setViewportConstrained({x:X.x,y:X.y,zoom:I[2]},G,h)},z=Tp().on("start",C).on("zoom",v?k:null).on("zoom.wheel",m?S:null);u.call(z,{})}function f(){u.on("zoom",null)}return{update:c,destroy:f,pointer:Qt}}const yl=t=>({x:t.x,y:t.y,zoom:t.k}),ka=({x:t,y:r,zoom:i})=>pl.translate(t,r).scale(i),Yn=(t,r)=>t.target.closest(`.${r}`),og=(t,r)=>r===2&&Array.isArray(t)&&t.includes(2),Kw=t=>((t*=2)<=1?t*t*t:(t-=2)*t*t+2)/2,Ea=(t,r=0,i=Kw,l=()=>{})=>{const u=typeof r=="number"&&r>0;return u||l(),u?t.transition().duration(r).ease(i).on("end",l):t},ig=t=>{const r=t.ctrlKey&&di()?10:1;return-t.deltaY*(t.deltaMode===1?.05:t.deltaMode?1:.002)*r};function qw({zoomPanValues:t,noWheelClassName:r,d3Selection:i,d3Zoom:l,panOnScrollMode:u,panOnScrollSpeed:c,zoomOnPinch:f,onPanZoomStart:h,onPanZoom:p,onPanZoomEnd:y}){return g=>{if(Yn(g,r))return g.ctrlKey&&g.preventDefault(),!1;g.preventDefault(),g.stopImmediatePropagation();const v=i.property("__zoom").k||1;if(g.ctrlKey&&f){const C=Qt(g),k=ig(g),z=v*Math.pow(2,k);l.scaleTo(i,z,C,g);return}const m=g.deltaMode===1?20:1;let w=u===yr.Vertical?0:g.deltaX*m,S=u===yr.Horizontal?0:g.deltaY*m;!di()&&g.shiftKey&&u!==yr.Vertical&&(w=g.deltaY*m,S=0),l.translateBy(i,-(w/v)*c,-(S/v)*c,{internal:!0});const P=yl(i.property("__zoom"));clearTimeout(t.panScrollTimeout),t.isPanScrolling?p==null||p(g,P):(t.isPanScrolling=!0,h==null||h(g,P)),t.panScrollTimeout=setTimeout(()=>{y==null||y(g,P),t.isPanScrolling=!1},150)}}function Zw({noWheelClassName:t,preventScrolling:r,d3ZoomHandler:i}){return function(l,u){const c=l.type==="wheel",f=!r&&c&&!l.ctrlKey,h=Yn(l,t);if(l.ctrlKey&&c&&h&&l.preventDefault(),f||h)return null;l.preventDefault(),i.call(this,l,u)}}function Jw({zoomPanValues:t,onDraggingChange:r,onPanZoomStart:i}){return l=>{var c,f,h;if((c=l.sourceEvent)!=null&&c.internal)return;const u=yl(l.transform);t.mouseButton=((f=l.sourceEvent)==null?void 0:f.button)||0,t.isZoomingOrPanning=!0,t.prevViewport=u,((h=l.sourceEvent)==null?void 0:h.type)==="mousedown"&&r(!0),i&&(i==null||i(l.sourceEvent,u))}}function e1({zoomPanValues:t,panOnDrag:r,onPaneContextMenu:i,onTransformChange:l,onPanZoom:u}){return c=>{var f,h;t.usedRightMouseButton=!!(i&&og(r,t.mouseButton??0)),(f=c.sourceEvent)!=null&&f.sync||l([c.transform.x,c.transform.y,c.transform.k]),u&&!((h=c.sourceEvent)!=null&&h.internal)&&(u==null||u(c.sourceEvent,yl(c.transform)))}}function t1({zoomPanValues:t,panOnDrag:r,panOnScroll:i,onDraggingChange:l,onPanZoomEnd:u,onPaneContextMenu:c}){return f=>{var h;if(!((h=f.sourceEvent)!=null&&h.internal)&&(t.isZoomingOrPanning=!1,c&&og(r,t.mouseButton??0)&&!t.usedRightMouseButton&&f.sourceEvent&&c(f.sourceEvent),t.usedRightMouseButton=!1,l(!1),u)){const p=yl(f.transform);t.prevViewport=p,clearTimeout(t.timerId),t.timerId=setTimeout(()=>{u==null||u(f.sourceEvent,p)},i?150:0)}}}function n1({panActivationKeyPressed:t,zoomActivationKeyPressed:r,zoomOnScroll:i,zoomOnPinch:l,panOnDrag:u,panOnScroll:c,zoomOnDoubleClick:f,userSelectionActive:h,noWheelClassName:p,noPanClassName:y,lib:g,connectionInProgress:v}){return m=>{var k;const w=r||i,S=l&&m.ctrlKey,P=m.type==="wheel";if(m.button===1&&m.type==="mousedown"&&(Yn(m,`${g}-flow__node`)||Yn(m,`${g}-flow__edge`)||Yn(m,`${g}-flow__selection`)||Yn(m,`${g}-flow__nodesselection`)))return!0;if(!u&&!w&&!c&&!f&&!l||h||v&&!P||Yn(m,p)&&P||Yn(m,y)&&(!P||c&&P&&!r)||!l&&m.ctrlKey&&P)return!1;if(!l&&m.type==="touchstart"&&((k=m.touches)==null?void 0:k.length)>1)return m.preventDefault(),!1;if(!w&&!c&&!S&&P||!u&&(m.type==="mousedown"||m.type==="touchstart")||Array.isArray(u)&&!u.includes(m.button)&&m.type==="mousedown")return!1;const C=Array.isArray(u)&&u.includes(m.button)||!m.button||m.button<=1;return(!m.ctrlKey||P||t)&&C}}function r1({domNode:t,minZoom:r,maxZoom:i,translateExtent:l,viewport:u,onPanZoom:c,onPanZoomStart:f,onPanZoomEnd:h,onDraggingChange:p}){const y={isZoomingOrPanning:!1,usedRightMouseButton:!1,prevViewport:{},mouseButton:0,timerId:void 0,panScrollTimeout:void 0,isPanScrolling:!1},g=t.getBoundingClientRect();let v=[[0,0],[g.width,g.height]];const m=typeof ResizeObserver<"u"?new ResizeObserver(J=>{const N=J[0];N&&(v=[[0,0],[N.contentRect.width,N.contentRect.height]])}):null;m==null||m.observe(t);const w=Tp().extent(()=>v).scaleExtent([r,i]).translateExtent(l),S=Rt(t).call(w);I({x:u.x,y:u.y,zoom:io(u.zoom,r,i)},[[0,0],[g.width,g.height]],l);const P=S.on("wheel.zoom"),C=S.on("dblclick.zoom");w.wheelDelta(ig);async function k(J,N){return S?new Promise(U=>{w==null||w.interpolate((N==null?void 0:N.interpolate)==="linear"?ri:Qs).transform(Ea(S,N==null?void 0:N.duration,N==null?void 0:N.ease,()=>U(!0)),J)}):!1}function z({noWheelClassName:J,noPanClassName:N,onPaneContextMenu:U,userSelectionActive:V,panOnScroll:b,panOnDrag:A,panOnScrollMode:L,panOnScrollSpeed:O,preventScrolling:M,zoomOnPinch:j,zoomOnScroll:ne,zoomOnDoubleClick:re,panActivationKeyPressed:ae=!1,zoomActivationKeyPressed:fe,lib:ce,onTransformChange:K,connectionInProgress:se,paneClickDistance:pe,selectionOnDrag:we}){V&&!y.isZoomingOrPanning&&_();const ve=b&&!fe&&!V;w.clickDistance(we?1/0:!Kt(pe)||pe<0?0:pe);const me=ve?qw({zoomPanValues:y,noWheelClassName:J,d3Selection:S,d3Zoom:w,panOnScrollMode:L,panOnScrollSpeed:O,zoomOnPinch:j,onPanZoomStart:f,onPanZoom:c,onPanZoomEnd:h}):Zw({noWheelClassName:J,preventScrolling:M,d3ZoomHandler:P});S.on("wheel.zoom",me,{passive:!1});const Ne=Jw({zoomPanValues:y,onDraggingChange:p,onPanZoomStart:f});w.on("start",Ne);const Pe=e1({zoomPanValues:y,panOnDrag:A,onPaneContextMenu:!!U,onPanZoom:c,onTransformChange:K});w.on("zoom",Pe);const Ie=t1({zoomPanValues:y,panOnDrag:A,panOnScroll:b,onPaneContextMenu:U,onPanZoomEnd:h,onDraggingChange:p});w.on("end",Ie);const Re=n1({panActivationKeyPressed:ae,zoomActivationKeyPressed:fe,panOnDrag:A,zoomOnScroll:ne,panOnScroll:b,zoomOnDoubleClick:re,zoomOnPinch:j,userSelectionActive:V,noPanClassName:N,noWheelClassName:J,lib:ce,connectionInProgress:se});w.filter(Re),re?S.on("dblclick.zoom",C):S.on("dblclick.zoom",null)}function _(){w.on("zoom",null)}async function I(J,N,U){const V=ka(J),b=w==null?void 0:w.constrain()(V,N,U);return b&&await k(b),b}async function H(J,N){const U=ka(J);return await k(U,N),U}function $(J){if(S){const N=ka(J),U=S.property("__zoom");(U.k!==J.zoom||U.x!==J.x||U.y!==J.y)&&(w==null||w.transform(S,N,null,{sync:!0}))}}function B(){const J=S?Ip(S.node()):{x:0,y:0,k:1};return{x:J.x,y:J.y,zoom:J.k}}async function X(J,N){return S?new Promise(U=>{w==null||w.interpolate((N==null?void 0:N.interpolate)==="linear"?ri:Qs).scaleTo(Ea(S,N==null?void 0:N.duration,N==null?void 0:N.ease,()=>U(!0)),J)}):!1}async function G(J,N){return S?new Promise(U=>{w==null||w.interpolate((N==null?void 0:N.interpolate)==="linear"?ri:Qs).scaleBy(Ea(S,N==null?void 0:N.duration,N==null?void 0:N.ease,()=>U(!0)),J)}):!1}function te(J){w==null||w.scaleExtent(J)}function Z(J){w==null||w.translateExtent(J)}function ee(J){const N=!Kt(J)||J<0?0:J;w==null||w.clickDistance(N)}return{update:z,destroy:_,setViewport:H,setViewportConstrained:I,getViewport:B,scaleTo:X,scaleBy:G,setScaleExtent:te,setTranslateExtent:Z,syncViewport:$,setClickDistance:ee}}var lo;(function(t){t.Line="line",t.Handle="handle"})(lo||(lo={}));function o1({width:t,prevWidth:r,height:i,prevHeight:l,affectsX:u,affectsY:c}){const f=t-r,h=i-l,p=[f>0?1:f<0?-1:0,h>0?1:h<0?-1:0];return f&&u&&(p[0]=p[0]*-1),h&&c&&(p[1]=p[1]*-1),p}function wh(t){const r=t.includes("right")||t.includes("left"),i=t.includes("bottom")||t.includes("top"),l=t.includes("left"),u=t.includes("top");return{isHorizontal:r,isVertical:i,affectsX:l,affectsY:u}}function Un(t,r){return Math.max(0,r-t)}function Wn(t,r){return Math.max(0,t-r)}function Us(t,r,i){return Math.max(0,r-t,t-i)}function Sh(t,r){return t?!r:r}function i1(t,r,i,l,u,c,f,h){let{affectsX:p,affectsY:y}=r;const{isHorizontal:g,isVertical:v}=r,m=g&&v,{xSnapped:w,ySnapped:S}=i,{minWidth:P,maxWidth:C,minHeight:k,maxHeight:z}=l,{x:_,y:I,width:H,height:$,aspectRatio:B}=t;let X=Math.floor(g?w-t.pointerX:0),G=Math.floor(v?S-t.pointerY:0);const te=H+(p?-X:X),Z=$+(y?-G:G),ee=-c[0]*H,J=-c[1]*$;let N=Us(te,P,C),U=Us(Z,k,z);if(f){let A=0,L=0;p&&X<0?A=Un(_+X+ee,f[0][0]):!p&&X>0&&(A=Wn(_+te+ee,f[1][0])),y&&G<0?L=Un(I+G+J,f[0][1]):!y&&G>0&&(L=Wn(I+Z+J,f[1][1])),N=Math.max(N,A),U=Math.max(U,L)}if(h){let A=0,L=0;p&&X>0?A=Wn(_+X,h[0][0]):!p&&X<0&&(A=Un(_+te,h[1][0])),y&&G>0?L=Wn(I+G,h[0][1]):!y&&G<0&&(L=Un(I+Z,h[1][1])),N=Math.max(N,A),U=Math.max(U,L)}if(u){if(g){const A=Us(te/B,k,z)*B;if(N=Math.max(N,A),f){let L=0;!p&&!y||p&&!y&&m?L=Wn(I+J+te/B,f[1][1])*B:L=Un(I+J+(p?X:-X)/B,f[0][1])*B,N=Math.max(N,L)}if(h){let L=0;!p&&!y||p&&!y&&m?L=Un(I+te/B,h[1][1])*B:L=Wn(I+(p?X:-X)/B,h[0][1])*B,N=Math.max(N,L)}}if(v){const A=Us(Z*B,P,C)/B;if(U=Math.max(U,A),f){let L=0;!p&&!y||y&&!p&&m?L=Wn(_+Z*B+ee,f[1][0])/B:L=Un(_+(y?G:-G)*B+ee,f[0][0])/B,U=Math.max(U,L)}if(h){let L=0;!p&&!y||y&&!p&&m?L=Un(_+Z*B,h[1][0])/B:L=Wn(_+(y?G:-G)*B,h[0][0])/B,U=Math.max(U,L)}}}G=G+(G<0?U:-U),X=X+(X<0?N:-N),u&&(m?te>Z*B?G=(Sh(p,y)?-X:X)/B:X=(Sh(p,y)?-G:G)*B:g?(G=X/B,y=p):(X=G*B,p=y));const V=p?_+X:_,b=y?I+G:I;return{width:H+(p?-X:X),height:$+(y?-G:G),x:c[0]*X*(p?-1:1)+V,y:c[1]*G*(y?-1:1)+b}}const sg={width:0,height:0,x:0,y:0},s1={...sg,pointerX:0,pointerY:0,aspectRatio:1};function l1(t,r,i){const l=r.position.x+t.position.x,u=r.position.y+t.position.y,c=t.measured.width??0,f=t.measured.height??0,h=i[0]*c,p=i[1]*f;return[[l-h,u-p],[l+c-h,u+f-p]]}function u1({domNode:t,nodeId:r,getStoreItems:i,onChange:l,onEnd:u}){const c=Rt(t);let f={controlDirection:wh("bottom-right"),boundaries:{minWidth:0,minHeight:0,maxWidth:Number.MAX_VALUE,maxHeight:Number.MAX_VALUE},resizeDirection:void 0,keepAspectRatio:!1};function h({controlPosition:y,boundaries:g,keepAspectRatio:v,resizeDirection:m,onResizeStart:w,onResize:S,onResizeEnd:P,shouldResize:C}){let k={...sg},z={...s1};f={boundaries:g,resizeDirection:m,keepAspectRatio:v,controlDirection:wh(y)};let _,I=null,H=[],$,B,X,G=!1;const te=gp().on("start",Z=>{const{nodeLookup:ee,transform:J,snapGrid:N,snapToGrid:U,nodeOrigin:V,paneDomNode:b}=i();if(_=ee.get(r),!_)return;I=(b==null?void 0:b.getBoundingClientRect())??null;const{xSnapped:A,ySnapped:L}=oi(Z.sourceEvent,{transform:J,snapGrid:N,snapToGrid:U,containerBounds:I});k={width:_.measured.width??0,height:_.measured.height??0,x:_.position.x??0,y:_.position.y??0},z={...k,pointerX:A,pointerY:L,aspectRatio:k.width/k.height},$=void 0,B=Sr(_.extent)?_.extent:void 0,_.parentId&&(_.extent==="parent"||_.expandParent)&&($=ee.get(_.parentId)),$&&_.extent==="parent"&&(B=[[0,0],[$.measured.width,$.measured.height]]),H=[],X=void 0;for(const[O,M]of ee)if(M.parentId===r&&(H.push({id:O,position:{...M.position},extent:M.extent}),M.extent==="parent"||M.expandParent)){const j=l1(M,_,M.origin??V);X?X=[[Math.min(j[0][0],X[0][0]),Math.min(j[0][1],X[0][1])],[Math.max(j[1][0],X[1][0]),Math.max(j[1][1],X[1][1])]]:X=j}w==null||w(Z,{...k})}).on("drag",Z=>{const{transform:ee,snapGrid:J,snapToGrid:N,nodeOrigin:U}=i(),V=oi(Z.sourceEvent,{transform:ee,snapGrid:J,snapToGrid:N,containerBounds:I}),b=[];if(!_)return;const{x:A,y:L,width:O,height:M}=k,j={},ne=_.origin??U,{width:re,height:ae,x:fe,y:ce}=i1(z,f.controlDirection,V,f.boundaries,f.keepAspectRatio,ne,B,X),K=re!==O,se=ae!==M,pe=fe!==A&&K,we=ce!==L&&se;if(!pe&&!we&&!K&&!se)return;if((pe||we||ne[0]===1||ne[1]===1)&&(j.x=pe?fe:k.x,j.y=we?ce:k.y,k.x=j.x,k.y=j.y,H.length>0)){const Pe=fe-A,Ie=ce-L;for(const Re of H)Re.position={x:Re.position.x-Pe+ne[0]*(re-O),y:Re.position.y-Ie+ne[1]*(ae-M)},b.push(Re)}if((K||se)&&(j.width=K&&(!f.resizeDirection||f.resizeDirection==="horizontal")?re:k.width,j.height=se&&(!f.resizeDirection||f.resizeDirection==="vertical")?ae:k.height,k.width=j.width,k.height=j.height),$&&_.expandParent){const Pe=ne[0]*(j.width??0);j.x&&j.x{G&&(P==null||P(Z,{...k}),u==null||u({...k}),G=!1)});c.call(te)}function p(){c.on(".drag",null)}return{update:h,destroy:p}}var Na={exports:{}},Ca={},Ma={exports:{}},Pa={};/** - * @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 _h;function a1(){if(_h)return Pa;_h=1;var t=pi();function r(v,m){return v===m&&(v!==0||1/v===1/m)||v!==v&&m!==m}var i=typeof Object.is=="function"?Object.is:r,l=t.useState,u=t.useEffect,c=t.useLayoutEffect,f=t.useDebugValue;function h(v,m){var w=m(),S=l({inst:{value:w,getSnapshot:m}}),P=S[0].inst,C=S[1];return c(function(){P.value=w,P.getSnapshot=m,p(P)&&C({inst:P})},[v,w,m]),u(function(){return p(P)&&C({inst:P}),v(function(){p(P)&&C({inst:P})})},[v]),f(w),w}function p(v){var m=v.getSnapshot;v=v.value;try{var w=m();return!i(v,w)}catch{return!0}}function y(v,m){return m()}var g=typeof window>"u"||typeof window.document>"u"||typeof window.document.createElement>"u"?y:h;return Pa.useSyncExternalStore=t.useSyncExternalStore!==void 0?t.useSyncExternalStore:g,Pa}var kh;function c1(){return kh||(kh=1,Ma.exports=a1()),Ma.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 Eh;function f1(){if(Eh)return Ca;Eh=1;var t=pi(),r=c1();function i(y,g){return y===g&&(y!==0||1/y===1/g)||y!==y&&g!==g}var l=typeof Object.is=="function"?Object.is:i,u=r.useSyncExternalStore,c=t.useRef,f=t.useEffect,h=t.useMemo,p=t.useDebugValue;return Ca.useSyncExternalStoreWithSelector=function(y,g,v,m,w){var S=c(null);if(S.current===null){var P={hasValue:!1,value:null};S.current=P}else P=S.current;S=h(function(){function k($){if(!z){if(z=!0,_=$,$=m($),w!==void 0&&P.hasValue){var B=P.value;if(w(B,$))return I=B}return I=$}if(B=I,l(_,$))return B;var X=m($);return w!==void 0&&w(B,X)?(_=$,B):(_=$,I=X)}var z=!1,_,I,H=v===void 0?null:v;return[function(){return k(g())},H===null?void 0:function(){return k(H())}]},[g,v,m,w]);var C=u(y,S[0],S[1]);return f(function(){P.hasValue=!0,P.value=C},[C]),p(C),C},Ca}var Nh;function d1(){return Nh||(Nh=1,Na.exports=f1()),Na.exports}var h1=d1();const p1=Jh(h1),g1={},Ch=t=>{let r;const i=new Set,l=(g,v)=>{const m=typeof g=="function"?g(r):g;if(!Object.is(m,r)){const w=r;r=v??(typeof m!="object"||m===null)?m:Object.assign({},r,m),i.forEach(S=>S(r,w))}},u=()=>r,p={setState:l,getState:u,getInitialState:()=>y,subscribe:g=>(i.add(g),()=>i.delete(g)),destroy:()=>{(g1?"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."),i.clear()}},y=r=t(l,u,p);return p},m1=t=>t?Ch(t):Ch,{useDebugValue:y1}=M0,{useSyncExternalStoreWithSelector:v1}=p1,x1=t=>t;function lg(t,r=x1,i){const l=v1(t.subscribe,t.getState,t.getServerState||t.getInitialState,r,i);return y1(l),l}const Mh=(t,r)=>{const i=m1(t),l=(u,c=r)=>lg(i,u,c);return Object.assign(l,i),l},w1=(t,r)=>t?Mh(t,r):Mh;function be(t,r){if(Object.is(t,r))return!0;if(typeof t!="object"||t===null||typeof r!="object"||r===null)return!1;if(t instanceof Map&&r instanceof Map){if(t.size!==r.size)return!1;for(const[l,u]of t)if(!Object.is(u,r.get(l)))return!1;return!0}if(t instanceof Set&&r instanceof Set){if(t.size!==r.size)return!1;for(const l of t)if(!r.has(l))return!1;return!0}const i=Object.keys(t);if(i.length!==Object.keys(r).length)return!1;for(const l of i)if(!Object.prototype.hasOwnProperty.call(r,l)||!Object.is(t[l],r[l]))return!1;return!0}ep();const vl=Q.createContext(null),S1=vl.Provider,ug=Zt.error001("react");function je(t,r){const i=Q.useContext(vl);if(i===null)throw new Error(ug);return lg(i,t,r)}function Oe(){const t=Q.useContext(vl);if(t===null)throw new Error(ug);return Q.useMemo(()=>({getState:t.getState,setState:t.setState,subscribe:t.subscribe}),[t])}const Ph={display:"none"},_1={position:"absolute",width:1,height:1,margin:-1,border:0,padding:0,overflow:"hidden",clip:"rect(0px, 0px, 0px, 0px)",clipPath:"inset(100%)"},ag="react-flow__node-desc",cg="react-flow__edge-desc",k1="react-flow__aria-live",E1=t=>t.ariaLiveMessage,N1=t=>t.ariaLabelConfig;function C1({rfId:t}){const r=je(E1);return E.jsx("div",{id:`${k1}-${t}`,"aria-live":"assertive","aria-atomic":"true",style:_1,children:r})}function M1({rfId:t,disableKeyboardA11y:r}){const i=je(N1);return E.jsxs(E.Fragment,{children:[E.jsx("div",{id:`${ag}-${t}`,style:Ph,children:r?i["node.a11yDescription.default"]:i["node.a11yDescription.keyboardDisabled"]}),E.jsx("div",{id:`${cg}-${t}`,style:Ph,children:i["edge.a11yDescription.default"]}),!r&&E.jsx(C1,{rfId:t})]})}const xl=Q.forwardRef(({position:t="top-left",children:r,className:i,style:l,...u},c)=>{const f=`${t}`.split("-");return E.jsx("div",{className:Xe(["react-flow__panel",i,...f]),style:l,ref:c,...u,children:r})});xl.displayName="Panel";const Ih="https://reactflow.dev?utm_source=attribution";function P1({proOptions:t,position:r="bottom-right"}){return t!=null&&t.hideAttribution?null:E.jsx(xl,{position:r,className:"react-flow__attribution","data-message":`Please only hide this attribution when you are subscribed to React Flow Pro: ${Ih}`,children:E.jsx("a",{href:Ih,target:"_blank",rel:"noopener noreferrer","aria-label":"React Flow attribution",children:"React Flow"})})}const I1=t=>{const r=[],i=[];for(const[,l]of t.nodeLookup)l.selected&&r.push(l.internals.userNode);for(const[,l]of t.edgeLookup)l.selected&&i.push(l);return{selectedNodes:r,selectedEdges:i}},Ws=t=>t.id;function T1(t,r){return be(t.selectedNodes.map(Ws),r.selectedNodes.map(Ws))&&be(t.selectedEdges.map(Ws),r.selectedEdges.map(Ws))}function j1({onSelectionChange:t}){const r=Oe(),{selectedNodes:i,selectedEdges:l}=je(I1,T1);return Q.useEffect(()=>{const u={nodes:i,edges:l};t==null||t(u),r.getState().onSelectionChangeHandlers.forEach(c=>c(u))},[i,l,t]),null}const z1=t=>!!t.onSelectionChangeHandlers;function R1({onSelectionChange:t}){const r=je(z1);return t||r?E.jsx(j1,{onSelectionChange:t}):null}const fg=[0,0],L1={x:0,y:0,zoom:1},A1=["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"],Th=[...A1,"rfId"],$1=t=>({setNodes:t.setNodes,setEdges:t.setEdges,setMinZoom:t.setMinZoom,setMaxZoom:t.setMaxZoom,setTranslateExtent:t.setTranslateExtent,setNodeExtent:t.setNodeExtent,reset:t.reset,setDefaultNodesAndEdges:t.setDefaultNodesAndEdges}),jh={translateExtent:ai,nodeOrigin:fg,minZoom:.5,maxZoom:2,elementsSelectable:!0,noPanClassName:"nopan",rfId:"1"};function D1(t){const{setNodes:r,setEdges:i,setMinZoom:l,setMaxZoom:u,setTranslateExtent:c,setNodeExtent:f,reset:h,setDefaultNodesAndEdges:p}=je($1,be),y=Oe();Q.useEffect(()=>(p(t.defaultNodes,t.defaultEdges),()=>{g.current=jh,h()}),[]);const g=Q.useRef(jh);return Q.useEffect(()=>{for(const v of Th){const m=t[v],w=g.current[v];m!==w&&(typeof t[v]>"u"||(v==="nodes"?r(m):v==="edges"?i(m):v==="minZoom"?l(m):v==="maxZoom"?u(m):v==="translateExtent"?c(m):v==="nodeExtent"?f(m):v==="ariaLabelConfig"?y.setState({ariaLabelConfig:Sw(m)}):v==="fitView"?y.setState({fitViewQueued:m}):v==="fitViewOptions"?y.setState({fitViewOptions:m}):y.setState({[v]:m})))}g.current=t},Th.map(v=>t[v])),null}function zh(){return typeof window>"u"||!window.matchMedia?null:window.matchMedia("(prefers-color-scheme: dark)")}function O1(t){var l;const[r,i]=Q.useState(t==="system"?null:t);return Q.useEffect(()=>{if(t!=="system"){i(t);return}const u=zh(),c=()=>i(u!=null&&u.matches?"dark":"light");return c(),u==null||u.addEventListener("change",c),()=>{u==null||u.removeEventListener("change",c)}},[t]),r!==null?r:(l=zh())!=null&&l.matches?"dark":"light"}const Rh=typeof document<"u"?document:null;function hi(t=null,r={target:Rh,actInsideInputWithModifier:!0}){const[i,l]=Q.useState(!1),u=Q.useRef(!1),c=Q.useRef(new Set([])),[f,h]=Q.useMemo(()=>{if(t!==null){const y=(Array.isArray(t)?t:[t]).filter(v=>typeof v=="string").map(v=>v.replace(/\+/g,` -`).replace(` - -`,` -+`).split(` -`)),g=y.reduce((v,m)=>v.concat(...m),[]);return[y,g]}return[[],[]]},[t]);return Q.useEffect(()=>{const p=(r==null?void 0:r.target)??Rh,y=(r==null?void 0:r.actInsideInputWithModifier)??!0;if(t!==null){const g=w=>{var C,k;if(u.current=w.ctrlKey||w.metaKey||w.shiftKey||w.altKey,(!u.current||u.current&&!y)&&Up(w))return!1;const P=Ah(w.code,h);if(c.current.add(w[P]),Lh(f,c.current,!1)){const z=((k=(C=w.composedPath)==null?void 0:C.call(w))==null?void 0:k[0])||w.target,_=(z==null?void 0:z.nodeName)==="BUTTON"||(z==null?void 0:z.nodeName)==="A";r.preventDefault!==!1&&(u.current||!_)&&w.preventDefault(),l(!0)}},v=w=>{const S=Ah(w.code,h);Lh(f,c.current,!0)?(l(!1),c.current.clear()):c.current.delete(w[S]),w.key==="Meta"&&c.current.clear(),u.current=!1},m=()=>{c.current.clear(),l(!1)};return p==null||p.addEventListener("keydown",g),p==null||p.addEventListener("keyup",v),window.addEventListener("blur",m),window.addEventListener("contextmenu",m),()=>{p==null||p.removeEventListener("keydown",g),p==null||p.removeEventListener("keyup",v),window.removeEventListener("blur",m),window.removeEventListener("contextmenu",m)}}},[t,l]),i}function Lh(t,r,i){return t.filter(l=>i||l.length===r.size).some(l=>l.every(u=>r.has(u)))}function Ah(t,r){return r.includes(t)?"code":"key"}const F1=()=>{const t=Oe();return Q.useMemo(()=>({zoomIn:async r=>{const{panZoom:i}=t.getState();return i?i.scaleBy(1.2,r):!1},zoomOut:async r=>{const{panZoom:i}=t.getState();return i?i.scaleBy(1/1.2,r):!1},zoomTo:async(r,i)=>{const{panZoom:l}=t.getState();return l?l.scaleTo(r,i):!1},getZoom:()=>t.getState().transform[2],setViewport:async(r,i)=>{const{transform:[l,u,c],panZoom:f}=t.getState();return f?(await f.setViewport({x:r.x??l,y:r.y??u,zoom:r.zoom??c},i),!0):!1},getViewport:()=>{const[r,i,l]=t.getState().transform;return{x:r,y:i,zoom:l}},setCenter:async(r,i,l)=>t.getState().setCenter(r,i,l),fitBounds:async(r,i)=>{const{width:l,height:u,minZoom:c,maxZoom:f,panZoom:h}=t.getState(),p=rc(r,l,u,c,f,(i==null?void 0:i.padding)??.1);return h?(await h.setViewport(p,{duration:i==null?void 0:i.duration,ease:i==null?void 0:i.ease,interpolate:i==null?void 0:i.interpolate}),!0):!1},screenToFlowPosition:(r,i={})=>{const{transform:l,snapGrid:u,snapToGrid:c,domNode:f}=t.getState();if(!f)return r;const{x:h,y:p}=f.getBoundingClientRect(),y={x:r.x-h,y:r.y-p},g=i.snapGrid??u,v=i.snapToGrid??c;return wi(y,l,v,g)},flowToScreenPosition:r=>{const{transform:i,domNode:l}=t.getState();if(!l)return r;const{x:u,y:c}=l.getBoundingClientRect(),f=so(r,i);return{x:f.x+u,y:f.y+c}}}),[])};function dg(t,r){const i=[],l=new Map,u=[];for(const c of t)if(c.type==="add"){u.push(c);continue}else if(c.type==="remove"||c.type==="replace")l.set(c.id,[c]);else{const f=l.get(c.id);f?f.push(c):l.set(c.id,[c])}for(const c of r){const f=l.get(c.id);if(!f){i.push(c);continue}if(f[0].type==="remove")continue;if(f[0].type==="replace"){i.push({...f[0].item});continue}const h={...c};for(const p of f)H1(p,h);i.push(h)}return u.length&&u.forEach(c=>{c.index!==void 0?i.splice(c.index,0,{...c.item}):i.push({...c.item})}),i}function H1(t,r){switch(t.type){case"select":{r.selected=t.selected;break}case"position":{typeof t.position<"u"&&(r.position=t.position),typeof t.dragging<"u"&&(r.dragging=t.dragging);break}case"dimensions":{typeof t.dimensions<"u"&&(r.measured={...t.dimensions},t.setAttributes&&((t.setAttributes===!0||t.setAttributes==="width")&&(r.width=t.dimensions.width),(t.setAttributes===!0||t.setAttributes==="height")&&(r.height=t.dimensions.height))),typeof t.resizing=="boolean"&&(r.resizing=t.resizing);break}}}function V1(t,r){return dg(t,r)}function B1(t,r){return dg(t,r)}function pr(t,r){return{id:t,type:"select",selected:r}}function Jr(t,r=new Set,i=!1){const l=[];for(const[u,c]of t){const f=r.has(u);!(c.selected===void 0&&!f)&&c.selected!==f&&(i&&(c.selected=f),l.push(pr(c.id,f)))}return l}function $h({items:t=[],lookup:r}){var u;const i=[],l=new Map(t.map(c=>[c.id,c]));for(const[c,f]of t.entries()){const h=r.get(f.id),p=((u=h==null?void 0:h.internals)==null?void 0:u.userNode)??h;p!==void 0&&p!==f&&i.push({id:f.id,item:f,type:"replace"}),p===void 0&&i.push({item:f,type:"add",index:c})}for(const[c]of r)l.get(c)===void 0&&i.push({id:c,type:"remove"});return i}function Dh(t){return{id:t.id,type:"remove"}}const b1=Hp();function U1(t,r,i={}){return Mw(t,r,{...i,onError:i.onError??b1})}const Oh=t=>dw(t),W1=t=>Ap(t);function hg(t){return Q.forwardRef(t)}const pg=typeof window<"u"?Q.useLayoutEffect:Q.useEffect;function Fh(t){const[r,i]=Q.useState(BigInt(0)),[l]=Q.useState(()=>Y1(()=>i(u=>u+BigInt(1))));return pg(()=>{const u=l.get();u.length&&(t(u),l.reset())},[r]),l}function Y1(t){let r=[];return{get:()=>r,reset:()=>{r=[]},push:i=>{r.push(i),t()}}}const gg=Q.createContext(null);function X1({children:t}){const r=Oe(),i=Q.useCallback(h=>{const{nodes:p=[],setNodes:y,hasDefaultNodes:g,onNodesChange:v,nodeLookup:m,fitViewQueued:w,onNodesChangeMiddlewareMap:S}=r.getState();let P=p;for(const k of h)P=typeof k=="function"?k(P):k;let C=$h({items:P,lookup:m});for(const k of S.values())C=k(C);g&&y(P),C.length>0?v==null||v(C):w&&window.requestAnimationFrame(()=>{const{fitViewQueued:k,nodes:z,setNodes:_}=r.getState();k&&_(z)})},[]),l=Fh(i),u=Q.useCallback(h=>{const{edges:p=[],setEdges:y,hasDefaultEdges:g,onEdgesChange:v,edgeLookup:m}=r.getState();let w=p;for(const S of h)w=typeof S=="function"?S(w):S;g?y(w):v&&v($h({items:w,lookup:m}))},[]),c=Fh(u),f=Q.useMemo(()=>({nodeQueue:l,edgeQueue:c}),[]);return E.jsx(gg.Provider,{value:f,children:t})}function Q1(){const t=Q.useContext(gg);if(!t)throw new Error("useBatchContext must be used within a BatchProvider");return t}const G1=t=>!!t.panZoom;function cc(){const t=F1(),r=Oe(),i=Q1(),l=je(G1),u=Q.useMemo(()=>{const c=v=>r.getState().nodeLookup.get(v),f=v=>{i.nodeQueue.push(v)},h=v=>{i.edgeQueue.push(v)},p=v=>{var k,z;const{nodeLookup:m,nodeOrigin:w}=r.getState(),S=Oh(v)?v:m.get(v.id),P=S.parentId?Bp(S.position,S.measured,S.parentId,m,w):S.position,C={...S,position:P,width:((k=S.measured)==null?void 0:k.width)??S.width,height:((z=S.measured)==null?void 0:z.height)??S.height};return fi(C)},y=(v,m,w={replace:!1})=>{f(S=>S.map(P=>{if(P.id===v){const C=typeof m=="function"?m(P):m;return w.replace&&Oh(C)?C:{...P,...C}}return P}))},g=(v,m,w={replace:!1})=>{h(S=>S.map(P=>{if(P.id===v){const C=typeof m=="function"?m(P):m;return w.replace&&W1(C)?C:{...P,...C}}return P}))};return{getNodes:()=>r.getState().nodes.map(v=>({...v})),getNode:v=>{var m;return(m=c(v))==null?void 0:m.internals.userNode},getInternalNode:c,getEdges:()=>{const{edges:v=[]}=r.getState();return v.map(m=>({...m}))},getEdge:v=>r.getState().edgeLookup.get(v),setNodes:f,setEdges:h,addNodes:v=>{const m=Array.isArray(v)?v:[v];i.nodeQueue.push(w=>[...w,...m])},addEdges:v=>{const m=Array.isArray(v)?v:[v];i.edgeQueue.push(w=>[...w,...m])},toObject:()=>{const{nodes:v=[],edges:m=[],transform:w}=r.getState(),[S,P,C]=w;return{nodes:v.map(k=>({...k})),edges:m.map(k=>({...k})),viewport:{x:S,y:P,zoom:C}}},deleteElements:async({nodes:v=[],edges:m=[]})=>{const{nodes:w,edges:S,onNodesDelete:P,onEdgesDelete:C,triggerNodeChanges:k,triggerEdgeChanges:z,onDelete:_,onBeforeDelete:I}=r.getState(),{nodes:H,edges:$}=await yw({nodesToRemove:v,edgesToRemove:m,nodes:w,edges:S,onBeforeDelete:I}),B=$.length>0,X=H.length>0;if(B){const G=$.map(Dh);C==null||C($),z(G)}if(X){const G=H.map(Dh);P==null||P(H),k(G)}return(X||B)&&(_==null||_({nodes:H,edges:$})),{deletedNodes:H,deletedEdges:$}},getIntersectingNodes:(v,m=!0,w)=>{const S=ah(v),P=S?v:p(v),C=w!==void 0;return P?(w||r.getState().nodes).filter(k=>{const z=r.getState().nodeLookup.get(k.id);if(z&&!S&&(k.id===v.id||!z.internals.positionAbsolute))return!1;const _=fi(C?k:z),I=ll(_,P);return m&&I>0||I>=_.width*_.height||I>=P.width*P.height}):[]},isNodeIntersecting:(v,m,w=!0)=>{const P=ah(v)?v:p(v);if(!P)return!1;const C=ll(P,m);return w&&C>0||C>=m.width*m.height||C>=P.width*P.height},updateNode:y,updateNodeData:(v,m,w={replace:!1})=>{y(v,S=>{const P=typeof m=="function"?m(S):m;return w.replace?{...S,data:P}:{...S,data:{...S.data,...P}}},w)},updateEdge:g,updateEdgeData:(v,m,w={replace:!1})=>{g(v,S=>{const P=typeof m=="function"?m(S):m;return w.replace?{...S,data:P}:{...S,data:{...S.data,...P}}},w)},getNodesBounds:v=>{const{nodeLookup:m,nodeOrigin:w}=r.getState();return hw(v,{nodeLookup:m,nodeOrigin:w})},getHandleConnections:({type:v,id:m,nodeId:w})=>{var S;return Array.from(((S=r.getState().connectionLookup.get(`${w}-${v}${m?`-${m}`:""}`))==null?void 0:S.values())??[])},getNodeConnections:({type:v,handleId:m,nodeId:w})=>{var S;return Array.from(((S=r.getState().connectionLookup.get(`${w}${v?m?`-${v}-${m}`:`-${v}`:""}`))==null?void 0:S.values())??[])},fitView:async v=>{const m=r.getState().fitViewResolver??ww();return r.setState({fitViewQueued:!0,fitViewOptions:v,fitViewResolver:m}),i.nodeQueue.push(w=>[...w]),m.promise}}},[]);return Q.useMemo(()=>({...u,...t,viewportInitialized:l}),[l])}const Hh=t=>t.selected,K1=typeof window<"u"?window:void 0;function q1({deleteKeyCode:t,multiSelectionKeyCode:r}){const i=Oe(),{deleteElements:l}=cc(),u=hi(t,{actInsideInputWithModifier:!1}),c=hi(r,{target:K1});Q.useEffect(()=>{if(u){const{edges:f,nodes:h}=i.getState();l({nodes:h.filter(Hh),edges:f.filter(Hh)}),i.setState({nodesSelectionActive:!1})}},[u]),Q.useEffect(()=>{i.setState({multiSelectionActive:c})},[c])}function Z1(t){const r=Oe();Q.useEffect(()=>{const i=()=>{var u,c,f,h;if(!t.current||!(((c=(u=t.current).checkVisibility)==null?void 0:c.call(u))??!0))return!1;const l=oc(t.current);(l.height===0||l.width===0)&&((h=(f=r.getState()).onError)==null||h.call(f,"004",Zt.error004())),r.setState({width:l.width||500,height:l.height||500})};if(t.current){i(),window.addEventListener("resize",i);const l=new ResizeObserver(()=>i());return l.observe(t.current),()=>{window.removeEventListener("resize",i),l&&t.current&&l.unobserve(t.current)}}},[])}const wl={position:"absolute",width:"100%",height:"100%",top:0,left:0},J1=t=>({userSelectionActive:t.userSelectionActive,lib:t.lib,connectionInProgress:t.connection.inProgress});function eS({onPaneContextMenu:t,zoomOnScroll:r=!0,zoomOnPinch:i=!0,panOnScroll:l=!1,panActivationKeyPressed:u,panOnScrollSpeed:c=.5,panOnScrollMode:f=yr.Free,zoomOnDoubleClick:h=!0,panOnDrag:p=!0,defaultViewport:y,translateExtent:g,minZoom:v,maxZoom:m,zoomActivationKeyCode:w,preventScrolling:S=!0,children:P,noWheelClassName:C,noPanClassName:k,onViewportChange:z,isControlledViewport:_,paneClickDistance:I,selectionOnDrag:H}){const $=Oe(),B=Q.useRef(null),{userSelectionActive:X,lib:G,connectionInProgress:te}=je(J1,be),Z=hi(w),ee=Q.useRef();Z1(B);const J=Q.useCallback(N=>{z==null||z({x:N[0],y:N[1],zoom:N[2]}),_||$.setState({transform:N})},[z,_]);return Q.useEffect(()=>{if(B.current){ee.current=r1({domNode:B.current,minZoom:v,maxZoom:m,translateExtent:g,viewport:y,onDraggingChange:b=>$.setState(A=>A.paneDragging===b?A:{paneDragging:b}),onPanZoomStart:(b,A)=>{const{onViewportChangeStart:L,onMoveStart:O}=$.getState();O==null||O(b,A),L==null||L(A)},onPanZoom:(b,A)=>{const{onViewportChange:L,onMove:O}=$.getState();O==null||O(b,A),L==null||L(A)},onPanZoomEnd:(b,A)=>{const{onViewportChangeEnd:L,onMoveEnd:O}=$.getState();O==null||O(b,A),L==null||L(A)}});const{x:N,y:U,zoom:V}=ee.current.getViewport();return $.setState({panZoom:ee.current,transform:[N,U,V],domNode:B.current.closest(".react-flow")}),()=>{var b;(b=ee.current)==null||b.destroy()}}},[]),Q.useEffect(()=>{var N;(N=ee.current)==null||N.update({onPaneContextMenu:t,zoomOnScroll:r,zoomOnPinch:i,panOnScroll:l,panActivationKeyPressed:u,panOnScrollSpeed:c,panOnScrollMode:f,zoomOnDoubleClick:h,panOnDrag:p,zoomActivationKeyPressed:Z,preventScrolling:S,noPanClassName:k,userSelectionActive:X,noWheelClassName:C,lib:G,onTransformChange:J,connectionInProgress:te,selectionOnDrag:H,paneClickDistance:I})},[t,r,i,l,u,c,f,h,p,Z,S,k,X,C,G,J,te,H,I]),E.jsx("div",{className:"react-flow__renderer",ref:B,style:wl,children:P})}const tS=t=>({userSelectionActive:t.userSelectionActive,userSelectionRect:t.userSelectionRect});function nS(){const{userSelectionActive:t,userSelectionRect:r}=je(tS,be);return t&&r?E.jsx("div",{className:"react-flow__selection react-flow__container",style:{width:r.width,height:r.height,transform:`translate(${r.x}px, ${r.y}px)`}}):null}const Ia=(t,r)=>i=>{i.target===r.current&&(t==null||t(i))},rS=t=>({userSelectionActive:t.userSelectionActive,elementsSelectable:t.elementsSelectable,dragging:t.paneDragging,panBy:t.panBy,autoPanSpeed:t.autoPanSpeed});function oS({isSelecting:t,selectionKeyPressed:r,selectionMode:i=ci.Full,panOnDrag:l,autoPanOnSelection:u,paneClickDistance:c,selectionOnDrag:f,onSelectionStart:h,onSelectionEnd:p,onPaneClick:y,onPaneContextMenu:g,onPaneScroll:v,onPaneMouseEnter:m,onPaneMouseMove:w,onPaneMouseLeave:S,children:P}){const C=Q.useRef(0),k=Oe(),{userSelectionActive:z,elementsSelectable:_,dragging:I,panBy:H,autoPanSpeed:$}=je(rS,be),B=_&&(t||z),X=Q.useRef(null),G=Q.useRef(),te=Q.useRef(new Set),Z=Q.useRef(new Set),ee=Q.useRef(!1),J=Q.useRef(!1),N=Q.useRef({x:0,y:0}),U=Q.useRef(!1),V=K=>{if(J.current||ee.current||k.getState().connection.inProgress){J.current=!1,ee.current=!1;return}y==null||y(K),k.getState().resetSelectedElements(),k.setState({nodesSelectionActive:!1})},b=K=>{if(Array.isArray(l)&&(l!=null&&l.includes(2))){K.preventDefault();return}g==null||g(K)},A=v?K=>v(K):void 0,L=K=>{J.current&&(K.stopPropagation(),J.current=!1)},O=K=>{var Re,Ze;if(K.pointerType==="touch"&&l!==!1&&!r)return;const{domNode:se,transform:pe}=k.getState();if(G.current=se==null?void 0:se.getBoundingClientRect(),!G.current)return;const we=K.target===X.current;if(!we&&!!K.target.closest(".nokey")||!t||!(f&&we||r)||K.button!==0||!K.isPrimary)return;(Ze=(Re=K.target)==null?void 0:Re.setPointerCapture)==null||Ze.call(Re,K.pointerId),J.current=!1;const{x:Ne,y:Pe}=qt(K.nativeEvent,G.current),Ie=wi({x:Ne,y:Pe},pe);k.setState({userSelectionRect:{width:0,height:0,startX:Ie.x,startY:Ie.y,x:Ne,y:Pe}}),we||(K.stopPropagation(),K.preventDefault())};function M(K,se){const{userSelectionRect:pe}=k.getState();if(!pe)return;const{transform:we,nodeLookup:ve,edgeLookup:me,connectionLookup:Ne,triggerNodeChanges:Pe,triggerEdgeChanges:Ie,defaultEdgeOptions:Re}=k.getState(),Ze={x:pe.startX,y:pe.startY},{x:nt,y:Qe}=so(Ze,we),Ge={startX:Ze.x,startY:Ze.y,x:Krt.id)),Z.current=new Set;const Et=(Re==null?void 0:Re.selectable)??!0;for(const rt of te.current){const ft=Ne.get(rt);if(ft)for(const{edgeId:st}of ft.values()){const dt=me.get(st);dt&&(dt.selectable??Et)&&Z.current.add(st)}}if(!ch(At,te.current)){const rt=Jr(ve,te.current,!0);Pe(rt)}if(!ch(kt,Z.current)){const rt=Jr(me,Z.current);Ie(rt)}k.setState({userSelectionRect:Ge,userSelectionActive:!0,nodesSelectionActive:!1})}function j(){if(!u||!G.current)return;const[K,se]=nc(N.current,G.current,$);H({x:K,y:se}).then(pe=>{if(!J.current||!pe){C.current=requestAnimationFrame(j);return}const{x:we,y:ve}=N.current;M(we,ve),C.current=requestAnimationFrame(j)})}const ne=()=>{cancelAnimationFrame(C.current),C.current=0,U.current=!1};Q.useEffect(()=>()=>ne(),[]);const re=K=>{const{userSelectionRect:se,transform:pe,resetSelectedElements:we}=k.getState();if(!G.current||!se)return;const{x:ve,y:me}=qt(K.nativeEvent,G.current);N.current={x:ve,y:me};const Ne=so({x:se.startX,y:se.startY},pe);if(!J.current){const Pe=r?0:c;if(Math.hypot(ve-Ne.x,me-Ne.y)<=Pe)return;we(),h==null||h(K)}J.current=!0,U.current||(j(),U.current=!0),M(ve,me)},ae=K=>{var se,pe;if(!B){K.target===X.current&&k.getState().connection.inProgress&&(ee.current=!0);return}K.button===0&&((pe=(se=K.target)==null?void 0:se.releasePointerCapture)==null||pe.call(se,K.pointerId),!z&&K.target===X.current&&k.getState().userSelectionRect&&(V==null||V(K)),k.setState({userSelectionActive:!1,userSelectionRect:null}),J.current&&(p==null||p(K),k.setState({nodesSelectionActive:te.current.size>0})),ne())},fe=K=>{var se,pe;(pe=(se=K.target)==null?void 0:se.releasePointerCapture)==null||pe.call(se,K.pointerId),ne()},ce=l===!0||Array.isArray(l)&&l.includes(0);return E.jsxs("div",{className:Xe(["react-flow__pane",{draggable:ce,dragging:I,selection:t}]),onClick:B?void 0:Ia(V,X),onContextMenu:Ia(b,X),onWheel:Ia(A,X),onPointerEnter:B?void 0:m,onPointerMove:B?re:w,onPointerUp:ae,onPointerCancel:B?fe:void 0,onPointerDownCapture:B?O:void 0,onClickCapture:B?L:void 0,onPointerLeave:S,ref:X,style:wl,children:[P,E.jsx(nS,{})]})}function Wa({id:t,store:r,unselect:i=!1,nodeRef:l}){const{addSelectedNodes:u,unselectNodesAndEdges:c,multiSelectionActive:f,nodeLookup:h,onError:p}=r.getState(),y=h.get(t);if(!y){p==null||p("012",Zt.error012(t));return}r.setState({nodesSelectionActive:!1}),y.selected?(i||y.selected&&f)&&(c({nodes:[y],edges:[]}),requestAnimationFrame(()=>{var g;return(g=l==null?void 0:l.current)==null?void 0:g.blur()})):u([t])}function mg({nodeRef:t,disabled:r=!1,noDragClassName:i,handleSelector:l,nodeId:u,isSelectable:c,nodeClickDistance:f}){const h=Oe(),[p,y]=Q.useState(!1),g=Q.useRef();return Q.useEffect(()=>{if(!r)return g.current=bw({getStoreItems:()=>h.getState(),onNodeMouseDown:v=>{Wa({id:v,store:h,nodeRef:t})},onDragStart:()=>{y(!0)},onDragStop:()=>{y(!1)}}),()=>{var v;(v=g.current)==null||v.destroy(),g.current=void 0}},[r,h,t]),Q.useEffect(()=>{r||!t.current||!g.current||g.current.update({noDragClassName:i,handleSelector:l,domNode:t.current,isSelectable:c,nodeId:u,nodeClickDistance:f})},[i,l,r,c,t,u,f]),p}const iS=t=>r=>r.selected&&(r.draggable||t&&typeof r.draggable>"u");function yg(){const t=Oe();return Q.useCallback(i=>{const{nodeExtent:l,snapToGrid:u,snapGrid:c,nodesDraggable:f,onError:h,updateNodePositions:p,nodeLookup:y,nodeOrigin:g}=t.getState(),v=new Map,m=iS(f),w=u?c[0]:5,S=u?c[1]:5,P=i.direction.x*w*i.factor,C=i.direction.y*S*i.factor;for(const[,k]of y){if(!m(k))continue;let z={x:k.internals.positionAbsolute.x+P,y:k.internals.positionAbsolute.y+C};u&&(z=xi(z,c));const{position:_,positionAbsolute:I}=$p({nodeId:k.id,nextPosition:z,nodeLookup:y,nodeExtent:l,nodeOrigin:g,onError:h});k.position=_,k.internals.positionAbsolute=I,v.set(k.id,k)}p(v)},[])}const fc=Q.createContext(null),sS=fc.Provider;fc.Consumer;const vg=()=>Q.useContext(fc),lS=t=>({connectOnClick:t.connectOnClick,noPanClassName:t.noPanClassName,rfId:t.rfId}),xg=Q.createContext(null);function uS({children:t}){const r=je(lS,be);return E.jsx(xg.Provider,{value:r,children:t})}function aS(){const t=Q.useContext(xg);if(!t)throw new Error("useHandleConfig must be used within a HandleConfigProvider");return t}const cS={connectingFrom:!1,connectingTo:!1,clickConnecting:!1,isPossibleEndHandle:!0,connectionInProcess:!1,clickConnectionInProcess:!1,valid:!1},fS=(t,r,i)=>l=>{const{connectionClickStartHandle:u,connectionMode:c,connection:f}=l,{fromHandle:h,toHandle:p,isValid:y}=f;if(!h&&!u)return cS;const g=(p==null?void 0:p.nodeId)===t&&(p==null?void 0:p.id)===r&&(p==null?void 0:p.type)===i;return{connectingFrom:(h==null?void 0:h.nodeId)===t&&(h==null?void 0:h.id)===r&&(h==null?void 0:h.type)===i,connectingTo:g,clickConnecting:(u==null?void 0:u.nodeId)===t&&(u==null?void 0:u.id)===r&&(u==null?void 0:u.type)===i,isPossibleEndHandle:c===oo.Strict?(h==null?void 0:h.type)!==i:t!==(h==null?void 0:h.nodeId)||r!==(h==null?void 0:h.id),connectionInProcess:!!h,clickConnectionInProcess:!!u,valid:g&&y}};function dS({type:t="source",position:r=Se.Top,isValidConnection:i,isConnectable:l=!0,isConnectableStart:u=!0,isConnectableEnd:c=!0,id:f,onConnect:h,children:p,className:y,onMouseDown:g,onTouchStart:v,...m},w){var U,V;const S=f||null,P=t==="target",C=Oe(),k=vg(),{connectOnClick:z,noPanClassName:_,rfId:I}=aS(),{connectingFrom:H,connectingTo:$,clickConnecting:B,isPossibleEndHandle:X,connectionInProcess:G,clickConnectionInProcess:te,valid:Z}=je(fS(k,S,t),be);k||(V=(U=C.getState()).onError)==null||V.call(U,"010",Zt.error010());const ee=b=>{const{defaultEdgeOptions:A,onConnect:L,hasDefaultEdges:O}=C.getState(),M={...A,...b};if(O){const{edges:j,setEdges:ne,onError:re}=C.getState();ne(U1(M,j,{onError:re}))}L==null||L(M),h==null||h(M)},J=b=>{if(!k)return;const A=Wp(b.nativeEvent);if(u&&(A&&b.button===0||!A)){const L=C.getState();Ua.onPointerDown(b.nativeEvent,{handleDomNode:b.currentTarget,autoPanOnConnect:L.autoPanOnConnect,connectionMode:L.connectionMode,connectionRadius:L.connectionRadius,domNode:L.domNode,nodeLookup:L.nodeLookup,lib:L.lib,isTarget:P,handleId:S,nodeId:k,flowId:L.rfId,panBy:L.panBy,cancelConnection:L.cancelConnection,onConnectStart:L.onConnectStart,onConnectEnd:(...O)=>{var M,j;return(j=(M=C.getState()).onConnectEnd)==null?void 0:j.call(M,...O)},updateConnection:L.updateConnection,onConnect:ee,isValidConnection:i||((...O)=>{var M,j;return((j=(M=C.getState()).isValidConnection)==null?void 0:j.call(M,...O))??!0}),getTransform:()=>C.getState().transform,getFromHandle:()=>C.getState().connection.fromHandle,autoPanSpeed:L.autoPanSpeed,dragThreshold:L.connectionDragThreshold})}A?g==null||g(b):v==null||v(b)},N=b=>{const{onClickConnectStart:A,onClickConnectEnd:L,connectionClickStartHandle:O,connectionMode:M,isValidConnection:j,lib:ne,rfId:re,nodeLookup:ae,connection:fe}=C.getState();if(!k||!O&&!u)return;if(!O){A==null||A(b.nativeEvent,{nodeId:k,handleId:S,handleType:t}),C.setState({connectionClickStartHandle:{nodeId:k,type:t,id:S}});return}const ce=bp(b.target),K=i||j,{connection:se,isValid:pe}=Ua.isValid(b.nativeEvent,{handle:{nodeId:k,id:S,type:t},connectionMode:M,fromNodeId:O.nodeId,fromHandleId:O.id||null,fromType:O.type,isValidConnection:K,flowId:re,doc:ce,lib:ne,nodeLookup:ae});pe&&se&&ee(se);const we=structuredClone(fe);delete we.inProgress,we.toPosition=we.toHandle?we.toHandle.position:null,L==null||L(b,we),C.setState({connectionClickStartHandle:null})};return E.jsx("div",{"data-handleid":S,"data-nodeid":k,"data-handlepos":r,"data-id":`${I}-${k}-${S}-${t}`,className:Xe(["react-flow__handle",`react-flow__handle-${r}`,"nodrag",_,y,{source:!P,target:P,connectable:l,connectablestart:u,connectableend:c,clickconnecting:B,connectingfrom:H,connectingto:$,valid:Z,connectionindicator:l&&(!G||X)&&(G||te?c:u)}]),onMouseDown:J,onTouchStart:J,onClick:z?N:void 0,ref:w,...m,children:p})}const ul=Q.memo(hg(dS));function hS({data:t,isConnectable:r,sourcePosition:i=Se.Bottom}){return E.jsxs(E.Fragment,{children:[t==null?void 0:t.label,E.jsx(ul,{type:"source",position:i,isConnectable:r})]})}function pS({data:t,isConnectable:r,targetPosition:i=Se.Top,sourcePosition:l=Se.Bottom}){return E.jsxs(E.Fragment,{children:[E.jsx(ul,{type:"target",position:i,isConnectable:r}),t==null?void 0:t.label,E.jsx(ul,{type:"source",position:l,isConnectable:r})]})}function gS(){return null}function mS({data:t,isConnectable:r,targetPosition:i=Se.Top}){return E.jsxs(E.Fragment,{children:[E.jsx(ul,{type:"target",position:i,isConnectable:r}),t==null?void 0:t.label]})}const al={ArrowUp:{x:0,y:-1},ArrowDown:{x:0,y:1},ArrowLeft:{x:-1,y:0},ArrowRight:{x:1,y:0}},Vh={input:hS,default:pS,output:mS,group:gS};function yS(t){var r,i,l,u;return t.internals.handleBounds===void 0?{width:t.width??t.initialWidth??((r=t.style)==null?void 0:r.width),height:t.height??t.initialHeight??((i=t.style)==null?void 0:i.height)}:{width:t.width??((l=t.style)==null?void 0:l.width),height:t.height??((u=t.style)==null?void 0:u.height)}}const vS=t=>{const{width:r,height:i,x:l,y:u}=vi(t.nodeLookup,{filter:c=>!!c.selected});return{width:Kt(r)?r:null,height:Kt(i)?i:null,userSelectionActive:t.userSelectionActive,transformString:`translate(${t.transform[0]}px,${t.transform[1]}px) scale(${t.transform[2]}) translate(${l}px,${u}px)`}};function xS({onSelectionContextMenu:t,noPanClassName:r,disableKeyboardA11y:i}){const l=Oe(),{width:u,height:c,transformString:f,userSelectionActive:h}=je(vS,be),p=yg(),y=Q.useRef(null);Q.useEffect(()=>{var w;i||(w=y.current)==null||w.focus({preventScroll:!0})},[i]);const g=!h&&u!==null&&c!==null;if(mg({nodeRef:y,disabled:!g}),!g)return null;const v=t?w=>{const S=l.getState().nodes.filter(P=>P.selected);t(w,S)}:void 0,m=w=>{Object.prototype.hasOwnProperty.call(al,w.key)&&(w.preventDefault(),p({direction:al[w.key],factor:w.shiftKey?4:1}))};return E.jsx("div",{className:Xe(["react-flow__nodesselection","react-flow__container",r]),style:{transform:f},children:E.jsx("div",{ref:y,className:"react-flow__nodesselection-rect",onContextMenu:v,tabIndex:i?void 0:-1,onKeyDown:i?void 0:m,style:{width:u,height:c}})})}const Bh=typeof window<"u"?window:void 0,wS=t=>({nodesSelectionActive:t.nodesSelectionActive,userSelectionActive:t.userSelectionActive});function wg({children:t,onPaneClick:r,onPaneMouseEnter:i,onPaneMouseMove:l,onPaneMouseLeave:u,onPaneContextMenu:c,onPaneScroll:f,paneClickDistance:h,deleteKeyCode:p,selectionKeyCode:y,selectionOnDrag:g,selectionMode:v,onSelectionStart:m,onSelectionEnd:w,multiSelectionKeyCode:S,panActivationKeyCode:P,zoomActivationKeyCode:C,elementsSelectable:k,zoomOnScroll:z,zoomOnPinch:_,panOnScroll:I,panOnScrollSpeed:H,panOnScrollMode:$,zoomOnDoubleClick:B,panOnDrag:X,autoPanOnSelection:G,defaultViewport:te,translateExtent:Z,minZoom:ee,maxZoom:J,preventScrolling:N,onSelectionContextMenu:U,noWheelClassName:V,noPanClassName:b,disableKeyboardA11y:A,onViewportChange:L,isControlledViewport:O}){const{nodesSelectionActive:M,userSelectionActive:j}=je(wS,be),ne=hi(y,{target:Bh}),re=hi(P,{target:Bh}),ae=re||X,fe=re||I,ce=g&&ae!==!0,K=ne||j||ce;return q1({deleteKeyCode:p,multiSelectionKeyCode:S}),E.jsx(eS,{onPaneContextMenu:c,elementsSelectable:k,zoomOnScroll:z,zoomOnPinch:_,panOnScroll:fe,panActivationKeyPressed:re,panOnScrollSpeed:H,panOnScrollMode:$,zoomOnDoubleClick:B,panOnDrag:!ne&&ae,defaultViewport:te,translateExtent:Z,minZoom:ee,maxZoom:J,zoomActivationKeyCode:C,preventScrolling:N,noWheelClassName:V,noPanClassName:b,onViewportChange:L,isControlledViewport:O,paneClickDistance:h,selectionOnDrag:ce,children:E.jsxs(oS,{onSelectionStart:m,onSelectionEnd:w,onPaneClick:r,onPaneMouseEnter:i,onPaneMouseMove:l,onPaneMouseLeave:u,onPaneContextMenu:c,onPaneScroll:f,panOnDrag:ae,autoPanOnSelection:G,isSelecting:!!K,selectionMode:v,selectionKeyPressed:ne,paneClickDistance:h,selectionOnDrag:ce,children:[t,M&&E.jsx(xS,{onSelectionContextMenu:U,noPanClassName:b,disableKeyboardA11y:A})]})})}wg.displayName="FlowRenderer";const SS=Q.memo(wg),_S=t=>r=>t?tc(r.nodeLookup,{x:0,y:0,width:r.width,height:r.height},r.transform,!0).map(i=>i.id):Array.from(r.nodeLookup.keys());function kS(t){return je(Q.useCallback(_S(t),[t]),be)}const ES=t=>t.updateNodeInternals;function NS(){const t=je(ES),[r]=Q.useState(()=>typeof ResizeObserver>"u"?null:new ResizeObserver(i=>{const l=new Map;i.forEach(u=>{const c=u.target.getAttribute("data-id");l.set(c,{id:c,nodeElement:u.target,force:!0})}),t(l)}));return Q.useEffect(()=>()=>{r==null||r.disconnect()},[r]),r}function CS({node:t,nodeType:r,hasDimensions:i,resizeObserver:l}){const u=Oe(),c=Q.useRef(null),f=Q.useRef(null),h=Q.useRef(t.sourcePosition),p=Q.useRef(t.targetPosition),y=Q.useRef(r),g=i&&!!t.internals.handleBounds;return Q.useEffect(()=>{c.current&&!t.hidden&&(!g||f.current!==c.current)&&(f.current&&(l==null||l.unobserve(f.current)),l==null||l.observe(c.current),f.current=c.current)},[g,t.hidden]),Q.useEffect(()=>()=>{f.current&&(l==null||l.unobserve(f.current),f.current=null)},[]),Q.useEffect(()=>{if(c.current){const v=y.current!==r,m=h.current!==t.sourcePosition,w=p.current!==t.targetPosition;(v||m||w)&&(y.current=r,h.current=t.sourcePosition,p.current=t.targetPosition,u.getState().updateNodeInternals(new Map([[t.id,{id:t.id,nodeElement:c.current,force:!0}]])))}},[t.id,r,t.sourcePosition,t.targetPosition]),c}function MS({id:t,onClick:r,onMouseEnter:i,onMouseMove:l,onMouseLeave:u,onContextMenu:c,onDoubleClick:f,nodesDraggable:h,elementsSelectable:p,nodesConnectable:y,nodesFocusable:g,resizeObserver:v,noDragClassName:m,noPanClassName:w,disableKeyboardA11y:S,rfId:P,nodeTypes:C,nodeClickDistance:k,onError:z}){const{node:_,internals:I,isParent:H}=je(K=>{const se=K.nodeLookup.get(t),pe=K.parentLookup.has(t);return{node:se,internals:se.internals,isParent:pe}},be);let $=_.type||"default",B=(C==null?void 0:C[$])||Vh[$];B===void 0&&(z==null||z("003",Zt.error003($)),$="default",B=(C==null?void 0:C.default)||Vh.default);const X=!!(_.draggable||h&&typeof _.draggable>"u"),G=!!(_.selectable||p&&typeof _.selectable>"u"),te=!!(_.connectable||y&&typeof _.connectable>"u"),Z=!!(_.focusable||g&&typeof _.focusable>"u"),ee=Oe(),J=Vp(_),N=CS({node:_,nodeType:$,hasDimensions:J,resizeObserver:v}),U=mg({nodeRef:N,disabled:_.hidden||!X,noDragClassName:m,handleSelector:_.dragHandle,nodeId:t,isSelectable:G,nodeClickDistance:k}),V=yg();if(_.hidden)return null;const b=en(_),A=yS(_),L=G||X||r||i||l||u,O=i?K=>i(K,{...I.userNode}):void 0,M=l?K=>l(K,{...I.userNode}):void 0,j=u?K=>u(K,{...I.userNode}):void 0,ne=c?K=>c(K,{...I.userNode}):void 0,re=f?K=>f(K,{...I.userNode}):void 0,ae=K=>{const{selectNodesOnDrag:se,nodeDragThreshold:pe}=ee.getState();G&&(!se||!X||pe>0)&&Wa({id:t,store:ee,nodeRef:N}),r&&r(K,{...I.userNode})},fe=K=>{if(!(Up(K.nativeEvent)||S)){if(jp.includes(K.key)&&G){const se=K.key==="Escape";Wa({id:t,store:ee,unselect:se,nodeRef:N})}else if(X&&_.selected&&Object.prototype.hasOwnProperty.call(al,K.key)){K.preventDefault();const{ariaLabelConfig:se}=ee.getState();ee.setState({ariaLiveMessage:se["node.a11yDescription.ariaLiveMessage"]({direction:K.key.replace("Arrow","").toLowerCase(),x:~~I.positionAbsolute.x,y:~~I.positionAbsolute.y})}),V({direction:al[K.key],factor:K.shiftKey?4:1})}}},ce=()=>{var Ne;if(S||!((Ne=N.current)!=null&&Ne.matches(":focus-visible")))return;const{transform:K,width:se,height:pe,autoPanOnNodeFocus:we,setCenter:ve}=ee.getState();if(!we)return;tc(new Map([[t,_]]),{x:0,y:0,width:se,height:pe},K,!0).length>0||ve(_.position.x+b.width/2,_.position.y+b.height/2,{zoom:K[2]})};return E.jsx("div",{className:Xe(["react-flow__node",`react-flow__node-${$}`,{[w]:X},_.className,{selected:_.selected,selectable:G,parent:H,draggable:X,dragging:U}]),ref:N,style:{zIndex:I.z,transform:`translate(${I.positionAbsolute.x}px,${I.positionAbsolute.y}px)`,pointerEvents:L?"all":"none",visibility:J?"visible":"hidden",..._.style,...A},"data-id":t,"data-testid":`rf__node-${t}`,onMouseEnter:O,onMouseMove:M,onMouseLeave:j,onContextMenu:ne,onClick:ae,onDoubleClick:re,onKeyDown:Z?fe:void 0,tabIndex:Z?0:void 0,onFocus:Z?ce:void 0,role:_.ariaRole??(Z?"group":void 0),"aria-roledescription":"node","aria-describedby":S?void 0:`${ag}-${P}`,"aria-label":_.ariaLabel,..._.domAttributes,children:E.jsx(sS,{value:t,children:E.jsx(B,{id:t,data:_.data,type:$,positionAbsoluteX:I.positionAbsolute.x,positionAbsoluteY:I.positionAbsolute.y,selected:_.selected??!1,selectable:G,draggable:X,deletable:_.deletable??!0,isConnectable:te,sourcePosition:_.sourcePosition,targetPosition:_.targetPosition,dragging:U,dragHandle:_.dragHandle,zIndex:I.z,parentId:_.parentId,...b})})})}var PS=Q.memo(MS);const IS=t=>({nodesConnectable:t.nodesConnectable,nodesFocusable:t.nodesFocusable,elementsSelectable:t.elementsSelectable,onError:t.onError});function Sg(t){const{nodesConnectable:r,nodesFocusable:i,elementsSelectable:l,onError:u}=je(IS,be),c=kS(t.onlyRenderVisibleElements),f=NS();return E.jsx("div",{className:"react-flow__nodes",style:wl,children:c.map(h=>E.jsx(PS,{id:h,nodeTypes:t.nodeTypes,nodeExtent:t.nodeExtent,onClick:t.onNodeClick,onMouseEnter:t.onNodeMouseEnter,onMouseMove:t.onNodeMouseMove,onMouseLeave:t.onNodeMouseLeave,onContextMenu:t.onNodeContextMenu,onDoubleClick:t.onNodeDoubleClick,noDragClassName:t.noDragClassName,noPanClassName:t.noPanClassName,rfId:t.rfId,disableKeyboardA11y:t.disableKeyboardA11y,resizeObserver:f,nodesDraggable:t.nodesDraggable??!0,nodesConnectable:r,nodesFocusable:i,elementsSelectable:l,nodeClickDistance:t.nodeClickDistance,onError:u},h))})}Sg.displayName="NodeRenderer";const TS=Q.memo(Sg);function jS(t){return je(Q.useCallback(i=>{if(!t)return i.edges.map(u=>u.id);const l=[];if(i.width&&i.height)for(const u of i.edges){const c=i.nodeLookup.get(u.source),f=i.nodeLookup.get(u.target);c&&f&&Ew({sourceNode:c,targetNode:f,width:i.width,height:i.height,transform:i.transform})&&l.push(u.id)}return l},[t]),be)}const zS=({color:t="none",strokeWidth:r=1})=>{const i={strokeWidth:r,...t&&{stroke:t}};return E.jsx("polyline",{className:"arrow",style:i,strokeLinecap:"round",fill:"none",strokeLinejoin:"round",points:"-5,-4 0,0 -5,4"})},RS=({color:t="none",strokeWidth:r=1})=>{const i={strokeWidth:r,...t&&{stroke:t,fill:t}};return E.jsx("polyline",{className:"arrowclosed",style:i,strokeLinecap:"round",strokeLinejoin:"round",points:"-5,-4 0,0 -5,4 -5,-4"})},bh={[il.Arrow]:zS,[il.ArrowClosed]:RS};function LS(t){const r=Oe();return Q.useMemo(()=>{var u,c;return Object.prototype.hasOwnProperty.call(bh,t)?bh[t]:((c=(u=r.getState()).onError)==null||c.call(u,"009",Zt.error009(t)),null)},[t])}const AS=({id:t,type:r,color:i,width:l=12.5,height:u=12.5,markerUnits:c="strokeWidth",strokeWidth:f,orient:h="auto-start-reverse"})=>{const p=LS(r);return p?E.jsx("marker",{className:"react-flow__arrowhead",id:t,markerWidth:`${l}`,markerHeight:`${u}`,viewBox:"-10 -10 20 20",markerUnits:c,orient:h,refX:"0",refY:"0",children:E.jsx(p,{color:i,strokeWidth:f})}):null},_g=({defaultColor:t,rfId:r})=>{const i=je(c=>c.edges),l=je(c=>c.defaultEdgeOptions),u=Q.useMemo(()=>zw(i,{id:r,defaultColor:t,defaultMarkerStart:l==null?void 0:l.markerStart,defaultMarkerEnd:l==null?void 0:l.markerEnd}),[i,l,r,t]);return u.length?E.jsx("svg",{className:"react-flow__marker","aria-hidden":"true",children:E.jsx("defs",{children:u.map(c=>E.jsx(AS,{id:c.id,type:c.type,color:c.color,width:c.width,height:c.height,markerUnits:c.markerUnits,strokeWidth:c.strokeWidth,orient:c.orient},c.id))})}):null};_g.displayName="MarkerDefinitions";var $S=Q.memo(_g);function kg({x:t,y:r,label:i,labelStyle:l,labelShowBg:u=!0,labelBgStyle:c,labelBgPadding:f=[2,4],labelBgBorderRadius:h=2,children:p,className:y,...g}){const[v,m]=Q.useState({x:1,y:0,width:0,height:0}),w=Xe(["react-flow__edge-textwrapper",y]),S=Q.useRef(null);return Q.useEffect(()=>{if(S.current){const P=S.current.getBBox();m({x:P.x,y:P.y,width:P.width,height:P.height})}},[i]),i?E.jsxs("g",{transform:`translate(${t-v.width/2} ${r-v.height/2})`,className:w,visibility:v.width?"visible":"hidden",...g,children:[u&&E.jsx("rect",{width:v.width+2*f[0],x:-f[0],y:-f[1],height:v.height+2*f[1],className:"react-flow__edge-textbg",style:c,rx:h,ry:h}),E.jsx("text",{className:"react-flow__edge-text",y:v.height/2,dy:"0.3em",ref:S,style:l,children:i}),p]}):null}kg.displayName="EdgeText";const DS=Q.memo(kg);function Sl({path:t,labelX:r,labelY:i,label:l,labelStyle:u,labelShowBg:c,labelBgStyle:f,labelBgPadding:h,labelBgBorderRadius:p,interactionWidth:y=20,...g}){return E.jsxs(E.Fragment,{children:[E.jsx("path",{...g,d:t,fill:"none",className:Xe(["react-flow__edge-path",g.className])}),y?E.jsx("path",{d:t,fill:"none",strokeOpacity:0,strokeWidth:y,className:"react-flow__edge-interaction"}):null,l&&Kt(r)&&Kt(i)?E.jsx(DS,{x:r,y:i,label:l,labelStyle:u,labelShowBg:c,labelBgStyle:f,labelBgPadding:h,labelBgBorderRadius:p}):null]})}function Uh({pos:t,x1:r,y1:i,x2:l,y2:u}){return t===Se.Left||t===Se.Right?[.5*(r+l),i]:[r,.5*(i+u)]}function Eg({sourceX:t,sourceY:r,sourcePosition:i=Se.Bottom,targetX:l,targetY:u,targetPosition:c=Se.Top}){const[f,h]=Uh({pos:i,x1:t,y1:r,x2:l,y2:u}),[p,y]=Uh({pos:c,x1:l,y1:u,x2:t,y2:r}),[g,v,m,w]=Yp({sourceX:t,sourceY:r,targetX:l,targetY:u,sourceControlX:f,sourceControlY:h,targetControlX:p,targetControlY:y});return[`M${t},${r} C${f},${h} ${p},${y} ${l},${u}`,g,v,m,w]}function Ng(t){return Q.memo(({id:r,sourceX:i,sourceY:l,targetX:u,targetY:c,sourcePosition:f,targetPosition:h,label:p,labelStyle:y,labelShowBg:g,labelBgStyle:v,labelBgPadding:m,labelBgBorderRadius:w,style:S,markerEnd:P,markerStart:C,interactionWidth:k})=>{const[z,_,I]=Eg({sourceX:i,sourceY:l,sourcePosition:f,targetX:u,targetY:c,targetPosition:h}),H=t.isInternal?void 0:r;return E.jsx(Sl,{id:H,path:z,labelX:_,labelY:I,label:p,labelStyle:y,labelShowBg:g,labelBgStyle:v,labelBgPadding:m,labelBgBorderRadius:w,style:S,markerEnd:P,markerStart:C,interactionWidth:k})})}const OS=Ng({isInternal:!1}),Cg=Ng({isInternal:!0});OS.displayName="SimpleBezierEdge";Cg.displayName="SimpleBezierEdgeInternal";function Mg(t){return Q.memo(({id:r,sourceX:i,sourceY:l,targetX:u,targetY:c,label:f,labelStyle:h,labelShowBg:p,labelBgStyle:y,labelBgPadding:g,labelBgBorderRadius:v,style:m,sourcePosition:w=Se.Bottom,targetPosition:S=Se.Top,markerEnd:P,markerStart:C,pathOptions:k,interactionWidth:z})=>{const[_,I,H]=Va({sourceX:i,sourceY:l,sourcePosition:w,targetX:u,targetY:c,targetPosition:S,borderRadius:k==null?void 0:k.borderRadius,offset:k==null?void 0:k.offset,stepPosition:k==null?void 0:k.stepPosition}),$=t.isInternal?void 0:r;return E.jsx(Sl,{id:$,path:_,labelX:I,labelY:H,label:f,labelStyle:h,labelShowBg:p,labelBgStyle:y,labelBgPadding:g,labelBgBorderRadius:v,style:m,markerEnd:P,markerStart:C,interactionWidth:z})})}const Pg=Mg({isInternal:!1}),Ig=Mg({isInternal:!0});Pg.displayName="SmoothStepEdge";Ig.displayName="SmoothStepEdgeInternal";function Tg(t){return Q.memo(({id:r,...i})=>{var u;const l=t.isInternal?void 0:r;return E.jsx(Pg,{...i,id:l,pathOptions:Q.useMemo(()=>{var c;return{borderRadius:0,offset:(c=i.pathOptions)==null?void 0:c.offset}},[(u=i.pathOptions)==null?void 0:u.offset])})})}const FS=Tg({isInternal:!1}),jg=Tg({isInternal:!0});FS.displayName="StepEdge";jg.displayName="StepEdgeInternal";function zg(t){return Q.memo(({id:r,sourceX:i,sourceY:l,targetX:u,targetY:c,label:f,labelStyle:h,labelShowBg:p,labelBgStyle:y,labelBgPadding:g,labelBgBorderRadius:v,style:m,markerEnd:w,markerStart:S,interactionWidth:P})=>{const[C,k,z]=Gp({sourceX:i,sourceY:l,targetX:u,targetY:c}),_=t.isInternal?void 0:r;return E.jsx(Sl,{id:_,path:C,labelX:k,labelY:z,label:f,labelStyle:h,labelShowBg:p,labelBgStyle:y,labelBgPadding:g,labelBgBorderRadius:v,style:m,markerEnd:w,markerStart:S,interactionWidth:P})})}const HS=zg({isInternal:!1}),Rg=zg({isInternal:!0});HS.displayName="StraightEdge";Rg.displayName="StraightEdgeInternal";function Lg(t){return Q.memo(({id:r,sourceX:i,sourceY:l,targetX:u,targetY:c,sourcePosition:f=Se.Bottom,targetPosition:h=Se.Top,label:p,labelStyle:y,labelShowBg:g,labelBgStyle:v,labelBgPadding:m,labelBgBorderRadius:w,style:S,markerEnd:P,markerStart:C,pathOptions:k,interactionWidth:z})=>{const[_,I,H]=Xp({sourceX:i,sourceY:l,sourcePosition:f,targetX:u,targetY:c,targetPosition:h,curvature:k==null?void 0:k.curvature}),$=t.isInternal?void 0:r;return E.jsx(Sl,{id:$,path:_,labelX:I,labelY:H,label:p,labelStyle:y,labelShowBg:g,labelBgStyle:v,labelBgPadding:m,labelBgBorderRadius:w,style:S,markerEnd:P,markerStart:C,interactionWidth:z})})}const VS=Lg({isInternal:!1}),Ag=Lg({isInternal:!0});VS.displayName="BezierEdge";Ag.displayName="BezierEdgeInternal";const Wh={default:Ag,straight:Rg,step:jg,smoothstep:Ig,simplebezier:Cg},Yh={sourceX:null,sourceY:null,targetX:null,targetY:null,sourcePosition:null,targetPosition:null,zIndex:void 0},BS=(t,r,i)=>i===Se.Left?t-r:i===Se.Right?t+r:t,bS=(t,r,i)=>i===Se.Top?t-r:i===Se.Bottom?t+r:t,Xh="react-flow__edgeupdater";function Qh({position:t,centerX:r,centerY:i,radius:l=10,onMouseDown:u,onMouseEnter:c,onMouseOut:f,type:h}){return E.jsx("circle",{onMouseDown:u,onMouseEnter:c,onMouseOut:f,className:Xe([Xh,`${Xh}-${h}`]),cx:BS(r,l,t),cy:bS(i,l,t),r:l,stroke:"transparent",fill:"transparent"})}function US({isReconnectable:t,reconnectRadius:r,edge:i,sourceX:l,sourceY:u,targetX:c,targetY:f,sourcePosition:h,targetPosition:p,onReconnect:y,onReconnectStart:g,onReconnectEnd:v,setReconnecting:m,setUpdateHover:w}){const S=Oe(),P=(I,H)=>{if(I.button!==0)return;const{autoPanOnConnect:$,domNode:B,connectionMode:X,connectionRadius:G,lib:te,onConnectStart:Z,cancelConnection:ee,nodeLookup:J,rfId:N,panBy:U,updateConnection:V}=S.getState(),b=H.type==="target",A=(M,j)=>{m(!1),v==null||v(M,i,H.type,j)},L=M=>y==null?void 0:y(i,M),O=(M,j)=>{m(!0),g==null||g(I,i,H.type),Z==null||Z(M,j)};Ua.onPointerDown(I.nativeEvent,{autoPanOnConnect:$,connectionMode:X,connectionRadius:G,domNode:B,handleId:H.id,nodeId:H.nodeId,nodeLookup:J,isTarget:b,edgeUpdaterType:H.type,lib:te,flowId:N,cancelConnection:ee,panBy:U,isValidConnection:(...M)=>{var j,ne;return((ne=(j=S.getState()).isValidConnection)==null?void 0:ne.call(j,...M))??!0},onConnect:L,onConnectStart:O,onConnectEnd:(...M)=>{var j,ne;return(ne=(j=S.getState()).onConnectEnd)==null?void 0:ne.call(j,...M)},onReconnectEnd:A,updateConnection:V,getTransform:()=>S.getState().transform,getFromHandle:()=>S.getState().connection.fromHandle,dragThreshold:S.getState().connectionDragThreshold,handleDomNode:I.currentTarget})},C=I=>P(I,{nodeId:i.target,id:i.targetHandle??null,type:"target"}),k=I=>P(I,{nodeId:i.source,id:i.sourceHandle??null,type:"source"}),z=()=>w(!0),_=()=>w(!1);return E.jsxs(E.Fragment,{children:[(t===!0||t==="source")&&E.jsx(Qh,{position:h,centerX:l,centerY:u,radius:r,onMouseDown:C,onMouseEnter:z,onMouseOut:_,type:"source"}),(t===!0||t==="target")&&E.jsx(Qh,{position:p,centerX:c,centerY:f,radius:r,onMouseDown:k,onMouseEnter:z,onMouseOut:_,type:"target"})]})}function WS({id:t,edgesFocusable:r,edgesReconnectable:i,elementsSelectable:l,onClick:u,onDoubleClick:c,onContextMenu:f,onMouseEnter:h,onMouseMove:p,onMouseLeave:y,reconnectRadius:g,onReconnect:v,onReconnectStart:m,onReconnectEnd:w,rfId:S,edgeTypes:P,noPanClassName:C,onError:k,disableKeyboardA11y:z}){let _=je(ve=>ve.edgeLookup.get(t));const I=je(ve=>ve.defaultEdgeOptions);_=I?{...I,..._}:_;let H=_.type||"default",$=(P==null?void 0:P[H])||Wh[H];$===void 0&&(k==null||k("011",Zt.error011(H)),H="default",$=(P==null?void 0:P.default)||Wh.default);const B=!!(_.focusable||r&&typeof _.focusable>"u"),X=typeof v<"u"&&(_.reconnectable||i&&typeof _.reconnectable>"u"),G=!!(_.selectable||l&&typeof _.selectable>"u"),te=Q.useRef(null),[Z,ee]=Q.useState(!1),[J,N]=Q.useState(!1),U=Oe(),{zIndex:V=_.zIndex,sourceX:b,sourceY:A,targetX:L,targetY:O,sourcePosition:M,targetPosition:j}=je(Q.useCallback(ve=>{const me=ve.nodeLookup.get(_.source),Ne=ve.nodeLookup.get(_.target);if(!me||!Ne)return Yh;const Pe=jw({id:t,sourceNode:me,targetNode:Ne,sourceHandle:_.sourceHandle||null,targetHandle:_.targetHandle||null,connectionMode:ve.connectionMode,onError:k}),Ie=kw({selected:_.selected,zIndex:_.zIndex,sourceNode:me,targetNode:Ne,elevateOnSelect:ve.elevateEdgesOnSelect,zIndexMode:ve.zIndexMode});return{...Pe||Yh,zIndex:Ie}},[_.source,_.target,_.sourceHandle,_.targetHandle,_.selected,_.zIndex,k]),be),ne=Q.useMemo(()=>_.markerStart?`url('#${Ba(_.markerStart,S)}')`:void 0,[_.markerStart,S]),re=Q.useMemo(()=>_.markerEnd?`url('#${Ba(_.markerEnd,S)}')`:void 0,[_.markerEnd,S]);if(_.hidden||b===null||A===null||L===null||O===null)return null;const ae=ve=>{var Ie;const{addSelectedEdges:me,unselectNodesAndEdges:Ne,multiSelectionActive:Pe}=U.getState();G&&(U.setState({nodesSelectionActive:!1}),_.selected&&Pe?(Ne({nodes:[],edges:[_]}),(Ie=te.current)==null||Ie.blur()):me([t])),u&&u(ve,_)},fe=c?ve=>{c(ve,{..._})}:void 0,ce=f?ve=>{f(ve,{..._})}:void 0,K=h?ve=>{h(ve,{..._})}:void 0,se=p?ve=>{p(ve,{..._})}:void 0,pe=y?ve=>{y(ve,{..._})}:void 0,we=ve=>{var me;if(!z&&jp.includes(ve.key)&&G){const{unselectNodesAndEdges:Ne,addSelectedEdges:Pe}=U.getState();ve.key==="Escape"?((me=te.current)==null||me.blur(),Ne({edges:[_]})):Pe([t])}};return E.jsx("svg",{style:{zIndex:V},children:E.jsxs("g",{className:Xe(["react-flow__edge",`react-flow__edge-${H}`,_.className,C,{selected:_.selected,animated:_.animated,inactive:!G&&!u,updating:Z,selectable:G}]),onClick:ae,onDoubleClick:fe,onContextMenu:ce,onMouseEnter:K,onMouseMove:se,onMouseLeave:pe,onKeyDown:B?we:void 0,tabIndex:B?0:void 0,role:_.ariaRole??(B?"group":"img"),"aria-roledescription":"edge","data-id":t,"data-testid":`rf__edge-${t}`,"aria-label":_.ariaLabel===null?void 0:_.ariaLabel||`Edge from ${_.source} to ${_.target}`,"aria-describedby":B?`${cg}-${S}`:void 0,ref:te,..._.domAttributes,children:[!J&&E.jsx($,{id:t,source:_.source,target:_.target,type:_.type,selected:_.selected,animated:_.animated,selectable:G,deletable:_.deletable??!0,label:_.label,labelStyle:_.labelStyle,labelShowBg:_.labelShowBg,labelBgStyle:_.labelBgStyle,labelBgPadding:_.labelBgPadding,labelBgBorderRadius:_.labelBgBorderRadius,sourceX:b,sourceY:A,targetX:L,targetY:O,sourcePosition:M,targetPosition:j,data:_.data,style:_.style,sourceHandleId:_.sourceHandle,targetHandleId:_.targetHandle,markerStart:ne,markerEnd:re,pathOptions:"pathOptions"in _?_.pathOptions:void 0,interactionWidth:_.interactionWidth}),X&&E.jsx(US,{edge:_,isReconnectable:X,reconnectRadius:g,onReconnect:v,onReconnectStart:m,onReconnectEnd:w,sourceX:b,sourceY:A,targetX:L,targetY:O,sourcePosition:M,targetPosition:j,setUpdateHover:ee,setReconnecting:N})]})})}var YS=Q.memo(WS);const XS=t=>({edgesFocusable:t.edgesFocusable,edgesReconnectable:t.edgesReconnectable,elementsSelectable:t.elementsSelectable,connectionMode:t.connectionMode,onError:t.onError});function $g({defaultMarkerColor:t,onlyRenderVisibleElements:r,rfId:i,edgeTypes:l,noPanClassName:u,onReconnect:c,onEdgeContextMenu:f,onEdgeMouseEnter:h,onEdgeMouseMove:p,onEdgeMouseLeave:y,onEdgeClick:g,reconnectRadius:v,onEdgeDoubleClick:m,onReconnectStart:w,onReconnectEnd:S,disableKeyboardA11y:P}){const{edgesFocusable:C,edgesReconnectable:k,elementsSelectable:z,onError:_}=je(XS,be),I=jS(r);return E.jsxs("div",{className:"react-flow__edges",children:[E.jsx($S,{defaultColor:t,rfId:i}),I.map(H=>E.jsx(YS,{id:H,edgesFocusable:C,edgesReconnectable:k,elementsSelectable:z,noPanClassName:u,onReconnect:c,onContextMenu:f,onMouseEnter:h,onMouseMove:p,onMouseLeave:y,onClick:g,reconnectRadius:v,onDoubleClick:m,onReconnectStart:w,onReconnectEnd:S,rfId:i,onError:_,edgeTypes:l,disableKeyboardA11y:P},H))]})}$g.displayName="EdgeRenderer";const QS=Q.memo($g),Gh=t=>`translate(${t[0]}px,${t[1]}px) scale(${t[2]})`;function GS({children:t}){const r=Oe(),i=Q.useRef(null),[l]=Q.useState(()=>r.getState().transform);return pg(()=>{let u=null;const c=()=>{const f=r.getState().transform;u&&f[0]===u[0]&&f[1]===u[1]&&f[2]===u[2]||(u=f,i.current&&(i.current.style.transform=Gh(f)))};return c(),r.subscribe(c)},[r]),E.jsx("div",{ref:i,className:"react-flow__viewport xyflow__viewport react-flow__container",style:{transform:Gh(l)},children:t})}function KS(t){const r=cc(),i=Q.useRef(!1);Q.useEffect(()=>{!i.current&&r.viewportInitialized&&t&&(setTimeout(()=>t(r),1),i.current=!0)},[t,r.viewportInitialized])}const qS=t=>{var r;return(r=t.panZoom)==null?void 0:r.syncViewport};function ZS(t){const r=je(qS),i=Oe();return Q.useEffect(()=>{t&&(r==null||r(t),i.setState({transform:[t.x,t.y,t.zoom]}))},[t,r]),null}function JS(t){return t.connection.inProgress?{...t.connection,to:wi(t.connection.to,t.transform)}:{...t.connection}}function e_(t){return JS}function t_(t){const r=e_();return je(r,be)}const n_=t=>({nodesConnectable:t.nodesConnectable,isValid:t.connection.isValid,inProgress:t.connection.inProgress,width:t.width,height:t.height});function r_({containerStyle:t,style:r,type:i,component:l}){const{nodesConnectable:u,width:c,height:f,isValid:h,inProgress:p}=je(n_,be);return!(c&&u&&p)?null:E.jsx("svg",{style:t,width:c,height:f,className:"react-flow__connectionline react-flow__container",children:E.jsx("g",{className:Xe(["react-flow__connection",Lp(h)]),children:E.jsx(Dg,{style:r,type:i,CustomComponent:l,isValid:h})})})}const Dg=({style:t,type:r=Xn.Bezier,CustomComponent:i,isValid:l})=>{const{inProgress:u,from:c,fromNode:f,fromHandle:h,fromPosition:p,to:y,toNode:g,toHandle:v,toPosition:m,pointer:w}=t_();if(!u)return;if(i)return E.jsx(i,{connectionLineType:r,connectionLineStyle:t,fromNode:f,fromHandle:h,fromX:c.x,fromY:c.y,toX:y.x,toY:y.y,fromPosition:p,toPosition:m,connectionStatus:Lp(l),toNode:g,toHandle:v,pointer:w});let S="";const P={sourceX:c.x,sourceY:c.y,sourcePosition:p,targetX:y.x,targetY:y.y,targetPosition:m};switch(r){case Xn.Bezier:[S]=Xp(P);break;case Xn.SimpleBezier:[S]=Eg(P);break;case Xn.Step:[S]=Va({...P,borderRadius:0});break;case Xn.SmoothStep:[S]=Va(P);break;default:[S]=Gp(P)}return E.jsx("path",{d:S,fill:"none",className:"react-flow__connection-path",style:t})};Dg.displayName="ConnectionLine";const o_={};function Kh(t=o_){Q.useRef(t),Oe(),Q.useEffect(()=>{},[t])}function i_(){Oe(),Q.useRef(!1),Q.useEffect(()=>{},[])}function Og({nodeTypes:t,edgeTypes:r,onInit:i,onNodeClick:l,onEdgeClick:u,onNodeDoubleClick:c,onEdgeDoubleClick:f,onNodeMouseEnter:h,onNodeMouseMove:p,onNodeMouseLeave:y,onNodeContextMenu:g,onSelectionContextMenu:v,onSelectionStart:m,onSelectionEnd:w,connectionLineType:S,connectionLineStyle:P,connectionLineComponent:C,connectionLineContainerStyle:k,selectionKeyCode:z,selectionOnDrag:_,selectionMode:I,multiSelectionKeyCode:H,panActivationKeyCode:$,zoomActivationKeyCode:B,deleteKeyCode:X,onlyRenderVisibleElements:G,elementsSelectable:te,defaultViewport:Z,translateExtent:ee,minZoom:J,maxZoom:N,preventScrolling:U,defaultMarkerColor:V,zoomOnScroll:b,zoomOnPinch:A,panOnScroll:L,panOnScrollSpeed:O,panOnScrollMode:M,zoomOnDoubleClick:j,panOnDrag:ne,autoPanOnSelection:re,onPaneClick:ae,onPaneMouseEnter:fe,onPaneMouseMove:ce,onPaneMouseLeave:K,onPaneScroll:se,onPaneContextMenu:pe,paneClickDistance:we,nodeClickDistance:ve,onEdgeContextMenu:me,onEdgeMouseEnter:Ne,onEdgeMouseMove:Pe,onEdgeMouseLeave:Ie,reconnectRadius:Re,onReconnect:Ze,onReconnectStart:nt,onReconnectEnd:Qe,noDragClassName:Ge,noWheelClassName:At,noPanClassName:kt,disableKeyboardA11y:Et,nodeExtent:rt,rfId:ft,viewport:st,onViewportChange:dt,nodesDraggable:cn}){return Kh(t),Kh(r),i_(),KS(i),ZS(st),E.jsx(SS,{onPaneClick:ae,onPaneMouseEnter:fe,onPaneMouseMove:ce,onPaneMouseLeave:K,onPaneContextMenu:pe,onPaneScroll:se,paneClickDistance:we,deleteKeyCode:X,selectionKeyCode:z,selectionOnDrag:_,selectionMode:I,onSelectionStart:m,onSelectionEnd:w,multiSelectionKeyCode:H,panActivationKeyCode:$,zoomActivationKeyCode:B,elementsSelectable:te,zoomOnScroll:b,zoomOnPinch:A,zoomOnDoubleClick:j,panOnScroll:L,panOnScrollSpeed:O,panOnScrollMode:M,panOnDrag:ne,autoPanOnSelection:re,defaultViewport:Z,translateExtent:ee,minZoom:J,maxZoom:N,onSelectionContextMenu:v,preventScrolling:U,noDragClassName:Ge,noWheelClassName:At,noPanClassName:kt,disableKeyboardA11y:Et,onViewportChange:dt,isControlledViewport:!!st,children:E.jsxs(GS,{children:[E.jsx(QS,{edgeTypes:r,onEdgeClick:u,onEdgeDoubleClick:f,onReconnect:Ze,onReconnectStart:nt,onReconnectEnd:Qe,onlyRenderVisibleElements:G,onEdgeContextMenu:me,onEdgeMouseEnter:Ne,onEdgeMouseMove:Pe,onEdgeMouseLeave:Ie,reconnectRadius:Re,defaultMarkerColor:V,noPanClassName:kt,disableKeyboardA11y:Et,rfId:ft}),E.jsx(r_,{style:P,type:S,component:C,containerStyle:k}),E.jsx("div",{className:"react-flow__edgelabel-renderer"}),E.jsx(TS,{nodeTypes:t,onNodeClick:l,onNodeDoubleClick:c,onNodeMouseEnter:h,onNodeMouseMove:p,onNodeMouseLeave:y,onNodeContextMenu:g,nodeClickDistance:ve,onlyRenderVisibleElements:G,noPanClassName:kt,noDragClassName:Ge,disableKeyboardA11y:Et,nodeExtent:rt,rfId:ft,nodesDraggable:cn}),E.jsx("div",{className:"react-flow__viewport-portal"})]})})}Og.displayName="GraphView";const s_=Q.memo(Og),l_=Hp(),qh=({nodes:t,edges:r,defaultNodes:i,defaultEdges:l,width:u,height:c,fitView:f,fitViewOptions:h,minZoom:p=.5,maxZoom:y=2,nodeOrigin:g,nodeExtent:v,zIndexMode:m="basic"}={})=>{const w=new Map,S=new Map,P=new Map,C=new Map,k=l??r??[],z=i??t??[],_=g??[0,0],I=v??ai;Zp(P,C,k);const{nodesInitialized:H}=ba(z,w,S,{nodeOrigin:_,nodeExtent:I,zIndexMode:m});let $=[0,0,1];if(f&&u&&c){const B=vi(w,{filter:Z=>!!((Z.width||Z.initialWidth)&&(Z.height||Z.initialHeight))}),{x:X,y:G,zoom:te}=rc(B,u,c,p,y,(h==null?void 0:h.padding)??.1);$=[X,G,te]}return{rfId:"1",width:u??0,height:c??0,transform:$,nodes:z,nodesInitialized:H,nodeLookup:w,parentLookup:S,edges:k,edgeLookup:C,connectionLookup:P,onNodesChange:null,onEdgesChange:null,hasDefaultNodes:i!==void 0,hasDefaultEdges:l!==void 0,panZoom:null,minZoom:p,maxZoom:y,translateExtent:ai,nodeExtent:I,nodesSelectionActive:!1,userSelectionActive:!1,userSelectionRect:null,connectionMode:oo.Strict,domNode:null,paneDragging:!1,noPanClassName:"nopan",nodeOrigin:_,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:f??!1,fitViewOptions:h,fitViewResolver:null,connection:{...Rp},connectionClickStartHandle:null,connectOnClick:!0,ariaLiveMessage:"",autoPanOnConnect:!0,autoPanOnNodeDrag:!0,autoPanOnNodeFocus:!0,autoPanSpeed:15,connectionRadius:20,onError:l_,isValidConnection:void 0,onSelectionChangeHandlers:[],lib:"react",debug:!1,ariaLabelConfig:zp,zIndexMode:m,onNodesChangeMiddlewareMap:new Map,onEdgesChangeMiddlewareMap:new Map}},u_=({nodes:t,edges:r,defaultNodes:i,defaultEdges:l,width:u,height:c,fitView:f,fitViewOptions:h,minZoom:p,maxZoom:y,nodeOrigin:g,nodeExtent:v,zIndexMode:m})=>w1((w,S)=>{async function P(){const{nodeLookup:C,panZoom:k,fitViewOptions:z,fitViewResolver:_,width:I,height:H,minZoom:$,maxZoom:B}=S();k&&(await mw({nodes:C,width:I,height:H,panZoom:k,minZoom:$,maxZoom:B},z),_==null||_.resolve(!0),w({fitViewResolver:null}))}return{...qh({nodes:t,edges:r,width:u,height:c,fitView:f,fitViewOptions:h,minZoom:p,maxZoom:y,nodeOrigin:g,nodeExtent:v,defaultNodes:i,defaultEdges:l,zIndexMode:m}),setNodes:C=>{const{nodeLookup:k,parentLookup:z,nodeOrigin:_,nodeExtent:I,elevateNodesOnSelect:H,fitViewQueued:$,zIndexMode:B,nodesSelectionActive:X}=S(),{nodesInitialized:G,hasSelectedNodes:te}=ba(C,k,z,{nodeOrigin:_,nodeExtent:I,elevateNodesOnSelect:H,checkEquality:!0,zIndexMode:B}),Z=X&&te;$&&G?(P(),w({nodes:C,nodesInitialized:G,fitViewQueued:!1,fitViewOptions:void 0,nodesSelectionActive:Z})):w({nodes:C,nodesInitialized:G,nodesSelectionActive:Z})},setEdges:C=>{const{connectionLookup:k,edgeLookup:z}=S();Zp(k,z,C),w({edges:C})},setDefaultNodesAndEdges:(C,k)=>{if(C){const{setNodes:z}=S();z(C),w({hasDefaultNodes:!0})}if(k){const{setEdges:z}=S();z(k),w({hasDefaultEdges:!0})}},updateNodeInternals:C=>{const{triggerNodeChanges:k,nodeLookup:z,parentLookup:_,domNode:I,nodeOrigin:H,nodeExtent:$,debug:B,fitViewQueued:X,zIndexMode:G}=S(),{changes:te,updatedInternals:Z}=Fw(C,z,_,I,H,$,G);Z&&(Aw(z,_,{nodeOrigin:H,nodeExtent:$,zIndexMode:G}),X?(P(),w({fitViewQueued:!1,fitViewOptions:void 0})):w({}),(te==null?void 0:te.length)>0&&(B&&console.log("React Flow: trigger node changes",te),k==null||k(te)))},updateNodePositions:(C,k=!1)=>{const z=[];let _=[];const{nodeLookup:I,triggerNodeChanges:H,connection:$,updateConnection:B,onNodesChangeMiddlewareMap:X}=S();for(const[G,te]of C){const Z=I.get(G),ee=!!(Z!=null&&Z.expandParent&&(Z!=null&&Z.parentId)&&(te!=null&&te.position)),J={id:G,type:"position",position:ee?{x:Math.max(0,te.position.x),y:Math.max(0,te.position.y)}:te.position,dragging:k};if(Z&&$.inProgress&&$.fromNode.id===Z.id){const N=_r(Z,$.fromHandle,Se.Left,!0);B({...$,from:N})}ee&&Z.parentId&&z.push({id:G,parentId:Z.parentId,rect:{...te.internals.positionAbsolute,width:te.measured.width??0,height:te.measured.height??0}}),_.push(J)}if(z.length>0){const{parentLookup:G,nodeOrigin:te}=S(),Z=ac(z,I,G,te);_.push(...Z)}for(const G of X.values())_=G(_);H(_)},triggerNodeChanges:C=>{const{onNodesChange:k,setNodes:z,nodes:_,hasDefaultNodes:I,debug:H}=S();if(C!=null&&C.length){if(I){const $=V1(C,_);z($)}H&&console.log("React Flow: trigger node changes",C),k==null||k(C)}},triggerEdgeChanges:C=>{const{onEdgesChange:k,setEdges:z,edges:_,hasDefaultEdges:I,debug:H}=S();if(C!=null&&C.length){if(I){const $=B1(C,_);z($)}H&&console.log("React Flow: trigger edge changes",C),k==null||k(C)}},addSelectedNodes:C=>{const{multiSelectionActive:k,edgeLookup:z,nodeLookup:_,triggerNodeChanges:I,triggerEdgeChanges:H}=S();if(k){const $=C.map(B=>pr(B,!0));I($);return}I(Jr(_,new Set([...C]),!0)),H(Jr(z))},addSelectedEdges:C=>{const{multiSelectionActive:k,edgeLookup:z,nodeLookup:_,triggerNodeChanges:I,triggerEdgeChanges:H}=S();if(k){const $=C.map(B=>pr(B,!0));H($);return}H(Jr(z,new Set([...C]))),I(Jr(_,new Set,!0))},unselectNodesAndEdges:({nodes:C,edges:k}={})=>{const{edges:z,nodes:_,nodeLookup:I,triggerNodeChanges:H,triggerEdgeChanges:$}=S(),B=C||_,X=k||z,G=[];for(const Z of B){if(!Z.selected)continue;const ee=I.get(Z.id);ee&&(ee.selected=!1),G.push(pr(Z.id,!1))}const te=[];for(const Z of X)Z.selected&&te.push(pr(Z.id,!1));H(G),$(te)},setMinZoom:C=>{const{panZoom:k,maxZoom:z}=S();k==null||k.setScaleExtent([C,z]),w({minZoom:C})},setMaxZoom:C=>{const{panZoom:k,minZoom:z}=S();k==null||k.setScaleExtent([z,C]),w({maxZoom:C})},setTranslateExtent:C=>{var k;(k=S().panZoom)==null||k.setTranslateExtent(C),w({translateExtent:C})},resetSelectedElements:()=>{const{edges:C,nodes:k,triggerNodeChanges:z,triggerEdgeChanges:_,elementsSelectable:I}=S();if(!I)return;const H=k.reduce((B,X)=>X.selected?[...B,pr(X.id,!1)]:B,[]),$=C.reduce((B,X)=>X.selected?[...B,pr(X.id,!1)]:B,[]);z(H),_($)},setNodeExtent:C=>{const{nodes:k,nodeLookup:z,parentLookup:_,nodeOrigin:I,elevateNodesOnSelect:H,nodeExtent:$,zIndexMode:B}=S();C[0][0]===$[0][0]&&C[0][1]===$[0][1]&&C[1][0]===$[1][0]&&C[1][1]===$[1][1]||(ba(k,z,_,{nodeOrigin:I,nodeExtent:C,elevateNodesOnSelect:H,checkEquality:!1,zIndexMode:B}),w({nodeExtent:C}))},panBy:C=>{const{transform:k,width:z,height:_,panZoom:I,translateExtent:H}=S();return Hw({delta:C,panZoom:I,transform:k,translateExtent:H,width:z,height:_})},setCenter:async(C,k,z)=>{const{width:_,height:I,maxZoom:H,panZoom:$}=S();if(!$)return!1;const B=typeof(z==null?void 0:z.zoom)<"u"?z.zoom:H;return await $.setViewport({x:_/2-C*B,y:I/2-k*B,zoom:B},{duration:z==null?void 0:z.duration,ease:z==null?void 0:z.ease,interpolate:z==null?void 0:z.interpolate}),!0},cancelConnection:()=>{w({connection:{...Rp}})},updateConnection:C=>{w({connection:C})},reset:()=>w({...qh()})}},Object.is);function Fg({initialNodes:t,initialEdges:r,defaultNodes:i,defaultEdges:l,initialWidth:u,initialHeight:c,initialMinZoom:f,initialMaxZoom:h,initialFitViewOptions:p,fitView:y,nodeOrigin:g,nodeExtent:v,zIndexMode:m,children:w}){const[S]=Q.useState(()=>u_({nodes:t,edges:r,defaultNodes:i,defaultEdges:l,width:u,height:c,fitView:y,minZoom:f,maxZoom:h,fitViewOptions:p,nodeOrigin:g,nodeExtent:v,zIndexMode:m}));return E.jsx(S1,{value:S,children:E.jsx(X1,{children:E.jsx(uS,{children:w})})})}function a_({children:t,nodes:r,edges:i,defaultNodes:l,defaultEdges:u,width:c,height:f,fitView:h,fitViewOptions:p,minZoom:y,maxZoom:g,nodeOrigin:v,nodeExtent:m,zIndexMode:w}){return Q.useContext(vl)?E.jsx(E.Fragment,{children:t}):E.jsx(Fg,{initialNodes:r,initialEdges:i,defaultNodes:l,defaultEdges:u,initialWidth:c,initialHeight:f,fitView:h,initialFitViewOptions:p,initialMinZoom:y,initialMaxZoom:g,nodeOrigin:v,nodeExtent:m,zIndexMode:w,children:t})}const c_={width:"100%",height:"100%",overflow:"hidden",position:"relative",zIndex:0};function f_({nodes:t,edges:r,defaultNodes:i,defaultEdges:l,className:u,nodeTypes:c,edgeTypes:f,onNodeClick:h,onEdgeClick:p,onInit:y,onMove:g,onMoveStart:v,onMoveEnd:m,onConnect:w,onConnectStart:S,onConnectEnd:P,onClickConnectStart:C,onClickConnectEnd:k,onNodeMouseEnter:z,onNodeMouseMove:_,onNodeMouseLeave:I,onNodeContextMenu:H,onNodeDoubleClick:$,onNodeDragStart:B,onNodeDrag:X,onNodeDragStop:G,onNodesDelete:te,onEdgesDelete:Z,onDelete:ee,onSelectionChange:J,onSelectionDragStart:N,onSelectionDrag:U,onSelectionDragStop:V,onSelectionContextMenu:b,onSelectionStart:A,onSelectionEnd:L,onBeforeDelete:O,connectionMode:M,connectionLineType:j=Xn.Bezier,connectionLineStyle:ne,connectionLineComponent:re,connectionLineContainerStyle:ae,deleteKeyCode:fe="Backspace",selectionKeyCode:ce="Shift",selectionOnDrag:K=!1,selectionMode:se=ci.Full,panActivationKeyCode:pe="Space",multiSelectionKeyCode:we=di()?"Meta":"Control",zoomActivationKeyCode:ve=di()?"Meta":"Control",snapToGrid:me,snapGrid:Ne,onlyRenderVisibleElements:Pe=!1,selectNodesOnDrag:Ie,nodesDraggable:Re,autoPanOnNodeFocus:Ze,nodesConnectable:nt,nodesFocusable:Qe,nodeOrigin:Ge=fg,edgesFocusable:At,edgesReconnectable:kt,elementsSelectable:Et=!0,defaultViewport:rt=L1,minZoom:ft=.5,maxZoom:st=2,translateExtent:dt=ai,preventScrolling:cn=!0,nodeExtent:F,defaultMarkerColor:Ce="#b1b1b7",zoomOnScroll:Nt=!0,zoomOnPinch:Gn=!0,panOnScroll:Si=!1,panOnScrollSpeed:_l=.5,panOnScrollMode:uo=yr.Free,zoomOnDoubleClick:ao=!0,panOnDrag:co=!0,onPaneClick:fo,onPaneMouseEnter:ho,onPaneMouseMove:kn,onPaneMouseLeave:En,onPaneScroll:_i,onPaneContextMenu:ki,paneClickDistance:Ei=1,nodeClickDistance:Ni=0,children:Ci,onReconnect:po,onReconnectStart:Mi,onReconnectEnd:Kn,onEdgeContextMenu:go,onEdgeDoubleClick:qn,onEdgeMouseEnter:kl,onEdgeMouseMove:Zn,onEdgeMouseLeave:kr,reconnectRadius:Er=10,onNodesChange:mo,onEdgesChange:El,noDragClassName:Nl="nodrag",noWheelClassName:Cl="nowheel",noPanClassName:tn="nopan",fitView:yo,fitViewOptions:vo,connectOnClick:Ml,attributionPosition:Pi,proOptions:Ii,defaultEdgeOptions:Ti,elevateNodesOnSelect:ji=!0,elevateEdgesOnSelect:Pl=!1,disableKeyboardA11y:zi=!1,autoPanOnConnect:He,autoPanOnNodeDrag:Il,autoPanOnSelection:xo=!0,autoPanSpeed:Ri,connectionRadius:Nr,isValidConnection:Tl,onError:Li,style:Cr,id:Ct,nodeDragThreshold:jl,connectionDragThreshold:Mt,viewport:zl,onViewportChange:Rl,width:Ll,height:Mr,colorMode:Pr="light",debug:Jn,onScroll:fn,ariaLabelConfig:Al,zIndexMode:Ai="basic",...wo},$i){const er=Ct||"1",tr=O1(Pr),$l=Q.useCallback(Ir=>{Ir.currentTarget.scrollTo({top:0,left:0,behavior:"instant"}),fn==null||fn(Ir)},[fn]);return E.jsx("div",{"data-testid":"rf__wrapper",...wo,onScroll:$l,style:{...Cr,...c_},ref:$i,className:Xe(["react-flow",u,tr]),id:Ct,role:"application",children:E.jsxs(a_,{nodes:t,edges:r,width:Ll,height:Mr,fitView:yo,fitViewOptions:vo,minZoom:ft,maxZoom:st,nodeOrigin:Ge,nodeExtent:F,zIndexMode:Ai,children:[E.jsx(D1,{nodes:t,edges:r,defaultNodes:i,defaultEdges:l,onConnect:w,onConnectStart:S,onConnectEnd:P,onClickConnectStart:C,onClickConnectEnd:k,nodesDraggable:Re,autoPanOnNodeFocus:Ze,nodesConnectable:nt,nodesFocusable:Qe,edgesFocusable:At,edgesReconnectable:kt,elementsSelectable:Et,elevateNodesOnSelect:ji,elevateEdgesOnSelect:Pl,minZoom:ft,maxZoom:st,nodeExtent:F,onNodesChange:mo,onEdgesChange:El,snapToGrid:me,snapGrid:Ne,connectionMode:M,translateExtent:dt,connectOnClick:Ml,defaultEdgeOptions:Ti,fitView:yo,fitViewOptions:vo,onNodesDelete:te,onEdgesDelete:Z,onDelete:ee,onNodeDragStart:B,onNodeDrag:X,onNodeDragStop:G,onSelectionDrag:U,onSelectionDragStart:N,onSelectionDragStop:V,onMove:g,onMoveStart:v,onMoveEnd:m,noPanClassName:tn,nodeOrigin:Ge,rfId:er,autoPanOnConnect:He,autoPanOnNodeDrag:Il,autoPanSpeed:Ri,onError:Li,connectionRadius:Nr,isValidConnection:Tl,selectNodesOnDrag:Ie,nodeDragThreshold:jl,connectionDragThreshold:Mt,onBeforeDelete:O,debug:Jn,ariaLabelConfig:Al,zIndexMode:Ai}),E.jsx(s_,{onInit:y,onNodeClick:h,onEdgeClick:p,onNodeMouseEnter:z,onNodeMouseMove:_,onNodeMouseLeave:I,onNodeContextMenu:H,onNodeDoubleClick:$,nodeTypes:c,edgeTypes:f,connectionLineType:j,connectionLineStyle:ne,connectionLineComponent:re,connectionLineContainerStyle:ae,selectionKeyCode:ce,selectionOnDrag:K,selectionMode:se,deleteKeyCode:fe,multiSelectionKeyCode:we,panActivationKeyCode:pe,zoomActivationKeyCode:ve,onlyRenderVisibleElements:Pe,defaultViewport:rt,translateExtent:dt,minZoom:ft,maxZoom:st,preventScrolling:cn,zoomOnScroll:Nt,zoomOnPinch:Gn,zoomOnDoubleClick:ao,panOnScroll:Si,panOnScrollSpeed:_l,panOnScrollMode:uo,panOnDrag:co,autoPanOnSelection:xo,onPaneClick:fo,onPaneMouseEnter:ho,onPaneMouseMove:kn,onPaneMouseLeave:En,onPaneScroll:_i,onPaneContextMenu:ki,paneClickDistance:Ei,nodeClickDistance:Ni,onSelectionContextMenu:b,onSelectionStart:A,onSelectionEnd:L,onReconnect:po,onReconnectStart:Mi,onReconnectEnd:Kn,onEdgeContextMenu:go,onEdgeDoubleClick:qn,onEdgeMouseEnter:kl,onEdgeMouseMove:Zn,onEdgeMouseLeave:kr,reconnectRadius:Er,defaultMarkerColor:Ce,noDragClassName:Nl,noWheelClassName:Cl,noPanClassName:tn,rfId:er,disableKeyboardA11y:zi,nodeExtent:F,viewport:zl,onViewportChange:Rl,nodesDraggable:Re}),E.jsx(R1,{onSelectionChange:J}),Ci,E.jsx(P1,{proOptions:Ii,position:Pi}),E.jsx(M1,{rfId:er,disableKeyboardA11y:zi})]})})}var d_=hg(f_);function h_({dimensions:t,lineWidth:r,variant:i,className:l}){return E.jsx("path",{strokeWidth:r,d:`M${t[0]/2} 0 V${t[1]} M0 ${t[1]/2} H${t[0]}`,className:Xe(["react-flow__background-pattern",i,l])})}function p_({radius:t,className:r}){return E.jsx("circle",{cx:t,cy:t,r:t,className:Xe(["react-flow__background-pattern","dots",r])})}var Qn;(function(t){t.Lines="lines",t.Dots="dots",t.Cross="cross"})(Qn||(Qn={}));const g_={[Qn.Dots]:1,[Qn.Lines]:1,[Qn.Cross]:6},m_=t=>({transform:t.transform,patternId:`pattern-${t.rfId}`});function Hg({id:t,variant:r=Qn.Dots,gap:i=20,size:l,lineWidth:u=1,offset:c=0,color:f,bgColor:h,style:p,className:y,patternClassName:g}){const v=Q.useRef(null),{transform:m,patternId:w}=je(m_,be),S=l||g_[r],P=r===Qn.Dots,C=r===Qn.Cross,k=Array.isArray(i)?i:[i,i],z=[k[0]*m[2]||1,k[1]*m[2]||1],_=S*m[2],I=Array.isArray(c)?c:[c,c],H=C?[_,_]:z,$=[I[0]*m[2]+H[0]/2,I[1]*m[2]+H[1]/2],B=`${w}${t||""}`;return E.jsxs("svg",{className:Xe(["react-flow__background",y]),style:{...p,...wl,"--xy-background-color-props":h,"--xy-background-pattern-color-props":f},ref:v,"data-testid":"rf__background",children:[E.jsx("pattern",{id:B,x:m[0]%z[0],y:m[1]%z[1],width:z[0],height:z[1],patternUnits:"userSpaceOnUse",patternTransform:`translate(-${$[0]},-${$[1]})`,children:P?E.jsx(p_,{radius:_/2,className:g}):E.jsx(h_,{dimensions:H,lineWidth:u,variant:r,className:g})}),E.jsx("rect",{x:"0",y:"0",width:"100%",height:"100%",fill:`url(#${B})`})]})}Hg.displayName="Background";const y_=Q.memo(Hg);function v_(){return E.jsx("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",children:E.jsx("path",{d:"M32 18.133H18.133V32h-4.266V18.133H0v-4.266h13.867V0h4.266v13.867H32z"})})}function x_(){return E.jsx("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 5",children:E.jsx("path",{d:"M0 0h32v4.2H0z"})})}function w_(){return E.jsx("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 30",children:E.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 S_(){return E.jsx("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 25 32",children:E.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 __(){return E.jsx("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 25 32",children:E.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 Ys({children:t,className:r,...i}){return E.jsx("button",{type:"button",className:Xe(["react-flow__controls-button",r]),...i,children:t})}const k_=t=>({isInteractive:t.nodesDraggable||t.nodesConnectable||t.elementsSelectable,minZoomReached:t.transform[2]<=t.minZoom,maxZoomReached:t.transform[2]>=t.maxZoom,ariaLabelConfig:t.ariaLabelConfig});function Vg({style:t,showZoom:r=!0,showFitView:i=!0,showInteractive:l=!0,fitViewOptions:u,onZoomIn:c,onZoomOut:f,onFitView:h,onInteractiveChange:p,className:y,children:g,position:v="bottom-left",orientation:m="vertical","aria-label":w}){const S=Oe(),{isInteractive:P,minZoomReached:C,maxZoomReached:k,ariaLabelConfig:z}=je(k_,be),{zoomIn:_,zoomOut:I,fitView:H}=cc(),$=()=>{_(),c==null||c()},B=()=>{I(),f==null||f()},X=()=>{H(u),h==null||h()},G=()=>{S.setState({nodesDraggable:!P,nodesConnectable:!P,elementsSelectable:!P}),p==null||p(!P)},te=m==="horizontal"?"horizontal":"vertical";return E.jsxs(xl,{className:Xe(["react-flow__controls",te,y]),position:v,style:t,"data-testid":"rf__controls","aria-label":w??z["controls.ariaLabel"],children:[r&&E.jsxs(E.Fragment,{children:[E.jsx(Ys,{onClick:$,className:"react-flow__controls-zoomin",title:z["controls.zoomIn.ariaLabel"],"aria-label":z["controls.zoomIn.ariaLabel"],disabled:k,children:E.jsx(v_,{})}),E.jsx(Ys,{onClick:B,className:"react-flow__controls-zoomout",title:z["controls.zoomOut.ariaLabel"],"aria-label":z["controls.zoomOut.ariaLabel"],disabled:C,children:E.jsx(x_,{})})]}),i&&E.jsx(Ys,{className:"react-flow__controls-fitview",onClick:X,title:z["controls.fitView.ariaLabel"],"aria-label":z["controls.fitView.ariaLabel"],children:E.jsx(w_,{})}),l&&E.jsx(Ys,{className:"react-flow__controls-interactive",onClick:G,title:z["controls.interactive.ariaLabel"],"aria-label":z["controls.interactive.ariaLabel"],children:P?E.jsx(__,{}):E.jsx(S_,{})}),g]})}Vg.displayName="Controls";const E_=Q.memo(Vg);function N_({id:t,x:r,y:i,width:l,height:u,style:c,color:f,strokeColor:h,strokeWidth:p,className:y,borderRadius:g,shapeRendering:v,selected:m,onClick:w}){const{background:S,backgroundColor:P}=c||{},C=f||S||P;return E.jsx("rect",{className:Xe(["react-flow__minimap-node",{selected:m},y]),x:r,y:i,rx:g,ry:g,width:l,height:u,style:{fill:C,stroke:h,strokeWidth:p},shapeRendering:v,onClick:w?k=>w(k,t):void 0})}const C_=Q.memo(N_),M_=t=>t.nodes.map(r=>r.id),Ta=t=>t instanceof Function?t:()=>t;function P_({nodeStrokeColor:t,nodeColor:r,nodeClassName:i="",nodeBorderRadius:l=5,nodeStrokeWidth:u,nodeComponent:c=C_,onClick:f}){const h=je(M_,be),p=Ta(r),y=Ta(t),g=Ta(i),v=typeof window>"u"||window.chrome?"crispEdges":"geometricPrecision";return E.jsx(E.Fragment,{children:h.map(m=>E.jsx(T_,{id:m,nodeColorFunc:p,nodeStrokeColorFunc:y,nodeClassNameFunc:g,nodeBorderRadius:l,nodeStrokeWidth:u,NodeComponent:c,onClick:f,shapeRendering:v},m))})}function I_({id:t,nodeColorFunc:r,nodeStrokeColorFunc:i,nodeClassNameFunc:l,nodeBorderRadius:u,nodeStrokeWidth:c,shapeRendering:f,NodeComponent:h,onClick:p}){const{node:y,x:g,y:v,width:m,height:w}=je(S=>{const P=S.nodeLookup.get(t);if(!P)return{node:void 0,x:0,y:0,width:0,height:0};const C=P.internals.userNode,{x:k,y:z}=P.internals.positionAbsolute,{width:_,height:I}=en(C);return{node:C,x:k,y:z,width:_,height:I}},be);return!y||y.hidden||!Vp(y)?null:E.jsx(h,{x:g,y:v,width:m,height:w,style:y.style,selected:!!y.selected,className:l(y),color:r(y),borderRadius:u,strokeColor:i(y),strokeWidth:c,shapeRendering:f,onClick:p,id:y.id})}const T_=Q.memo(I_);var j_=Q.memo(P_);const z_=200,R_=150,L_=t=>!t.hidden,A_=t=>{const r={x:-t.transform[0]/t.transform[2],y:-t.transform[1]/t.transform[2],width:t.width/t.transform[2],height:t.height/t.transform[2]};return{viewBB:r,boundingRect:t.nodeLookup.size>0?Op(vi(t.nodeLookup,{filter:L_}),r):r,rfId:t.rfId,panZoom:t.panZoom,translateExtent:t.translateExtent,flowWidth:t.width,flowHeight:t.height,ariaLabelConfig:t.ariaLabelConfig}},Zh=(t,r)=>t.x===r.x&&t.y===r.y&&t.width===r.width&&t.height===r.height,$_=(t,r)=>Zh(t.viewBB,r.viewBB)&&Zh(t.boundingRect,r.boundingRect)&&t.rfId===r.rfId&&t.panZoom===r.panZoom&&t.translateExtent===r.translateExtent&&t.flowWidth===r.flowWidth&&t.flowHeight===r.flowHeight&&t.ariaLabelConfig===r.ariaLabelConfig,D_="react-flow__minimap-desc";function Bg({style:t,className:r,nodeStrokeColor:i,nodeColor:l,nodeClassName:u="",nodeBorderRadius:c=5,nodeStrokeWidth:f,nodeComponent:h,bgColor:p,maskColor:y,maskStrokeColor:g,maskStrokeWidth:v,position:m="bottom-right",onClick:w,onNodeClick:S,pannable:P=!1,zoomable:C=!1,ariaLabel:k,inversePan:z,zoomStep:_=1,offsetScale:I=5}){const H=Oe(),$=Q.useRef(null),{boundingRect:B,viewBB:X,rfId:G,panZoom:te,translateExtent:Z,flowWidth:ee,flowHeight:J,ariaLabelConfig:N}=je(A_,$_),U=(t==null?void 0:t.width)??z_,V=(t==null?void 0:t.height)??R_,b=B.width/U,A=B.height/V,L=Math.max(b,A),O=L*U,M=L*V,j=I*L,ne=B.x-(O-B.width)/2-j,re=B.y-(M-B.height)/2-j,ae=O+j*2,fe=M+j*2,ce=`${D_}-${G}`,K=Q.useRef(0),se=Q.useRef();K.current=L,Q.useEffect(()=>{if($.current&&te)return se.current=Gw({domNode:$.current,panZoom:te,getTransform:()=>H.getState().transform,getViewScale:()=>K.current}),()=>{var me;(me=se.current)==null||me.destroy()}},[te]),Q.useEffect(()=>{var me;(me=se.current)==null||me.update({translateExtent:Z,width:ee,height:J,inversePan:z,pannable:P,zoomStep:_,zoomable:C})},[P,C,z,_,Z,ee,J]);const pe=w?me=>{var Ie;const[Ne,Pe]=((Ie=se.current)==null?void 0:Ie.pointer(me))||[0,0];w(me,{x:Ne,y:Pe})}:void 0,we=S?Q.useCallback((me,Ne)=>{const Pe=H.getState().nodeLookup.get(Ne).internals.userNode;S(me,Pe)},[]):void 0,ve=k??N["minimap.ariaLabel"];return E.jsx(xl,{position:m,style:{...t,"--xy-minimap-background-color-props":typeof p=="string"?p:void 0,"--xy-minimap-mask-background-color-props":typeof y=="string"?y:void 0,"--xy-minimap-mask-stroke-color-props":typeof g=="string"?g:void 0,"--xy-minimap-mask-stroke-width-props":typeof v=="number"?v*L:void 0,"--xy-minimap-node-background-color-props":typeof l=="string"?l:void 0,"--xy-minimap-node-stroke-color-props":typeof i=="string"?i:void 0,"--xy-minimap-node-stroke-width-props":typeof f=="number"?f:void 0},className:Xe(["react-flow__minimap",r]),"data-testid":"rf__minimap",children:E.jsxs("svg",{width:U,height:V,viewBox:`${ne} ${re} ${ae} ${fe}`,className:"react-flow__minimap-svg",role:"img","aria-labelledby":ce,ref:$,onClick:pe,children:[ve&&E.jsx("title",{id:ce,children:ve}),E.jsx(j_,{onClick:we,nodeColor:l,nodeStrokeColor:i,nodeBorderRadius:c,nodeClassName:u,nodeStrokeWidth:f,nodeComponent:h}),E.jsx("path",{className:"react-flow__minimap-mask",d:`M${ne-j},${re-j}h${ae+j*2}v${fe+j*2}h${-ae-j*2}z - M${X.x},${X.y}h${X.width}v${X.height}h${-X.width}z`,fillRule:"evenodd",pointerEvents:"none"})]})})}Bg.displayName="MiniMap";const O_=Q.memo(Bg),F_=t=>r=>t?`${Math.max(1/r.transform[2],1)}`:void 0,H_={[lo.Line]:"right",[lo.Handle]:"bottom-right"};function V_({nodeId:t,position:r,variant:i=lo.Handle,className:l,style:u=void 0,children:c,color:f,minWidth:h=10,minHeight:p=10,maxWidth:y=Number.MAX_VALUE,maxHeight:g=Number.MAX_VALUE,keepAspectRatio:v=!1,resizeDirection:m,autoScale:w=!0,shouldResize:S,onResizeStart:P,onResize:C,onResizeEnd:k}){const z=vg(),_=typeof t=="string"?t:z,I=Oe(),H=Q.useRef(null),$=i===lo.Handle,B=je(Q.useCallback(F_($&&w),[$,w]),be),X=Q.useRef(null),G=r??H_[i];Q.useEffect(()=>{if(!(!H.current||!_))return X.current||(X.current=u1({domNode:H.current,nodeId:_,getStoreItems:()=>{const{nodeLookup:Z,transform:ee,snapGrid:J,snapToGrid:N,nodeOrigin:U,domNode:V}=I.getState();return{nodeLookup:Z,transform:ee,snapGrid:J,snapToGrid:N,nodeOrigin:U,paneDomNode:V}},onChange:(Z,ee)=>{const{triggerNodeChanges:J,nodeLookup:N,parentLookup:U,nodeOrigin:V}=I.getState(),b=[],A={x:Z.x,y:Z.y},L=N.get(_);if(L&&L.expandParent&&L.parentId){const O=L.origin??V,M=Z.width??L.measured.width??0,j=Z.height??L.measured.height??0,ne={id:L.id,parentId:L.parentId,rect:{width:M,height:j,...Bp({x:Z.x??L.position.x,y:Z.y??L.position.y},{width:M,height:j},L.parentId,N,O)}},re=ac([ne],N,U,V);b.push(...re),A.x=Z.x?Math.max(O[0]*M,Z.x):void 0,A.y=Z.y?Math.max(O[1]*j,Z.y):void 0}if(A.x!==void 0&&A.y!==void 0){const O={id:_,type:"position",position:{...A}};b.push(O)}if(Z.width!==void 0&&Z.height!==void 0){const M={id:_,type:"dimensions",resizing:!0,setAttributes:m?m==="horizontal"?"width":"height":!0,dimensions:{width:Z.width,height:Z.height}};b.push(M)}for(const O of ee){const M={...O,type:"position"};b.push(M)}J(b)},onEnd:({width:Z,height:ee})=>{const J={id:_,type:"dimensions",resizing:!1,dimensions:{width:Z,height:ee}};I.getState().triggerNodeChanges([J])}})),X.current.update({controlPosition:G,boundaries:{minWidth:h,minHeight:p,maxWidth:y,maxHeight:g},keepAspectRatio:v,resizeDirection:m,onResizeStart:P,onResize:C,onResizeEnd:k,shouldResize:S}),()=>{var Z;(Z=X.current)==null||Z.destroy()}},[G,h,p,y,g,v,P,C,k,S]);const te=G.split("-");return E.jsx("div",{className:Xe(["react-flow__resize-control","nodrag",...te,i,l]),ref:H,style:{...u,scale:B,...f&&{[$?"backgroundColor":"borderColor"]:f}},children:c})}Q.memo(V_);const B_={"arch.context":0,"django.app":0,"django.route":1,"django.url_name":1,"django.view":2,"django.viewset_action":2,"django.permission":2,"django.serializer":3,"django.serializer_field":4,"django.service":4,"django.model":5,"django.field":6,"django.relation":6,"django.task":7,"django.receiver":7,"django.signal":7,"django.test":7,"django.migration_op":7,"django.admin":7,"openapi.path":8,"react.api_client":9,"react.query_key":10,"react.hook":10,"react.feature":10,"react.route":11,"react.page":11,"react.component":12,"react.form_schema":13,"react.test":13,"react.context":12};function b_(t){return B_[t]??8}function U_(t){const r=new Map;for(const l of t){const u=b_(l.type),c=r.get(u)??[];c.push(l),r.set(u,c)}const i=new Map;for(const[l,u]of r)u.sort((c,f)=>c.name.localeCompare(f.name)),u.forEach((c,f)=>{i.set(c.id,{x:l*240,y:f*92})});return i}const W_={cheap:"var(--edge-cheap)",expensive:"var(--edge-expensive)",critical:"var(--edge-critical)"};function Y_({data:t}){return E.jsxs("div",{className:"lp-node",children:[E.jsx("div",{className:"t",children:t.type.split(".").pop()}),E.jsx("div",{className:"n",children:t.name})]})}const X_={load:Y_};function ja({nodes:t,edges:r}){const i=U_(t),l=t.map(c=>({id:c.id,type:"load",position:i.get(c.id)??{x:0,y:0},data:{name:c.name,type:c.type,file:c.file_path}})),u=r.filter(c=>t.some(f=>f.id===c.src)&&t.some(f=>f.id===c.dst)).map(c=>({id:c.id,source:c.src,target:c.dst,animated:c.weight==="critical",style:{stroke:W_[c.weight]||"var(--edge-cheap)",strokeWidth:c.weight==="critical"?2.4:1.2,strokeDasharray:c.confidence<.8?"6 4":void 0},label:c.type.replaceAll("_"," "),labelStyle:{fill:"var(--muted)",fontSize:9}}));return E.jsx(Fg,{children:E.jsxs(d_,{nodes:l,edges:u,nodeTypes:X_,fitView:!0,minZoom:.2,"data-testid":"impact-graph",children:[E.jsx(y_,{}),E.jsx(O_,{pannable:!0,zoomable:!0}),E.jsx(E_,{})]})})}const Ya=[{id:"obsidian",label:"Obsidian",group:"dark"},{id:"nord",label:"Nord",group:"dark"},{id:"solarized-dark",label:"Solarized Dark",group:"dark"},{id:"forest",label:"Forest",group:"dark"},{id:"rose",label:"Rose Pine",group:"dark"},{id:"amber",label:"Midnight Amber",group:"dark"},{id:"volcano",label:"Volcano",group:"dark"},{id:"lavender",label:"Lavender",group:"dark"},{id:"paper",label:"Paper",group:"light"},{id:"solarized-light",label:"Solarized Light",group:"light"},{id:"seafoam",label:"Seafoam",group:"light"},{id:"high-contrast",label:"High Contrast",group:"light"}],Q_="obsidian",bg="loadpath.theme";function G_(t){return Ya.some(r=>r.id===t)}function Ug(){try{const t=localStorage.getItem(bg)||"";if(G_(t))return t}catch{}return Q_}function Wg(t){document.documentElement.dataset.theme=t;try{localStorage.setItem(bg,t)}catch{}}function K_(){var Re,Ze,nt,Qe,Ge,At,kt,Et,rt,ft,st,dt,cn;const[t,r]=Q.useState("review"),[i,l]=Q.useState(localStorage.getItem("loadpath.repo")||""),[u,c]=Q.useState(localStorage.getItem("loadpath.base")||"HEAD~1"),[f,h]=Q.useState(localStorage.getItem("loadpath.head")||"HEAD"),[p,y]=Q.useState(null),[g,v]=Q.useState(null),[m,w]=Q.useState([]),[S,P]=Q.useState("review"),[C,k]=Q.useState(""),[z,_]=Q.useState(""),[I,H]=Q.useState(""),[$,B]=Q.useState({}),[X,G]=Q.useState([]),[te,Z]=Q.useState(localStorage.getItem("loadpath.scmRepo")||""),[ee,J]=Q.useState(localStorage.getItem("loadpath.provider")||"github"),[N,U]=Q.useState(localStorage.getItem("loadpath.prNumber")||""),[V,b]=Q.useState(""),[A,L]=Q.useState(Ug),O=Q.useRef(i);O.current=i;const M=F=>{L(F),Wg(F)};Q.useEffect(()=>{St.settings().then(B).catch(()=>{}),St.repos().then(F=>w(F.repos)).catch(()=>{})},[]),Q.useEffect(()=>{if(t!=="architecture"||!i)return;const F=i;let Ce=!1;return St.architecture(F).then(Nt=>{!Ce&&O.current===F&&v(Nt)}).catch(()=>{}),()=>{Ce=!0}},[t,i]);const j=F=>{l(F),localStorage.setItem("loadpath.repo",F)},ne=(F,Ce)=>{c(F),h(Ce),localStorage.setItem("loadpath.base",F),localStorage.setItem("loadpath.head",Ce)},re=(F,Ce,Nt)=>{J(F),Z(Ce),localStorage.setItem("loadpath.provider",F),localStorage.setItem("loadpath.scmRepo",Ce),Nt!==void 0&&(U(Nt),localStorage.setItem("loadpath.prNumber",Nt))},ae=async(F=i)=>{if(!F)return null;const Ce=await St.architecture(F);return O.current===F&&v(Ce),Ce},fe=async()=>{k(""),H(""),_("Tracing load path…"),j(i),ne(u,f);try{const F=await St.review(i,u,f,!0);y(F),P("review"),r("review"),await St.repos().then(Ce=>w(Ce.repos)).catch(()=>{}),await ae(i)}catch(F){k(F instanceof Error?F.message:String(F))}finally{_("")}},ce=async(F=!0)=>{k(""),H(""),_(F?"Indexing…":"Full reindex…"),j(i);try{await St.index(i,F);const Ce=await ae(i);await St.repos().then(Nt=>w(Nt.repos)).catch(()=>{}),Ce!=null&&Ce.indexed&&(P("architecture"),r("architecture"))}catch(Ce){k(Ce instanceof Error?Ce.message:String(Ce))}finally{_("")}},K=async()=>{k(""),H(""),_("Detecting layout…"),j(i);try{const F=await St.init(i);H(F.message),await St.repos().then(Ce=>w(Ce.repos)).catch(()=>{})}catch(F){k(F instanceof Error?F.message:String(F))}finally{_("")}},se=async()=>{if(p!=null&&p.markdown)try{await navigator.clipboard.writeText(p.markdown),H("Copied markdown brief")}catch(F){k(F instanceof Error?F.message:String(F))}},pe=async()=>{if(!(p!=null&&p.markdown)||!te||!N){k("Pick a pull request first (Pull requests tab), then post the brief.");return}_("Posting Loadpath brief…");try{const F=await St.postComment(ee,te,Number(N),p.markdown);H(F.updated?"Updated the Loadpath PR comment":"Posted the Loadpath PR comment")}catch(F){k(F instanceof Error?F.message:String(F))}finally{_("")}},we=async()=>{k(""),_("Fetching pull requests…");try{const F=await St.prs(ee,te);G(F.pull_requests)}catch(F){k(F instanceof Error?F.message:String(F))}finally{_("")}},ve=async F=>{F.preventDefault();const Ce=new FormData(F.currentTarget),Nt={github_token:String(Ce.get("github_token")||""),bitbucket_token:String(Ce.get("bitbucket_token")||""),bitbucket_username:String(Ce.get("bitbucket_username")||""),ai_provider:String(Ce.get("ai_provider")||"none"),ai_api_key:String(Ce.get("ai_api_key")||""),ai_model:String(Ce.get("ai_model")||""),ai_base_url:String(Ce.get("ai_base_url")||""),workspaces:m.length?m.map(Gn=>({path:Gn.path,name:Gn.name})):i?[{path:i,name:i.split(/[\\/]/).pop()}]:[]};B(await St.saveSettings(Nt))},me=async()=>{if(p){_("Residual analysis…");try{const F=await St.residual(p);b(F.note)}catch(F){k(F instanceof Error?F.message:String(F))}finally{_("")}}},Ne=Q.useMemo(()=>S==="architecture"?(g==null?void 0:g.nodes)??[]:(p==null?void 0:p.nodes)??[],[S,g,p]),Pe=Q.useMemo(()=>S==="architecture"?(g==null?void 0:g.edges)??[]:(p==null?void 0:p.edges)??[],[S,g,p]),Ie=p!=null&&p.index?`${p.index.counts.nodes} nodes / ${p.index.counts.edges} edges · ${p.index.incremental?"incremental":"full"}${p.index.stale?" · STALE":""}${p.index.django_boot&&p.index.django_boot!=="off"?` · boot ${p.index.django_boot}`:""}`:g!=null&&g.indexed?`${g.counts.nodes} nodes / ${g.counts.edges} edges indexed${g.stale?" · STALE":""}`:"Not indexed";return E.jsxs("div",{className:"app",children:[E.jsxs("nav",{className:"rail","data-testid":"rail",children:[E.jsx("div",{className:"brand",children:"Loadpath"}),E.jsx("button",{"data-testid":"tab-review",className:t==="review"?"active":"",onClick:()=>r("review"),children:"Review"}),E.jsx("button",{"data-testid":"tab-architecture",className:t==="architecture"?"active":"",onClick:()=>r("architecture"),children:"Architecture"}),E.jsx("button",{"data-testid":"tab-graph",className:t==="graph"?"active":"",onClick:()=>r("graph"),children:"Impact graph"}),E.jsx("button",{"data-testid":"tab-prs",className:t==="prs"?"active":"",onClick:()=>r("prs"),children:"Pull requests"}),E.jsx("button",{"data-testid":"tab-settings",className:t==="settings"?"active":"",onClick:()=>r("settings"),children:"Settings"}),E.jsxs("div",{className:"theme-pick",children:[E.jsx("label",{htmlFor:"theme-select",children:"Theme"}),E.jsx("select",{id:"theme-select","data-testid":"theme-select",value:A,onChange:F=>M(F.target.value),children:Ya.map(F=>E.jsx("option",{value:F.id,children:F.label},F.id))})]}),E.jsx("div",{style:{flex:1}}),E.jsx("div",{className:"muted",children:z||Ie})]}),E.jsxs("div",{className:"main",children:[E.jsxs("div",{className:"topbar","data-testid":"topbar",children:[m.length>0?E.jsxs("select",{"data-testid":"workspace-select",value:m.some(F=>F.path===i)?i:"",onChange:F=>{F.target.value&&j(F.target.value)},children:[E.jsx("option",{value:"",children:"Indexed repos…"}),m.map(F=>E.jsxs("option",{value:F.path,children:[F.name,F.indexed?` (${F.counts.nodes})`:""]},F.path))]}):null,E.jsx("input",{"data-testid":"repo-path",className:"path",placeholder:"Local monorepo path",value:i,onChange:F=>l(F.target.value)}),E.jsx("input",{"data-testid":"base-ref",value:u,onChange:F=>ne(F.target.value,f),placeholder:"base"}),E.jsx("input",{"data-testid":"head-ref",value:f,onChange:F=>ne(u,F.target.value),placeholder:"head"}),E.jsx("button",{"data-testid":"btn-init",onClick:K,children:"Draft config"}),E.jsx("button",{"data-testid":"btn-index",onClick:()=>ce(!0),children:"Index"}),E.jsx("button",{"data-testid":"btn-review",className:"btn primary",onClick:fe,children:"Review"})]}),C?E.jsx("div",{className:"error",children:C}):null,I?E.jsx("div",{className:"banner","data-testid":"status-note",children:I}):null,((Re=p==null?void 0:p.index)!=null&&Re.stale||g!=null&&g.stale)&&(t==="review"||t==="architecture")?E.jsx("div",{className:"banner stale","data-testid":"index-stale",children:"Index is stale — files changed since the last extract. Index again before trusting this walk."}):null,((Ze=p==null?void 0:p.index)==null?void 0:Ze.django_boot)==="failed"||(g==null?void 0:g.django_boot)==="failed"?E.jsx("div",{className:"banner warn","data-testid":"django-boot-failed",children:((nt=p==null?void 0:p.index)==null?void 0:nt.django_boot_detail)||(g==null?void 0:g.django_boot_detail)||"django.setup() failed"}):null,(Qe=p==null?void 0:p.workspace)!=null&&Qe.dirty_overlaps_review&&t==="review"?E.jsxs("div",{className:"banner warn","data-testid":"dirty-tree",children:["Uncommitted files overlap this review: ",(p.workspace.dirty_overlap||[]).slice(0,6).join(", ")]}):null,t==="review"&&E.jsxs("div",{className:"content","data-testid":"review-layout",children:[E.jsx("aside",{className:"brief","data-testid":"brief",children:p?E.jsxs(E.Fragment,{children:[E.jsxs("div",{className:`level ${p.confidence.level}`,children:[p.confidence.level.toUpperCase()," — ",p.title]}),p.low_risk?E.jsx("span",{className:"chip",children:"loadpath:low-risk"}):null,p.change_kinds.map(F=>E.jsx("span",{className:"chip",children:F.replaceAll("_"," ")},F)),E.jsx("pre",{className:"headline",children:p.headline}),p.index?E.jsxs(E.Fragment,{children:[E.jsx("div",{className:"kicker",children:"Index"}),E.jsxs("div",{className:"muted",children:["Walked ",p.index.counts.nodes," nodes / ",p.index.counts.edges," edges",p.index.reindex_skipped?" from an unchanged index":p.index.reindexed?" after an incremental refresh":" from the existing index",p.index.django_boot&&p.index.django_boot!=="off"?` · Django boot ${p.index.django_boot}`:"",(Ge=p.workspace)!=null&&Ge.three_dot?" · three-dot range":""]})]}):null,E.jsx("div",{className:"kicker",children:"Read this"}),p.read_order.map(F=>E.jsxs("div",{children:[E.jsx("span",{className:"file",children:F.path}),E.jsx("div",{className:"muted",children:F.why})]},F.path)),E.jsx("div",{className:"kicker",children:"Clusters"}),p.clusters.map(F=>E.jsxs("div",{className:"muted",children:[E.jsx("strong",{children:F.title})," — ",F.files.join(", ")]},F.id)),E.jsx("div",{className:"kicker",children:"Architecture"}),p.findings.filter(F=>!F.waived).length===0?E.jsx("div",{className:"muted",children:p.architecture_note}):p.findings.filter(F=>!F.waived).map(F=>E.jsxs("div",{className:"muted",children:[E.jsx("span",{className:`chip ${F.severity}`,children:F.severity}),F.message]},F.rule+F.message)),E.jsx("div",{className:"kicker",children:"Residual (AI only here)"}),p.residuals.map(F=>E.jsx("div",{className:"muted",children:F},F)),(kt=(At=p.evolution)==null?void 0:At.notes)!=null&&kt.length||(rt=(Et=p.evolution)==null?void 0:Et.hotspots)!=null&&rt.some(F=>F.commits)?E.jsxs(E.Fragment,{children:[E.jsx("div",{className:"kicker",children:"Churn & coupling"}),(((ft=p.evolution)==null?void 0:ft.notes)||[]).map(F=>E.jsx("div",{className:"muted",children:F},F)),(((st=p.evolution)==null?void 0:st.hotspots)||[]).filter(F=>F.commits).slice(0,6).map(F=>E.jsxs("div",{className:"muted",children:[E.jsx("span",{className:"file",children:F.path})," — ",F.commits," commits, bus factor ",F.bus_factor]},F.path))]}):null,E.jsxs("div",{className:"btn-row",children:[E.jsx("button",{className:"btn",onClick:me,children:"Ask configured model"}),E.jsx("button",{className:"btn","data-testid":"btn-copy-markdown",onClick:se,children:"Copy markdown"}),E.jsx("button",{className:"btn","data-testid":"btn-post-comment",onClick:pe,children:"Post to PR"})]}),V?E.jsx("pre",{className:"headline",children:V}):null,E.jsx("div",{className:"kicker",children:"Reviewers"}),E.jsx("div",{className:"muted",children:p.suggested_reviewers.join(", ")||"—"}),(dt=p.knowledge_owners)!=null&&dt.length?E.jsxs("div",{className:"muted",children:["Knowledge: ",p.knowledge_owners.join(", ")]}):null]}):E.jsxs("div",{className:"empty","data-testid":"review-empty",children:[E.jsx("p",{children:"The graph is the architecture. The brief is the force of this diff — not a hunk list."}),E.jsxs("ol",{children:[E.jsx("li",{children:"Point at a Django + React monorepo (or pick an indexed workspace)."}),E.jsxs("li",{children:["Index it. Missing ",E.jsx("code",{children:"loadpath.yml"})," is drafted from ",E.jsx("code",{children:"manage.py"})," and"," ",E.jsx("code",{children:"src/features"}),"."]}),E.jsx("li",{children:"Review a git range, or pick a pull request so base/head become a three-dot merge-base."})]})]})}),E.jsx("div",{className:"graph-wrap","data-testid":"review-graph",children:p?E.jsx(ja,{nodes:p.nodes,edges:p.edges}):null})]}),t==="architecture"&&E.jsxs("div",{className:"content","data-testid":"architecture-panel",children:[E.jsx("aside",{className:"brief","data-testid":"architecture-brief",children:g!=null&&g.indexed?E.jsxs(E.Fragment,{children:[E.jsxs("div",{className:"level high",children:["INDEXED — ",g.counts.nodes," nodes"]}),E.jsxs("span",{className:"chip",children:[g.counts.edges," edges"]}),g.has_config?E.jsx("span",{className:"chip",children:"loadpath.yml"}):null,E.jsxs("div",{className:"muted",style:{marginTop:8},children:[g.indexed_at?`Last index ${g.indexed_at}`:"Indexed",g.incremental?" · incremental":" · full",g.stale?" · stale":"",g.django_boot&&g.django_boot!=="off"?` · Django boot ${g.django_boot}`:""]}),E.jsx("div",{className:"kicker",children:"Bounded contexts"}),Object.values(g.contexts).map(F=>E.jsxs("div",{className:"muted",children:[E.jsx("strong",{children:F.name})," — ",(F.django_apps||[]).join(", ")||"no apps"," ·"," ",(F.owners||[]).join(", ")||"unowned"]},F.name)),E.jsx("div",{className:"kicker",children:"Rules"}),(g.rules||[]).map(F=>E.jsx("div",{className:"muted",children:F},F)),E.jsx("div",{className:"kicker",children:"Findings on the indexed graph"}),g.findings.filter(F=>!F.waived).length===0?E.jsx("div",{className:"muted",children:"No architecture rule hits on the full graph."}):g.findings.filter(F=>!F.waived).map(F=>E.jsxs("div",{className:"muted",children:[E.jsx("span",{className:`chip ${F.severity}`,children:F.severity}),F.message]},F.rule+F.message)),E.jsx("div",{className:"kicker",children:"Types"}),E.jsx("div",{className:"muted",children:Object.entries(g.type_counts||{}).sort((F,Ce)=>Ce[1]-F[1]).slice(0,12).map(([F,Ce])=>`${F.split(".").pop()} ${Ce}`).join(" · ")}),E.jsx("button",{className:"btn",style:{marginTop:12},onClick:()=>ce(!1),"data-testid":"btn-full-reindex",children:"Full reindex"}),E.jsx("button",{className:"btn primary",style:{marginTop:8},onClick:fe,children:"Review against this index"})]}):E.jsx("p",{className:"muted","data-testid":"architecture-empty",children:"Index this repo to build the architecture graph. Review then walks that same graph for a git range — it does not start from a hunk list."})}),E.jsx("div",{className:"graph-wrap","data-testid":"architecture-graph",children:g!=null&&g.indexed?E.jsx(ja,{nodes:g.nodes,edges:g.edges}):null})]}),t==="graph"&&E.jsxs("div",{className:"graph-wrap","data-testid":"graph-full",style:{height:"100%",display:"flex",flexDirection:"column"},children:[E.jsxs("div",{className:"graph-modes",children:[E.jsx("button",{"data-testid":"graph-mode-review",className:S==="review"?"active":"",onClick:()=>P("review"),children:"This review"}),E.jsx("button",{"data-testid":"graph-mode-architecture",className:S==="architecture"?"active":"",onClick:()=>P("architecture"),children:"Indexed architecture"})]}),Ne.length?E.jsx("div",{style:{flex:1,minHeight:0},children:E.jsx(ja,{nodes:Ne,edges:Pe})}):E.jsx("p",{className:"muted",children:"Index the repo or run a review first."})]}),t==="prs"&&E.jsxs("div",{className:"pr-list","data-testid":"pr-list",children:[E.jsxs("div",{className:"topbar",style:{border:0,padding:0,marginBottom:12},children:[E.jsxs("select",{"data-testid":"pr-provider",value:ee,onChange:F=>re(F.target.value,te,N),children:[E.jsx("option",{value:"github",children:"GitHub"}),E.jsx("option",{value:"bitbucket",children:"Bitbucket"})]}),E.jsx("input",{"data-testid":"pr-repo",className:"path",placeholder:"owner/repo",value:te,onChange:F=>re(ee,F.target.value,N)}),E.jsx("button",{"data-testid":"btn-list-prs",onClick:we,children:"List PRs"})]}),X.map(F=>E.jsxs("article",{className:"pr","data-testid":`pr-${F.number}`,children:[E.jsxs("h3",{children:["#",F.number," ",F.title]}),E.jsxs("div",{className:"muted",children:[F.author," · ",F.source_branch," → ",F.target_branch," · ",F.provider]}),E.jsxs("a",{href:F.url,target:"_blank",rel:"noreferrer",children:["Open on ",F.provider]}),E.jsx("div",{children:E.jsx("button",{className:"btn",onClick:()=>{ne(F.base_sha||F.target_branch,F.head_sha||F.source_branch),re(F.provider,F.repo,String(F.number)),r("review")},children:"Review this branch range"})})]},`${F.provider}-${F.number}`))]}),t==="settings"&&E.jsxs("form",{className:"settings","data-testid":"settings-form",onSubmit:ve,children:[E.jsx("h1",{children:"Keys & providers"}),E.jsx("p",{className:"muted",children:"Tokens stay on this machine in ~/.loadpath/settings.json. GitHub and Bitbucket power the PR list. Indexed repos are remembered as workspaces. AI is used only for residual uncertainty the graph could not close."}),E.jsx("h1",{children:"Theme"}),E.jsx("p",{className:"muted",children:"Appearance is local to this browser. Pick a palette that matches how you review."}),E.jsx("div",{className:"theme-grid","data-testid":"theme-grid",children:Ya.map(F=>E.jsxs("button",{type:"button",className:A===F.id?"theme-swatch active":"theme-swatch","data-testid":`theme-${F.id}`,onClick:()=>M(F.id),children:[E.jsx("div",{className:"name",children:F.label}),E.jsx("div",{className:"group",children:F.group})]},F.id))}),E.jsx("label",{children:"GitHub token"}),E.jsx("input",{name:"github_token",type:"password",placeholder:"ghp_…"}),E.jsx("label",{children:"Bitbucket token"}),E.jsx("input",{name:"bitbucket_token",type:"password"}),E.jsx("label",{children:"Bitbucket username (app passwords)"}),E.jsx("input",{name:"bitbucket_username",defaultValue:String($.bitbucket_username||"")}),E.jsx("label",{children:"AI provider"}),E.jsxs("select",{name:"ai_provider",defaultValue:String(((cn=$.ai)==null?void 0:cn.provider)||"none"),children:[E.jsx("option",{value:"none",children:"none (graph only)"}),E.jsx("option",{value:"anthropic",children:"Anthropic"}),E.jsx("option",{value:"openai",children:"OpenAI"}),E.jsx("option",{value:"grok",children:"Grok / xAI"}),E.jsx("option",{value:"deepseek",children:"DeepSeek"}),E.jsx("option",{value:"cursor",children:"Cursor-compatible (OpenAI protocol)"}),E.jsx("option",{value:"ollama",children:"Ollama local"})]}),E.jsx("label",{children:"AI API key"}),E.jsx("input",{name:"ai_api_key",type:"password"}),E.jsx("label",{children:"Model"}),E.jsx("input",{name:"ai_model",placeholder:"optional override"}),E.jsx("label",{children:"Base URL"}),E.jsx("input",{name:"ai_base_url",placeholder:"optional, OpenAI-compatible"}),E.jsx("button",{className:"btn primary",type:"submit",children:"Save"})]})]})]})}Wg(Ug());z0.createRoot(document.getElementById("root")).render(E.jsx(Q.StrictMode,{children:E.jsx(K_,{})})); diff --git a/src/loadpath/static/assets/index-DF6aw0I2.css b/src/loadpath/static/assets/index-YwQandBA.css similarity index 65% rename from src/loadpath/static/assets/index-DF6aw0I2.css rename to src/loadpath/static/assets/index-YwQandBA.css index 13e595f..79a6ed6 100644 --- a/src/loadpath/static/assets/index-DF6aw0I2.css +++ b/src/loadpath/static/assets/index-YwQandBA.css @@ -1 +1 @@ -.react-flow{direction:ltr;--xy-edge-stroke-default: #b1b1b7;--xy-edge-stroke-width-default: 1;--xy-edge-stroke-selected-default: #555;--xy-connectionline-stroke-default: #b1b1b7;--xy-connectionline-stroke-width-default: 1;--xy-attribution-background-color-default: rgba(255, 255, 255, .5);--xy-minimap-background-color-default: #fff;--xy-minimap-mask-background-color-default: rgba(240, 240, 240, .6);--xy-minimap-mask-stroke-color-default: transparent;--xy-minimap-mask-stroke-width-default: 1;--xy-minimap-node-background-color-default: #e2e2e2;--xy-minimap-node-stroke-color-default: transparent;--xy-minimap-node-stroke-width-default: 2;--xy-background-color-default: transparent;--xy-background-pattern-dots-color-default: #91919a;--xy-background-pattern-lines-color-default: #eee;--xy-background-pattern-cross-color-default: #e2e2e2;background-color:var(--xy-background-color, var(--xy-background-color-default));--xy-node-color-default: inherit;--xy-node-border-default: 1px solid #1a192b;--xy-node-background-color-default: #fff;--xy-node-group-background-color-default: rgba(240, 240, 240, .25);--xy-node-boxshadow-hover-default: 0 1px 4px 1px rgba(0, 0, 0, .08);--xy-node-boxshadow-selected-default: 0 0 0 .5px #1a192b;--xy-node-border-radius-default: 3px;--xy-handle-background-color-default: #1a192b;--xy-handle-border-color-default: #fff;--xy-selection-background-color-default: rgba(0, 89, 220, .08);--xy-selection-border-default: 1px dotted rgba(0, 89, 220, .8);--xy-controls-button-background-color-default: #fefefe;--xy-controls-button-background-color-hover-default: #f4f4f4;--xy-controls-button-color-default: inherit;--xy-controls-button-color-hover-default: inherit;--xy-controls-button-border-color-default: #eee;--xy-controls-box-shadow-default: 0 0 2px 1px rgba(0, 0, 0, .08);--xy-edge-label-background-color-default: #ffffff;--xy-edge-label-color-default: inherit;--xy-resize-background-color-default: #3367d9}.react-flow.dark{--xy-edge-stroke-default: #3e3e3e;--xy-edge-stroke-width-default: 1;--xy-edge-stroke-selected-default: #727272;--xy-connectionline-stroke-default: #b1b1b7;--xy-connectionline-stroke-width-default: 1;--xy-attribution-background-color-default: rgba(150, 150, 150, .25);--xy-minimap-background-color-default: #141414;--xy-minimap-mask-background-color-default: rgba(60, 60, 60, .6);--xy-minimap-mask-stroke-color-default: transparent;--xy-minimap-mask-stroke-width-default: 1;--xy-minimap-node-background-color-default: #2b2b2b;--xy-minimap-node-stroke-color-default: transparent;--xy-minimap-node-stroke-width-default: 2;--xy-background-color-default: #141414;--xy-background-pattern-dots-color-default: #555;--xy-background-pattern-lines-color-default: #333;--xy-background-pattern-cross-color-default: #333;--xy-node-color-default: #f8f8f8;--xy-node-border-default: 1px solid #3c3c3c;--xy-node-background-color-default: #1e1e1e;--xy-node-group-background-color-default: rgba(240, 240, 240, .25);--xy-node-boxshadow-hover-default: 0 1px 4px 1px rgba(255, 255, 255, .08);--xy-node-boxshadow-selected-default: 0 0 0 .5px #999;--xy-handle-background-color-default: #bebebe;--xy-handle-border-color-default: #1e1e1e;--xy-selection-background-color-default: rgba(200, 200, 220, .08);--xy-selection-border-default: 1px dotted rgba(200, 200, 220, .8);--xy-controls-button-background-color-default: #2b2b2b;--xy-controls-button-background-color-hover-default: #3e3e3e;--xy-controls-button-color-default: #f8f8f8;--xy-controls-button-color-hover-default: #fff;--xy-controls-button-border-color-default: #5b5b5b;--xy-controls-box-shadow-default: 0 0 2px 1px rgba(0, 0, 0, .08);--xy-edge-label-background-color-default: #141414;--xy-edge-label-color-default: #f8f8f8}.react-flow__background{background-color:var(--xy-background-color-props, var(--xy-background-color, var(--xy-background-color-default)));pointer-events:none;z-index:-1}.react-flow__container{position:absolute;width:100%;height:100%;top:0;left:0}.react-flow__pane{z-index:1;touch-action:none}.react-flow__pane.draggable{cursor:grab}.react-flow__pane.dragging{cursor:grabbing}.react-flow__pane.selection{cursor:pointer}.react-flow__viewport{transform-origin:0 0;z-index:2;pointer-events:none}.react-flow__renderer{z-index:4}.react-flow__selection{z-index:6}.react-flow__nodesselection-rect:focus,.react-flow__nodesselection-rect:focus-visible{outline:none}.react-flow__edge-path{stroke:var(--xy-edge-stroke, var(--xy-edge-stroke-default));stroke-width:var(--xy-edge-stroke-width, var(--xy-edge-stroke-width-default));fill:none}.react-flow__connection-path{stroke:var(--xy-connectionline-stroke, var(--xy-connectionline-stroke-default));stroke-width:var(--xy-connectionline-stroke-width, var(--xy-connectionline-stroke-width-default));fill:none}.react-flow .react-flow__edges{position:absolute}.react-flow .react-flow__edges svg{overflow:visible;position:absolute;pointer-events:none}.react-flow__edge{pointer-events:visibleStroke}.react-flow__edge.selectable{cursor:pointer}.react-flow__edge.animated path{stroke-dasharray:5;animation:dashdraw .5s linear infinite}.react-flow__edge.animated path.react-flow__edge-interaction{stroke-dasharray:none;animation:none}.react-flow__edge.inactive{pointer-events:none}.react-flow__edge.selected,.react-flow__edge:focus,.react-flow__edge:focus-visible{outline:none}.react-flow__edge.selected .react-flow__edge-path,.react-flow__edge.selectable:focus .react-flow__edge-path,.react-flow__edge.selectable:focus-visible .react-flow__edge-path{stroke:var(--xy-edge-stroke-selected, var(--xy-edge-stroke-selected-default))}.react-flow__edge-textwrapper{pointer-events:all}.react-flow__edge .react-flow__edge-text{pointer-events:none;-webkit-user-select:none;-moz-user-select:none;user-select:none}.react-flow__arrowhead polyline{stroke:var(--xy-edge-stroke, var(--xy-edge-stroke-default))}.react-flow__arrowhead polyline.arrowclosed{fill:var(--xy-edge-stroke, var(--xy-edge-stroke-default))}.react-flow__connection{pointer-events:none}.react-flow__connection .animated{stroke-dasharray:5;animation:dashdraw .5s linear infinite}svg.react-flow__connectionline{z-index:1001;overflow:visible;position:absolute}.react-flow__nodes{pointer-events:none;transform-origin:0 0}.react-flow__node{position:absolute;-webkit-user-select:none;-moz-user-select:none;user-select:none;pointer-events:all;transform-origin:0 0;box-sizing:border-box;cursor:default}.react-flow__node.selectable{cursor:pointer}.react-flow__node.draggable{cursor:grab;pointer-events:all}.react-flow__node.draggable.dragging{cursor:grabbing}.react-flow__nodesselection{z-index:3;transform-origin:left top;pointer-events:none}.react-flow__nodesselection-rect{position:absolute;pointer-events:all;cursor:grab}.react-flow__handle{position:absolute;pointer-events:none;min-width:5px;min-height:5px;width:6px;height:6px;background-color:var(--xy-handle-background-color, var(--xy-handle-background-color-default));border:1px solid var(--xy-handle-border-color, var(--xy-handle-border-color-default));border-radius:100%}.react-flow__handle.connectingfrom{pointer-events:all}.react-flow__handle.connectionindicator{pointer-events:all;cursor:crosshair}.react-flow__handle-bottom{top:auto;left:50%;bottom:0;transform:translate(-50%,50%)}.react-flow__handle-top{top:0;left:50%;transform:translate(-50%,-50%)}.react-flow__handle-left{top:50%;left:0;transform:translate(-50%,-50%)}.react-flow__handle-right{top:50%;right:0;transform:translate(50%,-50%)}.react-flow__edgeupdater{cursor:move;pointer-events:all}.react-flow__pane.selection .react-flow__panel{pointer-events:none}.react-flow__panel{position:absolute;z-index:5;margin:15px}.react-flow__panel.top{top:0}.react-flow__panel.bottom{bottom:0}.react-flow__panel.top.center,.react-flow__panel.bottom.center{left:50%;transform:translate(-15px) translate(-50%)}.react-flow__panel.left{left:0}.react-flow__panel.right{right:0}.react-flow__panel.left.center,.react-flow__panel.right.center{top:50%;transform:translateY(-15px) translateY(-50%)}.react-flow__attribution{font-size:10px;background:var(--xy-attribution-background-color, var(--xy-attribution-background-color-default));padding:2px 3px;margin:0}.react-flow__attribution a{text-decoration:none;color:#999}@keyframes dashdraw{0%{stroke-dashoffset:10}}.react-flow__edgelabel-renderer{position:absolute;width:100%;height:100%;pointer-events:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;left:0;top:0}.react-flow__viewport-portal{position:absolute;width:100%;height:100%;left:0;top:0;-webkit-user-select:none;-moz-user-select:none;user-select:none}.react-flow__minimap{background:var( --xy-minimap-background-color-props, var(--xy-minimap-background-color, var(--xy-minimap-background-color-default)) )}.react-flow__minimap-svg{display:block}.react-flow__minimap-mask{fill:var( --xy-minimap-mask-background-color-props, var(--xy-minimap-mask-background-color, var(--xy-minimap-mask-background-color-default)) );stroke:var( --xy-minimap-mask-stroke-color-props, var(--xy-minimap-mask-stroke-color, var(--xy-minimap-mask-stroke-color-default)) );stroke-width:var( --xy-minimap-mask-stroke-width-props, var(--xy-minimap-mask-stroke-width, var(--xy-minimap-mask-stroke-width-default)) )}.react-flow__minimap-node{fill:var( --xy-minimap-node-background-color-props, var(--xy-minimap-node-background-color, var(--xy-minimap-node-background-color-default)) );stroke:var( --xy-minimap-node-stroke-color-props, var(--xy-minimap-node-stroke-color, var(--xy-minimap-node-stroke-color-default)) );stroke-width:var( --xy-minimap-node-stroke-width-props, var(--xy-minimap-node-stroke-width, var(--xy-minimap-node-stroke-width-default)) )}.react-flow__background-pattern.dots{fill:var( --xy-background-pattern-color-props, var(--xy-background-pattern-color, var(--xy-background-pattern-dots-color-default)) )}.react-flow__background-pattern.lines{stroke:var( --xy-background-pattern-color-props, var(--xy-background-pattern-color, var(--xy-background-pattern-lines-color-default)) )}.react-flow__background-pattern.cross{stroke:var( --xy-background-pattern-color-props, var(--xy-background-pattern-color, var(--xy-background-pattern-cross-color-default)) )}.react-flow__controls{display:flex;flex-direction:column;box-shadow:var(--xy-controls-box-shadow, var(--xy-controls-box-shadow-default))}.react-flow__controls.horizontal{flex-direction:row}.react-flow__controls-button{display:flex;justify-content:center;align-items:center;height:26px;width:26px;padding:4px;border:none;background:var(--xy-controls-button-background-color, var(--xy-controls-button-background-color-default));border-bottom:1px solid var( --xy-controls-button-border-color-props, var(--xy-controls-button-border-color, var(--xy-controls-button-border-color-default)) );color:var( --xy-controls-button-color-props, var(--xy-controls-button-color, var(--xy-controls-button-color-default)) );cursor:pointer;-webkit-user-select:none;-moz-user-select:none;user-select:none}.react-flow__controls-button svg{width:100%;max-width:12px;max-height:12px;fill:currentColor}.react-flow__edge.updating .react-flow__edge-path{stroke:#777}.react-flow__edge-text{font-size:10px}.react-flow__node.selectable:focus,.react-flow__node.selectable:focus-visible{outline:none}.react-flow__node-input,.react-flow__node-default,.react-flow__node-output,.react-flow__node-group{padding:10px;border-radius:var(--xy-node-border-radius, var(--xy-node-border-radius-default));width:150px;font-size:12px;color:var(--xy-node-color, var(--xy-node-color-default));text-align:center;border:var(--xy-node-border, var(--xy-node-border-default));background-color:var(--xy-node-background-color, var(--xy-node-background-color-default))}.react-flow__node-input.selectable:hover,.react-flow__node-default.selectable:hover,.react-flow__node-output.selectable:hover,.react-flow__node-group.selectable:hover{box-shadow:var(--xy-node-boxshadow-hover, var(--xy-node-boxshadow-hover-default))}.react-flow__node-input.selectable.selected,.react-flow__node-input.selectable:focus,.react-flow__node-input.selectable:focus-visible,.react-flow__node-default.selectable.selected,.react-flow__node-default.selectable:focus,.react-flow__node-default.selectable:focus-visible,.react-flow__node-output.selectable.selected,.react-flow__node-output.selectable:focus,.react-flow__node-output.selectable:focus-visible,.react-flow__node-group.selectable.selected,.react-flow__node-group.selectable:focus,.react-flow__node-group.selectable:focus-visible{box-shadow:var(--xy-node-boxshadow-selected, var(--xy-node-boxshadow-selected-default))}.react-flow__node-group{background-color:var(--xy-node-group-background-color, var(--xy-node-group-background-color-default))}.react-flow__nodesselection-rect,.react-flow__selection{background:var(--xy-selection-background-color, var(--xy-selection-background-color-default));border:var(--xy-selection-border, var(--xy-selection-border-default))}.react-flow__nodesselection-rect:focus,.react-flow__nodesselection-rect:focus-visible,.react-flow__selection:focus,.react-flow__selection:focus-visible{outline:none}.react-flow__controls-button:hover{background:var( --xy-controls-button-background-color-hover-props, var(--xy-controls-button-background-color-hover, var(--xy-controls-button-background-color-hover-default)) );color:var( --xy-controls-button-color-hover-props, var(--xy-controls-button-color-hover, var(--xy-controls-button-color-hover-default)) )}.react-flow__controls-button:disabled{pointer-events:none}.react-flow__controls-button:disabled svg{fill-opacity:.4}.react-flow__controls-button:last-child{border-bottom:none}.react-flow__controls.horizontal .react-flow__controls-button{border-bottom:none;border-right:1px solid var( --xy-controls-button-border-color-props, var(--xy-controls-button-border-color, var(--xy-controls-button-border-color-default)) )}.react-flow__controls.horizontal .react-flow__controls-button:last-child{border-right:none}.react-flow__resize-control{position:absolute}.react-flow__resize-control.left,.react-flow__resize-control.right{cursor:ew-resize}.react-flow__resize-control.top,.react-flow__resize-control.bottom{cursor:ns-resize}.react-flow__resize-control.top.left,.react-flow__resize-control.bottom.right{cursor:nwse-resize}.react-flow__resize-control.bottom.left,.react-flow__resize-control.top.right{cursor:nesw-resize}.react-flow__resize-control.handle{width:5px;height:5px;border:1px solid #fff;border-radius:1px;background-color:var(--xy-resize-background-color, var(--xy-resize-background-color-default));translate:-50% -50%}.react-flow__resize-control.handle.left{left:0;top:50%}.react-flow__resize-control.handle.right{left:100%;top:50%}.react-flow__resize-control.handle.top{left:50%;top:0}.react-flow__resize-control.handle.bottom{left:50%;top:100%}.react-flow__resize-control.handle.top.left,.react-flow__resize-control.handle.bottom.left{left:0}.react-flow__resize-control.handle.top.right,.react-flow__resize-control.handle.bottom.right{left:100%}.react-flow__resize-control.line{border-color:var(--xy-resize-background-color, var(--xy-resize-background-color-default));border-width:0;border-style:solid}.react-flow__resize-control.line.left,.react-flow__resize-control.line.right{width:1px;transform:translate(-50%);top:0;height:100%}.react-flow__resize-control.line.left{left:0;border-left-width:1px}.react-flow__resize-control.line.right{left:100%;border-right-width:1px}.react-flow__resize-control.line.top,.react-flow__resize-control.line.bottom{height:1px;transform:translateY(-50%);left:0;width:100%}.react-flow__resize-control.line.top{top:0;border-top-width:1px}.react-flow__resize-control.line.bottom{border-bottom-width:1px;top:100%}.react-flow__edge-textbg{fill:var(--xy-edge-label-background-color, var(--xy-edge-label-background-color-default))}.react-flow__edge-text{fill:var(--xy-edge-label-color, var(--xy-edge-label-color-default))}:root,[data-theme=obsidian]{--bg: #070b10;--bg-2: #0d141c;--surface: #121a24;--line: #1e2c3c;--ink: #e7eef6;--muted: #8b9bb0;--high: #2a9d8f;--medium: #e9c46a;--low: #e76f51;--critical: #e85d04;--accent: #4cc9f0;--rail-from: #0b1219;--rail-to: #070b10;--rail-active: #15202c;--btn: #173044;--btn-line: #24506c;--btn-primary: #134e4a;--btn-primary-line: #2a9d8f;--node-bg: #101822;--node-line: #2a3d52;--graph-bg: #070b10;--graph-grid: rgba(42, 80, 120, .09);--edge-cheap: #4a5568;--edge-expensive: #f4a261;--edge-critical: #e85d04;--shadow: rgba(76, 201, 240, .08)}[data-theme=nord]{--bg: #2e3440;--bg-2: #3b4252;--surface: #434c5e;--line: #4c566a;--ink: #eceff4;--muted: #d8dee9;--high: #a3be8c;--medium: #ebcb8b;--low: #bf616a;--critical: #d08770;--accent: #88c0d0;--rail-from: #3b4252;--rail-to: #2e3440;--rail-active: #4c566a;--btn: #434c5e;--btn-line: #81a1c1;--btn-primary: #5e81ac;--btn-primary-line: #88c0d0;--node-bg: #3b4252;--node-line: #81a1c1;--graph-bg: #2e3440;--graph-grid: rgba(136, 192, 208, .12);--edge-cheap: #4c566a;--edge-expensive: #d08770;--edge-critical: #bf616a;--shadow: rgba(136, 192, 208, .12)}[data-theme=solarized-dark]{--bg: #002b36;--bg-2: #073642;--surface: #0a3944;--line: #16444f;--ink: #eee8d5;--muted: #93a1a1;--high: #859900;--medium: #b58900;--low: #dc322f;--critical: #cb4b16;--accent: #2aa198;--rail-from: #073642;--rail-to: #002b36;--rail-active: #16444f;--btn: #073642;--btn-line: #268bd2;--btn-primary: #0a4a42;--btn-primary-line: #2aa198;--node-bg: #073642;--node-line: #268bd2;--graph-bg: #002b36;--graph-grid: rgba(42, 161, 152, .12);--edge-cheap: #586e75;--edge-expensive: #cb4b16;--edge-critical: #dc322f;--shadow: rgba(42, 161, 152, .12)}[data-theme=forest]{--bg: #0e1510;--bg-2: #152019;--surface: #1b2a20;--line: #2c4334;--ink: #e4f0e6;--muted: #8eaa96;--high: #6ab04c;--medium: #c8a951;--low: #e17055;--critical: #d35400;--accent: #7bed9f;--rail-from: #152019;--rail-to: #0e1510;--rail-active: #1f3326;--btn: #1f3326;--btn-line: #3d6b4f;--btn-primary: #1e4d32;--btn-primary-line: #6ab04c;--node-bg: #16241b;--node-line: #3d6b4f;--graph-bg: #0e1510;--graph-grid: rgba(123, 237, 159, .1);--edge-cheap: #3d6b4f;--edge-expensive: #c8a951;--edge-critical: #d35400;--shadow: rgba(123, 237, 159, .1)}[data-theme=rose]{--bg: #191724;--bg-2: #1f1d2e;--surface: #26233a;--line: #403d52;--ink: #e0def4;--muted: #908caa;--high: #9ccfd8;--medium: #f6c177;--low: #eb6f92;--critical: #eb6f92;--accent: #c4a7e7;--rail-from: #1f1d2e;--rail-to: #191724;--rail-active: #26233a;--btn: #26233a;--btn-line: #c4a7e7;--btn-primary: #3a2f4d;--btn-primary-line: #c4a7e7;--node-bg: #1f1d2e;--node-line: #524f67;--graph-bg: #191724;--graph-grid: rgba(196, 167, 231, .12);--edge-cheap: #524f67;--edge-expensive: #f6c177;--edge-critical: #eb6f92;--shadow: rgba(196, 167, 231, .12)}[data-theme=amber]{--bg: #120e0a;--bg-2: #1c1610;--surface: #261e16;--line: #3d2f22;--ink: #f4e6d0;--muted: #b59a78;--high: #c4d6a0;--medium: #e9b44c;--low: #d8572a;--critical: #c0392b;--accent: #f0a05a;--rail-from: #1c1610;--rail-to: #120e0a;--rail-active: #2b2218;--btn: #2b2218;--btn-line: #8a5a2b;--btn-primary: #4a3418;--btn-primary-line: #f0a05a;--node-bg: #1c1610;--node-line: #8a5a2b;--graph-bg: #120e0a;--graph-grid: rgba(240, 160, 90, .12);--edge-cheap: #5c4a38;--edge-expensive: #e9b44c;--edge-critical: #d8572a;--shadow: rgba(240, 160, 90, .12)}[data-theme=volcano]{--bg: #14090a;--bg-2: #1e0e10;--surface: #2a1416;--line: #4a2226;--ink: #fde8e4;--muted: #c48b86;--high: #7bed9f;--medium: #f6c90e;--low: #ff6b6b;--critical: #ff3b3b;--accent: #ff7b54;--rail-from: #1e0e10;--rail-to: #14090a;--rail-active: #32181b;--btn: #32181b;--btn-line: #ff7b54;--btn-primary: #5a1f18;--btn-primary-line: #ff7b54;--node-bg: #1e0e10;--node-line: #7a3330;--graph-bg: #14090a;--graph-grid: rgba(255, 123, 84, .12);--edge-cheap: #5a3330;--edge-expensive: #ff7b54;--edge-critical: #ff3b3b;--shadow: rgba(255, 123, 84, .14)}[data-theme=lavender]{--bg: #12101c;--bg-2: #1a1730;--surface: #221e3c;--line: #3b3560;--ink: #efeaff;--muted: #b3a7d6;--high: #80ffdb;--medium: #ffd166;--low: #ff6b9d;--critical: #ff4d6d;--accent: #c77dff;--rail-from: #1a1730;--rail-to: #12101c;--rail-active: #2a2550;--btn: #2a2550;--btn-line: #c77dff;--btn-primary: #3d2a66;--btn-primary-line: #c77dff;--node-bg: #1a1730;--node-line: #5a4d8a;--graph-bg: #12101c;--graph-grid: rgba(199, 125, 255, .12);--edge-cheap: #5a4d8a;--edge-expensive: #ffd166;--edge-critical: #ff4d6d;--shadow: rgba(199, 125, 255, .14)}[data-theme=paper]{--bg: #f6f1e8;--bg-2: #efe6d6;--surface: #fffaf2;--line: #d9cbb6;--ink: #2b241c;--muted: #6f6456;--high: #2a7a4b;--medium: #b5811a;--low: #c0392b;--critical: #a93226;--accent: #1d6a7a;--rail-from: #efe6d6;--rail-to: #e7dcc8;--rail-active: #e2d3bb;--btn: #fffaf2;--btn-line: #c9b79a;--btn-primary: #d7eee0;--btn-primary-line: #2a7a4b;--node-bg: #fffaf2;--node-line: #c9b79a;--graph-bg: #f6f1e8;--graph-grid: rgba(29, 106, 122, .1);--edge-cheap: #b7a48c;--edge-expensive: #c0392b;--edge-critical: #a93226;--shadow: rgba(43, 36, 28, .08)}[data-theme=solarized-light]{--bg: #fdf6e3;--bg-2: #eee8d5;--surface: #f5efdc;--line: #d6cba9;--ink: #657b83;--muted: #93a1a1;--high: #859900;--medium: #b58900;--low: #dc322f;--critical: #cb4b16;--accent: #268bd2;--rail-from: #eee8d5;--rail-to: #e6dfc8;--rail-active: #e0d9c0;--btn: #fdf6e3;--btn-line: #93a1a1;--btn-primary: #e8efc8;--btn-primary-line: #859900;--node-bg: #fdf6e3;--node-line: #93a1a1;--graph-bg: #fdf6e3;--graph-grid: rgba(38, 139, 210, .12);--edge-cheap: #93a1a1;--edge-expensive: #cb4b16;--edge-critical: #dc322f;--shadow: rgba(101, 123, 131, .1)}[data-theme=seafoam]{--bg: #eef7f4;--bg-2: #dff0ea;--surface: #ffffff;--line: #b7d5cc;--ink: #17332c;--muted: #4d7268;--high: #1b8a5a;--medium: #c48a14;--low: #c44536;--critical: #9b2d22;--accent: #1d9a8a;--rail-from: #dff0ea;--rail-to: #cfe6de;--rail-active: #c4ddd4;--btn: #ffffff;--btn-line: #8fbfb2;--btn-primary: #d4f0e4;--btn-primary-line: #1b8a5a;--node-bg: #ffffff;--node-line: #8fbfb2;--graph-bg: #eef7f4;--graph-grid: rgba(29, 154, 138, .12);--edge-cheap: #8fbfb2;--edge-expensive: #c48a14;--edge-critical: #c44536;--shadow: rgba(23, 51, 44, .08)}[data-theme=high-contrast]{--bg: #ffffff;--bg-2: #f2f2f2;--surface: #ffffff;--line: #111111;--ink: #000000;--muted: #222222;--high: #007a33;--medium: #8a5a00;--low: #b00000;--critical: #9b0000;--accent: #0033cc;--rail-from: #f2f2f2;--rail-to: #e6e6e6;--rail-active: #d9d9d9;--btn: #ffffff;--btn-line: #000000;--btn-primary: #d9f2e3;--btn-primary-line: #007a33;--node-bg: #ffffff;--node-line: #000000;--graph-bg: #ffffff;--graph-grid: rgba(0, 0, 0, .12);--edge-cheap: #444444;--edge-expensive: #8a5a00;--edge-critical: #b00000;--shadow: rgba(0, 0, 0, .12)}*{box-sizing:border-box}html,body,#root{height:100%;margin:0}body{background:var(--bg);color:var(--ink);font-family:IBM Plex Sans,Segoe UI,sans-serif}button,input,select,textarea{font-family:inherit;color:inherit}.app{display:grid;grid-template-columns:220px 1fr;height:100%}.rail{border-right:1px solid var(--line);background:linear-gradient(180deg,var(--rail-from),var(--rail-to));padding:20px 14px;display:flex;flex-direction:column;gap:6px}.brand{font-family:IBM Plex Mono,monospace;letter-spacing:.18em;font-size:12px;text-transform:uppercase;color:var(--accent);margin:0 0 18px}.rail button,.tab{background:transparent;border:0;text-align:left;padding:8px 10px;border-radius:6px;color:var(--muted);cursor:pointer}.rail button.active,.tab.active{background:var(--rail-active);color:var(--ink)}.theme-pick{margin-top:10px;display:grid;gap:4px}.theme-pick label{font-size:10px;letter-spacing:.08em;text-transform:uppercase;color:var(--muted)}.theme-pick select{background:var(--surface);border:1px solid var(--line);border-radius:6px;padding:6px 8px;width:100%}.main{display:flex;flex-direction:column;min-width:0}.topbar{display:flex;gap:8px;align-items:center;padding:12px 16px;border-bottom:1px solid var(--line);background:var(--bg-2)}.topbar input,.topbar select{background:var(--surface);border:1px solid var(--line);border-radius:6px;padding:8px 10px;min-width:160px}.topbar input.path{flex:1}.topbar button,.btn{background:var(--btn);border:1px solid var(--btn-line);border-radius:6px;padding:8px 12px;cursor:pointer}.btn.primary{background:var(--btn-primary);border-color:var(--btn-primary-line)}.content{flex:1;min-height:0;display:grid;grid-template-columns:420px 1fr}.brief{overflow:auto;border-right:1px solid var(--line);padding:18px;background:radial-gradient(circle at 0 0,color-mix(in srgb,var(--accent) 8%,transparent),transparent 40%),var(--bg)}.graph-wrap{position:relative;min-height:0}.graph-wrap .react-flow{background-color:var(--graph-bg);background-image:linear-gradient(var(--graph-grid) 1px,transparent 1px),linear-gradient(90deg,var(--graph-grid) 1px,transparent 1px);background-size:24px 24px}.react-flow__minimap{background:var(--surface)!important}.react-flow__controls{box-shadow:none!important}.react-flow__controls-button{background:var(--surface)!important;border-bottom:1px solid var(--line)!important;fill:var(--ink)!important}h1{font-size:18px;margin:0 0 6px}.level{font-family:IBM Plex Mono,monospace;font-weight:600}.level.high{color:var(--high)}.level.medium{color:var(--medium)}.level.low{color:var(--low)}.kicker{color:var(--muted);font-size:12px;text-transform:uppercase;letter-spacing:.08em;margin:16px 0 6px}.chip{display:inline-block;font-size:11px;padding:2px 8px;border-radius:999px;border:1px solid var(--line);margin:0 6px 6px 0;color:var(--muted)}.chip.blocker{color:var(--low);border-color:var(--low)}.chip.warning{color:var(--medium);border-color:var(--medium)}.file{font-family:IBM Plex Mono,monospace;font-size:12px;color:var(--accent)}.muted{color:var(--muted);font-size:13px;line-height:1.45}.error{color:var(--low);padding:8px 16px}.banner{margin:0 16px 10px;padding:8px 12px;border-radius:8px;border:1px solid var(--line);background:var(--surface);font-size:13px;line-height:1.45}.banner.warn{border-color:var(--medium);color:var(--medium)}.banner.stale{border-color:var(--low);color:var(--low)}.empty{padding:8px 0;color:var(--muted);font-size:13px;line-height:1.55}.empty ol{margin:8px 0 0 18px;padding:0}.empty code{font-family:IBM Plex Mono,monospace;font-size:12px;color:var(--accent)}.btn-row{display:flex;flex-wrap:wrap;gap:8px;margin-top:12px}.pr-list{padding:16px;overflow:auto}.pr{border:1px solid var(--line);background:var(--surface);padding:12px 14px;border-radius:8px;margin-bottom:10px}.pr h3{margin:0 0 4px;font-size:14px}.settings{padding:24px;max-width:720px;display:grid;gap:10px}.settings label{font-size:12px;color:var(--muted)}.settings input,.settings select{background:var(--surface);border:1px solid var(--line);border-radius:6px;padding:8px 10px;width:100%}.theme-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(140px,1fr));gap:8px}.theme-swatch{border:1px solid var(--line);background:var(--surface);border-radius:8px;padding:10px;text-align:left;cursor:pointer}.theme-swatch.active{border-color:var(--accent);box-shadow:0 0 0 1px var(--accent)}.theme-swatch .name{font-size:13px;font-weight:600}.theme-swatch .group{font-size:11px;color:var(--muted)}.headline{white-space:pre-wrap;font-family:IBM Plex Mono,monospace;font-size:12px;color:var(--muted)}.graph-modes{display:flex;gap:6px;padding:10px 14px;border-bottom:1px solid var(--line);background:var(--bg-2)}.graph-modes button{background:transparent;border:1px solid var(--line);border-radius:999px;padding:4px 10px;color:var(--muted);cursor:pointer}.graph-modes button.active{background:var(--rail-active);color:var(--ink);border-color:var(--btn-primary-line)}.lp-node{padding:8px 10px;border-radius:8px;border:1px solid var(--node-line);background:var(--node-bg);min-width:150px;box-shadow:0 0 0 1px var(--shadow)}.lp-node .t{font-size:10px;color:var(--muted);text-transform:uppercase;letter-spacing:.08em}.lp-node .n{font-size:13px;font-weight:600} +.react-flow{direction:ltr;--xy-edge-stroke-default: #b1b1b7;--xy-edge-stroke-width-default: 1;--xy-edge-stroke-selected-default: #555;--xy-connectionline-stroke-default: #b1b1b7;--xy-connectionline-stroke-width-default: 1;--xy-attribution-background-color-default: rgba(255, 255, 255, .5);--xy-minimap-background-color-default: #fff;--xy-minimap-mask-background-color-default: rgba(240, 240, 240, .6);--xy-minimap-mask-stroke-color-default: transparent;--xy-minimap-mask-stroke-width-default: 1;--xy-minimap-node-background-color-default: #e2e2e2;--xy-minimap-node-stroke-color-default: transparent;--xy-minimap-node-stroke-width-default: 2;--xy-background-color-default: transparent;--xy-background-pattern-dots-color-default: #91919a;--xy-background-pattern-lines-color-default: #eee;--xy-background-pattern-cross-color-default: #e2e2e2;background-color:var(--xy-background-color, var(--xy-background-color-default));--xy-node-color-default: inherit;--xy-node-border-default: 1px solid #1a192b;--xy-node-background-color-default: #fff;--xy-node-group-background-color-default: rgba(240, 240, 240, .25);--xy-node-boxshadow-hover-default: 0 1px 4px 1px rgba(0, 0, 0, .08);--xy-node-boxshadow-selected-default: 0 0 0 .5px #1a192b;--xy-node-border-radius-default: 3px;--xy-handle-background-color-default: #1a192b;--xy-handle-border-color-default: #fff;--xy-selection-background-color-default: rgba(0, 89, 220, .08);--xy-selection-border-default: 1px dotted rgba(0, 89, 220, .8);--xy-controls-button-background-color-default: #fefefe;--xy-controls-button-background-color-hover-default: #f4f4f4;--xy-controls-button-color-default: inherit;--xy-controls-button-color-hover-default: inherit;--xy-controls-button-border-color-default: #eee;--xy-controls-box-shadow-default: 0 0 2px 1px rgba(0, 0, 0, .08);--xy-edge-label-background-color-default: #ffffff;--xy-edge-label-color-default: inherit;--xy-resize-background-color-default: #3367d9}.react-flow.dark{--xy-edge-stroke-default: #3e3e3e;--xy-edge-stroke-width-default: 1;--xy-edge-stroke-selected-default: #727272;--xy-connectionline-stroke-default: #b1b1b7;--xy-connectionline-stroke-width-default: 1;--xy-attribution-background-color-default: rgba(150, 150, 150, .25);--xy-minimap-background-color-default: #141414;--xy-minimap-mask-background-color-default: rgba(60, 60, 60, .6);--xy-minimap-mask-stroke-color-default: transparent;--xy-minimap-mask-stroke-width-default: 1;--xy-minimap-node-background-color-default: #2b2b2b;--xy-minimap-node-stroke-color-default: transparent;--xy-minimap-node-stroke-width-default: 2;--xy-background-color-default: #141414;--xy-background-pattern-dots-color-default: #555;--xy-background-pattern-lines-color-default: #333;--xy-background-pattern-cross-color-default: #333;--xy-node-color-default: #f8f8f8;--xy-node-border-default: 1px solid #3c3c3c;--xy-node-background-color-default: #1e1e1e;--xy-node-group-background-color-default: rgba(240, 240, 240, .25);--xy-node-boxshadow-hover-default: 0 1px 4px 1px rgba(255, 255, 255, .08);--xy-node-boxshadow-selected-default: 0 0 0 .5px #999;--xy-handle-background-color-default: #bebebe;--xy-handle-border-color-default: #1e1e1e;--xy-selection-background-color-default: rgba(200, 200, 220, .08);--xy-selection-border-default: 1px dotted rgba(200, 200, 220, .8);--xy-controls-button-background-color-default: #2b2b2b;--xy-controls-button-background-color-hover-default: #3e3e3e;--xy-controls-button-color-default: #f8f8f8;--xy-controls-button-color-hover-default: #fff;--xy-controls-button-border-color-default: #5b5b5b;--xy-controls-box-shadow-default: 0 0 2px 1px rgba(0, 0, 0, .08);--xy-edge-label-background-color-default: #141414;--xy-edge-label-color-default: #f8f8f8}.react-flow__background{background-color:var(--xy-background-color-props, var(--xy-background-color, var(--xy-background-color-default)));pointer-events:none;z-index:-1}.react-flow__container{position:absolute;width:100%;height:100%;top:0;left:0}.react-flow__pane{z-index:1;touch-action:none}.react-flow__pane.draggable{cursor:grab}.react-flow__pane.dragging{cursor:grabbing}.react-flow__pane.selection{cursor:pointer}.react-flow__viewport{transform-origin:0 0;z-index:2;pointer-events:none}.react-flow__renderer{z-index:4}.react-flow__selection{z-index:6}.react-flow__nodesselection-rect:focus,.react-flow__nodesselection-rect:focus-visible{outline:none}.react-flow__edge-path{stroke:var(--xy-edge-stroke, var(--xy-edge-stroke-default));stroke-width:var(--xy-edge-stroke-width, var(--xy-edge-stroke-width-default));fill:none}.react-flow__connection-path{stroke:var(--xy-connectionline-stroke, var(--xy-connectionline-stroke-default));stroke-width:var(--xy-connectionline-stroke-width, var(--xy-connectionline-stroke-width-default));fill:none}.react-flow .react-flow__edges{position:absolute}.react-flow .react-flow__edges svg{overflow:visible;position:absolute;pointer-events:none}.react-flow__edge{pointer-events:visibleStroke}.react-flow__edge.selectable{cursor:pointer}.react-flow__edge.animated path{stroke-dasharray:5;animation:dashdraw .5s linear infinite}.react-flow__edge.animated path.react-flow__edge-interaction{stroke-dasharray:none;animation:none}.react-flow__edge.inactive{pointer-events:none}.react-flow__edge.selected,.react-flow__edge:focus,.react-flow__edge:focus-visible{outline:none}.react-flow__edge.selected .react-flow__edge-path,.react-flow__edge.selectable:focus .react-flow__edge-path,.react-flow__edge.selectable:focus-visible .react-flow__edge-path{stroke:var(--xy-edge-stroke-selected, var(--xy-edge-stroke-selected-default))}.react-flow__edge-textwrapper{pointer-events:all}.react-flow__edge .react-flow__edge-text{pointer-events:none;-webkit-user-select:none;-moz-user-select:none;user-select:none}.react-flow__arrowhead polyline{stroke:var(--xy-edge-stroke, var(--xy-edge-stroke-default))}.react-flow__arrowhead polyline.arrowclosed{fill:var(--xy-edge-stroke, var(--xy-edge-stroke-default))}.react-flow__connection{pointer-events:none}.react-flow__connection .animated{stroke-dasharray:5;animation:dashdraw .5s linear infinite}svg.react-flow__connectionline{z-index:1001;overflow:visible;position:absolute}.react-flow__nodes{pointer-events:none;transform-origin:0 0}.react-flow__node{position:absolute;-webkit-user-select:none;-moz-user-select:none;user-select:none;pointer-events:all;transform-origin:0 0;box-sizing:border-box;cursor:default}.react-flow__node.selectable{cursor:pointer}.react-flow__node.draggable{cursor:grab;pointer-events:all}.react-flow__node.draggable.dragging{cursor:grabbing}.react-flow__nodesselection{z-index:3;transform-origin:left top;pointer-events:none}.react-flow__nodesselection-rect{position:absolute;pointer-events:all;cursor:grab}.react-flow__handle{position:absolute;pointer-events:none;min-width:5px;min-height:5px;width:6px;height:6px;background-color:var(--xy-handle-background-color, var(--xy-handle-background-color-default));border:1px solid var(--xy-handle-border-color, var(--xy-handle-border-color-default));border-radius:100%}.react-flow__handle.connectingfrom{pointer-events:all}.react-flow__handle.connectionindicator{pointer-events:all;cursor:crosshair}.react-flow__handle-bottom{top:auto;left:50%;bottom:0;transform:translate(-50%,50%)}.react-flow__handle-top{top:0;left:50%;transform:translate(-50%,-50%)}.react-flow__handle-left{top:50%;left:0;transform:translate(-50%,-50%)}.react-flow__handle-right{top:50%;right:0;transform:translate(50%,-50%)}.react-flow__edgeupdater{cursor:move;pointer-events:all}.react-flow__pane.selection .react-flow__panel{pointer-events:none}.react-flow__panel{position:absolute;z-index:5;margin:15px}.react-flow__panel.top{top:0}.react-flow__panel.bottom{bottom:0}.react-flow__panel.top.center,.react-flow__panel.bottom.center{left:50%;transform:translate(-15px) translate(-50%)}.react-flow__panel.left{left:0}.react-flow__panel.right{right:0}.react-flow__panel.left.center,.react-flow__panel.right.center{top:50%;transform:translateY(-15px) translateY(-50%)}.react-flow__attribution{font-size:10px;background:var(--xy-attribution-background-color, var(--xy-attribution-background-color-default));padding:2px 3px;margin:0}.react-flow__attribution a{text-decoration:none;color:#999}@keyframes dashdraw{0%{stroke-dashoffset:10}}.react-flow__edgelabel-renderer{position:absolute;width:100%;height:100%;pointer-events:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;left:0;top:0}.react-flow__viewport-portal{position:absolute;width:100%;height:100%;left:0;top:0;-webkit-user-select:none;-moz-user-select:none;user-select:none}.react-flow__minimap{background:var( --xy-minimap-background-color-props, var(--xy-minimap-background-color, var(--xy-minimap-background-color-default)) )}.react-flow__minimap-svg{display:block}.react-flow__minimap-mask{fill:var( --xy-minimap-mask-background-color-props, var(--xy-minimap-mask-background-color, var(--xy-minimap-mask-background-color-default)) );stroke:var( --xy-minimap-mask-stroke-color-props, var(--xy-minimap-mask-stroke-color, var(--xy-minimap-mask-stroke-color-default)) );stroke-width:var( --xy-minimap-mask-stroke-width-props, var(--xy-minimap-mask-stroke-width, var(--xy-minimap-mask-stroke-width-default)) )}.react-flow__minimap-node{fill:var( --xy-minimap-node-background-color-props, var(--xy-minimap-node-background-color, var(--xy-minimap-node-background-color-default)) );stroke:var( --xy-minimap-node-stroke-color-props, var(--xy-minimap-node-stroke-color, var(--xy-minimap-node-stroke-color-default)) );stroke-width:var( --xy-minimap-node-stroke-width-props, var(--xy-minimap-node-stroke-width, var(--xy-minimap-node-stroke-width-default)) )}.react-flow__background-pattern.dots{fill:var( --xy-background-pattern-color-props, var(--xy-background-pattern-color, var(--xy-background-pattern-dots-color-default)) )}.react-flow__background-pattern.lines{stroke:var( --xy-background-pattern-color-props, var(--xy-background-pattern-color, var(--xy-background-pattern-lines-color-default)) )}.react-flow__background-pattern.cross{stroke:var( --xy-background-pattern-color-props, var(--xy-background-pattern-color, var(--xy-background-pattern-cross-color-default)) )}.react-flow__controls{display:flex;flex-direction:column;box-shadow:var(--xy-controls-box-shadow, var(--xy-controls-box-shadow-default))}.react-flow__controls.horizontal{flex-direction:row}.react-flow__controls-button{display:flex;justify-content:center;align-items:center;height:26px;width:26px;padding:4px;border:none;background:var(--xy-controls-button-background-color, var(--xy-controls-button-background-color-default));border-bottom:1px solid var( --xy-controls-button-border-color-props, var(--xy-controls-button-border-color, var(--xy-controls-button-border-color-default)) );color:var( --xy-controls-button-color-props, var(--xy-controls-button-color, var(--xy-controls-button-color-default)) );cursor:pointer;-webkit-user-select:none;-moz-user-select:none;user-select:none}.react-flow__controls-button svg{width:100%;max-width:12px;max-height:12px;fill:currentColor}.react-flow__edge.updating .react-flow__edge-path{stroke:#777}.react-flow__edge-text{font-size:10px}.react-flow__node.selectable:focus,.react-flow__node.selectable:focus-visible{outline:none}.react-flow__node-input,.react-flow__node-default,.react-flow__node-output,.react-flow__node-group{padding:10px;border-radius:var(--xy-node-border-radius, var(--xy-node-border-radius-default));width:150px;font-size:12px;color:var(--xy-node-color, var(--xy-node-color-default));text-align:center;border:var(--xy-node-border, var(--xy-node-border-default));background-color:var(--xy-node-background-color, var(--xy-node-background-color-default))}.react-flow__node-input.selectable:hover,.react-flow__node-default.selectable:hover,.react-flow__node-output.selectable:hover,.react-flow__node-group.selectable:hover{box-shadow:var(--xy-node-boxshadow-hover, var(--xy-node-boxshadow-hover-default))}.react-flow__node-input.selectable.selected,.react-flow__node-input.selectable:focus,.react-flow__node-input.selectable:focus-visible,.react-flow__node-default.selectable.selected,.react-flow__node-default.selectable:focus,.react-flow__node-default.selectable:focus-visible,.react-flow__node-output.selectable.selected,.react-flow__node-output.selectable:focus,.react-flow__node-output.selectable:focus-visible,.react-flow__node-group.selectable.selected,.react-flow__node-group.selectable:focus,.react-flow__node-group.selectable:focus-visible{box-shadow:var(--xy-node-boxshadow-selected, var(--xy-node-boxshadow-selected-default))}.react-flow__node-group{background-color:var(--xy-node-group-background-color, var(--xy-node-group-background-color-default))}.react-flow__nodesselection-rect,.react-flow__selection{background:var(--xy-selection-background-color, var(--xy-selection-background-color-default));border:var(--xy-selection-border, var(--xy-selection-border-default))}.react-flow__nodesselection-rect:focus,.react-flow__nodesselection-rect:focus-visible,.react-flow__selection:focus,.react-flow__selection:focus-visible{outline:none}.react-flow__controls-button:hover{background:var( --xy-controls-button-background-color-hover-props, var(--xy-controls-button-background-color-hover, var(--xy-controls-button-background-color-hover-default)) );color:var( --xy-controls-button-color-hover-props, var(--xy-controls-button-color-hover, var(--xy-controls-button-color-hover-default)) )}.react-flow__controls-button:disabled{pointer-events:none}.react-flow__controls-button:disabled svg{fill-opacity:.4}.react-flow__controls-button:last-child{border-bottom:none}.react-flow__controls.horizontal .react-flow__controls-button{border-bottom:none;border-right:1px solid var( --xy-controls-button-border-color-props, var(--xy-controls-button-border-color, var(--xy-controls-button-border-color-default)) )}.react-flow__controls.horizontal .react-flow__controls-button:last-child{border-right:none}.react-flow__resize-control{position:absolute}.react-flow__resize-control.left,.react-flow__resize-control.right{cursor:ew-resize}.react-flow__resize-control.top,.react-flow__resize-control.bottom{cursor:ns-resize}.react-flow__resize-control.top.left,.react-flow__resize-control.bottom.right{cursor:nwse-resize}.react-flow__resize-control.bottom.left,.react-flow__resize-control.top.right{cursor:nesw-resize}.react-flow__resize-control.handle{width:5px;height:5px;border:1px solid #fff;border-radius:1px;background-color:var(--xy-resize-background-color, var(--xy-resize-background-color-default));translate:-50% -50%}.react-flow__resize-control.handle.left{left:0;top:50%}.react-flow__resize-control.handle.right{left:100%;top:50%}.react-flow__resize-control.handle.top{left:50%;top:0}.react-flow__resize-control.handle.bottom{left:50%;top:100%}.react-flow__resize-control.handle.top.left,.react-flow__resize-control.handle.bottom.left{left:0}.react-flow__resize-control.handle.top.right,.react-flow__resize-control.handle.bottom.right{left:100%}.react-flow__resize-control.line{border-color:var(--xy-resize-background-color, var(--xy-resize-background-color-default));border-width:0;border-style:solid}.react-flow__resize-control.line.left,.react-flow__resize-control.line.right{width:1px;transform:translate(-50%);top:0;height:100%}.react-flow__resize-control.line.left{left:0;border-left-width:1px}.react-flow__resize-control.line.right{left:100%;border-right-width:1px}.react-flow__resize-control.line.top,.react-flow__resize-control.line.bottom{height:1px;transform:translateY(-50%);left:0;width:100%}.react-flow__resize-control.line.top{top:0;border-top-width:1px}.react-flow__resize-control.line.bottom{border-bottom-width:1px;top:100%}.react-flow__edge-textbg{fill:var(--xy-edge-label-background-color, var(--xy-edge-label-background-color-default))}.react-flow__edge-text{fill:var(--xy-edge-label-color, var(--xy-edge-label-color-default))}:root,[data-theme=obsidian]{--bg: #070b10;--bg-2: #0d141c;--surface: #121a24;--line: #1e2c3c;--ink: #e7eef6;--muted: #8b9bb0;--high: #2a9d8f;--medium: #e9c46a;--low: #e76f51;--critical: #e85d04;--accent: #4cc9f0;--rail-from: #0b1219;--rail-to: #070b10;--rail-active: #15202c;--btn: #173044;--btn-line: #24506c;--btn-primary: #134e4a;--btn-primary-line: #2a9d8f;--node-bg: #101822;--node-line: #2a3d52;--graph-bg: #070b10;--graph-grid: rgba(42, 80, 120, .09);--edge-cheap: #4a5568;--edge-expensive: #f4a261;--edge-critical: #e85d04;--shadow: rgba(76, 201, 240, .08)}[data-theme=nord]{--bg: #2e3440;--bg-2: #3b4252;--surface: #434c5e;--line: #4c566a;--ink: #eceff4;--muted: #d8dee9;--high: #a3be8c;--medium: #ebcb8b;--low: #bf616a;--critical: #d08770;--accent: #88c0d0;--rail-from: #3b4252;--rail-to: #2e3440;--rail-active: #4c566a;--btn: #434c5e;--btn-line: #81a1c1;--btn-primary: #5e81ac;--btn-primary-line: #88c0d0;--node-bg: #3b4252;--node-line: #81a1c1;--graph-bg: #2e3440;--graph-grid: rgba(136, 192, 208, .12);--edge-cheap: #4c566a;--edge-expensive: #d08770;--edge-critical: #bf616a;--shadow: rgba(136, 192, 208, .12)}[data-theme=solarized-dark]{--bg: #002b36;--bg-2: #073642;--surface: #0a3944;--line: #16444f;--ink: #eee8d5;--muted: #93a1a1;--high: #859900;--medium: #b58900;--low: #dc322f;--critical: #cb4b16;--accent: #2aa198;--rail-from: #073642;--rail-to: #002b36;--rail-active: #16444f;--btn: #073642;--btn-line: #268bd2;--btn-primary: #0a4a42;--btn-primary-line: #2aa198;--node-bg: #073642;--node-line: #268bd2;--graph-bg: #002b36;--graph-grid: rgba(42, 161, 152, .12);--edge-cheap: #586e75;--edge-expensive: #cb4b16;--edge-critical: #dc322f;--shadow: rgba(42, 161, 152, .12)}[data-theme=forest]{--bg: #0e1510;--bg-2: #152019;--surface: #1b2a20;--line: #2c4334;--ink: #e4f0e6;--muted: #8eaa96;--high: #6ab04c;--medium: #c8a951;--low: #e17055;--critical: #d35400;--accent: #7bed9f;--rail-from: #152019;--rail-to: #0e1510;--rail-active: #1f3326;--btn: #1f3326;--btn-line: #3d6b4f;--btn-primary: #1e4d32;--btn-primary-line: #6ab04c;--node-bg: #16241b;--node-line: #3d6b4f;--graph-bg: #0e1510;--graph-grid: rgba(123, 237, 159, .1);--edge-cheap: #3d6b4f;--edge-expensive: #c8a951;--edge-critical: #d35400;--shadow: rgba(123, 237, 159, .1)}[data-theme=rose]{--bg: #191724;--bg-2: #1f1d2e;--surface: #26233a;--line: #403d52;--ink: #e0def4;--muted: #908caa;--high: #9ccfd8;--medium: #f6c177;--low: #eb6f92;--critical: #eb6f92;--accent: #c4a7e7;--rail-from: #1f1d2e;--rail-to: #191724;--rail-active: #26233a;--btn: #26233a;--btn-line: #c4a7e7;--btn-primary: #3a2f4d;--btn-primary-line: #c4a7e7;--node-bg: #1f1d2e;--node-line: #524f67;--graph-bg: #191724;--graph-grid: rgba(196, 167, 231, .12);--edge-cheap: #524f67;--edge-expensive: #f6c177;--edge-critical: #eb6f92;--shadow: rgba(196, 167, 231, .12)}[data-theme=amber]{--bg: #120e0a;--bg-2: #1c1610;--surface: #261e16;--line: #3d2f22;--ink: #f4e6d0;--muted: #b59a78;--high: #c4d6a0;--medium: #e9b44c;--low: #d8572a;--critical: #c0392b;--accent: #f0a05a;--rail-from: #1c1610;--rail-to: #120e0a;--rail-active: #2b2218;--btn: #2b2218;--btn-line: #8a5a2b;--btn-primary: #4a3418;--btn-primary-line: #f0a05a;--node-bg: #1c1610;--node-line: #8a5a2b;--graph-bg: #120e0a;--graph-grid: rgba(240, 160, 90, .12);--edge-cheap: #5c4a38;--edge-expensive: #e9b44c;--edge-critical: #d8572a;--shadow: rgba(240, 160, 90, .12)}[data-theme=volcano]{--bg: #14090a;--bg-2: #1e0e10;--surface: #2a1416;--line: #4a2226;--ink: #fde8e4;--muted: #c48b86;--high: #7bed9f;--medium: #f6c90e;--low: #ff6b6b;--critical: #ff3b3b;--accent: #ff7b54;--rail-from: #1e0e10;--rail-to: #14090a;--rail-active: #32181b;--btn: #32181b;--btn-line: #ff7b54;--btn-primary: #5a1f18;--btn-primary-line: #ff7b54;--node-bg: #1e0e10;--node-line: #7a3330;--graph-bg: #14090a;--graph-grid: rgba(255, 123, 84, .12);--edge-cheap: #5a3330;--edge-expensive: #ff7b54;--edge-critical: #ff3b3b;--shadow: rgba(255, 123, 84, .14)}[data-theme=lavender]{--bg: #12101c;--bg-2: #1a1730;--surface: #221e3c;--line: #3b3560;--ink: #efeaff;--muted: #b3a7d6;--high: #80ffdb;--medium: #ffd166;--low: #ff6b9d;--critical: #ff4d6d;--accent: #c77dff;--rail-from: #1a1730;--rail-to: #12101c;--rail-active: #2a2550;--btn: #2a2550;--btn-line: #c77dff;--btn-primary: #3d2a66;--btn-primary-line: #c77dff;--node-bg: #1a1730;--node-line: #5a4d8a;--graph-bg: #12101c;--graph-grid: rgba(199, 125, 255, .12);--edge-cheap: #5a4d8a;--edge-expensive: #ffd166;--edge-critical: #ff4d6d;--shadow: rgba(199, 125, 255, .14)}[data-theme=paper]{--bg: #f6f1e8;--bg-2: #efe6d6;--surface: #fffaf2;--line: #d9cbb6;--ink: #2b241c;--muted: #6f6456;--high: #2a7a4b;--medium: #b5811a;--low: #c0392b;--critical: #a93226;--accent: #1d6a7a;--rail-from: #efe6d6;--rail-to: #e7dcc8;--rail-active: #e2d3bb;--btn: #fffaf2;--btn-line: #c9b79a;--btn-primary: #d7eee0;--btn-primary-line: #2a7a4b;--node-bg: #fffaf2;--node-line: #c9b79a;--graph-bg: #f6f1e8;--graph-grid: rgba(29, 106, 122, .1);--edge-cheap: #b7a48c;--edge-expensive: #c0392b;--edge-critical: #a93226;--shadow: rgba(43, 36, 28, .08)}[data-theme=solarized-light]{--bg: #fdf6e3;--bg-2: #eee8d5;--surface: #f5efdc;--line: #d6cba9;--ink: #657b83;--muted: #93a1a1;--high: #859900;--medium: #b58900;--low: #dc322f;--critical: #cb4b16;--accent: #268bd2;--rail-from: #eee8d5;--rail-to: #e6dfc8;--rail-active: #e0d9c0;--btn: #fdf6e3;--btn-line: #93a1a1;--btn-primary: #e8efc8;--btn-primary-line: #859900;--node-bg: #fdf6e3;--node-line: #93a1a1;--graph-bg: #fdf6e3;--graph-grid: rgba(38, 139, 210, .12);--edge-cheap: #93a1a1;--edge-expensive: #cb4b16;--edge-critical: #dc322f;--shadow: rgba(101, 123, 131, .1)}[data-theme=seafoam]{--bg: #eef7f4;--bg-2: #dff0ea;--surface: #ffffff;--line: #b7d5cc;--ink: #17332c;--muted: #4d7268;--high: #1b8a5a;--medium: #c48a14;--low: #c44536;--critical: #9b2d22;--accent: #1d9a8a;--rail-from: #dff0ea;--rail-to: #cfe6de;--rail-active: #c4ddd4;--btn: #ffffff;--btn-line: #8fbfb2;--btn-primary: #d4f0e4;--btn-primary-line: #1b8a5a;--node-bg: #ffffff;--node-line: #8fbfb2;--graph-bg: #eef7f4;--graph-grid: rgba(29, 154, 138, .12);--edge-cheap: #8fbfb2;--edge-expensive: #c48a14;--edge-critical: #c44536;--shadow: rgba(23, 51, 44, .08)}[data-theme=high-contrast]{--bg: #ffffff;--bg-2: #f2f2f2;--surface: #ffffff;--line: #111111;--ink: #000000;--muted: #222222;--high: #007a33;--medium: #8a5a00;--low: #b00000;--critical: #9b0000;--accent: #0033cc;--rail-from: #f2f2f2;--rail-to: #e6e6e6;--rail-active: #d9d9d9;--btn: #ffffff;--btn-line: #000000;--btn-primary: #d9f2e3;--btn-primary-line: #007a33;--node-bg: #ffffff;--node-line: #000000;--graph-bg: #ffffff;--graph-grid: rgba(0, 0, 0, .12);--edge-cheap: #444444;--edge-expensive: #8a5a00;--edge-critical: #b00000;--shadow: rgba(0, 0, 0, .12)}*{box-sizing:border-box}html,body,#root{height:100%;margin:0}:root{--radius: 6px;--radius-lg: 10px;--control-h: 32px;--font: "IBM Plex Sans", ui-sans-serif, system-ui, -apple-system, "Segoe UI", sans-serif;--mono: "IBM Plex Mono", ui-monospace, "SF Mono", Menlo, Consolas, monospace;--focus-ring: 0 0 0 2px var(--bg), 0 0 0 4px var(--accent);--space: 8px}body{background:var(--bg);color:var(--ink);font-family:var(--font);font-size:13px;line-height:1.45;-webkit-font-smoothing:antialiased}button,input,select,textarea{font-family:inherit;font-size:inherit;color:inherit}button:focus-visible,input:focus-visible,select:focus-visible,textarea:focus-visible,a:focus-visible,summary:focus-visible{outline:none;box-shadow:var(--focus-ring)}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip-path:inset(50%);white-space:nowrap;border:0}.skip{position:absolute;left:12px;top:-40px;z-index:50;background:var(--surface);color:var(--ink);border:1px solid var(--accent);border-radius:var(--radius);padding:8px 12px}.skip:focus{top:12px}.app{display:grid;grid-template-columns:232px 1fr;height:100%}.rail{border-right:1px solid var(--line);background:linear-gradient(180deg,var(--rail-from),var(--rail-to));padding:16px 12px;display:flex;flex-direction:column;gap:2px;min-width:0}.brand{display:flex;flex-direction:column;gap:2px;padding:4px 8px 16px}.brand-mark{font-family:var(--mono);letter-spacing:.16em;font-size:11px;text-transform:uppercase;color:var(--accent);font-weight:600}.brand-sub{font-size:11px;color:var(--muted)}.nav-item{display:flex;align-items:center;gap:10px;background:transparent;border:0;text-align:left;padding:8px 10px;border-radius:var(--radius);color:var(--muted);cursor:pointer;width:100%}.nav-item:hover{background:color-mix(in srgb,var(--rail-active) 70%,transparent);color:var(--ink)}.nav-item.active{background:var(--rail-active);color:var(--ink);font-weight:500}.nav-item svg{flex-shrink:0}.theme-pick{margin-top:14px;display:grid;gap:4px;padding:0 2px}.theme-pick label{font-size:11px;letter-spacing:.06em;text-transform:uppercase;color:var(--muted);font-weight:500}.theme-pick select,.field select,.field input,.topbar input,.topbar select,.settings input,.settings select{background:var(--surface);border:1px solid var(--line);border-radius:var(--radius);padding:0 10px;height:var(--control-h);width:100%}.rail-foot{margin-top:auto;padding:12px 8px 4px;border-top:1px solid var(--line);display:grid;gap:6px}.kbd-hint{font-size:11px;color:var(--muted)}kbd{font-family:var(--mono);font-size:10px;border:1px solid var(--line);border-radius:4px;padding:0 4px;background:var(--surface)}.main{display:flex;flex-direction:column;min-width:0;min-height:0;position:relative;background:var(--bg)}.progress{position:absolute;top:0;left:0;right:0;height:2px;overflow:hidden;z-index:30;background:color-mix(in srgb,var(--accent) 20%,transparent)}.progress i{display:block;height:100%;width:32%;background:var(--accent);animation:indeterminate 1.1s ease-in-out infinite}@keyframes indeterminate{0%{transform:translate(-120%)}to{transform:translate(400%)}}.topbar{display:flex;gap:10px;align-items:flex-end;padding:10px 16px;border-bottom:1px solid var(--line);background:var(--bg-2);flex-wrap:wrap}.field{display:grid;gap:4px;min-width:0}.field>span{font-size:11px;color:var(--muted);font-weight:500}.field.path{flex:1;min-width:180px}.field.ref{width:132px;flex:0 0 132px}.field.workspace{width:180px;flex:0 0 180px}.topbar input,.topbar select{min-width:0}.topbar-actions{display:flex;gap:8px;margin-left:auto;align-items:center;padding-bottom:0}.btn,.topbar button{background:var(--btn);border:1px solid var(--btn-line);border-radius:var(--radius);height:var(--control-h);padding:0 12px;cursor:pointer;font-weight:500;display:inline-flex;align-items:center;justify-content:center;gap:6px;white-space:nowrap}.btn:hover,.topbar button:hover{filter:brightness(1.08)}.btn:disabled,.topbar button:disabled{opacity:.55;cursor:not-allowed;filter:none}.btn.primary{background:var(--btn-primary);border-color:var(--btn-primary-line)}.btn.ghost{background:transparent}.alerts{display:grid;gap:8px;padding:10px 16px 0}.alerts:empty{display:none;padding:0}.stage{flex:1;min-height:0;display:flex;flex-direction:column}.content{flex:1;min-height:0;display:grid;grid-template-columns:minmax(340px,420px) 1fr}.brief{overflow:auto;border-right:1px solid var(--line);padding:16px 18px 24px;background:radial-gradient(circle at 0 0,color-mix(in srgb,var(--accent) 8%,transparent),transparent 42%),var(--bg)}.graph-wrap{position:relative;min-height:0;display:flex;flex-direction:column}.graph-wrap .react-flow{background-color:var(--graph-bg);background-image:linear-gradient(var(--graph-grid) 1px,transparent 1px),linear-gradient(90deg,var(--graph-grid) 1px,transparent 1px);background-size:24px 24px}.react-flow__minimap{background:var(--surface)!important}.react-flow__controls{box-shadow:none!important}.react-flow__controls-button{background:var(--surface)!important;border-bottom:1px solid var(--line)!important;fill:var(--ink)!important}h1{font-size:18px;margin:0 0 6px;font-weight:600}h2{font-size:13px;margin:0;font-weight:600}.merge-box{border:1px solid var(--line);background:var(--surface);border-radius:var(--radius-lg);padding:12px 14px;margin-bottom:12px}.merge-box.high{border-color:color-mix(in srgb,var(--high) 55%,var(--line))}.merge-box.medium{border-color:color-mix(in srgb,var(--medium) 55%,var(--line))}.merge-box.low{border-color:color-mix(in srgb,var(--low) 55%,var(--line))}.level{font-family:var(--mono);font-weight:600;font-size:14px}.level.high{color:var(--high)}.level.medium{color:var(--medium)}.level.low{color:var(--low)}.merge-title{margin-top:4px;font-size:13px;color:var(--ink)}.reasons{margin:10px 0 0;padding:0 0 0 18px;color:var(--muted)}.reasons li{margin:0 0 4px}.metrics{display:grid;grid-template-columns:repeat(3,1fr);gap:8px;margin:0 0 14px}.metric{border:1px solid var(--line);border-radius:var(--radius);background:var(--surface);padding:8px 10px}.metric .n{font-family:var(--mono);font-size:16px;font-weight:600;font-variant-numeric:tabular-nums}.metric .l{font-size:11px;color:var(--muted);margin-top:2px}.section{border-top:1px solid var(--line);padding:8px 0 4px}.section>summary{cursor:pointer;list-style:none;display:flex;align-items:center;justify-content:space-between;color:var(--muted);font-size:11px;text-transform:uppercase;letter-spacing:.07em;font-weight:600;padding:6px 0}.section>summary::-webkit-details-marker{display:none}.section>summary .count{font-family:var(--mono);letter-spacing:0;text-transform:none;border:1px solid var(--line);border-radius:999px;padding:0 7px;height:18px;display:inline-flex;align-items:center;font-size:11px}.kicker{color:var(--muted);font-size:11px;text-transform:uppercase;letter-spacing:.08em;margin:16px 0 6px;font-weight:600}.chip{display:inline-flex;align-items:center;font-size:11px;padding:2px 8px;border-radius:999px;border:1px solid var(--line);margin:0 6px 6px 0;color:var(--muted);background:var(--surface)}.chip.blocker{color:var(--low);border-color:var(--low)}.chip.warning{color:var(--medium);border-color:var(--medium)}.chip.open{color:var(--high);border-color:color-mix(in srgb,var(--high) 50%,var(--line))}.file{font-family:var(--mono);font-size:12px;color:var(--accent)}.read-item,.finding,.residual{padding:8px 0;border-bottom:1px solid color-mix(in srgb,var(--line) 70%,transparent)}.read-item:last-child,.finding:last-child{border-bottom:0}.read-item .why{color:var(--muted);font-size:12px;margin-top:2px}.muted{color:var(--muted);font-size:13px;line-height:1.45}.error{color:var(--low);padding:8px 12px;border:1px solid var(--low);background:color-mix(in srgb,var(--low) 10%,var(--surface));border-radius:var(--radius);display:flex;justify-content:space-between;gap:12px;align-items:flex-start}.banner{padding:8px 12px;border-radius:var(--radius);border:1px solid var(--line);background:var(--surface);font-size:13px;line-height:1.45;display:flex;justify-content:space-between;gap:12px;align-items:flex-start}.banner.warn{border-color:var(--medium);color:var(--medium)}.banner.stale{border-color:var(--low);color:var(--low)}.banner .dismiss{background:transparent;border:0;color:inherit;cursor:pointer;height:auto;padding:0 2px;opacity:.7}.empty{padding:24px 8px;color:var(--muted);font-size:13px;line-height:1.55}.empty h2{font-size:16px;color:var(--ink);margin-bottom:8px}.empty ol{margin:12px 0 0 18px;padding:0}.empty code,code{font-family:var(--mono);font-size:12px;color:var(--accent)}.btn-row{display:flex;flex-wrap:wrap;gap:8px;margin-top:12px}.pr-list{padding:16px;overflow:auto}.pr-toolbar{display:flex;gap:8px;align-items:flex-end;margin-bottom:14px}.pr-toolbar .field{flex:1}.pr-toolbar .field.provider{flex:0 0 140px}.pr{border:1px solid var(--line);background:var(--surface);padding:12px 14px;border-radius:var(--radius-lg);margin-bottom:10px}.pr h3{margin:0 0 4px;font-size:14px;font-weight:600}.pr-meta{display:flex;flex-wrap:wrap;gap:8px 12px;align-items:center;margin:6px 0 10px}.pr-actions{display:flex;gap:8px;align-items:center}.settings{padding:24px;max-width:760px;overflow:auto;display:grid;gap:16px}.settings-card{border:1px solid var(--line);background:var(--surface);border-radius:var(--radius-lg);padding:16px;display:grid;gap:8px}.settings-card h2{font-size:14px;margin-bottom:2px}.settings label{font-size:12px;color:var(--muted);font-weight:500}.theme-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(140px,1fr));gap:8px}.theme-swatch{border:1px solid var(--line);background:var(--bg);border-radius:var(--radius);padding:10px;text-align:left;cursor:pointer;height:auto}.theme-swatch.active{border-color:var(--accent);box-shadow:0 0 0 1px var(--accent)}.theme-swatch .name{font-size:13px;font-weight:600}.theme-swatch .group{font-size:11px;color:var(--muted)}.headline{white-space:pre-wrap;font-family:var(--mono);font-size:12px;color:var(--muted);margin:8px 0 0}.graph-modes{display:flex;gap:8px;align-items:center;padding:8px 14px;border-bottom:1px solid var(--line);background:var(--bg-2)}.seg{display:inline-flex;border:1px solid var(--line);border-radius:999px;padding:2px;background:var(--surface)}.seg button,.graph-modes button{background:transparent;border:0;border-radius:999px;padding:4px 12px;color:var(--muted);cursor:pointer;height:26px}.seg button.active,.graph-modes button.active{background:var(--rail-active);color:var(--ink)}.legend{margin-left:auto;display:flex;gap:12px;color:var(--muted);font-size:11px}.legend i{display:inline-block;width:14px;height:2px;margin-right:6px;vertical-align:middle;background:var(--edge-cheap)}.legend i.exp{background:var(--edge-expensive)}.legend i.crit{background:var(--edge-critical);height:3px}.legend i.dash{border-top:2px dashed var(--muted);background:none;height:0}.inspector{position:absolute;top:12px;right:12px;z-index:5;width:260px;background:var(--surface);border:1px solid var(--line);border-radius:var(--radius-lg);padding:10px 12px;box-shadow:0 8px 24px var(--shadow)}.inspector .t{font-size:11px;color:var(--muted);text-transform:uppercase;letter-spacing:.06em}.inspector .n{font-weight:600;margin:4px 0}.lp-node{padding:8px 10px;border-radius:var(--radius);border:1px solid var(--node-line);background:var(--node-bg);min-width:168px;box-shadow:0 0 0 1px var(--shadow)}.lp-node .t{font-size:10px;color:var(--muted);text-transform:uppercase;letter-spacing:.08em}.lp-node .n{font-size:13px;font-weight:600}.lp-node.selected{border-color:var(--accent);box-shadow:0 0 0 1px var(--accent)}.type-table{width:100%;border-collapse:collapse;font-size:12px}.type-table td{padding:3px 0}.type-table td:last-child{text-align:right;font-family:var(--mono);font-variant-numeric:tabular-nums;color:var(--muted)}@media(prefers-reduced-motion:reduce){.progress i{animation:none;width:100%}*{scroll-behavior:auto!important}}@media(max-width:960px){.app{grid-template-columns:56px 1fr}.brand-sub,.nav-item span,.theme-pick,.kbd-hint,.rail-foot .muted{display:none}.nav-item{justify-content:center;padding:10px}.content{grid-template-columns:1fr}.brief{border-right:0;border-bottom:1px solid var(--line);max-height:42vh}} diff --git a/src/loadpath/static/index.html b/src/loadpath/static/index.html index 7fcbdee..f45dcef 100644 --- a/src/loadpath/static/index.html +++ b/src/loadpath/static/index.html @@ -9,14 +9,16 @@ try { var t = localStorage.getItem("loadpath.theme"); if (t) document.documentElement.setAttribute("data-theme", t); + var light = { paper: 1, "solarized-light": 1, seafoam: 1, "high-contrast": 1 }; + document.documentElement.style.colorScheme = light[t] ? "light" : "dark"; } catch (e) {} })(); - - + +
diff --git a/ui/index.html b/ui/index.html index 6d6d9d9..41e4d2c 100644 --- a/ui/index.html +++ b/ui/index.html @@ -9,6 +9,8 @@ try { var t = localStorage.getItem("loadpath.theme"); if (t) document.documentElement.setAttribute("data-theme", t); + var light = { paper: 1, "solarized-light": 1, seafoam: 1, "high-contrast": 1 }; + document.documentElement.style.colorScheme = light[t] ? "light" : "dark"; } catch (e) {} })(); diff --git a/ui/src/App.tsx b/ui/src/App.tsx index 0758671..d92fd57 100644 --- a/ui/src/App.tsx +++ b/ui/src/App.tsx @@ -1,5 +1,7 @@ -import { useEffect, useMemo, useRef, useState } from "react"; +import { useEffect, useMemo, useRef, useState, type FormEvent } from "react"; import { api } from "./api"; +import { formatWhen, kindLabel, repoName, typeLabel } from "./format"; +import { IconArchitecture, IconGraph, IconPrs, IconReview, IconSettings } from "./icons"; import { ImpactGraph } from "./ImpactGraph"; import { THEMES, applyTheme, readTheme, type ThemeId } from "./themes"; import type { ArchitectureReport, IndexedRepo, PullRequest, Review } from "./types"; @@ -7,6 +9,14 @@ import type { ArchitectureReport, IndexedRepo, PullRequest, Review } from "./typ type Tab = "review" | "architecture" | "graph" | "prs" | "settings"; type GraphMode = "review" | "architecture"; +const TABS: { id: Tab; label: string; testId: string; shortcut: string; icon: typeof IconReview }[] = [ + { id: "review", label: "Review", testId: "tab-review", shortcut: "1", icon: IconReview }, + { id: "architecture", label: "Architecture", testId: "tab-architecture", shortcut: "2", icon: IconArchitecture }, + { id: "graph", label: "Impact graph", testId: "tab-graph", shortcut: "3", icon: IconGraph }, + { id: "prs", label: "Pull requests", testId: "tab-prs", shortcut: "4", icon: IconPrs }, + { id: "settings", label: "Settings", testId: "tab-settings", shortcut: "5", icon: IconSettings }, +]; + export function App() { const [tab, setTab] = useState("review"); const [repo, setRepo] = useState(localStorage.getItem("loadpath.repo") || ""); @@ -34,6 +44,12 @@ export function App() { applyTheme(id); }; + const busyRef = useRef(""); + const markBusy = (msg: string) => { + busyRef.current = msg; + setBusy(msg); + }; + useEffect(() => { api.settings().then(setSettings).catch(() => undefined); api.repos().then((r) => setRepos(r.repos)).catch(() => undefined); @@ -85,9 +101,10 @@ export function App() { }; const runReview = async () => { + if (busyRef.current) return; setError(""); setCopied(""); - setBusy("Tracing load path…"); + markBusy("Tracing load path…"); persistRepo(repo); persistRefs(base, head); try { @@ -100,14 +117,15 @@ export function App() { } catch (e) { setError(e instanceof Error ? e.message : String(e)); } finally { - setBusy(""); + markBusy(""); } }; const runIndex = async (incremental = true) => { + if (busyRef.current) return; setError(""); setCopied(""); - setBusy(incremental ? "Indexing…" : "Full reindex…"); + markBusy(incremental ? "Indexing…" : "Full reindex…"); persistRepo(repo); try { await api.index(repo, incremental); @@ -120,14 +138,15 @@ export function App() { } catch (e) { setError(e instanceof Error ? e.message : String(e)); } finally { - setBusy(""); + markBusy(""); } }; const draftConfig = async () => { + if (busyRef.current) return; setError(""); setCopied(""); - setBusy("Detecting layout…"); + markBusy("Detecting layout…"); persistRepo(repo); try { const layout = await api.init(repo); @@ -136,7 +155,7 @@ export function App() { } catch (e) { setError(e instanceof Error ? e.message : String(e)); } finally { - setBusy(""); + markBusy(""); } }; @@ -151,35 +170,37 @@ export function App() { }; const postComment = async () => { + if (busyRef.current) return; if (!review?.markdown || !scmRepo || !prNumber) { setError("Pick a pull request first (Pull requests tab), then post the brief."); return; } - setBusy("Posting Loadpath brief…"); + markBusy("Posting Loadpath brief…"); try { const posted = await api.postComment(provider, scmRepo, Number(prNumber), review.markdown); setCopied(posted.updated ? "Updated the Loadpath PR comment" : "Posted the Loadpath PR comment"); } catch (e) { setError(e instanceof Error ? e.message : String(e)); } finally { - setBusy(""); + markBusy(""); } }; const loadPrs = async () => { + if (busyRef.current) return; setError(""); - setBusy("Fetching pull requests…"); + markBusy("Fetching pull requests…"); try { const r = await api.prs(provider, scmRepo); setPrs(r.pull_requests); } catch (e) { setError(e instanceof Error ? e.message : String(e)); } finally { - setBusy(""); + markBusy(""); } }; - const saveSettings = async (evt: React.FormEvent) => { + const saveSettings = async (evt: FormEvent) => { evt.preventDefault(); const fd = new FormData(evt.currentTarget); const body = { @@ -193,25 +214,60 @@ export function App() { workspaces: repos.length ? repos.map((r) => ({ path: r.path, name: r.name })) : repo - ? [{ path: repo, name: repo.split(/[\\/]/).pop() }] + ? [{ path: repo, name: repoName(repo) }] : [], }; - setSettings(await api.saveSettings(body)); + try { + setSettings(await api.saveSettings(body)); + setCopied("Settings saved on this machine"); + } catch (e) { + setError(e instanceof Error ? e.message : String(e)); + } }; const askAi = async () => { - if (!review) return; - setBusy("Residual analysis…"); + if (!review || busyRef.current) return; + markBusy("Residual analysis…"); try { const r = await api.residual(review); setAiNote(r.note); } catch (e) { setError(e instanceof Error ? e.message : String(e)); } finally { - setBusy(""); + markBusy(""); } }; + const runReviewRef = useRef(runReview); + runReviewRef.current = runReview; + const tabRef = useRef(tab); + tabRef.current = tab; + + useEffect(() => { + const onKey = (event: KeyboardEvent) => { + const el = event.target as HTMLElement | null; + if (el && (el.tagName === "INPUT" || el.tagName === "TEXTAREA" || el.tagName === "SELECT" || el.isContentEditable)) { + if (event.key === "Escape") (el as HTMLInputElement).blur(); + return; + } + if (event.key === "Escape") { + setError(""); + setCopied(""); + return; + } + const hit = TABS.find((item) => item.shortcut === event.key); + if (hit && !event.metaKey && !event.ctrlKey && !event.altKey) setTab(hit.id); + if ((event.metaKey || event.ctrlKey) && event.key === "Enter") { + if (tabRef.current === "settings" || tabRef.current === "prs") return; + if (busyRef.current) return; + event.preventDefault(); + void runReviewRef.current(); + } + }; + window.addEventListener("keydown", onKey); + return () => window.removeEventListener("keydown", onKey); + }, []); + const graphNodes = useMemo(() => { if (graphMode === "architecture") return architecture?.nodes ?? []; return review?.nodes ?? []; @@ -222,34 +278,41 @@ export function App() { }, [graphMode, architecture, review]); const indexLine = review?.index - ? `${review.index.counts.nodes} nodes / ${review.index.counts.edges} edges · ${review.index.incremental ? "incremental" : "full"}${review.index.stale ? " · STALE" : ""}${review.index.django_boot && review.index.django_boot !== "off" ? ` · boot ${review.index.django_boot}` : ""}` + ? `${review.index.counts.nodes} nodes · ${review.index.counts.edges} edges` : architecture?.indexed - ? `${architecture.counts.nodes} nodes / ${architecture.counts.edges} edges indexed${architecture.stale ? " · STALE" : ""}` + ? `${architecture.counts.nodes} nodes · ${architecture.counts.edges} edges` : "Not indexed"; + const findings = (review?.findings || []).filter((f) => !f.waived); + return (
-
- )} + )} - {tab === "graph" && ( -
-
- - -
- {graphNodes.length ? ( -
- + {tab === "prs" && ( +
+
+ + +
- ) : ( -

Index the repo or run a review first.

- )} -
- )} - - {tab === "prs" && ( -
-
- - persistPr(provider, e.target.value, prNumber)} - /> - -
- {prs.map((p) => ( -
-

- #{p.number} {p.title} -

-
- {p.author} · {p.source_branch} → {p.target_branch} · {p.provider} + {prs.length === 0 ? ( +
+

No pull requests loaded

+

Enter an owner/repo, then list open PRs. Reviewing a PR fills base and head from its SHAs.

- - Open on {p.provider} - -
- + ) : ( + prs.map((p) => ( +
+

+ #{p.number} {p.title} +

+
+ {p.draft ? "draft" : p.state} + {p.author} + + {p.source_branch} → {p.target_branch} + +
+
+ + Open on {p.provider} + + +
+
+ )) + )} +
+ )} + + {tab === "settings" && ( +
+
+

Settings

+

+ Tokens stay on this machine in ~/.loadpath/settings.json. AI runs only on residual uncertainty the + graph could not close. +

+
+
+

Appearance

+

Local to this browser. High contrast is a first-class theme, not an afterthought.

+
+ {THEMES.map((t) => ( + + ))}
-
+ +
+

Source control

+ + + + + + +
+
+

Residual AI

+ + + + + + + + + +
+ + )} +
+
+
+ ); +} + +function ReviewBrief({ + review, + findings, + aiNote, + busy, + onAskAi, + onCopy, + onPost, +}: { + review: Review; + findings: Review["findings"]; + aiNote: string; + busy: boolean; + onAskAi: () => void; + onCopy: () => void; + onPost: () => void; +}) { + const uniqueReasons = [...new Set(review.confidence.reasons || [])]; + return ( + <> +
+
+ {review.confidence.level.toUpperCase()} — {review.title} +
+ {uniqueReasons.length ? ( +
    + {uniqueReasons.map((reason) => ( +
  • {reason}
  • ))} +
+ ) : null} + {review.low_risk ? low-risk : null} + {review.change_kinds.map((k) => ( + + {kindLabel(k)} + + ))} +
+
+
+
+ {review.confidence.covered_sinks}/{review.confidence.sinks}
+
Sinks tested
+
+
+
{findings.length}
+
Findings
+
+
+
{review.residuals.length}
+
Residuals
+
+
+
{review.headline}
+ {review.index ? ( +
+ + Index {review.index.counts.nodes} + +
+ Walked {review.index.counts.nodes} nodes / {review.index.counts.edges} edges + {review.index.reindex_skipped + ? " from an unchanged index" + : review.index.reindexed + ? " after an incremental refresh" + : " from the existing index"} + {review.index.django_boot && review.index.django_boot !== "off" + ? ` · Django boot ${review.index.django_boot}` + : ""} + {review.workspace?.three_dot ? " · three-dot range" : ""} +
+
+ ) : null} +
+ + Read this {review.read_order.length} + + {review.read_order.map((f, i) => ( +
+ + {i + 1}. {f.path} + +
{f.why}
+
+ ))} +
+
+ + Clusters {review.clusters.length} + + {review.clusters.map((c) => ( +
+ {c.title} — {c.files.join(", ")} +
+ ))} +
+
+ + Architecture {findings.length} + + {findings.length === 0 ? ( +
{review.architecture_note}
+ ) : ( + findings.map((f) => ( +
+ {f.severity} + {f.message} +
+ )) )} +
+
+ + Residual {review.residuals.length} + +

AI is only used here, on what the graph could not close.

+ {review.residuals.map((r) => ( +
+ {r} +
+ ))} +
+ {(review.evolution?.notes?.length || review.evolution?.hotspots?.some((h) => h.commits)) ? ( +
+ Churn & coupling + {(review.evolution?.notes || []).map((note) => ( +
+ {note} +
+ ))} + {(review.evolution?.hotspots || []) + .filter((h) => h.commits) + .slice(0, 6) + .map((h) => ( +
+ {h.path} — {h.commits} commits, bus factor {h.bus_factor} +
+ ))} +
+ ) : null} +
+ + + +
+ {aiNote ?
{aiNote}
: null} +
Reviewers
+
{review.suggested_reviewers.join(", ") || "—"}
+ {review.knowledge_owners?.length ? ( +
Knowledge: {review.knowledge_owners.join(", ")}
+ ) : null} + + ); +} - {tab === "settings" && ( -
-

Keys & providers

-

- Tokens stay on this machine in ~/.loadpath/settings.json. GitHub and Bitbucket power the PR list. Indexed - repos are remembered as workspaces. AI is used only for residual uncertainty the graph could not close. -

-

Theme

-

Appearance is local to this browser. Pick a palette that matches how you review.

-
- {THEMES.map((t) => ( - - ))} +function ArchitectureBrief({ + architecture, + busy, + onReindex, + onReview, +}: { + architecture: ArchitectureReport; + busy: boolean; + onReindex: () => void; + onReview: () => void; +}) { + const hits = architecture.findings.filter((f) => !f.waived); + return ( + <> +
+
INDEXED — {architecture.counts.nodes} nodes
+
+ {architecture.indexed_at ? `Last index ${formatWhen(architecture.indexed_at)}` : "Indexed"} + {architecture.incremental ? " · incremental" : " · full"} + {architecture.stale ? " · stale" : ""} + {architecture.django_boot && architecture.django_boot !== "off" + ? ` · Django boot ${architecture.django_boot}` + : ""} +
+ {architecture.counts.edges} edges + {architecture.has_config ? loadpath.yml : null} +
+
+ Bounded contexts + {Object.values(architecture.contexts).map((ctx) => ( +
+ {ctx.name} — {(ctx.django_apps || []).join(", ") || "no apps"} ·{" "} + {(ctx.owners || []).join(", ") || "unowned"} +
+ ))} +
+
+ + Rules {(architecture.rules || []).length} + + {(architecture.rules || []).map((rule) => ( +
+ {rule} +
+ ))} +
+
+ + Findings {hits.length} + + {hits.length === 0 ? ( +
No architecture rule hits on the full graph.
+ ) : ( + hits.map((f) => ( +
+ {f.severity} + {f.message}
- - - - - - - - - - - - - - - - + )) )} +
+
+ Types + + + {Object.entries(architecture.type_counts || {}) + .sort((a, b) => b[1] - a[1]) + .slice(0, 12) + .map(([t, n]) => ( + + + + + ))} + +
{typeLabel(t)}{n}
+
+
+ +
-
+ ); } diff --git a/ui/src/ImpactGraph.tsx b/ui/src/ImpactGraph.tsx index 40d712c..14311c6 100644 --- a/ui/src/ImpactGraph.tsx +++ b/ui/src/ImpactGraph.tsx @@ -1,5 +1,16 @@ -import { Background, Controls, MiniMap, ReactFlow, ReactFlowProvider, type Edge, type Node } from "@xyflow/react"; +import { useMemo, useState } from "react"; +import { + Background, + Controls, + MiniMap, + ReactFlow, + ReactFlowProvider, + type Edge, + type Node, + type NodeMouseHandler, +} from "@xyflow/react"; import "@xyflow/react/dist/style.css"; +import { typeLabel } from "./format"; import { layoutNodes, type GraphEdge, type GraphNode } from "./types"; const WEIGHT_COLOR: Record = { @@ -8,10 +19,10 @@ const WEIGHT_COLOR: Record = { critical: "var(--edge-critical)", }; -function LoadNode({ data }: { data: { name: string; type: string } }) { +function LoadNode({ data, selected }: { data: { name: string; type: string }; selected?: boolean }) { return ( -
-
{data.type.split(".").pop()}
+
+
{typeLabel(data.type)}
{data.name}
); @@ -20,36 +31,77 @@ function LoadNode({ data }: { data: { name: string; type: string } }) { const nodeTypes = { load: LoadNode }; export function ImpactGraph({ nodes, edges }: { nodes: GraphNode[]; edges: GraphEdge[] }) { + const [selectedId, setSelectedId] = useState(null); + const reduceMotion = + typeof window !== "undefined" && window.matchMedia("(prefers-reduced-motion: reduce)").matches; + const byId = useMemo(() => new Map(nodes.map((n) => [n.id, n])), [nodes]); + const selected = selectedId ? byId.get(selectedId) ?? null : null; const pos = layoutNodes(nodes); const rfNodes: Node[] = nodes.map((n) => ({ id: n.id, type: "load", position: pos.get(n.id) ?? { x: 0, y: 0 }, data: { name: n.name, type: n.type, file: n.file_path }, + selected: selectedId === n.id, })); const rfEdges: Edge[] = edges - .filter((e) => nodes.some((n) => n.id === e.src) && nodes.some((n) => n.id === e.dst)) + .filter((e) => byId.has(e.src) && byId.has(e.dst)) .map((e) => ({ id: e.id, source: e.src, target: e.dst, - animated: e.weight === "critical", + animated: !reduceMotion && e.weight === "critical", style: { stroke: WEIGHT_COLOR[e.weight] || "var(--edge-cheap)", strokeWidth: e.weight === "critical" ? 2.4 : 1.2, strokeDasharray: e.confidence < 0.8 ? "6 4" : undefined, }, label: e.type.replaceAll("_", " "), - labelStyle: { fill: "var(--muted)", fontSize: 9 }, + labelStyle: { fill: "var(--muted)", fontSize: 10 }, })); + const onNodeClick: NodeMouseHandler = (_evt, node) => { + setSelectedId(node.id); + }; + return ( - - - - - - - +
+ + setSelectedId(null)} + proOptions={{ hideAttribution: false }} + data-testid="impact-graph" + > + + + + + + {selected ? ( + + ) : null} +
); } diff --git a/ui/src/format.test.ts b/ui/src/format.test.ts new file mode 100644 index 0000000..0da4eaa --- /dev/null +++ b/ui/src/format.test.ts @@ -0,0 +1,16 @@ +import { describe, expect, it } from "vitest"; +import { formatWhen, kindLabel, repoName, typeLabel } from "./format"; + +describe("display helpers", () => { + it("humanizes kinds and types", () => { + expect(kindLabel("public_contract")).toBe("public contract"); + expect(typeLabel("django.serializer_field")).toBe("serializer_field"); + expect(repoName("/tmp/acme-billing")).toBe("acme-billing"); + }); + + it("formats timestamps or leaves junk alone", () => { + expect(formatWhen("not-a-date")).toBe("not-a-date"); + expect(formatWhen()).toBe(""); + expect(formatWhen("2026-08-14T00:00:00Z")).toMatch(/2026/); + }); +}); diff --git a/ui/src/format.ts b/ui/src/format.ts new file mode 100644 index 0000000..f91da65 --- /dev/null +++ b/ui/src/format.ts @@ -0,0 +1,18 @@ +export function kindLabel(kind: string): string { + return kind.replaceAll("_", " "); +} + +export function typeLabel(type: string): string { + return type.split(".").pop() || type; +} + +export function formatWhen(iso?: string | null): string { + if (!iso) return ""; + const date = new Date(iso); + if (Number.isNaN(date.getTime())) return iso; + return date.toLocaleString(); +} + +export function repoName(path: string): string { + return path.split(/[\\/]/).filter(Boolean).pop() || path; +} diff --git a/ui/src/icons.tsx b/ui/src/icons.tsx new file mode 100644 index 0000000..fe95bda --- /dev/null +++ b/ui/src/icons.tsx @@ -0,0 +1,74 @@ +import type { ReactNode } from "react"; + +type IconProps = { className?: string }; + +function Svg({ className, children }: IconProps & { children: ReactNode }) { + return ( + + ); +} + +export function IconReview({ className }: IconProps) { + return ( + + + + + + ); +} + +export function IconArchitecture({ className }: IconProps) { + return ( + + + + + + + ); +} + +export function IconGraph({ className }: IconProps) { + return ( + + + + + + + ); +} + +export function IconPrs({ className }: IconProps) { + return ( + + + + + + + ); +} + +export function IconSettings({ className }: IconProps) { + return ( + + + + + ); +} diff --git a/ui/src/styles.css b/ui/src/styles.css index 67f7794..9f5e532 100644 --- a/ui/src/styles.css +++ b/ui/src/styles.css @@ -348,100 +348,261 @@ * { box-sizing: border-box; } html, body, #root { height: 100%; margin: 0; } +:root { + --radius: 6px; + --radius-lg: 10px; + --control-h: 32px; + --font: "IBM Plex Sans", ui-sans-serif, system-ui, -apple-system, "Segoe UI", sans-serif; + --mono: "IBM Plex Mono", ui-monospace, "SF Mono", Menlo, Consolas, monospace; + --focus-ring: 0 0 0 2px var(--bg), 0 0 0 4px var(--accent); + --space: 8px; +} body { background: var(--bg); color: var(--ink); - font-family: "IBM Plex Sans", "Segoe UI", sans-serif; + font-family: var(--font); + font-size: 13px; + line-height: 1.45; + -webkit-font-smoothing: antialiased; } button, input, select, textarea { font-family: inherit; + font-size: inherit; color: inherit; } +button:focus-visible, +input:focus-visible, +select:focus-visible, +textarea:focus-visible, +a:focus-visible, +summary:focus-visible { + outline: none; + box-shadow: var(--focus-ring); +} +.sr-only { + position: absolute; + width: 1px; + height: 1px; + padding: 0; + margin: -1px; + overflow: hidden; + clip-path: inset(50%); + white-space: nowrap; + border: 0; +} +.skip { + position: absolute; + left: 12px; + top: -40px; + z-index: 50; + background: var(--surface); + color: var(--ink); + border: 1px solid var(--accent); + border-radius: var(--radius); + padding: 8px 12px; +} +.skip:focus { top: 12px; } .app { display: grid; - grid-template-columns: 220px 1fr; + grid-template-columns: 232px 1fr; height: 100%; } .rail { border-right: 1px solid var(--line); background: linear-gradient(180deg, var(--rail-from), var(--rail-to)); - padding: 20px 14px; + padding: 16px 12px; display: flex; flex-direction: column; - gap: 6px; + gap: 2px; + min-width: 0; } .brand { - font-family: "IBM Plex Mono", monospace; - letter-spacing: 0.18em; - font-size: 12px; + display: flex; + flex-direction: column; + gap: 2px; + padding: 4px 8px 16px; +} +.brand-mark { + font-family: var(--mono); + letter-spacing: 0.16em; + font-size: 11px; text-transform: uppercase; color: var(--accent); - margin: 0 0 18px; + font-weight: 600; } -.rail button, .tab { +.brand-sub { + font-size: 11px; + color: var(--muted); +} +.nav-item { + display: flex; + align-items: center; + gap: 10px; background: transparent; border: 0; text-align: left; padding: 8px 10px; - border-radius: 6px; + border-radius: var(--radius); color: var(--muted); cursor: pointer; + width: 100%; } -.rail button.active, .tab.active { +.nav-item:hover { background: color-mix(in srgb, var(--rail-active) 70%, transparent); color: var(--ink); } +.nav-item.active { background: var(--rail-active); color: var(--ink); + font-weight: 500; } +.nav-item svg { flex-shrink: 0; } .theme-pick { - margin-top: 10px; + margin-top: 14px; display: grid; gap: 4px; + padding: 0 2px; } .theme-pick label { - font-size: 10px; - letter-spacing: 0.08em; + font-size: 11px; + letter-spacing: 0.06em; text-transform: uppercase; color: var(--muted); -} -.theme-pick select { + font-weight: 500; +} +.theme-pick select, +.field select, +.field input, +.topbar input, +.topbar select, +.settings input, +.settings select { background: var(--surface); border: 1px solid var(--line); - border-radius: 6px; - padding: 6px 8px; + border-radius: var(--radius); + padding: 0 10px; + height: var(--control-h); width: 100%; } -.main { display: flex; flex-direction: column; min-width: 0; } +.rail-foot { + margin-top: auto; + padding: 12px 8px 4px; + border-top: 1px solid var(--line); + display: grid; + gap: 6px; +} +.kbd-hint { + font-size: 11px; + color: var(--muted); +} +kbd { + font-family: var(--mono); + font-size: 10px; + border: 1px solid var(--line); + border-radius: 4px; + padding: 0 4px; + background: var(--surface); +} +.main { + display: flex; + flex-direction: column; + min-width: 0; + min-height: 0; + position: relative; + background: var(--bg); +} +.progress { + position: absolute; + top: 0; + left: 0; + right: 0; + height: 2px; + overflow: hidden; + z-index: 30; + background: color-mix(in srgb, var(--accent) 20%, transparent); +} +.progress i { + display: block; + height: 100%; + width: 32%; + background: var(--accent); + animation: indeterminate 1.1s ease-in-out infinite; +} +@keyframes indeterminate { + 0% { transform: translateX(-120%); } + 100% { transform: translateX(400%); } +} .topbar { display: flex; - gap: 8px; - align-items: center; - padding: 12px 16px; + gap: 10px; + align-items: flex-end; + padding: 10px 16px; border-bottom: 1px solid var(--line); background: var(--bg-2); + flex-wrap: wrap; } -.topbar input, .topbar select { - background: var(--surface); - border: 1px solid var(--line); - border-radius: 6px; - padding: 8px 10px; - min-width: 160px; +.field { + display: grid; + gap: 4px; + min-width: 0; } -.topbar input.path { flex: 1; } -.topbar button, .btn { +.field > span { + font-size: 11px; + color: var(--muted); + font-weight: 500; +} +.field.path { flex: 1; min-width: 180px; } +.field.ref { width: 132px; flex: 0 0 132px; } +.field.workspace { width: 180px; flex: 0 0 180px; } +.topbar input, .topbar select { min-width: 0; } +.topbar-actions { + display: flex; + gap: 8px; + margin-left: auto; + align-items: center; + padding-bottom: 0; +} +.btn, .topbar button { background: var(--btn); border: 1px solid var(--btn-line); - border-radius: 6px; - padding: 8px 12px; + border-radius: var(--radius); + height: var(--control-h); + padding: 0 12px; cursor: pointer; + font-weight: 500; + display: inline-flex; + align-items: center; + justify-content: center; + gap: 6px; + white-space: nowrap; +} +.btn:hover, .topbar button:hover { + filter: brightness(1.08); +} +.btn:disabled, .topbar button:disabled { + opacity: 0.55; + cursor: not-allowed; + filter: none; +} +.btn.primary { + background: var(--btn-primary); + border-color: var(--btn-primary-line); +} +.btn.ghost { + background: transparent; +} +.alerts { + display: grid; + gap: 8px; + padding: 10px 16px 0; } -.btn.primary { background: var(--btn-primary); border-color: var(--btn-primary-line); } -.content { flex: 1; min-height: 0; display: grid; grid-template-columns: 420px 1fr; } +.alerts:empty { display: none; padding: 0; } +.stage { flex: 1; min-height: 0; display: flex; flex-direction: column; } +.content { flex: 1; min-height: 0; display: grid; grid-template-columns: minmax(340px, 420px) 1fr; } .brief { overflow: auto; border-right: 1px solid var(--line); - padding: 18px; - background: radial-gradient(circle at 0 0, color-mix(in srgb, var(--accent) 8%, transparent), transparent 40%), var(--bg); + padding: 16px 18px 24px; + background: radial-gradient(circle at 0 0, color-mix(in srgb, var(--accent) 8%, transparent), transparent 42%), var(--bg); } -.graph-wrap { position: relative; min-height: 0; } +.graph-wrap { position: relative; min-height: 0; display: flex; flex-direction: column; } .graph-wrap .react-flow { background-color: var(--graph-bg); background-image: @@ -449,75 +610,191 @@ button, input, select, textarea { linear-gradient(90deg, var(--graph-grid) 1px, transparent 1px); background-size: 24px 24px; } -.react-flow__minimap { - background: var(--surface) !important; -} -.react-flow__controls { - box-shadow: none !important; -} +.react-flow__minimap { background: var(--surface) !important; } +.react-flow__controls { box-shadow: none !important; } .react-flow__controls-button { background: var(--surface) !important; border-bottom: 1px solid var(--line) !important; fill: var(--ink) !important; } -h1 { font-size: 18px; margin: 0 0 6px; } -.level { font-family: "IBM Plex Mono", monospace; font-weight: 600; } +h1 { font-size: 18px; margin: 0 0 6px; font-weight: 600; } +h2 { font-size: 13px; margin: 0; font-weight: 600; } +.merge-box { + border: 1px solid var(--line); + background: var(--surface); + border-radius: var(--radius-lg); + padding: 12px 14px; + margin-bottom: 12px; +} +.merge-box.high { border-color: color-mix(in srgb, var(--high) 55%, var(--line)); } +.merge-box.medium { border-color: color-mix(in srgb, var(--medium) 55%, var(--line)); } +.merge-box.low { border-color: color-mix(in srgb, var(--low) 55%, var(--line)); } +.level { font-family: var(--mono); font-weight: 600; font-size: 14px; } .level.high { color: var(--high); } .level.medium { color: var(--medium); } .level.low { color: var(--low); } -.kicker { color: var(--muted); font-size: 12px; text-transform: uppercase; letter-spacing: 0.08em; margin: 16px 0 6px; } +.merge-title { margin-top: 4px; font-size: 13px; color: var(--ink); } +.reasons { margin: 10px 0 0; padding: 0 0 0 18px; color: var(--muted); } +.reasons li { margin: 0 0 4px; } +.metrics { + display: grid; + grid-template-columns: repeat(3, 1fr); + gap: 8px; + margin: 0 0 14px; +} +.metric { + border: 1px solid var(--line); + border-radius: var(--radius); + background: var(--surface); + padding: 8px 10px; +} +.metric .n { + font-family: var(--mono); + font-size: 16px; + font-weight: 600; + font-variant-numeric: tabular-nums; +} +.metric .l { font-size: 11px; color: var(--muted); margin-top: 2px; } +.section { + border-top: 1px solid var(--line); + padding: 8px 0 4px; +} +.section > summary { + cursor: pointer; + list-style: none; + display: flex; + align-items: center; + justify-content: space-between; + color: var(--muted); + font-size: 11px; + text-transform: uppercase; + letter-spacing: 0.07em; + font-weight: 600; + padding: 6px 0; +} +.section > summary::-webkit-details-marker { display: none; } +.section > summary .count { + font-family: var(--mono); + letter-spacing: 0; + text-transform: none; + border: 1px solid var(--line); + border-radius: 999px; + padding: 0 7px; + height: 18px; + display: inline-flex; + align-items: center; + font-size: 11px; +} +.kicker { + color: var(--muted); + font-size: 11px; + text-transform: uppercase; + letter-spacing: 0.08em; + margin: 16px 0 6px; + font-weight: 600; +} .chip { - display: inline-block; + display: inline-flex; + align-items: center; font-size: 11px; padding: 2px 8px; border-radius: 999px; border: 1px solid var(--line); margin: 0 6px 6px 0; color: var(--muted); + background: var(--surface); } .chip.blocker { color: var(--low); border-color: var(--low); } .chip.warning { color: var(--medium); border-color: var(--medium); } -.file { font-family: "IBM Plex Mono", monospace; font-size: 12px; color: var(--accent); } +.chip.open { color: var(--high); border-color: color-mix(in srgb, var(--high) 50%, var(--line)); } +.file { font-family: var(--mono); font-size: 12px; color: var(--accent); } +.read-item, .finding, .residual { + padding: 8px 0; + border-bottom: 1px solid color-mix(in srgb, var(--line) 70%, transparent); +} +.read-item:last-child, .finding:last-child { border-bottom: 0; } +.read-item .why { color: var(--muted); font-size: 12px; margin-top: 2px; } .muted { color: var(--muted); font-size: 13px; line-height: 1.45; } -.error { color: var(--low); padding: 8px 16px; } +.error { + color: var(--low); + padding: 8px 12px; + border: 1px solid var(--low); + background: color-mix(in srgb, var(--low) 10%, var(--surface)); + border-radius: var(--radius); + display: flex; + justify-content: space-between; + gap: 12px; + align-items: flex-start; +} .banner { - margin: 0 16px 10px; padding: 8px 12px; - border-radius: 8px; + border-radius: var(--radius); border: 1px solid var(--line); background: var(--surface); font-size: 13px; line-height: 1.45; + display: flex; + justify-content: space-between; + gap: 12px; + align-items: flex-start; } .banner.warn { border-color: var(--medium); color: var(--medium); } .banner.stale { border-color: var(--low); color: var(--low); } +.banner .dismiss { + background: transparent; + border: 0; + color: inherit; + cursor: pointer; + height: auto; + padding: 0 2px; + opacity: 0.7; +} .empty { - padding: 8px 0; + padding: 24px 8px; color: var(--muted); font-size: 13px; line-height: 1.55; } -.empty ol { margin: 8px 0 0 18px; padding: 0; } -.empty code { font-family: "IBM Plex Mono", monospace; font-size: 12px; color: var(--accent); } +.empty h2 { font-size: 16px; color: var(--ink); margin-bottom: 8px; } +.empty ol { margin: 12px 0 0 18px; padding: 0; } +.empty code, code { font-family: var(--mono); font-size: 12px; color: var(--accent); } .btn-row { display: flex; flex-wrap: wrap; gap: 8px; margin-top: 12px; } .pr-list { padding: 16px; overflow: auto; } +.pr-toolbar { + display: flex; + gap: 8px; + align-items: flex-end; + margin-bottom: 14px; +} +.pr-toolbar .field { flex: 1; } +.pr-toolbar .field.provider { flex: 0 0 140px; } .pr { border: 1px solid var(--line); background: var(--surface); padding: 12px 14px; - border-radius: 8px; + border-radius: var(--radius-lg); margin-bottom: 10px; } -.pr h3 { margin: 0 0 4px; font-size: 14px; } -.settings { padding: 24px; max-width: 720px; display: grid; gap: 10px; } -.settings label { font-size: 12px; color: var(--muted); } -.settings input, .settings select { - background: var(--surface); +.pr h3 { margin: 0 0 4px; font-size: 14px; font-weight: 600; } +.pr-meta { display: flex; flex-wrap: wrap; gap: 8px 12px; align-items: center; margin: 6px 0 10px; } +.pr-actions { display: flex; gap: 8px; align-items: center; } +.settings { + padding: 24px; + max-width: 760px; + overflow: auto; + display: grid; + gap: 16px; +} +.settings-card { border: 1px solid var(--line); - border-radius: 6px; - padding: 8px 10px; - width: 100%; + background: var(--surface); + border-radius: var(--radius-lg); + padding: 16px; + display: grid; + gap: 8px; } +.settings-card h2 { font-size: 14px; margin-bottom: 2px; } +.settings label { font-size: 12px; color: var(--muted); font-weight: 500; } .theme-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(140px, 1fr)); @@ -525,11 +802,12 @@ h1 { font-size: 18px; margin: 0 0 6px; } } .theme-swatch { border: 1px solid var(--line); - background: var(--surface); - border-radius: 8px; + background: var(--bg); + border-radius: var(--radius); padding: 10px; text-align: left; cursor: pointer; + height: auto; } .theme-swatch.active { border-color: var(--accent); @@ -537,34 +815,98 @@ h1 { font-size: 18px; margin: 0 0 6px; } } .theme-swatch .name { font-size: 13px; font-weight: 600; } .theme-swatch .group { font-size: 11px; color: var(--muted); } -.headline { white-space: pre-wrap; font-family: "IBM Plex Mono", monospace; font-size: 12px; color: var(--muted); } +.headline { white-space: pre-wrap; font-family: var(--mono); font-size: 12px; color: var(--muted); margin: 8px 0 0; } .graph-modes { display: flex; - gap: 6px; - padding: 10px 14px; + gap: 8px; + align-items: center; + padding: 8px 14px; border-bottom: 1px solid var(--line); background: var(--bg-2); } -.graph-modes button { - background: transparent; +.seg { + display: inline-flex; border: 1px solid var(--line); border-radius: 999px; - padding: 4px 10px; + padding: 2px; + background: var(--surface); +} +.seg button, .graph-modes button { + background: transparent; + border: 0; + border-radius: 999px; + padding: 4px 12px; color: var(--muted); cursor: pointer; + height: 26px; } -.graph-modes button.active { +.seg button.active, .graph-modes button.active { background: var(--rail-active); color: var(--ink); - border-color: var(--btn-primary-line); } +.legend { + margin-left: auto; + display: flex; + gap: 12px; + color: var(--muted); + font-size: 11px; +} +.legend i { + display: inline-block; + width: 14px; + height: 2px; + margin-right: 6px; + vertical-align: middle; + background: var(--edge-cheap); +} +.legend i.exp { background: var(--edge-expensive); } +.legend i.crit { background: var(--edge-critical); height: 3px; } +.legend i.dash { border-top: 2px dashed var(--muted); background: none; height: 0; } +.inspector { + position: absolute; + top: 12px; + right: 12px; + z-index: 5; + width: 260px; + background: var(--surface); + border: 1px solid var(--line); + border-radius: var(--radius-lg); + padding: 10px 12px; + box-shadow: 0 8px 24px var(--shadow); +} +.inspector .t { font-size: 11px; color: var(--muted); text-transform: uppercase; letter-spacing: 0.06em; } +.inspector .n { font-weight: 600; margin: 4px 0; } .lp-node { padding: 8px 10px; - border-radius: 8px; + border-radius: var(--radius); border: 1px solid var(--node-line); background: var(--node-bg); - min-width: 150px; + min-width: 168px; box-shadow: 0 0 0 1px var(--shadow); } .lp-node .t { font-size: 10px; color: var(--muted); text-transform: uppercase; letter-spacing: 0.08em; } .lp-node .n { font-size: 13px; font-weight: 600; } +.lp-node.selected { border-color: var(--accent); box-shadow: 0 0 0 1px var(--accent); } +.type-table { + width: 100%; + border-collapse: collapse; + font-size: 12px; +} +.type-table td { padding: 3px 0; } +.type-table td:last-child { + text-align: right; + font-family: var(--mono); + font-variant-numeric: tabular-nums; + color: var(--muted); +} +@media (prefers-reduced-motion: reduce) { + .progress i { animation: none; width: 100%; } + * { scroll-behavior: auto !important; } +} +@media (max-width: 960px) { + .app { grid-template-columns: 56px 1fr; } + .brand-sub, .nav-item span, .theme-pick, .kbd-hint, .rail-foot .muted { display: none; } + .nav-item { justify-content: center; padding: 10px; } + .content { grid-template-columns: 1fr; } + .brief { border-right: 0; border-bottom: 1px solid var(--line); max-height: 42vh; } +} diff --git a/ui/src/themes.test.ts b/ui/src/themes.test.ts index 769b01f..1159cf9 100644 --- a/ui/src/themes.test.ts +++ b/ui/src/themes.test.ts @@ -1,5 +1,5 @@ import { describe, expect, it } from "vitest"; -import { THEMES, isThemeId } from "./themes"; +import { THEMES, colorSchemeFor, isThemeId } from "./themes"; describe("themes", () => { it("ships a dozen named palettes", () => { @@ -9,5 +9,7 @@ describe("themes", () => { expect(THEMES.some((t) => t.group === "dark")).toBe(true); expect(isThemeId("nord")).toBe(true); expect(isThemeId("not-a-theme")).toBe(false); + expect(colorSchemeFor("obsidian")).toBe("dark"); + expect(colorSchemeFor("paper")).toBe("light"); }); }); diff --git a/ui/src/themes.ts b/ui/src/themes.ts index 85760ac..91916f5 100644 --- a/ui/src/themes.ts +++ b/ui/src/themes.ts @@ -46,8 +46,13 @@ export function readTheme(): ThemeId { return DEFAULT_THEME; } +export function colorSchemeFor(id: ThemeId): "light" | "dark" { + return THEMES.find((t) => t.id === id)?.group === "light" ? "light" : "dark"; +} + export function applyTheme(id: ThemeId) { document.documentElement.dataset.theme = id; + document.documentElement.style.colorScheme = colorSchemeFor(id); try { localStorage.setItem(STORAGE_KEY, id); } catch { diff --git a/ui/src/types.ts b/ui/src/types.ts index 8f27e9b..f93121c 100644 --- a/ui/src/types.ts +++ b/ui/src/types.ts @@ -192,7 +192,7 @@ export function layoutNodes(nodes: GraphNode[]): Map a.name.localeCompare(b.name)); list.forEach((n, i) => { - pos.set(n.id, { x: layer * 240, y: i * 92 }); + pos.set(n.id, { x: layer * 260, y: i * 108 }); }); } return pos;