diff --git a/src/loadpath/server/app.py b/src/loadpath/server/app.py index 63d915c..9deada5 100644 --- a/src/loadpath/server/app.py +++ b/src/loadpath/server/app.py @@ -31,6 +31,7 @@ from loadpath.review.engine import run_review from loadpath.review.render import render_html, render_markdown from loadpath.settings import AppSettings, public_settings, register_workspace, settings_path, _should_update_secret +from loadpath.workspace import DEFAULT_COMMIT_LIMIT, list_directory, list_git_refs class IndexRequest(BaseModel): @@ -206,6 +207,15 @@ def api_index_status(repo_path: str) -> dict[str, Any]: report.pop("edges", None) return report + @app.get("/api/fs") + def api_fs(path: str | None = None) -> dict[str, Any]: + return list_directory(path) + + @app.get("/api/git/refs") + def api_git_refs(repo_path: str, limit: int = DEFAULT_COMMIT_LIMIT) -> dict[str, Any]: + root = require_repo_path(repo_path) + return list_git_refs(root, commit_limit=limit) + @app.get("/api/repos") def api_repos() -> dict[str, Any]: settings = AppSettings.load() diff --git a/src/loadpath/static/assets/LayeredGraph3D-D12B4Z17.js b/src/loadpath/static/assets/LayeredGraph3D-CoG8lubm.js similarity index 99% rename from src/loadpath/static/assets/LayeredGraph3D-D12B4Z17.js rename to src/loadpath/static/assets/LayeredGraph3D-CoG8lubm.js index 1232a29..09a8c02 100644 --- a/src/loadpath/static/assets/LayeredGraph3D-D12B4Z17.js +++ b/src/loadpath/static/assets/LayeredGraph3D-CoG8lubm.js @@ -1,4 +1,4 @@ -import{r as bn,l as tc,c as nc,a as ic,L as sc,j as jn,t as rc}from"./index-DVQVwbDy.js";/** +import{r as bn,l as tc,c as nc,a as ic,L as sc,j as jn,t as rc}from"./index-aoV_COFI.js";/** * @license * Copyright 2010-2026 Three.js Authors * SPDX-License-Identifier: MIT diff --git a/src/loadpath/static/assets/index-DVQVwbDy.js b/src/loadpath/static/assets/index-DVQVwbDy.js deleted file mode 100644 index fe55e45..0000000 --- a/src/loadpath/static/assets/index-DVQVwbDy.js +++ /dev/null @@ -1,62 +0,0 @@ -(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 u of a)if(u.type==="childList")for(const d of u.addedNodes)d.tagName==="LINK"&&d.rel==="modulepreload"&&l(d)}).observe(document,{childList:!0,subtree:!0});function o(a){const u={};return a.integrity&&(u.integrity=a.integrity),a.referrerPolicy&&(u.referrerPolicy=a.referrerPolicy),a.crossOrigin==="use-credentials"?u.credentials="include":a.crossOrigin==="anonymous"?u.credentials="omit":u.credentials="same-origin",u}function l(a){if(a.ep)return;a.ep=!0;const u=o(a);fetch(a.href,u)}})();function up(t){return t&&t.__esModule&&Object.prototype.hasOwnProperty.call(t,"default")?t.default:t}var mu={exports:{}},eo={},yu={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 Of;function b0(){if(Of)return je;Of=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"),u=Symbol.for("react.provider"),d=Symbol.for("react.context"),f=Symbol.for("react.forward_ref"),p=Symbol.for("react.suspense"),v=Symbol.for("react.memo"),m=Symbol.for("react.lazy"),x=Symbol.iterator;function y(M){return M===null||typeof M!="object"?null:(M=x&&M[x]||M["@@iterator"],typeof M=="function"?M:null)}var S={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},_=Object.assign,C={};function k(M,z,re){this.props=M,this.context=z,this.refs=C,this.updater=re||S}k.prototype.isReactComponent={},k.prototype.setState=function(M,z){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,z,"setState")},k.prototype.forceUpdate=function(M){this.updater.enqueueForceUpdate(this,M,"forceUpdate")};function E(){}E.prototype=k.prototype;function T(M,z,re){this.props=M,this.context=z,this.refs=C,this.updater=re||S}var N=T.prototype=new E;N.constructor=T,_(N,k.prototype),N.isPureReactComponent=!0;var P=Array.isArray,O=Object.prototype.hasOwnProperty,D={current:null},H={key:!0,ref:!0,__self:!0,__source:!0};function F(M,z,re){var ne,ae={},de=null,ce=null;if(z!=null)for(ne in z.ref!==void 0&&(ce=z.ref),z.key!==void 0&&(de=""+z.key),z)O.call(z,ne)&&!H.hasOwnProperty(ne)&&(ae[ne]=z[ne]);var G=arguments.length-2;if(G===1)ae.children=re;else if(1>>1,z=A[M];if(0>>1;Ma(ae,b))dea(ce,ae)?(A[M]=ce,A[de]=b,M=de):(A[M]=ae,A[ne]=b,M=ne);else if(dea(ce,b))A[M]=ce,A[de]=b,M=de;else break e}}return L}function a(A,L){var b=A.sortIndex-L.sortIndex;return b!==0?b:A.id-L.id}if(typeof performance=="object"&&typeof performance.now=="function"){var u=performance;t.unstable_now=function(){return u.now()}}else{var d=Date,f=d.now();t.unstable_now=function(){return d.now()-f}}var p=[],v=[],m=1,x=null,y=3,S=!1,_=!1,C=!1,k=typeof setTimeout=="function"?setTimeout:null,E=typeof clearTimeout=="function"?clearTimeout:null,T=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(v);L!==null;){if(L.callback===null)l(v);else if(L.startTime<=A)l(v),L.sortIndex=L.expirationTime,r(p,L);else break;L=o(v)}}function P(A){if(C=!1,N(A),!_)if(o(p)!==null)_=!0,V(O);else{var L=o(v);L!==null&&B(P,L.startTime-A)}}function O(A,L){_=!1,C&&(C=!1,E(F),F=-1),S=!0;var b=y;try{for(N(L),x=o(p);x!==null&&(!(x.expirationTime>L)||A&&!q());){var M=x.callback;if(typeof M=="function"){x.callback=null,y=x.priorityLevel;var z=M(x.expirationTime<=L);L=t.unstable_now(),typeof z=="function"?x.callback=z:x===o(p)&&l(p),N(L)}else l(p);x=o(p)}if(x!==null)var re=!0;else{var ne=o(v);ne!==null&&B(P,ne.startTime-L),re=!1}return re}finally{x=null,y=b,S=!1}}var D=!1,H=null,F=-1,X=5,ee=-1;function q(){return!(t.unstable_now()-eeA||125M?(A.sortIndex=b,r(v,A),o(p)===null&&A===o(v)&&(C?(E(F),F=-1):C=!0,B(P,b-M))):(A.sortIndex=z,r(p,A),_||S||(_=!0,V(O))),A},t.unstable_shouldYield=q,t.unstable_wrapCallback=function(A){var L=y;return function(){var b=y;y=L;try{return A.apply(this,arguments)}finally{y=b}}}})(wu)),wu}var Wf;function B0(){return Wf||(Wf=1,xu.exports=V0()),xu.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 Uf;function W0(){if(Uf)return _t;Uf=1;var t=vo(),r=B0();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,v=/^[: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={},x={};function y(e){return p.call(x,e)?!0:p.call(m,e)?!1:v.test(e)?x[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 C(e,n,i,s,c,h,w){this.acceptsBooleans=n===2||n===3||n===4,this.attributeName=s,this.attributeNamespace=c,this.mustUseProperty=i,this.propertyName=e,this.type=n,this.sanitizeURL=h,this.removeEmptyString=w}var k={};"children dangerouslySetInnerHTML defaultValue defaultChecked innerHTML suppressContentEditableWarning suppressHydrationWarning style".split(" ").forEach(function(e){k[e]=new C(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 C(n,1,!1,e[1],null,!1,!1)}),["contentEditable","draggable","spellCheck","value"].forEach(function(e){k[e]=new C(e,2,!1,e.toLowerCase(),null,!1,!1)}),["autoReverse","externalResourcesRequired","focusable","preserveAlpha"].forEach(function(e){k[e]=new C(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 C(e,3,!1,e.toLowerCase(),null,!1,!1)}),["checked","multiple","muted","selected"].forEach(function(e){k[e]=new C(e,3,!0,e,null,!1,!1)}),["capture","download"].forEach(function(e){k[e]=new C(e,4,!1,e,null,!1,!1)}),["cols","rows","size","span"].forEach(function(e){k[e]=new C(e,6,!1,e,null,!1,!1)}),["rowSpan","start"].forEach(function(e){k[e]=new C(e,5,!1,e.toLowerCase(),null,!1,!1)});var E=/[\-:]([a-z])/g;function T(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,T);k[n]=new C(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,T);k[n]=new C(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,T);k[n]=new C(n,1,!1,e,"http://www.w3.org/XML/1998/namespace",!1,!1)}),["tabIndex","crossOrigin"].forEach(function(e){k[e]=new C(e,1,!1,e.toLowerCase(),null,!1,!1)}),k.xlinkHref=new C("xlinkHref",1,!1,"xlink:href","http://www.w3.org/1999/xlink",!0,!1),["src","href","action","formAction"].forEach(function(e){k[e]=new C(e,1,!1,e.toLowerCase(),null,!0,!0)});function N(e,n,i,s){var c=k.hasOwnProperty(n)?k[n]:null;(c!==null?c.type!==0:s||!(2I||c[w]!==h[I]){var R=` -`+c[w].replace(" at new "," at ");return e.displayName&&R.includes("")&&(R=R.replace("",e.displayName)),R}while(1<=w&&0<=I);break}}}finally{re=!1,Error.prepareStackTrace=i}return(e=e?e.displayName||e.name:"")?z(e):""}function ae(e){switch(e.tag){case 5:return z(e.type);case 16:return z("Lazy");case 13:return z("Suspense");case 19:return z("SuspenseList");case 0:case 2:case 15:return e=ne(e.type,!1),e;case 11:return e=ne(e.type.render,!1),e;case 1:return e=ne(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 D:return"Portal";case X:return"Profiler";case F:return"StrictMode";case J:return"Suspense";case j:return"SuspenseList"}if(typeof e=="object")switch(e.$$typeof){case q:return(e.displayName||"Context")+".Consumer";case ee: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 W:return n=e.displayName||null,n!==null?n:de(e.type)||"Memo";case V: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===F?"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 G(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 he(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 c=i.get,h=i.set;return Object.defineProperty(e,n,{configurable:!0,get:function(){return c.call(this)},set:function(w){s=""+w,h.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 we(e){e._valueTracker||(e._valueTracker=he(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 b({},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=G(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 Re(e,n){Pe(e,n);var i=G(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")?rt(e,n.type,i):n.hasOwnProperty("defaultValue")&&rt(e,n.type,G(n.defaultValue)),n.checked==null&&n.defaultChecked!=null&&(e.defaultChecked=!!n.defaultChecked)}function nt(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 rt(e,n,i){(n!=="number"||me(e.ownerDocument)!==e)&&(i==null?e.defaultValue=""+e._wrapperState.initialValue:e.defaultValue!==""+i&&(e.defaultValue=""+i))}var Xe=Array.isArray;function Ke(e,n,i,s){if(e=e.options,n){n={};for(var c=0;c"+n.valueOf().toString()+"",n=ht.firstChild;e.firstChild;)e.removeChild(e.firstChild);for(;n.firstChild;)e.appendChild(n.firstChild)}});function Dt(e,n){if(n){var i=e.firstChild;if(i&&i===e.lastChild&&i.nodeType===3){i.nodeValue=n;return}}e.textContent=n}var rn={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},Z=["Webkit","ms","Moz","O"];Object.keys(rn).forEach(function(e){Z.forEach(function(n){n=n+e.charAt(0).toUpperCase()+e.substring(1),rn[n]=rn[e]})});function Ee(e,n,i){return n==null||typeof n=="boolean"||n===""?"":i||typeof n!="number"||n===0||rn.hasOwnProperty(e)&&rn[e]?(""+n).trim():n+"px"}function De(e,n){e=e.style;for(var i in n)if(n.hasOwnProperty(i)){var s=i.indexOf("--")===0,c=Ee(i,n[i],s);i==="float"&&(i="cssFloat"),s?e.setProperty(i,c):e[i]=c}}var Cn=b({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 mt(e,n){if(n){if(Cn[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 fi(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 hi=null;function pi(e){return e=e.target||e.srcElement||window,e.correspondingUseElement&&(e=e.correspondingUseElement),e.nodeType===3?e.parentNode:e}var gi=null,jn=null,Mn=null;function Co(e){if(e=Oi(e)){if(typeof gi!="function")throw Error(o(280));var n=e.stateNode;n&&(n=ns(n),gi(e.stateNode,e.type,n))}}function jo(e){jn?Mn?Mn.push(e):Mn=[e]:jn=e}function Mo(){if(jn){var e=jn,n=Mn;if(Mn=jn=null,Co(e),n)for(e=0;e>>=0,e===0?32:31-(Al(e)/Dl|0)|0}var Ir=64,Tr=4194304;function nr(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 pn(e,n){var i=e.pendingLanes;if(i===0)return 0;var s=0,c=e.suspendedLanes,h=e.pingedLanes,w=i&268435455;if(w!==0){var I=w&~c;I!==0?s=nr(I):(h&=w,h!==0&&(s=nr(h)))}else w=i&~c,w!==0?s=nr(w):h!==0&&(s=nr(h));if(s===0)return 0;if(n!==0&&n!==s&&(n&c)===0&&(c=s&-s,h=n&-n,c>=h||c===16&&(h&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 ir(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=Ii),Tc=" ",zc=!1;function Rc(e,n){switch(e){case"keyup":return Rm.indexOf(n.keyCode)!==-1;case"keydown":return n.keyCode!==229;case"keypress":case"mousedown":case"focusout":return!0;default:return!1}}function Lc(e){return e=e.detail,typeof e=="object"&&"data"in e?e.data:null}var Ar=!1;function Am(e,n){switch(e){case"compositionend":return Lc(n);case"keypress":return n.which!==32?null:(zc=!0,Tc);case"textInput":return e=n.data,e===Tc&&zc?null:e;default:return null}}function Dm(e,n){if(Ar)return e==="compositionend"||!Kl&&Rc(e,n)?(e=Nc(),Uo=Wl=Rn=null,Ar=!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=Hc(i)}}function Bc(e,n){return e&&n?e===n?!0:e&&e.nodeType===3?!1:n&&n.nodeType===3?Bc(e,n.parentNode):"contains"in e?e.contains(n):e.compareDocumentPosition?!!(e.compareDocumentPosition(n)&16):!1:!1}function Wc(){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 Jl(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 Um(e){var n=Wc(),i=e.focusedElem,s=e.selectionRange;if(n!==i&&i&&i.ownerDocument&&Bc(i.ownerDocument.documentElement,i)){if(s!==null&&Jl(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 c=i.textContent.length,h=Math.min(s.start,c);s=s.end===void 0?h:Math.min(s.end,c),!e.extend&&h>s&&(c=s,s=h,h=c),c=Vc(i,h);var w=Vc(i,s);c&&w&&(e.rangeCount!==1||e.anchorNode!==c.node||e.anchorOffset!==c.offset||e.focusNode!==w.node||e.focusOffset!==w.offset)&&(n=n.createRange(),n.setStart(c.node,c.offset),e.removeAllRanges(),h>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,Dr=null,ea=null,Li=null,ta=!1;function Uc(e,n,i){var s=i.window===i?i.document:i.nodeType===9?i:i.ownerDocument;ta||Dr==null||Dr!==me(s)||(s=Dr,"selectionStart"in s&&Jl(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}),Li&&Ri(Li,s)||(Li=s,s=Jo(ea,"onSelect"),0Hr||(e.current=ha[Hr],ha[Hr]=null,Hr--)}function Ae(e,n){Hr++,ha[Hr]=e.current,e.current=n}var $n={},at=Dn($n),yt=Dn(!1),sr=$n;function Vr(e,n){var i=e.type.contextTypes;if(!i)return $n;var s=e.stateNode;if(s&&s.__reactInternalMemoizedUnmaskedChildContext===n)return s.__reactInternalMemoizedMaskedChildContext;var c={},h;for(h in i)c[h]=n[h];return s&&(e=e.stateNode,e.__reactInternalMemoizedUnmaskedChildContext=n,e.__reactInternalMemoizedMaskedChildContext=c),c}function vt(e){return e=e.childContextTypes,e!=null}function rs(){be(yt),be(at)}function sd(e,n,i){if(at.current!==$n)throw Error(o(168));Ae(at,n),Ae(yt,i)}function ld(e,n,i){var s=e.stateNode;if(n=n.childContextTypes,typeof s.getChildContext!="function")return i;s=s.getChildContext();for(var c in s)if(!(c in n))throw Error(o(108,ce(e)||"Unknown",c));return b({},i,s)}function is(e){return e=(e=e.stateNode)&&e.__reactInternalMemoizedMergedChildContext||$n,sr=at.current,Ae(at,e),Ae(yt,yt.current),!0}function ad(e,n,i){var s=e.stateNode;if(!s)throw Error(o(169));i?(e=ld(e,n,sr),s.__reactInternalMemoizedMergedChildContext=e,be(yt),be(at),Ae(at,e)):be(yt),Ae(yt,i)}var mn=null,os=!1,pa=!1;function ud(e){mn===null?mn=[e]:mn.push(e)}function r0(e){os=!0,ud(e)}function bn(){if(!pa&&mn!==null){pa=!0;var e=0,n=Le;try{var i=mn;for(Le=1;e>=w,c-=w,yn=1<<32-Ct(n)+c|i<Ne?(tt=ke,ke=null):tt=ke.sibling;var ze=ie(Y,ke,Q[Ne],ue);if(ze===null){ke===null&&(ke=tt);break}e&&ke&&ze.alternate===null&&n(Y,ke),$=h(ze,$,Ne),_e===null?xe=ze:_e.sibling=ze,_e=ze,ke=tt}if(Ne===Q.length)return i(Y,ke),Fe&&ar(Y,Ne),xe;if(ke===null){for(;NeNe?(tt=ke,ke=null):tt=ke.sibling;var Xn=ie(Y,ke,ze.value,ue);if(Xn===null){ke===null&&(ke=tt);break}e&&ke&&Xn.alternate===null&&n(Y,ke),$=h(Xn,$,Ne),_e===null?xe=Xn:_e.sibling=Xn,_e=Xn,ke=tt}if(ze.done)return i(Y,ke),Fe&&ar(Y,Ne),xe;if(ke===null){for(;!ze.done;Ne++,ze=Q.next())ze=le(Y,ze.value,ue),ze!==null&&($=h(ze,$,Ne),_e===null?xe=ze:_e.sibling=ze,_e=ze);return Fe&&ar(Y,Ne),xe}for(ke=s(Y,ke);!ze.done;Ne++,ze=Q.next())ze=fe(ke,Y,Ne,ze.value,ue),ze!==null&&(e&&ze.alternate!==null&&ke.delete(ze.key===null?Ne:ze.key),$=h(ze,$,Ne),_e===null?xe=ze:_e.sibling=ze,_e=ze);return e&&ke.forEach(function($0){return n(Y,$0)}),Fe&&ar(Y,Ne),xe}function Ye(Y,$,Q,ue){if(typeof Q=="object"&&Q!==null&&Q.type===H&&Q.key===null&&(Q=Q.props.children),typeof Q=="object"&&Q!==null){switch(Q.$$typeof){case O:e:{for(var xe=Q.key,_e=$;_e!==null;){if(_e.key===xe){if(xe=Q.type,xe===H){if(_e.tag===7){i(Y,_e.sibling),$=c(_e,Q.props.children),$.return=Y,Y=$;break e}}else if(_e.elementType===xe||typeof xe=="object"&&xe!==null&&xe.$$typeof===V&&gd(xe)===_e.type){i(Y,_e.sibling),$=c(_e,Q.props),$.ref=Fi(Y,_e,Q),$.return=Y,Y=$;break e}i(Y,_e);break}else n(Y,_e);_e=_e.sibling}Q.type===H?($=mr(Q.props.children,Y.mode,ue,Q.key),$.return=Y,Y=$):(ue=Rs(Q.type,Q.key,Q.props,null,Y.mode,ue),ue.ref=Fi(Y,$,Q),ue.return=Y,Y=ue)}return w(Y);case D:e:{for(_e=Q.key;$!==null;){if($.key===_e)if($.tag===4&&$.stateNode.containerInfo===Q.containerInfo&&$.stateNode.implementation===Q.implementation){i(Y,$.sibling),$=c($,Q.children||[]),$.return=Y,Y=$;break e}else{i(Y,$);break}else n(Y,$);$=$.sibling}$=du(Q,Y.mode,ue),$.return=Y,Y=$}return w(Y);case V:return _e=Q._init,Ye(Y,$,_e(Q._payload),ue)}if(Xe(Q))return ge(Y,$,Q,ue);if(L(Q))return ye(Y,$,Q,ue);us(Y,Q)}return typeof Q=="string"&&Q!==""||typeof Q=="number"?(Q=""+Q,$!==null&&$.tag===6?(i(Y,$.sibling),$=c($,Q),$.return=Y,Y=$):(i(Y,$),$=cu(Q,Y.mode,ue),$.return=Y,Y=$),w(Y)):i(Y,$)}return Ye}var Yr=md(!0),yd=md(!1),cs=Dn(null),ds=null,Xr=null,wa=null;function Sa(){wa=Xr=ds=null}function _a(e){var n=cs.current;be(cs),e._currentValue=n}function ka(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 Qr(e,n){ds=e,wa=Xr=null,e=e.dependencies,e!==null&&e.firstContext!==null&&((e.lanes&n)!==0&&(xt=!0),e.firstContext=null)}function Ot(e){var n=e._currentValue;if(wa!==e)if(e={context:e,memoizedValue:n,next:null},Xr===null){if(ds===null)throw Error(o(308));Xr=e,ds.dependencies={lanes:0,firstContext:e}}else Xr=Xr.next=e;return n}var ur=null;function Ea(e){ur===null?ur=[e]:ur.push(e)}function vd(e,n,i,s){var c=n.interleaved;return c===null?(i.next=i,Ea(n)):(i.next=c.next,c.next=i),n.interleaved=i,xn(e,s)}function xn(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 On=!1;function Na(e){e.updateQueue={baseState:e.memoizedState,firstBaseUpdate:null,lastBaseUpdate:null,shared:{pending:null,interleaved:null,lanes:0},effects:null}}function xd(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 wn(e,n){return{eventTime:e,lane:n,tag:0,payload:null,callback:null,next:null}}function Fn(e,n,i){var s=e.updateQueue;if(s===null)return null;if(s=s.shared,(Ie&2)!==0){var c=s.pending;return c===null?n.next=n:(n.next=c.next,c.next=n),s.pending=n,xn(e,i)}return c=s.interleaved,c===null?(n.next=n,Ea(s)):(n.next=c.next,c.next=n),s.interleaved=n,xn(e,i)}function fs(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,zr(e,i)}}function wd(e,n){var i=e.updateQueue,s=e.alternate;if(s!==null&&(s=s.updateQueue,i===s)){var c=null,h=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};h===null?c=h=w:h=h.next=w,i=i.next}while(i!==null);h===null?c=h=n:h=h.next=n}else c=h=n;i={baseState:s.baseState,firstBaseUpdate:c,lastBaseUpdate:h,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 hs(e,n,i,s){var c=e.updateQueue;On=!1;var h=c.firstBaseUpdate,w=c.lastBaseUpdate,I=c.shared.pending;if(I!==null){c.shared.pending=null;var R=I,K=R.next;R.next=null,w===null?h=K:w.next=K,w=R;var oe=e.alternate;oe!==null&&(oe=oe.updateQueue,I=oe.lastBaseUpdate,I!==w&&(I===null?oe.firstBaseUpdate=K:I.next=K,oe.lastBaseUpdate=R))}if(h!==null){var le=c.baseState;w=0,oe=K=R=null,I=h;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=b({},le,ie);break e;case 2:On=!0}}I.callback!==null&&I.lane!==0&&(e.flags|=64,ie=c.effects,ie===null?c.effects=[I]:ie.push(I))}else fe={eventTime:fe,lane:ie,tag:I.tag,payload:I.payload,callback:I.callback,next:null},oe===null?(K=oe=fe,R=le):oe=oe.next=fe,w|=ie;if(I=I.next,I===null){if(I=c.shared.pending,I===null)break;ie=I,I=ie.next,ie.next=null,c.lastBaseUpdate=ie,c.shared.pending=null}}while(!0);if(oe===null&&(R=le),c.baseState=R,c.firstBaseUpdate=K,c.lastBaseUpdate=oe,n=c.shared.interleaved,n!==null){c=n;do w|=c.lane,c=c.next;while(c!==n)}else h===null&&(c.shared.lanes=0);fr|=w,e.lanes=w,e.memoizedState=le}}function Sd(e,n,i){if(e=n.effects,n.effects=null,e!==null)for(n=0;ni?i:4,e(!0);var s=Ia.transition;Ia.transition={};try{e(!1),n()}finally{Le=i,Ia.transition=s}}function Fd(){return Ft().memoizedState}function l0(e,n,i){var s=Wn(e);if(i={lane:s,action:i,hasEagerState:!1,eagerState:null,next:null},Hd(e))Vd(n,i);else if(i=vd(e,n,i,s),i!==null){var c=gt();Gt(i,e,s,c),Bd(i,n,s)}}function a0(e,n,i){var s=Wn(e),c={lane:s,action:i,hasEagerState:!1,eagerState:null,next:null};if(Hd(e))Vd(n,c);else{var h=e.alternate;if(e.lanes===0&&(h===null||h.lanes===0)&&(h=n.lastRenderedReducer,h!==null))try{var w=n.lastRenderedState,I=h(w,i);if(c.hasEagerState=!0,c.eagerState=I,Wt(I,w)){var R=n.interleaved;R===null?(c.next=c,Ea(n)):(c.next=R.next,R.next=c),n.interleaved=c;return}}catch{}finally{}i=vd(e,n,c,s),i!==null&&(c=gt(),Gt(i,e,s,c),Bd(i,n,s))}}function Hd(e){var n=e.alternate;return e===Be||n!==null&&n===Be}function Vd(e,n){Wi=ms=!0;var i=e.pending;i===null?n.next=n:(n.next=i.next,i.next=n),e.pending=n}function Bd(e,n,i){if((i&4194240)!==0){var s=n.lanes;s&=e.pendingLanes,i|=s,n.lanes=i,zr(e,i)}}var xs={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},u0={readContext:Ot,useCallback:function(e,n){return an().memoizedState=[e,n===void 0?null:n],e},useContext:Ot,useEffect:zd,useImperativeHandle:function(e,n,i){return i=i!=null?i.concat([e]):null,ys(4194308,4,Ad.bind(null,n,e),i)},useLayoutEffect:function(e,n){return ys(4194308,4,e,n)},useInsertionEffect:function(e,n){return ys(4,2,e,n)},useMemo:function(e,n){var i=an();return n=n===void 0?null:n,e=e(),i.memoizedState=[e,n],e},useReducer:function(e,n,i){var s=an();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=l0.bind(null,Be,e),[s.memoizedState,e]},useRef:function(e){var n=an();return e={current:e},n.memoizedState=e},useState:Id,useDebugValue:$a,useDeferredValue:function(e){return an().memoizedState=e},useTransition:function(){var e=Id(!1),n=e[0];return e=s0.bind(null,e[1]),an().memoizedState=e,[n,e]},useMutableSource:function(){},useSyncExternalStore:function(e,n,i){var s=Be,c=an();if(Fe){if(i===void 0)throw Error(o(407));i=i()}else{if(i=n(),et===null)throw Error(o(349));(dr&30)!==0||Nd(s,n,i)}c.memoizedState=i;var h={value:i,getSnapshot:n};return c.queue=h,zd(jd.bind(null,s,h,e),[e]),s.flags|=2048,Xi(9,Cd.bind(null,s,h,i,n),void 0,null),i},useId:function(){var e=an(),n=et.identifierPrefix;if(Fe){var i=vn,s=yn;i=(s&~(1<<32-Ct(s)-1)).toString(32)+i,n=":"+n+"R"+i,i=Ui++,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[sn]=n,e[bi]=s,cf(e,n,!1,!1),n.stateNode=e;e:{switch(w=fi(i,s),i){case"dialog":$e("cancel",e),$e("close",e),c=s;break;case"iframe":case"object":case"embed":$e("load",e),c=s;break;case"video":case"audio":for(c=0;cJr&&(n.flags|=128,s=!0,Qi(h,!1),n.lanes=4194304)}else{if(!s)if(e=ps(w),e!==null){if(n.flags|=128,s=!0,i=e.updateQueue,i!==null&&(n.updateQueue=i,n.flags|=4),Qi(h,!0),h.tail===null&&h.tailMode==="hidden"&&!w.alternate&&!Fe)return ct(n),null}else 2*He()-h.renderingStartTime>Jr&&i!==1073741824&&(n.flags|=128,s=!0,Qi(h,!1),n.lanes=4194304);h.isBackwards?(w.sibling=n.child,n.child=w):(i=h.last,i!==null?i.sibling=w:n.child=w,h.last=w)}return h.tail!==null?(n=h.tail,h.rendering=n,h.tail=n.sibling,h.renderingStartTime=He(),n.sibling=null,i=Ve.current,Ae(Ve,s?i&1|2:i&1),n):(ct(n),null);case 22:case 23:return lu(),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 y0(e,n){switch(ma(n),n.tag){case 1:return vt(n.type)&&rs(),e=n.flags,e&65536?(n.flags=e&-65537|128,n):null;case 3:return Gr(),be(yt),be(at),Pa(),e=n.flags,(e&65536)!==0&&(e&128)===0?(n.flags=e&-65537|128,n):null;case 5:return ja(n),null;case 13:if(be(Ve),e=n.memoizedState,e!==null&&e.dehydrated!==null){if(n.alternate===null)throw Error(o(340));Ur()}return e=n.flags,e&65536?(n.flags=e&-65537|128,n):null;case 19:return be(Ve),null;case 4:return Gr(),null;case 10:return _a(n.type._context),null;case 22:case 23:return lu(),null;case 24:return null;default:return null}}var ks=!1,dt=!1,v0=typeof WeakSet=="function"?WeakSet:Set,pe=null;function qr(e,n){var i=e.ref;if(i!==null)if(typeof i=="function")try{i(null)}catch(s){Ue(e,n,s)}else i.current=null}function Ga(e,n,i){try{i()}catch(s){Ue(e,n,s)}}var hf=!1;function x0(e,n){if(la=Bo,e=Wc(),Jl(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 c=s.anchorOffset,h=s.focusNode;s=s.focusOffset;try{i.nodeType,h.nodeType}catch{i=null;break e}var w=0,I=-1,R=-1,K=0,oe=0,le=e,ie=null;t:for(;;){for(var fe;le!==i||c!==0&&le.nodeType!==3||(I=w+c),le!==h||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&&++K===c&&(I=w),ie===h&&++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(aa={focusedElem:e,selectionRange:i},Bo=!1,pe=n;pe!==null;)if(n=pe,e=n.child,(n.subtreeFlags&1028)!==0&&e!==null)e.return=n,pe=e;else for(;pe!==null;){n=pe;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,Y=n.stateNode,$=Y.getSnapshotBeforeUpdate(n.elementType===n.type?ye:Yt(n.type,ye),Ye);Y.__reactInternalSnapshotBeforeUpdate=$}break;case 3:var Q=n.stateNode.containerInfo;Q.nodeType===1?Q.textContent="":Q.nodeType===9&&Q.documentElement&&Q.removeChild(Q.documentElement);break;case 5:case 6:case 4:case 17:break;default:throw Error(o(163))}}catch(ue){Ue(n,n.return,ue)}if(e=n.sibling,e!==null){e.return=n.return,pe=e;break}pe=n.return}return ge=hf,hf=!1,ge}function Gi(e,n,i){var s=n.updateQueue;if(s=s!==null?s.lastEffect:null,s!==null){var c=s=s.next;do{if((c.tag&e)===e){var h=c.destroy;c.destroy=void 0,h!==void 0&&Ga(n,i,h)}c=c.next}while(c!==s)}}function Es(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 pf(e){var n=e.alternate;n!==null&&(e.alternate=null,pf(n)),e.child=null,e.deletions=null,e.sibling=null,e.tag===5&&(n=e.stateNode,n!==null&&(delete n[sn],delete n[bi],delete n[fa],delete n[t0],delete n[n0])),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 gf(e){return e.tag===5||e.tag===3||e.tag===4}function mf(e){e:for(;;){for(;e.sibling===null;){if(e.return===null||gf(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 qa(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=ts));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}function Za(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(Za(e,n,i),e=e.sibling;e!==null;)Za(e,n,i),e=e.sibling}var ot=null,Xt=!1;function Hn(e,n,i){for(i=i.child;i!==null;)yf(e,n,i),i=i.sibling}function yf(e,n,i){if(Nt&&typeof Nt.onCommitFiberUnmount=="function")try{Nt.onCommitFiberUnmount(Pr,i)}catch{}switch(i.tag){case 5:dt||qr(i,n);case 6:var s=ot,c=Xt;ot=null,Hn(e,n,i),ot=s,Xt=c,ot!==null&&(Xt?(e=ot,i=i.stateNode,e.nodeType===8?e.parentNode.removeChild(i):e.removeChild(i)):ot.removeChild(i.stateNode));break;case 18:ot!==null&&(Xt?(e=ot,i=i.stateNode,e.nodeType===8?da(e.parentNode,i):e.nodeType===1&&da(e,i),ji(e)):da(ot,i.stateNode));break;case 4:s=ot,c=Xt,ot=i.stateNode.containerInfo,Xt=!0,Hn(e,n,i),ot=s,Xt=c;break;case 0:case 11:case 14:case 15:if(!dt&&(s=i.updateQueue,s!==null&&(s=s.lastEffect,s!==null))){c=s=s.next;do{var h=c,w=h.destroy;h=h.tag,w!==void 0&&((h&2)!==0||(h&4)!==0)&&Ga(i,n,w),c=c.next}while(c!==s)}Hn(e,n,i);break;case 1:if(!dt&&(qr(i,n),s=i.stateNode,typeof s.componentWillUnmount=="function"))try{s.props=i.memoizedProps,s.state=i.memoizedState,s.componentWillUnmount()}catch(I){Ue(i,n,I)}Hn(e,n,i);break;case 21:Hn(e,n,i);break;case 22:i.mode&1?(dt=(s=dt)||i.memoizedState!==null,Hn(e,n,i),dt=s):Hn(e,n,i);break;default:Hn(e,n,i)}}function vf(e){var n=e.updateQueue;if(n!==null){e.updateQueue=null;var i=e.stateNode;i===null&&(i=e.stateNode=new v0),n.forEach(function(s){var c=M0.bind(null,e,s);i.has(s)||(i.add(s),s.then(c,c))})}}function Qt(e,n){var i=n.deletions;if(i!==null)for(var s=0;sc&&(c=w),s&=~h}if(s=c,s=He()-s,s=(120>s?120:480>s?480:1080>s?1080:1920>s?1920:3e3>s?3e3:4320>s?4320:1960*S0(s/1960))-s,10e?16:e,Bn===null)var s=!1;else{if(e=Bn,Bn=null,Ps=0,(Ie&6)!==0)throw Error(o(331));var c=Ie;for(Ie|=4,pe=e.current;pe!==null;){var h=pe,w=h.child;if((pe.flags&16)!==0){var I=h.deletions;if(I!==null){for(var R=0;RHe()-tu?pr(e,0):eu|=i),St(e,n)}function Tf(e,n){n===0&&((e.mode&1)===0?n=1:(n=Tr,Tr<<=1,(Tr&130023424)===0&&(Tr=4194304)));var i=gt();e=xn(e,n),e!==null&&(ir(e,n,i),St(e,i))}function j0(e){var n=e.memoizedState,i=0;n!==null&&(i=n.retryLane),Tf(e,i)}function M0(e,n){var i=0;switch(e.tag){case 13:var s=e.stateNode,c=e.memoizedState;c!==null&&(i=c.retryLane);break;case 19:s=e.stateNode;break;default:throw Error(o(314))}s!==null&&s.delete(n),Tf(e,i)}var zf;zf=function(e,n,i){if(e!==null)if(e.memoizedProps!==n.pendingProps||yt.current)xt=!0;else{if((e.lanes&i)===0&&(n.flags&128)===0)return xt=!1,g0(e,n,i);xt=(e.flags&131072)!==0}else xt=!1,Fe&&(n.flags&1048576)!==0&&cd(n,ls,n.index);switch(n.lanes=0,n.tag){case 2:var s=n.type;_s(e,n),e=n.pendingProps;var c=Vr(n,at.current);Qr(n,i),c=za(null,n,s,e,c,i);var h=Ra();return n.flags|=1,typeof c=="object"&&c!==null&&typeof c.render=="function"&&c.$$typeof===void 0?(n.tag=1,n.memoizedState=null,n.updateQueue=null,vt(s)?(h=!0,is(n)):h=!1,n.memoizedState=c.state!==null&&c.state!==void 0?c.state:null,Na(n),c.updater=ws,n.stateNode=c,c._reactInternals=n,Oa(n,s,e,i),n=Ba(null,n,s,!0,h,i)):(n.tag=0,Fe&&h&&ga(n),pt(null,n,c,i),n=n.child),n;case 16:s=n.elementType;e:{switch(_s(e,n),e=n.pendingProps,c=s._init,s=c(s._payload),n.type=s,c=n.tag=I0(s),e=Yt(s,e),c){case 0:n=Va(null,n,s,e,i);break e;case 1:n=rf(null,n,s,e,i);break e;case 11:n=Zd(null,n,s,e,i);break e;case 14:n=Jd(null,n,s,Yt(s.type,e),i);break e}throw Error(o(306,s,""))}return n;case 0:return s=n.type,c=n.pendingProps,c=n.elementType===s?c:Yt(s,c),Va(e,n,s,c,i);case 1:return s=n.type,c=n.pendingProps,c=n.elementType===s?c:Yt(s,c),rf(e,n,s,c,i);case 3:e:{if(of(n),e===null)throw Error(o(387));s=n.pendingProps,h=n.memoizedState,c=h.element,xd(e,n),hs(n,s,null,i);var w=n.memoizedState;if(s=w.element,h.isDehydrated)if(h={element:s,isDehydrated:!1,cache:w.cache,pendingSuspenseBoundaries:w.pendingSuspenseBoundaries,transitions:w.transitions},n.updateQueue.baseState=h,n.memoizedState=h,n.flags&256){c=Kr(Error(o(423)),n),n=sf(e,n,s,i,c);break e}else if(s!==c){c=Kr(Error(o(424)),n),n=sf(e,n,s,i,c);break e}else for(Pt=An(n.stateNode.containerInfo.firstChild),Mt=n,Fe=!0,Ut=null,i=yd(n,null,s,i),n.child=i;i;)i.flags=i.flags&-3|4096,i=i.sibling;else{if(Ur(),s===c){n=Sn(e,n,i);break e}pt(e,n,s,i)}n=n.child}return n;case 5:return _d(n),e===null&&va(n),s=n.type,c=n.pendingProps,h=e!==null?e.memoizedProps:null,w=c.children,ua(s,c)?w=null:h!==null&&ua(s,h)&&(n.flags|=32),nf(e,n),pt(e,n,w,i),n.child;case 6:return e===null&&va(n),null;case 13:return lf(e,n,i);case 4:return Ca(n,n.stateNode.containerInfo),s=n.pendingProps,e===null?n.child=Yr(n,null,s,i):pt(e,n,s,i),n.child;case 11:return s=n.type,c=n.pendingProps,c=n.elementType===s?c:Yt(s,c),Zd(e,n,s,c,i);case 7:return pt(e,n,n.pendingProps,i),n.child;case 8:return pt(e,n,n.pendingProps.children,i),n.child;case 12:return pt(e,n,n.pendingProps.children,i),n.child;case 10:e:{if(s=n.type._context,c=n.pendingProps,h=n.memoizedProps,w=c.value,Ae(cs,s._currentValue),s._currentValue=w,h!==null)if(Wt(h.value,w)){if(h.children===c.children&&!yt.current){n=Sn(e,n,i);break e}}else for(h=n.child,h!==null&&(h.return=n);h!==null;){var I=h.dependencies;if(I!==null){w=h.child;for(var R=I.firstContext;R!==null;){if(R.context===s){if(h.tag===1){R=wn(-1,i&-i),R.tag=2;var K=h.updateQueue;if(K!==null){K=K.shared;var oe=K.pending;oe===null?R.next=R:(R.next=oe.next,oe.next=R),K.pending=R}}h.lanes|=i,R=h.alternate,R!==null&&(R.lanes|=i),ka(h.return,i,n),I.lanes|=i;break}R=R.next}}else if(h.tag===10)w=h.type===n.type?null:h.child;else if(h.tag===18){if(w=h.return,w===null)throw Error(o(341));w.lanes|=i,I=w.alternate,I!==null&&(I.lanes|=i),ka(w,i,n),w=h.sibling}else w=h.child;if(w!==null)w.return=h;else for(w=h;w!==null;){if(w===n){w=null;break}if(h=w.sibling,h!==null){h.return=w.return,w=h;break}w=w.return}h=w}pt(e,n,c.children,i),n=n.child}return n;case 9:return c=n.type,s=n.pendingProps.children,Qr(n,i),c=Ot(c),s=s(c),n.flags|=1,pt(e,n,s,i),n.child;case 14:return s=n.type,c=Yt(s,n.pendingProps),c=Yt(s.type,c),Jd(e,n,s,c,i);case 15:return ef(e,n,n.type,n.pendingProps,i);case 17:return s=n.type,c=n.pendingProps,c=n.elementType===s?c:Yt(s,c),_s(e,n),n.tag=1,vt(s)?(e=!0,is(n)):e=!1,Qr(n,i),Ud(n,s,c),Oa(n,s,c,i),Ba(null,n,s,!0,e,i);case 19:return uf(e,n,i);case 22:return tf(e,n,i)}throw Error(o(156,n.tag))};function Rf(e,n){return Lo(e,n)}function P0(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 Vt(e,n,i,s){return new P0(e,n,i,s)}function uu(e){return e=e.prototype,!(!e||!e.isReactComponent)}function I0(e){if(typeof e=="function")return uu(e)?1:0;if(e!=null){if(e=e.$$typeof,e===te)return 11;if(e===W)return 14}return 2}function Yn(e,n){var i=e.alternate;return i===null?(i=Vt(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 Rs(e,n,i,s,c,h){var w=2;if(s=e,typeof e=="function")uu(e)&&(w=1);else if(typeof e=="string")w=5;else e:switch(e){case H:return mr(i.children,c,h,n);case F:w=8,c|=8;break;case X:return e=Vt(12,i,n,c|2),e.elementType=X,e.lanes=h,e;case J:return e=Vt(13,i,n,c),e.elementType=J,e.lanes=h,e;case j:return e=Vt(19,i,n,c),e.elementType=j,e.lanes=h,e;case B:return Ls(i,c,h,n);default:if(typeof e=="object"&&e!==null)switch(e.$$typeof){case ee:w=10;break e;case q:w=9;break e;case te:w=11;break e;case W:w=14;break e;case V:w=16,s=null;break e}throw Error(o(130,e==null?e:typeof e,""))}return n=Vt(w,i,n,c),n.elementType=e,n.type=s,n.lanes=h,n}function mr(e,n,i,s){return e=Vt(7,e,s,n),e.lanes=i,e}function Ls(e,n,i,s){return e=Vt(22,e,s,n),e.elementType=B,e.lanes=i,e.stateNode={isHidden:!1},e}function cu(e,n,i){return e=Vt(6,e,null,n),e.lanes=i,e}function du(e,n,i){return n=Vt(4,e.children!==null?e.children:[],e.key,n),n.lanes=i,n.stateNode={containerInfo:e.containerInfo,pendingChildren:null,implementation:e.implementation},n}function T0(e,n,i,s,c){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=rr(0),this.expirationTimes=rr(-1),this.entangledLanes=this.finishedLanes=this.mutableReadLanes=this.expiredLanes=this.pingedLanes=this.suspendedLanes=this.pendingLanes=0,this.entanglements=rr(0),this.identifierPrefix=s,this.onRecoverableError=c,this.mutableSourceEagerHydrationData=null}function fu(e,n,i,s,c,h,w,I,R){return e=new T0(e,n,i,I,R),n===1?(n=1,h===!0&&(n|=8)):n=0,h=Vt(3,null,null,n),e.current=h,h.stateNode=e,h.memoizedState={element:s,isDehydrated:i,cache:null,transitions:null,pendingSuspenseBoundaries:null},Na(h),e}function z0(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(),vu.exports=W0(),vu.exports}var Xf;function U0(){if(Xf)return Hs;Xf=1;var t=cp();return Hs.createRoot=t.createRoot,Hs.hydrateRoot=t.hydrateRoot,Hs}var Y0=U0();function X0(t,r="Request failed"){const o=(t||"").trim();if(!o)return r;try{const a=JSON.parse(o).detail;if(typeof a=="string"&&a.trim())return a;if(Array.isArray(a)){const u=a.map(d=>typeof d=="string"?d:d&&typeof d=="object"&&"msg"in d?String(d.msg):"").filter(Boolean);if(u.length)return u.join("; ")}}catch{}return o}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(X0(l,o.statusText||"Request failed"))}return o.json()}const Q0=["github_token","bitbucket_token","ai_api_key","ai_model","ai_base_url"],kt={health:()=>Tt("/api/health"),settings:()=>Tt("/api/settings"),saveSettings:t=>{const r={...t};for(const o of Q0)r[o]===""&&delete r[o];return Tt("/api/settings",{method:"PUT",body:JSON.stringify(r)})},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 G0(t){return t.replaceAll("_"," ")}function K0(t){return t.replaceAll("_"," ")}function Gu(t){return t.split(".").pop()||t}function q0(t){if(!t)return"";const r=new Date(t);return Number.isNaN(r.getTime())?t:r.toLocaleString()}function Vs(t){return t.replace(/([/\\._:@-])/g,"$1​")}function xo({className:t,children:r}){return g.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 Z0({className:t}){return g.jsxs(xo,{className:t,children:[g.jsx("path",{d:"M3 3.5h6.5L13 7v5.5H3z"}),g.jsx("path",{d:"M9.5 3.5V7H13"}),g.jsx("path",{d:"M5.5 9.5h5M5.5 11.5h3.5"})]})}function J0({className:t}){return g.jsxs(xo,{className:t,children:[g.jsx("rect",{x:"2.5",y:"2.5",width:"4.5",height:"4.5",rx:"0.8"}),g.jsx("rect",{x:"9",y:"2.5",width:"4.5",height:"4.5",rx:"0.8"}),g.jsx("rect",{x:"2.5",y:"9",width:"4.5",height:"4.5",rx:"0.8"}),g.jsx("rect",{x:"9",y:"9",width:"4.5",height:"4.5",rx:"0.8"})]})}function ey({className:t}){return g.jsxs(xo,{className:t,children:[g.jsx("circle",{cx:"4",cy:"8",r:"1.6"}),g.jsx("circle",{cx:"12",cy:"4",r:"1.6"}),g.jsx("circle",{cx:"12",cy:"12",r:"1.6"}),g.jsx("path",{d:"M5.5 7.2 10.4 4.8M5.5 8.8 10.4 11.2"})]})}function ty({className:t}){return g.jsxs(xo,{className:t,children:[g.jsx("circle",{cx:"4.5",cy:"4",r:"1.4"}),g.jsx("circle",{cx:"4.5",cy:"12",r:"1.4"}),g.jsx("circle",{cx:"11.5",cy:"12",r:"1.4"}),g.jsx("path",{d:"M4.5 5.5v5M4.5 8h4.2a3 3 0 0 1 3 3"})]})}function ny({className:t}){return g.jsxs(xo,{className:t,children:[g.jsx("circle",{cx:"8",cy:"8",r:"2.1"}),g.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"})]})}const ry="modulepreload",iy=function(t,r){return new URL(t,r).href},Qf={},oy=function(r,o,l){let a=Promise.resolve();if(o&&o.length>0){let d=function(m){return Promise.all(m.map(x=>Promise.resolve(x).then(y=>({status:"fulfilled",value:y}),y=>({status:"rejected",reason:y}))))};const f=document.getElementsByTagName("link"),p=document.querySelector("meta[property=csp-nonce]"),v=(p==null?void 0:p.nonce)||(p==null?void 0:p.getAttribute("nonce"));a=d(o.map(m=>{if(m=iy(m,l),m in Qf)return;Qf[m]=!0;const x=m.endsWith(".css"),y=x?'[rel="stylesheet"]':"";if(!!l)for(let C=f.length-1;C>=0;C--){const k=f[C];if(k.href===m&&(!x||k.rel==="stylesheet"))return}else if(document.querySelector(`link[href="${m}"]${y}`))return;const _=document.createElement("link");if(_.rel=x?"stylesheet":ry,x||(_.as="script"),_.crossOrigin="",_.href=m,v&&_.setAttribute("nonce",v),document.head.appendChild(_),x)return new Promise((C,k)=>{_.addEventListener("load",C),_.addEventListener("error",()=>k(new Error(`Unable to preload CSS for ${m}`)))})}))}function u(d){const f=new Event("vite:preloadError",{cancelable:!0});if(f.payload=d,window.dispatchEvent(f),!f.defaultPrevented)throw d}return a.then(d=>{for(const f of d||[])f.status==="rejected"&&u(f.reason);return r().catch(u)})};function Ge(t){if(typeof t=="string"||typeof t=="number")return""+t;let r="";if(Array.isArray(t))for(let o=0,l;o{}};function pl(){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}})}Zs.prototype=pl.prototype={constructor:Zs,on:function(t,r){var o=this._,l=ly(t+"",o),a,u=-1,d=l.length;if(arguments.length<2){for(;++u0)for(var o=new Array(a),l=0,a,u;l=0&&(r=t.slice(0,o))!=="xmlns"&&(t=t.slice(o+1)),Kf.hasOwnProperty(r)?{space:Kf[r],local:t}:t}function uy(t){return function(){var r=this.ownerDocument,o=this.namespaceURI;return o===Au&&r.documentElement.namespaceURI===Au?r.createElement(t):r.createElementNS(o,t)}}function cy(t){return function(){return this.ownerDocument.createElementNS(t.space,t.local)}}function dp(t){var r=gl(t);return(r.local?cy:uy)(r)}function dy(){}function Ku(t){return t==null?dy:function(){return this.querySelector(t)}}function fy(t){typeof t!="function"&&(t=Ku(t));for(var r=this._groups,o=r.length,l=new Array(o),a=0;a=N&&(N=T+1);!(O=k[N])&&++N<_;);P._next=O||null}}return d=new Rt(d,l),d._enter=f,d._exit=p,d}function zy(t){return typeof t=="object"&&"length"in t?t:Array.from(t)}function Ry(){return new Rt(this._exit||this._groups.map(gp),this._parents)}function Ly(t,r,o){var l=this.enter(),a=this,u=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?u.remove():o(u),l&&a?l.merge(a).order():a}function Ay(t){for(var r=t.selection?t.selection():t,o=this._groups,l=r._groups,a=o.length,u=l.length,d=Math.min(a,u),f=new Array(a),p=0;p=0;)(d=l[a])&&(u&&d.compareDocumentPosition(u)^4&&u.parentNode.insertBefore(d,u),u=d);return this}function $y(t){t||(t=by);function r(x,y){return x&&y?t(x.__data__,y.__data__):!x-!y}for(var o=this._groups,l=o.length,a=new Array(l),u=0;ur?1:t>=r?0:NaN}function Oy(){var t=arguments[0];return arguments[0]=this,t.apply(null,arguments),this}function Fy(){return Array.from(this)}function Hy(){for(var t=this._groups,r=0,o=t.length;r1?this.each((r==null?Zy:typeof r=="function"?ev:Jy)(t,r,o??"")):oi(this.node(),t)}function oi(t,r){return t.style.getPropertyValue(r)||mp(t).getComputedStyle(t,null).getPropertyValue(r)}function nv(t){return function(){delete this[t]}}function rv(t,r){return function(){this[t]=r}}function iv(t,r){return function(){var o=r.apply(this,arguments);o==null?delete this[t]:this[t]=o}}function ov(t,r){return arguments.length>1?this.each((r==null?nv:typeof r=="function"?iv:rv)(t,r)):this.node()[t]}function yp(t){return t.trim().split(/^|\s+/)}function qu(t){return t.classList||new vp(t)}function vp(t){this._node=t,this._names=yp(t.getAttribute("class")||"")}vp.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 xp(t,r){for(var o=qu(t),l=-1,a=r.length;++l=0&&(o=r.slice(l+1),r=r.slice(0,l)),{type:r,name:o}})}function Rv(t){return function(){var r=this.__on;if(r){for(var o=0,l=-1,a=r.length,u;o()=>t;function Du(t,{sourceEvent:r,subject:o,target:l,identifier:a,active:u,x:d,y:f,dx:p,dy:v,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:u,enumerable:!0,configurable:!0},x:{value:d,enumerable:!0,configurable:!0},y:{value:f,enumerable:!0,configurable:!0},dx:{value:p,enumerable:!0,configurable:!0},dy:{value:v,enumerable:!0,configurable:!0},_:{value:m}})}Du.prototype.on=function(){var t=this._.on.apply(this._,arguments);return t===this._?this:t};function Bv(t){return!t.ctrlKey&&!t.button}function Wv(){return this.parentNode}function Uv(t,r){return r??{x:t.x,y:t.y}}function Yv(){return navigator.maxTouchPoints||"ontouchstart"in this}function Np(){var t=Bv,r=Wv,o=Uv,l=Yv,a={},u=pl("start","drag","end"),d=0,f,p,v,m,x=0;function y(P){P.on("mousedown.drag",S).filter(l).on("touchstart.drag",k).on("touchmove.drag",E,Vv).on("touchend.drag touchcancel.drag",T).style("touch-action","none").style("-webkit-tap-highlight-color","rgba(0,0,0,0)")}function S(P,O){if(!(m||!t.call(this,P,O))){var D=N(this,r.call(this,P,O),P,O,"mouse");D&&(zt(P.view).on("mousemove.drag",_,lo).on("mouseup.drag",C,lo),kp(P.view),Su(P),v=!1,f=P.clientX,p=P.clientY,D("start",P))}}function _(P){if(ri(P),!v){var O=P.clientX-f,D=P.clientY-p;v=O*O+D*D>x}a.mouse("drag",P)}function C(P){zt(P.view).on("mousemove.drag mouseup.drag",null),Ep(P.view,v),ri(P),a.mouse("end",P)}function k(P,O){if(t.call(this,P,O)){var D=P.changedTouches,H=r.call(this,P,O),F=D.length,X,ee;for(X=0;X>8&15|r>>4&240,r>>4&15|r&240,(r&15)<<4|r&15,1):o===8?Ws(r>>24&255,r>>16&255,r>>8&255,(r&255)/255):o===4?Ws(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=Qv.exec(t))?new Et(r[1],r[2],r[3],1):(r=Gv.exec(t))?new Et(r[1]*255/100,r[2]*255/100,r[3]*255/100,1):(r=Kv.exec(t))?Ws(r[1],r[2],r[3],r[4]):(r=qv.exec(t))?Ws(r[1]*255/100,r[2]*255/100,r[3]*255/100,r[4]):(r=Zv.exec(t))?rh(r[1],r[2]/100,r[3]/100,1):(r=Jv.exec(t))?rh(r[1],r[2]/100,r[3]/100,r[4]):qf.hasOwnProperty(t)?eh(qf[t]):t==="transparent"?new Et(NaN,NaN,NaN,0):null}function eh(t){return new Et(t>>16&255,t>>8&255,t&255,1)}function Ws(t,r,o,l){return l<=0&&(t=r=o=NaN),new Et(t,r,o,l)}function nx(t){return t instanceof So||(t=Sr(t)),t?(t=t.rgb(),new Et(t.r,t.g,t.b,t.opacity)):new Et}function $u(t,r,o,l){return arguments.length===1?nx(t):new Et(t,r,o,l??1)}function Et(t,r,o,l){this.r=+t,this.g=+r,this.b=+o,this.opacity=+l}Zu(Et,$u,Cp(So,{brighter(t){return t=t==null?il:Math.pow(il,t),new Et(this.r*t,this.g*t,this.b*t,this.opacity)},darker(t){return t=t==null?ao:Math.pow(ao,t),new Et(this.r*t,this.g*t,this.b*t,this.opacity)},rgb(){return this},clamp(){return new Et(xr(this.r),xr(this.g),xr(this.b),ol(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:th,formatHex:th,formatHex8:rx,formatRgb:nh,toString:nh}));function th(){return`#${vr(this.r)}${vr(this.g)}${vr(this.b)}`}function rx(){return`#${vr(this.r)}${vr(this.g)}${vr(this.b)}${vr((isNaN(this.opacity)?1:this.opacity)*255)}`}function nh(){const t=ol(this.opacity);return`${t===1?"rgb(":"rgba("}${xr(this.r)}, ${xr(this.g)}, ${xr(this.b)}${t===1?")":`, ${t})`}`}function ol(t){return isNaN(t)?1:Math.max(0,Math.min(1,t))}function xr(t){return Math.max(0,Math.min(255,Math.round(t)||0))}function vr(t){return t=xr(t),(t<16?"0":"")+t.toString(16)}function rh(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 jp(t){if(t instanceof qt)return new qt(t.h,t.s,t.l,t.opacity);if(t instanceof So||(t=Sr(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),u=Math.max(r,o,l),d=NaN,f=u-a,p=(u+a)/2;return f?(r===u?d=(o-l)/f+(o0&&p<1?0:d,new qt(d,f,p,t.opacity)}function ix(t,r,o,l){return arguments.length===1?jp(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}Zu(qt,ix,Cp(So,{brighter(t){return t=t==null?il:Math.pow(il,t),new qt(this.h,this.s,this.l*t,this.opacity)},darker(t){return t=t==null?ao:Math.pow(ao,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 Et(_u(t>=240?t-240:t+120,a,l),_u(t,a,l),_u(t<120?t+240:t-120,a,l),this.opacity)},clamp(){return new qt(ih(this.h),Us(this.s),Us(this.l),ol(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=ol(this.opacity);return`${t===1?"hsl(":"hsla("}${ih(this.h)}, ${Us(this.s)*100}%, ${Us(this.l)*100}%${t===1?")":`, ${t})`}`}}));function ih(t){return t=(t||0)%360,t<0?t+360:t}function Us(t){return Math.max(0,Math.min(1,t||0))}function _u(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 Ju=t=>()=>t;function ox(t,r){return function(o){return t+o*r}}function sx(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 lx(t){return(t=+t)==1?Mp:function(r,o){return o-r?sx(r,o,t):Ju(isNaN(r)?o:r)}}function Mp(t,r){var o=r-t;return o?ox(t,o):Ju(isNaN(t)?r:t)}const sl=(function t(r){var o=lx(r);function l(a,u){var d=o((a=$u(a)).r,(u=$u(u)).r),f=o(a.g,u.g),p=o(a.b,u.b),v=Mp(a.opacity,u.opacity);return function(m){return a.r=d(m),a.g=f(m),a.b=p(m),a.opacity=v(m),a+""}}return l.gamma=t,l})(1);function ax(t,r){r||(r=[]);var o=t?Math.min(r.length,t.length):0,l=r.slice(),a;return function(u){for(a=0;ao&&(u=r.slice(o,u),f[d]?f[d]+=u:f[++d]=u),(l=l[0])===(a=a[0])?f[d]?f[d]+=a:f[++d]=a:(f[++d]=null,p.push({i:d,x:cn(l,a)})),o=ku.lastIndex;return o180?m+=360:m-v>180&&(v+=360),y.push({i:x.push(a(x)+"rotate(",null,l)-2,x:cn(v,m)})):m&&x.push(a(x)+"rotate("+m+l)}function f(v,m,x,y){v!==m?y.push({i:x.push(a(x)+"skewX(",null,l)-2,x:cn(v,m)}):m&&x.push(a(x)+"skewX("+m+l)}function p(v,m,x,y,S,_){if(v!==x||m!==y){var C=S.push(a(S)+"scale(",null,",",null,")");_.push({i:C-4,x:cn(v,x)},{i:C-2,x:cn(m,y)})}else(x!==1||y!==1)&&S.push(a(S)+"scale("+x+","+y+")")}return function(v,m){var x=[],y=[];return v=t(v),m=t(m),u(v.translateX,v.translateY,m.translateX,m.translateY,x,y),d(v.rotate,m.rotate,x,y),f(v.skewX,m.skewX,x,y),p(v.scaleX,v.scaleY,m.scaleX,m.scaleY,x,y),v=m=null,function(S){for(var _=-1,C=y.length,k;++_=0&&t._call.call(void 0,r),t=t._next;--si}function lh(){_r=(al=co.now())+ml,si=ro=0;try{kx()}finally{si=0,Nx(),_r=0}}function Ex(){var t=co.now(),r=t-al;r>zp&&(ml-=r,al=t)}function Nx(){for(var t,r=ll,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:ll=o);io=t,Fu(l)}function Fu(t){if(!si){ro&&(ro=clearTimeout(ro));var r=t-_r;r>24?(t<1/0&&(ro=setTimeout(lh,t-co.now()-ml)),to&&(to=clearInterval(to))):(to||(al=co.now(),to=setInterval(Ex,zp)),si=1,Rp(lh))}}function ah(t,r,o){var l=new ul;return r=r==null?0:+r,l.restart(a=>{l.stop(),t(a+r)},r,o),l}var Cx=pl("start","end","cancel","interrupt"),jx=[],Ap=0,uh=1,Hu=2,el=3,ch=4,Vu=5,tl=6;function yl(t,r,o,l,a,u){var d=t.__transition;if(!d)t.__transition={};else if(o in d)return;Mx(t,o,{name:r,index:l,group:a,on:Cx,tween:jx,time:u.time,delay:u.delay,duration:u.duration,ease:u.ease,timer:null,state:Ap})}function tc(t,r){var o=tn(t,r);if(o.state>Ap)throw new Error("too late; already scheduled");return o}function fn(t,r){var o=tn(t,r);if(o.state>el)throw new Error("too late; already running");return o}function tn(t,r){var o=t.__transition;if(!o||!(o=o[r]))throw new Error("transition not found");return o}function Mx(t,r,o){var l=t.__transition,a;l[r]=o,o.timer=Lp(u,0,o.time);function u(v){o.state=uh,o.timer.restart(d,o.delay,o.time),o.delay<=v&&d(v-o.delay)}function d(v){var m,x,y,S;if(o.state!==uh)return p();for(m in l)if(S=l[m],S.name===o.name){if(S.state===el)return ah(d);S.state===ch?(S.state=tl,S.timer.stop(),S.on.call("interrupt",t,t.__data__,S.index,S.group),delete l[m]):+mHu&&l.state=0&&(r=r.slice(0,o)),!r||r==="start"})}function iw(t,r,o){var l,a,u=rw(r)?tc:fn;return function(){var d=u(this,t),f=d.on;f!==l&&(a=(l=f).copy()).on(r,o),d.on=a}}function ow(t,r){var o=this._id;return arguments.length<2?tn(this.node(),o).on.on(t):this.each(iw(o,t,r))}function sw(t){return function(){var r=this.parentNode;for(var o in this.__transition)if(+o!==t)return;r&&r.removeChild(this)}}function lw(){return this.on("end.remove",sw(this._id))}function aw(t){var r=this._name,o=this._id;typeof t!="function"&&(t=Ku(t));for(var l=this._groups,a=l.length,u=new Array(a),d=0;d()=>t;function Rw(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 En(t,r,o){this.k=t,this.x=r,this.y=o}En.prototype={constructor:En,scale:function(t){return t===1?this:new En(this.k*t,this.x,this.y)},translate:function(t,r){return t===0&r===0?this:new En(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 vl=new En(1,0,0);Op.prototype=En.prototype;function Op(t){for(;!t.__zoom;)if(!(t=t.parentNode))return vl;return t.__zoom}function Eu(t){t.stopImmediatePropagation()}function no(t){t.preventDefault(),t.stopImmediatePropagation()}function Lw(t){return(!t.ctrlKey||t.type==="wheel")&&!t.button}function Aw(){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 dh(){return this.__zoom||vl}function Dw(t){return-t.deltaY*(t.deltaMode===1?.05:t.deltaMode?1:.002)*(t.ctrlKey?10:1)}function $w(){return navigator.maxTouchPoints||"ontouchstart"in this}function bw(t,r,o){var l=t.invertX(r[0][0])-o[0][0],a=t.invertX(r[1][0])-o[1][0],u=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>u?(u+d)/2:Math.min(0,u)||Math.max(0,d))}function Fp(){var t=Lw,r=Aw,o=bw,l=Dw,a=$w,u=[0,1/0],d=[[-1/0,-1/0],[1/0,1/0]],f=250,p=Js,v=pl("start","zoom","end"),m,x,y,S=500,_=150,C=0,k=10;function E(j){j.property("__zoom",dh).on("wheel.zoom",F,{passive:!1}).on("mousedown.zoom",X).on("dblclick.zoom",ee).filter(a).on("touchstart.zoom",q).on("touchmove.zoom",te).on("touchend.zoom touchcancel.zoom",J).style("-webkit-tap-highlight-color","rgba(0,0,0,0)")}E.transform=function(j,W,V,B){var A=j.selection?j.selection():j;A.property("__zoom",dh),j!==A?O(j,W,V,B):A.interrupt().each(function(){D(this,arguments).event(B).start().zoom(null,typeof W=="function"?W.apply(this,arguments):W).end()})},E.scaleBy=function(j,W,V,B){E.scaleTo(j,function(){var A=this.__zoom.k,L=typeof W=="function"?W.apply(this,arguments):W;return A*L},V,B)},E.scaleTo=function(j,W,V,B){E.transform(j,function(){var A=r.apply(this,arguments),L=this.__zoom,b=V==null?P(A):typeof V=="function"?V.apply(this,arguments):V,M=L.invert(b),z=typeof W=="function"?W.apply(this,arguments):W;return o(N(T(L,z),b,M),A,d)},V,B)},E.translateBy=function(j,W,V,B){E.transform(j,function(){return o(this.__zoom.translate(typeof W=="function"?W.apply(this,arguments):W,typeof V=="function"?V.apply(this,arguments):V),r.apply(this,arguments),d)},null,B)},E.translateTo=function(j,W,V,B,A){E.transform(j,function(){var L=r.apply(this,arguments),b=this.__zoom,M=B==null?P(L):typeof B=="function"?B.apply(this,arguments):B;return o(vl.translate(M[0],M[1]).scale(b.k).translate(typeof W=="function"?-W.apply(this,arguments):-W,typeof V=="function"?-V.apply(this,arguments):-V),L,d)},B,A)};function T(j,W){return W=Math.max(u[0],Math.min(u[1],W)),W===j.k?j:new En(W,j.x,j.y)}function N(j,W,V){var B=W[0]-V[0]*j.k,A=W[1]-V[1]*j.k;return B===j.x&&A===j.y?j:new En(j.k,B,A)}function P(j){return[(+j[0][0]+ +j[1][0])/2,(+j[0][1]+ +j[1][1])/2]}function O(j,W,V,B){j.on("start.zoom",function(){D(this,arguments).event(B).start()}).on("interrupt.zoom end.zoom",function(){D(this,arguments).event(B).end()}).tween("zoom",function(){var A=this,L=arguments,b=D(A,L).event(B),M=r.apply(A,L),z=V==null?P(M):typeof V=="function"?V.apply(A,L):V,re=Math.max(M[1][0]-M[0][0],M[1][1]-M[0][1]),ne=A.__zoom,ae=typeof W=="function"?W.apply(A,L):W,de=p(ne.invert(z).concat(re/ne.k),ae.invert(z).concat(re/ae.k));return function(ce){if(ce===1)ce=ae;else{var G=de(ce),se=re/G[2];ce=new En(se,z[0]-G[0]*se,z[1]-G[1]*se)}b.zoom(null,ce)}})}function D(j,W,V){return!V&&j.__zooming||new H(j,W)}function H(j,W){this.that=j,this.args=W,this.active=0,this.sourceEvent=null,this.extent=r.apply(j,W),this.taps=0}H.prototype={event:function(j){return j&&(this.sourceEvent=j),this},start:function(){return++this.active===1&&(this.that.__zooming=this,this.emit("start")),this},zoom:function(j,W){return this.mouse&&j!=="mouse"&&(this.mouse[1]=W.invert(this.mouse[0])),this.touch0&&j!=="touch"&&(this.touch0[1]=W.invert(this.touch0[0])),this.touch1&&j!=="touch"&&(this.touch1[1]=W.invert(this.touch1[0])),this.that.__zoom=W,this.emit("zoom"),this},end:function(){return--this.active===0&&(delete this.that.__zooming,this.emit("end")),this},emit:function(j){var W=zt(this.that).datum();v.call(j,this.that,new Rw(j,{sourceEvent:this.sourceEvent,target:E,transform:this.that.__zoom,dispatch:v}),W)}};function F(j,...W){if(!t.apply(this,arguments))return;var V=D(this,W).event(j),B=this.__zoom,A=Math.max(u[0],Math.min(u[1],B.k*Math.pow(2,l.apply(this,arguments)))),L=Kt(j);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)],nl(this),V.start()}no(j),V.wheel=setTimeout(b,_),V.zoom("mouse",o(N(T(B,A),V.mouse[0],V.mouse[1]),V.extent,d));function b(){V.wheel=null,V.end()}}function X(j,...W){if(y||!t.apply(this,arguments))return;var V=j.currentTarget,B=D(this,W,!0).event(j),A=zt(j.view).on("mousemove.zoom",z,!0).on("mouseup.zoom",re,!0),L=Kt(j,V),b=j.clientX,M=j.clientY;kp(j.view),Eu(j),B.mouse=[L,this.__zoom.invert(L)],nl(this),B.start();function z(ne){if(no(ne),!B.moved){var ae=ne.clientX-b,de=ne.clientY-M;B.moved=ae*ae+de*de>C}B.event(ne).zoom("mouse",o(N(B.that.__zoom,B.mouse[0]=Kt(ne,V),B.mouse[1]),B.extent,d))}function re(ne){A.on("mousemove.zoom mouseup.zoom",null),Ep(ne.view,B.moved),no(ne),B.event(ne).end()}}function ee(j,...W){if(t.apply(this,arguments)){var V=this.__zoom,B=Kt(j.changedTouches?j.changedTouches[0]:j,this),A=V.invert(B),L=V.k*(j.shiftKey?.5:2),b=o(N(T(V,L),B,A),r.apply(this,W),d);no(j),f>0?zt(this).transition().duration(f).call(O,b,B,j):zt(this).call(E.transform,b,B,j)}}function q(j,...W){if(t.apply(this,arguments)){var V=j.touches,B=V.length,A=D(this,W,j.changedTouches.length===B).event(j),L,b,M,z;for(Eu(j),b=0;b`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.`},fo=[[Number.NEGATIVE_INFINITY,Number.NEGATIVE_INFINITY],[Number.POSITIVE_INFINITY,Number.POSITIVE_INFINITY]],Hp=["Enter"," ","Escape"],Vp={"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 li;(function(t){t.Strict="strict",t.Loose="loose"})(li||(li={}));var wr;(function(t){t.Free="free",t.Vertical="vertical",t.Horizontal="horizontal"})(wr||(wr={}));var ho;(function(t){t.Partial="partial",t.Full="full"})(ho||(ho={}));const Bp={inProgress:!1,isValid:null,from:null,fromHandle:null,fromPosition:null,fromNode:null,to:null,toHandle:null,toPosition:null,toNode:null,pointer:null};var qn;(function(t){t.Bezier="default",t.Straight="straight",t.Step="step",t.SmoothStep="smoothstep",t.SimpleBezier="simplebezier"})(qn||(qn={}));var po;(function(t){t.Arrow="arrow",t.ArrowClosed="arrowclosed"})(po||(po={}));var Se;(function(t){t.Left="left",t.Top="top",t.Right="right",t.Bottom="bottom"})(Se||(Se={}));const fh={[Se.Left]:Se.Right,[Se.Right]:Se.Left,[Se.Top]:Se.Bottom,[Se.Bottom]:Se.Top};function Wp(t){return t===null?null:t?"valid":"invalid"}const Up=t=>!!t&&typeof t=="object"&&"id"in t&&"source"in t&&"target"in t,Ow=t=>!!t&&typeof t=="object"&&"id"in t&&"position"in t&&!("source"in t)&&!("target"in t),rc=t=>!!t&&typeof t=="object"&&"id"in t&&"internals"in t&&!("source"in t)&&!("target"in t),_o=(t,r=[0,0])=>{const{width:o,height:l}=nn(t),a=t.origin??r,u=o*a[0],d=l*a[1];return{x:t.position.x-u,y:t.position.y-d}},Fw=(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,u)=>{const d=typeof u=="string";let f=!r.nodeLookup&&!d?u:void 0;return r.nodeLookup&&(f=d?r.nodeLookup.get(u):rc(u)?u:r.nodeLookup.get(u.id)),f?(o=!0,xl(a,cl(f,r.nodeOrigin))):a},{x:1/0,y:1/0,x2:-1/0,y2:-1/0});return o?wl(l):{x:0,y:0,width:0,height:0}},ko=(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=xl(o,cl(a)),l=!0)}),l?wl(o):{x:0,y:0,width:0,height:0}},ic=(t,r,[o,l,a]=[0,0,1],u=!1,d=!1)=>{const f=(r.x-o)/a,p=(r.y-l)/a,v=r.width/a,m=r.height/a,x=[];for(const y of t.values()){const{measured:S,selectable:_=!0,hidden:C=!1}=y;if(d&&!_||C)continue;const k=S.width??y.width??y.initialWidth??0,E=S.height??y.height??y.initialHeight??0,{x:T,y:N}=y.internals.positionAbsolute,P=Gp(f,p,v,m,T,N,k,E),O=k*E,D=u&&P>0;(!y.internals.handleBounds||D||P>=O||y.dragging)&&x.push(y)}return x},Hw=(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 Vw(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 u;if(r!=null&&r.includeHiddenNodes){const{width:d,height:f}=nn(a);u=d>0&&f>0}else u=!!(a.measured.width&&a.measured.height&&!a.hidden);u&&(!l||l.has(a.id))&&o.set(a.id,a)}),o}async function Bw({nodes:t,width:r,height:o,panZoom:l,minZoom:a,maxZoom:u},d){if(t.size===0)return!0;const f=Vw(t,d),p=ko(f),v=sc(p,r,o,(d==null?void 0:d.minZoom)??a,(d==null?void 0:d.maxZoom)??u,(d==null?void 0:d.padding)??.1);return await l.setViewport(v,{duration:d==null?void 0:d.duration,ease:d==null?void 0:d.ease,interpolate:d==null?void 0:d.interpolate}),!0}function Yp({nodeId:t,nextPosition:r,nodeLookup:o,nodeOrigin:l=[0,0],nodeExtent:a,onError:u}){const d=o.get(t),f=d.parentId?o.get(d.parentId):void 0,{x:p,y:v}=f?f.internals.positionAbsolute:{x:0,y:0},m=d.origin??l;let x=d.extent||a;if(d.extent==="parent"&&!d.expandParent)if(!f)u==null||u("005",en.error005());else{const{width:S,height:_}=nn(f);S&&_&&(x=[[p,v],[p+S,v+_]])}else f&&Er(d.extent)&&(x=[[d.extent[0][0]+p,d.extent[0][1]+v],[d.extent[1][0]+p,d.extent[1][1]+v]]);const y=Er(x)?kr(r,x,d.measured):r;return(d.measured.width===void 0||d.measured.height===void 0)&&(u==null||u("015",en.error015())),{position:{x:y.x-p+(d.measured.width??0)*m[0],y:y.y-v+(d.measured.height??0)*m[1]},positionAbsolute:y}}async function Ww({nodesToRemove:t=[],edgesToRemove:r=[],nodes:o,edges:l,onBeforeDelete:a}){const u=new Set(t.map(y=>y.id)),d=[];for(const y of o){if(y.deletable===!1)continue;const S=u.has(y.id),_=!S&&y.parentId&&d.find(C=>C.id===y.parentId);(S||_)&&d.push(y)}const f=new Set(r.map(y=>y.id)),p=l.filter(y=>y.deletable!==!1),m=Hw(d,p);for(const y of p)f.has(y.id)&&!m.find(_=>_.id===y.id)&&m.push(y);if(!a)return{edges:m,nodes:d};const x=await a({nodes:d,edges:m});return typeof x=="boolean"?x?{edges:m,nodes:d}:{edges:[],nodes:[]}:x}const ai=(t,r=0,o=1)=>Math.min(Math.max(t,r),o),kr=(t={x:0,y:0},r,o)=>({x:ai(t.x,r[0][0],r[1][0]-((o==null?void 0:o.width)??0)),y:ai(t.y,r[0][1],r[1][1]-((o==null?void 0:o.height)??0))});function Xp(t,r,o){const{width:l,height:a}=nn(o),{x:u,y:d}=o.internals.positionAbsolute;return kr(t,[[u,d],[u+l,d+a]],r)}const hh=(t,r,o)=>to?-ai(Math.abs(t-o),1,r)/r:0,oc=(t,r,o=15,l=40)=>{const a=hh(t.x,l,r.width-l)*o,u=hh(t.y,l,r.height-l)*o;return[a,u]},xl=(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)}),Bu=({x:t,y:r,width:o,height:l})=>({x:t,y:r,x2:t+o,y2:r+l}),wl=({x:t,y:r,x2:o,y2:l})=>({x:t,y:r,width:o-t,height:l-r}),go=(t,r=[0,0])=>{var a,u;const{x:o,y:l}=rc(t)?t.internals.positionAbsolute:_o(t,r);return{x:o,y:l,width:((a=t.measured)==null?void 0:a.width)??t.width??t.initialWidth??0,height:((u=t.measured)==null?void 0:u.height)??t.height??t.initialHeight??0}},cl=(t,r=[0,0])=>{var a,u;const{x:o,y:l}=rc(t)?t.internals.positionAbsolute:_o(t,r);return{x:o,y:l,x2:o+(((a=t.measured)==null?void 0:a.width)??t.width??t.initialWidth??0),y2:l+(((u=t.measured)==null?void 0:u.height)??t.height??t.initialHeight??0)}},Qp=(t,r)=>wl(xl(Bu(t),Bu(r))),Gp=(t,r,o,l,a,u,d,f)=>{const p=Math.max(0,Math.min(t+o,a+d)-Math.max(t,a)),v=Math.max(0,Math.min(r+l,u+f)-Math.max(r,u));return Math.ceil(p*v)},dl=(t,r)=>Gp(t.x,t.y,t.width,t.height,r.x,r.y,r.width,r.height),ph=t=>Zt(t.width)&&Zt(t.height)&&Zt(t.x)&&Zt(t.y),Zt=t=>!isNaN(t)&&isFinite(t),Kp=(t,r)=>(o,l)=>{},Eo=(t,r=[1,1])=>({x:r[0]*Math.round(t.x/r[0]),y:r[1]*Math.round(t.y/r[1])}),No=({x:t,y:r},[o,l,a],u=!1,d=[1,1])=>{const f={x:(t-o)/a,y:(r-l)/a};return u?Eo(f,d):f},ui=({x:t,y:r},[o,l,a])=>({x:t*a+o,y:r*a+l});function ti(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 Uw(t,r,o){if(typeof t=="string"||typeof t=="number"){const l=ti(t,o),a=ti(t,r);return{top:l,right:a,bottom:l,left:a,x:a*2,y:l*2}}if(typeof t=="object"){const l=ti(t.top??t.y??0,o),a=ti(t.bottom??t.y??0,o),u=ti(t.left??t.x??0,r),d=ti(t.right??t.x??0,r);return{top:l,right:d,bottom:a,left:u,x:u+d,y:l+a}}return{top:0,right:0,bottom:0,left:0,x:0,y:0}}function Yw(t,r,o,l,a,u){const{x:d,y:f}=ui(t,[r,o,l]),{x:p,y:v}=ui({x:t.x+t.width,y:t.y+t.height},[r,o,l]),m=a-p,x=u-v;return{left:Math.floor(d),top:Math.floor(f),right:Math.floor(m),bottom:Math.floor(x)}}const sc=(t,r,o,l,a,u)=>{const d=Uw(u,r,o),f=(r-d.x)/t.width,p=(o-d.y)/t.height,v=Math.min(f,p),m=ai(v,l,a),x=t.x+t.width/2,y=t.y+t.height/2,S=r/2-x*m,_=o/2-y*m,C=Yw(t,S,_,m,r,o),k={left:Math.min(C.left-d.left,0),top:Math.min(C.top-d.top,0),right:Math.min(C.right-d.right,0),bottom:Math.min(C.bottom-d.bottom,0)};return{x:S-k.left+k.right,y:_-k.top+k.bottom,zoom:m}},mo=()=>{var t;return typeof navigator<"u"&&((t=navigator==null?void 0:navigator.userAgent)==null?void 0:t.indexOf("Mac"))>=0};function Er(t){return t!=null&&t!=="parent"}function nn(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 qp(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 Zp(t,r={width:0,height:0},o,l,a){const u={...t},d=l.get(o);if(d){const f=d.origin||a;u.x+=d.internals.positionAbsolute.x-(r.width??0)*f[0],u.y+=d.internals.positionAbsolute.y-(r.height??0)*f[1]}return u}function gh(t,r){if(t.size!==r.size)return!1;for(const o of t)if(!r.has(o))return!1;return!0}function Xw(){let t,r;return{promise:new Promise((l,a)=>{t=l,r=a}),resolve:t,reject:r}}function Qw(t){return{...Vp,...t||{}}}function so(t,{snapGrid:r=[0,0],snapToGrid:o=!1,transform:l,containerBounds:a}){const{x:u,y:d}=Jt(t),f=No({x:u-((a==null?void 0:a.left)??0),y:d-((a==null?void 0:a.top)??0)},l),{x:p,y:v}=o?Eo(f,r):f;return{xSnapped:p,ySnapped:v,...f}}const lc=t=>({width:t.offsetWidth,height:t.offsetHeight}),Jp=t=>{var r;return((r=t==null?void 0:t.getRootNode)==null?void 0:r.call(t))||(window==null?void 0:window.document)},Gw=["INPUT","SELECT","TEXTAREA"];function eg(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:Gw.includes(r.nodeName)||r.hasAttribute("contenteditable")||!!r.closest(".nokey")}const tg=t=>"clientX"in t,Jt=(t,r)=>{var u,d;const o=tg(t),l=o?t.clientX:(u=t.touches)==null?void 0:u[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)}},mh=(t,r,o,l,a)=>{const u=r.querySelectorAll(`.${t}`);return!u||!u.length?null:Array.from(u).map(d=>{const f=d.getBoundingClientRect();return{id:d.getAttribute("data-handleid"),type:t,nodeId:a,position:d.getAttribute("data-handlepos"),x:(f.left-o.left)/l,y:(f.top-o.top)/l,...lc(d)}})};function ng({sourceX:t,sourceY:r,targetX:o,targetY:l,sourceControlX:a,sourceControlY:u,targetControlX:d,targetControlY:f}){const p=t*.125+a*.375+d*.375+o*.125,v=r*.125+u*.375+f*.375+l*.125,m=Math.abs(p-t),x=Math.abs(v-r);return[p,v,m,x]}function Qs(t,r){return t>=0?.5*t:r*25*Math.sqrt(-t)}function yh({pos:t,x1:r,y1:o,x2:l,y2:a,c:u}){switch(t){case Se.Left:return[r-Qs(r-l,u),o];case Se.Right:return[r+Qs(l-r,u),o];case Se.Top:return[r,o-Qs(o-a,u)];case Se.Bottom:return[r,o+Qs(a-o,u)]}}function rg({sourceX:t,sourceY:r,sourcePosition:o=Se.Bottom,targetX:l,targetY:a,targetPosition:u=Se.Top,curvature:d=.25}){const[f,p]=yh({pos:o,x1:t,y1:r,x2:l,y2:a,c:d}),[v,m]=yh({pos:u,x1:l,y1:a,x2:t,y2:r,c:d}),[x,y,S,_]=ng({sourceX:t,sourceY:r,targetX:l,targetY:a,sourceControlX:f,sourceControlY:p,targetControlX:v,targetControlY:m});return[`M${t},${r} C${f},${p} ${v},${m} ${l},${a}`,x,y,S,_]}function ig({sourceX:t,sourceY:r,targetX:o,targetY:l}){const a=Math.abs(o-t)/2,u=o0}const Zw=({source:t,sourceHandle:r,target:o,targetHandle:l})=>`xy-edge__${t}${r||""}-${o}${l||""}`,Jw=(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)),e1=(t,r,o={})=>{var u;if(!t.source||!t.target)return(u=o.onError)==null||u.call(o,"006",en.error006()),r;const l=o.getEdgeId||Zw;let a;return Up(t)?a={...t}:a={...t,id:l(t)},Jw(a,r)?r:(a.sourceHandle===null&&delete a.sourceHandle,a.targetHandle===null&&delete a.targetHandle,r.concat(a))};function og({sourceX:t,sourceY:r,targetX:o,targetY:l}){const[a,u,d,f]=ig({sourceX:t,sourceY:r,targetX:o,targetY:l});return[`M ${t},${r}L ${o},${l}`,a,u,d,f]}const vh={[Se.Left]:{x:-1,y:0},[Se.Right]:{x:1,y:0},[Se.Top]:{x:0,y:-1},[Se.Bottom]:{x:0,y:1}},t1=({source:t,sourcePosition:r=Se.Bottom,target:o})=>r===Se.Left||r===Se.Right?t.xMath.sqrt(Math.pow(r.x-t.x,2)+Math.pow(r.y-t.y,2));function n1({source:t,sourcePosition:r=Se.Bottom,target:o,targetPosition:l=Se.Top,center:a,offset:u,stepPosition:d}){const f=vh[r],p=vh[l],v={x:t.x+f.x*u,y:t.y+f.y*u},m={x:o.x+p.x*u,y:o.y+p.y*u},x=t1({source:v,sourcePosition:r,target:m}),y=x.x!==0?"x":"y",S=x[y];let _=[],C,k;const E={x:0,y:0},T={x:0,y:0},[,,N,P]=ig({sourceX:t.x,sourceY:t.y,targetX:o.x,targetY:o.y});if(f[y]*p[y]===-1){y==="x"?(C=a.x??v.x+(m.x-v.x)*d,k=a.y??(v.y+m.y)/2):(C=a.x??(v.x+m.x)/2,k=a.y??v.y+(m.y-v.y)*d);const F=[{x:C,y:v.y},{x:C,y:m.y}],X=[{x:v.x,y:k},{x:m.x,y:k}];f[y]===S?_=y==="x"?F:X:_=y==="x"?X:F}else{const F=[{x:v.x,y:m.y}],X=[{x:m.x,y:v.y}];if(y==="x"?_=f.x===S?X:F:_=f.y===S?F:X,r===l){const j=Math.abs(t[y]-o[y]);if(j<=u){const W=Math.min(u-1,u-j);f[y]===S?E[y]=(v[y]>t[y]?-1:1)*W:T[y]=(m[y]>o[y]?-1:1)*W}}if(r!==l){const j=y==="x"?"y":"x",W=f[y]===p[j],V=v[j]>m[j],B=v[j]=J?(C=(ee.x+q.x)/2,k=_[0].y):(C=_[0].x,k=(ee.y+q.y)/2)}const O={x:v.x+E.x,y:v.y+E.y},D={x:m.x+T.x,y:m.y+T.y};return[[t,...O.x!==_[0].x||O.y!==_[0].y?[O]:[],..._,...D.x!==_[_.length-1].x||D.y!==_[_.length-1].y?[D]:[],o],C,k,N,P]}function r1(t,r,o,l){const a=Math.min(xh(t,r)/2,xh(r,o)/2,l),{x:u,y:d}=r;if(t.x===u&&u===o.x||t.y===d&&d===o.y)return`L${u} ${d}`;if(t.y===d){const v=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 o1(t,{id:r,defaultColor:o,defaultMarkerStart:l,defaultMarkerEnd:a}){const u=new Set;return t.reduce((d,f)=>([f.markerStart||l,f.markerEnd||a].forEach(p=>{if(p&&typeof p=="object"){const v=Uu(p,r);u.has(v)||(d.push({id:v,color:p.color||o,...p}),u.add(v))}}),d),[]).sort((d,f)=>d.id.localeCompare(f.id))}const sg=1e3,s1=10,ac={nodeOrigin:[0,0],nodeExtent:fo,elevateNodesOnSelect:!0,zIndexMode:"basic",defaults:{}},l1={...ac,checkEquality:!0};function uc(t,r){const o={...t};for(const l in r)r[l]!==void 0&&(o[l]=r[l]);return o}function a1(t,r,o){const l=uc(ac,o);for(const a of t.values())if(a.parentId)dc(a,t,r,l);else{const u=_o(a,l.nodeOrigin),d=Er(a.extent)?a.extent:l.nodeExtent,f=kr(u,d,nn(a));a.internals.positionAbsolute=f}}function u1(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 u={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(u):a.type==="target"&&l.push(u)}return{source:o,target:l}}function cc(t){return t==="manual"}function Yu(t,r,o,l={}){var m,x;const a=uc(l1,l),u={i:0},d=new Map(r),f=a!=null&&a.elevateNodesOnSelect&&!cc(a.zIndexMode)?sg:0;let p=t.length>0,v=!1;r.clear(),o.clear();for(const y of t){let S=d.get(y.id);if(a.checkEquality&&y===(S==null?void 0:S.internals.userNode))r.set(y.id,S);else{const _=_o(y,a.nodeOrigin),C=Er(y.extent)?y.extent:a.nodeExtent,k=kr(_,C,nn(y));S={...a.defaults,...y,measured:{width:(m=y.measured)==null?void 0:m.width,height:(x=y.measured)==null?void 0:x.height},internals:{positionAbsolute:k,handleBounds:u1(y,S),z:lg(y,f,a.zIndexMode),userNode:y}},r.set(y.id,S)}(S.measured===void 0||S.measured.width===void 0||S.measured.height===void 0)&&!S.hidden&&(p=!1),y.parentId&&dc(S,r,o,l,u),v||(v=y.selected??!1)}return{nodesInitialized:p,hasSelectedNodes:v}}function c1(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 dc(t,r,o,l,a){const{elevateNodesOnSelect:u,nodeOrigin:d,nodeExtent:f,zIndexMode:p}=uc(ac,l),v=t.parentId,m=r.get(v);if(!m){console.warn(`Parent node ${v} not found. Please make sure that parent nodes are in front of their child nodes in the nodes array.`);return}c1(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*s1),a&&m.internals.rootParentIndex!==void 0&&(a.i=m.internals.rootParentIndex);const x=u&&!cc(p)?sg:0,{x:y,y:S,z:_}=d1(t,m,d,f,x,p),{positionAbsolute:C}=t.internals,k=y!==C.x||S!==C.y;(k||_!==t.internals.z)&&r.set(t.id,{...t,internals:{...t.internals,positionAbsolute:k?{x:y,y:S}:C,z:_}})}function lg(t,r,o){const l=Zt(t.zIndex)?t.zIndex:0;return cc(o)?l:l+(t.selected?r:0)}function d1(t,r,o,l,a,u){const{x:d,y:f}=r.internals.positionAbsolute,p=nn(t),v=_o(t,o),m=Er(t.extent)?kr(v,t.extent,p):v;let x=kr({x:d+m.x,y:f+m.y},l,p);t.extent==="parent"&&(x=Xp(x,p,r));const y=lg(t,a,u),S=r.internals.z??0;return{x:x.x,y:x.y,z:S>=y?S+1:y}}function fc(t,r,o,l=[0,0]){var d;const a=[],u=new Map;for(const f of t){const p=r.get(f.parentId);if(!p)continue;const v=((d=u.get(f.parentId))==null?void 0:d.expandedRect)??go(p),m=Qp(v,f.rect);u.set(f.parentId,{expandedRect:m,parent:p})}return u.size>0&&u.forEach(({expandedRect:f,parent:p},v)=>{var N;const m=p.internals.positionAbsolute,x=nn(p),y=p.origin??l,S=f.x0||_>0||E||T)&&(a.push({id:v,type:"position",position:{x:p.position.x-S+E,y:p.position.y-_+T}}),(N=o.get(v))==null||N.forEach(P=>{t.some(O=>O.id===P.id)||a.push({id:P.id,type:"position",position:{x:P.position.x+S,y:P.position.y+_}})})),(x.width0){const S=fc(y,r,o,a);v.push(...S)}return{changes:v,updatedInternals:p}}async function h1({delta:t,panZoom:r,transform:o,translateExtent:l,width:a,height:u}){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,u]],l);return!!d&&(d.x!==o[0]||d.y!==o[1]||d.k!==o[2])}function kh(t,r,o,l,a,u){let d=a;const f=l.get(d)||new Map;l.set(d,f.set(o,r)),d=`${a}-${t}`;const p=l.get(d)||new Map;if(l.set(d,p.set(o,r)),u){d=`${a}-${t}-${u}`;const v=l.get(d)||new Map;l.set(d,v.set(o,r))}}function ag(t,r,o){t.clear(),r.clear();for(const l of o){const{source:a,target:u,sourceHandle:d=null,targetHandle:f=null}=l,p={edgeId:l.id,source:a,target:u,sourceHandle:d,targetHandle:f},v=`${a}-${d}--${u}-${f}`,m=`${u}-${f}--${a}-${d}`;kh("source",p,m,t,a,d),kh("target",p,v,t,u,f),r.set(l.id,l)}}function ug(t,r){if(!t.parentId)return!1;const o=r.get(t.parentId);return o?o.selected?!0:ug(o,r):!1}function Eh(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 p1(t,r,o,l){const a=new Map;for(const[u,d]of t)if((d.selected||d.id===l)&&(!d.parentId||!ug(d,t))&&(d.draggable||r&&typeof d.draggable>"u")){const f=t.get(u);f&&a.set(u,{id:u,position:f.position||{x:0,y:0},distance:{x:o.x-f.internals.positionAbsolute.x,y:o.y-f.internals.positionAbsolute.y},extent:f.extent,parentId:f.parentId,origin:f.origin,expandParent:f.expandParent,internals:{positionAbsolute:f.internals.positionAbsolute||{x:0,y:0}},measured:{width:f.measured.width??0,height:f.measured.height??0}})}return a}function Nu({nodeId:t,dragItems:r,nodeLookup:o,dragging:l=!0}){var d,f,p;const a=[];for(const[v,m]of r){const x=(d=o.get(v))==null?void 0:d.internals.userNode;x&&a.push({...x,position:m.position,dragging:l})}if(!t)return[a[0],a];const u=(f=o.get(t))==null?void 0:f.internals.userNode;return[u?{...u,position:((p=r.get(t))==null?void 0:p.position)||u.position,dragging:l}:a[0],a]}function g1({dragItems:t,snapGrid:r,x:o,y:l}){const a=t.values().next().value;if(!a)return null;const u={x:o-a.distance.x,y:l-a.distance.y},d=Eo(u,r);return{x:d.x-u.x,y:d.y-u.y}}function m1({onNodeMouseDown:t,getStoreItems:r,onDragStart:o,onDrag:l,onDragStop:a}){let u={x:null,y:null},d=0,f=new Map,p=!1,v={x:0,y:0},m=null,x=!1,y=null,S=!1,_=!1,C=null;function k({noDragClassName:T,handleSelector:N,domNode:P,isSelectable:O,nodeId:D,nodeClickDistance:H=0}){y=zt(P);function F({x:te,y:J}){const{nodeLookup:j,nodeExtent:W,snapGrid:V,snapToGrid:B,nodeOrigin:A,onNodeDrag:L,onSelectionDrag:b,onError:M,updateNodePositions:z}=r();u={x:te,y:J};let re=!1;const ne=f.size>1,ae=ne&&W?Bu(ko(f)):null,de=ne&&B?g1({dragItems:f,snapGrid:V,x:te,y:J}):null;for(const[ce,G]of f){if(!j.has(ce))continue;let se={x:te-G.distance.x,y:J-G.distance.y};B&&(se=de?{x:Math.round(se.x+de.x),y:Math.round(se.y+de.y)}:Eo(se,V));let he=null;if(ne&&W&&!G.extent&&ae){const{positionAbsolute:me}=G.internals,Ce=me.x-ae.x+W[0][0],Me=me.x+G.measured.width-ae.x2+W[1][0],Pe=me.y-ae.y+W[0][1],Re=me.y+G.measured.height-ae.y2+W[1][1];he=[[Ce,Pe],[Me,Re]]}const{position:we,positionAbsolute:ve}=Yp({nodeId:ce,nextPosition:se,nodeLookup:j,nodeExtent:he||W,nodeOrigin:A,onError:M});re=re||G.position.x!==we.x||G.position.y!==we.y,G.position=we,G.internals.positionAbsolute=ve}if(_=_||re,!!re&&(z(f,!0),C&&(l||L||!D&&b))){const[ce,G]=Nu({nodeId:D,dragItems:f,nodeLookup:j});l==null||l(C,f,ce,G),L==null||L(C,ce,G),D||b==null||b(C,G)}}async function X(){if(!m)return;const{transform:te,panBy:J,autoPanSpeed:j,autoPanOnNodeDrag:W}=r();if(!W){p=!1,cancelAnimationFrame(d);return}const[V,B]=oc(v,m,j);(V!==0||B!==0)&&(u.x=(u.x??0)-V/te[2],u.y=(u.y??0)-B/te[2],await J({x:V,y:B})&&F(u)),d=requestAnimationFrame(X)}function ee(te){var ne;const{nodeLookup:J,multiSelectionActive:j,nodesDraggable:W,transform:V,snapGrid:B,snapToGrid:A,selectNodesOnDrag:L,onNodeDragStart:b,onSelectionDragStart:M,unselectNodesAndEdges:z}=r();x=!0,(!L||!O)&&!j&&D&&((ne=J.get(D))!=null&&ne.selected||z()),O&&L&&D&&(t==null||t(D));const re=so(te.sourceEvent,{transform:V,snapGrid:B,snapToGrid:A,containerBounds:m});if(u=re,f=p1(J,W,re,D),f.size>0&&(o||b||!D&&M)){const[ae,de]=Nu({nodeId:D,dragItems:f,nodeLookup:J});o==null||o(te.sourceEvent,f,ae,de),b==null||b(te.sourceEvent,ae,de),D||M==null||M(te.sourceEvent,de)}}const q=Np().clickDistance(H).on("start",te=>{const{domNode:J,nodeDragThreshold:j,transform:W,snapGrid:V,snapToGrid:B}=r();m=(J==null?void 0:J.getBoundingClientRect())||null,S=!1,_=!1,C=te.sourceEvent,j===0&&ee(te),u=so(te.sourceEvent,{transform:W,snapGrid:V,snapToGrid:B,containerBounds:m}),v=Jt(te.sourceEvent,m)}).on("drag",te=>{const{autoPanOnNodeDrag:J,transform:j,snapGrid:W,snapToGrid:V,nodeDragThreshold:B,nodeLookup:A}=r(),L=so(te.sourceEvent,{transform:j,snapGrid:W,snapToGrid:V,containerBounds:m});if(C=te.sourceEvent,(te.sourceEvent.type==="touchmove"&&te.sourceEvent.touches.length>1||D&&!A.has(D))&&(S=!0),!S){if(!p&&J&&x&&(p=!0,X()),!x){const b=Jt(te.sourceEvent,m),M=b.x-v.x,z=b.y-v.y;Math.sqrt(M*M+z*z)>B&&ee(te)}(u.x!==L.xSnapped||u.y!==L.ySnapped)&&f&&x&&(v=Jt(te.sourceEvent,m),F(L))}}).on("end",te=>{if(!x||S){S&&f.size>0&&r().updateNodePositions(f,!1);return}if(p=!1,x=!1,cancelAnimationFrame(d),f.size>0){const{nodeLookup:J,updateNodePositions:j,onNodeDragStop:W,onSelectionDragStop:V}=r();if(_&&(j(f,!1),_=!1),a||W||!D&&V){const[B,A]=Nu({nodeId:D,dragItems:f,nodeLookup:J,dragging:!1});a==null||a(te.sourceEvent,f,B,A),W==null||W(te.sourceEvent,B,A),D||V==null||V(te.sourceEvent,A)}}}).filter(te=>{const J=te.target;return!te.button&&(!T||!Eh(J,`.${T}`,P))&&(!N||Eh(J,N,P))});y.call(q)}function E(){y==null||y.on(".drag",null)}return{update:k,destroy:E}}function y1(t,r,o){const l=[],a={x:t.x-o,y:t.y-o,width:o*2,height:o*2};for(const u of r.values())dl(a,go(u))>0&&l.push(u);return l}const v1=250;function x1(t,r,o,l){var f,p;let a=[],u=1/0;const d=y1(t,o,r+v1);for(const v of d){const m=[...((f=v.internals.handleBounds)==null?void 0:f.source)??[],...((p=v.internals.handleBounds)==null?void 0:p.target)??[]];for(const x of m){if(l.nodeId===x.nodeId&&l.type===x.type&&l.id===x.id)continue;const{x:y,y:S}=Nr(v,x,x.position,!0),_=Math.sqrt(Math.pow(y-t.x,2)+Math.pow(S-t.y,2));_>r||(_1){const v=l.type==="source"?"target":"source";return a.find(m=>m.type===v)??a[0]}return a[0]}function cg(t,r,o,l,a,u=!1){var v,m,x;const d=l.get(t);if(!d)return null;const f=a==="strict"?(v=d.internals.handleBounds)==null?void 0:v[r]:[...((m=d.internals.handleBounds)==null?void 0:m.source)??[],...((x=d.internals.handleBounds)==null?void 0:x.target)??[]],p=(o?f==null?void 0:f.find(y=>y.id===o):f==null?void 0:f[0])??null;return p&&u?{...p,...Nr(d,p,p.position,!0)}:p}function dg(t,r){return t||(r!=null&&r.classList.contains("target")?"target":r!=null&&r.classList.contains("source")?"source":null)}function w1(t,r){let o=null;return r?o=!0:t&&!r&&(o=!1),o}const fg=()=>!0;function S1(t,{connectionMode:r,connectionRadius:o,handleId:l,nodeId:a,edgeUpdaterType:u,isTarget:d,domNode:f,nodeLookup:p,lib:v,autoPanOnConnect:m,flowId:x,panBy:y,cancelConnection:S,onConnectStart:_,onConnect:C,onConnectEnd:k,isValidConnection:E=fg,onReconnectEnd:T,updateConnection:N,getTransform:P,getFromHandle:O,autoPanSpeed:D,dragThreshold:H=1,handleDomNode:F}){const X=Jp(t.target);let ee=0,q;const{x:te,y:J}=Jt(t),j=dg(u,F),W=f==null?void 0:f.getBoundingClientRect();let V=!1;if(!W||!j)return;const B=cg(a,j,l,p,r);if(!B)return;let A=Jt(t,W),L=!1,b=null,M=!1,z=null;function re(){if(!m||!W)return;const[we,ve]=oc(A,W,D);y({x:we,y:ve}),ee=requestAnimationFrame(re)}const ne={...B,nodeId:a,type:j,position:B.position},ae=p.get(a);let ce={inProgress:!0,isValid:null,from:Nr(ae,ne,Se.Left,!0),fromHandle:ne,fromPosition:ne.position,fromNode:ae,to:A,toHandle:null,toPosition:fh[ne.position],toNode:null,pointer:A};function G(){V=!0,N(ce),_==null||_(t,{nodeId:a,handleId:l,handleType:j})}H===0&&G();function se(we){if(!V){const{x:Re,y:nt}=Jt(we),rt=Re-te,Xe=nt-J;if(!(rt*rt+Xe*Xe>H*H))return;G()}if(!O()||!ne){he(we);return}const ve=P();A=Jt(we,W),q=x1(No(A,ve,!1,[1,1]),o,p,ne),L||(re(),L=!0);const me=hg(we,{handle:q,connectionMode:r,fromNodeId:a,fromHandleId:l,fromType:d?"target":"source",isValidConnection:E,doc:X,lib:v,flowId:x,nodeLookup:p});z=me.handleDomNode,b=me.connection,M=w1(!!q,me.isValid);const Ce=p.get(a),Me=Ce?Nr(Ce,ne,Se.Left,!0):ce.from,Pe={...ce,from:Me,isValid:M,to:me.toHandle&&M?ui({x:me.toHandle.x,y:me.toHandle.y},ve):A,toHandle:me.toHandle,toPosition:M&&me.toHandle?me.toHandle.position:fh[ne.position],toNode:me.toHandle?p.get(me.toHandle.nodeId):null,pointer:A};N(Pe),ce=Pe}function he(we){if(!("touches"in we&&we.touches.length>0)){if(V){(q||z)&&b&&M&&(C==null||C(b));const{inProgress:ve,...me}=ce,Ce={...me,toPosition:ce.toHandle?ce.toPosition:null};k==null||k(we,Ce),u&&(T==null||T(we,Ce))}S(),cancelAnimationFrame(ee),L=!1,M=!1,b=null,z=null,X.removeEventListener("mousemove",se),X.removeEventListener("mouseup",he),X.removeEventListener("touchmove",se),X.removeEventListener("touchend",he)}}X.addEventListener("mousemove",se),X.addEventListener("mouseup",he),X.addEventListener("touchmove",se),X.addEventListener("touchend",he)}function hg(t,{handle:r,connectionMode:o,fromNodeId:l,fromHandleId:a,fromType:u,doc:d,lib:f,flowId:p,isValidConnection:v=fg,nodeLookup:m}){const x=u==="target",y=r?d.querySelector(`.${f}-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:_}=Jt(t),C=d.elementFromPoint(S,_),k=C!=null&&C.classList.contains(`${f}-flow__handle`)?C:y,E={handleDomNode:k,isValid:!1,connection:null,toHandle:null};if(k){const T=dg(void 0,k),N=k.getAttribute("data-nodeid"),P=k.getAttribute("data-handleid"),O=k.classList.contains("connectable"),D=k.classList.contains("connectableend");if(!N||!T)return E;const H={source:x?N:l,sourceHandle:x?P:a,target:x?l:N,targetHandle:x?a:P};E.connection=H;const X=O&&D&&(o===li.Strict?x&&T==="source"||!x&&T==="target":N!==l||P!==a);E.isValid=X&&v(H),E.toHandle=cg(N,T,P,m,o,!0)}return E}const Xu={onPointerDown:S1,isValid:hg};function _1({domNode:t,panZoom:r,getTransform:o,getViewScale:l}){const a=zt(t);function u({translateExtent:f,width:p,height:v,zoomStep:m=1,pannable:x=!0,zoomable:y=!0,inversePan:S=!1}){const _=N=>{if(N.sourceEvent.type!=="wheel"||!r)return;const P=o(),O=N.sourceEvent.ctrlKey&&mo()?10:1,D=-N.sourceEvent.deltaY*(N.sourceEvent.deltaMode===1?.05:N.sourceEvent.deltaMode?1:.002)*m,H=P[2]*Math.pow(2,D*O);r.scaleTo(H)};let C=[0,0];const k=N=>{(N.sourceEvent.type==="mousedown"||N.sourceEvent.type==="touchstart")&&(C=[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 O=[N.sourceEvent.clientX??N.sourceEvent.touches[0].clientX,N.sourceEvent.clientY??N.sourceEvent.touches[0].clientY],D=[O[0]-C[0],O[1]-C[1]];C=O;const H=l()*Math.max(P[2],Math.log(P[2]))*(S?-1:1),F={x:P[0]-D[0]*H,y:P[1]-D[1]*H},X=[[0,0],[p,v]];r.setViewportConstrained({x:F.x,y:F.y,zoom:P[2]},X,f)},T=Fp().on("start",k).on("zoom",x?E:null).on("zoom.wheel",y?_:null);a.call(T,{})}function d(){a.on("zoom",null)}return{update:u,destroy:d,pointer:Kt}}const Sl=t=>({x:t.x,y:t.y,zoom:t.k}),Cu=({x:t,y:r,zoom:o})=>vl.translate(t,r).scale(o),Kn=(t,r)=>t.target.closest(`.${r}`),pg=(t,r)=>r===2&&Array.isArray(t)&&t.includes(2),k1=t=>((t*=2)<=1?t*t*t:(t-=2)*t*t+2)/2,ju=(t,r=0,o=k1,l=()=>{})=>{const a=typeof r=="number"&&r>0;return a||l(),a?t.transition().duration(r).ease(o).on("end",l):t},gg=t=>{const r=t.ctrlKey&&mo()?10:1;return-t.deltaY*(t.deltaMode===1?.05:t.deltaMode?1:.002)*r};function E1({zoomPanValues:t,noWheelClassName:r,d3Selection:o,d3Zoom:l,panOnScrollMode:a,panOnScrollSpeed:u,zoomOnPinch:d,onPanZoomStart:f,onPanZoom:p,onPanZoomEnd:v}){return m=>{if(Kn(m,r))return m.ctrlKey&&m.preventDefault(),!1;m.preventDefault(),m.stopImmediatePropagation();const x=o.property("__zoom").k||1;if(m.ctrlKey&&d){const k=Kt(m),E=gg(m),T=x*Math.pow(2,E);l.scaleTo(o,T,k,m);return}const y=m.deltaMode===1?20:1;let S=a===wr.Vertical?0:m.deltaX*y,_=a===wr.Horizontal?0:m.deltaY*y;!mo()&&m.shiftKey&&a!==wr.Vertical&&(S=m.deltaY*y,_=0),l.translateBy(o,-(S/x)*u,-(_/x)*u,{internal:!0});const C=Sl(o.property("__zoom"));clearTimeout(t.panScrollTimeout),t.isPanScrolling?p==null||p(m,C):(t.isPanScrolling=!0,f==null||f(m,C)),t.panScrollTimeout=setTimeout(()=>{v==null||v(m,C),t.isPanScrolling=!1},150)}}function N1({noWheelClassName:t,preventScrolling:r,d3ZoomHandler:o}){return function(l,a){const u=l.type==="wheel",d=!r&&u&&!l.ctrlKey,f=Kn(l,t);if(l.ctrlKey&&u&&f&&l.preventDefault(),d||f)return null;l.preventDefault(),o.call(this,l,a)}}function C1({zoomPanValues:t,onDraggingChange:r,onPanZoomStart:o}){return l=>{var u,d,f;if((u=l.sourceEvent)!=null&&u.internal)return;const a=Sl(l.transform);t.mouseButton=((d=l.sourceEvent)==null?void 0:d.button)||0,t.isZoomingOrPanning=!0,t.prevViewport=a,((f=l.sourceEvent)==null?void 0:f.type)==="mousedown"&&r(!0),o&&(o==null||o(l.sourceEvent,a))}}function j1({zoomPanValues:t,panOnDrag:r,onPaneContextMenu:o,onTransformChange:l,onPanZoom:a}){return u=>{var d,f;t.usedRightMouseButton=!!(o&&pg(r,t.mouseButton??0)),(d=u.sourceEvent)!=null&&d.sync||l([u.transform.x,u.transform.y,u.transform.k]),a&&!((f=u.sourceEvent)!=null&&f.internal)&&(a==null||a(u.sourceEvent,Sl(u.transform)))}}function M1({zoomPanValues:t,panOnDrag:r,panOnScroll:o,onDraggingChange:l,onPanZoomEnd:a,onPaneContextMenu:u}){return d=>{var f;if(!((f=d.sourceEvent)!=null&&f.internal)&&(t.isZoomingOrPanning=!1,u&&pg(r,t.mouseButton??0)&&!t.usedRightMouseButton&&d.sourceEvent&&u(d.sourceEvent),t.usedRightMouseButton=!1,l(!1),a)){const p=Sl(d.transform);t.prevViewport=p,clearTimeout(t.timerId),t.timerId=setTimeout(()=>{a==null||a(d.sourceEvent,p)},o?150:0)}}}function P1({panActivationKeyPressed:t,zoomActivationKeyPressed:r,zoomOnScroll:o,zoomOnPinch:l,panOnDrag:a,panOnScroll:u,zoomOnDoubleClick:d,userSelectionActive:f,noWheelClassName:p,noPanClassName:v,lib:m,connectionInProgress:x}){return y=>{var E;const S=r||o,_=l&&y.ctrlKey,C=y.type==="wheel";if(y.button===1&&y.type==="mousedown"&&(Kn(y,`${m}-flow__node`)||Kn(y,`${m}-flow__edge`)||Kn(y,`${m}-flow__selection`)||Kn(y,`${m}-flow__nodesselection`)))return!0;if(!a&&!S&&!u&&!d&&!l||f||x&&!C||Kn(y,p)&&C||Kn(y,v)&&(!C||u&&C&&!r)||!l&&y.ctrlKey&&C)return!1;if(!l&&y.type==="touchstart"&&((E=y.touches)==null?void 0:E.length)>1)return y.preventDefault(),!1;if(!S&&!u&&!_&&C||!a&&(y.type==="mousedown"||y.type==="touchstart")||Array.isArray(a)&&!a.includes(y.button)&&y.type==="mousedown")return!1;const k=Array.isArray(a)&&a.includes(y.button)||!y.button||y.button<=1;return(!y.ctrlKey||C||t)&&k}}function I1({domNode:t,minZoom:r,maxZoom:o,translateExtent:l,viewport:a,onPanZoom:u,onPanZoomStart:d,onPanZoomEnd:f,onDraggingChange:p}){const v={isZoomingOrPanning:!1,usedRightMouseButton:!1,prevViewport:{},mouseButton:0,timerId:void 0,panScrollTimeout:void 0,isPanScrolling:!1},m=t.getBoundingClientRect();let x=[[0,0],[m.width,m.height]];const y=typeof ResizeObserver<"u"?new ResizeObserver(J=>{const j=J[0];j&&(x=[[0,0],[j.contentRect.width,j.contentRect.height]])}):null;y==null||y.observe(t);const S=Fp().extent(()=>x).scaleExtent([r,o]).translateExtent(l),_=zt(t).call(S);P({x:a.x,y:a.y,zoom:ai(a.zoom,r,o)},[[0,0],[m.width,m.height]],l);const C=_.on("wheel.zoom"),k=_.on("dblclick.zoom");S.wheelDelta(gg);async function E(J,j){return _?new Promise(W=>{S==null||S.interpolate((j==null?void 0:j.interpolate)==="linear"?oo:Js).transform(ju(_,j==null?void 0:j.duration,j==null?void 0:j.ease,()=>W(!0)),J)}):!1}function T({noWheelClassName:J,noPanClassName:j,onPaneContextMenu:W,userSelectionActive:V,panOnScroll:B,panOnDrag:A,panOnScrollMode:L,panOnScrollSpeed:b,preventScrolling:M,zoomOnPinch:z,zoomOnScroll:re,zoomOnDoubleClick:ne,panActivationKeyPressed:ae=!1,zoomActivationKeyPressed:de,lib:ce,onTransformChange:G,connectionInProgress:se,paneClickDistance:he,selectionOnDrag:we}){V&&!v.isZoomingOrPanning&&N();const ve=B&&!de&&!V;S.clickDistance(we?1/0:!Zt(he)||he<0?0:he);const me=ve?E1({zoomPanValues:v,noWheelClassName:J,d3Selection:_,d3Zoom:S,panOnScrollMode:L,panOnScrollSpeed:b,zoomOnPinch:z,onPanZoomStart:d,onPanZoom:u,onPanZoomEnd:f}):N1({noWheelClassName:J,preventScrolling:M,d3ZoomHandler:C});_.on("wheel.zoom",me,{passive:!1});const Ce=C1({zoomPanValues:v,onDraggingChange:p,onPanZoomStart:d});S.on("start",Ce);const Me=j1({zoomPanValues:v,panOnDrag:A,onPaneContextMenu:!!W,onPanZoom:u,onTransformChange:G});S.on("zoom",Me);const Pe=M1({zoomPanValues:v,panOnDrag:A,panOnScroll:B,onPaneContextMenu:W,onPanZoomEnd:f,onDraggingChange:p});S.on("end",Pe);const Re=P1({panActivationKeyPressed:ae,zoomActivationKeyPressed:de,panOnDrag:A,zoomOnScroll:re,panOnScroll:B,zoomOnDoubleClick:ne,zoomOnPinch:z,userSelectionActive:V,noPanClassName:j,noWheelClassName:J,lib:ce,connectionInProgress:se});S.filter(Re),ne?_.on("dblclick.zoom",k):_.on("dblclick.zoom",null)}function N(){S.on("zoom",null)}async function P(J,j,W){const V=Cu(J),B=S==null?void 0:S.constrain()(V,j,W);return B&&await E(B),B}async function O(J,j){const W=Cu(J);return await E(W,j),W}function D(J){if(_){const j=Cu(J),W=_.property("__zoom");(W.k!==J.zoom||W.x!==J.x||W.y!==J.y)&&(S==null||S.transform(_,j,null,{sync:!0}))}}function H(){const J=_?Op(_.node()):{x:0,y:0,k:1};return{x:J.x,y:J.y,zoom:J.k}}async function F(J,j){return _?new Promise(W=>{S==null||S.interpolate((j==null?void 0:j.interpolate)==="linear"?oo:Js).scaleTo(ju(_,j==null?void 0:j.duration,j==null?void 0:j.ease,()=>W(!0)),J)}):!1}async function X(J,j){return _?new Promise(W=>{S==null||S.interpolate((j==null?void 0:j.interpolate)==="linear"?oo:Js).scaleBy(ju(_,j==null?void 0:j.duration,j==null?void 0:j.ease,()=>W(!0)),J)}):!1}function ee(J){S==null||S.scaleExtent(J)}function q(J){S==null||S.translateExtent(J)}function te(J){const j=!Zt(J)||J<0?0:J;S==null||S.clickDistance(j)}return{update:T,destroy:N,setViewport:O,setViewportConstrained:P,getViewport:H,scaleTo:F,scaleBy:X,setScaleExtent:ee,setTranslateExtent:q,syncViewport:D,setClickDistance:te}}var ci;(function(t){t.Line="line",t.Handle="handle"})(ci||(ci={}));function T1({width:t,prevWidth:r,height:o,prevHeight:l,affectsX:a,affectsY:u}){const d=t-r,f=o-l,p=[d>0?1:d<0?-1:0,f>0?1:f<0?-1:0];return d&&a&&(p[0]=p[0]*-1),f&&u&&(p[1]=p[1]*-1),p}function Nh(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 Qn(t,r){return Math.max(0,r-t)}function Gn(t,r){return Math.max(0,t-r)}function Gs(t,r,o){return Math.max(0,r-t,t-o)}function Ch(t,r){return t?!r:r}function z1(t,r,o,l,a,u,d,f){let{affectsX:p,affectsY:v}=r;const{isHorizontal:m,isVertical:x}=r,y=m&&x,{xSnapped:S,ySnapped:_}=o,{minWidth:C,maxWidth:k,minHeight:E,maxHeight:T}=l,{x:N,y:P,width:O,height:D,aspectRatio:H}=t;let F=Math.floor(m?S-t.pointerX:0),X=Math.floor(x?_-t.pointerY:0);const ee=O+(p?-F:F),q=D+(v?-X:X),te=-u[0]*O,J=-u[1]*D;let j=Gs(ee,C,k),W=Gs(q,E,T);if(d){let A=0,L=0;p&&F<0?A=Qn(N+F+te,d[0][0]):!p&&F>0&&(A=Gn(N+ee+te,d[1][0])),v&&X<0?L=Qn(P+X+J,d[0][1]):!v&&X>0&&(L=Gn(P+q+J,d[1][1])),j=Math.max(j,A),W=Math.max(W,L)}if(f){let A=0,L=0;p&&F>0?A=Gn(N+F,f[0][0]):!p&&F<0&&(A=Qn(N+ee,f[1][0])),v&&X>0?L=Gn(P+X,f[0][1]):!v&&X<0&&(L=Qn(P+q,f[1][1])),j=Math.max(j,A),W=Math.max(W,L)}if(a){if(m){const A=Gs(ee/H,E,T)*H;if(j=Math.max(j,A),d){let L=0;!p&&!v||p&&!v&&y?L=Gn(P+J+ee/H,d[1][1])*H:L=Qn(P+J+(p?F:-F)/H,d[0][1])*H,j=Math.max(j,L)}if(f){let L=0;!p&&!v||p&&!v&&y?L=Qn(P+ee/H,f[1][1])*H:L=Gn(P+(p?F:-F)/H,f[0][1])*H,j=Math.max(j,L)}}if(x){const A=Gs(q*H,C,k)/H;if(W=Math.max(W,A),d){let L=0;!p&&!v||v&&!p&&y?L=Gn(N+q*H+te,d[1][0])/H:L=Qn(N+(v?X:-X)*H+te,d[0][0])/H,W=Math.max(W,L)}if(f){let L=0;!p&&!v||v&&!p&&y?L=Qn(N+q*H,f[1][0])/H:L=Gn(N+(v?X:-X)*H,f[0][0])/H,W=Math.max(W,L)}}}X=X+(X<0?W:-W),F=F+(F<0?j:-j),a&&(y?ee>q*H?X=(Ch(p,v)?-F:F)/H:F=(Ch(p,v)?-X:X)*H:m?(X=F/H,v=p):(F=X*H,p=v));const V=p?N+F:N,B=v?P+X:P;return{width:O+(p?-F:F),height:D+(v?-X:X),x:u[0]*F*(p?-1:1)+V,y:u[1]*X*(v?-1:1)+B}}const mg={width:0,height:0,x:0,y:0},R1={...mg,pointerX:0,pointerY:0,aspectRatio:1};function L1(t,r,o){const l=r.position.x+t.position.x,a=r.position.y+t.position.y,u=t.measured.width??0,d=t.measured.height??0,f=o[0]*u,p=o[1]*d;return[[l-f,a-p],[l+u-f,a+d-p]]}function A1({domNode:t,nodeId:r,getStoreItems:o,onChange:l,onEnd:a}){const u=zt(t);let d={controlDirection:Nh("bottom-right"),boundaries:{minWidth:0,minHeight:0,maxWidth:Number.MAX_VALUE,maxHeight:Number.MAX_VALUE},resizeDirection:void 0,keepAspectRatio:!1};function f({controlPosition:v,boundaries:m,keepAspectRatio:x,resizeDirection:y,onResizeStart:S,onResize:_,onResizeEnd:C,shouldResize:k}){let E={...mg},T={...R1};d={boundaries:m,resizeDirection:y,keepAspectRatio:x,controlDirection:Nh(v)};let N,P=null,O=[],D,H,F,X=!1;const ee=Np().on("start",q=>{const{nodeLookup:te,transform:J,snapGrid:j,snapToGrid:W,nodeOrigin:V,paneDomNode:B}=o();if(N=te.get(r),!N)return;P=(B==null?void 0:B.getBoundingClientRect())??null;const{xSnapped:A,ySnapped:L}=so(q.sourceEvent,{transform:J,snapGrid:j,snapToGrid:W,containerBounds:P});E={width:N.measured.width??0,height:N.measured.height??0,x:N.position.x??0,y:N.position.y??0},T={...E,pointerX:A,pointerY:L,aspectRatio:E.width/E.height},D=void 0,H=Er(N.extent)?N.extent:void 0,N.parentId&&(N.extent==="parent"||N.expandParent)&&(D=te.get(N.parentId)),D&&N.extent==="parent"&&(H=[[0,0],[D.measured.width,D.measured.height]]),O=[],F=void 0;for(const[b,M]of te)if(M.parentId===r&&(O.push({id:b,position:{...M.position},extent:M.extent}),M.extent==="parent"||M.expandParent)){const z=L1(M,N,M.origin??V);F?F=[[Math.min(z[0][0],F[0][0]),Math.min(z[0][1],F[0][1])],[Math.max(z[1][0],F[1][0]),Math.max(z[1][1],F[1][1])]]:F=z}S==null||S(q,{...E})}).on("drag",q=>{const{transform:te,snapGrid:J,snapToGrid:j,nodeOrigin:W}=o(),V=so(q.sourceEvent,{transform:te,snapGrid:J,snapToGrid:j,containerBounds:P}),B=[];if(!N)return;const{x:A,y:L,width:b,height:M}=E,z={},re=N.origin??W,{width:ne,height:ae,x:de,y:ce}=z1(T,d.controlDirection,V,d.boundaries,d.keepAspectRatio,re,H,F),G=ne!==b,se=ae!==M,he=de!==A&&G,we=ce!==L&&se;if(!he&&!we&&!G&&!se)return;if((he||we||re[0]===1||re[1]===1)&&(z.x=he?de:E.x,z.y=we?ce:E.y,E.x=z.x,E.y=z.y,O.length>0)){const Me=de-A,Pe=ce-L;for(const Re of O)Re.position={x:Re.position.x-Me+re[0]*(ne-b),y:Re.position.y-Pe+re[1]*(ae-M)},B.push(Re)}if((G||se)&&(z.width=G&&(!d.resizeDirection||d.resizeDirection==="horizontal")?ne:E.width,z.height=se&&(!d.resizeDirection||d.resizeDirection==="vertical")?ae:E.height,E.width=z.width,E.height=z.height),D&&N.expandParent){const Me=re[0]*(z.width??0);z.x&&z.x{X&&(C==null||C(q,{...E}),a==null||a({...E}),X=!1)});u.call(ee)}function p(){u.on(".drag",null)}return{update:f,destroy:p}}var Mu={exports:{}},Pu={},Iu={exports:{}},Tu={};/** - * @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 jh;function D1(){if(jh)return Tu;jh=1;var t=vo();function r(x,y){return x===y&&(x!==0||1/x===1/y)||x!==x&&y!==y}var o=typeof Object.is=="function"?Object.is:r,l=t.useState,a=t.useEffect,u=t.useLayoutEffect,d=t.useDebugValue;function f(x,y){var S=y(),_=l({inst:{value:S,getSnapshot:y}}),C=_[0].inst,k=_[1];return u(function(){C.value=S,C.getSnapshot=y,p(C)&&k({inst:C})},[x,S,y]),a(function(){return p(C)&&k({inst:C}),x(function(){p(C)&&k({inst:C})})},[x]),d(S),S}function p(x){var y=x.getSnapshot;x=x.value;try{var S=y();return!o(x,S)}catch{return!0}}function v(x,y){return y()}var m=typeof window>"u"||typeof window.document>"u"||typeof window.document.createElement>"u"?v:f;return Tu.useSyncExternalStore=t.useSyncExternalStore!==void 0?t.useSyncExternalStore:m,Tu}var Mh;function $1(){return Mh||(Mh=1,Iu.exports=D1()),Iu.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 Ph;function b1(){if(Ph)return Pu;Ph=1;var t=vo(),r=$1();function o(v,m){return v===m&&(v!==0||1/v===1/m)||v!==v&&m!==m}var l=typeof Object.is=="function"?Object.is:o,a=r.useSyncExternalStore,u=t.useRef,d=t.useEffect,f=t.useMemo,p=t.useDebugValue;return Pu.useSyncExternalStoreWithSelector=function(v,m,x,y,S){var _=u(null);if(_.current===null){var C={hasValue:!1,value:null};_.current=C}else C=_.current;_=f(function(){function E(D){if(!T){if(T=!0,N=D,D=y(D),S!==void 0&&C.hasValue){var H=C.value;if(S(H,D))return P=H}return P=D}if(H=P,l(N,D))return H;var F=y(D);return S!==void 0&&S(H,F)?(N=D,H):(N=D,P=F)}var T=!1,N,P,O=x===void 0?null:x;return[function(){return E(m())},O===null?void 0:function(){return E(O())}]},[m,x,y,S]);var k=a(v,_[0],_[1]);return d(function(){C.hasValue=!0,C.value=k},[k]),p(k),k},Pu}var Ih;function O1(){return Ih||(Ih=1,Mu.exports=b1()),Mu.exports}var F1=O1();const H1=up(F1),V1={},Th=t=>{let r;const o=new Set,l=(m,x)=>{const y=typeof m=="function"?m(r):m;if(!Object.is(y,r)){const S=r;r=x??(typeof y!="object"||y===null)?y:Object.assign({},r,y),o.forEach(_=>_(r,S))}},a=()=>r,p={setState:l,getState:a,getInitialState:()=>v,subscribe:m=>(o.add(m),()=>o.delete(m)),destroy:()=>{(V1?"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()}},v=r=t(l,a,p);return p},B1=t=>t?Th(t):Th,{useDebugValue:W1}=H0,{useSyncExternalStoreWithSelector:U1}=H1,Y1=t=>t;function yg(t,r=Y1,o){const l=U1(t.subscribe,t.getState,t.getServerState||t.getInitialState,r,o);return W1(l),l}const zh=(t,r)=>{const o=B1(t),l=(a,u=r)=>yg(o,a,u);return Object.assign(l,o),l},X1=(t,r)=>t?zh(t,r):zh;function We(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}cp();const _l=U.createContext(null),Q1=_l.Provider,vg=en.error001("react");function Te(t,r){const o=U.useContext(_l);if(o===null)throw new Error(vg);return yg(o,t,r)}function Oe(){const t=U.useContext(_l);if(t===null)throw new Error(vg);return U.useMemo(()=>({getState:t.getState,setState:t.setState,subscribe:t.subscribe}),[t])}const Rh={display:"none"},G1={position:"absolute",width:1,height:1,margin:-1,border:0,padding:0,overflow:"hidden",clip:"rect(0px, 0px, 0px, 0px)",clipPath:"inset(100%)"},xg="react-flow__node-desc",wg="react-flow__edge-desc",K1="react-flow__aria-live",q1=t=>t.ariaLiveMessage,Z1=t=>t.ariaLabelConfig;function J1({rfId:t}){const r=Te(q1);return g.jsx("div",{id:`${K1}-${t}`,"aria-live":"assertive","aria-atomic":"true",style:G1,children:r})}function eS({rfId:t,disableKeyboardA11y:r}){const o=Te(Z1);return g.jsxs(g.Fragment,{children:[g.jsx("div",{id:`${xg}-${t}`,style:Rh,children:r?o["node.a11yDescription.default"]:o["node.a11yDescription.keyboardDisabled"]}),g.jsx("div",{id:`${wg}-${t}`,style:Rh,children:o["edge.a11yDescription.default"]}),!r&&g.jsx(J1,{rfId:t})]})}const kl=U.forwardRef(({position:t="top-left",children:r,className:o,style:l,...a},u)=>{const d=`${t}`.split("-");return g.jsx("div",{className:Ge(["react-flow__panel",o,...d]),style:l,ref:u,...a,children:r})});kl.displayName="Panel";const Lh="https://reactflow.dev?utm_source=attribution";function tS({proOptions:t,position:r="bottom-right"}){return t!=null&&t.hideAttribution?null:g.jsx(kl,{position:r,className:"react-flow__attribution","data-message":`Please only hide this attribution when you are subscribed to React Flow Pro: ${Lh}`,children:g.jsx("a",{href:Lh,target:"_blank",rel:"noopener noreferrer","aria-label":"React Flow attribution",children:"React Flow"})})}const nS=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}},Ks=t=>t.id;function rS(t,r){return We(t.selectedNodes.map(Ks),r.selectedNodes.map(Ks))&&We(t.selectedEdges.map(Ks),r.selectedEdges.map(Ks))}function iS({onSelectionChange:t}){const r=Oe(),{selectedNodes:o,selectedEdges:l}=Te(nS,rS);return U.useEffect(()=>{const a={nodes:o,edges:l};t==null||t(a),r.getState().onSelectionChangeHandlers.forEach(u=>u(a))},[o,l,t]),null}const oS=t=>!!t.onSelectionChangeHandlers;function sS({onSelectionChange:t}){const r=Te(oS);return t||r?g.jsx(iS,{onSelectionChange:t}):null}const Sg=[0,0],lS={x:0,y:0,zoom:1},aS=["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"],Ah=[...aS,"rfId"],uS=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}),Dh={translateExtent:fo,nodeOrigin:Sg,minZoom:.5,maxZoom:2,elementsSelectable:!0,noPanClassName:"nopan",rfId:"1"};function cS(t){const{setNodes:r,setEdges:o,setMinZoom:l,setMaxZoom:a,setTranslateExtent:u,setNodeExtent:d,reset:f,setDefaultNodesAndEdges:p}=Te(uS,We),v=Oe();U.useEffect(()=>(p(t.defaultNodes,t.defaultEdges),()=>{m.current=Dh,f()}),[]);const m=U.useRef(Dh);return U.useEffect(()=>{for(const x of Ah){const y=t[x],S=m.current[x];y!==S&&(typeof t[x]>"u"||(x==="nodes"?r(y):x==="edges"?o(y):x==="minZoom"?l(y):x==="maxZoom"?a(y):x==="translateExtent"?u(y):x==="nodeExtent"?d(y):x==="ariaLabelConfig"?v.setState({ariaLabelConfig:Qw(y)}):x==="fitView"?v.setState({fitViewQueued:y}):x==="fitViewOptions"?v.setState({fitViewOptions:y}):v.setState({[x]:y})))}m.current=t},Ah.map(x=>t[x])),null}function $h(){return typeof window>"u"||!window.matchMedia?null:window.matchMedia("(prefers-color-scheme: dark)")}function dS(t){var l;const[r,o]=U.useState(t==="system"?null:t);return U.useEffect(()=>{if(t!=="system"){o(t);return}const a=$h(),u=()=>o(a!=null&&a.matches?"dark":"light");return u(),a==null||a.addEventListener("change",u),()=>{a==null||a.removeEventListener("change",u)}},[t]),r!==null?r:(l=$h())!=null&&l.matches?"dark":"light"}const bh=typeof document<"u"?document:null;function yo(t=null,r={target:bh,actInsideInputWithModifier:!0}){const[o,l]=U.useState(!1),a=U.useRef(!1),u=U.useRef(new Set([])),[d,f]=U.useMemo(()=>{if(t!==null){const v=(Array.isArray(t)?t:[t]).filter(x=>typeof x=="string").map(x=>x.replace(/\+/g,` -`).replace(` - -`,` -+`).split(` -`)),m=v.reduce((x,y)=>x.concat(...y),[]);return[v,m]}return[[],[]]},[t]);return U.useEffect(()=>{const p=(r==null?void 0:r.target)??bh,v=(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&&!v)&&eg(S))return!1;const C=Fh(S.code,f);if(u.current.add(S[C]),Oh(d,u.current,!1)){const T=((E=(k=S.composedPath)==null?void 0:k.call(S))==null?void 0:E[0])||S.target,N=(T==null?void 0:T.nodeName)==="BUTTON"||(T==null?void 0:T.nodeName)==="A";r.preventDefault!==!1&&(a.current||!N)&&S.preventDefault(),l(!0)}},x=S=>{const _=Fh(S.code,f);Oh(d,u.current,!0)?(l(!1),u.current.clear()):u.current.delete(S[_]),S.key==="Meta"&&u.current.clear(),a.current=!1},y=()=>{u.current.clear(),l(!1)};return p==null||p.addEventListener("keydown",m),p==null||p.addEventListener("keyup",x),window.addEventListener("blur",y),window.addEventListener("contextmenu",y),()=>{p==null||p.removeEventListener("keydown",m),p==null||p.removeEventListener("keyup",x),window.removeEventListener("blur",y),window.removeEventListener("contextmenu",y)}}},[t,l]),o}function Oh(t,r,o){return t.filter(l=>o||l.length===r.size).some(l=>l.every(a=>r.has(a)))}function Fh(t,r){return r.includes(t)?"code":"key"}const fS=()=>{const t=Oe();return U.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,u],panZoom:d}=t.getState();return d?(await d.setViewport({x:r.x??l,y:r.y??a,zoom:r.zoom??u},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:u,maxZoom:d,panZoom:f}=t.getState(),p=sc(r,l,a,u,d,(o==null?void 0:o.padding)??.1);return f?(await f.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:u,domNode:d}=t.getState();if(!d)return r;const{x:f,y:p}=d.getBoundingClientRect(),v={x:r.x-f,y:r.y-p},m=o.snapGrid??a,x=o.snapToGrid??u;return No(v,l,x,m)},flowToScreenPosition:r=>{const{transform:o,domNode:l}=t.getState();if(!l)return r;const{x:a,y:u}=l.getBoundingClientRect(),d=ui(r,o);return{x:d.x+a,y:d.y+u}}}),[])};function _g(t,r){const o=[],l=new Map,a=[];for(const u of t)if(u.type==="add"){a.push(u);continue}else if(u.type==="remove"||u.type==="replace")l.set(u.id,[u]);else{const d=l.get(u.id);d?d.push(u):l.set(u.id,[u])}for(const u of r){const d=l.get(u.id);if(!d){o.push(u);continue}if(d[0].type==="remove")continue;if(d[0].type==="replace"){o.push({...d[0].item});continue}const f={...u};for(const p of d)hS(p,f);o.push(f)}return a.length&&a.forEach(u=>{u.index!==void 0?o.splice(u.index,0,{...u.item}):o.push({...u.item})}),o}function hS(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 pS(t,r){return _g(t,r)}function gS(t,r){return _g(t,r)}function yr(t,r){return{id:t,type:"select",selected:r}}function ni(t,r=new Set,o=!1){const l=[];for(const[a,u]of t){const d=r.has(a);!(u.selected===void 0&&!d)&&u.selected!==d&&(o&&(u.selected=d),l.push(yr(u.id,d)))}return l}function Hh({items:t=[],lookup:r}){var a;const o=[],l=new Map(t.map(u=>[u.id,u]));for(const[u,d]of t.entries()){const f=r.get(d.id),p=((a=f==null?void 0:f.internals)==null?void 0:a.userNode)??f;p!==void 0&&p!==d&&o.push({id:d.id,item:d,type:"replace"}),p===void 0&&o.push({item:d,type:"add",index:u})}for(const[u]of r)l.get(u)===void 0&&o.push({id:u,type:"remove"});return o}function Vh(t){return{id:t.id,type:"remove"}}const mS=Kp();function yS(t,r,o={}){return e1(t,r,{...o,onError:o.onError??mS})}const Bh=t=>Ow(t),vS=t=>Up(t);function kg(t){return U.forwardRef(t)}const Eg=typeof window<"u"?U.useLayoutEffect:U.useEffect;function Wh(t){const[r,o]=U.useState(BigInt(0)),[l]=U.useState(()=>xS(()=>o(a=>a+BigInt(1))));return Eg(()=>{const a=l.get();a.length&&(t(a),l.reset())},[r]),l}function xS(t){let r=[];return{get:()=>r,reset:()=>{r=[]},push:o=>{r.push(o),t()}}}const Ng=U.createContext(null);function wS({children:t}){const r=Oe(),o=U.useCallback(f=>{const{nodes:p=[],setNodes:v,hasDefaultNodes:m,onNodesChange:x,nodeLookup:y,fitViewQueued:S,onNodesChangeMiddlewareMap:_}=r.getState();let C=p;for(const E of f)C=typeof E=="function"?E(C):E;let k=Hh({items:C,lookup:y});for(const E of _.values())k=E(k);m&&v(C),k.length>0?x==null||x(k):S&&window.requestAnimationFrame(()=>{const{fitViewQueued:E,nodes:T,setNodes:N}=r.getState();E&&N(T)})},[]),l=Wh(o),a=U.useCallback(f=>{const{edges:p=[],setEdges:v,hasDefaultEdges:m,onEdgesChange:x,edgeLookup:y}=r.getState();let S=p;for(const _ of f)S=typeof _=="function"?_(S):_;m?v(S):x&&x(Hh({items:S,lookup:y}))},[]),u=Wh(a),d=U.useMemo(()=>({nodeQueue:l,edgeQueue:u}),[]);return g.jsx(Ng.Provider,{value:d,children:t})}function SS(){const t=U.useContext(Ng);if(!t)throw new Error("useBatchContext must be used within a BatchProvider");return t}const _S=t=>!!t.panZoom;function hc(){const t=fS(),r=Oe(),o=SS(),l=Te(_S),a=U.useMemo(()=>{const u=x=>r.getState().nodeLookup.get(x),d=x=>{o.nodeQueue.push(x)},f=x=>{o.edgeQueue.push(x)},p=x=>{var E,T;const{nodeLookup:y,nodeOrigin:S}=r.getState(),_=Bh(x)?x:y.get(x.id),C=_.parentId?Zp(_.position,_.measured,_.parentId,y,S):_.position,k={..._,position:C,width:((E=_.measured)==null?void 0:E.width)??_.width,height:((T=_.measured)==null?void 0:T.height)??_.height};return go(k)},v=(x,y,S={replace:!1})=>{d(_=>_.map(C=>{if(C.id===x){const k=typeof y=="function"?y(C):y;return S.replace&&Bh(k)?k:{...C,...k}}return C}))},m=(x,y,S={replace:!1})=>{f(_=>_.map(C=>{if(C.id===x){const k=typeof y=="function"?y(C):y;return S.replace&&vS(k)?k:{...C,...k}}return C}))};return{getNodes:()=>r.getState().nodes.map(x=>({...x})),getNode:x=>{var y;return(y=u(x))==null?void 0:y.internals.userNode},getInternalNode:u,getEdges:()=>{const{edges:x=[]}=r.getState();return x.map(y=>({...y}))},getEdge:x=>r.getState().edgeLookup.get(x),setNodes:d,setEdges:f,addNodes:x=>{const y=Array.isArray(x)?x:[x];o.nodeQueue.push(S=>[...S,...y])},addEdges:x=>{const y=Array.isArray(x)?x:[x];o.edgeQueue.push(S=>[...S,...y])},toObject:()=>{const{nodes:x=[],edges:y=[],transform:S}=r.getState(),[_,C,k]=S;return{nodes:x.map(E=>({...E})),edges:y.map(E=>({...E})),viewport:{x:_,y:C,zoom:k}}},deleteElements:async({nodes:x=[],edges:y=[]})=>{const{nodes:S,edges:_,onNodesDelete:C,onEdgesDelete:k,triggerNodeChanges:E,triggerEdgeChanges:T,onDelete:N,onBeforeDelete:P}=r.getState(),{nodes:O,edges:D}=await Ww({nodesToRemove:x,edgesToRemove:y,nodes:S,edges:_,onBeforeDelete:P}),H=D.length>0,F=O.length>0;if(H){const X=D.map(Vh);k==null||k(D),T(X)}if(F){const X=O.map(Vh);C==null||C(O),E(X)}return(F||H)&&(N==null||N({nodes:O,edges:D})),{deletedNodes:O,deletedEdges:D}},getIntersectingNodes:(x,y=!0,S)=>{const _=ph(x),C=_?x:p(x),k=S!==void 0;return C?(S||r.getState().nodes).filter(E=>{const T=r.getState().nodeLookup.get(E.id);if(T&&!_&&(E.id===x.id||!T.internals.positionAbsolute))return!1;const N=go(k?E:T),P=dl(N,C);return y&&P>0||P>=N.width*N.height||P>=C.width*C.height}):[]},isNodeIntersecting:(x,y,S=!0)=>{const C=ph(x)?x:p(x);if(!C)return!1;const k=dl(C,y);return S&&k>0||k>=y.width*y.height||k>=C.width*C.height},updateNode:v,updateNodeData:(x,y,S={replace:!1})=>{v(x,_=>{const C=typeof y=="function"?y(_):y;return S.replace?{..._,data:C}:{..._,data:{..._.data,...C}}},S)},updateEdge:m,updateEdgeData:(x,y,S={replace:!1})=>{m(x,_=>{const C=typeof y=="function"?y(_):y;return S.replace?{..._,data:C}:{..._,data:{..._.data,...C}}},S)},getNodesBounds:x=>{const{nodeLookup:y,nodeOrigin:S}=r.getState();return Fw(x,{nodeLookup:y,nodeOrigin:S})},getHandleConnections:({type:x,id:y,nodeId:S})=>{var _;return Array.from(((_=r.getState().connectionLookup.get(`${S}-${x}${y?`-${y}`:""}`))==null?void 0:_.values())??[])},getNodeConnections:({type:x,handleId:y,nodeId:S})=>{var _;return Array.from(((_=r.getState().connectionLookup.get(`${S}${x?y?`-${x}-${y}`:`-${x}`:""}`))==null?void 0:_.values())??[])},fitView:async x=>{const y=r.getState().fitViewResolver??Xw();return r.setState({fitViewQueued:!0,fitViewOptions:x,fitViewResolver:y}),o.nodeQueue.push(S=>[...S]),y.promise}}},[]);return U.useMemo(()=>({...a,...t,viewportInitialized:l}),[l])}const Uh=t=>t.selected,kS=typeof window<"u"?window:void 0;function ES({deleteKeyCode:t,multiSelectionKeyCode:r}){const o=Oe(),{deleteElements:l}=hc(),a=yo(t,{actInsideInputWithModifier:!1}),u=yo(r,{target:kS});U.useEffect(()=>{if(a){const{edges:d,nodes:f}=o.getState();l({nodes:f.filter(Uh),edges:d.filter(Uh)}),o.setState({nodesSelectionActive:!1})}},[a]),U.useEffect(()=>{o.setState({multiSelectionActive:u})},[u])}function NS(t){const r=Oe();U.useEffect(()=>{const o=()=>{var a,u,d,f;if(!t.current||!(((u=(a=t.current).checkVisibility)==null?void 0:u.call(a))??!0))return!1;const l=lc(t.current);(l.height===0||l.width===0)&&((f=(d=r.getState()).onError)==null||f.call(d,"004",en.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 El={position:"absolute",width:"100%",height:"100%",top:0,left:0},CS=t=>({userSelectionActive:t.userSelectionActive,lib:t.lib,connectionInProgress:t.connection.inProgress});function jS({onPaneContextMenu:t,zoomOnScroll:r=!0,zoomOnPinch:o=!0,panOnScroll:l=!1,panActivationKeyPressed:a,panOnScrollSpeed:u=.5,panOnScrollMode:d=wr.Free,zoomOnDoubleClick:f=!0,panOnDrag:p=!0,defaultViewport:v,translateExtent:m,minZoom:x,maxZoom:y,zoomActivationKeyCode:S,preventScrolling:_=!0,children:C,noWheelClassName:k,noPanClassName:E,onViewportChange:T,isControlledViewport:N,paneClickDistance:P,selectionOnDrag:O}){const D=Oe(),H=U.useRef(null),{userSelectionActive:F,lib:X,connectionInProgress:ee}=Te(CS,We),q=yo(S),te=U.useRef();NS(H);const J=U.useCallback(j=>{T==null||T({x:j[0],y:j[1],zoom:j[2]}),N||D.setState({transform:j})},[T,N]);return U.useEffect(()=>{if(H.current){te.current=I1({domNode:H.current,minZoom:x,maxZoom:y,translateExtent:m,viewport:v,onDraggingChange:B=>D.setState(A=>A.paneDragging===B?A:{paneDragging:B}),onPanZoomStart:(B,A)=>{const{onViewportChangeStart:L,onMoveStart:b}=D.getState();b==null||b(B,A),L==null||L(A)},onPanZoom:(B,A)=>{const{onViewportChange:L,onMove:b}=D.getState();b==null||b(B,A),L==null||L(A)},onPanZoomEnd:(B,A)=>{const{onViewportChangeEnd:L,onMoveEnd:b}=D.getState();b==null||b(B,A),L==null||L(A)}});const{x:j,y:W,zoom:V}=te.current.getViewport();return D.setState({panZoom:te.current,transform:[j,W,V],domNode:H.current.closest(".react-flow")}),()=>{var B;(B=te.current)==null||B.destroy()}}},[]),U.useEffect(()=>{var j;(j=te.current)==null||j.update({onPaneContextMenu:t,zoomOnScroll:r,zoomOnPinch:o,panOnScroll:l,panActivationKeyPressed:a,panOnScrollSpeed:u,panOnScrollMode:d,zoomOnDoubleClick:f,panOnDrag:p,zoomActivationKeyPressed:q,preventScrolling:_,noPanClassName:E,userSelectionActive:F,noWheelClassName:k,lib:X,onTransformChange:J,connectionInProgress:ee,selectionOnDrag:O,paneClickDistance:P})},[t,r,o,l,a,u,d,f,p,q,_,E,F,k,X,J,ee,O,P]),g.jsx("div",{className:"react-flow__renderer",ref:H,style:El,children:C})}const MS=t=>({userSelectionActive:t.userSelectionActive,userSelectionRect:t.userSelectionRect});function PS(){const{userSelectionActive:t,userSelectionRect:r}=Te(MS,We);return t&&r?g.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 zu=(t,r)=>o=>{o.target===r.current&&(t==null||t(o))},IS=t=>({userSelectionActive:t.userSelectionActive,elementsSelectable:t.elementsSelectable,dragging:t.paneDragging,panBy:t.panBy,autoPanSpeed:t.autoPanSpeed});function TS({isSelecting:t,selectionKeyPressed:r,selectionMode:o=ho.Full,panOnDrag:l,autoPanOnSelection:a,paneClickDistance:u,selectionOnDrag:d,onSelectionStart:f,onSelectionEnd:p,onPaneClick:v,onPaneContextMenu:m,onPaneScroll:x,onPaneMouseEnter:y,onPaneMouseMove:S,onPaneMouseLeave:_,children:C}){const k=U.useRef(0),E=Oe(),{userSelectionActive:T,elementsSelectable:N,dragging:P,panBy:O,autoPanSpeed:D}=Te(IS,We),H=N&&(t||T),F=U.useRef(null),X=U.useRef(),ee=U.useRef(new Set),q=U.useRef(new Set),te=U.useRef(!1),J=U.useRef(!1),j=U.useRef({x:0,y:0}),W=U.useRef(!1),V=G=>{if(J.current||te.current||E.getState().connection.inProgress){J.current=!1,te.current=!1;return}v==null||v(G),E.getState().resetSelectedElements(),E.setState({nodesSelectionActive:!1})},B=G=>{if(Array.isArray(l)&&(l!=null&&l.includes(2))){G.preventDefault();return}m==null||m(G)},A=x?G=>x(G):void 0,L=G=>{J.current&&(G.stopPropagation(),J.current=!1)},b=G=>{var Re,nt;if(G.pointerType==="touch"&&l!==!1&&!r)return;const{domNode:se,transform:he}=E.getState();if(X.current=se==null?void 0:se.getBoundingClientRect(),!X.current)return;const we=G.target===F.current;if(!we&&!!G.target.closest(".nokey")||!t||!(d&&we||r)||G.button!==0||!G.isPrimary)return;(nt=(Re=G.target)==null?void 0:Re.setPointerCapture)==null||nt.call(Re,G.pointerId),J.current=!1;const{x:Ce,y:Me}=Jt(G.nativeEvent,X.current),Pe=No({x:Ce,y:Me},he);E.setState({userSelectionRect:{width:0,height:0,startX:Pe.x,startY:Pe.y,x:Ce,y:Me}}),we||(G.stopPropagation(),G.preventDefault())};function M(G,se){const{userSelectionRect:he}=E.getState();if(!he)return;const{transform:we,nodeLookup:ve,edgeLookup:me,connectionLookup:Ce,triggerNodeChanges:Me,triggerEdgeChanges:Pe,defaultEdgeOptions:Re}=E.getState(),nt={x:he.startX,y:he.startY},{x:rt,y:Xe}=ui(nt,we),Ke={startX:nt.x,startY:nt.y,x:Git.id)),q.current=new Set;const At=(Re==null?void 0:Re.selectable)??!0;for(const it of ee.current){const ft=Ce.get(it);if(ft)for(const{edgeId:lt}of ft.values()){const ht=me.get(lt);ht&&(ht.selectable??At)&&q.current.add(lt)}}if(!gh(Bt,ee.current)){const it=ni(ve,ee.current,!0);Me(it)}if(!gh(Lt,q.current)){const it=ni(me,q.current);Pe(it)}E.setState({userSelectionRect:Ke,userSelectionActive:!0,nodesSelectionActive:!1})}function z(){if(!a||!X.current)return;const[G,se]=oc(j.current,X.current,D);O({x:G,y:se}).then(he=>{if(!J.current||!he){k.current=requestAnimationFrame(z);return}const{x:we,y:ve}=j.current;M(we,ve),k.current=requestAnimationFrame(z)})}const re=()=>{cancelAnimationFrame(k.current),k.current=0,W.current=!1};U.useEffect(()=>()=>re(),[]);const ne=G=>{const{userSelectionRect:se,transform:he,resetSelectedElements:we}=E.getState();if(!X.current||!se)return;const{x:ve,y:me}=Jt(G.nativeEvent,X.current);j.current={x:ve,y:me};const Ce=ui({x:se.startX,y:se.startY},he);if(!J.current){const Me=r?0:u;if(Math.hypot(ve-Ce.x,me-Ce.y)<=Me)return;we(),f==null||f(G)}J.current=!0,W.current||(z(),W.current=!0),M(ve,me)},ae=G=>{var se,he;if(!H){G.target===F.current&&E.getState().connection.inProgress&&(te.current=!0);return}G.button===0&&((he=(se=G.target)==null?void 0:se.releasePointerCapture)==null||he.call(se,G.pointerId),!T&&G.target===F.current&&E.getState().userSelectionRect&&(V==null||V(G)),E.setState({userSelectionActive:!1,userSelectionRect:null}),J.current&&(p==null||p(G),E.setState({nodesSelectionActive:ee.current.size>0})),re())},de=G=>{var se,he;(he=(se=G.target)==null?void 0:se.releasePointerCapture)==null||he.call(se,G.pointerId),re()},ce=l===!0||Array.isArray(l)&&l.includes(0);return g.jsxs("div",{className:Ge(["react-flow__pane",{draggable:ce,dragging:P,selection:t}]),onClick:H?void 0:zu(V,F),onContextMenu:zu(B,F),onWheel:zu(A,F),onPointerEnter:H?void 0:y,onPointerMove:H?ne:S,onPointerUp:ae,onPointerCancel:H?de:void 0,onPointerDownCapture:H?b:void 0,onClickCapture:H?L:void 0,onPointerLeave:_,ref:F,style:El,children:[C,g.jsx(PS,{})]})}function Qu({id:t,store:r,unselect:o=!1,nodeRef:l}){const{addSelectedNodes:a,unselectNodesAndEdges:u,multiSelectionActive:d,nodeLookup:f,onError:p}=r.getState(),v=f.get(t);if(!v){p==null||p("012",en.error012(t));return}r.setState({nodesSelectionActive:!1}),v.selected?(o||v.selected&&d)&&(u({nodes:[v],edges:[]}),requestAnimationFrame(()=>{var m;return(m=l==null?void 0:l.current)==null?void 0:m.blur()})):a([t])}function Cg({nodeRef:t,disabled:r=!1,noDragClassName:o,handleSelector:l,nodeId:a,isSelectable:u,nodeClickDistance:d}){const f=Oe(),[p,v]=U.useState(!1),m=U.useRef();return U.useEffect(()=>{if(!r)return m.current=m1({getStoreItems:()=>f.getState(),onNodeMouseDown:x=>{Qu({id:x,store:f,nodeRef:t})},onDragStart:()=>{v(!0)},onDragStop:()=>{v(!1)}}),()=>{var x;(x=m.current)==null||x.destroy(),m.current=void 0}},[r,f,t]),U.useEffect(()=>{r||!t.current||!m.current||m.current.update({noDragClassName:o,handleSelector:l,domNode:t.current,isSelectable:u,nodeId:a,nodeClickDistance:d})},[o,l,r,u,t,a,d]),p}const zS=t=>r=>r.selected&&(r.draggable||t&&typeof r.draggable>"u");function jg(){const t=Oe();return U.useCallback(o=>{const{nodeExtent:l,snapToGrid:a,snapGrid:u,nodesDraggable:d,onError:f,updateNodePositions:p,nodeLookup:v,nodeOrigin:m}=t.getState(),x=new Map,y=zS(d),S=a?u[0]:5,_=a?u[1]:5,C=o.direction.x*S*o.factor,k=o.direction.y*_*o.factor;for(const[,E]of v){if(!y(E))continue;let T={x:E.internals.positionAbsolute.x+C,y:E.internals.positionAbsolute.y+k};a&&(T=Eo(T,u));const{position:N,positionAbsolute:P}=Yp({nodeId:E.id,nextPosition:T,nodeLookup:v,nodeExtent:l,nodeOrigin:m,onError:f});E.position=N,E.internals.positionAbsolute=P,x.set(E.id,E)}p(x)},[])}const pc=U.createContext(null),RS=pc.Provider;pc.Consumer;const Mg=()=>U.useContext(pc),LS=t=>({connectOnClick:t.connectOnClick,noPanClassName:t.noPanClassName,rfId:t.rfId}),Pg=U.createContext(null);function AS({children:t}){const r=Te(LS,We);return g.jsx(Pg.Provider,{value:r,children:t})}function DS(){const t=U.useContext(Pg);if(!t)throw new Error("useHandleConfig must be used within a HandleConfigProvider");return t}const $S={connectingFrom:!1,connectingTo:!1,clickConnecting:!1,isPossibleEndHandle:!0,connectionInProcess:!1,clickConnectionInProcess:!1,valid:!1},bS=(t,r,o)=>l=>{const{connectionClickStartHandle:a,connectionMode:u,connection:d}=l,{fromHandle:f,toHandle:p,isValid:v}=d;if(!f&&!a)return $S;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:(f==null?void 0:f.nodeId)===t&&(f==null?void 0:f.id)===r&&(f==null?void 0:f.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:u===li.Strict?(f==null?void 0:f.type)!==o:t!==(f==null?void 0:f.nodeId)||r!==(f==null?void 0:f.id),connectionInProcess:!!f,clickConnectionInProcess:!!a,valid:m&&v}};function OS({type:t="source",position:r=Se.Top,isValidConnection:o,isConnectable:l=!0,isConnectableStart:a=!0,isConnectableEnd:u=!0,id:d,onConnect:f,children:p,className:v,onMouseDown:m,onTouchStart:x,...y},S){var W,V;const _=d||null,C=t==="target",k=Oe(),E=Mg(),{connectOnClick:T,noPanClassName:N,rfId:P}=DS(),{connectingFrom:O,connectingTo:D,clickConnecting:H,isPossibleEndHandle:F,connectionInProcess:X,clickConnectionInProcess:ee,valid:q}=Te(bS(E,_,t),We);E||(V=(W=k.getState()).onError)==null||V.call(W,"010",en.error010());const te=B=>{const{defaultEdgeOptions:A,onConnect:L,hasDefaultEdges:b}=k.getState(),M={...A,...B};if(b){const{edges:z,setEdges:re,onError:ne}=k.getState();re(yS(M,z,{onError:ne}))}L==null||L(M),f==null||f(M)},J=B=>{if(!E)return;const A=tg(B.nativeEvent);if(a&&(A&&B.button===0||!A)){const L=k.getState();Xu.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:C,handleId:_,nodeId:E,flowId:L.rfId,panBy:L.panBy,cancelConnection:L.cancelConnection,onConnectStart:L.onConnectStart,onConnectEnd:(...b)=>{var M,z;return(z=(M=k.getState()).onConnectEnd)==null?void 0:z.call(M,...b)},updateConnection:L.updateConnection,onConnect:te,isValidConnection:o||((...b)=>{var M,z;return((z=(M=k.getState()).isValidConnection)==null?void 0:z.call(M,...b))??!0}),getTransform:()=>k.getState().transform,getFromHandle:()=>k.getState().connection.fromHandle,autoPanSpeed:L.autoPanSpeed,dragThreshold:L.connectionDragThreshold})}A?m==null||m(B):x==null||x(B)},j=B=>{const{onClickConnectStart:A,onClickConnectEnd:L,connectionClickStartHandle:b,connectionMode:M,isValidConnection:z,lib:re,rfId:ne,nodeLookup:ae,connection:de}=k.getState();if(!E||!b&&!a)return;if(!b){A==null||A(B.nativeEvent,{nodeId:E,handleId:_,handleType:t}),k.setState({connectionClickStartHandle:{nodeId:E,type:t,id:_}});return}const ce=Jp(B.target),G=o||z,{connection:se,isValid:he}=Xu.isValid(B.nativeEvent,{handle:{nodeId:E,id:_,type:t},connectionMode:M,fromNodeId:b.nodeId,fromHandleId:b.id||null,fromType:b.type,isValidConnection:G,flowId:ne,doc:ce,lib:re,nodeLookup:ae});he&&se&&te(se);const we=structuredClone(de);delete we.inProgress,we.toPosition=we.toHandle?we.toHandle.position:null,L==null||L(B,we),k.setState({connectionClickStartHandle:null})};return g.jsx("div",{"data-handleid":_,"data-nodeid":E,"data-handlepos":r,"data-id":`${P}-${E}-${_}-${t}`,className:Ge(["react-flow__handle",`react-flow__handle-${r}`,"nodrag",N,v,{source:!C,target:C,connectable:l,connectablestart:a,connectableend:u,clickconnecting:H,connectingfrom:O,connectingto:D,valid:q,connectionindicator:l&&(!X||F)&&(X||ee?u:a)}]),onMouseDown:J,onTouchStart:J,onClick:T?j:void 0,ref:S,...y,children:p})}const di=U.memo(kg(OS));function FS({data:t,isConnectable:r,sourcePosition:o=Se.Bottom}){return g.jsxs(g.Fragment,{children:[t==null?void 0:t.label,g.jsx(di,{type:"source",position:o,isConnectable:r})]})}function HS({data:t,isConnectable:r,targetPosition:o=Se.Top,sourcePosition:l=Se.Bottom}){return g.jsxs(g.Fragment,{children:[g.jsx(di,{type:"target",position:o,isConnectable:r}),t==null?void 0:t.label,g.jsx(di,{type:"source",position:l,isConnectable:r})]})}function VS(){return null}function BS({data:t,isConnectable:r,targetPosition:o=Se.Top}){return g.jsxs(g.Fragment,{children:[g.jsx(di,{type:"target",position:o,isConnectable:r}),t==null?void 0:t.label]})}const fl={ArrowUp:{x:0,y:-1},ArrowDown:{x:0,y:1},ArrowLeft:{x:-1,y:0},ArrowRight:{x:1,y:0}},Yh={input:FS,default:HS,output:BS,group:VS};function WS(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 US=t=>{const{width:r,height:o,x:l,y:a}=ko(t.nodeLookup,{filter:u=>!!u.selected});return{width:Zt(r)?r:null,height:Zt(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 YS({onSelectionContextMenu:t,noPanClassName:r,disableKeyboardA11y:o}){const l=Oe(),{width:a,height:u,transformString:d,userSelectionActive:f}=Te(US,We),p=jg(),v=U.useRef(null);U.useEffect(()=>{var S;o||(S=v.current)==null||S.focus({preventScroll:!0})},[o]);const m=!f&&a!==null&&u!==null;if(Cg({nodeRef:v,disabled:!m}),!m)return null;const x=t?S=>{const _=l.getState().nodes.filter(C=>C.selected);t(S,_)}:void 0,y=S=>{Object.prototype.hasOwnProperty.call(fl,S.key)&&(S.preventDefault(),p({direction:fl[S.key],factor:S.shiftKey?4:1}))};return g.jsx("div",{className:Ge(["react-flow__nodesselection","react-flow__container",r]),style:{transform:d},children:g.jsx("div",{ref:v,className:"react-flow__nodesselection-rect",onContextMenu:x,tabIndex:o?void 0:-1,onKeyDown:o?void 0:y,style:{width:a,height:u}})})}const Xh=typeof window<"u"?window:void 0,XS=t=>({nodesSelectionActive:t.nodesSelectionActive,userSelectionActive:t.userSelectionActive});function Ig({children:t,onPaneClick:r,onPaneMouseEnter:o,onPaneMouseMove:l,onPaneMouseLeave:a,onPaneContextMenu:u,onPaneScroll:d,paneClickDistance:f,deleteKeyCode:p,selectionKeyCode:v,selectionOnDrag:m,selectionMode:x,onSelectionStart:y,onSelectionEnd:S,multiSelectionKeyCode:_,panActivationKeyCode:C,zoomActivationKeyCode:k,elementsSelectable:E,zoomOnScroll:T,zoomOnPinch:N,panOnScroll:P,panOnScrollSpeed:O,panOnScrollMode:D,zoomOnDoubleClick:H,panOnDrag:F,autoPanOnSelection:X,defaultViewport:ee,translateExtent:q,minZoom:te,maxZoom:J,preventScrolling:j,onSelectionContextMenu:W,noWheelClassName:V,noPanClassName:B,disableKeyboardA11y:A,onViewportChange:L,isControlledViewport:b}){const{nodesSelectionActive:M,userSelectionActive:z}=Te(XS,We),re=yo(v,{target:Xh}),ne=yo(C,{target:Xh}),ae=ne||F,de=ne||P,ce=m&&ae!==!0,G=re||z||ce;return ES({deleteKeyCode:p,multiSelectionKeyCode:_}),g.jsx(jS,{onPaneContextMenu:u,elementsSelectable:E,zoomOnScroll:T,zoomOnPinch:N,panOnScroll:de,panActivationKeyPressed:ne,panOnScrollSpeed:O,panOnScrollMode:D,zoomOnDoubleClick:H,panOnDrag:!re&&ae,defaultViewport:ee,translateExtent:q,minZoom:te,maxZoom:J,zoomActivationKeyCode:k,preventScrolling:j,noWheelClassName:V,noPanClassName:B,onViewportChange:L,isControlledViewport:b,paneClickDistance:f,selectionOnDrag:ce,children:g.jsxs(TS,{onSelectionStart:y,onSelectionEnd:S,onPaneClick:r,onPaneMouseEnter:o,onPaneMouseMove:l,onPaneMouseLeave:a,onPaneContextMenu:u,onPaneScroll:d,panOnDrag:ae,autoPanOnSelection:X,isSelecting:!!G,selectionMode:x,selectionKeyPressed:re,paneClickDistance:f,selectionOnDrag:ce,children:[t,M&&g.jsx(YS,{onSelectionContextMenu:W,noPanClassName:B,disableKeyboardA11y:A})]})})}Ig.displayName="FlowRenderer";const QS=U.memo(Ig),GS=t=>r=>t?ic(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 KS(t){return Te(U.useCallback(GS(t),[t]),We)}const qS=t=>t.updateNodeInternals;function ZS(){const t=Te(qS),[r]=U.useState(()=>typeof ResizeObserver>"u"?null:new ResizeObserver(o=>{const l=new Map;o.forEach(a=>{const u=a.target.getAttribute("data-id");l.set(u,{id:u,nodeElement:a.target,force:!0})}),t(l)}));return U.useEffect(()=>()=>{r==null||r.disconnect()},[r]),r}function JS({node:t,nodeType:r,hasDimensions:o,resizeObserver:l}){const a=Oe(),u=U.useRef(null),d=U.useRef(null),f=U.useRef(t.sourcePosition),p=U.useRef(t.targetPosition),v=U.useRef(r),m=o&&!!t.internals.handleBounds;return U.useEffect(()=>{u.current&&!t.hidden&&(!m||d.current!==u.current)&&(d.current&&(l==null||l.unobserve(d.current)),l==null||l.observe(u.current),d.current=u.current)},[m,t.hidden]),U.useEffect(()=>()=>{d.current&&(l==null||l.unobserve(d.current),d.current=null)},[]),U.useEffect(()=>{if(u.current){const x=v.current!==r,y=f.current!==t.sourcePosition,S=p.current!==t.targetPosition;(x||y||S)&&(v.current=r,f.current=t.sourcePosition,p.current=t.targetPosition,a.getState().updateNodeInternals(new Map([[t.id,{id:t.id,nodeElement:u.current,force:!0}]])))}},[t.id,r,t.sourcePosition,t.targetPosition]),u}function e_({id:t,onClick:r,onMouseEnter:o,onMouseMove:l,onMouseLeave:a,onContextMenu:u,onDoubleClick:d,nodesDraggable:f,elementsSelectable:p,nodesConnectable:v,nodesFocusable:m,resizeObserver:x,noDragClassName:y,noPanClassName:S,disableKeyboardA11y:_,rfId:C,nodeTypes:k,nodeClickDistance:E,onError:T}){const{node:N,internals:P,isParent:O}=Te(G=>{const se=G.nodeLookup.get(t),he=G.parentLookup.has(t);return{node:se,internals:se.internals,isParent:he}},We);let D=N.type||"default",H=(k==null?void 0:k[D])||Yh[D];H===void 0&&(T==null||T("003",en.error003(D)),D="default",H=(k==null?void 0:k.default)||Yh.default);const F=!!(N.draggable||f&&typeof N.draggable>"u"),X=!!(N.selectable||p&&typeof N.selectable>"u"),ee=!!(N.connectable||v&&typeof N.connectable>"u"),q=!!(N.focusable||m&&typeof N.focusable>"u"),te=Oe(),J=qp(N),j=JS({node:N,nodeType:D,hasDimensions:J,resizeObserver:x}),W=Cg({nodeRef:j,disabled:N.hidden||!F,noDragClassName:y,handleSelector:N.dragHandle,nodeId:t,isSelectable:X,nodeClickDistance:E}),V=jg();if(N.hidden)return null;const B=nn(N),A=WS(N),L=X||F||r||o||l||a,b=o?G=>o(G,{...P.userNode}):void 0,M=l?G=>l(G,{...P.userNode}):void 0,z=a?G=>a(G,{...P.userNode}):void 0,re=u?G=>u(G,{...P.userNode}):void 0,ne=d?G=>d(G,{...P.userNode}):void 0,ae=G=>{const{selectNodesOnDrag:se,nodeDragThreshold:he}=te.getState();X&&(!se||!F||he>0)&&Qu({id:t,store:te,nodeRef:j}),r&&r(G,{...P.userNode})},de=G=>{if(!(eg(G.nativeEvent)||_)){if(Hp.includes(G.key)&&X){const se=G.key==="Escape";Qu({id:t,store:te,unselect:se,nodeRef:j})}else if(F&&N.selected&&Object.prototype.hasOwnProperty.call(fl,G.key)){G.preventDefault();const{ariaLabelConfig:se}=te.getState();te.setState({ariaLiveMessage:se["node.a11yDescription.ariaLiveMessage"]({direction:G.key.replace("Arrow","").toLowerCase(),x:~~P.positionAbsolute.x,y:~~P.positionAbsolute.y})}),V({direction:fl[G.key],factor:G.shiftKey?4:1})}}},ce=()=>{var Ce;if(_||!((Ce=j.current)!=null&&Ce.matches(":focus-visible")))return;const{transform:G,width:se,height:he,autoPanOnNodeFocus:we,setCenter:ve}=te.getState();if(!we)return;ic(new Map([[t,N]]),{x:0,y:0,width:se,height:he},G,!0).length>0||ve(N.position.x+B.width/2,N.position.y+B.height/2,{zoom:G[2]})};return g.jsx("div",{className:Ge(["react-flow__node",`react-flow__node-${D}`,{[S]:F},N.className,{selected:N.selected,selectable:X,parent:O,draggable:F,dragging:W}]),ref:j,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:b,onMouseMove:M,onMouseLeave:z,onContextMenu:re,onClick:ae,onDoubleClick:ne,onKeyDown:q?de:void 0,tabIndex:q?0:void 0,onFocus:q?ce:void 0,role:N.ariaRole??(q?"group":void 0),"aria-roledescription":"node","aria-describedby":_?void 0:`${xg}-${C}`,"aria-label":N.ariaLabel,...N.domAttributes,children:g.jsx(RS,{value:t,children:g.jsx(H,{id:t,data:N.data,type:D,positionAbsoluteX:P.positionAbsolute.x,positionAbsoluteY:P.positionAbsolute.y,selected:N.selected??!1,selectable:X,draggable:F,deletable:N.deletable??!0,isConnectable:ee,sourcePosition:N.sourcePosition,targetPosition:N.targetPosition,dragging:W,dragHandle:N.dragHandle,zIndex:P.z,parentId:N.parentId,...B})})})}var t_=U.memo(e_);const n_=t=>({nodesConnectable:t.nodesConnectable,nodesFocusable:t.nodesFocusable,elementsSelectable:t.elementsSelectable,onError:t.onError});function Tg(t){const{nodesConnectable:r,nodesFocusable:o,elementsSelectable:l,onError:a}=Te(n_,We),u=KS(t.onlyRenderVisibleElements),d=ZS();return g.jsx("div",{className:"react-flow__nodes",style:El,children:u.map(f=>g.jsx(t_,{id:f,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},f))})}Tg.displayName="NodeRenderer";const r_=U.memo(Tg);function i_(t){return Te(U.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 u=o.nodeLookup.get(a.source),d=o.nodeLookup.get(a.target);u&&d&&qw({sourceNode:u,targetNode:d,width:o.width,height:o.height,transform:o.transform})&&l.push(a.id)}return l},[t]),We)}const o_=({color:t="none",strokeWidth:r=1})=>{const o={strokeWidth:r,...t&&{stroke:t}};return g.jsx("polyline",{className:"arrow",style:o,strokeLinecap:"round",fill:"none",strokeLinejoin:"round",points:"-5,-4 0,0 -5,4"})},s_=({color:t="none",strokeWidth:r=1})=>{const o={strokeWidth:r,...t&&{stroke:t,fill:t}};return g.jsx("polyline",{className:"arrowclosed",style:o,strokeLinecap:"round",strokeLinejoin:"round",points:"-5,-4 0,0 -5,4 -5,-4"})},Qh={[po.Arrow]:o_,[po.ArrowClosed]:s_};function l_(t){const r=Oe();return U.useMemo(()=>{var a,u;return Object.prototype.hasOwnProperty.call(Qh,t)?Qh[t]:((u=(a=r.getState()).onError)==null||u.call(a,"009",en.error009(t)),null)},[t])}const a_=({id:t,type:r,color:o,width:l=12.5,height:a=12.5,markerUnits:u="strokeWidth",strokeWidth:d,orient:f="auto-start-reverse"})=>{const p=l_(r);return p?g.jsx("marker",{className:"react-flow__arrowhead",id:t,markerWidth:`${l}`,markerHeight:`${a}`,viewBox:"-10 -10 20 20",markerUnits:u,orient:f,refX:"0",refY:"0",children:g.jsx(p,{color:o,strokeWidth:d})}):null},zg=({defaultColor:t,rfId:r})=>{const o=Te(u=>u.edges),l=Te(u=>u.defaultEdgeOptions),a=U.useMemo(()=>o1(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?g.jsx("svg",{className:"react-flow__marker","aria-hidden":"true",children:g.jsx("defs",{children:a.map(u=>g.jsx(a_,{id:u.id,type:u.type,color:u.color,width:u.width,height:u.height,markerUnits:u.markerUnits,strokeWidth:u.strokeWidth,orient:u.orient},u.id))})}):null};zg.displayName="MarkerDefinitions";var u_=U.memo(zg);function Rg({x:t,y:r,label:o,labelStyle:l,labelShowBg:a=!0,labelBgStyle:u,labelBgPadding:d=[2,4],labelBgBorderRadius:f=2,children:p,className:v,...m}){const[x,y]=U.useState({x:1,y:0,width:0,height:0}),S=Ge(["react-flow__edge-textwrapper",v]),_=U.useRef(null);return U.useEffect(()=>{if(_.current){const C=_.current.getBBox();y({x:C.x,y:C.y,width:C.width,height:C.height})}},[o]),o?g.jsxs("g",{transform:`translate(${t-x.width/2} ${r-x.height/2})`,className:S,visibility:x.width?"visible":"hidden",...m,children:[a&&g.jsx("rect",{width:x.width+2*d[0],x:-d[0],y:-d[1],height:x.height+2*d[1],className:"react-flow__edge-textbg",style:u,rx:f,ry:f}),g.jsx("text",{className:"react-flow__edge-text",y:x.height/2,dy:"0.3em",ref:_,style:l,children:o}),p]}):null}Rg.displayName="EdgeText";const c_=U.memo(Rg);function Nl({path:t,labelX:r,labelY:o,label:l,labelStyle:a,labelShowBg:u,labelBgStyle:d,labelBgPadding:f,labelBgBorderRadius:p,interactionWidth:v=20,...m}){return g.jsxs(g.Fragment,{children:[g.jsx("path",{...m,d:t,fill:"none",className:Ge(["react-flow__edge-path",m.className])}),v?g.jsx("path",{d:t,fill:"none",strokeOpacity:0,strokeWidth:v,className:"react-flow__edge-interaction"}):null,l&&Zt(r)&&Zt(o)?g.jsx(c_,{x:r,y:o,label:l,labelStyle:a,labelShowBg:u,labelBgStyle:d,labelBgPadding:f,labelBgBorderRadius:p}):null]})}function Gh({pos:t,x1:r,y1:o,x2:l,y2:a}){return t===Se.Left||t===Se.Right?[.5*(r+l),o]:[r,.5*(o+a)]}function Lg({sourceX:t,sourceY:r,sourcePosition:o=Se.Bottom,targetX:l,targetY:a,targetPosition:u=Se.Top}){const[d,f]=Gh({pos:o,x1:t,y1:r,x2:l,y2:a}),[p,v]=Gh({pos:u,x1:l,y1:a,x2:t,y2:r}),[m,x,y,S]=ng({sourceX:t,sourceY:r,targetX:l,targetY:a,sourceControlX:d,sourceControlY:f,targetControlX:p,targetControlY:v});return[`M${t},${r} C${d},${f} ${p},${v} ${l},${a}`,m,x,y,S]}function Ag(t){return U.memo(({id:r,sourceX:o,sourceY:l,targetX:a,targetY:u,sourcePosition:d,targetPosition:f,label:p,labelStyle:v,labelShowBg:m,labelBgStyle:x,labelBgPadding:y,labelBgBorderRadius:S,style:_,markerEnd:C,markerStart:k,interactionWidth:E})=>{const[T,N,P]=Lg({sourceX:o,sourceY:l,sourcePosition:d,targetX:a,targetY:u,targetPosition:f}),O=t.isInternal?void 0:r;return g.jsx(Nl,{id:O,path:T,labelX:N,labelY:P,label:p,labelStyle:v,labelShowBg:m,labelBgStyle:x,labelBgPadding:y,labelBgBorderRadius:S,style:_,markerEnd:C,markerStart:k,interactionWidth:E})})}const d_=Ag({isInternal:!1}),Dg=Ag({isInternal:!0});d_.displayName="SimpleBezierEdge";Dg.displayName="SimpleBezierEdgeInternal";function $g(t){return U.memo(({id:r,sourceX:o,sourceY:l,targetX:a,targetY:u,label:d,labelStyle:f,labelShowBg:p,labelBgStyle:v,labelBgPadding:m,labelBgBorderRadius:x,style:y,sourcePosition:S=Se.Bottom,targetPosition:_=Se.Top,markerEnd:C,markerStart:k,pathOptions:E,interactionWidth:T})=>{const[N,P,O]=Wu({sourceX:o,sourceY:l,sourcePosition:S,targetX:a,targetY:u,targetPosition:_,borderRadius:E==null?void 0:E.borderRadius,offset:E==null?void 0:E.offset,stepPosition:E==null?void 0:E.stepPosition}),D=t.isInternal?void 0:r;return g.jsx(Nl,{id:D,path:N,labelX:P,labelY:O,label:d,labelStyle:f,labelShowBg:p,labelBgStyle:v,labelBgPadding:m,labelBgBorderRadius:x,style:y,markerEnd:C,markerStart:k,interactionWidth:T})})}const bg=$g({isInternal:!1}),Og=$g({isInternal:!0});bg.displayName="SmoothStepEdge";Og.displayName="SmoothStepEdgeInternal";function Fg(t){return U.memo(({id:r,...o})=>{var a;const l=t.isInternal?void 0:r;return g.jsx(bg,{...o,id:l,pathOptions:U.useMemo(()=>{var u;return{borderRadius:0,offset:(u=o.pathOptions)==null?void 0:u.offset}},[(a=o.pathOptions)==null?void 0:a.offset])})})}const f_=Fg({isInternal:!1}),Hg=Fg({isInternal:!0});f_.displayName="StepEdge";Hg.displayName="StepEdgeInternal";function Vg(t){return U.memo(({id:r,sourceX:o,sourceY:l,targetX:a,targetY:u,label:d,labelStyle:f,labelShowBg:p,labelBgStyle:v,labelBgPadding:m,labelBgBorderRadius:x,style:y,markerEnd:S,markerStart:_,interactionWidth:C})=>{const[k,E,T]=og({sourceX:o,sourceY:l,targetX:a,targetY:u}),N=t.isInternal?void 0:r;return g.jsx(Nl,{id:N,path:k,labelX:E,labelY:T,label:d,labelStyle:f,labelShowBg:p,labelBgStyle:v,labelBgPadding:m,labelBgBorderRadius:x,style:y,markerEnd:S,markerStart:_,interactionWidth:C})})}const h_=Vg({isInternal:!1}),Bg=Vg({isInternal:!0});h_.displayName="StraightEdge";Bg.displayName="StraightEdgeInternal";function Wg(t){return U.memo(({id:r,sourceX:o,sourceY:l,targetX:a,targetY:u,sourcePosition:d=Se.Bottom,targetPosition:f=Se.Top,label:p,labelStyle:v,labelShowBg:m,labelBgStyle:x,labelBgPadding:y,labelBgBorderRadius:S,style:_,markerEnd:C,markerStart:k,pathOptions:E,interactionWidth:T})=>{const[N,P,O]=rg({sourceX:o,sourceY:l,sourcePosition:d,targetX:a,targetY:u,targetPosition:f,curvature:E==null?void 0:E.curvature}),D=t.isInternal?void 0:r;return g.jsx(Nl,{id:D,path:N,labelX:P,labelY:O,label:p,labelStyle:v,labelShowBg:m,labelBgStyle:x,labelBgPadding:y,labelBgBorderRadius:S,style:_,markerEnd:C,markerStart:k,interactionWidth:T})})}const p_=Wg({isInternal:!1}),Ug=Wg({isInternal:!0});p_.displayName="BezierEdge";Ug.displayName="BezierEdgeInternal";const Kh={default:Ug,straight:Bg,step:Hg,smoothstep:Og,simplebezier:Dg},qh={sourceX:null,sourceY:null,targetX:null,targetY:null,sourcePosition:null,targetPosition:null,zIndex:void 0},g_=(t,r,o)=>o===Se.Left?t-r:o===Se.Right?t+r:t,m_=(t,r,o)=>o===Se.Top?t-r:o===Se.Bottom?t+r:t,Zh="react-flow__edgeupdater";function Jh({position:t,centerX:r,centerY:o,radius:l=10,onMouseDown:a,onMouseEnter:u,onMouseOut:d,type:f}){return g.jsx("circle",{onMouseDown:a,onMouseEnter:u,onMouseOut:d,className:Ge([Zh,`${Zh}-${f}`]),cx:g_(r,l,t),cy:m_(o,l,t),r:l,stroke:"transparent",fill:"transparent"})}function y_({isReconnectable:t,reconnectRadius:r,edge:o,sourceX:l,sourceY:a,targetX:u,targetY:d,sourcePosition:f,targetPosition:p,onReconnect:v,onReconnectStart:m,onReconnectEnd:x,setReconnecting:y,setUpdateHover:S}){const _=Oe(),C=(P,O)=>{if(P.button!==0)return;const{autoPanOnConnect:D,domNode:H,connectionMode:F,connectionRadius:X,lib:ee,onConnectStart:q,cancelConnection:te,nodeLookup:J,rfId:j,panBy:W,updateConnection:V}=_.getState(),B=O.type==="target",A=(M,z)=>{y(!1),x==null||x(M,o,O.type,z)},L=M=>v==null?void 0:v(o,M),b=(M,z)=>{y(!0),m==null||m(P,o,O.type),q==null||q(M,z)};Xu.onPointerDown(P.nativeEvent,{autoPanOnConnect:D,connectionMode:F,connectionRadius:X,domNode:H,handleId:O.id,nodeId:O.nodeId,nodeLookup:J,isTarget:B,edgeUpdaterType:O.type,lib:ee,flowId:j,cancelConnection:te,panBy:W,isValidConnection:(...M)=>{var z,re;return((re=(z=_.getState()).isValidConnection)==null?void 0:re.call(z,...M))??!0},onConnect:L,onConnectStart:b,onConnectEnd:(...M)=>{var z,re;return(re=(z=_.getState()).onConnectEnd)==null?void 0:re.call(z,...M)},onReconnectEnd:A,updateConnection:V,getTransform:()=>_.getState().transform,getFromHandle:()=>_.getState().connection.fromHandle,dragThreshold:_.getState().connectionDragThreshold,handleDomNode:P.currentTarget})},k=P=>C(P,{nodeId:o.target,id:o.targetHandle??null,type:"target"}),E=P=>C(P,{nodeId:o.source,id:o.sourceHandle??null,type:"source"}),T=()=>S(!0),N=()=>S(!1);return g.jsxs(g.Fragment,{children:[(t===!0||t==="source")&&g.jsx(Jh,{position:f,centerX:l,centerY:a,radius:r,onMouseDown:k,onMouseEnter:T,onMouseOut:N,type:"source"}),(t===!0||t==="target")&&g.jsx(Jh,{position:p,centerX:u,centerY:d,radius:r,onMouseDown:E,onMouseEnter:T,onMouseOut:N,type:"target"})]})}function v_({id:t,edgesFocusable:r,edgesReconnectable:o,elementsSelectable:l,onClick:a,onDoubleClick:u,onContextMenu:d,onMouseEnter:f,onMouseMove:p,onMouseLeave:v,reconnectRadius:m,onReconnect:x,onReconnectStart:y,onReconnectEnd:S,rfId:_,edgeTypes:C,noPanClassName:k,onError:E,disableKeyboardA11y:T}){let N=Te(ve=>ve.edgeLookup.get(t));const P=Te(ve=>ve.defaultEdgeOptions);N=P?{...P,...N}:N;let O=N.type||"default",D=(C==null?void 0:C[O])||Kh[O];D===void 0&&(E==null||E("011",en.error011(O)),O="default",D=(C==null?void 0:C.default)||Kh.default);const H=!!(N.focusable||r&&typeof N.focusable>"u"),F=typeof x<"u"&&(N.reconnectable||o&&typeof N.reconnectable>"u"),X=!!(N.selectable||l&&typeof N.selectable>"u"),ee=U.useRef(null),[q,te]=U.useState(!1),[J,j]=U.useState(!1),W=Oe(),{zIndex:V=N.zIndex,sourceX:B,sourceY:A,targetX:L,targetY:b,sourcePosition:M,targetPosition:z}=Te(U.useCallback(ve=>{const me=ve.nodeLookup.get(N.source),Ce=ve.nodeLookup.get(N.target);if(!me||!Ce)return qh;const Me=i1({id:t,sourceNode:me,targetNode:Ce,sourceHandle:N.sourceHandle||null,targetHandle:N.targetHandle||null,connectionMode:ve.connectionMode,onError:E}),Pe=Kw({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]),We),re=U.useMemo(()=>N.markerStart?`url('#${Uu(N.markerStart,_)}')`:void 0,[N.markerStart,_]),ne=U.useMemo(()=>N.markerEnd?`url('#${Uu(N.markerEnd,_)}')`:void 0,[N.markerEnd,_]);if(N.hidden||B===null||A===null||L===null||b===null)return null;const ae=ve=>{var Pe;const{addSelectedEdges:me,unselectNodesAndEdges:Ce,multiSelectionActive:Me}=W.getState();X&&(W.setState({nodesSelectionActive:!1}),N.selected&&Me?(Ce({nodes:[],edges:[N]}),(Pe=ee.current)==null||Pe.blur()):me([t])),a&&a(ve,N)},de=u?ve=>{u(ve,{...N})}:void 0,ce=d?ve=>{d(ve,{...N})}:void 0,G=f?ve=>{f(ve,{...N})}:void 0,se=p?ve=>{p(ve,{...N})}:void 0,he=v?ve=>{v(ve,{...N})}:void 0,we=ve=>{var me;if(!T&&Hp.includes(ve.key)&&X){const{unselectNodesAndEdges:Ce,addSelectedEdges:Me}=W.getState();ve.key==="Escape"?((me=ee.current)==null||me.blur(),Ce({edges:[N]})):Me([t])}};return g.jsx("svg",{style:{zIndex:V},children:g.jsxs("g",{className:Ge(["react-flow__edge",`react-flow__edge-${O}`,N.className,k,{selected:N.selected,animated:N.animated,inactive:!X&&!a,updating:q,selectable:X}]),onClick:ae,onDoubleClick:de,onContextMenu:ce,onMouseEnter:G,onMouseMove:se,onMouseLeave:he,onKeyDown:H?we: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?`${wg}-${_}`:void 0,ref:ee,...N.domAttributes,children:[!J&&g.jsx(D,{id:t,source:N.source,target:N.target,type:N.type,selected:N.selected,animated:N.animated,selectable:X,deletable:N.deletable??!0,label:N.label,labelStyle:N.labelStyle,labelShowBg:N.labelShowBg,labelBgStyle:N.labelBgStyle,labelBgPadding:N.labelBgPadding,labelBgBorderRadius:N.labelBgBorderRadius,sourceX:B,sourceY:A,targetX:L,targetY:b,sourcePosition:M,targetPosition:z,data:N.data,style:N.style,sourceHandleId:N.sourceHandle,targetHandleId:N.targetHandle,markerStart:re,markerEnd:ne,pathOptions:"pathOptions"in N?N.pathOptions:void 0,interactionWidth:N.interactionWidth}),F&&g.jsx(y_,{edge:N,isReconnectable:F,reconnectRadius:m,onReconnect:x,onReconnectStart:y,onReconnectEnd:S,sourceX:B,sourceY:A,targetX:L,targetY:b,sourcePosition:M,targetPosition:z,setUpdateHover:te,setReconnecting:j})]})})}var x_=U.memo(v_);const w_=t=>({edgesFocusable:t.edgesFocusable,edgesReconnectable:t.edgesReconnectable,elementsSelectable:t.elementsSelectable,connectionMode:t.connectionMode,onError:t.onError});function Yg({defaultMarkerColor:t,onlyRenderVisibleElements:r,rfId:o,edgeTypes:l,noPanClassName:a,onReconnect:u,onEdgeContextMenu:d,onEdgeMouseEnter:f,onEdgeMouseMove:p,onEdgeMouseLeave:v,onEdgeClick:m,reconnectRadius:x,onEdgeDoubleClick:y,onReconnectStart:S,onReconnectEnd:_,disableKeyboardA11y:C}){const{edgesFocusable:k,edgesReconnectable:E,elementsSelectable:T,onError:N}=Te(w_,We),P=i_(r);return g.jsxs("div",{className:"react-flow__edges",children:[g.jsx(u_,{defaultColor:t,rfId:o}),P.map(O=>g.jsx(x_,{id:O,edgesFocusable:k,edgesReconnectable:E,elementsSelectable:T,noPanClassName:a,onReconnect:u,onContextMenu:d,onMouseEnter:f,onMouseMove:p,onMouseLeave:v,onClick:m,reconnectRadius:x,onDoubleClick:y,onReconnectStart:S,onReconnectEnd:_,rfId:o,onError:N,edgeTypes:l,disableKeyboardA11y:C},O))]})}Yg.displayName="EdgeRenderer";const S_=U.memo(Yg),ep=t=>`translate(${t[0]}px,${t[1]}px) scale(${t[2]})`;function __({children:t}){const r=Oe(),o=U.useRef(null),[l]=U.useState(()=>r.getState().transform);return Eg(()=>{let a=null;const u=()=>{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=ep(d)))};return u(),r.subscribe(u)},[r]),g.jsx("div",{ref:o,className:"react-flow__viewport xyflow__viewport react-flow__container",style:{transform:ep(l)},children:t})}function k_(t){const r=hc(),o=U.useRef(!1);U.useEffect(()=>{!o.current&&r.viewportInitialized&&t&&(setTimeout(()=>t(r),1),o.current=!0)},[t,r.viewportInitialized])}const E_=t=>{var r;return(r=t.panZoom)==null?void 0:r.syncViewport};function N_(t){const r=Te(E_),o=Oe();return U.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:No(t.connection.to,t.transform)}:{...t.connection}}function j_(t){return C_}function M_(t){const r=j_();return Te(r,We)}const P_=t=>({nodesConnectable:t.nodesConnectable,isValid:t.connection.isValid,inProgress:t.connection.inProgress,width:t.width,height:t.height});function I_({containerStyle:t,style:r,type:o,component:l}){const{nodesConnectable:a,width:u,height:d,isValid:f,inProgress:p}=Te(P_,We);return!(u&&a&&p)?null:g.jsx("svg",{style:t,width:u,height:d,className:"react-flow__connectionline react-flow__container",children:g.jsx("g",{className:Ge(["react-flow__connection",Wp(f)]),children:g.jsx(Xg,{style:r,type:o,CustomComponent:l,isValid:f})})})}const Xg=({style:t,type:r=qn.Bezier,CustomComponent:o,isValid:l})=>{const{inProgress:a,from:u,fromNode:d,fromHandle:f,fromPosition:p,to:v,toNode:m,toHandle:x,toPosition:y,pointer:S}=M_();if(!a)return;if(o)return g.jsx(o,{connectionLineType:r,connectionLineStyle:t,fromNode:d,fromHandle:f,fromX:u.x,fromY:u.y,toX:v.x,toY:v.y,fromPosition:p,toPosition:y,connectionStatus:Wp(l),toNode:m,toHandle:x,pointer:S});let _="";const C={sourceX:u.x,sourceY:u.y,sourcePosition:p,targetX:v.x,targetY:v.y,targetPosition:y};switch(r){case qn.Bezier:[_]=rg(C);break;case qn.SimpleBezier:[_]=Lg(C);break;case qn.Step:[_]=Wu({...C,borderRadius:0});break;case qn.SmoothStep:[_]=Wu(C);break;default:[_]=og(C)}return g.jsx("path",{d:_,fill:"none",className:"react-flow__connection-path",style:t})};Xg.displayName="ConnectionLine";const T_={};function tp(t=T_){U.useRef(t),Oe(),U.useEffect(()=>{},[t])}function z_(){Oe(),U.useRef(!1),U.useEffect(()=>{},[])}function Qg({nodeTypes:t,edgeTypes:r,onInit:o,onNodeClick:l,onEdgeClick:a,onNodeDoubleClick:u,onEdgeDoubleClick:d,onNodeMouseEnter:f,onNodeMouseMove:p,onNodeMouseLeave:v,onNodeContextMenu:m,onSelectionContextMenu:x,onSelectionStart:y,onSelectionEnd:S,connectionLineType:_,connectionLineStyle:C,connectionLineComponent:k,connectionLineContainerStyle:E,selectionKeyCode:T,selectionOnDrag:N,selectionMode:P,multiSelectionKeyCode:O,panActivationKeyCode:D,zoomActivationKeyCode:H,deleteKeyCode:F,onlyRenderVisibleElements:X,elementsSelectable:ee,defaultViewport:q,translateExtent:te,minZoom:J,maxZoom:j,preventScrolling:W,defaultMarkerColor:V,zoomOnScroll:B,zoomOnPinch:A,panOnScroll:L,panOnScrollSpeed:b,panOnScrollMode:M,zoomOnDoubleClick:z,panOnDrag:re,autoPanOnSelection:ne,onPaneClick:ae,onPaneMouseEnter:de,onPaneMouseMove:ce,onPaneMouseLeave:G,onPaneScroll:se,onPaneContextMenu:he,paneClickDistance:we,nodeClickDistance:ve,onEdgeContextMenu:me,onEdgeMouseEnter:Ce,onEdgeMouseMove:Me,onEdgeMouseLeave:Pe,reconnectRadius:Re,onReconnect:nt,onReconnectStart:rt,onReconnectEnd:Xe,noDragClassName:Ke,noWheelClassName:Bt,noPanClassName:Lt,disableKeyboardA11y:At,nodeExtent:it,rfId:ft,viewport:lt,onViewportChange:ht,nodesDraggable:hn}){return tp(t),tp(r),z_(),k_(o),N_(lt),g.jsx(QS,{onPaneClick:ae,onPaneMouseEnter:de,onPaneMouseMove:ce,onPaneMouseLeave:G,onPaneContextMenu:he,onPaneScroll:se,paneClickDistance:we,deleteKeyCode:F,selectionKeyCode:T,selectionOnDrag:N,selectionMode:P,onSelectionStart:y,onSelectionEnd:S,multiSelectionKeyCode:O,panActivationKeyCode:D,zoomActivationKeyCode:H,elementsSelectable:ee,zoomOnScroll:B,zoomOnPinch:A,zoomOnDoubleClick:z,panOnScroll:L,panOnScrollSpeed:b,panOnScrollMode:M,panOnDrag:re,autoPanOnSelection:ne,defaultViewport:q,translateExtent:te,minZoom:J,maxZoom:j,onSelectionContextMenu:x,preventScrolling:W,noDragClassName:Ke,noWheelClassName:Bt,noPanClassName:Lt,disableKeyboardA11y:At,onViewportChange:ht,isControlledViewport:!!lt,children:g.jsxs(__,{children:[g.jsx(S_,{edgeTypes:r,onEdgeClick:a,onEdgeDoubleClick:d,onReconnect:nt,onReconnectStart:rt,onReconnectEnd:Xe,onlyRenderVisibleElements:X,onEdgeContextMenu:me,onEdgeMouseEnter:Ce,onEdgeMouseMove:Me,onEdgeMouseLeave:Pe,reconnectRadius:Re,defaultMarkerColor:V,noPanClassName:Lt,disableKeyboardA11y:At,rfId:ft}),g.jsx(I_,{style:C,type:_,component:k,containerStyle:E}),g.jsx("div",{className:"react-flow__edgelabel-renderer"}),g.jsx(r_,{nodeTypes:t,onNodeClick:l,onNodeDoubleClick:u,onNodeMouseEnter:f,onNodeMouseMove:p,onNodeMouseLeave:v,onNodeContextMenu:m,nodeClickDistance:ve,onlyRenderVisibleElements:X,noPanClassName:Lt,noDragClassName:Ke,disableKeyboardA11y:At,nodeExtent:it,rfId:ft,nodesDraggable:hn}),g.jsx("div",{className:"react-flow__viewport-portal"})]})})}Qg.displayName="GraphView";const R_=U.memo(Qg),L_=Kp(),np=({nodes:t,edges:r,defaultNodes:o,defaultEdges:l,width:a,height:u,fitView:d,fitViewOptions:f,minZoom:p=.5,maxZoom:v=2,nodeOrigin:m,nodeExtent:x,zIndexMode:y="basic"}={})=>{const S=new Map,_=new Map,C=new Map,k=new Map,E=l??r??[],T=o??t??[],N=m??[0,0],P=x??fo;ag(C,k,E);const{nodesInitialized:O}=Yu(T,S,_,{nodeOrigin:N,nodeExtent:P,zIndexMode:y});let D=[0,0,1];if(d&&a&&u){const H=ko(S,{filter:q=>!!((q.width||q.initialWidth)&&(q.height||q.initialHeight))}),{x:F,y:X,zoom:ee}=sc(H,a,u,p,v,(f==null?void 0:f.padding)??.1);D=[F,X,ee]}return{rfId:"1",width:a??0,height:u??0,transform:D,nodes:T,nodesInitialized:O,nodeLookup:S,parentLookup:_,edges:E,edgeLookup:k,connectionLookup:C,onNodesChange:null,onEdgesChange:null,hasDefaultNodes:o!==void 0,hasDefaultEdges:l!==void 0,panZoom:null,minZoom:p,maxZoom:v,translateExtent:fo,nodeExtent:P,nodesSelectionActive:!1,userSelectionActive:!1,userSelectionRect:null,connectionMode:li.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:f,fitViewResolver:null,connection:{...Bp},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:Vp,zIndexMode:y,onNodesChangeMiddlewareMap:new Map,onEdgesChangeMiddlewareMap:new Map}},A_=({nodes:t,edges:r,defaultNodes:o,defaultEdges:l,width:a,height:u,fitView:d,fitViewOptions:f,minZoom:p,maxZoom:v,nodeOrigin:m,nodeExtent:x,zIndexMode:y})=>X1((S,_)=>{async function C(){const{nodeLookup:k,panZoom:E,fitViewOptions:T,fitViewResolver:N,width:P,height:O,minZoom:D,maxZoom:H}=_();E&&(await Bw({nodes:k,width:P,height:O,panZoom:E,minZoom:D,maxZoom:H},T),N==null||N.resolve(!0),S({fitViewResolver:null}))}return{...np({nodes:t,edges:r,width:a,height:u,fitView:d,fitViewOptions:f,minZoom:p,maxZoom:v,nodeOrigin:m,nodeExtent:x,defaultNodes:o,defaultEdges:l,zIndexMode:y}),setNodes:k=>{const{nodeLookup:E,parentLookup:T,nodeOrigin:N,nodeExtent:P,elevateNodesOnSelect:O,fitViewQueued:D,zIndexMode:H,nodesSelectionActive:F}=_(),{nodesInitialized:X,hasSelectedNodes:ee}=Yu(k,E,T,{nodeOrigin:N,nodeExtent:P,elevateNodesOnSelect:O,checkEquality:!0,zIndexMode:H}),q=F&ⅇD&&X?(C(),S({nodes:k,nodesInitialized:X,fitViewQueued:!1,fitViewOptions:void 0,nodesSelectionActive:q})):S({nodes:k,nodesInitialized:X,nodesSelectionActive:q})},setEdges:k=>{const{connectionLookup:E,edgeLookup:T}=_();ag(E,T,k),S({edges:k})},setDefaultNodesAndEdges:(k,E)=>{if(k){const{setNodes:T}=_();T(k),S({hasDefaultNodes:!0})}if(E){const{setEdges:T}=_();T(E),S({hasDefaultEdges:!0})}},updateNodeInternals:k=>{const{triggerNodeChanges:E,nodeLookup:T,parentLookup:N,domNode:P,nodeOrigin:O,nodeExtent:D,debug:H,fitViewQueued:F,zIndexMode:X}=_(),{changes:ee,updatedInternals:q}=f1(k,T,N,P,O,D,X);q&&(a1(T,N,{nodeOrigin:O,nodeExtent:D,zIndexMode:X}),F?(C(),S({fitViewQueued:!1,fitViewOptions:void 0})):S({}),(ee==null?void 0:ee.length)>0&&(H&&console.log("React Flow: trigger node changes",ee),E==null||E(ee)))},updateNodePositions:(k,E=!1)=>{const T=[];let N=[];const{nodeLookup:P,triggerNodeChanges:O,connection:D,updateConnection:H,onNodesChangeMiddlewareMap:F}=_();for(const[X,ee]of k){const q=P.get(X),te=!!(q!=null&&q.expandParent&&(q!=null&&q.parentId)&&(ee!=null&&ee.position)),J={id:X,type:"position",position:te?{x:Math.max(0,ee.position.x),y:Math.max(0,ee.position.y)}:ee.position,dragging:E};if(q&&D.inProgress&&D.fromNode.id===q.id){const j=Nr(q,D.fromHandle,Se.Left,!0);H({...D,from:j})}te&&q.parentId&&T.push({id:X,parentId:q.parentId,rect:{...ee.internals.positionAbsolute,width:ee.measured.width??0,height:ee.measured.height??0}}),N.push(J)}if(T.length>0){const{parentLookup:X,nodeOrigin:ee}=_(),q=fc(T,P,X,ee);N.push(...q)}for(const X of F.values())N=X(N);O(N)},triggerNodeChanges:k=>{const{onNodesChange:E,setNodes:T,nodes:N,hasDefaultNodes:P,debug:O}=_();if(k!=null&&k.length){if(P){const D=pS(k,N);T(D)}O&&console.log("React Flow: trigger node changes",k),E==null||E(k)}},triggerEdgeChanges:k=>{const{onEdgesChange:E,setEdges:T,edges:N,hasDefaultEdges:P,debug:O}=_();if(k!=null&&k.length){if(P){const D=gS(k,N);T(D)}O&&console.log("React Flow: trigger edge changes",k),E==null||E(k)}},addSelectedNodes:k=>{const{multiSelectionActive:E,edgeLookup:T,nodeLookup:N,triggerNodeChanges:P,triggerEdgeChanges:O}=_();if(E){const D=k.map(H=>yr(H,!0));P(D);return}P(ni(N,new Set([...k]),!0)),O(ni(T))},addSelectedEdges:k=>{const{multiSelectionActive:E,edgeLookup:T,nodeLookup:N,triggerNodeChanges:P,triggerEdgeChanges:O}=_();if(E){const D=k.map(H=>yr(H,!0));O(D);return}O(ni(T,new Set([...k]))),P(ni(N,new Set,!0))},unselectNodesAndEdges:({nodes:k,edges:E}={})=>{const{edges:T,nodes:N,nodeLookup:P,triggerNodeChanges:O,triggerEdgeChanges:D}=_(),H=k||N,F=E||T,X=[];for(const q of H){if(!q.selected)continue;const te=P.get(q.id);te&&(te.selected=!1),X.push(yr(q.id,!1))}const ee=[];for(const q of F)q.selected&&ee.push(yr(q.id,!1));O(X),D(ee)},setMinZoom:k=>{const{panZoom:E,maxZoom:T}=_();E==null||E.setScaleExtent([k,T]),S({minZoom:k})},setMaxZoom:k=>{const{panZoom:E,minZoom:T}=_();E==null||E.setScaleExtent([T,k]),S({maxZoom:k})},setTranslateExtent:k=>{var E;(E=_().panZoom)==null||E.setTranslateExtent(k),S({translateExtent:k})},resetSelectedElements:()=>{const{edges:k,nodes:E,triggerNodeChanges:T,triggerEdgeChanges:N,elementsSelectable:P}=_();if(!P)return;const O=E.reduce((H,F)=>F.selected?[...H,yr(F.id,!1)]:H,[]),D=k.reduce((H,F)=>F.selected?[...H,yr(F.id,!1)]:H,[]);T(O),N(D)},setNodeExtent:k=>{const{nodes:E,nodeLookup:T,parentLookup:N,nodeOrigin:P,elevateNodesOnSelect:O,nodeExtent:D,zIndexMode:H}=_();k[0][0]===D[0][0]&&k[0][1]===D[0][1]&&k[1][0]===D[1][0]&&k[1][1]===D[1][1]||(Yu(E,T,N,{nodeOrigin:P,nodeExtent:k,elevateNodesOnSelect:O,checkEquality:!1,zIndexMode:H}),S({nodeExtent:k}))},panBy:k=>{const{transform:E,width:T,height:N,panZoom:P,translateExtent:O}=_();return h1({delta:k,panZoom:P,transform:E,translateExtent:O,width:T,height:N})},setCenter:async(k,E,T)=>{const{width:N,height:P,maxZoom:O,panZoom:D}=_();if(!D)return!1;const H=typeof(T==null?void 0:T.zoom)<"u"?T.zoom:O;return await D.setViewport({x:N/2-k*H,y:P/2-E*H,zoom:H},{duration:T==null?void 0:T.duration,ease:T==null?void 0:T.ease,interpolate:T==null?void 0:T.interpolate}),!0},cancelConnection:()=>{S({connection:{...Bp}})},updateConnection:k=>{S({connection:k})},reset:()=>S({...np()})}},Object.is);function Gg({initialNodes:t,initialEdges:r,defaultNodes:o,defaultEdges:l,initialWidth:a,initialHeight:u,initialMinZoom:d,initialMaxZoom:f,initialFitViewOptions:p,fitView:v,nodeOrigin:m,nodeExtent:x,zIndexMode:y,children:S}){const[_]=U.useState(()=>A_({nodes:t,edges:r,defaultNodes:o,defaultEdges:l,width:a,height:u,fitView:v,minZoom:d,maxZoom:f,fitViewOptions:p,nodeOrigin:m,nodeExtent:x,zIndexMode:y}));return g.jsx(Q1,{value:_,children:g.jsx(wS,{children:g.jsx(AS,{children:S})})})}function D_({children:t,nodes:r,edges:o,defaultNodes:l,defaultEdges:a,width:u,height:d,fitView:f,fitViewOptions:p,minZoom:v,maxZoom:m,nodeOrigin:x,nodeExtent:y,zIndexMode:S}){return U.useContext(_l)?g.jsx(g.Fragment,{children:t}):g.jsx(Gg,{initialNodes:r,initialEdges:o,defaultNodes:l,defaultEdges:a,initialWidth:u,initialHeight:d,fitView:f,initialFitViewOptions:p,initialMinZoom:v,initialMaxZoom:m,nodeOrigin:x,nodeExtent:y,zIndexMode:S,children:t})}const $_={width:"100%",height:"100%",overflow:"hidden",position:"relative",zIndex:0};function b_({nodes:t,edges:r,defaultNodes:o,defaultEdges:l,className:a,nodeTypes:u,edgeTypes:d,onNodeClick:f,onEdgeClick:p,onInit:v,onMove:m,onMoveStart:x,onMoveEnd:y,onConnect:S,onConnectStart:_,onConnectEnd:C,onClickConnectStart:k,onClickConnectEnd:E,onNodeMouseEnter:T,onNodeMouseMove:N,onNodeMouseLeave:P,onNodeContextMenu:O,onNodeDoubleClick:D,onNodeDragStart:H,onNodeDrag:F,onNodeDragStop:X,onNodesDelete:ee,onEdgesDelete:q,onDelete:te,onSelectionChange:J,onSelectionDragStart:j,onSelectionDrag:W,onSelectionDragStop:V,onSelectionContextMenu:B,onSelectionStart:A,onSelectionEnd:L,onBeforeDelete:b,connectionMode:M,connectionLineType:z=qn.Bezier,connectionLineStyle:re,connectionLineComponent:ne,connectionLineContainerStyle:ae,deleteKeyCode:de="Backspace",selectionKeyCode:ce="Shift",selectionOnDrag:G=!1,selectionMode:se=ho.Full,panActivationKeyCode:he="Space",multiSelectionKeyCode:we=mo()?"Meta":"Control",zoomActivationKeyCode:ve=mo()?"Meta":"Control",snapToGrid:me,snapGrid:Ce,onlyRenderVisibleElements:Me=!1,selectNodesOnDrag:Pe,nodesDraggable:Re,autoPanOnNodeFocus:nt,nodesConnectable:rt,nodesFocusable:Xe,nodeOrigin:Ke=Sg,edgesFocusable:Bt,edgesReconnectable:Lt,elementsSelectable:At=!0,defaultViewport:it=lS,minZoom:ft=.5,maxZoom:lt=2,translateExtent:ht=fo,preventScrolling:hn=!0,nodeExtent:Dt,defaultMarkerColor:rn="#b1b1b7",zoomOnScroll:Z=!0,zoomOnPinch:Ee=!0,panOnScroll:De=!1,panOnScrollSpeed:Cn=.5,panOnScrollMode:mt=wr.Free,zoomOnDoubleClick:fi=!0,panOnDrag:hi=!0,onPaneClick:pi,onPaneMouseEnter:gi,onPaneMouseMove:jn,onPaneMouseLeave:Mn,onPaneScroll:Co,onPaneContextMenu:jo,paneClickDistance:Mo=1,nodeClickDistance:Po=0,children:Io,onReconnect:mi,onReconnectStart:To,onReconnectEnd:Jn,onEdgeContextMenu:yi,onEdgeDoubleClick:er,onEdgeMouseEnter:Cl,onEdgeMouseMove:tr,onEdgeMouseLeave:Cr,reconnectRadius:jr=10,onNodesChange:vi,onEdgesChange:jl,noDragClassName:Ml="nodrag",noWheelClassName:Pl="nowheel",noPanClassName:on="nopan",fitView:xi,fitViewOptions:wi,connectOnClick:Il,attributionPosition:zo,proOptions:Ro,defaultEdgeOptions:Lo,elevateNodesOnSelect:Ao=!0,elevateEdgesOnSelect:Tl=!1,disableKeyboardA11y:Do=!1,autoPanOnConnect:He,autoPanOnNodeDrag:zl,autoPanOnSelection:Si=!0,autoPanSpeed:$o,connectionRadius:Mr,isValidConnection:Rl,onError:bo,style:Pr,id:Nt,nodeDragThreshold:Ll,connectionDragThreshold:Ct,viewport:Al,onViewportChange:Dl,width:$l,height:Ir,colorMode:Tr="light",debug:nr,onScroll:pn,ariaLabelConfig:bl,zIndexMode:Oo="basic",..._i},Fo){const rr=Nt||"1",ir=dS(Tr),Ol=U.useCallback(zr=>{zr.currentTarget.scrollTo({top:0,left:0,behavior:"instant"}),pn==null||pn(zr)},[pn]);return g.jsx("div",{"data-testid":"rf__wrapper",..._i,onScroll:Ol,style:{...Pr,...$_},ref:Fo,className:Ge(["react-flow",a,ir]),id:Nt,role:"application",children:g.jsxs(D_,{nodes:t,edges:r,width:$l,height:Ir,fitView:xi,fitViewOptions:wi,minZoom:ft,maxZoom:lt,nodeOrigin:Ke,nodeExtent:Dt,zIndexMode:Oo,children:[g.jsx(cS,{nodes:t,edges:r,defaultNodes:o,defaultEdges:l,onConnect:S,onConnectStart:_,onConnectEnd:C,onClickConnectStart:k,onClickConnectEnd:E,nodesDraggable:Re,autoPanOnNodeFocus:nt,nodesConnectable:rt,nodesFocusable:Xe,edgesFocusable:Bt,edgesReconnectable:Lt,elementsSelectable:At,elevateNodesOnSelect:Ao,elevateEdgesOnSelect:Tl,minZoom:ft,maxZoom:lt,nodeExtent:Dt,onNodesChange:vi,onEdgesChange:jl,snapToGrid:me,snapGrid:Ce,connectionMode:M,translateExtent:ht,connectOnClick:Il,defaultEdgeOptions:Lo,fitView:xi,fitViewOptions:wi,onNodesDelete:ee,onEdgesDelete:q,onDelete:te,onNodeDragStart:H,onNodeDrag:F,onNodeDragStop:X,onSelectionDrag:W,onSelectionDragStart:j,onSelectionDragStop:V,onMove:m,onMoveStart:x,onMoveEnd:y,noPanClassName:on,nodeOrigin:Ke,rfId:rr,autoPanOnConnect:He,autoPanOnNodeDrag:zl,autoPanSpeed:$o,onError:bo,connectionRadius:Mr,isValidConnection:Rl,selectNodesOnDrag:Pe,nodeDragThreshold:Ll,connectionDragThreshold:Ct,onBeforeDelete:b,debug:nr,ariaLabelConfig:bl,zIndexMode:Oo}),g.jsx(R_,{onInit:v,onNodeClick:f,onEdgeClick:p,onNodeMouseEnter:T,onNodeMouseMove:N,onNodeMouseLeave:P,onNodeContextMenu:O,onNodeDoubleClick:D,nodeTypes:u,edgeTypes:d,connectionLineType:z,connectionLineStyle:re,connectionLineComponent:ne,connectionLineContainerStyle:ae,selectionKeyCode:ce,selectionOnDrag:G,selectionMode:se,deleteKeyCode:de,multiSelectionKeyCode:we,panActivationKeyCode:he,zoomActivationKeyCode:ve,onlyRenderVisibleElements:Me,defaultViewport:it,translateExtent:ht,minZoom:ft,maxZoom:lt,preventScrolling:hn,zoomOnScroll:Z,zoomOnPinch:Ee,zoomOnDoubleClick:fi,panOnScroll:De,panOnScrollSpeed:Cn,panOnScrollMode:mt,panOnDrag:hi,autoPanOnSelection:Si,onPaneClick:pi,onPaneMouseEnter:gi,onPaneMouseMove:jn,onPaneMouseLeave:Mn,onPaneScroll:Co,onPaneContextMenu:jo,paneClickDistance:Mo,nodeClickDistance:Po,onSelectionContextMenu:B,onSelectionStart:A,onSelectionEnd:L,onReconnect:mi,onReconnectStart:To,onReconnectEnd:Jn,onEdgeContextMenu:yi,onEdgeDoubleClick:er,onEdgeMouseEnter:Cl,onEdgeMouseMove:tr,onEdgeMouseLeave:Cr,reconnectRadius:jr,defaultMarkerColor:rn,noDragClassName:Ml,noWheelClassName:Pl,noPanClassName:on,rfId:rr,disableKeyboardA11y:Do,nodeExtent:Dt,viewport:Al,onViewportChange:Dl,nodesDraggable:Re}),g.jsx(sS,{onSelectionChange:J}),Io,g.jsx(tS,{proOptions:Ro,position:zo}),g.jsx(eS,{rfId:rr,disableKeyboardA11y:Do})]})})}var O_=kg(b_);function F_({dimensions:t,lineWidth:r,variant:o,className:l}){return g.jsx("path",{strokeWidth:r,d:`M${t[0]/2} 0 V${t[1]} M0 ${t[1]/2} H${t[0]}`,className:Ge(["react-flow__background-pattern",o,l])})}function H_({radius:t,className:r}){return g.jsx("circle",{cx:t,cy:t,r:t,className:Ge(["react-flow__background-pattern","dots",r])})}var Zn;(function(t){t.Lines="lines",t.Dots="dots",t.Cross="cross"})(Zn||(Zn={}));const V_={[Zn.Dots]:1,[Zn.Lines]:1,[Zn.Cross]:6},B_=t=>({transform:t.transform,patternId:`pattern-${t.rfId}`});function Kg({id:t,variant:r=Zn.Dots,gap:o=20,size:l,lineWidth:a=1,offset:u=0,color:d,bgColor:f,style:p,className:v,patternClassName:m}){const x=U.useRef(null),{transform:y,patternId:S}=Te(B_,We),_=l||V_[r],C=r===Zn.Dots,k=r===Zn.Cross,E=Array.isArray(o)?o:[o,o],T=[E[0]*y[2]||1,E[1]*y[2]||1],N=_*y[2],P=Array.isArray(u)?u:[u,u],O=k?[N,N]:T,D=[P[0]*y[2]+O[0]/2,P[1]*y[2]+O[1]/2],H=`${S}${t||""}`;return g.jsxs("svg",{className:Ge(["react-flow__background",v]),style:{...p,...El,"--xy-background-color-props":f,"--xy-background-pattern-color-props":d},ref:x,"data-testid":"rf__background",children:[g.jsx("pattern",{id:H,x:y[0]%T[0],y:y[1]%T[1],width:T[0],height:T[1],patternUnits:"userSpaceOnUse",patternTransform:`translate(-${D[0]},-${D[1]})`,children:C?g.jsx(H_,{radius:N/2,className:m}):g.jsx(F_,{dimensions:O,lineWidth:a,variant:r,className:m})}),g.jsx("rect",{x:"0",y:"0",width:"100%",height:"100%",fill:`url(#${H})`})]})}Kg.displayName="Background";const W_=U.memo(Kg);function U_(){return g.jsx("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",children:g.jsx("path",{d:"M32 18.133H18.133V32h-4.266V18.133H0v-4.266h13.867V0h4.266v13.867H32z"})})}function Y_(){return g.jsx("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 5",children:g.jsx("path",{d:"M0 0h32v4.2H0z"})})}function X_(){return g.jsx("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 30",children:g.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 Q_(){return g.jsx("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 25 32",children:g.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 G_(){return g.jsx("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 25 32",children:g.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 qs({children:t,className:r,...o}){return g.jsx("button",{type:"button",className:Ge(["react-flow__controls-button",r]),...o,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 qg({style:t,showZoom:r=!0,showFitView:o=!0,showInteractive:l=!0,fitViewOptions:a,onZoomIn:u,onZoomOut:d,onFitView:f,onInteractiveChange:p,className:v,children:m,position:x="bottom-left",orientation:y="vertical","aria-label":S}){const _=Oe(),{isInteractive:C,minZoomReached:k,maxZoomReached:E,ariaLabelConfig:T}=Te(K_,We),{zoomIn:N,zoomOut:P,fitView:O}=hc(),D=()=>{N(),u==null||u()},H=()=>{P(),d==null||d()},F=()=>{O(a),f==null||f()},X=()=>{_.setState({nodesDraggable:!C,nodesConnectable:!C,elementsSelectable:!C}),p==null||p(!C)},ee=y==="horizontal"?"horizontal":"vertical";return g.jsxs(kl,{className:Ge(["react-flow__controls",ee,v]),position:x,style:t,"data-testid":"rf__controls","aria-label":S??T["controls.ariaLabel"],children:[r&&g.jsxs(g.Fragment,{children:[g.jsx(qs,{onClick:D,className:"react-flow__controls-zoomin",title:T["controls.zoomIn.ariaLabel"],"aria-label":T["controls.zoomIn.ariaLabel"],disabled:E,children:g.jsx(U_,{})}),g.jsx(qs,{onClick:H,className:"react-flow__controls-zoomout",title:T["controls.zoomOut.ariaLabel"],"aria-label":T["controls.zoomOut.ariaLabel"],disabled:k,children:g.jsx(Y_,{})})]}),o&&g.jsx(qs,{className:"react-flow__controls-fitview",onClick:F,title:T["controls.fitView.ariaLabel"],"aria-label":T["controls.fitView.ariaLabel"],children:g.jsx(X_,{})}),l&&g.jsx(qs,{className:"react-flow__controls-interactive",onClick:X,title:T["controls.interactive.ariaLabel"],"aria-label":T["controls.interactive.ariaLabel"],children:C?g.jsx(G_,{}):g.jsx(Q_,{})}),m]})}qg.displayName="Controls";const q_=U.memo(qg);function Z_({id:t,x:r,y:o,width:l,height:a,style:u,color:d,strokeColor:f,strokeWidth:p,className:v,borderRadius:m,shapeRendering:x,selected:y,onClick:S}){const{background:_,backgroundColor:C}=u||{},k=d||_||C;return g.jsx("rect",{className:Ge(["react-flow__minimap-node",{selected:y},v]),x:r,y:o,rx:m,ry:m,width:l,height:a,style:{fill:k,stroke:f,strokeWidth:p},shapeRendering:x,onClick:S?E=>S(E,t):void 0})}const J_=U.memo(Z_),ek=t=>t.nodes.map(r=>r.id),Ru=t=>t instanceof Function?t:()=>t;function tk({nodeStrokeColor:t,nodeColor:r,nodeClassName:o="",nodeBorderRadius:l=5,nodeStrokeWidth:a,nodeComponent:u=J_,onClick:d}){const f=Te(ek,We),p=Ru(r),v=Ru(t),m=Ru(o),x=typeof window>"u"||window.chrome?"crispEdges":"geometricPrecision";return g.jsx(g.Fragment,{children:f.map(y=>g.jsx(rk,{id:y,nodeColorFunc:p,nodeStrokeColorFunc:v,nodeClassNameFunc:m,nodeBorderRadius:l,nodeStrokeWidth:a,NodeComponent:u,onClick:d,shapeRendering:x},y))})}function nk({id:t,nodeColorFunc:r,nodeStrokeColorFunc:o,nodeClassNameFunc:l,nodeBorderRadius:a,nodeStrokeWidth:u,shapeRendering:d,NodeComponent:f,onClick:p}){const{node:v,x:m,y:x,width:y,height:S}=Te(_=>{const C=_.nodeLookup.get(t);if(!C)return{node:void 0,x:0,y:0,width:0,height:0};const k=C.internals.userNode,{x:E,y:T}=C.internals.positionAbsolute,{width:N,height:P}=nn(k);return{node:k,x:E,y:T,width:N,height:P}},We);return!v||v.hidden||!qp(v)?null:g.jsx(f,{x:m,y:x,width:y,height:S,style:v.style,selected:!!v.selected,className:l(v),color:r(v),borderRadius:a,strokeColor:o(v),strokeWidth:u,shapeRendering:d,onClick:p,id:v.id})}const rk=U.memo(nk);var ik=U.memo(tk);const ok=200,sk=150,lk=t=>!t.hidden,ak=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?Qp(ko(t.nodeLookup,{filter:lk}),r):r,rfId:t.rfId,panZoom:t.panZoom,translateExtent:t.translateExtent,flowWidth:t.width,flowHeight:t.height,ariaLabelConfig:t.ariaLabelConfig}},rp=(t,r)=>t.x===r.x&&t.y===r.y&&t.width===r.width&&t.height===r.height,uk=(t,r)=>rp(t.viewBB,r.viewBB)&&rp(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,ck="react-flow__minimap-desc";function Zg({style:t,className:r,nodeStrokeColor:o,nodeColor:l,nodeClassName:a="",nodeBorderRadius:u=5,nodeStrokeWidth:d,nodeComponent:f,bgColor:p,maskColor:v,maskStrokeColor:m,maskStrokeWidth:x,position:y="bottom-right",onClick:S,onNodeClick:_,pannable:C=!1,zoomable:k=!1,ariaLabel:E,inversePan:T,zoomStep:N=1,offsetScale:P=5}){const O=Oe(),D=U.useRef(null),{boundingRect:H,viewBB:F,rfId:X,panZoom:ee,translateExtent:q,flowWidth:te,flowHeight:J,ariaLabelConfig:j}=Te(ak,uk),W=(t==null?void 0:t.width)??ok,V=(t==null?void 0:t.height)??sk,B=H.width/W,A=H.height/V,L=Math.max(B,A),b=L*W,M=L*V,z=P*L,re=H.x-(b-H.width)/2-z,ne=H.y-(M-H.height)/2-z,ae=b+z*2,de=M+z*2,ce=`${ck}-${X}`,G=U.useRef(0),se=U.useRef();G.current=L,U.useEffect(()=>{if(D.current&&ee)return se.current=_1({domNode:D.current,panZoom:ee,getTransform:()=>O.getState().transform,getViewScale:()=>G.current}),()=>{var me;(me=se.current)==null||me.destroy()}},[ee]),U.useEffect(()=>{var me;(me=se.current)==null||me.update({translateExtent:q,width:te,height:J,inversePan:T,pannable:C,zoomStep:N,zoomable:k})},[C,k,T,N,q,te,J]);const he=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,we=_?U.useCallback((me,Ce)=>{const Me=O.getState().nodeLookup.get(Ce).internals.userNode;_(me,Me)},[]):void 0,ve=E??j["minimap.ariaLabel"];return g.jsx(kl,{position:y,style:{...t,"--xy-minimap-background-color-props":typeof p=="string"?p:void 0,"--xy-minimap-mask-background-color-props":typeof v=="string"?v:void 0,"--xy-minimap-mask-stroke-color-props":typeof m=="string"?m:void 0,"--xy-minimap-mask-stroke-width-props":typeof x=="number"?x*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:Ge(["react-flow__minimap",r]),"data-testid":"rf__minimap",children:g.jsxs("svg",{width:W,height:V,viewBox:`${re} ${ne} ${ae} ${de}`,className:"react-flow__minimap-svg",role:"img","aria-labelledby":ce,ref:D,onClick:he,children:[ve&&g.jsx("title",{id:ce,children:ve}),g.jsx(ik,{onClick:we,nodeColor:l,nodeStrokeColor:o,nodeBorderRadius:u,nodeClassName:a,nodeStrokeWidth:d,nodeComponent:f}),g.jsx("path",{className:"react-flow__minimap-mask",d:`M${re-z},${ne-z}h${ae+z*2}v${de+z*2}h${-ae-z*2}z - M${F.x},${F.y}h${F.width}v${F.height}h${-F.width}z`,fillRule:"evenodd",pointerEvents:"none"})]})})}Zg.displayName="MiniMap";const dk=U.memo(Zg),fk=t=>r=>t?`${Math.max(1/r.transform[2],1)}`:void 0,hk={[ci.Line]:"right",[ci.Handle]:"bottom-right"};function pk({nodeId:t,position:r,variant:o=ci.Handle,className:l,style:a=void 0,children:u,color:d,minWidth:f=10,minHeight:p=10,maxWidth:v=Number.MAX_VALUE,maxHeight:m=Number.MAX_VALUE,keepAspectRatio:x=!1,resizeDirection:y,autoScale:S=!0,shouldResize:_,onResizeStart:C,onResize:k,onResizeEnd:E}){const T=Mg(),N=typeof t=="string"?t:T,P=Oe(),O=U.useRef(null),D=o===ci.Handle,H=Te(U.useCallback(fk(D&&S),[D,S]),We),F=U.useRef(null),X=r??hk[o];U.useEffect(()=>{if(!(!O.current||!N))return F.current||(F.current=A1({domNode:O.current,nodeId:N,getStoreItems:()=>{const{nodeLookup:q,transform:te,snapGrid:J,snapToGrid:j,nodeOrigin:W,domNode:V}=P.getState();return{nodeLookup:q,transform:te,snapGrid:J,snapToGrid:j,nodeOrigin:W,paneDomNode:V}},onChange:(q,te)=>{const{triggerNodeChanges:J,nodeLookup:j,parentLookup:W,nodeOrigin:V}=P.getState(),B=[],A={x:q.x,y:q.y},L=j.get(N);if(L&&L.expandParent&&L.parentId){const b=L.origin??V,M=q.width??L.measured.width??0,z=q.height??L.measured.height??0,re={id:L.id,parentId:L.parentId,rect:{width:M,height:z,...Zp({x:q.x??L.position.x,y:q.y??L.position.y},{width:M,height:z},L.parentId,j,b)}},ne=fc([re],j,W,V);B.push(...ne),A.x=q.x?Math.max(b[0]*M,q.x):void 0,A.y=q.y?Math.max(b[1]*z,q.y):void 0}if(A.x!==void 0&&A.y!==void 0){const b={id:N,type:"position",position:{...A}};B.push(b)}if(q.width!==void 0&&q.height!==void 0){const M={id:N,type:"dimensions",resizing:!0,setAttributes:y?y==="horizontal"?"width":"height":!0,dimensions:{width:q.width,height:q.height}};B.push(M)}for(const b of te){const M={...b,type:"position"};B.push(M)}J(B)},onEnd:({width:q,height:te})=>{const J={id:N,type:"dimensions",resizing:!1,dimensions:{width:q,height:te}};P.getState().triggerNodeChanges([J])}})),F.current.update({controlPosition:X,boundaries:{minWidth:f,minHeight:p,maxWidth:v,maxHeight:m},keepAspectRatio:x,resizeDirection:y,onResizeStart:C,onResize:k,onResizeEnd:E,shouldResize:_}),()=>{var q;(q=F.current)==null||q.destroy()}},[X,f,p,v,m,x,C,k,E,_]);const ee=X.split("-");return g.jsx("div",{className:Ge(["react-flow__resize-control","nodrag",...ee,o,l]),ref:O,style:{...a,scale:H,...d&&{[D?"backgroundColor":"borderColor"]:d}},children:u})}U.memo(pk);const gk={"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.form":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 gc(t){return gk[t]??8}function mk(t){const r=new Map;for(const l of t){const a=gc(l.type),u=r.get(a)??[];u.push(l),r.set(a,u)}const o=new Map;for(const[l,a]of r)a.sort((u,d)=>u.name.localeCompare(d.name)),a.forEach((u,d)=>{o.set(u.id,{x:l*260,y:d*108})});return o}const Jg=90,yk=new Set(["django.field","django.serializer_field","django.relation","django.test","react.test","django.url_name","django.throttle"]),ip={"arch.context":"#edf2f4","django.app":"#8d99ae","django.route":"#4cc9f0","django.view":"#4895ef","django.viewset_action":"#4361ee","django.permission":"#7b8cde","django.serializer":"#f4a261","django.form":"#e9c46a","django.serializer_field":"#e9c46a","django.service":"#90be6d","django.model":"#2a9d8f","django.field":"#8ac926","django.task":"#e76f51","django.receiver":"#e85d04","django.signal":"#f4a261","django.test":"#6c757d","django.admin":"#adb5bd","django.migration_op":"#9d4edd","openapi.path":"#00bbf9","react.api_client":"#ff6b6b","react.query_key":"#adb5bd","react.hook":"#7b2cbf","react.feature":"#9d4edd","react.route":"#c77dff","react.page":"#c77dff","react.component":"#9d4edd","react.form_schema":"#ffd166","react.test":"#6c757d"},vk=Math.PI*(3-Math.sqrt(5)),em=220,xk=26,Dk={0:"context",1:"routes",2:"views",3:"serializers",4:"services",5:"models",6:"fields",7:"jobs / signals",8:"openapi",9:"api client",10:"hooks",11:"pages",12:"components",13:"forms / tests"};function tm(t){return t.startsWith("react.")?"react":t.startsWith("openapi.")?"stitch":t.startsWith("arch.")?"arch":"django"}function $k(t){return ip[t]?ip[t]:t.startsWith("react.")?"#9d4edd":t.startsWith("openapi.")?"#00bbf9":"#4a5568"}function wk(t){return t>=Jg?"3d":"2d"}function Sk(t){return t>=Jg?"overview":"full"}function _k(t,r,o=1){const l=new Set([t]);let a=new Set([t]);for(let u=0;uo.families.has(tm(f.type)));o.detail==="overview"&&(l=l.filter(f=>!yk.has(f.type)));const a=new Set(l.map(f=>f.id)),u=r.filter(f=>a.has(f.src)&&a.has(f.dst)),d=o.focusId?_k(o.focusId,u,1):new Set;if(o.neighborhoodOnly&&o.focusId&&d.size){l=l.filter(p=>d.has(p.id));const f=new Set(l.map(p=>p.id));return{nodes:l,edges:u.filter(p=>f.has(p.src)&&f.has(p.dst)),neighborIds:d}}return{nodes:l,edges:u,neighborIds:d}}function bk(t){const r=new Map;for(const l of t){const a=gc(l.type),u=r.get(a)??[];u.push(l),r.set(a,u)}const o=new Map;for(const[l,a]of r){a.sort((d,f)=>d.name.localeCompare(f.name));const u=l*em;a.forEach((d,f)=>{if(a.length===1){o.set(d.id,{x:u,y:0,z:0});return}const p=xk*Math.sqrt(f+1),v=f*vk;o.set(d.id,{x:u,y:p*Math.cos(v),z:p*Math.sin(v)})})}return o}function Ok(t){const r=new Map;for(const o of t){const l=gc(o.type);r.set(l,(r.get(l)||0)+1)}return[...r.entries()].sort((o,l)=>o[0]-l[0]).map(([o,l])=>({layer:o,x:o*em,count:l}))}const Ek=U.lazy(()=>oy(()=>import("./LayeredGraph3D-D12B4Z17.js"),[],import.meta.url).then(t=>({default:t.LayeredGraph3D}))),Nk={cheap:"var(--edge-cheap)",expensive:"var(--edge-expensive)",critical:"var(--edge-critical)"};function Ck({data:t,selected:r}){return g.jsxs("div",{className:r?"lp-node selected":"lp-node",children:[g.jsx(di,{type:"target",position:Se.Left,isConnectable:!1}),g.jsx("div",{className:"t",children:Gu(t.type)}),g.jsx("div",{className:"n",title:t.name,children:t.name}),g.jsx(di,{type:"source",position:Se.Right,isConnectable:!1})]})}const jk={load:Ck},op=180,sp=56,Mk=new Set(["django","react","stitch","arch"]);function Pk(t,r,o=null){const l=new Map(t.map(f=>[f.id,f])),a=mk(t),u=t.map(f=>({id:f.id,type:"load",position:a.get(f.id)??{x:0,y:0},data:{name:f.name,type:f.type,file:f.file_path},selected:o===f.id,sourcePosition:Se.Right,targetPosition:Se.Left,width:op,height:sp,style:{width:op,height:sp}})),d=r.filter(f=>l.has(f.src)&&l.has(f.dst)).map(f=>{const p=Nk[f.weight]||"var(--edge-cheap)";return{id:f.id,source:f.src,target:f.dst,type:"smoothstep",animated:f.weight==="critical",style:{stroke:p,strokeWidth:f.weight==="critical"?2.4:1.2,strokeDasharray:f.confidence<.8?"6 4":void 0},markerEnd:{type:po.ArrowClosed,width:14,height:14,color:p},label:f.type.replaceAll("_"," "),labelStyle:{fill:"var(--muted)",fontSize:10}}});return{rfNodes:u,rfEdges:d}}function lp({node:t}){return g.jsxs("aside",{className:"inspector","data-testid":"graph-inspector",children:[g.jsx("div",{className:"t",children:Gu(t.type)}),g.jsx("div",{className:"n",children:Vs(t.name)}),t.context?g.jsx("div",{className:"muted",children:Vs(t.context)}):null,t.file_path?g.jsx("div",{className:"file",children:Vs(`${t.file_path}${t.start_line?`:${t.start_line}`:""}`)}):null,g.jsx("div",{className:"muted",children:Vs(t.qualified_name)})]})}function Lu({nodes:t,edges:r}){const[o,l]=U.useState(null),[a,u]=U.useState(null),[d,f]=U.useState(null),[p,v]=U.useState(new Set(Mk)),[m,x]=U.useState(!1),y=typeof window<"u"&&window.matchMedia("(prefers-reduced-motion: reduce)").matches,S=a??wk(t.length),_=d??Sk(t.length),C=U.useMemo(()=>kk(t,r,{detail:_,families:p,focusId:o,neighborhoodOnly:m&&S==="3d"}),[t,r,_,p,o,m,S]),k=U.useMemo(()=>new Map(C.nodes.map(F=>[F.id,F])),[C.nodes]),E=o?k.get(o)??null:null,{rfNodes:T,rfEdges:N}=U.useMemo(()=>{const F=Pk(C.nodes,C.edges,o);return y&&(F.rfEdges=F.rfEdges.map(X=>({...X,animated:!1}))),F},[C.nodes,C.edges,o,y]);U.useEffect(()=>{o&&!k.has(o)&&l(null)},[k,o]);const P=(F,X)=>{l(X.id)},O=F=>{v(X=>{const ee=new Set(X);if(ee.has(F)){if(ee.size===1)return X;ee.delete(F)}else ee.add(F);return ee})},D=U.useMemo(()=>{const F=new Set;for(const X of t)F.add(tm(X.type));return F},[t]),H=t.length-C.nodes.length;return g.jsxs("div",{className:"impact-graph",style:{flex:1,minHeight:0,position:"relative",display:"flex",flexDirection:"column"},children:[g.jsxs("div",{className:"graph-toolbar","data-testid":"graph-toolbar",children:[g.jsxs("div",{className:"seg","aria-label":"Graph projection",children:[g.jsx("button",{type:"button","data-testid":"graph-view-2d",className:S==="2d"?"active":"","aria-pressed":S==="2d",onClick:()=>u("2d"),children:"2D map"}),g.jsx("button",{type:"button","data-testid":"graph-view-3d",className:S==="3d"?"active":"","aria-pressed":S==="3d",onClick:()=>u("3d"),children:"3D layers"})]}),g.jsxs("div",{className:"seg","aria-label":"Graph detail",children:[g.jsx("button",{type:"button","data-testid":"graph-detail-overview",className:_==="overview"?"active":"","aria-pressed":_==="overview",onClick:()=>f("overview"),children:"Overview"}),g.jsx("button",{type:"button","data-testid":"graph-detail-full",className:_==="full"?"active":"","aria-pressed":_==="full",onClick:()=>f("full"),children:"Full"})]}),g.jsx("div",{className:"seg","aria-label":"Graph families",children:["django","stitch","react"].filter(F=>D.has(F)).map(F=>g.jsx("button",{type:"button","data-testid":`graph-family-${F}`,className:p.has(F)?"active":"","aria-pressed":p.has(F),onClick:()=>O(F),children:F},F))}),S==="3d"?g.jsx("button",{type:"button",className:m?"chip-btn active":"chip-btn","data-testid":"graph-neighborhood",disabled:!o,onClick:()=>x(F=>!F),children:m?"Neighborhood":"Focus neighbors"}):null,g.jsxs("span",{className:"muted graph-count",children:[C.nodes.length," nodes · ",C.edges.length," edges",H?` · ${H} hidden`:""]})]}),g.jsx("div",{className:"graph-stage",children:S==="3d"?g.jsxs("div",{className:"graph-3d","data-testid":"graph-3d",children:[g.jsx("p",{className:"graph-3d-hint",children:"Architecture layers are stacked in depth (Django → stitch → React). Drag to orbit, scroll to zoom, click a node to inspect it."}),g.jsx(U.Suspense,{fallback:g.jsx("p",{className:"muted graph-3d-hint",children:"Loading 3D layers…"}),children:g.jsx(Ek,{nodes:C.nodes,edges:C.edges,selectedId:o,neighborIds:C.neighborIds,onSelect:F=>{l(F),F||x(!1)}})}),E?g.jsx(lp,{node:E}):null]}):g.jsxs(Gg,{children:[g.jsxs(O_,{nodes:T,edges:N,nodeTypes:jk,fitView:!0,fitViewOptions:{padding:.2,maxZoom:1.15},minZoom:.25,nodesDraggable:!1,nodesConnectable:!1,elementsSelectable:!0,deleteKeyCode:null,onNodeClick:P,onPaneClick:()=>l(null),proOptions:{hideAttribution:!1},"data-testid":"impact-graph",children:[g.jsx(W_,{}),g.jsx(dk,{pannable:!0,zoomable:!0,ariaLabel:"Impact graph overview",nodeColor:"var(--muted)",nodeStrokeColor:"transparent",nodeStrokeWidth:0,maskColor:"rgba(0, 0, 0, 0.45)",maskStrokeColor:"var(--accent)",maskStrokeWidth:1.4,bgColor:"var(--graph-bg)",style:{width:184,height:128}}),g.jsx(q_,{})]}),E?g.jsx(lp,{node:E}):null]})})]})}const hl=[{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"}],Ik="obsidian",nm="loadpath.theme";function Tk(t){return hl.some(r=>r.id===t)}function rm(){try{const t=localStorage.getItem(nm)||"";if(Tk(t))return t}catch{}return Ik}function zk(t){var r;return((r=hl.find(o=>o.id===t))==null?void 0:r.group)==="light"?"light":"dark"}function im(t){document.documentElement.dataset.theme=t,document.documentElement.style.colorScheme=zk(t);try{localStorage.setItem(nm,t)}catch{}}const ap=[{id:"review",label:"Review",testId:"tab-review",shortcut:"1",icon:Z0},{id:"architecture",label:"Architecture",testId:"tab-architecture",shortcut:"2",icon:J0},{id:"graph",label:"Impact graph",testId:"tab-graph",shortcut:"3",icon:ey},{id:"prs",label:"Pull requests",testId:"tab-prs",shortcut:"4",icon:ty},{id:"settings",label:"Settings",testId:"tab-settings",shortcut:"5",icon:ny}];function Rk(){var it,ft,lt,ht,hn,Dt,rn;const[t,r]=U.useState("review"),[o,l]=U.useState(localStorage.getItem("loadpath.repo")||""),[a,u]=U.useState(localStorage.getItem("loadpath.base")||"HEAD~1"),[d,f]=U.useState(localStorage.getItem("loadpath.head")||"HEAD"),[p,v]=U.useState(null),[m,x]=U.useState(null),[y,S]=U.useState([]),[_,C]=U.useState("review"),[k,E]=U.useState(""),[T,N]=U.useState(""),[P,O]=U.useState(""),[D,H]=U.useState({}),[F,X]=U.useState([]),[ee,q]=U.useState(localStorage.getItem("loadpath.scmRepo")||""),[te,J]=U.useState(localStorage.getItem("loadpath.provider")||"github"),[j,W]=U.useState(localStorage.getItem("loadpath.prNumber")||""),[V,B]=U.useState(""),[A,L]=U.useState(rm),[b,M]=U.useState(!1),z=U.useRef(o);z.current=o;const re=Z=>{L(Z),im(Z)},ne=U.useRef(""),ae=Z=>{ne.current=Z,N(Z)};U.useEffect(()=>{kt.settings().then(H).catch(()=>{}).finally(()=>M(!0)),kt.repos().then(Z=>S(Z.repos)).catch(()=>{})},[]);const de=()=>o.trim()?!0:(E("Point at a local repository path first."),!1);U.useEffect(()=>{if(t!=="architecture"||!o.trim())return;const Z=o;let Ee=!1;return kt.architecture(Z).then(De=>{!Ee&&z.current===Z&&x(De)}).catch(()=>{}),()=>{Ee=!0}},[t,o]);const ce=Z=>{l(Z),localStorage.setItem("loadpath.repo",Z)},G=(Z,Ee)=>{u(Z),f(Ee),localStorage.setItem("loadpath.base",Z),localStorage.setItem("loadpath.head",Ee)},se=(Z,Ee,De)=>{J(Z),q(Ee),localStorage.setItem("loadpath.provider",Z),localStorage.setItem("loadpath.scmRepo",Ee),De!==void 0&&(W(De),localStorage.setItem("loadpath.prNumber",De))},he=async(Z=o)=>{if(!Z.trim())return null;const Ee=await kt.architecture(Z);return z.current===Z&&x(Ee),Ee},we=async()=>{if(!ne.current&&de()){E(""),O(""),ae("Tracing load path…"),ce(o),G(a,d);try{const Z=await kt.review(o,a,d,!0);v(Z),C("review"),r("review"),await kt.repos().then(Ee=>S(Ee.repos)).catch(()=>{}),await he(o)}catch(Z){E(Z instanceof Error?Z.message:String(Z))}finally{ae("")}}},ve=async(Z=!0)=>{if(!ne.current&&de()){E(""),O(""),ae(Z?"Indexing…":"Full reindex…"),ce(o);try{await kt.index(o,Z);const Ee=await he(o);await kt.repos().then(De=>S(De.repos)).catch(()=>{}),Ee!=null&&Ee.indexed&&(C("architecture"),r("architecture"))}catch(Ee){E(Ee instanceof Error?Ee.message:String(Ee))}finally{ae("")}}},me=async()=>{if(!ne.current&&de()){E(""),O(""),ae("Detecting layout…"),ce(o);try{const Z=await kt.init(o);O(Z.message),await kt.repos().then(Ee=>S(Ee.repos)).catch(()=>{})}catch(Z){E(Z instanceof Error?Z.message:String(Z))}finally{ae("")}}},Ce=async()=>{if(p!=null&&p.markdown)try{await navigator.clipboard.writeText(p.markdown),O("Copied markdown brief")}catch(Z){E(Z instanceof Error?Z.message:String(Z))}},Me=async()=>{if(!ne.current){if(!(p!=null&&p.markdown)||!ee||!j){E("Pick a pull request first (Pull requests tab), then post the brief.");return}ae("Posting Loadpath brief…");try{const Z=await kt.postComment(te,ee,Number(j),p.markdown);O(Z.updated?"Updated the Loadpath PR comment":"Posted the Loadpath PR comment")}catch(Z){E(Z instanceof Error?Z.message:String(Z))}finally{ae("")}}},Pe=async()=>{if(!ne.current){E(""),ae("Fetching pull requests…");try{const Z=await kt.prs(te,ee);X(Z.pull_requests)}catch(Z){E(Z instanceof Error?Z.message:String(Z))}finally{ae("")}}},Re=async Z=>{Z.preventDefault();const Ee=new FormData(Z.currentTarget),De={github_token:String(Ee.get("github_token")||""),bitbucket_token:String(Ee.get("bitbucket_token")||""),bitbucket_username:String(Ee.get("bitbucket_username")||""),ai_provider:String(Ee.get("ai_provider")||"none"),ai_api_key:String(Ee.get("ai_api_key")||""),ai_model:String(Ee.get("ai_model")||""),ai_base_url:String(Ee.get("ai_base_url")||"")},Cn=y.length?{...De,workspaces:y.map(mt=>({path:mt.path,name:mt.name}))}:De;try{H(await kt.saveSettings(Cn)),O("Settings saved on this machine")}catch(mt){E(mt instanceof Error?mt.message:String(mt))}},nt=async()=>{if(!(!p||ne.current)){ae("Residual analysis…");try{const Z=await kt.residual(p);B(Z.note)}catch(Z){E(Z instanceof Error?Z.message:String(Z))}finally{ae("")}}},rt=U.useRef(we);rt.current=we;const Xe=U.useRef(t);Xe.current=t,U.useEffect(()=>{const Z=Ee=>{const De=Ee.target;if(De&&(De.tagName==="INPUT"||De.tagName==="TEXTAREA"||De.tagName==="SELECT"||De.isContentEditable)){Ee.key==="Escape"&&De.blur();return}if(Ee.key==="Escape"){E(""),O("");return}const Cn=ap.find(mt=>mt.shortcut===Ee.key);if(Cn&&!Ee.metaKey&&!Ee.ctrlKey&&!Ee.altKey&&r(Cn.id),(Ee.metaKey||Ee.ctrlKey)&&Ee.key==="Enter"){if(Xe.current==="settings"||Xe.current==="prs"||ne.current)return;Ee.preventDefault(),rt.current()}};return window.addEventListener("keydown",Z),()=>window.removeEventListener("keydown",Z)},[]);const Ke=U.useMemo(()=>_==="architecture"?(m==null?void 0:m.nodes)??[]:(p==null?void 0:p.nodes)??[],[_,m,p]),Bt=U.useMemo(()=>_==="architecture"?(m==null?void 0:m.edges)??[]:(p==null?void 0:p.edges)??[],[_,m,p]),Lt=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",At=((p==null?void 0:p.findings)||[]).filter(Z=>!Z.waived);return g.jsxs("div",{className:"app",children:[g.jsx("a",{className:"skip",href:"#main",children:"Skip to content"}),g.jsxs("nav",{className:"rail","data-testid":"rail","aria-label":"Primary",children:[g.jsxs("div",{className:"brand",children:[g.jsx("div",{className:"brand-mark",children:"Loadpath"}),g.jsx("div",{className:"brand-sub",children:"Load-path review"})]}),ap.map(Z=>{const Ee=Z.icon,De=t===Z.id;return g.jsxs("button",{type:"button","data-testid":Z.testId,className:De?"nav-item active":"nav-item","aria-current":De?"page":void 0,"aria-label":Z.label,onClick:()=>r(Z.id),children:[g.jsx(Ee,{}),g.jsx("span",{children:Z.label})]},Z.id)}),g.jsxs("div",{className:"theme-pick",children:[g.jsx("label",{htmlFor:"theme-select",children:"Theme"}),g.jsx("select",{id:"theme-select","data-testid":"theme-select",value:A,onChange:Z=>re(Z.target.value),children:hl.map(Z=>g.jsx("option",{value:Z.id,children:Z.label},Z.id))})]}),g.jsxs("div",{className:"rail-foot",children:[g.jsx("div",{className:"muted",role:"status",children:T||Lt}),g.jsxs("div",{className:"kbd-hint",children:[g.jsx("kbd",{children:"1"}),"–",g.jsx("kbd",{children:"5"})," tabs · ",g.jsx("kbd",{children:"Ctrl"}),"+",g.jsx("kbd",{children:"Enter"})," review"]})]})]}),g.jsxs("div",{className:"main",id:"main",children:[T?g.jsxs("div",{className:"progress",role:"status","aria-live":"polite","aria-busy":"true",children:[g.jsx("i",{}),g.jsx("span",{className:"sr-only",children:T})]}):null,g.jsxs("header",{className:"topbar","data-testid":"topbar",children:[y.length>0?g.jsxs("label",{className:"field workspace",children:[g.jsx("span",{children:"Workspace"}),g.jsxs("select",{"data-testid":"workspace-select",value:y.some(Z=>Z.path===o)?o:"",onChange:Z=>{Z.target.value&&ce(Z.target.value)},children:[g.jsx("option",{value:"",children:"Indexed repos…"}),y.map(Z=>g.jsxs("option",{value:Z.path,children:[Z.name,Z.indexed?` (${Z.counts.nodes})`:""]},Z.path))]})]}):null,g.jsxs("label",{className:"field path",children:[g.jsx("span",{children:"Repository"}),g.jsx("input",{"data-testid":"repo-path",placeholder:"Local monorepo path",value:o,onChange:Z=>l(Z.target.value),spellCheck:!1})]}),g.jsxs("label",{className:"field ref",children:[g.jsx("span",{children:"Base"}),g.jsx("input",{"data-testid":"base-ref",value:a,onChange:Z=>G(Z.target.value,d),placeholder:"base",spellCheck:!1})]}),g.jsxs("label",{className:"field ref",children:[g.jsx("span",{children:"Head"}),g.jsx("input",{"data-testid":"head-ref",value:d,onChange:Z=>G(a,Z.target.value),placeholder:"head",spellCheck:!1})]}),g.jsxs("div",{className:"topbar-actions",children:[g.jsx("button",{type:"button","data-testid":"btn-init",disabled:!!T,onClick:me,children:"Draft config"}),g.jsx("button",{type:"button","data-testid":"btn-index",disabled:!!T,onClick:()=>ve(!0),children:"Index"}),g.jsx("button",{type:"button","data-testid":"btn-review",className:"btn primary",disabled:!!T,onClick:we,children:"Review"})]})]}),g.jsxs("div",{className:"alerts",children:[k?g.jsxs("div",{className:"error","data-testid":"error",role:"alert",children:[g.jsx("span",{children:k}),g.jsx("button",{type:"button",className:"dismiss",onClick:()=>E(""),"aria-label":"Dismiss error",children:"Ă—"})]}):null,P?g.jsxs("div",{className:"banner","data-testid":"status-note",children:[g.jsx("span",{children:P}),g.jsx("button",{type:"button",className:"dismiss",onClick:()=>O(""),"aria-label":"Dismiss",children:"Ă—"})]}):null,((it=p==null?void 0:p.index)!=null&&it.stale||m!=null&&m.stale)&&(t==="review"||t==="architecture")?g.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,((ft=p==null?void 0:p.index)==null?void 0:ft.django_boot)==="failed"||(m==null?void 0:m.django_boot)==="failed"?g.jsx("div",{className:"banner warn","data-testid":"django-boot-failed",children:((lt=p==null?void 0:p.index)==null?void 0:lt.django_boot_detail)||(m==null?void 0:m.django_boot_detail)||"django.setup() failed"}):null,(ht=p==null?void 0:p.workspace)!=null&&ht.dirty_overlaps_review&&t==="review"?g.jsxs("div",{className:"banner warn","data-testid":"dirty-tree",children:["Uncommitted files overlap this review: ",(p.workspace.dirty_overlap||[]).slice(0,6).join(", ")]}):null]}),g.jsxs("div",{className:"stage",children:[t==="review"&&g.jsxs("div",{className:"content","data-testid":"review-layout",children:[g.jsx("aside",{className:"brief","data-testid":"brief",children:p?g.jsx(Lk,{review:p,findings:At,aiNote:V,busy:!!T,onAskAi:nt,onCopy:Ce,onPost:Me}):g.jsxs("div",{className:"empty","data-testid":"review-empty",children:[g.jsx("h2",{children:"Trace the force of this diff"}),g.jsx("p",{children:"The graph is the architecture. The brief is where this change travels — not a hunk list."}),g.jsxs("ol",{children:[g.jsx("li",{children:"Point at a Django + React monorepo, or pick an indexed workspace."}),g.jsxs("li",{children:["Index it. Missing ",g.jsx("code",{children:"loadpath.yml"})," is drafted from ",g.jsx("code",{children:"manage.py"})," and"," ",g.jsx("code",{children:"src/features"}),"."]}),g.jsx("li",{children:"Review a git range, or open a pull request so base/head become a three-dot merge-base."})]})]})}),g.jsx("div",{className:"graph-wrap","data-testid":"review-graph",children:p?g.jsx(Lu,{nodes:p.nodes,edges:p.edges}):null})]}),t==="architecture"&&g.jsxs("div",{className:"content","data-testid":"architecture-panel",children:[g.jsx("aside",{className:"brief","data-testid":"architecture-brief",children:m!=null&&m.indexed?g.jsx(Ak,{architecture:m,busy:!!T,onReindex:()=>ve(!1),onReview:we}):g.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."})}),g.jsx("div",{className:"graph-wrap","data-testid":"architecture-graph",children:m!=null&&m.indexed?g.jsx(Lu,{nodes:m.nodes,edges:m.edges}):null})]}),t==="graph"&&g.jsxs("div",{className:"graph-wrap","data-testid":"graph-full",style:{height:"100%"},children:[g.jsxs("div",{className:"graph-modes",children:[g.jsxs("div",{className:"seg","aria-label":"Graph scope",children:[g.jsx("button",{type:"button","aria-pressed":_==="review","data-testid":"graph-mode-review",className:_==="review"?"active":"",onClick:()=>C("review"),children:"This review"}),g.jsx("button",{type:"button","aria-pressed":_==="architecture","data-testid":"graph-mode-architecture",className:_==="architecture"?"active":"",onClick:()=>C("architecture"),children:"Indexed architecture"})]}),g.jsxs("div",{className:"legend","aria-hidden":"true",children:[g.jsxs("span",{children:[g.jsx("i",{})," cheap"]}),g.jsxs("span",{children:[g.jsx("i",{className:"exp"})," expensive"]}),g.jsxs("span",{children:[g.jsx("i",{className:"crit"})," critical"]}),g.jsxs("span",{children:[g.jsx("i",{className:"dash"})," inferred"]})]})]}),Ke.length?g.jsx(Lu,{nodes:Ke,edges:Bt}):g.jsx("p",{className:"empty","data-testid":"graph-empty",children:"Index the repo or run a review first. Click a node to inspect it."})]}),t==="prs"&&g.jsxs("div",{className:"pr-list","data-testid":"pr-list",children:[g.jsxs("div",{className:"pr-toolbar",children:[g.jsxs("label",{className:"field provider",children:[g.jsx("span",{children:"Provider"}),g.jsxs("select",{"data-testid":"pr-provider",value:te,onChange:Z=>se(Z.target.value,ee,j),children:[g.jsx("option",{value:"github",children:"GitHub"}),g.jsx("option",{value:"bitbucket",children:"Bitbucket"})]})]}),g.jsxs("label",{className:"field",children:[g.jsx("span",{children:"Repository"}),g.jsx("input",{"data-testid":"pr-repo",placeholder:"owner/repo",value:ee,onChange:Z=>se(te,Z.target.value,j),spellCheck:!1})]}),g.jsx("button",{type:"button","data-testid":"btn-list-prs",className:"btn",disabled:!!T,onClick:Pe,children:"List PRs"})]}),F.length===0?g.jsxs("div",{className:"empty","data-testid":"pr-empty",children:[g.jsx("h2",{children:"No pull requests loaded"}),g.jsx("p",{children:"Enter an owner/repo, then list open PRs. Reviewing a PR fills base and head from its SHAs."})]}):F.map(Z=>g.jsxs("article",{className:"pr","data-testid":`pr-${Z.number}`,children:[g.jsxs("h3",{children:["#",Z.number," ",Z.title]}),g.jsxs("div",{className:"pr-meta muted",children:[g.jsx("span",{className:`chip ${Z.draft?"":"open"}`,children:Z.draft?"draft":Z.state}),g.jsx("span",{children:Z.author}),g.jsxs("span",{children:[Z.source_branch," → ",Z.target_branch]})]}),g.jsxs("div",{className:"pr-actions",children:[g.jsxs("a",{href:Z.url,target:"_blank",rel:"noreferrer",children:["Open on ",Z.provider]}),g.jsx("button",{type:"button",className:"btn primary","data-testid":`pr-review-${Z.number}`,onClick:()=>{G(Z.base_sha||Z.target_branch,Z.head_sha||Z.source_branch),se(Z.provider,Z.repo,String(Z.number)),r("review")},children:"Review this range"})]})]},`${Z.provider}-${Z.number}`))]}),t==="settings"&&b&&g.jsxs("form",{className:"settings","data-testid":"settings-form",onSubmit:Re,children:[g.jsxs("div",{children:[g.jsx("h1",{children:"Settings"}),g.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."})]}),g.jsxs("section",{className:"settings-card",children:[g.jsx("h2",{children:"Appearance"}),g.jsx("p",{className:"muted",children:"Local to this browser. High contrast is a first-class theme, not an afterthought."}),g.jsx("div",{className:"theme-grid","data-testid":"theme-grid",children:hl.map(Z=>g.jsxs("button",{type:"button",className:A===Z.id?"theme-swatch active":"theme-swatch","data-testid":`theme-${Z.id}`,onClick:()=>re(Z.id),children:[g.jsx("div",{className:"name",children:Z.label}),g.jsx("div",{className:"group",children:Z.group})]},Z.id))})]}),g.jsxs("section",{className:"settings-card",children:[g.jsx("h2",{children:"Source control"}),g.jsx("label",{htmlFor:"github_token",children:"GitHub token"}),g.jsx("input",{id:"github_token",name:"github_token",type:"password",placeholder:"ghp_…",autoComplete:"off"}),g.jsx("label",{htmlFor:"bitbucket_token",children:"Bitbucket token"}),g.jsx("input",{id:"bitbucket_token",name:"bitbucket_token",type:"password",autoComplete:"off"}),g.jsx("label",{htmlFor:"bitbucket_username",children:"Bitbucket username (app passwords)"}),g.jsx("input",{id:"bitbucket_username",name:"bitbucket_username",defaultValue:String(D.bitbucket_username||"")})]}),g.jsxs("section",{className:"settings-card",children:[g.jsx("h2",{children:"Residual AI"}),g.jsx("label",{htmlFor:"ai_provider",children:"Provider"}),g.jsxs("select",{id:"ai_provider",name:"ai_provider",defaultValue:String(((hn=D.ai)==null?void 0:hn.provider)||"none"),children:[g.jsx("option",{value:"none",children:"none (graph only)"}),g.jsx("option",{value:"anthropic",children:"Anthropic"}),g.jsx("option",{value:"openai",children:"OpenAI"}),g.jsx("option",{value:"grok",children:"Grok / xAI"}),g.jsx("option",{value:"deepseek",children:"DeepSeek"}),g.jsx("option",{value:"cursor",children:"Cursor-compatible (OpenAI protocol)"}),g.jsx("option",{value:"ollama",children:"Ollama local"})]}),g.jsx("label",{htmlFor:"ai_api_key",children:"API key"}),g.jsx("input",{id:"ai_api_key",name:"ai_api_key",type:"password",autoComplete:"off"}),g.jsx("label",{htmlFor:"ai_model",children:"Model"}),g.jsx("input",{id:"ai_model",name:"ai_model","data-testid":"ai-model",placeholder:"optional override",defaultValue:String(((Dt=D.ai)==null?void 0:Dt.model)||"")}),g.jsx("label",{htmlFor:"ai_base_url",children:"Base URL"}),g.jsx("input",{id:"ai_base_url",name:"ai_base_url","data-testid":"ai-base-url",placeholder:"optional, OpenAI-compatible",defaultValue:String(((rn=D.ai)==null?void 0:rn.base_url)||"")}),g.jsx("button",{className:"btn primary",type:"submit","data-testid":"btn-save-settings",children:"Save"})]})]})]})]})]})}function Lk({review:t,findings:r,aiNote:o,busy:l,onAskAi:a,onCopy:u,onPost:d}){var p,v,m,x,y,S,_,C;const f=[...new Set(t.confidence.reasons||[])];return g.jsxs(g.Fragment,{children:[g.jsxs("div",{className:`merge-box ${t.confidence.level}`,children:[g.jsxs("div",{className:`level ${t.confidence.level}`,children:[t.confidence.level.toUpperCase()," — ",t.title]}),f.length?g.jsx("ul",{className:"reasons",children:f.map(k=>g.jsx("li",{children:k},k))}):null,t.low_risk?g.jsx("span",{className:"chip",children:"low-risk"}):null,t.change_kinds.map(k=>g.jsx("span",{className:"chip",children:G0(k)},k))]}),g.jsxs("div",{className:"metrics",children:[g.jsxs("div",{className:"metric",children:[g.jsxs("div",{className:"n",children:[t.confidence.covered_sinks,"/",t.confidence.sinks]}),g.jsx("div",{className:"l",children:"Sinks tested"})]}),g.jsxs("div",{className:"metric",children:[g.jsx("div",{className:"n",children:r.length}),g.jsx("div",{className:"l",children:"Findings"})]}),g.jsxs("div",{className:"metric",children:[g.jsx("div",{className:"n",children:t.residuals.length}),g.jsx("div",{className:"l",children:"Residuals"})]})]}),g.jsx("pre",{className:"headline",children:t.headline}),t.index?g.jsxs("details",{className:"section",open:!0,children:[g.jsxs("summary",{children:["Index ",g.jsx("span",{className:"count",children:t.index.counts.nodes})]}),g.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,g.jsxs("details",{className:"section",open:!0,children:[g.jsxs("summary",{children:["Read this ",g.jsx("span",{className:"count",children:t.read_order.length})]}),t.read_order.map((k,E)=>g.jsxs("div",{className:"read-item",children:[g.jsxs("span",{className:"file",children:[E+1,". ",k.path]}),g.jsx("div",{className:"why",children:k.why})]},k.path))]}),g.jsxs("details",{className:"section",children:[g.jsxs("summary",{children:["Clusters ",g.jsx("span",{className:"count",children:t.clusters.length})]}),t.clusters.map(k=>g.jsxs("div",{className:"muted",children:[g.jsx("strong",{children:k.title})," — ",k.files.join(", ")]},k.id))]}),g.jsxs("details",{className:"section",open:!0,children:[g.jsxs("summary",{children:["Architecture ",g.jsx("span",{className:"count",children:r.length})]}),r.length===0?g.jsx("div",{className:"muted",children:t.architecture_note}):r.map(k=>g.jsxs("div",{className:"finding",children:[g.jsx("span",{className:`chip ${k.severity}`,children:k.severity}),k.message]},k.rule+k.message))]}),g.jsx(om,{cards:t.deepening}),g.jsxs("details",{className:"section",open:!0,children:[g.jsxs("summary",{children:["Residual ",g.jsx("span",{className:"count",children:t.residuals.length})]}),g.jsx("p",{className:"muted",children:"AI is only used here, on what the graph could not close."}),t.residuals.map(k=>g.jsx("div",{className:"residual muted",children:k},k))]}),(m=(v=t.evolution)==null?void 0:v.notes)!=null&&m.length||(y=(x=t.evolution)==null?void 0:x.hotspots)!=null&&y.some(k=>k.commits)?g.jsxs("details",{className:"section",children:[g.jsx("summary",{children:"Churn & coupling"}),(((S=t.evolution)==null?void 0:S.notes)||[]).map(k=>g.jsx("div",{className:"muted",children:k},k)),(((_=t.evolution)==null?void 0:_.hotspots)||[]).filter(k=>k.commits).slice(0,6).map(k=>g.jsxs("div",{className:"muted",children:[g.jsx("span",{className:"file",children:k.path})," — ",k.commits," commits, bus factor ",k.bus_factor]},k.path))]}):null,g.jsxs("div",{className:"btn-row",children:[g.jsx("button",{type:"button",className:"btn",disabled:l,onClick:a,children:"Ask configured model"}),g.jsx("button",{type:"button",className:"btn","data-testid":"btn-copy-markdown",onClick:u,children:"Copy markdown"}),g.jsx("button",{type:"button",className:"btn","data-testid":"btn-post-comment",onClick:d,children:"Post to PR"})]}),o?g.jsx("pre",{className:"headline",children:o}):null,g.jsx("div",{className:"kicker",children:"Reviewers"}),g.jsx("div",{className:"muted",children:t.suggested_reviewers.join(", ")||"—"}),(C=t.knowledge_owners)!=null&&C.length?g.jsxs("div",{className:"muted",children:["Knowledge: ",t.knowledge_owners.join(", ")]}):null]})}function Ak({architecture:t,busy:r,onReindex:o,onReview:l}){const a=t.findings.filter(u=>!u.waived);return g.jsxs(g.Fragment,{children:[g.jsxs("div",{className:"merge-box high",children:[g.jsxs("div",{className:"level high",children:["INDEXED — ",t.counts.nodes," nodes"]}),g.jsxs("div",{className:"muted",style:{marginTop:8},children:[t.indexed_at?`Last index ${q0(t.indexed_at)}`:"Indexed",t.incremental?" · incremental":" · full",t.stale?" · stale":"",t.django_boot&&t.django_boot!=="off"?` · Django boot ${t.django_boot}`:""]}),g.jsxs("span",{className:"chip",children:[t.counts.edges," edges"]}),t.has_config?g.jsx("span",{className:"chip",children:"loadpath.yml"}):null]}),g.jsxs("details",{className:"section",open:!0,children:[g.jsx("summary",{children:"Bounded contexts"}),Object.values(t.contexts).map(u=>g.jsxs("div",{className:"muted",children:[g.jsx("strong",{children:u.name})," — ",(u.django_apps||[]).join(", ")||"no apps"," ·"," ",(u.owners||[]).join(", ")||"unowned"]},u.name))]}),g.jsxs("details",{className:"section",children:[g.jsxs("summary",{children:["Rules ",g.jsx("span",{className:"count",children:(t.rules||[]).length})]}),(t.rules||[]).map(u=>g.jsx("div",{className:"muted",children:u},u))]}),g.jsxs("details",{className:"section",open:!0,children:[g.jsxs("summary",{children:["Findings ",g.jsx("span",{className:"count",children:a.length})]}),a.length===0?g.jsx("div",{className:"muted",children:"No architecture rule hits on the full graph."}):a.map(u=>g.jsxs("div",{className:"finding",children:[g.jsx("span",{className:`chip ${u.severity}`,children:u.severity}),u.message]},u.rule+u.message))]}),g.jsx(om,{cards:t.deepening}),g.jsxs("details",{className:"section",open:!0,children:[g.jsx("summary",{children:"Types"}),g.jsx("table",{className:"type-table",children:g.jsx("tbody",{children:Object.entries(t.type_counts||{}).sort((u,d)=>d[1]-u[1]).slice(0,12).map(([u,d])=>g.jsxs("tr",{children:[g.jsx("td",{children:Gu(u)}),g.jsx("td",{children:d})]},u))})})]}),g.jsxs("div",{className:"btn-row",children:[g.jsx("button",{type:"button",className:"btn",disabled:r,onClick:o,"data-testid":"btn-full-reindex",children:"Full reindex"}),g.jsx("button",{type:"button",className:"btn primary",disabled:r,onClick:l,children:"Review against this index"})]})]})}function om({cards:t}){const r=t||[];return r.length?g.jsxs("details",{className:"section",open:!0,"data-testid":"deepening-list",children:[g.jsxs("summary",{children:["Depth ",g.jsx("span",{className:"count",children:r.length})]}),g.jsx("p",{className:"muted",children:"Deepening opportunities: more behaviour behind a smaller interface, at a real seam."}),r.map(o=>g.jsxs("div",{className:"finding","data-testid":"deepening-card",children:[g.jsx("span",{className:`chip ${o.strength}`,children:K0(o.strength)}),o.top?g.jsx("span",{className:"chip",children:"top"}):null,g.jsx("strong",{children:o.title}),g.jsx("div",{className:"why",children:o.message}),o.deletion_test?g.jsxs("div",{className:"muted",children:["Deletion test: ",o.deletion_test]}):null,o.before&&o.after?g.jsxs("div",{className:"muted",children:[o.before," → ",o.after]}):null]},o.rule+o.title))]}):null}im(rm());Y0.createRoot(document.getElementById("root")).render(g.jsx(U.StrictMode,{children:g.jsx(Rk,{})}));export{Dk as L,Ok as a,$k as c,g as j,bk as l,U as r,Gu as t}; diff --git a/src/loadpath/static/assets/index-aoV_COFI.js b/src/loadpath/static/assets/index-aoV_COFI.js new file mode 100644 index 0000000..d686d32 --- /dev/null +++ b/src/loadpath/static/assets/index-aoV_COFI.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 u of a)if(u.type==="childList")for(const d of u.addedNodes)d.tagName==="LINK"&&d.rel==="modulepreload"&&l(d)}).observe(document,{childList:!0,subtree:!0});function i(a){const u={};return a.integrity&&(u.integrity=a.integrity),a.referrerPolicy&&(u.referrerPolicy=a.referrerPolicy),a.crossOrigin==="use-credentials"?u.credentials="include":a.crossOrigin==="anonymous"?u.credentials="omit":u.credentials="same-origin",u}function l(a){if(a.ep)return;a.ep=!0;const u=i(a);fetch(a.href,u)}})();function dp(t){return t&&t.__esModule&&Object.prototype.hasOwnProperty.call(t,"default")?t.default:t}var mu={exports:{}},ri={},yu={exports:{}},Pe={};/** + * @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 Of;function H0(){if(Of)return Pe;Of=1;var t=Symbol.for("react.element"),r=Symbol.for("react.portal"),i=Symbol.for("react.fragment"),l=Symbol.for("react.strict_mode"),a=Symbol.for("react.profiler"),u=Symbol.for("react.provider"),d=Symbol.for("react.context"),f=Symbol.for("react.forward_ref"),p=Symbol.for("react.suspense"),y=Symbol.for("react.memo"),m=Symbol.for("react.lazy"),x=Symbol.iterator;function v(P){return P===null||typeof P!="object"?null:(P=x&&P[x]||P["@@iterator"],typeof P=="function"?P:null)}var S={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},_=Object.assign,C={};function E(P,T,ne){this.props=P,this.context=T,this.refs=C,this.updater=ne||S}E.prototype.isReactComponent={},E.prototype.setState=function(P,T){if(typeof P!="object"&&typeof P!="function"&&P!=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,P,T,"setState")},E.prototype.forceUpdate=function(P){this.updater.enqueueForceUpdate(this,P,"forceUpdate")};function N(){}N.prototype=E.prototype;function R(P,T,ne){this.props=P,this.context=T,this.refs=C,this.updater=ne||S}var k=R.prototype=new N;k.constructor=R,_(k,E.prototype),k.isPureReactComponent=!0;var j=Array.isArray,L=Object.prototype.hasOwnProperty,D={current:null},B={key:!0,ref:!0,__self:!0,__source:!0};function H(P,T,ne){var re,ue={},ce=null,de=null;if(T!=null)for(re in T.ref!==void 0&&(de=T.ref),T.key!==void 0&&(ce=""+T.key),T)L.call(T,re)&&!B.hasOwnProperty(re)&&(ue[re]=T[re]);var Q=arguments.length-2;if(Q===1)ue.children=ne;else if(1>>1,T=A[P];if(0>>1;Pa(ue,F))cea(de,ue)?(A[P]=de,A[ce]=F,P=ce):(A[P]=ue,A[re]=F,P=re);else if(cea(de,F))A[P]=de,A[ce]=F,P=ce;else break e}}return b}function a(A,b){var F=A.sortIndex-b.sortIndex;return F!==0?F:A.id-b.id}if(typeof performance=="object"&&typeof performance.now=="function"){var u=performance;t.unstable_now=function(){return u.now()}}else{var d=Date,f=d.now();t.unstable_now=function(){return d.now()-f}}var p=[],y=[],m=1,x=null,v=3,S=!1,_=!1,C=!1,E=typeof setTimeout=="function"?setTimeout:null,N=typeof clearTimeout=="function"?clearTimeout:null,R=typeof setImmediate<"u"?setImmediate:null;typeof navigator<"u"&&navigator.scheduling!==void 0&&navigator.scheduling.isInputPending!==void 0&&navigator.scheduling.isInputPending.bind(navigator.scheduling);function k(A){for(var b=i(y);b!==null;){if(b.callback===null)l(y);else if(b.startTime<=A)l(y),b.sortIndex=b.expirationTime,r(p,b);else break;b=i(y)}}function j(A){if(C=!1,k(A),!_)if(i(p)!==null)_=!0,V(L);else{var b=i(y);b!==null&&U(j,b.startTime-A)}}function L(A,b){_=!1,C&&(C=!1,N(H),H=-1),S=!0;var F=v;try{for(k(b),x=i(p);x!==null&&(!(x.expirationTime>b)||A&&!Z());){var P=x.callback;if(typeof P=="function"){x.callback=null,v=x.priorityLevel;var T=P(x.expirationTime<=b);b=t.unstable_now(),typeof T=="function"?x.callback=T:x===i(p)&&l(p),k(b)}else l(p);x=i(p)}if(x!==null)var ne=!0;else{var re=i(y);re!==null&&U(j,re.startTime-b),ne=!1}return ne}finally{x=null,v=F,S=!1}}var D=!1,B=null,H=-1,X=5,ee=-1;function Z(){return!(t.unstable_now()-eeA||125P?(A.sortIndex=F,r(y,A),i(p)===null&&A===i(y)&&(C?(N(H),H=-1):C=!0,U(j,F-P))):(A.sortIndex=T,r(p,A),_||S||(_=!0,V(L))),A},t.unstable_shouldYield=Z,t.unstable_wrapCallback=function(A){var b=v;return function(){var F=v;v=b;try{return A.apply(this,arguments)}finally{v=F}}}})(wu)),wu}var Uf;function Y0(){return Uf||(Uf=1,xu.exports=W0()),xu.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 Wf;function X0(){if(Wf)return kt;Wf=1;var t=wi(),r=Y0();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]*$/,m={},x={};function v(e){return p.call(x,e)?!0:p.call(m,e)?!1:y.test(e)?x[e]=!0:(m[e]=!0,!1)}function S(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 _(e,n,o,s){if(n===null||typeof n>"u"||S(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 C(e,n,o,s,c,h,w){this.acceptsBooleans=n===2||n===3||n===4,this.attributeName=s,this.attributeNamespace=c,this.mustUseProperty=o,this.propertyName=e,this.type=n,this.sanitizeURL=h,this.removeEmptyString=w}var E={};"children dangerouslySetInnerHTML defaultValue defaultChecked innerHTML suppressContentEditableWarning suppressHydrationWarning style".split(" ").forEach(function(e){E[e]=new C(e,0,!1,e,null,!1,!1)}),[["acceptCharset","accept-charset"],["className","class"],["htmlFor","for"],["httpEquiv","http-equiv"]].forEach(function(e){var n=e[0];E[n]=new C(n,1,!1,e[1],null,!1,!1)}),["contentEditable","draggable","spellCheck","value"].forEach(function(e){E[e]=new C(e,2,!1,e.toLowerCase(),null,!1,!1)}),["autoReverse","externalResourcesRequired","focusable","preserveAlpha"].forEach(function(e){E[e]=new C(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){E[e]=new C(e,3,!1,e.toLowerCase(),null,!1,!1)}),["checked","multiple","muted","selected"].forEach(function(e){E[e]=new C(e,3,!0,e,null,!1,!1)}),["capture","download"].forEach(function(e){E[e]=new C(e,4,!1,e,null,!1,!1)}),["cols","rows","size","span"].forEach(function(e){E[e]=new C(e,6,!1,e,null,!1,!1)}),["rowSpan","start"].forEach(function(e){E[e]=new C(e,5,!1,e.toLowerCase(),null,!1,!1)});var N=/[\-:]([a-z])/g;function R(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(N,R);E[n]=new C(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(N,R);E[n]=new C(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(N,R);E[n]=new C(n,1,!1,e,"http://www.w3.org/XML/1998/namespace",!1,!1)}),["tabIndex","crossOrigin"].forEach(function(e){E[e]=new C(e,1,!1,e.toLowerCase(),null,!1,!1)}),E.xlinkHref=new C("xlinkHref",1,!1,"xlink:href","http://www.w3.org/1999/xlink",!0,!1),["src","href","action","formAction"].forEach(function(e){E[e]=new C(e,1,!1,e.toLowerCase(),null,!0,!0)});function k(e,n,o,s){var c=E.hasOwnProperty(n)?E[n]:null;(c!==null?c.type!==0:s||!(2I||c[w]!==h[I]){var z=` +`+c[w].replace(" at new "," at ");return e.displayName&&z.includes("")&&(z=z.replace("",e.displayName)),z}while(1<=w&&0<=I);break}}}finally{ne=!1,Error.prepareStackTrace=o}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 ce(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 D:return"Portal";case X:return"Profiler";case H:return"StrictMode";case J:return"Suspense";case M:return"SuspenseList"}if(typeof e=="object")switch(e.$$typeof){case Z:return(e.displayName||"Context")+".Consumer";case ee: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 W:return n=e.displayName||null,n!==null?n:ce(e.type)||"Memo";case V:n=e._payload,e=e._init;try{return ce(e(n))}catch{}}return null}function de(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 ce(n);case 8:return n===H?"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 fe(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 c=o.get,h=o.set;return Object.defineProperty(e,n,{configurable:!0,get:function(){return c.call(this)},set:function(w){s=""+w,h.call(this,w)}}),Object.defineProperty(e,n,{enumerable:o.enumerable}),{getValue:function(){return s},setValue:function(w){s=""+w},stopTracking:function(){e._valueTracker=null,delete e[n]}}}}function ge(e){e._valueTracker||(e._valueTracker=fe(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 pe(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 o=n.checked;return F({},n,{defaultChecked:void 0,defaultValue:void 0,value:void 0,checked:o??e._wrapperState.initialChecked})}function je(e,n){var o=n.defaultValue==null?"":n.defaultValue,s=n.checked!=null?n.checked:n.defaultChecked;o=Q(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 Me(e,n){n=n.checked,n!=null&&k(e,"checked",n,!1)}function ze(e,n){Me(e,n);var o=Q(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")?rt(e,n.type,o):n.hasOwnProperty("defaultValue")&&rt(e,n.type,Q(n.defaultValue)),n.checked==null&&n.defaultChecked!=null&&(e.defaultChecked=!!n.defaultChecked)}function Xe(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 rt(e,n,o){(n!=="number"||pe(e.ownerDocument)!==e)&&(o==null?e.defaultValue=""+e._wrapperState.initialValue:e.defaultValue!==""+o&&(e.defaultValue=""+o))}var Ze=Array.isArray;function Je(e,n,o,s){if(e=e.options,n){n={};for(var c=0;c"+n.valueOf().toString()+"",n=pt.firstChild;e.firstChild;)e.removeChild(e.firstChild);for(;n.firstChild;)e.appendChild(n.firstChild)}});function Ut(e,n){if(n){var o=e.firstChild;if(o&&o===e.lastChild&&o.nodeType===3){o.nodeValue=n;return}}e.textContent=n}var hn={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},Ir=["Webkit","ms","Moz","O"];Object.keys(hn).forEach(function(e){Ir.forEach(function(n){n=n+e.charAt(0).toUpperCase()+e.substring(1),hn[n]=hn[e]})});function er(e,n,o){return n==null||typeof n=="boolean"||n===""?"":o||typeof n!="number"||n===0||hn.hasOwnProperty(e)&&hn[e]?(""+n).trim():n+"px"}function tr(e,n){e=e.style;for(var o in n)if(n.hasOwnProperty(o)){var s=o.indexOf("--")===0,c=er(o,n[o],s);o==="float"&&(o="cssFloat"),s?e.setProperty(o,c):e[o]=c}}var Rr=F({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 jn(e,n){if(n){if(Rr[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 Mn(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 Pn=null;function K(e){return e=e.target||e.srcElement||window,e.correspondingUseElement&&(e=e.correspondingUseElement),e.nodeType===3?e.parentNode:e}var Se=null,Le=null,Nt=null;function Ct(e){if(e=Bo(e)){if(typeof Se!="function")throw Error(i(280));var n=e.stateNode;n&&(n=ns(n),Se(e.stateNode,e.type,n))}}function ji(e){Le?Nt?Nt.push(e):Nt=[e]:Le=e}function Mi(){if(Le){var e=Le,n=Nt;if(Nt=Le=null,Ct(e),n)for(e=0;e>>=0,e===0?32:31-(bl(e)/Al|0)|0}var Ar=64,Dr=4194304;function ir(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 pn(e,n){var o=e.pendingLanes;if(o===0)return 0;var s=0,c=e.suspendedLanes,h=e.pingedLanes,w=o&268435455;if(w!==0){var I=w&~c;I!==0?s=ir(I):(h&=w,h!==0&&(s=ir(h)))}else w=o&~c,w!==0?s=ir(w):h!==0&&(s=ir(h));if(s===0)return 0;if(n!==0&&n!==s&&(n&c)===0&&(c=s&-s,h=n&-n,c>=h||c===16&&(h&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 lr(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 Ol(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=zo),Rc=" ",Tc=!1;function zc(e,n){switch(e){case"keyup":return Am.indexOf(n.keyCode)!==-1;case"keydown":return n.keyCode!==229;case"keypress":case"mousedown":case"focusout":return!0;default:return!1}}function Lc(e){return e=e.detail,typeof e=="object"&&"data"in e?e.data:null}var Hr=!1;function $m(e,n){switch(e){case"compositionend":return Lc(n);case"keypress":return n.which!==32?null:(Tc=!0,Rc);case"textInput":return e=n.data,e===Rc&&Tc?null:e;default:return null}}function Om(e,n){if(Hr)return e==="compositionend"||!Kl&&zc(e,n)?(e=Nc(),Wi=Ul=Ln=null,Hr=!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=Hc(o)}}function Vc(e,n){return e&&n?e===n?!0:e&&e.nodeType===3?!1:n&&n.nodeType===3?Vc(e,n.parentNode):"contains"in e?e.contains(n):e.compareDocumentPosition?!!(e.compareDocumentPosition(n)&16):!1:!1}function Uc(){for(var e=window,n=pe();n instanceof e.HTMLIFrameElement;){try{var o=typeof n.contentWindow.location.href=="string"}catch{o=!1}if(o)e=n.contentWindow;else break;n=pe(e.document)}return n}function Jl(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 Gm(e){var n=Uc(),o=e.focusedElem,s=e.selectionRange;if(n!==o&&o&&o.ownerDocument&&Vc(o.ownerDocument.documentElement,o)){if(s!==null&&Jl(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 c=o.textContent.length,h=Math.min(s.start,c);s=s.end===void 0?h:Math.min(s.end,c),!e.extend&&h>s&&(c=s,s=h,h=c),c=Bc(o,h);var w=Bc(o,s);c&&w&&(e.rangeCount!==1||e.anchorNode!==c.node||e.anchorOffset!==c.offset||e.focusNode!==w.node||e.focusOffset!==w.offset)&&(n=n.createRange(),n.setStart(c.node,c.offset),e.removeAllRanges(),h>s?(e.addRange(n),e.extend(w.node,w.offset)):(n.setEnd(w.node,w.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,Br=null,ea=null,Do=null,ta=!1;function Wc(e,n,o){var s=o.window===o?o.document:o.nodeType===9?o:o.ownerDocument;ta||Br==null||Br!==pe(s)||(s=Br,"selectionStart"in s&&Jl(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}),Do&&Ao(Do,s)||(Do=s,s=Ji(ea,"onSelect"),0Xr||(e.current=ha[Xr],ha[Xr]=null,Xr--)}function Ae(e,n){Xr++,ha[Xr]=e.current,e.current=n}var $n={},at=Dn($n),vt=Dn(!1),ur=$n;function Gr(e,n){var o=e.type.contextTypes;if(!o)return $n;var s=e.stateNode;if(s&&s.__reactInternalMemoizedUnmaskedChildContext===n)return s.__reactInternalMemoizedMaskedChildContext;var c={},h;for(h in o)c[h]=n[h];return s&&(e=e.stateNode,e.__reactInternalMemoizedUnmaskedChildContext=n,e.__reactInternalMemoizedMaskedChildContext=c),c}function xt(e){return e=e.childContextTypes,e!=null}function rs(){$e(vt),$e(at)}function sd(e,n,o){if(at.current!==$n)throw Error(i(168));Ae(at,n),Ae(vt,o)}function ld(e,n,o){var s=e.stateNode;if(n=n.childContextTypes,typeof s.getChildContext!="function")return o;s=s.getChildContext();for(var c in s)if(!(c in n))throw Error(i(108,de(e)||"Unknown",c));return F({},o,s)}function os(e){return e=(e=e.stateNode)&&e.__reactInternalMemoizedMergedChildContext||$n,ur=at.current,Ae(at,e),Ae(vt,vt.current),!0}function ad(e,n,o){var s=e.stateNode;if(!s)throw Error(i(169));o?(e=ld(e,n,ur),s.__reactInternalMemoizedMergedChildContext=e,$e(vt),$e(at),Ae(at,e)):$e(vt),Ae(vt,o)}var mn=null,is=!1,pa=!1;function ud(e){mn===null?mn=[e]:mn.push(e)}function s0(e){is=!0,ud(e)}function On(){if(!pa&&mn!==null){pa=!0;var e=0,n=be;try{var o=mn;for(be=1;e>=w,c-=w,yn=1<<32-Mt(n)+c|o<Ne?(nt=Ee,Ee=null):nt=Ee.sibling;var Te=oe(Y,Ee,G[Ne],ae);if(Te===null){Ee===null&&(Ee=nt);break}e&&Ee&&Te.alternate===null&&n(Y,Ee),$=h(Te,$,Ne),ke===null?we=Te:ke.sibling=Te,ke=Te,Ee=nt}if(Ne===G.length)return o(Y,Ee),Fe&&dr(Y,Ne),we;if(Ee===null){for(;NeNe?(nt=Ee,Ee=null):nt=Ee.sibling;var Gn=oe(Y,Ee,Te.value,ae);if(Gn===null){Ee===null&&(Ee=nt);break}e&&Ee&&Gn.alternate===null&&n(Y,Ee),$=h(Gn,$,Ne),ke===null?we=Gn:ke.sibling=Gn,ke=Gn,Ee=nt}if(Te.done)return o(Y,Ee),Fe&&dr(Y,Ne),we;if(Ee===null){for(;!Te.done;Ne++,Te=G.next())Te=le(Y,Te.value,ae),Te!==null&&($=h(Te,$,Ne),ke===null?we=Te:ke.sibling=Te,ke=Te);return Fe&&dr(Y,Ne),we}for(Ee=s(Y,Ee);!Te.done;Ne++,Te=G.next())Te=he(Ee,Y,Ne,Te.value,ae),Te!==null&&(e&&Te.alternate!==null&&Ee.delete(Te.key===null?Ne:Te.key),$=h(Te,$,Ne),ke===null?we=Te:ke.sibling=Te,ke=Te);return e&&Ee.forEach(function(F0){return n(Y,F0)}),Fe&&dr(Y,Ne),we}function Ye(Y,$,G,ae){if(typeof G=="object"&&G!==null&&G.type===B&&G.key===null&&(G=G.props.children),typeof G=="object"&&G!==null){switch(G.$$typeof){case L:e:{for(var we=G.key,ke=$;ke!==null;){if(ke.key===we){if(we=G.type,we===B){if(ke.tag===7){o(Y,ke.sibling),$=c(ke,G.props.children),$.return=Y,Y=$;break e}}else if(ke.elementType===we||typeof we=="object"&&we!==null&&we.$$typeof===V&&gd(we)===ke.type){o(Y,ke.sibling),$=c(ke,G.props),$.ref=Vo(Y,ke,G),$.return=Y,Y=$;break e}o(Y,ke);break}else n(Y,ke);ke=ke.sibling}G.type===B?($=xr(G.props.children,Y.mode,ae,G.key),$.return=Y,Y=$):(ae=zs(G.type,G.key,G.props,null,Y.mode,ae),ae.ref=Vo(Y,$,G),ae.return=Y,Y=ae)}return w(Y);case D:e:{for(ke=G.key;$!==null;){if($.key===ke)if($.tag===4&&$.stateNode.containerInfo===G.containerInfo&&$.stateNode.implementation===G.implementation){o(Y,$.sibling),$=c($,G.children||[]),$.return=Y,Y=$;break e}else{o(Y,$);break}else n(Y,$);$=$.sibling}$=du(G,Y.mode,ae),$.return=Y,Y=$}return w(Y);case V:return ke=G._init,Ye(Y,$,ke(G._payload),ae)}if(Ze(G))return ye(Y,$,G,ae);if(b(G))return xe(Y,$,G,ae);us(Y,G)}return typeof G=="string"&&G!==""||typeof G=="number"?(G=""+G,$!==null&&$.tag===6?(o(Y,$.sibling),$=c($,G),$.return=Y,Y=$):(o(Y,$),$=cu(G,Y.mode,ae),$.return=Y,Y=$),w(Y)):o(Y,$)}return Ye}var Zr=md(!0),yd=md(!1),cs=Dn(null),ds=null,Jr=null,wa=null;function Sa(){wa=Jr=ds=null}function _a(e){var n=cs.current;$e(cs),e._currentValue=n}function ka(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 eo(e,n){ds=e,wa=Jr=null,e=e.dependencies,e!==null&&e.firstContext!==null&&((e.lanes&n)!==0&&(wt=!0),e.firstContext=null)}function Ot(e){var n=e._currentValue;if(wa!==e)if(e={context:e,memoizedValue:n,next:null},Jr===null){if(ds===null)throw Error(i(308));Jr=e,ds.dependencies={lanes:0,firstContext:e}}else Jr=Jr.next=e;return n}var fr=null;function Ea(e){fr===null?fr=[e]:fr.push(e)}function vd(e,n,o,s){var c=n.interleaved;return c===null?(o.next=o,Ea(n)):(o.next=c.next,c.next=o),n.interleaved=o,xn(e,s)}function xn(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 Fn=!1;function Na(e){e.updateQueue={baseState:e.memoizedState,firstBaseUpdate:null,lastBaseUpdate:null,shared:{pending:null,interleaved:null,lanes:0},effects:null}}function xd(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 wn(e,n){return{eventTime:e,lane:n,tag:0,payload:null,callback:null,next:null}}function Hn(e,n,o){var s=e.updateQueue;if(s===null)return null;if(s=s.shared,(Ie&2)!==0){var c=s.pending;return c===null?n.next=n:(n.next=c.next,c.next=n),s.pending=n,xn(e,o)}return c=s.interleaved,c===null?(n.next=n,Ea(s)):(n.next=c.next,c.next=n),s.interleaved=n,xn(e,o)}function fs(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,$r(e,o)}}function wd(e,n){var o=e.updateQueue,s=e.alternate;if(s!==null&&(s=s.updateQueue,o===s)){var c=null,h=null;if(o=o.firstBaseUpdate,o!==null){do{var w={eventTime:o.eventTime,lane:o.lane,tag:o.tag,payload:o.payload,callback:o.callback,next:null};h===null?c=h=w:h=h.next=w,o=o.next}while(o!==null);h===null?c=h=n:h=h.next=n}else c=h=n;o={baseState:s.baseState,firstBaseUpdate:c,lastBaseUpdate:h,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 hs(e,n,o,s){var c=e.updateQueue;Fn=!1;var h=c.firstBaseUpdate,w=c.lastBaseUpdate,I=c.shared.pending;if(I!==null){c.shared.pending=null;var z=I,q=z.next;z.next=null,w===null?h=q:w.next=q,w=z;var ie=e.alternate;ie!==null&&(ie=ie.updateQueue,I=ie.lastBaseUpdate,I!==w&&(I===null?ie.firstBaseUpdate=q:I.next=q,ie.lastBaseUpdate=z))}if(h!==null){var le=c.baseState;w=0,ie=q=z=null,I=h;do{var oe=I.lane,he=I.eventTime;if((s&oe)===oe){ie!==null&&(ie=ie.next={eventTime:he,lane:0,tag:I.tag,payload:I.payload,callback:I.callback,next:null});e:{var ye=e,xe=I;switch(oe=n,he=o,xe.tag){case 1:if(ye=xe.payload,typeof ye=="function"){le=ye.call(he,le,oe);break e}le=ye;break e;case 3:ye.flags=ye.flags&-65537|128;case 0:if(ye=xe.payload,oe=typeof ye=="function"?ye.call(he,le,oe):ye,oe==null)break e;le=F({},le,oe);break e;case 2:Fn=!0}}I.callback!==null&&I.lane!==0&&(e.flags|=64,oe=c.effects,oe===null?c.effects=[I]:oe.push(I))}else he={eventTime:he,lane:oe,tag:I.tag,payload:I.payload,callback:I.callback,next:null},ie===null?(q=ie=he,z=le):ie=ie.next=he,w|=oe;if(I=I.next,I===null){if(I=c.shared.pending,I===null)break;oe=I,I=oe.next,oe.next=null,c.lastBaseUpdate=oe,c.shared.pending=null}}while(!0);if(ie===null&&(z=le),c.baseState=z,c.firstBaseUpdate=q,c.lastBaseUpdate=ie,n=c.shared.interleaved,n!==null){c=n;do w|=c.lane,c=c.next;while(c!==n)}else h===null&&(c.shared.lanes=0);gr|=w,e.lanes=w,e.memoizedState=le}}function Sd(e,n,o){if(e=n.effects,n.effects=null,e!==null)for(n=0;no?o:4,e(!0);var s=Ia.transition;Ia.transition={};try{e(!1),n()}finally{be=o,Ia.transition=s}}function Fd(){return Ft().memoizedState}function c0(e,n,o){var s=Wn(e);if(o={lane:s,action:o,hasEagerState:!1,eagerState:null,next:null},Hd(e))Bd(n,o);else if(o=vd(e,n,o,s),o!==null){var c=mt();Kt(o,e,s,c),Vd(o,n,s)}}function d0(e,n,o){var s=Wn(e),c={lane:s,action:o,hasEagerState:!1,eagerState:null,next:null};if(Hd(e))Bd(n,c);else{var h=e.alternate;if(e.lanes===0&&(h===null||h.lanes===0)&&(h=n.lastRenderedReducer,h!==null))try{var w=n.lastRenderedState,I=h(w,o);if(c.hasEagerState=!0,c.eagerState=I,Wt(I,w)){var z=n.interleaved;z===null?(c.next=c,Ea(n)):(c.next=z.next,z.next=c),n.interleaved=c;return}}catch{}finally{}o=vd(e,n,c,s),o!==null&&(c=mt(),Kt(o,e,s,c),Vd(o,n,s))}}function Hd(e){var n=e.alternate;return e===Ve||n!==null&&n===Ve}function Bd(e,n){Xo=ms=!0;var o=e.pending;o===null?n.next=n:(n.next=o.next,o.next=n),e.pending=n}function Vd(e,n,o){if((o&4194240)!==0){var s=n.lanes;s&=e.pendingLanes,o|=s,n.lanes=o,$r(e,o)}}var xs={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},f0={readContext:Ot,useCallback:function(e,n){return an().memoizedState=[e,n===void 0?null:n],e},useContext:Ot,useEffect:Td,useImperativeHandle:function(e,n,o){return o=o!=null?o.concat([e]):null,ys(4194308,4,bd.bind(null,n,e),o)},useLayoutEffect:function(e,n){return ys(4194308,4,e,n)},useInsertionEffect:function(e,n){return ys(4,2,e,n)},useMemo:function(e,n){var o=an();return n=n===void 0?null:n,e=e(),o.memoizedState=[e,n],e},useReducer:function(e,n,o){var s=an();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=c0.bind(null,Ve,e),[s.memoizedState,e]},useRef:function(e){var n=an();return e={current:e},n.memoizedState=e},useState:Id,useDebugValue:Da,useDeferredValue:function(e){return an().memoizedState=e},useTransition:function(){var e=Id(!1),n=e[0];return e=u0.bind(null,e[1]),an().memoizedState=e,[n,e]},useMutableSource:function(){},useSyncExternalStore:function(e,n,o){var s=Ve,c=an();if(Fe){if(o===void 0)throw Error(i(407));o=o()}else{if(o=n(),tt===null)throw Error(i(349));(pr&30)!==0||Nd(s,n,o)}c.memoizedState=o;var h={value:o,getSnapshot:n};return c.queue=h,Td(jd.bind(null,s,h,e),[e]),s.flags|=2048,Ko(9,Cd.bind(null,s,h,o,n),void 0,null),o},useId:function(){var e=an(),n=tt.identifierPrefix;if(Fe){var o=vn,s=yn;o=(s&~(1<<32-Mt(s)-1)).toString(32)+o,n=":"+n+"R"+o,o=Go++,0<\/script>",e=e.removeChild(e.firstChild)):typeof s.is=="string"?e=w.createElement(o,{is:s.is}):(e=w.createElement(o),o==="select"&&(w=e,s.multiple?w.multiple=!0:s.size&&(w.size=s.size))):e=w.createElementNS(e,o),e[sn]=n,e[Ho]=s,cf(e,n,!1,!1),n.stateNode=e;e:{switch(w=Mn(o,s),o){case"dialog":De("cancel",e),De("close",e),c=s;break;case"iframe":case"object":case"embed":De("load",e),c=s;break;case"video":case"audio":for(c=0;c<$o.length;c++)De($o[c],e);c=s;break;case"source":De("error",e),c=s;break;case"img":case"image":case"link":De("error",e),De("load",e),c=s;break;case"details":De("toggle",e),c=s;break;case"input":je(e,s),c=Ce(e,s),De("invalid",e);break;case"option":c=s;break;case"select":e._wrapperState={wasMultiple:!!s.multiple},c=F({},s,{value:void 0}),De("invalid",e);break;case"textarea":bt(e,s),c=Vt(e,s),De("invalid",e);break;default:c=s}jn(o,c),I=c;for(h in I)if(I.hasOwnProperty(h)){var z=I[h];h==="style"?tr(e,z):h==="dangerouslySetInnerHTML"?(z=z?z.__html:void 0,z!=null&&Cn(e,z)):h==="children"?typeof z=="string"?(o!=="textarea"||z!=="")&&Ut(e,z):typeof z=="number"&&Ut(e,""+z):h!=="suppressContentEditableWarning"&&h!=="suppressHydrationWarning"&&h!=="autoFocus"&&(a.hasOwnProperty(h)?z!=null&&h==="onScroll"&&De("scroll",e):z!=null&&k(e,h,z,w))}switch(o){case"input":ge(e),Xe(e,s,!1);break;case"textarea":ge(e),lt(e);break;case"option":s.value!=null&&e.setAttribute("value",""+Q(s.value));break;case"select":e.multiple=!!s.multiple,h=s.value,h!=null?Je(e,!!s.multiple,h,!1):s.defaultValue!=null&&Je(e,!!s.multiple,s.defaultValue,!0);break;default:typeof c.onClick=="function"&&(e.onclick=ts)}switch(o){case"button":case"input":case"select":case"textarea":s=!!s.autoFocus;break e;case"img":s=!0;break e;default:s=!1}}s&&(n.flags|=4)}n.ref!==null&&(n.flags|=512,n.flags|=2097152)}return ct(n),null;case 6:if(e&&n.stateNode!=null)ff(e,n,e.memoizedProps,s);else{if(typeof s!="string"&&n.stateNode===null)throw Error(i(166));if(o=hr(Yo.current),hr(ln.current),as(n)){if(s=n.stateNode,o=n.memoizedProps,s[sn]=n,(h=s.nodeValue!==o)&&(e=It,e!==null))switch(e.tag){case 3:es(s.nodeValue,o,(e.mode&1)!==0);break;case 5:e.memoizedProps.suppressHydrationWarning!==!0&&es(s.nodeValue,o,(e.mode&1)!==0)}h&&(n.flags|=4)}else s=(o.nodeType===9?o:o.ownerDocument).createTextNode(s),s[sn]=n,n.stateNode=s}return ct(n),null;case 13:if($e(Be),s=n.memoizedState,e===null||e.memoizedState!==null&&e.memoizedState.dehydrated!==null){if(Fe&&Rt!==null&&(n.mode&1)!==0&&(n.flags&128)===0)pd(),qr(),n.flags|=98560,h=!1;else if(h=as(n),s!==null&&s.dehydrated!==null){if(e===null){if(!h)throw Error(i(318));if(h=n.memoizedState,h=h!==null?h.dehydrated:null,!h)throw Error(i(317));h[sn]=n}else qr(),(n.flags&128)===0&&(n.memoizedState=null),n.flags|=4;ct(n),h=!1}else Yt!==null&&(iu(Yt),Yt=null),h=!0;if(!h)return n.flags&65536?n:null}return(n.flags&128)!==0?(n.lanes=o,n):(s=s!==null,s!==(e!==null&&e.memoizedState!==null)&&s&&(n.child.flags|=8192,(n.mode&1)!==0&&(e===null||(Be.current&1)!==0?qe===0&&(qe=3):au())),n.updateQueue!==null&&(n.flags|=4),ct(n),null);case 4:return to(),Ga(e,n),e===null&&Oo(n.stateNode.containerInfo),ct(n),null;case 10:return _a(n.type._context),ct(n),null;case 17:return xt(n.type)&&rs(),ct(n),null;case 19:if($e(Be),h=n.memoizedState,h===null)return ct(n),null;if(s=(n.flags&128)!==0,w=h.rendering,w===null)if(s)qo(h,!1);else{if(qe!==0||e!==null&&(e.flags&128)!==0)for(e=n.child;e!==null;){if(w=ps(e),w!==null){for(n.flags|=128,qo(h,!1),s=w.updateQueue,s!==null&&(n.updateQueue=s,n.flags|=4),n.subtreeFlags=0,s=o,o=n.child;o!==null;)h=o,e=s,h.flags&=14680066,w=h.alternate,w===null?(h.childLanes=0,h.lanes=e,h.child=null,h.subtreeFlags=0,h.memoizedProps=null,h.memoizedState=null,h.updateQueue=null,h.dependencies=null,h.stateNode=null):(h.childLanes=w.childLanes,h.lanes=w.lanes,h.child=w.child,h.subtreeFlags=0,h.deletions=null,h.memoizedProps=w.memoizedProps,h.memoizedState=w.memoizedState,h.updateQueue=w.updateQueue,h.type=w.type,e=w.dependencies,h.dependencies=e===null?null:{lanes:e.lanes,firstContext:e.firstContext}),o=o.sibling;return Ae(Be,Be.current&1|2),n.child}e=e.sibling}h.tail!==null&&He()>io&&(n.flags|=128,s=!0,qo(h,!1),n.lanes=4194304)}else{if(!s)if(e=ps(w),e!==null){if(n.flags|=128,s=!0,o=e.updateQueue,o!==null&&(n.updateQueue=o,n.flags|=4),qo(h,!0),h.tail===null&&h.tailMode==="hidden"&&!w.alternate&&!Fe)return ct(n),null}else 2*He()-h.renderingStartTime>io&&o!==1073741824&&(n.flags|=128,s=!0,qo(h,!1),n.lanes=4194304);h.isBackwards?(w.sibling=n.child,n.child=w):(o=h.last,o!==null?o.sibling=w:n.child=w,h.last=w)}return h.tail!==null?(n=h.tail,h.rendering=n,h.tail=n.sibling,h.renderingStartTime=He(),n.sibling=null,o=Be.current,Ae(Be,s?o&1|2:o&1),n):(ct(n),null);case 22:case 23:return lu(),s=n.memoizedState!==null,e!==null&&e.memoizedState!==null!==s&&(n.flags|=8192),s&&(n.mode&1)!==0?(Tt&1073741824)!==0&&(ct(n),n.subtreeFlags&6&&(n.flags|=8192)):ct(n),null;case 24:return null;case 25:return null}throw Error(i(156,n.tag))}function w0(e,n){switch(ma(n),n.tag){case 1:return xt(n.type)&&rs(),e=n.flags,e&65536?(n.flags=e&-65537|128,n):null;case 3:return to(),$e(vt),$e(at),Pa(),e=n.flags,(e&65536)!==0&&(e&128)===0?(n.flags=e&-65537|128,n):null;case 5:return ja(n),null;case 13:if($e(Be),e=n.memoizedState,e!==null&&e.dehydrated!==null){if(n.alternate===null)throw Error(i(340));qr()}return e=n.flags,e&65536?(n.flags=e&-65537|128,n):null;case 19:return $e(Be),null;case 4:return to(),null;case 10:return _a(n.type._context),null;case 22:case 23:return lu(),null;case 24:return null;default:return null}}var ks=!1,dt=!1,S0=typeof WeakSet=="function"?WeakSet:Set,me=null;function ro(e,n){var o=e.ref;if(o!==null)if(typeof o=="function")try{o(null)}catch(s){We(e,n,s)}else o.current=null}function Qa(e,n,o){try{o()}catch(s){We(e,n,s)}}var hf=!1;function _0(e,n){if(la=Vi,e=Uc(),Jl(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 c=s.anchorOffset,h=s.focusNode;s=s.focusOffset;try{o.nodeType,h.nodeType}catch{o=null;break e}var w=0,I=-1,z=-1,q=0,ie=0,le=e,oe=null;t:for(;;){for(var he;le!==o||c!==0&&le.nodeType!==3||(I=w+c),le!==h||s!==0&&le.nodeType!==3||(z=w+s),le.nodeType===3&&(w+=le.nodeValue.length),(he=le.firstChild)!==null;)oe=le,le=he;for(;;){if(le===e)break t;if(oe===o&&++q===c&&(I=w),oe===h&&++ie===s&&(z=w),(he=le.nextSibling)!==null)break;le=oe,oe=le.parentNode}le=he}o=I===-1||z===-1?null:{start:I,end:z}}else o=null}o=o||{start:0,end:0}}else o=null;for(aa={focusedElem:e,selectionRange:o},Vi=!1,me=n;me!==null;)if(n=me,e=n.child,(n.subtreeFlags&1028)!==0&&e!==null)e.return=n,me=e;else for(;me!==null;){n=me;try{var ye=n.alternate;if((n.flags&1024)!==0)switch(n.tag){case 0:case 11:case 15:break;case 1:if(ye!==null){var xe=ye.memoizedProps,Ye=ye.memoizedState,Y=n.stateNode,$=Y.getSnapshotBeforeUpdate(n.elementType===n.type?xe:Xt(n.type,xe),Ye);Y.__reactInternalSnapshotBeforeUpdate=$}break;case 3:var G=n.stateNode.containerInfo;G.nodeType===1?G.textContent="":G.nodeType===9&&G.documentElement&&G.removeChild(G.documentElement);break;case 5:case 6:case 4:case 17:break;default:throw Error(i(163))}}catch(ae){We(n,n.return,ae)}if(e=n.sibling,e!==null){e.return=n.return,me=e;break}me=n.return}return ye=hf,hf=!1,ye}function Zo(e,n,o){var s=n.updateQueue;if(s=s!==null?s.lastEffect:null,s!==null){var c=s=s.next;do{if((c.tag&e)===e){var h=c.destroy;c.destroy=void 0,h!==void 0&&Qa(n,o,h)}c=c.next}while(c!==s)}}function Es(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 Ka(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 pf(e){var n=e.alternate;n!==null&&(e.alternate=null,pf(n)),e.child=null,e.deletions=null,e.sibling=null,e.tag===5&&(n=e.stateNode,n!==null&&(delete n[sn],delete n[Ho],delete n[fa],delete n[o0],delete n[i0])),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 gf(e){return e.tag===5||e.tag===3||e.tag===4}function mf(e){e:for(;;){for(;e.sibling===null;){if(e.return===null||gf(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 qa(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=ts));else if(s!==4&&(e=e.child,e!==null))for(qa(e,n,o),e=e.sibling;e!==null;)qa(e,n,o),e=e.sibling}function Za(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(Za(e,n,o),e=e.sibling;e!==null;)Za(e,n,o),e=e.sibling}var it=null,Gt=!1;function Bn(e,n,o){for(o=o.child;o!==null;)yf(e,n,o),o=o.sibling}function yf(e,n,o){if(jt&&typeof jt.onCommitFiberUnmount=="function")try{jt.onCommitFiberUnmount(br,o)}catch{}switch(o.tag){case 5:dt||ro(o,n);case 6:var s=it,c=Gt;it=null,Bn(e,n,o),it=s,Gt=c,it!==null&&(Gt?(e=it,o=o.stateNode,e.nodeType===8?e.parentNode.removeChild(o):e.removeChild(o)):it.removeChild(o.stateNode));break;case 18:it!==null&&(Gt?(e=it,o=o.stateNode,e.nodeType===8?da(e.parentNode,o):e.nodeType===1&&da(e,o),Io(e)):da(it,o.stateNode));break;case 4:s=it,c=Gt,it=o.stateNode.containerInfo,Gt=!0,Bn(e,n,o),it=s,Gt=c;break;case 0:case 11:case 14:case 15:if(!dt&&(s=o.updateQueue,s!==null&&(s=s.lastEffect,s!==null))){c=s=s.next;do{var h=c,w=h.destroy;h=h.tag,w!==void 0&&((h&2)!==0||(h&4)!==0)&&Qa(o,n,w),c=c.next}while(c!==s)}Bn(e,n,o);break;case 1:if(!dt&&(ro(o,n),s=o.stateNode,typeof s.componentWillUnmount=="function"))try{s.props=o.memoizedProps,s.state=o.memoizedState,s.componentWillUnmount()}catch(I){We(o,n,I)}Bn(e,n,o);break;case 21:Bn(e,n,o);break;case 22:o.mode&1?(dt=(s=dt)||o.memoizedState!==null,Bn(e,n,o),dt=s):Bn(e,n,o);break;default:Bn(e,n,o)}}function vf(e){var n=e.updateQueue;if(n!==null){e.updateQueue=null;var o=e.stateNode;o===null&&(o=e.stateNode=new S0),n.forEach(function(s){var c=R0.bind(null,e,s);o.has(s)||(o.add(s),s.then(c,c))})}}function Qt(e,n){var o=n.deletions;if(o!==null)for(var s=0;sc&&(c=w),s&=~h}if(s=c,s=He()-s,s=(120>s?120:480>s?480:1080>s?1080:1920>s?1920:3e3>s?3e3:4320>s?4320:1960*E0(s/1960))-s,10e?16:e,Un===null)var s=!1;else{if(e=Un,Un=null,Ps=0,(Ie&6)!==0)throw Error(i(331));var c=Ie;for(Ie|=4,me=e.current;me!==null;){var h=me,w=h.child;if((me.flags&16)!==0){var I=h.deletions;if(I!==null){for(var z=0;zHe()-tu?yr(e,0):eu|=o),_t(e,n)}function Rf(e,n){n===0&&((e.mode&1)===0?n=1:(n=Dr,Dr<<=1,(Dr&130023424)===0&&(Dr=4194304)));var o=mt();e=xn(e,n),e!==null&&(lr(e,n,o),_t(e,o))}function I0(e){var n=e.memoizedState,o=0;n!==null&&(o=n.retryLane),Rf(e,o)}function R0(e,n){var o=0;switch(e.tag){case 13:var s=e.stateNode,c=e.memoizedState;c!==null&&(o=c.retryLane);break;case 19:s=e.stateNode;break;default:throw Error(i(314))}s!==null&&s.delete(n),Rf(e,o)}var Tf;Tf=function(e,n,o){if(e!==null)if(e.memoizedProps!==n.pendingProps||vt.current)wt=!0;else{if((e.lanes&o)===0&&(n.flags&128)===0)return wt=!1,v0(e,n,o);wt=(e.flags&131072)!==0}else wt=!1,Fe&&(n.flags&1048576)!==0&&cd(n,ls,n.index);switch(n.lanes=0,n.tag){case 2:var s=n.type;_s(e,n),e=n.pendingProps;var c=Gr(n,at.current);eo(n,o),c=Ta(null,n,s,e,c,o);var h=za();return n.flags|=1,typeof c=="object"&&c!==null&&typeof c.render=="function"&&c.$$typeof===void 0?(n.tag=1,n.memoizedState=null,n.updateQueue=null,xt(s)?(h=!0,os(n)):h=!1,n.memoizedState=c.state!==null&&c.state!==void 0?c.state:null,Na(n),c.updater=ws,n.stateNode=c,c._reactInternals=n,Oa(n,s,e,o),n=Va(null,n,s,!0,h,o)):(n.tag=0,Fe&&h&&ga(n),gt(null,n,c,o),n=n.child),n;case 16:s=n.elementType;e:{switch(_s(e,n),e=n.pendingProps,c=s._init,s=c(s._payload),n.type=s,c=n.tag=z0(s),e=Xt(s,e),c){case 0:n=Ba(null,n,s,e,o);break e;case 1:n=rf(null,n,s,e,o);break e;case 11:n=Zd(null,n,s,e,o);break e;case 14:n=Jd(null,n,s,Xt(s.type,e),o);break e}throw Error(i(306,s,""))}return n;case 0:return s=n.type,c=n.pendingProps,c=n.elementType===s?c:Xt(s,c),Ba(e,n,s,c,o);case 1:return s=n.type,c=n.pendingProps,c=n.elementType===s?c:Xt(s,c),rf(e,n,s,c,o);case 3:e:{if(of(n),e===null)throw Error(i(387));s=n.pendingProps,h=n.memoizedState,c=h.element,xd(e,n),hs(n,s,null,o);var w=n.memoizedState;if(s=w.element,h.isDehydrated)if(h={element:s,isDehydrated:!1,cache:w.cache,pendingSuspenseBoundaries:w.pendingSuspenseBoundaries,transitions:w.transitions},n.updateQueue.baseState=h,n.memoizedState=h,n.flags&256){c=no(Error(i(423)),n),n=sf(e,n,s,o,c);break e}else if(s!==c){c=no(Error(i(424)),n),n=sf(e,n,s,o,c);break e}else for(Rt=An(n.stateNode.containerInfo.firstChild),It=n,Fe=!0,Yt=null,o=yd(n,null,s,o),n.child=o;o;)o.flags=o.flags&-3|4096,o=o.sibling;else{if(qr(),s===c){n=Sn(e,n,o);break e}gt(e,n,s,o)}n=n.child}return n;case 5:return _d(n),e===null&&va(n),s=n.type,c=n.pendingProps,h=e!==null?e.memoizedProps:null,w=c.children,ua(s,c)?w=null:h!==null&&ua(s,h)&&(n.flags|=32),nf(e,n),gt(e,n,w,o),n.child;case 6:return e===null&&va(n),null;case 13:return lf(e,n,o);case 4:return Ca(n,n.stateNode.containerInfo),s=n.pendingProps,e===null?n.child=Zr(n,null,s,o):gt(e,n,s,o),n.child;case 11:return s=n.type,c=n.pendingProps,c=n.elementType===s?c:Xt(s,c),Zd(e,n,s,c,o);case 7:return gt(e,n,n.pendingProps,o),n.child;case 8:return gt(e,n,n.pendingProps.children,o),n.child;case 12:return gt(e,n,n.pendingProps.children,o),n.child;case 10:e:{if(s=n.type._context,c=n.pendingProps,h=n.memoizedProps,w=c.value,Ae(cs,s._currentValue),s._currentValue=w,h!==null)if(Wt(h.value,w)){if(h.children===c.children&&!vt.current){n=Sn(e,n,o);break e}}else for(h=n.child,h!==null&&(h.return=n);h!==null;){var I=h.dependencies;if(I!==null){w=h.child;for(var z=I.firstContext;z!==null;){if(z.context===s){if(h.tag===1){z=wn(-1,o&-o),z.tag=2;var q=h.updateQueue;if(q!==null){q=q.shared;var ie=q.pending;ie===null?z.next=z:(z.next=ie.next,ie.next=z),q.pending=z}}h.lanes|=o,z=h.alternate,z!==null&&(z.lanes|=o),ka(h.return,o,n),I.lanes|=o;break}z=z.next}}else if(h.tag===10)w=h.type===n.type?null:h.child;else if(h.tag===18){if(w=h.return,w===null)throw Error(i(341));w.lanes|=o,I=w.alternate,I!==null&&(I.lanes|=o),ka(w,o,n),w=h.sibling}else w=h.child;if(w!==null)w.return=h;else for(w=h;w!==null;){if(w===n){w=null;break}if(h=w.sibling,h!==null){h.return=w.return,w=h;break}w=w.return}h=w}gt(e,n,c.children,o),n=n.child}return n;case 9:return c=n.type,s=n.pendingProps.children,eo(n,o),c=Ot(c),s=s(c),n.flags|=1,gt(e,n,s,o),n.child;case 14:return s=n.type,c=Xt(s,n.pendingProps),c=Xt(s.type,c),Jd(e,n,s,c,o);case 15:return ef(e,n,n.type,n.pendingProps,o);case 17:return s=n.type,c=n.pendingProps,c=n.elementType===s?c:Xt(s,c),_s(e,n),n.tag=1,xt(s)?(e=!0,os(n)):e=!1,eo(n,o),Wd(n,s,c),Oa(n,s,c,o),Va(null,n,s,!0,e,o);case 19:return uf(e,n,o);case 22:return tf(e,n,o)}throw Error(i(156,n.tag))};function zf(e,n){return Li(e,n)}function T0(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 Bt(e,n,o,s){return new T0(e,n,o,s)}function uu(e){return e=e.prototype,!(!e||!e.isReactComponent)}function z0(e){if(typeof e=="function")return uu(e)?1:0;if(e!=null){if(e=e.$$typeof,e===te)return 11;if(e===W)return 14}return 2}function Xn(e,n){var o=e.alternate;return o===null?(o=Bt(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 zs(e,n,o,s,c,h){var w=2;if(s=e,typeof e=="function")uu(e)&&(w=1);else if(typeof e=="string")w=5;else e:switch(e){case B:return xr(o.children,c,h,n);case H:w=8,c|=8;break;case X:return e=Bt(12,o,n,c|2),e.elementType=X,e.lanes=h,e;case J:return e=Bt(13,o,n,c),e.elementType=J,e.lanes=h,e;case M:return e=Bt(19,o,n,c),e.elementType=M,e.lanes=h,e;case U:return Ls(o,c,h,n);default:if(typeof e=="object"&&e!==null)switch(e.$$typeof){case ee:w=10;break e;case Z:w=9;break e;case te:w=11;break e;case W:w=14;break e;case V:w=16,s=null;break e}throw Error(i(130,e==null?e:typeof e,""))}return n=Bt(w,o,n,c),n.elementType=e,n.type=s,n.lanes=h,n}function xr(e,n,o,s){return e=Bt(7,e,s,n),e.lanes=o,e}function Ls(e,n,o,s){return e=Bt(22,e,s,n),e.elementType=U,e.lanes=o,e.stateNode={isHidden:!1},e}function cu(e,n,o){return e=Bt(6,e,null,n),e.lanes=o,e}function du(e,n,o){return n=Bt(4,e.children!==null?e.children:[],e.key,n),n.lanes=o,n.stateNode={containerInfo:e.containerInfo,pendingChildren:null,implementation:e.implementation},n}function L0(e,n,o,s,c){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=sr(0),this.expirationTimes=sr(-1),this.entangledLanes=this.finishedLanes=this.mutableReadLanes=this.expiredLanes=this.pingedLanes=this.suspendedLanes=this.pendingLanes=0,this.entanglements=sr(0),this.identifierPrefix=s,this.onRecoverableError=c,this.mutableSourceEagerHydrationData=null}function fu(e,n,o,s,c,h,w,I,z){return e=new L0(e,n,o,I,z),n===1?(n=1,h===!0&&(n|=8)):n=0,h=Bt(3,null,null,n),e.current=h,h.stateNode=e,h.memoizedState={element:s,isDehydrated:o,cache:null,transitions:null,pendingSuspenseBoundaries:null},Na(h),e}function b0(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(),vu.exports=X0(),vu.exports}var Xf;function G0(){if(Xf)return Hs;Xf=1;var t=fp();return Hs.createRoot=t.createRoot,Hs.hydrateRoot=t.hydrateRoot,Hs}var Q0=G0();function K0(t,r="Request failed"){const i=(t||"").trim();if(!i)return r;try{const a=JSON.parse(i).detail;if(typeof a=="string"&&a.trim())return a;if(Array.isArray(a)){const u=a.map(d=>typeof d=="string"?d:d&&typeof d=="object"&&"msg"in d?String(d.msg):"").filter(Boolean);if(u.length)return u.join("; ")}}catch{}return i}async function yt(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(K0(l,i.statusText||"Request failed"))}return i.json()}const q0=["github_token","bitbucket_token","ai_api_key","ai_model","ai_base_url"],ft={health:()=>yt("/api/health"),settings:()=>yt("/api/settings"),saveSettings:t=>{const r={...t};for(const i of q0)r[i]===""&&delete r[i];return yt("/api/settings",{method:"PUT",body:JSON.stringify(r)})},repos:()=>yt("/api/repos"),browse:t=>yt(`/api/fs${t?`?path=${encodeURIComponent(t)}`:""}`),gitRefs:(t,r=50)=>yt(`/api/git/refs?repo_path=${encodeURIComponent(t)}&limit=${r}`),index:(t,r=!0)=>yt("/api/index",{method:"POST",body:JSON.stringify({repo_path:t,incremental:r})}),indexStatus:t=>yt(`/api/index?repo_path=${encodeURIComponent(t)}`),architecture:t=>yt(`/api/architecture?repo_path=${encodeURIComponent(t)}`),review:(t,r,i,l=!0)=>yt("/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)=>yt("/api/init",{method:"POST",body:JSON.stringify({repo_path:t,overwrite:r})}),postComment:(t,r,i,l)=>yt("/api/prs/comment",{method:"POST",body:JSON.stringify({provider:t,repo:r,number:i,markdown:l})}),graph:(t,r="full")=>yt(`/api/graph?repo_path=${encodeURIComponent(t)}&scope=${r}`),prs:(t,r,i="open")=>yt("/api/prs",{method:"POST",body:JSON.stringify({provider:t,repo:r,state:i})}),residual:t=>yt("/api/ai/residual",{method:"POST",body:JSON.stringify({review:t})})};function Z0(t){return t.replaceAll("_"," ")}function J0(t){return t.replaceAll("_"," ")}function Qu(t){return t.split(".").pop()||t}function ey(t){if(!t)return"";const r=new Date(t);return Number.isNaN(r.getTime())?t:r.toLocaleString()}function Bs(t){return t.replace(/([/\\._:@-])/g,"$1​")}function Pr({className:t,children:r}){return g.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 ty({className:t}){return g.jsxs(Pr,{className:t,children:[g.jsx("path",{d:"M3 3.5h6.5L13 7v5.5H3z"}),g.jsx("path",{d:"M9.5 3.5V7H13"}),g.jsx("path",{d:"M5.5 9.5h5M5.5 11.5h3.5"})]})}function ny({className:t}){return g.jsxs(Pr,{className:t,children:[g.jsx("rect",{x:"2.5",y:"2.5",width:"4.5",height:"4.5",rx:"0.8"}),g.jsx("rect",{x:"9",y:"2.5",width:"4.5",height:"4.5",rx:"0.8"}),g.jsx("rect",{x:"2.5",y:"9",width:"4.5",height:"4.5",rx:"0.8"}),g.jsx("rect",{x:"9",y:"9",width:"4.5",height:"4.5",rx:"0.8"})]})}function ry({className:t}){return g.jsxs(Pr,{className:t,children:[g.jsx("circle",{cx:"4",cy:"8",r:"1.6"}),g.jsx("circle",{cx:"12",cy:"4",r:"1.6"}),g.jsx("circle",{cx:"12",cy:"12",r:"1.6"}),g.jsx("path",{d:"M5.5 7.2 10.4 4.8M5.5 8.8 10.4 11.2"})]})}function oy({className:t}){return g.jsxs(Pr,{className:t,children:[g.jsx("circle",{cx:"4.5",cy:"4",r:"1.4"}),g.jsx("circle",{cx:"4.5",cy:"12",r:"1.4"}),g.jsx("circle",{cx:"11.5",cy:"12",r:"1.4"}),g.jsx("path",{d:"M4.5 5.5v5M4.5 8h4.2a3 3 0 0 1 3 3"})]})}function iy({className:t}){return g.jsxs(Pr,{className:t,children:[g.jsx("circle",{cx:"8",cy:"8",r:"2.1"}),g.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 hp({className:t}){return g.jsx(Pr,{className:t,children:g.jsx("path",{d:"M2.5 4.5h4L8 6h5.5v6.5h-11z"})})}function sy({className:t}){return g.jsx(Pr,{className:t,children:g.jsx("path",{d:"M4 6.5 8 10.5 12 6.5"})})}const ly="modulepreload",ay=function(t,r){return new URL(t,r).href},Gf={},uy=function(r,i,l){let a=Promise.resolve();if(i&&i.length>0){let d=function(m){return Promise.all(m.map(x=>Promise.resolve(x).then(v=>({status:"fulfilled",value:v}),v=>({status:"rejected",reason:v}))))};const f=document.getElementsByTagName("link"),p=document.querySelector("meta[property=csp-nonce]"),y=(p==null?void 0:p.nonce)||(p==null?void 0:p.getAttribute("nonce"));a=d(i.map(m=>{if(m=ay(m,l),m in Gf)return;Gf[m]=!0;const x=m.endsWith(".css"),v=x?'[rel="stylesheet"]':"";if(!!l)for(let C=f.length-1;C>=0;C--){const E=f[C];if(E.href===m&&(!x||E.rel==="stylesheet"))return}else if(document.querySelector(`link[href="${m}"]${v}`))return;const _=document.createElement("link");if(_.rel=x?"stylesheet":ly,x||(_.as="script"),_.crossOrigin="",_.href=m,y&&_.setAttribute("nonce",y),document.head.appendChild(_),x)return new Promise((C,E)=>{_.addEventListener("load",C),_.addEventListener("error",()=>E(new Error(`Unable to preload CSS for ${m}`)))})}))}function u(d){const f=new Event("vite:preloadError",{cancelable:!0});if(f.payload=d,window.dispatchEvent(f),!f.defaultPrevented)throw d}return a.then(d=>{for(const f of d||[])f.status==="rejected"&&u(f.reason);return r().catch(u)})};function Qe(t){if(typeof t=="string"||typeof t=="number")return""+t;let r="";if(Array.isArray(t))for(let i=0,l;i{}};function pl(){for(var t=0,r=arguments.length,i={},l;t=0&&(l=i.slice(a+1),i=i.slice(0,a)),i&&!r.hasOwnProperty(i))throw new Error("unknown type: "+i);return{type:i,name:l}})}Zs.prototype=pl.prototype={constructor:Zs,on:function(t,r){var i=this._,l=dy(t+"",i),a,u=-1,d=l.length;if(arguments.length<2){for(;++u0)for(var i=new Array(a),l=0,a,u;l=0&&(r=t.slice(0,i))!=="xmlns"&&(t=t.slice(i+1)),Kf.hasOwnProperty(r)?{space:Kf[r],local:t}:t}function hy(t){return function(){var r=this.ownerDocument,i=this.namespaceURI;return i===bu&&r.documentElement.namespaceURI===bu?r.createElement(t):r.createElementNS(i,t)}}function py(t){return function(){return this.ownerDocument.createElementNS(t.space,t.local)}}function pp(t){var r=gl(t);return(r.local?py:hy)(r)}function gy(){}function Ku(t){return t==null?gy:function(){return this.querySelector(t)}}function my(t){typeof t!="function"&&(t=Ku(t));for(var r=this._groups,i=r.length,l=new Array(i),a=0;a=k&&(k=R+1);!(L=E[k])&&++k<_;);j._next=L||null}}return d=new Lt(d,l),d._enter=f,d._exit=p,d}function Ay(t){return typeof t=="object"&&"length"in t?t:Array.from(t)}function Dy(){return new Lt(this._exit||this._groups.map(vp),this._parents)}function $y(t,r,i){var l=this.enter(),a=this,u=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())),i==null?u.remove():i(u),l&&a?l.merge(a).order():a}function Oy(t){for(var r=t.selection?t.selection():t,i=this._groups,l=r._groups,a=i.length,u=l.length,d=Math.min(a,u),f=new Array(a),p=0;p=0;)(d=l[a])&&(u&&d.compareDocumentPosition(u)^4&&u.parentNode.insertBefore(d,u),u=d);return this}function Hy(t){t||(t=By);function r(x,v){return x&&v?t(x.__data__,v.__data__):!x-!v}for(var i=this._groups,l=i.length,a=new Array(l),u=0;ur?1:t>=r?0:NaN}function Vy(){var t=arguments[0];return arguments[0]=this,t.apply(null,arguments),this}function Uy(){return Array.from(this)}function Wy(){for(var t=this._groups,r=0,i=t.length;r1?this.each((r==null?nv:typeof r=="function"?ov:rv)(t,r,i??"")):fo(this.node(),t)}function fo(t,r){return t.style.getPropertyValue(r)||xp(t).getComputedStyle(t,null).getPropertyValue(r)}function sv(t){return function(){delete this[t]}}function lv(t,r){return function(){this[t]=r}}function av(t,r){return function(){var i=r.apply(this,arguments);i==null?delete this[t]:this[t]=i}}function uv(t,r){return arguments.length>1?this.each((r==null?sv:typeof r=="function"?av:lv)(t,r)):this.node()[t]}function wp(t){return t.trim().split(/^|\s+/)}function qu(t){return t.classList||new Sp(t)}function Sp(t){this._node=t,this._names=wp(t.getAttribute("class")||"")}Sp.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 _p(t,r){for(var i=qu(t),l=-1,a=r.length;++l=0&&(i=r.slice(l+1),r=r.slice(0,l)),{type:r,name:i}})}function Dv(t){return function(){var r=this.__on;if(r){for(var i=0,l=-1,a=r.length,u;i()=>t;function Au(t,{sourceEvent:r,subject:i,target:l,identifier:a,active:u,x:d,y:f,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:i,enumerable:!0,configurable:!0},target:{value:l,enumerable:!0,configurable:!0},identifier:{value:a,enumerable:!0,configurable:!0},active:{value:u,enumerable:!0,configurable:!0},x:{value:d,enumerable:!0,configurable:!0},y:{value:f,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 Xv(t){return!t.ctrlKey&&!t.button}function Gv(){return this.parentNode}function Qv(t,r){return r??{x:t.x,y:t.y}}function Kv(){return navigator.maxTouchPoints||"ontouchstart"in this}function Mp(){var t=Xv,r=Gv,i=Qv,l=Kv,a={},u=pl("start","drag","end"),d=0,f,p,y,m,x=0;function v(j){j.on("mousedown.drag",S).filter(l).on("touchstart.drag",E).on("touchmove.drag",N,Yv).on("touchend.drag touchcancel.drag",R).style("touch-action","none").style("-webkit-tap-highlight-color","rgba(0,0,0,0)")}function S(j,L){if(!(m||!t.call(this,j,L))){var D=k(this,r.call(this,j,L),j,L,"mouse");D&&(zt(j.view).on("mousemove.drag",_,ci).on("mouseup.drag",C,ci),Cp(j.view),Su(j),y=!1,f=j.clientX,p=j.clientY,D("start",j))}}function _(j){if(uo(j),!y){var L=j.clientX-f,D=j.clientY-p;y=L*L+D*D>x}a.mouse("drag",j)}function C(j){zt(j.view).on("mousemove.drag mouseup.drag",null),jp(j.view,y),uo(j),a.mouse("end",j)}function E(j,L){if(t.call(this,j,L)){var D=j.changedTouches,B=r.call(this,j,L),H=D.length,X,ee;for(X=0;X>8&15|r>>4&240,r>>4&15|r&240,(r&15)<<4|r&15,1):i===8?Us(r>>24&255,r>>16&255,r>>8&255,(r&255)/255):i===4?Us(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 Et(r[1],r[2],r[3],1):(r=Jv.exec(t))?new Et(r[1]*255/100,r[2]*255/100,r[3]*255/100,1):(r=ex.exec(t))?Us(r[1],r[2],r[3],r[4]):(r=tx.exec(t))?Us(r[1]*255/100,r[2]*255/100,r[3]*255/100,r[4]):(r=nx.exec(t))?rh(r[1],r[2]/100,r[3]/100,1):(r=rx.exec(t))?rh(r[1],r[2]/100,r[3]/100,r[4]):qf.hasOwnProperty(t)?eh(qf[t]):t==="transparent"?new Et(NaN,NaN,NaN,0):null}function eh(t){return new Et(t>>16&255,t>>8&255,t&255,1)}function Us(t,r,i,l){return l<=0&&(t=r=i=NaN),new Et(t,r,i,l)}function sx(t){return t instanceof _i||(t=Er(t)),t?(t=t.rgb(),new Et(t.r,t.g,t.b,t.opacity)):new Et}function Du(t,r,i,l){return arguments.length===1?sx(t):new Et(t,r,i,l??1)}function Et(t,r,i,l){this.r=+t,this.g=+r,this.b=+i,this.opacity=+l}Zu(Et,Du,Pp(_i,{brighter(t){return t=t==null?ol:Math.pow(ol,t),new Et(this.r*t,this.g*t,this.b*t,this.opacity)},darker(t){return t=t==null?di:Math.pow(di,t),new Et(this.r*t,this.g*t,this.b*t,this.opacity)},rgb(){return this},clamp(){return new Et(_r(this.r),_r(this.g),_r(this.b),il(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:th,formatHex:th,formatHex8:lx,formatRgb:nh,toString:nh}));function th(){return`#${Sr(this.r)}${Sr(this.g)}${Sr(this.b)}`}function lx(){return`#${Sr(this.r)}${Sr(this.g)}${Sr(this.b)}${Sr((isNaN(this.opacity)?1:this.opacity)*255)}`}function nh(){const t=il(this.opacity);return`${t===1?"rgb(":"rgba("}${_r(this.r)}, ${_r(this.g)}, ${_r(this.b)}${t===1?")":`, ${t})`}`}function il(t){return isNaN(t)?1:Math.max(0,Math.min(1,t))}function _r(t){return Math.max(0,Math.min(255,Math.round(t)||0))}function Sr(t){return t=_r(t),(t<16?"0":"")+t.toString(16)}function rh(t,r,i,l){return l<=0?t=r=i=NaN:i<=0||i>=1?t=r=NaN:r<=0&&(t=NaN),new Zt(t,r,i,l)}function Ip(t){if(t instanceof Zt)return new Zt(t.h,t.s,t.l,t.opacity);if(t instanceof _i||(t=Er(t)),!t)return new Zt;if(t instanceof Zt)return t;t=t.rgb();var r=t.r/255,i=t.g/255,l=t.b/255,a=Math.min(r,i,l),u=Math.max(r,i,l),d=NaN,f=u-a,p=(u+a)/2;return f?(r===u?d=(i-l)/f+(i0&&p<1?0:d,new Zt(d,f,p,t.opacity)}function ax(t,r,i,l){return arguments.length===1?Ip(t):new Zt(t,r,i,l??1)}function Zt(t,r,i,l){this.h=+t,this.s=+r,this.l=+i,this.opacity=+l}Zu(Zt,ax,Pp(_i,{brighter(t){return t=t==null?ol:Math.pow(ol,t),new Zt(this.h,this.s,this.l*t,this.opacity)},darker(t){return t=t==null?di:Math.pow(di,t),new Zt(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,a=2*i-l;return new Et(_u(t>=240?t-240:t+120,a,l),_u(t,a,l),_u(t<120?t+240:t-120,a,l),this.opacity)},clamp(){return new Zt(oh(this.h),Ws(this.s),Ws(this.l),il(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=il(this.opacity);return`${t===1?"hsl(":"hsla("}${oh(this.h)}, ${Ws(this.s)*100}%, ${Ws(this.l)*100}%${t===1?")":`, ${t})`}`}}));function oh(t){return t=(t||0)%360,t<0?t+360:t}function Ws(t){return Math.max(0,Math.min(1,t||0))}function _u(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 Ju=t=>()=>t;function ux(t,r){return function(i){return t+i*r}}function cx(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 dx(t){return(t=+t)==1?Rp:function(r,i){return i-r?cx(r,i,t):Ju(isNaN(r)?i:r)}}function Rp(t,r){var i=r-t;return i?ux(t,i):Ju(isNaN(t)?r:t)}const sl=(function t(r){var i=dx(r);function l(a,u){var d=i((a=Du(a)).r,(u=Du(u)).r),f=i(a.g,u.g),p=i(a.b,u.b),y=Rp(a.opacity,u.opacity);return function(m){return a.r=d(m),a.g=f(m),a.b=p(m),a.opacity=y(m),a+""}}return l.gamma=t,l})(1);function fx(t,r){r||(r=[]);var i=t?Math.min(r.length,t.length):0,l=r.slice(),a;return function(u){for(a=0;ai&&(u=r.slice(i,u),f[d]?f[d]+=u:f[++d]=u),(l=l[0])===(a=a[0])?f[d]?f[d]+=a:f[++d]=a:(f[++d]=null,p.push({i:d,x:cn(l,a)})),i=ku.lastIndex;return i180?m+=360:m-y>180&&(y+=360),v.push({i:x.push(a(x)+"rotate(",null,l)-2,x:cn(y,m)})):m&&x.push(a(x)+"rotate("+m+l)}function f(y,m,x,v){y!==m?v.push({i:x.push(a(x)+"skewX(",null,l)-2,x:cn(y,m)}):m&&x.push(a(x)+"skewX("+m+l)}function p(y,m,x,v,S,_){if(y!==x||m!==v){var C=S.push(a(S)+"scale(",null,",",null,")");_.push({i:C-4,x:cn(y,x)},{i:C-2,x:cn(m,v)})}else(x!==1||v!==1)&&S.push(a(S)+"scale("+x+","+v+")")}return function(y,m){var x=[],v=[];return y=t(y),m=t(m),u(y.translateX,y.translateY,m.translateX,m.translateY,x,v),d(y.rotate,m.rotate,x,v),f(y.skewX,m.skewX,x,v),p(y.scaleX,y.scaleY,m.scaleX,m.scaleY,x,v),y=m=null,function(S){for(var _=-1,C=v.length,E;++_=0&&t._call.call(void 0,r),t=t._next;--ho}function lh(){Nr=(al=hi.now())+ml,ho=si=0;try{jx()}finally{ho=0,Px(),Nr=0}}function Mx(){var t=hi.now(),r=t-al;r>bp&&(ml-=r,al=t)}function Px(){for(var t,r=ll,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:ll=i);li=t,Fu(l)}function Fu(t){if(!ho){si&&(si=clearTimeout(si));var r=t-Nr;r>24?(t<1/0&&(si=setTimeout(lh,t-hi.now()-ml)),oi&&(oi=clearInterval(oi))):(oi||(al=hi.now(),oi=setInterval(Mx,bp)),ho=1,Ap(lh))}}function ah(t,r,i){var l=new ul;return r=r==null?0:+r,l.restart(a=>{l.stop(),t(a+r)},r,i),l}var Ix=pl("start","end","cancel","interrupt"),Rx=[],$p=0,uh=1,Hu=2,el=3,ch=4,Bu=5,tl=6;function yl(t,r,i,l,a,u){var d=t.__transition;if(!d)t.__transition={};else if(i in d)return;Tx(t,i,{name:r,index:l,group:a,on:Ix,tween:Rx,time:u.time,delay:u.delay,duration:u.duration,ease:u.ease,timer:null,state:$p})}function tc(t,r){var i=nn(t,r);if(i.state>$p)throw new Error("too late; already scheduled");return i}function fn(t,r){var i=nn(t,r);if(i.state>el)throw new Error("too late; already running");return i}function nn(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,a;l[r]=i,i.timer=Dp(u,0,i.time);function u(y){i.state=uh,i.timer.restart(d,i.delay,i.time),i.delay<=y&&d(y-i.delay)}function d(y){var m,x,v,S;if(i.state!==uh)return p();for(m in l)if(S=l[m],S.name===i.name){if(S.state===el)return ah(d);S.state===ch?(S.state=tl,S.timer.stop(),S.on.call("interrupt",t,t.__data__,S.index,S.group),delete l[m]):+mHu&&l.state=0&&(r=r.slice(0,i)),!r||r==="start"})}function aw(t,r,i){var l,a,u=lw(r)?tc:fn;return function(){var d=u(this,t),f=d.on;f!==l&&(a=(l=f).copy()).on(r,i),d.on=a}}function uw(t,r){var i=this._id;return arguments.length<2?nn(this.node(),i).on.on(t):this.each(aw(i,t,r))}function cw(t){return function(){var r=this.parentNode;for(var i in this.__transition)if(+i!==t)return;r&&r.removeChild(this)}}function dw(){return this.on("end.remove",cw(this._id))}function fw(t){var r=this._name,i=this._id;typeof t!="function"&&(t=Ku(t));for(var l=this._groups,a=l.length,u=new Array(a),d=0;d()=>t;function Dw(t,{sourceEvent:r,target:i,transform:l,dispatch:a}){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:a}})}function En(t,r,i){this.k=t,this.x=r,this.y=i}En.prototype={constructor:En,scale:function(t){return t===1?this:new En(this.k*t,this.x,this.y)},translate:function(t,r){return t===0&r===0?this:new En(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 vl=new En(1,0,0);Bp.prototype=En.prototype;function Bp(t){for(;!t.__zoom;)if(!(t=t.parentNode))return vl;return t.__zoom}function Eu(t){t.stopImmediatePropagation()}function ii(t){t.preventDefault(),t.stopImmediatePropagation()}function $w(t){return(!t.ctrlKey||t.type==="wheel")&&!t.button}function Ow(){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 dh(){return this.__zoom||vl}function Fw(t){return-t.deltaY*(t.deltaMode===1?.05:t.deltaMode?1:.002)*(t.ctrlKey?10:1)}function Hw(){return navigator.maxTouchPoints||"ontouchstart"in this}function Bw(t,r,i){var l=t.invertX(r[0][0])-i[0][0],a=t.invertX(r[1][0])-i[1][0],u=t.invertY(r[0][1])-i[0][1],d=t.invertY(r[1][1])-i[1][1];return t.translate(a>l?(l+a)/2:Math.min(0,l)||Math.max(0,a),d>u?(u+d)/2:Math.min(0,u)||Math.max(0,d))}function Vp(){var t=$w,r=Ow,i=Bw,l=Fw,a=Hw,u=[0,1/0],d=[[-1/0,-1/0],[1/0,1/0]],f=250,p=Js,y=pl("start","zoom","end"),m,x,v,S=500,_=150,C=0,E=10;function N(M){M.property("__zoom",dh).on("wheel.zoom",H,{passive:!1}).on("mousedown.zoom",X).on("dblclick.zoom",ee).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)")}N.transform=function(M,W,V,U){var A=M.selection?M.selection():M;A.property("__zoom",dh),M!==A?L(M,W,V,U):A.interrupt().each(function(){D(this,arguments).event(U).start().zoom(null,typeof W=="function"?W.apply(this,arguments):W).end()})},N.scaleBy=function(M,W,V,U){N.scaleTo(M,function(){var A=this.__zoom.k,b=typeof W=="function"?W.apply(this,arguments):W;return A*b},V,U)},N.scaleTo=function(M,W,V,U){N.transform(M,function(){var A=r.apply(this,arguments),b=this.__zoom,F=V==null?j(A):typeof V=="function"?V.apply(this,arguments):V,P=b.invert(F),T=typeof W=="function"?W.apply(this,arguments):W;return i(k(R(b,T),F,P),A,d)},V,U)},N.translateBy=function(M,W,V,U){N.transform(M,function(){return i(this.__zoom.translate(typeof W=="function"?W.apply(this,arguments):W,typeof V=="function"?V.apply(this,arguments):V),r.apply(this,arguments),d)},null,U)},N.translateTo=function(M,W,V,U,A){N.transform(M,function(){var b=r.apply(this,arguments),F=this.__zoom,P=U==null?j(b):typeof U=="function"?U.apply(this,arguments):U;return i(vl.translate(P[0],P[1]).scale(F.k).translate(typeof W=="function"?-W.apply(this,arguments):-W,typeof V=="function"?-V.apply(this,arguments):-V),b,d)},U,A)};function R(M,W){return W=Math.max(u[0],Math.min(u[1],W)),W===M.k?M:new En(W,M.x,M.y)}function k(M,W,V){var U=W[0]-V[0]*M.k,A=W[1]-V[1]*M.k;return U===M.x&&A===M.y?M:new En(M.k,U,A)}function j(M){return[(+M[0][0]+ +M[1][0])/2,(+M[0][1]+ +M[1][1])/2]}function L(M,W,V,U){M.on("start.zoom",function(){D(this,arguments).event(U).start()}).on("interrupt.zoom end.zoom",function(){D(this,arguments).event(U).end()}).tween("zoom",function(){var A=this,b=arguments,F=D(A,b).event(U),P=r.apply(A,b),T=V==null?j(P):typeof V=="function"?V.apply(A,b):V,ne=Math.max(P[1][0]-P[0][0],P[1][1]-P[0][1]),re=A.__zoom,ue=typeof W=="function"?W.apply(A,b):W,ce=p(re.invert(T).concat(ne/re.k),ue.invert(T).concat(ne/ue.k));return function(de){if(de===1)de=ue;else{var Q=ce(de),se=ne/Q[2];de=new En(se,T[0]-Q[0]*se,T[1]-Q[1]*se)}F.zoom(null,de)}})}function D(M,W,V){return!V&&M.__zooming||new B(M,W)}function B(M,W){this.that=M,this.args=W,this.active=0,this.sourceEvent=null,this.extent=r.apply(M,W),this.taps=0}B.prototype={event:function(M){return M&&(this.sourceEvent=M),this},start:function(){return++this.active===1&&(this.that.__zooming=this,this.emit("start")),this},zoom:function(M,W){return this.mouse&&M!=="mouse"&&(this.mouse[1]=W.invert(this.mouse[0])),this.touch0&&M!=="touch"&&(this.touch0[1]=W.invert(this.touch0[0])),this.touch1&&M!=="touch"&&(this.touch1[1]=W.invert(this.touch1[0])),this.that.__zoom=W,this.emit("zoom"),this},end:function(){return--this.active===0&&(delete this.that.__zooming,this.emit("end")),this},emit:function(M){var W=zt(this.that).datum();y.call(M,this.that,new Dw(M,{sourceEvent:this.sourceEvent,target:N,transform:this.that.__zoom,dispatch:y}),W)}};function H(M,...W){if(!t.apply(this,arguments))return;var V=D(this,W).event(M),U=this.__zoom,A=Math.max(u[0],Math.min(u[1],U.k*Math.pow(2,l.apply(this,arguments)))),b=qt(M);if(V.wheel)(V.mouse[0][0]!==b[0]||V.mouse[0][1]!==b[1])&&(V.mouse[1]=U.invert(V.mouse[0]=b)),clearTimeout(V.wheel);else{if(U.k===A)return;V.mouse=[b,U.invert(b)],nl(this),V.start()}ii(M),V.wheel=setTimeout(F,_),V.zoom("mouse",i(k(R(U,A),V.mouse[0],V.mouse[1]),V.extent,d));function F(){V.wheel=null,V.end()}}function X(M,...W){if(v||!t.apply(this,arguments))return;var V=M.currentTarget,U=D(this,W,!0).event(M),A=zt(M.view).on("mousemove.zoom",T,!0).on("mouseup.zoom",ne,!0),b=qt(M,V),F=M.clientX,P=M.clientY;Cp(M.view),Eu(M),U.mouse=[b,this.__zoom.invert(b)],nl(this),U.start();function T(re){if(ii(re),!U.moved){var ue=re.clientX-F,ce=re.clientY-P;U.moved=ue*ue+ce*ce>C}U.event(re).zoom("mouse",i(k(U.that.__zoom,U.mouse[0]=qt(re,V),U.mouse[1]),U.extent,d))}function ne(re){A.on("mousemove.zoom mouseup.zoom",null),jp(re.view,U.moved),ii(re),U.event(re).end()}}function ee(M,...W){if(t.apply(this,arguments)){var V=this.__zoom,U=qt(M.changedTouches?M.changedTouches[0]:M,this),A=V.invert(U),b=V.k*(M.shiftKey?.5:2),F=i(k(R(V,b),U,A),r.apply(this,W),d);ii(M),f>0?zt(this).transition().duration(f).call(L,F,U,M):zt(this).call(N.transform,F,U,M)}}function Z(M,...W){if(t.apply(this,arguments)){var V=M.touches,U=V.length,A=D(this,W,M.changedTouches.length===U).event(M),b,F,P,T;for(Eu(M),F=0;F`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.`},pi=[[Number.NEGATIVE_INFINITY,Number.NEGATIVE_INFINITY],[Number.POSITIVE_INFINITY,Number.POSITIVE_INFINITY]],Up=["Enter"," ","Escape"],Wp={"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 po;(function(t){t.Strict="strict",t.Loose="loose"})(po||(po={}));var kr;(function(t){t.Free="free",t.Vertical="vertical",t.Horizontal="horizontal"})(kr||(kr={}));var gi;(function(t){t.Partial="partial",t.Full="full"})(gi||(gi={}));const Yp={inProgress:!1,isValid:null,from:null,fromHandle:null,fromPosition:null,fromNode:null,to:null,toHandle:null,toPosition:null,toNode:null,pointer:null};var Zn;(function(t){t.Bezier="default",t.Straight="straight",t.Step="step",t.SmoothStep="smoothstep",t.SimpleBezier="simplebezier"})(Zn||(Zn={}));var mi;(function(t){t.Arrow="arrow",t.ArrowClosed="arrowclosed"})(mi||(mi={}));var _e;(function(t){t.Left="left",t.Top="top",t.Right="right",t.Bottom="bottom"})(_e||(_e={}));const fh={[_e.Left]:_e.Right,[_e.Right]:_e.Left,[_e.Top]:_e.Bottom,[_e.Bottom]:_e.Top};function Xp(t){return t===null?null:t?"valid":"invalid"}const Gp=t=>!!t&&typeof t=="object"&&"id"in t&&"source"in t&&"target"in t,Vw=t=>!!t&&typeof t=="object"&&"id"in t&&"position"in t&&!("source"in t)&&!("target"in t),rc=t=>!!t&&typeof t=="object"&&"id"in t&&"internals"in t&&!("source"in t)&&!("target"in t),ki=(t,r=[0,0])=>{const{width:i,height:l}=rn(t),a=t.origin??r,u=i*a[0],d=l*a[1];return{x:t.position.x-u,y:t.position.y-d}},Uw=(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((a,u)=>{const d=typeof u=="string";let f=!r.nodeLookup&&!d?u:void 0;return r.nodeLookup&&(f=d?r.nodeLookup.get(u):rc(u)?u:r.nodeLookup.get(u.id)),f?(i=!0,xl(a,cl(f,r.nodeOrigin))):a},{x:1/0,y:1/0,x2:-1/0,y2:-1/0});return i?wl(l):{x:0,y:0,width:0,height:0}},Ei=(t,r={})=>{let i={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))&&(i=xl(i,cl(a)),l=!0)}),l?wl(i):{x:0,y:0,width:0,height:0}},oc=(t,r,[i,l,a]=[0,0,1],u=!1,d=!1)=>{const f=(r.x-i)/a,p=(r.y-l)/a,y=r.width/a,m=r.height/a,x=[];for(const v of t.values()){const{measured:S,selectable:_=!0,hidden:C=!1}=v;if(d&&!_||C)continue;const E=S.width??v.width??v.initialWidth??0,N=S.height??v.height??v.initialHeight??0,{x:R,y:k}=v.internals.positionAbsolute,j=Zp(f,p,y,m,R,k,E,N),L=E*N,D=u&&j>0;(!v.internals.handleBounds||D||j>=L||v.dragging)&&x.push(v)}return x},Ww=(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 Yw(t,r){const i=new Map,l=r!=null&&r.nodes?new Set(r.nodes.map(a=>a.id)):null;return t.forEach(a=>{let u;if(r!=null&&r.includeHiddenNodes){const{width:d,height:f}=rn(a);u=d>0&&f>0}else u=!!(a.measured.width&&a.measured.height&&!a.hidden);u&&(!l||l.has(a.id))&&i.set(a.id,a)}),i}async function Xw({nodes:t,width:r,height:i,panZoom:l,minZoom:a,maxZoom:u},d){if(t.size===0)return!0;const f=Yw(t,d),p=Ei(f),y=sc(p,r,i,(d==null?void 0:d.minZoom)??a,(d==null?void 0:d.maxZoom)??u,(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 Qp({nodeId:t,nextPosition:r,nodeLookup:i,nodeOrigin:l=[0,0],nodeExtent:a,onError:u}){const d=i.get(t),f=d.parentId?i.get(d.parentId):void 0,{x:p,y}=f?f.internals.positionAbsolute:{x:0,y:0},m=d.origin??l;let x=d.extent||a;if(d.extent==="parent"&&!d.expandParent)if(!f)u==null||u("005",tn.error005());else{const{width:S,height:_}=rn(f);S&&_&&(x=[[p,y],[p+S,y+_]])}else f&&jr(d.extent)&&(x=[[d.extent[0][0]+p,d.extent[0][1]+y],[d.extent[1][0]+p,d.extent[1][1]+y]]);const v=jr(x)?Cr(r,x,d.measured):r;return(d.measured.width===void 0||d.measured.height===void 0)&&(u==null||u("015",tn.error015())),{position:{x:v.x-p+(d.measured.width??0)*m[0],y:v.y-y+(d.measured.height??0)*m[1]},positionAbsolute:v}}async function Gw({nodesToRemove:t=[],edgesToRemove:r=[],nodes:i,edges:l,onBeforeDelete:a}){const u=new Set(t.map(v=>v.id)),d=[];for(const v of i){if(v.deletable===!1)continue;const S=u.has(v.id),_=!S&&v.parentId&&d.find(C=>C.id===v.parentId);(S||_)&&d.push(v)}const f=new Set(r.map(v=>v.id)),p=l.filter(v=>v.deletable!==!1),m=Ww(d,p);for(const v of p)f.has(v.id)&&!m.find(_=>_.id===v.id)&&m.push(v);if(!a)return{edges:m,nodes:d};const x=await a({nodes:d,edges:m});return typeof x=="boolean"?x?{edges:m,nodes:d}:{edges:[],nodes:[]}:x}const go=(t,r=0,i=1)=>Math.min(Math.max(t,r),i),Cr=(t={x:0,y:0},r,i)=>({x:go(t.x,r[0][0],r[1][0]-((i==null?void 0:i.width)??0)),y:go(t.y,r[0][1],r[1][1]-((i==null?void 0:i.height)??0))});function Kp(t,r,i){const{width:l,height:a}=rn(i),{x:u,y:d}=i.internals.positionAbsolute;return Cr(t,[[u,d],[u+l,d+a]],r)}const hh=(t,r,i)=>ti?-go(Math.abs(t-i),1,r)/r:0,ic=(t,r,i=15,l=40)=>{const a=hh(t.x,l,r.width-l)*i,u=hh(t.y,l,r.height-l)*i;return[a,u]},xl=(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:i,height:l})=>({x:t,y:r,x2:t+i,y2:r+l}),wl=({x:t,y:r,x2:i,y2:l})=>({x:t,y:r,width:i-t,height:l-r}),yi=(t,r=[0,0])=>{var a,u;const{x:i,y:l}=rc(t)?t.internals.positionAbsolute:ki(t,r);return{x:i,y:l,width:((a=t.measured)==null?void 0:a.width)??t.width??t.initialWidth??0,height:((u=t.measured)==null?void 0:u.height)??t.height??t.initialHeight??0}},cl=(t,r=[0,0])=>{var a,u;const{x:i,y:l}=rc(t)?t.internals.positionAbsolute:ki(t,r);return{x:i,y:l,x2:i+(((a=t.measured)==null?void 0:a.width)??t.width??t.initialWidth??0),y2:l+(((u=t.measured)==null?void 0:u.height)??t.height??t.initialHeight??0)}},qp=(t,r)=>wl(xl(Vu(t),Vu(r))),Zp=(t,r,i,l,a,u,d,f)=>{const p=Math.max(0,Math.min(t+i,a+d)-Math.max(t,a)),y=Math.max(0,Math.min(r+l,u+f)-Math.max(r,u));return Math.ceil(p*y)},dl=(t,r)=>Zp(t.x,t.y,t.width,t.height,r.x,r.y,r.width,r.height),ph=t=>Jt(t.width)&&Jt(t.height)&&Jt(t.x)&&Jt(t.y),Jt=t=>!isNaN(t)&&isFinite(t),Jp=(t,r)=>(i,l)=>{},Ni=(t,r=[1,1])=>({x:r[0]*Math.round(t.x/r[0]),y:r[1]*Math.round(t.y/r[1])}),Ci=({x:t,y:r},[i,l,a],u=!1,d=[1,1])=>{const f={x:(t-i)/a,y:(r-l)/a};return u?Ni(f,d):f},mo=({x:t,y:r},[i,l,a])=>({x:t*a+i,y:r*a+l});function lo(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 Qw(t,r,i){if(typeof t=="string"||typeof t=="number"){const l=lo(t,i),a=lo(t,r);return{top:l,right:a,bottom:l,left:a,x:a*2,y:l*2}}if(typeof t=="object"){const l=lo(t.top??t.y??0,i),a=lo(t.bottom??t.y??0,i),u=lo(t.left??t.x??0,r),d=lo(t.right??t.x??0,r);return{top:l,right:d,bottom:a,left:u,x:u+d,y:l+a}}return{top:0,right:0,bottom:0,left:0,x:0,y:0}}function Kw(t,r,i,l,a,u){const{x:d,y:f}=mo(t,[r,i,l]),{x:p,y}=mo({x:t.x+t.width,y:t.y+t.height},[r,i,l]),m=a-p,x=u-y;return{left:Math.floor(d),top:Math.floor(f),right:Math.floor(m),bottom:Math.floor(x)}}const sc=(t,r,i,l,a,u)=>{const d=Qw(u,r,i),f=(r-d.x)/t.width,p=(i-d.y)/t.height,y=Math.min(f,p),m=go(y,l,a),x=t.x+t.width/2,v=t.y+t.height/2,S=r/2-x*m,_=i/2-v*m,C=Kw(t,S,_,m,r,i),E={left:Math.min(C.left-d.left,0),top:Math.min(C.top-d.top,0),right:Math.min(C.right-d.right,0),bottom:Math.min(C.bottom-d.bottom,0)};return{x:S-E.left+E.right,y:_-E.top+E.bottom,zoom:m}},vi=()=>{var t;return typeof navigator<"u"&&((t=navigator==null?void 0:navigator.userAgent)==null?void 0:t.indexOf("Mac"))>=0};function jr(t){return t!=null&&t!=="parent"}function rn(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 eg(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 tg(t,r={width:0,height:0},i,l,a){const u={...t},d=l.get(i);if(d){const f=d.origin||a;u.x+=d.internals.positionAbsolute.x-(r.width??0)*f[0],u.y+=d.internals.positionAbsolute.y-(r.height??0)*f[1]}return u}function gh(t,r){if(t.size!==r.size)return!1;for(const i of t)if(!r.has(i))return!1;return!0}function qw(){let t,r;return{promise:new Promise((l,a)=>{t=l,r=a}),resolve:t,reject:r}}function Zw(t){return{...Wp,...t||{}}}function ui(t,{snapGrid:r=[0,0],snapToGrid:i=!1,transform:l,containerBounds:a}){const{x:u,y:d}=en(t),f=Ci({x:u-((a==null?void 0:a.left)??0),y:d-((a==null?void 0:a.top)??0)},l),{x:p,y}=i?Ni(f,r):f;return{xSnapped:p,ySnapped:y,...f}}const lc=t=>({width:t.offsetWidth,height:t.offsetHeight}),ng=t=>{var r;return((r=t==null?void 0:t.getRootNode)==null?void 0:r.call(t))||(window==null?void 0:window.document)},Jw=["INPUT","SELECT","TEXTAREA"];function rg(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:Jw.includes(r.nodeName)||r.hasAttribute("contenteditable")||!!r.closest(".nokey")}const og=t=>"clientX"in t,en=(t,r)=>{var u,d;const i=og(t),l=i?t.clientX:(u=t.touches)==null?void 0:u[0].clientX,a=i?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)}},mh=(t,r,i,l,a)=>{const u=r.querySelectorAll(`.${t}`);return!u||!u.length?null:Array.from(u).map(d=>{const f=d.getBoundingClientRect();return{id:d.getAttribute("data-handleid"),type:t,nodeId:a,position:d.getAttribute("data-handlepos"),x:(f.left-i.left)/l,y:(f.top-i.top)/l,...lc(d)}})};function ig({sourceX:t,sourceY:r,targetX:i,targetY:l,sourceControlX:a,sourceControlY:u,targetControlX:d,targetControlY:f}){const p=t*.125+a*.375+d*.375+i*.125,y=r*.125+u*.375+f*.375+l*.125,m=Math.abs(p-t),x=Math.abs(y-r);return[p,y,m,x]}function Gs(t,r){return t>=0?.5*t:r*25*Math.sqrt(-t)}function yh({pos:t,x1:r,y1:i,x2:l,y2:a,c:u}){switch(t){case _e.Left:return[r-Gs(r-l,u),i];case _e.Right:return[r+Gs(l-r,u),i];case _e.Top:return[r,i-Gs(i-a,u)];case _e.Bottom:return[r,i+Gs(a-i,u)]}}function sg({sourceX:t,sourceY:r,sourcePosition:i=_e.Bottom,targetX:l,targetY:a,targetPosition:u=_e.Top,curvature:d=.25}){const[f,p]=yh({pos:i,x1:t,y1:r,x2:l,y2:a,c:d}),[y,m]=yh({pos:u,x1:l,y1:a,x2:t,y2:r,c:d}),[x,v,S,_]=ig({sourceX:t,sourceY:r,targetX:l,targetY:a,sourceControlX:f,sourceControlY:p,targetControlX:y,targetControlY:m});return[`M${t},${r} C${f},${p} ${y},${m} ${l},${a}`,x,v,S,_]}function lg({sourceX:t,sourceY:r,targetX:i,targetY:l}){const a=Math.abs(i-t)/2,u=i0}const n1=({source:t,sourceHandle:r,target:i,targetHandle:l})=>`xy-edge__${t}${r||""}-${i}${l||""}`,r1=(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)),o1=(t,r,i={})=>{var u;if(!t.source||!t.target)return(u=i.onError)==null||u.call(i,"006",tn.error006()),r;const l=i.getEdgeId||n1;let a;return Gp(t)?a={...t}:a={...t,id:l(t)},r1(a,r)?r:(a.sourceHandle===null&&delete a.sourceHandle,a.targetHandle===null&&delete a.targetHandle,r.concat(a))};function ag({sourceX:t,sourceY:r,targetX:i,targetY:l}){const[a,u,d,f]=lg({sourceX:t,sourceY:r,targetX:i,targetY:l});return[`M ${t},${r}L ${i},${l}`,a,u,d,f]}const vh={[_e.Left]:{x:-1,y:0},[_e.Right]:{x:1,y:0},[_e.Top]:{x:0,y:-1},[_e.Bottom]:{x:0,y:1}},i1=({source:t,sourcePosition:r=_e.Bottom,target:i})=>r===_e.Left||r===_e.Right?t.xMath.sqrt(Math.pow(r.x-t.x,2)+Math.pow(r.y-t.y,2));function s1({source:t,sourcePosition:r=_e.Bottom,target:i,targetPosition:l=_e.Top,center:a,offset:u,stepPosition:d}){const f=vh[r],p=vh[l],y={x:t.x+f.x*u,y:t.y+f.y*u},m={x:i.x+p.x*u,y:i.y+p.y*u},x=i1({source:y,sourcePosition:r,target:m}),v=x.x!==0?"x":"y",S=x[v];let _=[],C,E;const N={x:0,y:0},R={x:0,y:0},[,,k,j]=lg({sourceX:t.x,sourceY:t.y,targetX:i.x,targetY:i.y});if(f[v]*p[v]===-1){v==="x"?(C=a.x??y.x+(m.x-y.x)*d,E=a.y??(y.y+m.y)/2):(C=a.x??(y.x+m.x)/2,E=a.y??y.y+(m.y-y.y)*d);const H=[{x:C,y:y.y},{x:C,y:m.y}],X=[{x:y.x,y:E},{x:m.x,y:E}];f[v]===S?_=v==="x"?H:X:_=v==="x"?X:H}else{const H=[{x:y.x,y:m.y}],X=[{x:m.x,y:y.y}];if(v==="x"?_=f.x===S?X:H:_=f.y===S?H:X,r===l){const M=Math.abs(t[v]-i[v]);if(M<=u){const W=Math.min(u-1,u-M);f[v]===S?N[v]=(y[v]>t[v]?-1:1)*W:R[v]=(m[v]>i[v]?-1:1)*W}}if(r!==l){const M=v==="x"?"y":"x",W=f[v]===p[M],V=y[M]>m[M],U=y[M]=J?(C=(ee.x+Z.x)/2,E=_[0].y):(C=_[0].x,E=(ee.y+Z.y)/2)}const L={x:y.x+N.x,y:y.y+N.y},D={x:m.x+R.x,y:m.y+R.y};return[[t,...L.x!==_[0].x||L.y!==_[0].y?[L]:[],..._,...D.x!==_[_.length-1].x||D.y!==_[_.length-1].y?[D]:[],i],C,E,k,j]}function l1(t,r,i,l){const a=Math.min(xh(t,r)/2,xh(r,i)/2,l),{x:u,y:d}=r;if(t.x===u&&u===i.x||t.y===d&&d===i.y)return`L${u} ${d}`;if(t.y===d){const y=t.xi.id===r):t[0])||null}function Wu(t,r){return t?typeof t=="string"?t:`${r?`${r}__`:""}${Object.keys(t).sort().map(l=>`${l}=${t[l]}`).join("&")}`:""}function u1(t,{id:r,defaultColor:i,defaultMarkerStart:l,defaultMarkerEnd:a}){const u=new Set;return t.reduce((d,f)=>([f.markerStart||l,f.markerEnd||a].forEach(p=>{if(p&&typeof p=="object"){const y=Wu(p,r);u.has(y)||(d.push({id:y,color:p.color||i,...p}),u.add(y))}}),d),[]).sort((d,f)=>d.id.localeCompare(f.id))}const ug=1e3,c1=10,ac={nodeOrigin:[0,0],nodeExtent:pi,elevateNodesOnSelect:!0,zIndexMode:"basic",defaults:{}},d1={...ac,checkEquality:!0};function uc(t,r){const i={...t};for(const l in r)r[l]!==void 0&&(i[l]=r[l]);return i}function f1(t,r,i){const l=uc(ac,i);for(const a of t.values())if(a.parentId)dc(a,t,r,l);else{const u=ki(a,l.nodeOrigin),d=jr(a.extent)?a.extent:l.nodeExtent,f=Cr(u,d,rn(a));a.internals.positionAbsolute=f}}function h1(t,r){if(!t.handles)return t.measured?r==null?void 0:r.internals.handleBounds:void 0;const i=[],l=[];for(const a of t.handles){const u={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"?i.push(u):a.type==="target"&&l.push(u)}return{source:i,target:l}}function cc(t){return t==="manual"}function Yu(t,r,i,l={}){var m,x;const a=uc(d1,l),u={i:0},d=new Map(r),f=a!=null&&a.elevateNodesOnSelect&&!cc(a.zIndexMode)?ug:0;let p=t.length>0,y=!1;r.clear(),i.clear();for(const v of t){let S=d.get(v.id);if(a.checkEquality&&v===(S==null?void 0:S.internals.userNode))r.set(v.id,S);else{const _=ki(v,a.nodeOrigin),C=jr(v.extent)?v.extent:a.nodeExtent,E=Cr(_,C,rn(v));S={...a.defaults,...v,measured:{width:(m=v.measured)==null?void 0:m.width,height:(x=v.measured)==null?void 0:x.height},internals:{positionAbsolute:E,handleBounds:h1(v,S),z:cg(v,f,a.zIndexMode),userNode:v}},r.set(v.id,S)}(S.measured===void 0||S.measured.width===void 0||S.measured.height===void 0)&&!S.hidden&&(p=!1),v.parentId&&dc(S,r,i,l,u),y||(y=v.selected??!1)}return{nodesInitialized:p,hasSelectedNodes:y}}function p1(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 dc(t,r,i,l,a){const{elevateNodesOnSelect:u,nodeOrigin:d,nodeExtent:f,zIndexMode:p}=uc(ac,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}p1(t,i),a&&!m.parentId&&m.internals.rootParentIndex===void 0&&p==="auto"&&(m.internals.rootParentIndex=++a.i,m.internals.z=m.internals.z+a.i*c1),a&&m.internals.rootParentIndex!==void 0&&(a.i=m.internals.rootParentIndex);const x=u&&!cc(p)?ug:0,{x:v,y:S,z:_}=g1(t,m,d,f,x,p),{positionAbsolute:C}=t.internals,E=v!==C.x||S!==C.y;(E||_!==t.internals.z)&&r.set(t.id,{...t,internals:{...t.internals,positionAbsolute:E?{x:v,y:S}:C,z:_}})}function cg(t,r,i){const l=Jt(t.zIndex)?t.zIndex:0;return cc(i)?l:l+(t.selected?r:0)}function g1(t,r,i,l,a,u){const{x:d,y:f}=r.internals.positionAbsolute,p=rn(t),y=ki(t,i),m=jr(t.extent)?Cr(y,t.extent,p):y;let x=Cr({x:d+m.x,y:f+m.y},l,p);t.extent==="parent"&&(x=Kp(x,p,r));const v=cg(t,a,u),S=r.internals.z??0;return{x:x.x,y:x.y,z:S>=v?S+1:v}}function fc(t,r,i,l=[0,0]){var d;const a=[],u=new Map;for(const f of t){const p=r.get(f.parentId);if(!p)continue;const y=((d=u.get(f.parentId))==null?void 0:d.expandedRect)??yi(p),m=qp(y,f.rect);u.set(f.parentId,{expandedRect:m,parent:p})}return u.size>0&&u.forEach(({expandedRect:f,parent:p},y)=>{var k;const m=p.internals.positionAbsolute,x=rn(p),v=p.origin??l,S=f.x0||_>0||N||R)&&(a.push({id:y,type:"position",position:{x:p.position.x-S+N,y:p.position.y-_+R}}),(k=i.get(y))==null||k.forEach(j=>{t.some(L=>L.id===j.id)||a.push({id:j.id,type:"position",position:{x:j.position.x+S,y:j.position.y+_}})})),(x.width0){const S=fc(v,r,i,a);y.push(...S)}return{changes:y,updatedInternals:p}}async function y1({delta:t,panZoom:r,transform:i,translateExtent:l,width:a,height:u}){if(!r||!t.x&&!t.y)return!1;const d=await r.setViewportConstrained({x:i[0]+t.x,y:i[1]+t.y,zoom:i[2]},[[0,0],[a,u]],l);return!!d&&(d.x!==i[0]||d.y!==i[1]||d.k!==i[2])}function kh(t,r,i,l,a,u){let d=a;const f=l.get(d)||new Map;l.set(d,f.set(i,r)),d=`${a}-${t}`;const p=l.get(d)||new Map;if(l.set(d,p.set(i,r)),u){d=`${a}-${t}-${u}`;const y=l.get(d)||new Map;l.set(d,y.set(i,r))}}function dg(t,r,i){t.clear(),r.clear();for(const l of i){const{source:a,target:u,sourceHandle:d=null,targetHandle:f=null}=l,p={edgeId:l.id,source:a,target:u,sourceHandle:d,targetHandle:f},y=`${a}-${d}--${u}-${f}`,m=`${u}-${f}--${a}-${d}`;kh("source",p,m,t,a,d),kh("target",p,y,t,u,f),r.set(l.id,l)}}function fg(t,r){if(!t.parentId)return!1;const i=r.get(t.parentId);return i?i.selected?!0:fg(i,r):!1}function Eh(t,r,i){var a;let l=t;do{if((a=l==null?void 0:l.matches)!=null&&a.call(l,r))return!0;if(l===i)return!1;l=l==null?void 0:l.parentElement}while(l);return!1}function v1(t,r,i,l){const a=new Map;for(const[u,d]of t)if((d.selected||d.id===l)&&(!d.parentId||!fg(d,t))&&(d.draggable||r&&typeof d.draggable>"u")){const f=t.get(u);f&&a.set(u,{id:u,position:f.position||{x:0,y:0},distance:{x:i.x-f.internals.positionAbsolute.x,y:i.y-f.internals.positionAbsolute.y},extent:f.extent,parentId:f.parentId,origin:f.origin,expandParent:f.expandParent,internals:{positionAbsolute:f.internals.positionAbsolute||{x:0,y:0}},measured:{width:f.measured.width??0,height:f.measured.height??0}})}return a}function Nu({nodeId:t,dragItems:r,nodeLookup:i,dragging:l=!0}){var d,f,p;const a=[];for(const[y,m]of r){const x=(d=i.get(y))==null?void 0:d.internals.userNode;x&&a.push({...x,position:m.position,dragging:l})}if(!t)return[a[0],a];const u=(f=i.get(t))==null?void 0:f.internals.userNode;return[u?{...u,position:((p=r.get(t))==null?void 0:p.position)||u.position,dragging:l}:a[0],a]}function x1({dragItems:t,snapGrid:r,x:i,y:l}){const a=t.values().next().value;if(!a)return null;const u={x:i-a.distance.x,y:l-a.distance.y},d=Ni(u,r);return{x:d.x-u.x,y:d.y-u.y}}function w1({onNodeMouseDown:t,getStoreItems:r,onDragStart:i,onDrag:l,onDragStop:a}){let u={x:null,y:null},d=0,f=new Map,p=!1,y={x:0,y:0},m=null,x=!1,v=null,S=!1,_=!1,C=null;function E({noDragClassName:R,handleSelector:k,domNode:j,isSelectable:L,nodeId:D,nodeClickDistance:B=0}){v=zt(j);function H({x:te,y:J}){const{nodeLookup:M,nodeExtent:W,snapGrid:V,snapToGrid:U,nodeOrigin:A,onNodeDrag:b,onSelectionDrag:F,onError:P,updateNodePositions:T}=r();u={x:te,y:J};let ne=!1;const re=f.size>1,ue=re&&W?Vu(Ei(f)):null,ce=re&&U?x1({dragItems:f,snapGrid:V,x:te,y:J}):null;for(const[de,Q]of f){if(!M.has(de))continue;let se={x:te-Q.distance.x,y:J-Q.distance.y};U&&(se=ce?{x:Math.round(se.x+ce.x),y:Math.round(se.y+ce.y)}:Ni(se,V));let fe=null;if(re&&W&&!Q.extent&&ue){const{positionAbsolute:pe}=Q.internals,Ce=pe.x-ue.x+W[0][0],je=pe.x+Q.measured.width-ue.x2+W[1][0],Me=pe.y-ue.y+W[0][1],ze=pe.y+Q.measured.height-ue.y2+W[1][1];fe=[[Ce,Me],[je,ze]]}const{position:ge,positionAbsolute:ve}=Qp({nodeId:de,nextPosition:se,nodeLookup:M,nodeExtent:fe||W,nodeOrigin:A,onError:P});ne=ne||Q.position.x!==ge.x||Q.position.y!==ge.y,Q.position=ge,Q.internals.positionAbsolute=ve}if(_=_||ne,!!ne&&(T(f,!0),C&&(l||b||!D&&F))){const[de,Q]=Nu({nodeId:D,dragItems:f,nodeLookup:M});l==null||l(C,f,de,Q),b==null||b(C,de,Q),D||F==null||F(C,Q)}}async function X(){if(!m)return;const{transform:te,panBy:J,autoPanSpeed:M,autoPanOnNodeDrag:W}=r();if(!W){p=!1,cancelAnimationFrame(d);return}const[V,U]=ic(y,m,M);(V!==0||U!==0)&&(u.x=(u.x??0)-V/te[2],u.y=(u.y??0)-U/te[2],await J({x:V,y:U})&&H(u)),d=requestAnimationFrame(X)}function ee(te){var re;const{nodeLookup:J,multiSelectionActive:M,nodesDraggable:W,transform:V,snapGrid:U,snapToGrid:A,selectNodesOnDrag:b,onNodeDragStart:F,onSelectionDragStart:P,unselectNodesAndEdges:T}=r();x=!0,(!b||!L)&&!M&&D&&((re=J.get(D))!=null&&re.selected||T()),L&&b&&D&&(t==null||t(D));const ne=ui(te.sourceEvent,{transform:V,snapGrid:U,snapToGrid:A,containerBounds:m});if(u=ne,f=v1(J,W,ne,D),f.size>0&&(i||F||!D&&P)){const[ue,ce]=Nu({nodeId:D,dragItems:f,nodeLookup:J});i==null||i(te.sourceEvent,f,ue,ce),F==null||F(te.sourceEvent,ue,ce),D||P==null||P(te.sourceEvent,ce)}}const Z=Mp().clickDistance(B).on("start",te=>{const{domNode:J,nodeDragThreshold:M,transform:W,snapGrid:V,snapToGrid:U}=r();m=(J==null?void 0:J.getBoundingClientRect())||null,S=!1,_=!1,C=te.sourceEvent,M===0&&ee(te),u=ui(te.sourceEvent,{transform:W,snapGrid:V,snapToGrid:U,containerBounds:m}),y=en(te.sourceEvent,m)}).on("drag",te=>{const{autoPanOnNodeDrag:J,transform:M,snapGrid:W,snapToGrid:V,nodeDragThreshold:U,nodeLookup:A}=r(),b=ui(te.sourceEvent,{transform:M,snapGrid:W,snapToGrid:V,containerBounds:m});if(C=te.sourceEvent,(te.sourceEvent.type==="touchmove"&&te.sourceEvent.touches.length>1||D&&!A.has(D))&&(S=!0),!S){if(!p&&J&&x&&(p=!0,X()),!x){const F=en(te.sourceEvent,m),P=F.x-y.x,T=F.y-y.y;Math.sqrt(P*P+T*T)>U&&ee(te)}(u.x!==b.xSnapped||u.y!==b.ySnapped)&&f&&x&&(y=en(te.sourceEvent,m),H(b))}}).on("end",te=>{if(!x||S){S&&f.size>0&&r().updateNodePositions(f,!1);return}if(p=!1,x=!1,cancelAnimationFrame(d),f.size>0){const{nodeLookup:J,updateNodePositions:M,onNodeDragStop:W,onSelectionDragStop:V}=r();if(_&&(M(f,!1),_=!1),a||W||!D&&V){const[U,A]=Nu({nodeId:D,dragItems:f,nodeLookup:J,dragging:!1});a==null||a(te.sourceEvent,f,U,A),W==null||W(te.sourceEvent,U,A),D||V==null||V(te.sourceEvent,A)}}}).filter(te=>{const J=te.target;return!te.button&&(!R||!Eh(J,`.${R}`,j))&&(!k||Eh(J,k,j))});v.call(Z)}function N(){v==null||v.on(".drag",null)}return{update:E,destroy:N}}function S1(t,r,i){const l=[],a={x:t.x-i,y:t.y-i,width:i*2,height:i*2};for(const u of r.values())dl(a,yi(u))>0&&l.push(u);return l}const _1=250;function k1(t,r,i,l){var f,p;let a=[],u=1/0;const d=S1(t,i,r+_1);for(const y of d){const m=[...((f=y.internals.handleBounds)==null?void 0:f.source)??[],...((p=y.internals.handleBounds)==null?void 0:p.target)??[]];for(const x of m){if(l.nodeId===x.nodeId&&l.type===x.type&&l.id===x.id)continue;const{x:v,y:S}=Mr(y,x,x.position,!0),_=Math.sqrt(Math.pow(v-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 hg(t,r,i,l,a,u=!1){var y,m,x;const d=l.get(t);if(!d)return null;const f=a==="strict"?(y=d.internals.handleBounds)==null?void 0:y[r]:[...((m=d.internals.handleBounds)==null?void 0:m.source)??[],...((x=d.internals.handleBounds)==null?void 0:x.target)??[]],p=(i?f==null?void 0:f.find(v=>v.id===i):f==null?void 0:f[0])??null;return p&&u?{...p,...Mr(d,p,p.position,!0)}:p}function pg(t,r){return t||(r!=null&&r.classList.contains("target")?"target":r!=null&&r.classList.contains("source")?"source":null)}function E1(t,r){let i=null;return r?i=!0:t&&!r&&(i=!1),i}const gg=()=>!0;function N1(t,{connectionMode:r,connectionRadius:i,handleId:l,nodeId:a,edgeUpdaterType:u,isTarget:d,domNode:f,nodeLookup:p,lib:y,autoPanOnConnect:m,flowId:x,panBy:v,cancelConnection:S,onConnectStart:_,onConnect:C,onConnectEnd:E,isValidConnection:N=gg,onReconnectEnd:R,updateConnection:k,getTransform:j,getFromHandle:L,autoPanSpeed:D,dragThreshold:B=1,handleDomNode:H}){const X=ng(t.target);let ee=0,Z;const{x:te,y:J}=en(t),M=pg(u,H),W=f==null?void 0:f.getBoundingClientRect();let V=!1;if(!W||!M)return;const U=hg(a,M,l,p,r);if(!U)return;let A=en(t,W),b=!1,F=null,P=!1,T=null;function ne(){if(!m||!W)return;const[ge,ve]=ic(A,W,D);v({x:ge,y:ve}),ee=requestAnimationFrame(ne)}const re={...U,nodeId:a,type:M,position:U.position},ue=p.get(a);let de={inProgress:!0,isValid:null,from:Mr(ue,re,_e.Left,!0),fromHandle:re,fromPosition:re.position,fromNode:ue,to:A,toHandle:null,toPosition:fh[re.position],toNode:null,pointer:A};function Q(){V=!0,k(de),_==null||_(t,{nodeId:a,handleId:l,handleType:M})}B===0&&Q();function se(ge){if(!V){const{x:ze,y:Xe}=en(ge),rt=ze-te,Ze=Xe-J;if(!(rt*rt+Ze*Ze>B*B))return;Q()}if(!L()||!re){fe(ge);return}const ve=j();A=en(ge,W),Z=k1(Ci(A,ve,!1,[1,1]),i,p,re),b||(ne(),b=!0);const pe=mg(ge,{handle:Z,connectionMode:r,fromNodeId:a,fromHandleId:l,fromType:d?"target":"source",isValidConnection:N,doc:X,lib:y,flowId:x,nodeLookup:p});T=pe.handleDomNode,F=pe.connection,P=E1(!!Z,pe.isValid);const Ce=p.get(a),je=Ce?Mr(Ce,re,_e.Left,!0):de.from,Me={...de,from:je,isValid:P,to:pe.toHandle&&P?mo({x:pe.toHandle.x,y:pe.toHandle.y},ve):A,toHandle:pe.toHandle,toPosition:P&&pe.toHandle?pe.toHandle.position:fh[re.position],toNode:pe.toHandle?p.get(pe.toHandle.nodeId):null,pointer:A};k(Me),de=Me}function fe(ge){if(!("touches"in ge&&ge.touches.length>0)){if(V){(Z||T)&&F&&P&&(C==null||C(F));const{inProgress:ve,...pe}=de,Ce={...pe,toPosition:de.toHandle?de.toPosition:null};E==null||E(ge,Ce),u&&(R==null||R(ge,Ce))}S(),cancelAnimationFrame(ee),b=!1,P=!1,F=null,T=null,X.removeEventListener("mousemove",se),X.removeEventListener("mouseup",fe),X.removeEventListener("touchmove",se),X.removeEventListener("touchend",fe)}}X.addEventListener("mousemove",se),X.addEventListener("mouseup",fe),X.addEventListener("touchmove",se),X.addEventListener("touchend",fe)}function mg(t,{handle:r,connectionMode:i,fromNodeId:l,fromHandleId:a,fromType:u,doc:d,lib:f,flowId:p,isValidConnection:y=gg,nodeLookup:m}){const x=u==="target",v=r?d.querySelector(`.${f}-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:_}=en(t),C=d.elementFromPoint(S,_),E=C!=null&&C.classList.contains(`${f}-flow__handle`)?C:v,N={handleDomNode:E,isValid:!1,connection:null,toHandle:null};if(E){const R=pg(void 0,E),k=E.getAttribute("data-nodeid"),j=E.getAttribute("data-handleid"),L=E.classList.contains("connectable"),D=E.classList.contains("connectableend");if(!k||!R)return N;const B={source:x?k:l,sourceHandle:x?j:a,target:x?l:k,targetHandle:x?a:j};N.connection=B;const X=L&&D&&(i===po.Strict?x&&R==="source"||!x&&R==="target":k!==l||j!==a);N.isValid=X&&y(B),N.toHandle=hg(k,R,j,m,i,!0)}return N}const Xu={onPointerDown:N1,isValid:mg};function C1({domNode:t,panZoom:r,getTransform:i,getViewScale:l}){const a=zt(t);function u({translateExtent:f,width:p,height:y,zoomStep:m=1,pannable:x=!0,zoomable:v=!0,inversePan:S=!1}){const _=k=>{if(k.sourceEvent.type!=="wheel"||!r)return;const j=i(),L=k.sourceEvent.ctrlKey&&vi()?10:1,D=-k.sourceEvent.deltaY*(k.sourceEvent.deltaMode===1?.05:k.sourceEvent.deltaMode?1:.002)*m,B=j[2]*Math.pow(2,D*L);r.scaleTo(B)};let C=[0,0];const E=k=>{(k.sourceEvent.type==="mousedown"||k.sourceEvent.type==="touchstart")&&(C=[k.sourceEvent.clientX??k.sourceEvent.touches[0].clientX,k.sourceEvent.clientY??k.sourceEvent.touches[0].clientY])},N=k=>{const j=i();if(k.sourceEvent.type!=="mousemove"&&k.sourceEvent.type!=="touchmove"||!r)return;const L=[k.sourceEvent.clientX??k.sourceEvent.touches[0].clientX,k.sourceEvent.clientY??k.sourceEvent.touches[0].clientY],D=[L[0]-C[0],L[1]-C[1]];C=L;const B=l()*Math.max(j[2],Math.log(j[2]))*(S?-1:1),H={x:j[0]-D[0]*B,y:j[1]-D[1]*B},X=[[0,0],[p,y]];r.setViewportConstrained({x:H.x,y:H.y,zoom:j[2]},X,f)},R=Vp().on("start",E).on("zoom",x?N:null).on("zoom.wheel",v?_:null);a.call(R,{})}function d(){a.on("zoom",null)}return{update:u,destroy:d,pointer:qt}}const Sl=t=>({x:t.x,y:t.y,zoom:t.k}),Cu=({x:t,y:r,zoom:i})=>vl.translate(t,r).scale(i),qn=(t,r)=>t.target.closest(`.${r}`),yg=(t,r)=>r===2&&Array.isArray(t)&&t.includes(2),j1=t=>((t*=2)<=1?t*t*t:(t-=2)*t*t+2)/2,ju=(t,r=0,i=j1,l=()=>{})=>{const a=typeof r=="number"&&r>0;return a||l(),a?t.transition().duration(r).ease(i).on("end",l):t},vg=t=>{const r=t.ctrlKey&&vi()?10:1;return-t.deltaY*(t.deltaMode===1?.05:t.deltaMode?1:.002)*r};function M1({zoomPanValues:t,noWheelClassName:r,d3Selection:i,d3Zoom:l,panOnScrollMode:a,panOnScrollSpeed:u,zoomOnPinch:d,onPanZoomStart:f,onPanZoom:p,onPanZoomEnd:y}){return m=>{if(qn(m,r))return m.ctrlKey&&m.preventDefault(),!1;m.preventDefault(),m.stopImmediatePropagation();const x=i.property("__zoom").k||1;if(m.ctrlKey&&d){const E=qt(m),N=vg(m),R=x*Math.pow(2,N);l.scaleTo(i,R,E,m);return}const v=m.deltaMode===1?20:1;let S=a===kr.Vertical?0:m.deltaX*v,_=a===kr.Horizontal?0:m.deltaY*v;!vi()&&m.shiftKey&&a!==kr.Vertical&&(S=m.deltaY*v,_=0),l.translateBy(i,-(S/x)*u,-(_/x)*u,{internal:!0});const C=Sl(i.property("__zoom"));clearTimeout(t.panScrollTimeout),t.isPanScrolling?p==null||p(m,C):(t.isPanScrolling=!0,f==null||f(m,C)),t.panScrollTimeout=setTimeout(()=>{y==null||y(m,C),t.isPanScrolling=!1},150)}}function P1({noWheelClassName:t,preventScrolling:r,d3ZoomHandler:i}){return function(l,a){const u=l.type==="wheel",d=!r&&u&&!l.ctrlKey,f=qn(l,t);if(l.ctrlKey&&u&&f&&l.preventDefault(),d||f)return null;l.preventDefault(),i.call(this,l,a)}}function I1({zoomPanValues:t,onDraggingChange:r,onPanZoomStart:i}){return l=>{var u,d,f;if((u=l.sourceEvent)!=null&&u.internal)return;const a=Sl(l.transform);t.mouseButton=((d=l.sourceEvent)==null?void 0:d.button)||0,t.isZoomingOrPanning=!0,t.prevViewport=a,((f=l.sourceEvent)==null?void 0:f.type)==="mousedown"&&r(!0),i&&(i==null||i(l.sourceEvent,a))}}function R1({zoomPanValues:t,panOnDrag:r,onPaneContextMenu:i,onTransformChange:l,onPanZoom:a}){return u=>{var d,f;t.usedRightMouseButton=!!(i&&yg(r,t.mouseButton??0)),(d=u.sourceEvent)!=null&&d.sync||l([u.transform.x,u.transform.y,u.transform.k]),a&&!((f=u.sourceEvent)!=null&&f.internal)&&(a==null||a(u.sourceEvent,Sl(u.transform)))}}function T1({zoomPanValues:t,panOnDrag:r,panOnScroll:i,onDraggingChange:l,onPanZoomEnd:a,onPaneContextMenu:u}){return d=>{var f;if(!((f=d.sourceEvent)!=null&&f.internal)&&(t.isZoomingOrPanning=!1,u&&yg(r,t.mouseButton??0)&&!t.usedRightMouseButton&&d.sourceEvent&&u(d.sourceEvent),t.usedRightMouseButton=!1,l(!1),a)){const p=Sl(d.transform);t.prevViewport=p,clearTimeout(t.timerId),t.timerId=setTimeout(()=>{a==null||a(d.sourceEvent,p)},i?150:0)}}}function z1({panActivationKeyPressed:t,zoomActivationKeyPressed:r,zoomOnScroll:i,zoomOnPinch:l,panOnDrag:a,panOnScroll:u,zoomOnDoubleClick:d,userSelectionActive:f,noWheelClassName:p,noPanClassName:y,lib:m,connectionInProgress:x}){return v=>{var N;const S=r||i,_=l&&v.ctrlKey,C=v.type==="wheel";if(v.button===1&&v.type==="mousedown"&&(qn(v,`${m}-flow__node`)||qn(v,`${m}-flow__edge`)||qn(v,`${m}-flow__selection`)||qn(v,`${m}-flow__nodesselection`)))return!0;if(!a&&!S&&!u&&!d&&!l||f||x&&!C||qn(v,p)&&C||qn(v,y)&&(!C||u&&C&&!r)||!l&&v.ctrlKey&&C)return!1;if(!l&&v.type==="touchstart"&&((N=v.touches)==null?void 0:N.length)>1)return v.preventDefault(),!1;if(!S&&!u&&!_&&C||!a&&(v.type==="mousedown"||v.type==="touchstart")||Array.isArray(a)&&!a.includes(v.button)&&v.type==="mousedown")return!1;const E=Array.isArray(a)&&a.includes(v.button)||!v.button||v.button<=1;return(!v.ctrlKey||C||t)&&E}}function L1({domNode:t,minZoom:r,maxZoom:i,translateExtent:l,viewport:a,onPanZoom:u,onPanZoomStart:d,onPanZoomEnd:f,onDraggingChange:p}){const y={isZoomingOrPanning:!1,usedRightMouseButton:!1,prevViewport:{},mouseButton:0,timerId:void 0,panScrollTimeout:void 0,isPanScrolling:!1},m=t.getBoundingClientRect();let x=[[0,0],[m.width,m.height]];const v=typeof ResizeObserver<"u"?new ResizeObserver(J=>{const M=J[0];M&&(x=[[0,0],[M.contentRect.width,M.contentRect.height]])}):null;v==null||v.observe(t);const S=Vp().extent(()=>x).scaleExtent([r,i]).translateExtent(l),_=zt(t).call(S);j({x:a.x,y:a.y,zoom:go(a.zoom,r,i)},[[0,0],[m.width,m.height]],l);const C=_.on("wheel.zoom"),E=_.on("dblclick.zoom");S.wheelDelta(vg);async function N(J,M){return _?new Promise(W=>{S==null||S.interpolate((M==null?void 0:M.interpolate)==="linear"?ai:Js).transform(ju(_,M==null?void 0:M.duration,M==null?void 0:M.ease,()=>W(!0)),J)}):!1}function R({noWheelClassName:J,noPanClassName:M,onPaneContextMenu:W,userSelectionActive:V,panOnScroll:U,panOnDrag:A,panOnScrollMode:b,panOnScrollSpeed:F,preventScrolling:P,zoomOnPinch:T,zoomOnScroll:ne,zoomOnDoubleClick:re,panActivationKeyPressed:ue=!1,zoomActivationKeyPressed:ce,lib:de,onTransformChange:Q,connectionInProgress:se,paneClickDistance:fe,selectionOnDrag:ge}){V&&!y.isZoomingOrPanning&&k();const ve=U&&!ce&&!V;S.clickDistance(ge?1/0:!Jt(fe)||fe<0?0:fe);const pe=ve?M1({zoomPanValues:y,noWheelClassName:J,d3Selection:_,d3Zoom:S,panOnScrollMode:b,panOnScrollSpeed:F,zoomOnPinch:T,onPanZoomStart:d,onPanZoom:u,onPanZoomEnd:f}):P1({noWheelClassName:J,preventScrolling:P,d3ZoomHandler:C});_.on("wheel.zoom",pe,{passive:!1});const Ce=I1({zoomPanValues:y,onDraggingChange:p,onPanZoomStart:d});S.on("start",Ce);const je=R1({zoomPanValues:y,panOnDrag:A,onPaneContextMenu:!!W,onPanZoom:u,onTransformChange:Q});S.on("zoom",je);const Me=T1({zoomPanValues:y,panOnDrag:A,panOnScroll:U,onPaneContextMenu:W,onPanZoomEnd:f,onDraggingChange:p});S.on("end",Me);const ze=z1({panActivationKeyPressed:ue,zoomActivationKeyPressed:ce,panOnDrag:A,zoomOnScroll:ne,panOnScroll:U,zoomOnDoubleClick:re,zoomOnPinch:T,userSelectionActive:V,noPanClassName:M,noWheelClassName:J,lib:de,connectionInProgress:se});S.filter(ze),re?_.on("dblclick.zoom",E):_.on("dblclick.zoom",null)}function k(){S.on("zoom",null)}async function j(J,M,W){const V=Cu(J),U=S==null?void 0:S.constrain()(V,M,W);return U&&await N(U),U}async function L(J,M){const W=Cu(J);return await N(W,M),W}function D(J){if(_){const M=Cu(J),W=_.property("__zoom");(W.k!==J.zoom||W.x!==J.x||W.y!==J.y)&&(S==null||S.transform(_,M,null,{sync:!0}))}}function B(){const J=_?Bp(_.node()):{x:0,y:0,k:1};return{x:J.x,y:J.y,zoom:J.k}}async function H(J,M){return _?new Promise(W=>{S==null||S.interpolate((M==null?void 0:M.interpolate)==="linear"?ai:Js).scaleTo(ju(_,M==null?void 0:M.duration,M==null?void 0:M.ease,()=>W(!0)),J)}):!1}async function X(J,M){return _?new Promise(W=>{S==null||S.interpolate((M==null?void 0:M.interpolate)==="linear"?ai:Js).scaleBy(ju(_,M==null?void 0:M.duration,M==null?void 0:M.ease,()=>W(!0)),J)}):!1}function ee(J){S==null||S.scaleExtent(J)}function Z(J){S==null||S.translateExtent(J)}function te(J){const M=!Jt(J)||J<0?0:J;S==null||S.clickDistance(M)}return{update:R,destroy:k,setViewport:L,setViewportConstrained:j,getViewport:B,scaleTo:H,scaleBy:X,setScaleExtent:ee,setTranslateExtent:Z,syncViewport:D,setClickDistance:te}}var yo;(function(t){t.Line="line",t.Handle="handle"})(yo||(yo={}));function b1({width:t,prevWidth:r,height:i,prevHeight:l,affectsX:a,affectsY:u}){const d=t-r,f=i-l,p=[d>0?1:d<0?-1:0,f>0?1:f<0?-1:0];return d&&a&&(p[0]=p[0]*-1),f&&u&&(p[1]=p[1]*-1),p}function Nh(t){const r=t.includes("right")||t.includes("left"),i=t.includes("bottom")||t.includes("top"),l=t.includes("left"),a=t.includes("top");return{isHorizontal:r,isVertical:i,affectsX:l,affectsY:a}}function Qn(t,r){return Math.max(0,r-t)}function Kn(t,r){return Math.max(0,t-r)}function Qs(t,r,i){return Math.max(0,r-t,t-i)}function Ch(t,r){return t?!r:r}function A1(t,r,i,l,a,u,d,f){let{affectsX:p,affectsY:y}=r;const{isHorizontal:m,isVertical:x}=r,v=m&&x,{xSnapped:S,ySnapped:_}=i,{minWidth:C,maxWidth:E,minHeight:N,maxHeight:R}=l,{x:k,y:j,width:L,height:D,aspectRatio:B}=t;let H=Math.floor(m?S-t.pointerX:0),X=Math.floor(x?_-t.pointerY:0);const ee=L+(p?-H:H),Z=D+(y?-X:X),te=-u[0]*L,J=-u[1]*D;let M=Qs(ee,C,E),W=Qs(Z,N,R);if(d){let A=0,b=0;p&&H<0?A=Qn(k+H+te,d[0][0]):!p&&H>0&&(A=Kn(k+ee+te,d[1][0])),y&&X<0?b=Qn(j+X+J,d[0][1]):!y&&X>0&&(b=Kn(j+Z+J,d[1][1])),M=Math.max(M,A),W=Math.max(W,b)}if(f){let A=0,b=0;p&&H>0?A=Kn(k+H,f[0][0]):!p&&H<0&&(A=Qn(k+ee,f[1][0])),y&&X>0?b=Kn(j+X,f[0][1]):!y&&X<0&&(b=Qn(j+Z,f[1][1])),M=Math.max(M,A),W=Math.max(W,b)}if(a){if(m){const A=Qs(ee/B,N,R)*B;if(M=Math.max(M,A),d){let b=0;!p&&!y||p&&!y&&v?b=Kn(j+J+ee/B,d[1][1])*B:b=Qn(j+J+(p?H:-H)/B,d[0][1])*B,M=Math.max(M,b)}if(f){let b=0;!p&&!y||p&&!y&&v?b=Qn(j+ee/B,f[1][1])*B:b=Kn(j+(p?H:-H)/B,f[0][1])*B,M=Math.max(M,b)}}if(x){const A=Qs(Z*B,C,E)/B;if(W=Math.max(W,A),d){let b=0;!p&&!y||y&&!p&&v?b=Kn(k+Z*B+te,d[1][0])/B:b=Qn(k+(y?X:-X)*B+te,d[0][0])/B,W=Math.max(W,b)}if(f){let b=0;!p&&!y||y&&!p&&v?b=Qn(k+Z*B,f[1][0])/B:b=Kn(k+(y?X:-X)*B,f[0][0])/B,W=Math.max(W,b)}}}X=X+(X<0?W:-W),H=H+(H<0?M:-M),a&&(v?ee>Z*B?X=(Ch(p,y)?-H:H)/B:H=(Ch(p,y)?-X:X)*B:m?(X=H/B,y=p):(H=X*B,p=y));const V=p?k+H:k,U=y?j+X:j;return{width:L+(p?-H:H),height:D+(y?-X:X),x:u[0]*H*(p?-1:1)+V,y:u[1]*X*(y?-1:1)+U}}const xg={width:0,height:0,x:0,y:0},D1={...xg,pointerX:0,pointerY:0,aspectRatio:1};function $1(t,r,i){const l=r.position.x+t.position.x,a=r.position.y+t.position.y,u=t.measured.width??0,d=t.measured.height??0,f=i[0]*u,p=i[1]*d;return[[l-f,a-p],[l+u-f,a+d-p]]}function O1({domNode:t,nodeId:r,getStoreItems:i,onChange:l,onEnd:a}){const u=zt(t);let d={controlDirection:Nh("bottom-right"),boundaries:{minWidth:0,minHeight:0,maxWidth:Number.MAX_VALUE,maxHeight:Number.MAX_VALUE},resizeDirection:void 0,keepAspectRatio:!1};function f({controlPosition:y,boundaries:m,keepAspectRatio:x,resizeDirection:v,onResizeStart:S,onResize:_,onResizeEnd:C,shouldResize:E}){let N={...xg},R={...D1};d={boundaries:m,resizeDirection:v,keepAspectRatio:x,controlDirection:Nh(y)};let k,j=null,L=[],D,B,H,X=!1;const ee=Mp().on("start",Z=>{const{nodeLookup:te,transform:J,snapGrid:M,snapToGrid:W,nodeOrigin:V,paneDomNode:U}=i();if(k=te.get(r),!k)return;j=(U==null?void 0:U.getBoundingClientRect())??null;const{xSnapped:A,ySnapped:b}=ui(Z.sourceEvent,{transform:J,snapGrid:M,snapToGrid:W,containerBounds:j});N={width:k.measured.width??0,height:k.measured.height??0,x:k.position.x??0,y:k.position.y??0},R={...N,pointerX:A,pointerY:b,aspectRatio:N.width/N.height},D=void 0,B=jr(k.extent)?k.extent:void 0,k.parentId&&(k.extent==="parent"||k.expandParent)&&(D=te.get(k.parentId)),D&&k.extent==="parent"&&(B=[[0,0],[D.measured.width,D.measured.height]]),L=[],H=void 0;for(const[F,P]of te)if(P.parentId===r&&(L.push({id:F,position:{...P.position},extent:P.extent}),P.extent==="parent"||P.expandParent)){const T=$1(P,k,P.origin??V);H?H=[[Math.min(T[0][0],H[0][0]),Math.min(T[0][1],H[0][1])],[Math.max(T[1][0],H[1][0]),Math.max(T[1][1],H[1][1])]]:H=T}S==null||S(Z,{...N})}).on("drag",Z=>{const{transform:te,snapGrid:J,snapToGrid:M,nodeOrigin:W}=i(),V=ui(Z.sourceEvent,{transform:te,snapGrid:J,snapToGrid:M,containerBounds:j}),U=[];if(!k)return;const{x:A,y:b,width:F,height:P}=N,T={},ne=k.origin??W,{width:re,height:ue,x:ce,y:de}=A1(R,d.controlDirection,V,d.boundaries,d.keepAspectRatio,ne,B,H),Q=re!==F,se=ue!==P,fe=ce!==A&&Q,ge=de!==b&&se;if(!fe&&!ge&&!Q&&!se)return;if((fe||ge||ne[0]===1||ne[1]===1)&&(T.x=fe?ce:N.x,T.y=ge?de:N.y,N.x=T.x,N.y=T.y,L.length>0)){const je=ce-A,Me=de-b;for(const ze of L)ze.position={x:ze.position.x-je+ne[0]*(re-F),y:ze.position.y-Me+ne[1]*(ue-P)},U.push(ze)}if((Q||se)&&(T.width=Q&&(!d.resizeDirection||d.resizeDirection==="horizontal")?re:N.width,T.height=se&&(!d.resizeDirection||d.resizeDirection==="vertical")?ue:N.height,N.width=T.width,N.height=T.height),D&&k.expandParent){const je=ne[0]*(T.width??0);T.x&&T.x{X&&(C==null||C(Z,{...N}),a==null||a({...N}),X=!1)});u.call(ee)}function p(){u.on(".drag",null)}return{update:f,destroy:p}}var Mu={exports:{}},Pu={},Iu={exports:{}},Ru={};/** + * @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 jh;function F1(){if(jh)return Ru;jh=1;var t=wi();function r(x,v){return x===v&&(x!==0||1/x===1/v)||x!==x&&v!==v}var i=typeof Object.is=="function"?Object.is:r,l=t.useState,a=t.useEffect,u=t.useLayoutEffect,d=t.useDebugValue;function f(x,v){var S=v(),_=l({inst:{value:S,getSnapshot:v}}),C=_[0].inst,E=_[1];return u(function(){C.value=S,C.getSnapshot=v,p(C)&&E({inst:C})},[x,S,v]),a(function(){return p(C)&&E({inst:C}),x(function(){p(C)&&E({inst:C})})},[x]),d(S),S}function p(x){var v=x.getSnapshot;x=x.value;try{var S=v();return!i(x,S)}catch{return!0}}function y(x,v){return v()}var m=typeof window>"u"||typeof window.document>"u"||typeof window.document.createElement>"u"?y:f;return Ru.useSyncExternalStore=t.useSyncExternalStore!==void 0?t.useSyncExternalStore:m,Ru}var Mh;function H1(){return Mh||(Mh=1,Iu.exports=F1()),Iu.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 Ph;function B1(){if(Ph)return Pu;Ph=1;var t=wi(),r=H1();function i(y,m){return y===m&&(y!==0||1/y===1/m)||y!==y&&m!==m}var l=typeof Object.is=="function"?Object.is:i,a=r.useSyncExternalStore,u=t.useRef,d=t.useEffect,f=t.useMemo,p=t.useDebugValue;return Pu.useSyncExternalStoreWithSelector=function(y,m,x,v,S){var _=u(null);if(_.current===null){var C={hasValue:!1,value:null};_.current=C}else C=_.current;_=f(function(){function N(D){if(!R){if(R=!0,k=D,D=v(D),S!==void 0&&C.hasValue){var B=C.value;if(S(B,D))return j=B}return j=D}if(B=j,l(k,D))return B;var H=v(D);return S!==void 0&&S(B,H)?(k=D,B):(k=D,j=H)}var R=!1,k,j,L=x===void 0?null:x;return[function(){return N(m())},L===null?void 0:function(){return N(L())}]},[m,x,v,S]);var E=a(y,_[0],_[1]);return d(function(){C.hasValue=!0,C.value=E},[E]),p(E),E},Pu}var Ih;function V1(){return Ih||(Ih=1,Mu.exports=B1()),Mu.exports}var U1=V1();const W1=dp(U1),Y1={},Rh=t=>{let r;const i=new Set,l=(m,x)=>{const v=typeof m=="function"?m(r):m;if(!Object.is(v,r)){const S=r;r=x??(typeof v!="object"||v===null)?v:Object.assign({},r,v),i.forEach(_=>_(r,S))}},a=()=>r,p={setState:l,getState:a,getInitialState:()=>y,subscribe:m=>(i.add(m),()=>i.delete(m)),destroy:()=>{(Y1?"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,a,p);return p},X1=t=>t?Rh(t):Rh,{useDebugValue:G1}=U0,{useSyncExternalStoreWithSelector:Q1}=W1,K1=t=>t;function wg(t,r=K1,i){const l=Q1(t.subscribe,t.getState,t.getServerState||t.getInitialState,r,i);return G1(l),l}const Th=(t,r)=>{const i=X1(t),l=(a,u=r)=>wg(i,a,u);return Object.assign(l,i),l},q1=(t,r)=>t?Th(t,r):Th;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 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}fp();const _l=O.createContext(null),Z1=_l.Provider,Sg=tn.error001("react");function Re(t,r){const i=O.useContext(_l);if(i===null)throw new Error(Sg);return wg(i,t,r)}function Oe(){const t=O.useContext(_l);if(t===null)throw new Error(Sg);return O.useMemo(()=>({getState:t.getState,setState:t.setState,subscribe:t.subscribe}),[t])}const zh={display:"none"},J1={position:"absolute",width:1,height:1,margin:-1,border:0,padding:0,overflow:"hidden",clip:"rect(0px, 0px, 0px, 0px)",clipPath:"inset(100%)"},_g="react-flow__node-desc",kg="react-flow__edge-desc",eS="react-flow__aria-live",tS=t=>t.ariaLiveMessage,nS=t=>t.ariaLabelConfig;function rS({rfId:t}){const r=Re(tS);return g.jsx("div",{id:`${eS}-${t}`,"aria-live":"assertive","aria-atomic":"true",style:J1,children:r})}function oS({rfId:t,disableKeyboardA11y:r}){const i=Re(nS);return g.jsxs(g.Fragment,{children:[g.jsx("div",{id:`${_g}-${t}`,style:zh,children:r?i["node.a11yDescription.default"]:i["node.a11yDescription.keyboardDisabled"]}),g.jsx("div",{id:`${kg}-${t}`,style:zh,children:i["edge.a11yDescription.default"]}),!r&&g.jsx(rS,{rfId:t})]})}const kl=O.forwardRef(({position:t="top-left",children:r,className:i,style:l,...a},u)=>{const d=`${t}`.split("-");return g.jsx("div",{className:Qe(["react-flow__panel",i,...d]),style:l,ref:u,...a,children:r})});kl.displayName="Panel";const Lh="https://reactflow.dev?utm_source=attribution";function iS({proOptions:t,position:r="bottom-right"}){return t!=null&&t.hideAttribution?null:g.jsx(kl,{position:r,className:"react-flow__attribution","data-message":`Please only hide this attribution when you are subscribed to React Flow Pro: ${Lh}`,children:g.jsx("a",{href:Lh,target:"_blank",rel:"noopener noreferrer","aria-label":"React Flow attribution",children:"React Flow"})})}const sS=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}},Ks=t=>t.id;function lS(t,r){return Ue(t.selectedNodes.map(Ks),r.selectedNodes.map(Ks))&&Ue(t.selectedEdges.map(Ks),r.selectedEdges.map(Ks))}function aS({onSelectionChange:t}){const r=Oe(),{selectedNodes:i,selectedEdges:l}=Re(sS,lS);return O.useEffect(()=>{const a={nodes:i,edges:l};t==null||t(a),r.getState().onSelectionChangeHandlers.forEach(u=>u(a))},[i,l,t]),null}const uS=t=>!!t.onSelectionChangeHandlers;function cS({onSelectionChange:t}){const r=Re(uS);return t||r?g.jsx(aS,{onSelectionChange:t}):null}const Eg=[0,0],dS={x:0,y:0,zoom:1},fS=["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"],bh=[...fS,"rfId"],hS=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}),Ah={translateExtent:pi,nodeOrigin:Eg,minZoom:.5,maxZoom:2,elementsSelectable:!0,noPanClassName:"nopan",rfId:"1"};function pS(t){const{setNodes:r,setEdges:i,setMinZoom:l,setMaxZoom:a,setTranslateExtent:u,setNodeExtent:d,reset:f,setDefaultNodesAndEdges:p}=Re(hS,Ue),y=Oe();O.useEffect(()=>(p(t.defaultNodes,t.defaultEdges),()=>{m.current=Ah,f()}),[]);const m=O.useRef(Ah);return O.useEffect(()=>{for(const x of bh){const v=t[x],S=m.current[x];v!==S&&(typeof t[x]>"u"||(x==="nodes"?r(v):x==="edges"?i(v):x==="minZoom"?l(v):x==="maxZoom"?a(v):x==="translateExtent"?u(v):x==="nodeExtent"?d(v):x==="ariaLabelConfig"?y.setState({ariaLabelConfig:Zw(v)}):x==="fitView"?y.setState({fitViewQueued:v}):x==="fitViewOptions"?y.setState({fitViewOptions:v}):y.setState({[x]:v})))}m.current=t},bh.map(x=>t[x])),null}function Dh(){return typeof window>"u"||!window.matchMedia?null:window.matchMedia("(prefers-color-scheme: dark)")}function gS(t){var l;const[r,i]=O.useState(t==="system"?null:t);return O.useEffect(()=>{if(t!=="system"){i(t);return}const a=Dh(),u=()=>i(a!=null&&a.matches?"dark":"light");return u(),a==null||a.addEventListener("change",u),()=>{a==null||a.removeEventListener("change",u)}},[t]),r!==null?r:(l=Dh())!=null&&l.matches?"dark":"light"}const $h=typeof document<"u"?document:null;function xi(t=null,r={target:$h,actInsideInputWithModifier:!0}){const[i,l]=O.useState(!1),a=O.useRef(!1),u=O.useRef(new Set([])),[d,f]=O.useMemo(()=>{if(t!==null){const y=(Array.isArray(t)?t:[t]).filter(x=>typeof x=="string").map(x=>x.replace(/\+/g,` +`).replace(` + +`,` ++`).split(` +`)),m=y.reduce((x,v)=>x.concat(...v),[]);return[y,m]}return[[],[]]},[t]);return O.useEffect(()=>{const p=(r==null?void 0:r.target)??$h,y=(r==null?void 0:r.actInsideInputWithModifier)??!0;if(t!==null){const m=S=>{var E,N;if(a.current=S.ctrlKey||S.metaKey||S.shiftKey||S.altKey,(!a.current||a.current&&!y)&&rg(S))return!1;const C=Fh(S.code,f);if(u.current.add(S[C]),Oh(d,u.current,!1)){const R=((N=(E=S.composedPath)==null?void 0:E.call(S))==null?void 0:N[0])||S.target,k=(R==null?void 0:R.nodeName)==="BUTTON"||(R==null?void 0:R.nodeName)==="A";r.preventDefault!==!1&&(a.current||!k)&&S.preventDefault(),l(!0)}},x=S=>{const _=Fh(S.code,f);Oh(d,u.current,!0)?(l(!1),u.current.clear()):u.current.delete(S[_]),S.key==="Meta"&&u.current.clear(),a.current=!1},v=()=>{u.current.clear(),l(!1)};return p==null||p.addEventListener("keydown",m),p==null||p.addEventListener("keyup",x),window.addEventListener("blur",v),window.addEventListener("contextmenu",v),()=>{p==null||p.removeEventListener("keydown",m),p==null||p.removeEventListener("keyup",x),window.removeEventListener("blur",v),window.removeEventListener("contextmenu",v)}}},[t,l]),i}function Oh(t,r,i){return t.filter(l=>i||l.length===r.size).some(l=>l.every(a=>r.has(a)))}function Fh(t,r){return r.includes(t)?"code":"key"}const mS=()=>{const t=Oe();return O.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,a,u],panZoom:d}=t.getState();return d?(await d.setViewport({x:r.x??l,y:r.y??a,zoom:r.zoom??u},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:a,minZoom:u,maxZoom:d,panZoom:f}=t.getState(),p=sc(r,l,a,u,d,(i==null?void 0:i.padding)??.1);return f?(await f.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:a,snapToGrid:u,domNode:d}=t.getState();if(!d)return r;const{x:f,y:p}=d.getBoundingClientRect(),y={x:r.x-f,y:r.y-p},m=i.snapGrid??a,x=i.snapToGrid??u;return Ci(y,l,x,m)},flowToScreenPosition:r=>{const{transform:i,domNode:l}=t.getState();if(!l)return r;const{x:a,y:u}=l.getBoundingClientRect(),d=mo(r,i);return{x:d.x+a,y:d.y+u}}}),[])};function Ng(t,r){const i=[],l=new Map,a=[];for(const u of t)if(u.type==="add"){a.push(u);continue}else if(u.type==="remove"||u.type==="replace")l.set(u.id,[u]);else{const d=l.get(u.id);d?d.push(u):l.set(u.id,[u])}for(const u of r){const d=l.get(u.id);if(!d){i.push(u);continue}if(d[0].type==="remove")continue;if(d[0].type==="replace"){i.push({...d[0].item});continue}const f={...u};for(const p of d)yS(p,f);i.push(f)}return a.length&&a.forEach(u=>{u.index!==void 0?i.splice(u.index,0,{...u.item}):i.push({...u.item})}),i}function yS(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 vS(t,r){return Ng(t,r)}function xS(t,r){return Ng(t,r)}function wr(t,r){return{id:t,type:"select",selected:r}}function ao(t,r=new Set,i=!1){const l=[];for(const[a,u]of t){const d=r.has(a);!(u.selected===void 0&&!d)&&u.selected!==d&&(i&&(u.selected=d),l.push(wr(u.id,d)))}return l}function Hh({items:t=[],lookup:r}){var a;const i=[],l=new Map(t.map(u=>[u.id,u]));for(const[u,d]of t.entries()){const f=r.get(d.id),p=((a=f==null?void 0:f.internals)==null?void 0:a.userNode)??f;p!==void 0&&p!==d&&i.push({id:d.id,item:d,type:"replace"}),p===void 0&&i.push({item:d,type:"add",index:u})}for(const[u]of r)l.get(u)===void 0&&i.push({id:u,type:"remove"});return i}function Bh(t){return{id:t.id,type:"remove"}}const wS=Jp();function SS(t,r,i={}){return o1(t,r,{...i,onError:i.onError??wS})}const Vh=t=>Vw(t),_S=t=>Gp(t);function Cg(t){return O.forwardRef(t)}const jg=typeof window<"u"?O.useLayoutEffect:O.useEffect;function Uh(t){const[r,i]=O.useState(BigInt(0)),[l]=O.useState(()=>kS(()=>i(a=>a+BigInt(1))));return jg(()=>{const a=l.get();a.length&&(t(a),l.reset())},[r]),l}function kS(t){let r=[];return{get:()=>r,reset:()=>{r=[]},push:i=>{r.push(i),t()}}}const Mg=O.createContext(null);function ES({children:t}){const r=Oe(),i=O.useCallback(f=>{const{nodes:p=[],setNodes:y,hasDefaultNodes:m,onNodesChange:x,nodeLookup:v,fitViewQueued:S,onNodesChangeMiddlewareMap:_}=r.getState();let C=p;for(const N of f)C=typeof N=="function"?N(C):N;let E=Hh({items:C,lookup:v});for(const N of _.values())E=N(E);m&&y(C),E.length>0?x==null||x(E):S&&window.requestAnimationFrame(()=>{const{fitViewQueued:N,nodes:R,setNodes:k}=r.getState();N&&k(R)})},[]),l=Uh(i),a=O.useCallback(f=>{const{edges:p=[],setEdges:y,hasDefaultEdges:m,onEdgesChange:x,edgeLookup:v}=r.getState();let S=p;for(const _ of f)S=typeof _=="function"?_(S):_;m?y(S):x&&x(Hh({items:S,lookup:v}))},[]),u=Uh(a),d=O.useMemo(()=>({nodeQueue:l,edgeQueue:u}),[]);return g.jsx(Mg.Provider,{value:d,children:t})}function NS(){const t=O.useContext(Mg);if(!t)throw new Error("useBatchContext must be used within a BatchProvider");return t}const CS=t=>!!t.panZoom;function hc(){const t=mS(),r=Oe(),i=NS(),l=Re(CS),a=O.useMemo(()=>{const u=x=>r.getState().nodeLookup.get(x),d=x=>{i.nodeQueue.push(x)},f=x=>{i.edgeQueue.push(x)},p=x=>{var N,R;const{nodeLookup:v,nodeOrigin:S}=r.getState(),_=Vh(x)?x:v.get(x.id),C=_.parentId?tg(_.position,_.measured,_.parentId,v,S):_.position,E={..._,position:C,width:((N=_.measured)==null?void 0:N.width)??_.width,height:((R=_.measured)==null?void 0:R.height)??_.height};return yi(E)},y=(x,v,S={replace:!1})=>{d(_=>_.map(C=>{if(C.id===x){const E=typeof v=="function"?v(C):v;return S.replace&&Vh(E)?E:{...C,...E}}return C}))},m=(x,v,S={replace:!1})=>{f(_=>_.map(C=>{if(C.id===x){const E=typeof v=="function"?v(C):v;return S.replace&&_S(E)?E:{...C,...E}}return C}))};return{getNodes:()=>r.getState().nodes.map(x=>({...x})),getNode:x=>{var v;return(v=u(x))==null?void 0:v.internals.userNode},getInternalNode:u,getEdges:()=>{const{edges:x=[]}=r.getState();return x.map(v=>({...v}))},getEdge:x=>r.getState().edgeLookup.get(x),setNodes:d,setEdges:f,addNodes:x=>{const v=Array.isArray(x)?x:[x];i.nodeQueue.push(S=>[...S,...v])},addEdges:x=>{const v=Array.isArray(x)?x:[x];i.edgeQueue.push(S=>[...S,...v])},toObject:()=>{const{nodes:x=[],edges:v=[],transform:S}=r.getState(),[_,C,E]=S;return{nodes:x.map(N=>({...N})),edges:v.map(N=>({...N})),viewport:{x:_,y:C,zoom:E}}},deleteElements:async({nodes:x=[],edges:v=[]})=>{const{nodes:S,edges:_,onNodesDelete:C,onEdgesDelete:E,triggerNodeChanges:N,triggerEdgeChanges:R,onDelete:k,onBeforeDelete:j}=r.getState(),{nodes:L,edges:D}=await Gw({nodesToRemove:x,edgesToRemove:v,nodes:S,edges:_,onBeforeDelete:j}),B=D.length>0,H=L.length>0;if(B){const X=D.map(Bh);E==null||E(D),R(X)}if(H){const X=L.map(Bh);C==null||C(L),N(X)}return(H||B)&&(k==null||k({nodes:L,edges:D})),{deletedNodes:L,deletedEdges:D}},getIntersectingNodes:(x,v=!0,S)=>{const _=ph(x),C=_?x:p(x),E=S!==void 0;return C?(S||r.getState().nodes).filter(N=>{const R=r.getState().nodeLookup.get(N.id);if(R&&!_&&(N.id===x.id||!R.internals.positionAbsolute))return!1;const k=yi(E?N:R),j=dl(k,C);return v&&j>0||j>=k.width*k.height||j>=C.width*C.height}):[]},isNodeIntersecting:(x,v,S=!0)=>{const C=ph(x)?x:p(x);if(!C)return!1;const E=dl(C,v);return S&&E>0||E>=v.width*v.height||E>=C.width*C.height},updateNode:y,updateNodeData:(x,v,S={replace:!1})=>{y(x,_=>{const C=typeof v=="function"?v(_):v;return S.replace?{..._,data:C}:{..._,data:{..._.data,...C}}},S)},updateEdge:m,updateEdgeData:(x,v,S={replace:!1})=>{m(x,_=>{const C=typeof v=="function"?v(_):v;return S.replace?{..._,data:C}:{..._,data:{..._.data,...C}}},S)},getNodesBounds:x=>{const{nodeLookup:v,nodeOrigin:S}=r.getState();return Uw(x,{nodeLookup:v,nodeOrigin:S})},getHandleConnections:({type:x,id:v,nodeId:S})=>{var _;return Array.from(((_=r.getState().connectionLookup.get(`${S}-${x}${v?`-${v}`:""}`))==null?void 0:_.values())??[])},getNodeConnections:({type:x,handleId:v,nodeId:S})=>{var _;return Array.from(((_=r.getState().connectionLookup.get(`${S}${x?v?`-${x}-${v}`:`-${x}`:""}`))==null?void 0:_.values())??[])},fitView:async x=>{const v=r.getState().fitViewResolver??qw();return r.setState({fitViewQueued:!0,fitViewOptions:x,fitViewResolver:v}),i.nodeQueue.push(S=>[...S]),v.promise}}},[]);return O.useMemo(()=>({...a,...t,viewportInitialized:l}),[l])}const Wh=t=>t.selected,jS=typeof window<"u"?window:void 0;function MS({deleteKeyCode:t,multiSelectionKeyCode:r}){const i=Oe(),{deleteElements:l}=hc(),a=xi(t,{actInsideInputWithModifier:!1}),u=xi(r,{target:jS});O.useEffect(()=>{if(a){const{edges:d,nodes:f}=i.getState();l({nodes:f.filter(Wh),edges:d.filter(Wh)}),i.setState({nodesSelectionActive:!1})}},[a]),O.useEffect(()=>{i.setState({multiSelectionActive:u})},[u])}function PS(t){const r=Oe();O.useEffect(()=>{const i=()=>{var a,u,d,f;if(!t.current||!(((u=(a=t.current).checkVisibility)==null?void 0:u.call(a))??!0))return!1;const l=lc(t.current);(l.height===0||l.width===0)&&((f=(d=r.getState()).onError)==null||f.call(d,"004",tn.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 El={position:"absolute",width:"100%",height:"100%",top:0,left:0},IS=t=>({userSelectionActive:t.userSelectionActive,lib:t.lib,connectionInProgress:t.connection.inProgress});function RS({onPaneContextMenu:t,zoomOnScroll:r=!0,zoomOnPinch:i=!0,panOnScroll:l=!1,panActivationKeyPressed:a,panOnScrollSpeed:u=.5,panOnScrollMode:d=kr.Free,zoomOnDoubleClick:f=!0,panOnDrag:p=!0,defaultViewport:y,translateExtent:m,minZoom:x,maxZoom:v,zoomActivationKeyCode:S,preventScrolling:_=!0,children:C,noWheelClassName:E,noPanClassName:N,onViewportChange:R,isControlledViewport:k,paneClickDistance:j,selectionOnDrag:L}){const D=Oe(),B=O.useRef(null),{userSelectionActive:H,lib:X,connectionInProgress:ee}=Re(IS,Ue),Z=xi(S),te=O.useRef();PS(B);const J=O.useCallback(M=>{R==null||R({x:M[0],y:M[1],zoom:M[2]}),k||D.setState({transform:M})},[R,k]);return O.useEffect(()=>{if(B.current){te.current=L1({domNode:B.current,minZoom:x,maxZoom:v,translateExtent:m,viewport:y,onDraggingChange:U=>D.setState(A=>A.paneDragging===U?A:{paneDragging:U}),onPanZoomStart:(U,A)=>{const{onViewportChangeStart:b,onMoveStart:F}=D.getState();F==null||F(U,A),b==null||b(A)},onPanZoom:(U,A)=>{const{onViewportChange:b,onMove:F}=D.getState();F==null||F(U,A),b==null||b(A)},onPanZoomEnd:(U,A)=>{const{onViewportChangeEnd:b,onMoveEnd:F}=D.getState();F==null||F(U,A),b==null||b(A)}});const{x:M,y:W,zoom:V}=te.current.getViewport();return D.setState({panZoom:te.current,transform:[M,W,V],domNode:B.current.closest(".react-flow")}),()=>{var U;(U=te.current)==null||U.destroy()}}},[]),O.useEffect(()=>{var M;(M=te.current)==null||M.update({onPaneContextMenu:t,zoomOnScroll:r,zoomOnPinch:i,panOnScroll:l,panActivationKeyPressed:a,panOnScrollSpeed:u,panOnScrollMode:d,zoomOnDoubleClick:f,panOnDrag:p,zoomActivationKeyPressed:Z,preventScrolling:_,noPanClassName:N,userSelectionActive:H,noWheelClassName:E,lib:X,onTransformChange:J,connectionInProgress:ee,selectionOnDrag:L,paneClickDistance:j})},[t,r,i,l,a,u,d,f,p,Z,_,N,H,E,X,J,ee,L,j]),g.jsx("div",{className:"react-flow__renderer",ref:B,style:El,children:C})}const TS=t=>({userSelectionActive:t.userSelectionActive,userSelectionRect:t.userSelectionRect});function zS(){const{userSelectionActive:t,userSelectionRect:r}=Re(TS,Ue);return t&&r?g.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)=>i=>{i.target===r.current&&(t==null||t(i))},LS=t=>({userSelectionActive:t.userSelectionActive,elementsSelectable:t.elementsSelectable,dragging:t.paneDragging,panBy:t.panBy,autoPanSpeed:t.autoPanSpeed});function bS({isSelecting:t,selectionKeyPressed:r,selectionMode:i=gi.Full,panOnDrag:l,autoPanOnSelection:a,paneClickDistance:u,selectionOnDrag:d,onSelectionStart:f,onSelectionEnd:p,onPaneClick:y,onPaneContextMenu:m,onPaneScroll:x,onPaneMouseEnter:v,onPaneMouseMove:S,onPaneMouseLeave:_,children:C}){const E=O.useRef(0),N=Oe(),{userSelectionActive:R,elementsSelectable:k,dragging:j,panBy:L,autoPanSpeed:D}=Re(LS,Ue),B=k&&(t||R),H=O.useRef(null),X=O.useRef(),ee=O.useRef(new Set),Z=O.useRef(new Set),te=O.useRef(!1),J=O.useRef(!1),M=O.useRef({x:0,y:0}),W=O.useRef(!1),V=Q=>{if(J.current||te.current||N.getState().connection.inProgress){J.current=!1,te.current=!1;return}y==null||y(Q),N.getState().resetSelectedElements(),N.setState({nodesSelectionActive:!1})},U=Q=>{if(Array.isArray(l)&&(l!=null&&l.includes(2))){Q.preventDefault();return}m==null||m(Q)},A=x?Q=>x(Q):void 0,b=Q=>{J.current&&(Q.stopPropagation(),J.current=!1)},F=Q=>{var ze,Xe;if(Q.pointerType==="touch"&&l!==!1&&!r)return;const{domNode:se,transform:fe}=N.getState();if(X.current=se==null?void 0:se.getBoundingClientRect(),!X.current)return;const ge=Q.target===H.current;if(!ge&&!!Q.target.closest(".nokey")||!t||!(d&&ge||r)||Q.button!==0||!Q.isPrimary)return;(Xe=(ze=Q.target)==null?void 0:ze.setPointerCapture)==null||Xe.call(ze,Q.pointerId),J.current=!1;const{x:Ce,y:je}=en(Q.nativeEvent,X.current),Me=Ci({x:Ce,y:je},fe);N.setState({userSelectionRect:{width:0,height:0,startX:Me.x,startY:Me.y,x:Ce,y:je}}),ge||(Q.stopPropagation(),Q.preventDefault())};function P(Q,se){const{userSelectionRect:fe}=N.getState();if(!fe)return;const{transform:ge,nodeLookup:ve,edgeLookup:pe,connectionLookup:Ce,triggerNodeChanges:je,triggerEdgeChanges:Me,defaultEdgeOptions:ze}=N.getState(),Xe={x:fe.startX,y:fe.startY},{x:rt,y:Ze}=mo(Xe,ge),Je={startX:Xe.x,startY:Xe.y,x:Qlt.id)),Z.current=new Set;const At=(ze==null?void 0:ze.selectable)??!0;for(const lt of ee.current){const ht=Ce.get(lt);if(ht)for(const{edgeId:ot}of ht.values()){const pt=pe.get(ot);pt&&(pt.selectable??At)&&Z.current.add(ot)}}if(!gh(Vt,ee.current)){const lt=ao(ve,ee.current,!0);je(lt)}if(!gh(bt,Z.current)){const lt=ao(pe,Z.current);Me(lt)}N.setState({userSelectionRect:Je,userSelectionActive:!0,nodesSelectionActive:!1})}function T(){if(!a||!X.current)return;const[Q,se]=ic(M.current,X.current,D);L({x:Q,y:se}).then(fe=>{if(!J.current||!fe){E.current=requestAnimationFrame(T);return}const{x:ge,y:ve}=M.current;P(ge,ve),E.current=requestAnimationFrame(T)})}const ne=()=>{cancelAnimationFrame(E.current),E.current=0,W.current=!1};O.useEffect(()=>()=>ne(),[]);const re=Q=>{const{userSelectionRect:se,transform:fe,resetSelectedElements:ge}=N.getState();if(!X.current||!se)return;const{x:ve,y:pe}=en(Q.nativeEvent,X.current);M.current={x:ve,y:pe};const Ce=mo({x:se.startX,y:se.startY},fe);if(!J.current){const je=r?0:u;if(Math.hypot(ve-Ce.x,pe-Ce.y)<=je)return;ge(),f==null||f(Q)}J.current=!0,W.current||(T(),W.current=!0),P(ve,pe)},ue=Q=>{var se,fe;if(!B){Q.target===H.current&&N.getState().connection.inProgress&&(te.current=!0);return}Q.button===0&&((fe=(se=Q.target)==null?void 0:se.releasePointerCapture)==null||fe.call(se,Q.pointerId),!R&&Q.target===H.current&&N.getState().userSelectionRect&&(V==null||V(Q)),N.setState({userSelectionActive:!1,userSelectionRect:null}),J.current&&(p==null||p(Q),N.setState({nodesSelectionActive:ee.current.size>0})),ne())},ce=Q=>{var se,fe;(fe=(se=Q.target)==null?void 0:se.releasePointerCapture)==null||fe.call(se,Q.pointerId),ne()},de=l===!0||Array.isArray(l)&&l.includes(0);return g.jsxs("div",{className:Qe(["react-flow__pane",{draggable:de,dragging:j,selection:t}]),onClick:B?void 0:Tu(V,H),onContextMenu:Tu(U,H),onWheel:Tu(A,H),onPointerEnter:B?void 0:v,onPointerMove:B?re:S,onPointerUp:ue,onPointerCancel:B?ce:void 0,onPointerDownCapture:B?F:void 0,onClickCapture:B?b:void 0,onPointerLeave:_,ref:H,style:El,children:[C,g.jsx(zS,{})]})}function Gu({id:t,store:r,unselect:i=!1,nodeRef:l}){const{addSelectedNodes:a,unselectNodesAndEdges:u,multiSelectionActive:d,nodeLookup:f,onError:p}=r.getState(),y=f.get(t);if(!y){p==null||p("012",tn.error012(t));return}r.setState({nodesSelectionActive:!1}),y.selected?(i||y.selected&&d)&&(u({nodes:[y],edges:[]}),requestAnimationFrame(()=>{var m;return(m=l==null?void 0:l.current)==null?void 0:m.blur()})):a([t])}function Pg({nodeRef:t,disabled:r=!1,noDragClassName:i,handleSelector:l,nodeId:a,isSelectable:u,nodeClickDistance:d}){const f=Oe(),[p,y]=O.useState(!1),m=O.useRef();return O.useEffect(()=>{if(!r)return m.current=w1({getStoreItems:()=>f.getState(),onNodeMouseDown:x=>{Gu({id:x,store:f,nodeRef:t})},onDragStart:()=>{y(!0)},onDragStop:()=>{y(!1)}}),()=>{var x;(x=m.current)==null||x.destroy(),m.current=void 0}},[r,f,t]),O.useEffect(()=>{r||!t.current||!m.current||m.current.update({noDragClassName:i,handleSelector:l,domNode:t.current,isSelectable:u,nodeId:a,nodeClickDistance:d})},[i,l,r,u,t,a,d]),p}const AS=t=>r=>r.selected&&(r.draggable||t&&typeof r.draggable>"u");function Ig(){const t=Oe();return O.useCallback(i=>{const{nodeExtent:l,snapToGrid:a,snapGrid:u,nodesDraggable:d,onError:f,updateNodePositions:p,nodeLookup:y,nodeOrigin:m}=t.getState(),x=new Map,v=AS(d),S=a?u[0]:5,_=a?u[1]:5,C=i.direction.x*S*i.factor,E=i.direction.y*_*i.factor;for(const[,N]of y){if(!v(N))continue;let R={x:N.internals.positionAbsolute.x+C,y:N.internals.positionAbsolute.y+E};a&&(R=Ni(R,u));const{position:k,positionAbsolute:j}=Qp({nodeId:N.id,nextPosition:R,nodeLookup:y,nodeExtent:l,nodeOrigin:m,onError:f});N.position=k,N.internals.positionAbsolute=j,x.set(N.id,N)}p(x)},[])}const pc=O.createContext(null),DS=pc.Provider;pc.Consumer;const Rg=()=>O.useContext(pc),$S=t=>({connectOnClick:t.connectOnClick,noPanClassName:t.noPanClassName,rfId:t.rfId}),Tg=O.createContext(null);function OS({children:t}){const r=Re($S,Ue);return g.jsx(Tg.Provider,{value:r,children:t})}function FS(){const t=O.useContext(Tg);if(!t)throw new Error("useHandleConfig must be used within a HandleConfigProvider");return t}const HS={connectingFrom:!1,connectingTo:!1,clickConnecting:!1,isPossibleEndHandle:!0,connectionInProcess:!1,clickConnectionInProcess:!1,valid:!1},BS=(t,r,i)=>l=>{const{connectionClickStartHandle:a,connectionMode:u,connection:d}=l,{fromHandle:f,toHandle:p,isValid:y}=d;if(!f&&!a)return HS;const m=(p==null?void 0:p.nodeId)===t&&(p==null?void 0:p.id)===r&&(p==null?void 0:p.type)===i;return{connectingFrom:(f==null?void 0:f.nodeId)===t&&(f==null?void 0:f.id)===r&&(f==null?void 0:f.type)===i,connectingTo:m,clickConnecting:(a==null?void 0:a.nodeId)===t&&(a==null?void 0:a.id)===r&&(a==null?void 0:a.type)===i,isPossibleEndHandle:u===po.Strict?(f==null?void 0:f.type)!==i:t!==(f==null?void 0:f.nodeId)||r!==(f==null?void 0:f.id),connectionInProcess:!!f,clickConnectionInProcess:!!a,valid:m&&y}};function VS({type:t="source",position:r=_e.Top,isValidConnection:i,isConnectable:l=!0,isConnectableStart:a=!0,isConnectableEnd:u=!0,id:d,onConnect:f,children:p,className:y,onMouseDown:m,onTouchStart:x,...v},S){var W,V;const _=d||null,C=t==="target",E=Oe(),N=Rg(),{connectOnClick:R,noPanClassName:k,rfId:j}=FS(),{connectingFrom:L,connectingTo:D,clickConnecting:B,isPossibleEndHandle:H,connectionInProcess:X,clickConnectionInProcess:ee,valid:Z}=Re(BS(N,_,t),Ue);N||(V=(W=E.getState()).onError)==null||V.call(W,"010",tn.error010());const te=U=>{const{defaultEdgeOptions:A,onConnect:b,hasDefaultEdges:F}=E.getState(),P={...A,...U};if(F){const{edges:T,setEdges:ne,onError:re}=E.getState();ne(SS(P,T,{onError:re}))}b==null||b(P),f==null||f(P)},J=U=>{if(!N)return;const A=og(U.nativeEvent);if(a&&(A&&U.button===0||!A)){const b=E.getState();Xu.onPointerDown(U.nativeEvent,{handleDomNode:U.currentTarget,autoPanOnConnect:b.autoPanOnConnect,connectionMode:b.connectionMode,connectionRadius:b.connectionRadius,domNode:b.domNode,nodeLookup:b.nodeLookup,lib:b.lib,isTarget:C,handleId:_,nodeId:N,flowId:b.rfId,panBy:b.panBy,cancelConnection:b.cancelConnection,onConnectStart:b.onConnectStart,onConnectEnd:(...F)=>{var P,T;return(T=(P=E.getState()).onConnectEnd)==null?void 0:T.call(P,...F)},updateConnection:b.updateConnection,onConnect:te,isValidConnection:i||((...F)=>{var P,T;return((T=(P=E.getState()).isValidConnection)==null?void 0:T.call(P,...F))??!0}),getTransform:()=>E.getState().transform,getFromHandle:()=>E.getState().connection.fromHandle,autoPanSpeed:b.autoPanSpeed,dragThreshold:b.connectionDragThreshold})}A?m==null||m(U):x==null||x(U)},M=U=>{const{onClickConnectStart:A,onClickConnectEnd:b,connectionClickStartHandle:F,connectionMode:P,isValidConnection:T,lib:ne,rfId:re,nodeLookup:ue,connection:ce}=E.getState();if(!N||!F&&!a)return;if(!F){A==null||A(U.nativeEvent,{nodeId:N,handleId:_,handleType:t}),E.setState({connectionClickStartHandle:{nodeId:N,type:t,id:_}});return}const de=ng(U.target),Q=i||T,{connection:se,isValid:fe}=Xu.isValid(U.nativeEvent,{handle:{nodeId:N,id:_,type:t},connectionMode:P,fromNodeId:F.nodeId,fromHandleId:F.id||null,fromType:F.type,isValidConnection:Q,flowId:re,doc:de,lib:ne,nodeLookup:ue});fe&&se&&te(se);const ge=structuredClone(ce);delete ge.inProgress,ge.toPosition=ge.toHandle?ge.toHandle.position:null,b==null||b(U,ge),E.setState({connectionClickStartHandle:null})};return g.jsx("div",{"data-handleid":_,"data-nodeid":N,"data-handlepos":r,"data-id":`${j}-${N}-${_}-${t}`,className:Qe(["react-flow__handle",`react-flow__handle-${r}`,"nodrag",k,y,{source:!C,target:C,connectable:l,connectablestart:a,connectableend:u,clickconnecting:B,connectingfrom:L,connectingto:D,valid:Z,connectionindicator:l&&(!X||H)&&(X||ee?u:a)}]),onMouseDown:J,onTouchStart:J,onClick:R?M:void 0,ref:S,...v,children:p})}const vo=O.memo(Cg(VS));function US({data:t,isConnectable:r,sourcePosition:i=_e.Bottom}){return g.jsxs(g.Fragment,{children:[t==null?void 0:t.label,g.jsx(vo,{type:"source",position:i,isConnectable:r})]})}function WS({data:t,isConnectable:r,targetPosition:i=_e.Top,sourcePosition:l=_e.Bottom}){return g.jsxs(g.Fragment,{children:[g.jsx(vo,{type:"target",position:i,isConnectable:r}),t==null?void 0:t.label,g.jsx(vo,{type:"source",position:l,isConnectable:r})]})}function YS(){return null}function XS({data:t,isConnectable:r,targetPosition:i=_e.Top}){return g.jsxs(g.Fragment,{children:[g.jsx(vo,{type:"target",position:i,isConnectable:r}),t==null?void 0:t.label]})}const fl={ArrowUp:{x:0,y:-1},ArrowDown:{x:0,y:1},ArrowLeft:{x:-1,y:0},ArrowRight:{x:1,y:0}},Yh={input:US,default:WS,output:XS,group:YS};function GS(t){var r,i,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??((i=t.style)==null?void 0:i.height)}:{width:t.width??((l=t.style)==null?void 0:l.width),height:t.height??((a=t.style)==null?void 0:a.height)}}const QS=t=>{const{width:r,height:i,x:l,y:a}=Ei(t.nodeLookup,{filter:u=>!!u.selected});return{width:Jt(r)?r:null,height:Jt(i)?i:null,userSelectionActive:t.userSelectionActive,transformString:`translate(${t.transform[0]}px,${t.transform[1]}px) scale(${t.transform[2]}) translate(${l}px,${a}px)`}};function KS({onSelectionContextMenu:t,noPanClassName:r,disableKeyboardA11y:i}){const l=Oe(),{width:a,height:u,transformString:d,userSelectionActive:f}=Re(QS,Ue),p=Ig(),y=O.useRef(null);O.useEffect(()=>{var S;i||(S=y.current)==null||S.focus({preventScroll:!0})},[i]);const m=!f&&a!==null&&u!==null;if(Pg({nodeRef:y,disabled:!m}),!m)return null;const x=t?S=>{const _=l.getState().nodes.filter(C=>C.selected);t(S,_)}:void 0,v=S=>{Object.prototype.hasOwnProperty.call(fl,S.key)&&(S.preventDefault(),p({direction:fl[S.key],factor:S.shiftKey?4:1}))};return g.jsx("div",{className:Qe(["react-flow__nodesselection","react-flow__container",r]),style:{transform:d},children:g.jsx("div",{ref:y,className:"react-flow__nodesselection-rect",onContextMenu:x,tabIndex:i?void 0:-1,onKeyDown:i?void 0:v,style:{width:a,height:u}})})}const Xh=typeof window<"u"?window:void 0,qS=t=>({nodesSelectionActive:t.nodesSelectionActive,userSelectionActive:t.userSelectionActive});function zg({children:t,onPaneClick:r,onPaneMouseEnter:i,onPaneMouseMove:l,onPaneMouseLeave:a,onPaneContextMenu:u,onPaneScroll:d,paneClickDistance:f,deleteKeyCode:p,selectionKeyCode:y,selectionOnDrag:m,selectionMode:x,onSelectionStart:v,onSelectionEnd:S,multiSelectionKeyCode:_,panActivationKeyCode:C,zoomActivationKeyCode:E,elementsSelectable:N,zoomOnScroll:R,zoomOnPinch:k,panOnScroll:j,panOnScrollSpeed:L,panOnScrollMode:D,zoomOnDoubleClick:B,panOnDrag:H,autoPanOnSelection:X,defaultViewport:ee,translateExtent:Z,minZoom:te,maxZoom:J,preventScrolling:M,onSelectionContextMenu:W,noWheelClassName:V,noPanClassName:U,disableKeyboardA11y:A,onViewportChange:b,isControlledViewport:F}){const{nodesSelectionActive:P,userSelectionActive:T}=Re(qS,Ue),ne=xi(y,{target:Xh}),re=xi(C,{target:Xh}),ue=re||H,ce=re||j,de=m&&ue!==!0,Q=ne||T||de;return MS({deleteKeyCode:p,multiSelectionKeyCode:_}),g.jsx(RS,{onPaneContextMenu:u,elementsSelectable:N,zoomOnScroll:R,zoomOnPinch:k,panOnScroll:ce,panActivationKeyPressed:re,panOnScrollSpeed:L,panOnScrollMode:D,zoomOnDoubleClick:B,panOnDrag:!ne&&ue,defaultViewport:ee,translateExtent:Z,minZoom:te,maxZoom:J,zoomActivationKeyCode:E,preventScrolling:M,noWheelClassName:V,noPanClassName:U,onViewportChange:b,isControlledViewport:F,paneClickDistance:f,selectionOnDrag:de,children:g.jsxs(bS,{onSelectionStart:v,onSelectionEnd:S,onPaneClick:r,onPaneMouseEnter:i,onPaneMouseMove:l,onPaneMouseLeave:a,onPaneContextMenu:u,onPaneScroll:d,panOnDrag:ue,autoPanOnSelection:X,isSelecting:!!Q,selectionMode:x,selectionKeyPressed:ne,paneClickDistance:f,selectionOnDrag:de,children:[t,P&&g.jsx(KS,{onSelectionContextMenu:W,noPanClassName:U,disableKeyboardA11y:A})]})})}zg.displayName="FlowRenderer";const ZS=O.memo(zg),JS=t=>r=>t?oc(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 e_(t){return Re(O.useCallback(JS(t),[t]),Ue)}const t_=t=>t.updateNodeInternals;function n_(){const t=Re(t_),[r]=O.useState(()=>typeof ResizeObserver>"u"?null:new ResizeObserver(i=>{const l=new Map;i.forEach(a=>{const u=a.target.getAttribute("data-id");l.set(u,{id:u,nodeElement:a.target,force:!0})}),t(l)}));return O.useEffect(()=>()=>{r==null||r.disconnect()},[r]),r}function r_({node:t,nodeType:r,hasDimensions:i,resizeObserver:l}){const a=Oe(),u=O.useRef(null),d=O.useRef(null),f=O.useRef(t.sourcePosition),p=O.useRef(t.targetPosition),y=O.useRef(r),m=i&&!!t.internals.handleBounds;return O.useEffect(()=>{u.current&&!t.hidden&&(!m||d.current!==u.current)&&(d.current&&(l==null||l.unobserve(d.current)),l==null||l.observe(u.current),d.current=u.current)},[m,t.hidden]),O.useEffect(()=>()=>{d.current&&(l==null||l.unobserve(d.current),d.current=null)},[]),O.useEffect(()=>{if(u.current){const x=y.current!==r,v=f.current!==t.sourcePosition,S=p.current!==t.targetPosition;(x||v||S)&&(y.current=r,f.current=t.sourcePosition,p.current=t.targetPosition,a.getState().updateNodeInternals(new Map([[t.id,{id:t.id,nodeElement:u.current,force:!0}]])))}},[t.id,r,t.sourcePosition,t.targetPosition]),u}function o_({id:t,onClick:r,onMouseEnter:i,onMouseMove:l,onMouseLeave:a,onContextMenu:u,onDoubleClick:d,nodesDraggable:f,elementsSelectable:p,nodesConnectable:y,nodesFocusable:m,resizeObserver:x,noDragClassName:v,noPanClassName:S,disableKeyboardA11y:_,rfId:C,nodeTypes:E,nodeClickDistance:N,onError:R}){const{node:k,internals:j,isParent:L}=Re(Q=>{const se=Q.nodeLookup.get(t),fe=Q.parentLookup.has(t);return{node:se,internals:se.internals,isParent:fe}},Ue);let D=k.type||"default",B=(E==null?void 0:E[D])||Yh[D];B===void 0&&(R==null||R("003",tn.error003(D)),D="default",B=(E==null?void 0:E.default)||Yh.default);const H=!!(k.draggable||f&&typeof k.draggable>"u"),X=!!(k.selectable||p&&typeof k.selectable>"u"),ee=!!(k.connectable||y&&typeof k.connectable>"u"),Z=!!(k.focusable||m&&typeof k.focusable>"u"),te=Oe(),J=eg(k),M=r_({node:k,nodeType:D,hasDimensions:J,resizeObserver:x}),W=Pg({nodeRef:M,disabled:k.hidden||!H,noDragClassName:v,handleSelector:k.dragHandle,nodeId:t,isSelectable:X,nodeClickDistance:N}),V=Ig();if(k.hidden)return null;const U=rn(k),A=GS(k),b=X||H||r||i||l||a,F=i?Q=>i(Q,{...j.userNode}):void 0,P=l?Q=>l(Q,{...j.userNode}):void 0,T=a?Q=>a(Q,{...j.userNode}):void 0,ne=u?Q=>u(Q,{...j.userNode}):void 0,re=d?Q=>d(Q,{...j.userNode}):void 0,ue=Q=>{const{selectNodesOnDrag:se,nodeDragThreshold:fe}=te.getState();X&&(!se||!H||fe>0)&&Gu({id:t,store:te,nodeRef:M}),r&&r(Q,{...j.userNode})},ce=Q=>{if(!(rg(Q.nativeEvent)||_)){if(Up.includes(Q.key)&&X){const se=Q.key==="Escape";Gu({id:t,store:te,unselect:se,nodeRef:M})}else if(H&&k.selected&&Object.prototype.hasOwnProperty.call(fl,Q.key)){Q.preventDefault();const{ariaLabelConfig:se}=te.getState();te.setState({ariaLiveMessage:se["node.a11yDescription.ariaLiveMessage"]({direction:Q.key.replace("Arrow","").toLowerCase(),x:~~j.positionAbsolute.x,y:~~j.positionAbsolute.y})}),V({direction:fl[Q.key],factor:Q.shiftKey?4:1})}}},de=()=>{var Ce;if(_||!((Ce=M.current)!=null&&Ce.matches(":focus-visible")))return;const{transform:Q,width:se,height:fe,autoPanOnNodeFocus:ge,setCenter:ve}=te.getState();if(!ge)return;oc(new Map([[t,k]]),{x:0,y:0,width:se,height:fe},Q,!0).length>0||ve(k.position.x+U.width/2,k.position.y+U.height/2,{zoom:Q[2]})};return g.jsx("div",{className:Qe(["react-flow__node",`react-flow__node-${D}`,{[S]:H},k.className,{selected:k.selected,selectable:X,parent:L,draggable:H,dragging:W}]),ref:M,style:{zIndex:j.z,transform:`translate(${j.positionAbsolute.x}px,${j.positionAbsolute.y}px)`,pointerEvents:b?"all":"none",visibility:J?"visible":"hidden",...k.style,...A},"data-id":t,"data-testid":`rf__node-${t}`,onMouseEnter:F,onMouseMove:P,onMouseLeave:T,onContextMenu:ne,onClick:ue,onDoubleClick:re,onKeyDown:Z?ce:void 0,tabIndex:Z?0:void 0,onFocus:Z?de:void 0,role:k.ariaRole??(Z?"group":void 0),"aria-roledescription":"node","aria-describedby":_?void 0:`${_g}-${C}`,"aria-label":k.ariaLabel,...k.domAttributes,children:g.jsx(DS,{value:t,children:g.jsx(B,{id:t,data:k.data,type:D,positionAbsoluteX:j.positionAbsolute.x,positionAbsoluteY:j.positionAbsolute.y,selected:k.selected??!1,selectable:X,draggable:H,deletable:k.deletable??!0,isConnectable:ee,sourcePosition:k.sourcePosition,targetPosition:k.targetPosition,dragging:W,dragHandle:k.dragHandle,zIndex:j.z,parentId:k.parentId,...U})})})}var i_=O.memo(o_);const s_=t=>({nodesConnectable:t.nodesConnectable,nodesFocusable:t.nodesFocusable,elementsSelectable:t.elementsSelectable,onError:t.onError});function Lg(t){const{nodesConnectable:r,nodesFocusable:i,elementsSelectable:l,onError:a}=Re(s_,Ue),u=e_(t.onlyRenderVisibleElements),d=n_();return g.jsx("div",{className:"react-flow__nodes",style:El,children:u.map(f=>g.jsx(i_,{id:f,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:i,elementsSelectable:l,nodeClickDistance:t.nodeClickDistance,onError:a},f))})}Lg.displayName="NodeRenderer";const l_=O.memo(Lg);function a_(t){return Re(O.useCallback(i=>{if(!t)return i.edges.map(a=>a.id);const l=[];if(i.width&&i.height)for(const a of i.edges){const u=i.nodeLookup.get(a.source),d=i.nodeLookup.get(a.target);u&&d&&t1({sourceNode:u,targetNode:d,width:i.width,height:i.height,transform:i.transform})&&l.push(a.id)}return l},[t]),Ue)}const u_=({color:t="none",strokeWidth:r=1})=>{const i={strokeWidth:r,...t&&{stroke:t}};return g.jsx("polyline",{className:"arrow",style:i,strokeLinecap:"round",fill:"none",strokeLinejoin:"round",points:"-5,-4 0,0 -5,4"})},c_=({color:t="none",strokeWidth:r=1})=>{const i={strokeWidth:r,...t&&{stroke:t,fill:t}};return g.jsx("polyline",{className:"arrowclosed",style:i,strokeLinecap:"round",strokeLinejoin:"round",points:"-5,-4 0,0 -5,4 -5,-4"})},Gh={[mi.Arrow]:u_,[mi.ArrowClosed]:c_};function d_(t){const r=Oe();return O.useMemo(()=>{var a,u;return Object.prototype.hasOwnProperty.call(Gh,t)?Gh[t]:((u=(a=r.getState()).onError)==null||u.call(a,"009",tn.error009(t)),null)},[t])}const f_=({id:t,type:r,color:i,width:l=12.5,height:a=12.5,markerUnits:u="strokeWidth",strokeWidth:d,orient:f="auto-start-reverse"})=>{const p=d_(r);return p?g.jsx("marker",{className:"react-flow__arrowhead",id:t,markerWidth:`${l}`,markerHeight:`${a}`,viewBox:"-10 -10 20 20",markerUnits:u,orient:f,refX:"0",refY:"0",children:g.jsx(p,{color:i,strokeWidth:d})}):null},bg=({defaultColor:t,rfId:r})=>{const i=Re(u=>u.edges),l=Re(u=>u.defaultEdgeOptions),a=O.useMemo(()=>u1(i,{id:r,defaultColor:t,defaultMarkerStart:l==null?void 0:l.markerStart,defaultMarkerEnd:l==null?void 0:l.markerEnd}),[i,l,r,t]);return a.length?g.jsx("svg",{className:"react-flow__marker","aria-hidden":"true",children:g.jsx("defs",{children:a.map(u=>g.jsx(f_,{id:u.id,type:u.type,color:u.color,width:u.width,height:u.height,markerUnits:u.markerUnits,strokeWidth:u.strokeWidth,orient:u.orient},u.id))})}):null};bg.displayName="MarkerDefinitions";var h_=O.memo(bg);function Ag({x:t,y:r,label:i,labelStyle:l,labelShowBg:a=!0,labelBgStyle:u,labelBgPadding:d=[2,4],labelBgBorderRadius:f=2,children:p,className:y,...m}){const[x,v]=O.useState({x:1,y:0,width:0,height:0}),S=Qe(["react-flow__edge-textwrapper",y]),_=O.useRef(null);return O.useEffect(()=>{if(_.current){const C=_.current.getBBox();v({x:C.x,y:C.y,width:C.width,height:C.height})}},[i]),i?g.jsxs("g",{transform:`translate(${t-x.width/2} ${r-x.height/2})`,className:S,visibility:x.width?"visible":"hidden",...m,children:[a&&g.jsx("rect",{width:x.width+2*d[0],x:-d[0],y:-d[1],height:x.height+2*d[1],className:"react-flow__edge-textbg",style:u,rx:f,ry:f}),g.jsx("text",{className:"react-flow__edge-text",y:x.height/2,dy:"0.3em",ref:_,style:l,children:i}),p]}):null}Ag.displayName="EdgeText";const p_=O.memo(Ag);function Nl({path:t,labelX:r,labelY:i,label:l,labelStyle:a,labelShowBg:u,labelBgStyle:d,labelBgPadding:f,labelBgBorderRadius:p,interactionWidth:y=20,...m}){return g.jsxs(g.Fragment,{children:[g.jsx("path",{...m,d:t,fill:"none",className:Qe(["react-flow__edge-path",m.className])}),y?g.jsx("path",{d:t,fill:"none",strokeOpacity:0,strokeWidth:y,className:"react-flow__edge-interaction"}):null,l&&Jt(r)&&Jt(i)?g.jsx(p_,{x:r,y:i,label:l,labelStyle:a,labelShowBg:u,labelBgStyle:d,labelBgPadding:f,labelBgBorderRadius:p}):null]})}function Qh({pos:t,x1:r,y1:i,x2:l,y2:a}){return t===_e.Left||t===_e.Right?[.5*(r+l),i]:[r,.5*(i+a)]}function Dg({sourceX:t,sourceY:r,sourcePosition:i=_e.Bottom,targetX:l,targetY:a,targetPosition:u=_e.Top}){const[d,f]=Qh({pos:i,x1:t,y1:r,x2:l,y2:a}),[p,y]=Qh({pos:u,x1:l,y1:a,x2:t,y2:r}),[m,x,v,S]=ig({sourceX:t,sourceY:r,targetX:l,targetY:a,sourceControlX:d,sourceControlY:f,targetControlX:p,targetControlY:y});return[`M${t},${r} C${d},${f} ${p},${y} ${l},${a}`,m,x,v,S]}function $g(t){return O.memo(({id:r,sourceX:i,sourceY:l,targetX:a,targetY:u,sourcePosition:d,targetPosition:f,label:p,labelStyle:y,labelShowBg:m,labelBgStyle:x,labelBgPadding:v,labelBgBorderRadius:S,style:_,markerEnd:C,markerStart:E,interactionWidth:N})=>{const[R,k,j]=Dg({sourceX:i,sourceY:l,sourcePosition:d,targetX:a,targetY:u,targetPosition:f}),L=t.isInternal?void 0:r;return g.jsx(Nl,{id:L,path:R,labelX:k,labelY:j,label:p,labelStyle:y,labelShowBg:m,labelBgStyle:x,labelBgPadding:v,labelBgBorderRadius:S,style:_,markerEnd:C,markerStart:E,interactionWidth:N})})}const g_=$g({isInternal:!1}),Og=$g({isInternal:!0});g_.displayName="SimpleBezierEdge";Og.displayName="SimpleBezierEdgeInternal";function Fg(t){return O.memo(({id:r,sourceX:i,sourceY:l,targetX:a,targetY:u,label:d,labelStyle:f,labelShowBg:p,labelBgStyle:y,labelBgPadding:m,labelBgBorderRadius:x,style:v,sourcePosition:S=_e.Bottom,targetPosition:_=_e.Top,markerEnd:C,markerStart:E,pathOptions:N,interactionWidth:R})=>{const[k,j,L]=Uu({sourceX:i,sourceY:l,sourcePosition:S,targetX:a,targetY:u,targetPosition:_,borderRadius:N==null?void 0:N.borderRadius,offset:N==null?void 0:N.offset,stepPosition:N==null?void 0:N.stepPosition}),D=t.isInternal?void 0:r;return g.jsx(Nl,{id:D,path:k,labelX:j,labelY:L,label:d,labelStyle:f,labelShowBg:p,labelBgStyle:y,labelBgPadding:m,labelBgBorderRadius:x,style:v,markerEnd:C,markerStart:E,interactionWidth:R})})}const Hg=Fg({isInternal:!1}),Bg=Fg({isInternal:!0});Hg.displayName="SmoothStepEdge";Bg.displayName="SmoothStepEdgeInternal";function Vg(t){return O.memo(({id:r,...i})=>{var a;const l=t.isInternal?void 0:r;return g.jsx(Hg,{...i,id:l,pathOptions:O.useMemo(()=>{var u;return{borderRadius:0,offset:(u=i.pathOptions)==null?void 0:u.offset}},[(a=i.pathOptions)==null?void 0:a.offset])})})}const m_=Vg({isInternal:!1}),Ug=Vg({isInternal:!0});m_.displayName="StepEdge";Ug.displayName="StepEdgeInternal";function Wg(t){return O.memo(({id:r,sourceX:i,sourceY:l,targetX:a,targetY:u,label:d,labelStyle:f,labelShowBg:p,labelBgStyle:y,labelBgPadding:m,labelBgBorderRadius:x,style:v,markerEnd:S,markerStart:_,interactionWidth:C})=>{const[E,N,R]=ag({sourceX:i,sourceY:l,targetX:a,targetY:u}),k=t.isInternal?void 0:r;return g.jsx(Nl,{id:k,path:E,labelX:N,labelY:R,label:d,labelStyle:f,labelShowBg:p,labelBgStyle:y,labelBgPadding:m,labelBgBorderRadius:x,style:v,markerEnd:S,markerStart:_,interactionWidth:C})})}const y_=Wg({isInternal:!1}),Yg=Wg({isInternal:!0});y_.displayName="StraightEdge";Yg.displayName="StraightEdgeInternal";function Xg(t){return O.memo(({id:r,sourceX:i,sourceY:l,targetX:a,targetY:u,sourcePosition:d=_e.Bottom,targetPosition:f=_e.Top,label:p,labelStyle:y,labelShowBg:m,labelBgStyle:x,labelBgPadding:v,labelBgBorderRadius:S,style:_,markerEnd:C,markerStart:E,pathOptions:N,interactionWidth:R})=>{const[k,j,L]=sg({sourceX:i,sourceY:l,sourcePosition:d,targetX:a,targetY:u,targetPosition:f,curvature:N==null?void 0:N.curvature}),D=t.isInternal?void 0:r;return g.jsx(Nl,{id:D,path:k,labelX:j,labelY:L,label:p,labelStyle:y,labelShowBg:m,labelBgStyle:x,labelBgPadding:v,labelBgBorderRadius:S,style:_,markerEnd:C,markerStart:E,interactionWidth:R})})}const v_=Xg({isInternal:!1}),Gg=Xg({isInternal:!0});v_.displayName="BezierEdge";Gg.displayName="BezierEdgeInternal";const Kh={default:Gg,straight:Yg,step:Ug,smoothstep:Bg,simplebezier:Og},qh={sourceX:null,sourceY:null,targetX:null,targetY:null,sourcePosition:null,targetPosition:null,zIndex:void 0},x_=(t,r,i)=>i===_e.Left?t-r:i===_e.Right?t+r:t,w_=(t,r,i)=>i===_e.Top?t-r:i===_e.Bottom?t+r:t,Zh="react-flow__edgeupdater";function Jh({position:t,centerX:r,centerY:i,radius:l=10,onMouseDown:a,onMouseEnter:u,onMouseOut:d,type:f}){return g.jsx("circle",{onMouseDown:a,onMouseEnter:u,onMouseOut:d,className:Qe([Zh,`${Zh}-${f}`]),cx:x_(r,l,t),cy:w_(i,l,t),r:l,stroke:"transparent",fill:"transparent"})}function S_({isReconnectable:t,reconnectRadius:r,edge:i,sourceX:l,sourceY:a,targetX:u,targetY:d,sourcePosition:f,targetPosition:p,onReconnect:y,onReconnectStart:m,onReconnectEnd:x,setReconnecting:v,setUpdateHover:S}){const _=Oe(),C=(j,L)=>{if(j.button!==0)return;const{autoPanOnConnect:D,domNode:B,connectionMode:H,connectionRadius:X,lib:ee,onConnectStart:Z,cancelConnection:te,nodeLookup:J,rfId:M,panBy:W,updateConnection:V}=_.getState(),U=L.type==="target",A=(P,T)=>{v(!1),x==null||x(P,i,L.type,T)},b=P=>y==null?void 0:y(i,P),F=(P,T)=>{v(!0),m==null||m(j,i,L.type),Z==null||Z(P,T)};Xu.onPointerDown(j.nativeEvent,{autoPanOnConnect:D,connectionMode:H,connectionRadius:X,domNode:B,handleId:L.id,nodeId:L.nodeId,nodeLookup:J,isTarget:U,edgeUpdaterType:L.type,lib:ee,flowId:M,cancelConnection:te,panBy:W,isValidConnection:(...P)=>{var T,ne;return((ne=(T=_.getState()).isValidConnection)==null?void 0:ne.call(T,...P))??!0},onConnect:b,onConnectStart:F,onConnectEnd:(...P)=>{var T,ne;return(ne=(T=_.getState()).onConnectEnd)==null?void 0:ne.call(T,...P)},onReconnectEnd:A,updateConnection:V,getTransform:()=>_.getState().transform,getFromHandle:()=>_.getState().connection.fromHandle,dragThreshold:_.getState().connectionDragThreshold,handleDomNode:j.currentTarget})},E=j=>C(j,{nodeId:i.target,id:i.targetHandle??null,type:"target"}),N=j=>C(j,{nodeId:i.source,id:i.sourceHandle??null,type:"source"}),R=()=>S(!0),k=()=>S(!1);return g.jsxs(g.Fragment,{children:[(t===!0||t==="source")&&g.jsx(Jh,{position:f,centerX:l,centerY:a,radius:r,onMouseDown:E,onMouseEnter:R,onMouseOut:k,type:"source"}),(t===!0||t==="target")&&g.jsx(Jh,{position:p,centerX:u,centerY:d,radius:r,onMouseDown:N,onMouseEnter:R,onMouseOut:k,type:"target"})]})}function __({id:t,edgesFocusable:r,edgesReconnectable:i,elementsSelectable:l,onClick:a,onDoubleClick:u,onContextMenu:d,onMouseEnter:f,onMouseMove:p,onMouseLeave:y,reconnectRadius:m,onReconnect:x,onReconnectStart:v,onReconnectEnd:S,rfId:_,edgeTypes:C,noPanClassName:E,onError:N,disableKeyboardA11y:R}){let k=Re(ve=>ve.edgeLookup.get(t));const j=Re(ve=>ve.defaultEdgeOptions);k=j?{...j,...k}:k;let L=k.type||"default",D=(C==null?void 0:C[L])||Kh[L];D===void 0&&(N==null||N("011",tn.error011(L)),L="default",D=(C==null?void 0:C.default)||Kh.default);const B=!!(k.focusable||r&&typeof k.focusable>"u"),H=typeof x<"u"&&(k.reconnectable||i&&typeof k.reconnectable>"u"),X=!!(k.selectable||l&&typeof k.selectable>"u"),ee=O.useRef(null),[Z,te]=O.useState(!1),[J,M]=O.useState(!1),W=Oe(),{zIndex:V=k.zIndex,sourceX:U,sourceY:A,targetX:b,targetY:F,sourcePosition:P,targetPosition:T}=Re(O.useCallback(ve=>{const pe=ve.nodeLookup.get(k.source),Ce=ve.nodeLookup.get(k.target);if(!pe||!Ce)return qh;const je=a1({id:t,sourceNode:pe,targetNode:Ce,sourceHandle:k.sourceHandle||null,targetHandle:k.targetHandle||null,connectionMode:ve.connectionMode,onError:N}),Me=e1({selected:k.selected,zIndex:k.zIndex,sourceNode:pe,targetNode:Ce,elevateOnSelect:ve.elevateEdgesOnSelect,zIndexMode:ve.zIndexMode});return{...je||qh,zIndex:Me}},[k.source,k.target,k.sourceHandle,k.targetHandle,k.selected,k.zIndex,N]),Ue),ne=O.useMemo(()=>k.markerStart?`url('#${Wu(k.markerStart,_)}')`:void 0,[k.markerStart,_]),re=O.useMemo(()=>k.markerEnd?`url('#${Wu(k.markerEnd,_)}')`:void 0,[k.markerEnd,_]);if(k.hidden||U===null||A===null||b===null||F===null)return null;const ue=ve=>{var Me;const{addSelectedEdges:pe,unselectNodesAndEdges:Ce,multiSelectionActive:je}=W.getState();X&&(W.setState({nodesSelectionActive:!1}),k.selected&&je?(Ce({nodes:[],edges:[k]}),(Me=ee.current)==null||Me.blur()):pe([t])),a&&a(ve,k)},ce=u?ve=>{u(ve,{...k})}:void 0,de=d?ve=>{d(ve,{...k})}:void 0,Q=f?ve=>{f(ve,{...k})}:void 0,se=p?ve=>{p(ve,{...k})}:void 0,fe=y?ve=>{y(ve,{...k})}:void 0,ge=ve=>{var pe;if(!R&&Up.includes(ve.key)&&X){const{unselectNodesAndEdges:Ce,addSelectedEdges:je}=W.getState();ve.key==="Escape"?((pe=ee.current)==null||pe.blur(),Ce({edges:[k]})):je([t])}};return g.jsx("svg",{style:{zIndex:V},children:g.jsxs("g",{className:Qe(["react-flow__edge",`react-flow__edge-${L}`,k.className,E,{selected:k.selected,animated:k.animated,inactive:!X&&!a,updating:Z,selectable:X}]),onClick:ue,onDoubleClick:ce,onContextMenu:de,onMouseEnter:Q,onMouseMove:se,onMouseLeave:fe,onKeyDown:B?ge:void 0,tabIndex:B?0:void 0,role:k.ariaRole??(B?"group":"img"),"aria-roledescription":"edge","data-id":t,"data-testid":`rf__edge-${t}`,"aria-label":k.ariaLabel===null?void 0:k.ariaLabel||`Edge from ${k.source} to ${k.target}`,"aria-describedby":B?`${kg}-${_}`:void 0,ref:ee,...k.domAttributes,children:[!J&&g.jsx(D,{id:t,source:k.source,target:k.target,type:k.type,selected:k.selected,animated:k.animated,selectable:X,deletable:k.deletable??!0,label:k.label,labelStyle:k.labelStyle,labelShowBg:k.labelShowBg,labelBgStyle:k.labelBgStyle,labelBgPadding:k.labelBgPadding,labelBgBorderRadius:k.labelBgBorderRadius,sourceX:U,sourceY:A,targetX:b,targetY:F,sourcePosition:P,targetPosition:T,data:k.data,style:k.style,sourceHandleId:k.sourceHandle,targetHandleId:k.targetHandle,markerStart:ne,markerEnd:re,pathOptions:"pathOptions"in k?k.pathOptions:void 0,interactionWidth:k.interactionWidth}),H&&g.jsx(S_,{edge:k,isReconnectable:H,reconnectRadius:m,onReconnect:x,onReconnectStart:v,onReconnectEnd:S,sourceX:U,sourceY:A,targetX:b,targetY:F,sourcePosition:P,targetPosition:T,setUpdateHover:te,setReconnecting:M})]})})}var k_=O.memo(__);const E_=t=>({edgesFocusable:t.edgesFocusable,edgesReconnectable:t.edgesReconnectable,elementsSelectable:t.elementsSelectable,connectionMode:t.connectionMode,onError:t.onError});function Qg({defaultMarkerColor:t,onlyRenderVisibleElements:r,rfId:i,edgeTypes:l,noPanClassName:a,onReconnect:u,onEdgeContextMenu:d,onEdgeMouseEnter:f,onEdgeMouseMove:p,onEdgeMouseLeave:y,onEdgeClick:m,reconnectRadius:x,onEdgeDoubleClick:v,onReconnectStart:S,onReconnectEnd:_,disableKeyboardA11y:C}){const{edgesFocusable:E,edgesReconnectable:N,elementsSelectable:R,onError:k}=Re(E_,Ue),j=a_(r);return g.jsxs("div",{className:"react-flow__edges",children:[g.jsx(h_,{defaultColor:t,rfId:i}),j.map(L=>g.jsx(k_,{id:L,edgesFocusable:E,edgesReconnectable:N,elementsSelectable:R,noPanClassName:a,onReconnect:u,onContextMenu:d,onMouseEnter:f,onMouseMove:p,onMouseLeave:y,onClick:m,reconnectRadius:x,onDoubleClick:v,onReconnectStart:S,onReconnectEnd:_,rfId:i,onError:k,edgeTypes:l,disableKeyboardA11y:C},L))]})}Qg.displayName="EdgeRenderer";const N_=O.memo(Qg),ep=t=>`translate(${t[0]}px,${t[1]}px) scale(${t[2]})`;function C_({children:t}){const r=Oe(),i=O.useRef(null),[l]=O.useState(()=>r.getState().transform);return jg(()=>{let a=null;const u=()=>{const d=r.getState().transform;a&&d[0]===a[0]&&d[1]===a[1]&&d[2]===a[2]||(a=d,i.current&&(i.current.style.transform=ep(d)))};return u(),r.subscribe(u)},[r]),g.jsx("div",{ref:i,className:"react-flow__viewport xyflow__viewport react-flow__container",style:{transform:ep(l)},children:t})}function j_(t){const r=hc(),i=O.useRef(!1);O.useEffect(()=>{!i.current&&r.viewportInitialized&&t&&(setTimeout(()=>t(r),1),i.current=!0)},[t,r.viewportInitialized])}const M_=t=>{var r;return(r=t.panZoom)==null?void 0:r.syncViewport};function P_(t){const r=Re(M_),i=Oe();return O.useEffect(()=>{t&&(r==null||r(t),i.setState({transform:[t.x,t.y,t.zoom]}))},[t,r]),null}function I_(t){return t.connection.inProgress?{...t.connection,to:Ci(t.connection.to,t.transform)}:{...t.connection}}function R_(t){return I_}function T_(t){const r=R_();return Re(r,Ue)}const z_=t=>({nodesConnectable:t.nodesConnectable,isValid:t.connection.isValid,inProgress:t.connection.inProgress,width:t.width,height:t.height});function L_({containerStyle:t,style:r,type:i,component:l}){const{nodesConnectable:a,width:u,height:d,isValid:f,inProgress:p}=Re(z_,Ue);return!(u&&a&&p)?null:g.jsx("svg",{style:t,width:u,height:d,className:"react-flow__connectionline react-flow__container",children:g.jsx("g",{className:Qe(["react-flow__connection",Xp(f)]),children:g.jsx(Kg,{style:r,type:i,CustomComponent:l,isValid:f})})})}const Kg=({style:t,type:r=Zn.Bezier,CustomComponent:i,isValid:l})=>{const{inProgress:a,from:u,fromNode:d,fromHandle:f,fromPosition:p,to:y,toNode:m,toHandle:x,toPosition:v,pointer:S}=T_();if(!a)return;if(i)return g.jsx(i,{connectionLineType:r,connectionLineStyle:t,fromNode:d,fromHandle:f,fromX:u.x,fromY:u.y,toX:y.x,toY:y.y,fromPosition:p,toPosition:v,connectionStatus:Xp(l),toNode:m,toHandle:x,pointer:S});let _="";const C={sourceX:u.x,sourceY:u.y,sourcePosition:p,targetX:y.x,targetY:y.y,targetPosition:v};switch(r){case Zn.Bezier:[_]=sg(C);break;case Zn.SimpleBezier:[_]=Dg(C);break;case Zn.Step:[_]=Uu({...C,borderRadius:0});break;case Zn.SmoothStep:[_]=Uu(C);break;default:[_]=ag(C)}return g.jsx("path",{d:_,fill:"none",className:"react-flow__connection-path",style:t})};Kg.displayName="ConnectionLine";const b_={};function tp(t=b_){O.useRef(t),Oe(),O.useEffect(()=>{},[t])}function A_(){Oe(),O.useRef(!1),O.useEffect(()=>{},[])}function qg({nodeTypes:t,edgeTypes:r,onInit:i,onNodeClick:l,onEdgeClick:a,onNodeDoubleClick:u,onEdgeDoubleClick:d,onNodeMouseEnter:f,onNodeMouseMove:p,onNodeMouseLeave:y,onNodeContextMenu:m,onSelectionContextMenu:x,onSelectionStart:v,onSelectionEnd:S,connectionLineType:_,connectionLineStyle:C,connectionLineComponent:E,connectionLineContainerStyle:N,selectionKeyCode:R,selectionOnDrag:k,selectionMode:j,multiSelectionKeyCode:L,panActivationKeyCode:D,zoomActivationKeyCode:B,deleteKeyCode:H,onlyRenderVisibleElements:X,elementsSelectable:ee,defaultViewport:Z,translateExtent:te,minZoom:J,maxZoom:M,preventScrolling:W,defaultMarkerColor:V,zoomOnScroll:U,zoomOnPinch:A,panOnScroll:b,panOnScrollSpeed:F,panOnScrollMode:P,zoomOnDoubleClick:T,panOnDrag:ne,autoPanOnSelection:re,onPaneClick:ue,onPaneMouseEnter:ce,onPaneMouseMove:de,onPaneMouseLeave:Q,onPaneScroll:se,onPaneContextMenu:fe,paneClickDistance:ge,nodeClickDistance:ve,onEdgeContextMenu:pe,onEdgeMouseEnter:Ce,onEdgeMouseMove:je,onEdgeMouseLeave:Me,reconnectRadius:ze,onReconnect:Xe,onReconnectStart:rt,onReconnectEnd:Ze,noDragClassName:Je,noWheelClassName:Vt,noPanClassName:bt,disableKeyboardA11y:At,nodeExtent:lt,rfId:ht,viewport:ot,onViewportChange:pt,nodesDraggable:Cn}){return tp(t),tp(r),A_(),j_(i),P_(ot),g.jsx(ZS,{onPaneClick:ue,onPaneMouseEnter:ce,onPaneMouseMove:de,onPaneMouseLeave:Q,onPaneContextMenu:fe,onPaneScroll:se,paneClickDistance:ge,deleteKeyCode:H,selectionKeyCode:R,selectionOnDrag:k,selectionMode:j,onSelectionStart:v,onSelectionEnd:S,multiSelectionKeyCode:L,panActivationKeyCode:D,zoomActivationKeyCode:B,elementsSelectable:ee,zoomOnScroll:U,zoomOnPinch:A,zoomOnDoubleClick:T,panOnScroll:b,panOnScrollSpeed:F,panOnScrollMode:P,panOnDrag:ne,autoPanOnSelection:re,defaultViewport:Z,translateExtent:te,minZoom:J,maxZoom:M,onSelectionContextMenu:x,preventScrolling:W,noDragClassName:Je,noWheelClassName:Vt,noPanClassName:bt,disableKeyboardA11y:At,onViewportChange:pt,isControlledViewport:!!ot,children:g.jsxs(C_,{children:[g.jsx(N_,{edgeTypes:r,onEdgeClick:a,onEdgeDoubleClick:d,onReconnect:Xe,onReconnectStart:rt,onReconnectEnd:Ze,onlyRenderVisibleElements:X,onEdgeContextMenu:pe,onEdgeMouseEnter:Ce,onEdgeMouseMove:je,onEdgeMouseLeave:Me,reconnectRadius:ze,defaultMarkerColor:V,noPanClassName:bt,disableKeyboardA11y:At,rfId:ht}),g.jsx(L_,{style:C,type:_,component:E,containerStyle:N}),g.jsx("div",{className:"react-flow__edgelabel-renderer"}),g.jsx(l_,{nodeTypes:t,onNodeClick:l,onNodeDoubleClick:u,onNodeMouseEnter:f,onNodeMouseMove:p,onNodeMouseLeave:y,onNodeContextMenu:m,nodeClickDistance:ve,onlyRenderVisibleElements:X,noPanClassName:bt,noDragClassName:Je,disableKeyboardA11y:At,nodeExtent:lt,rfId:ht,nodesDraggable:Cn}),g.jsx("div",{className:"react-flow__viewport-portal"})]})})}qg.displayName="GraphView";const D_=O.memo(qg),$_=Jp(),np=({nodes:t,edges:r,defaultNodes:i,defaultEdges:l,width:a,height:u,fitView:d,fitViewOptions:f,minZoom:p=.5,maxZoom:y=2,nodeOrigin:m,nodeExtent:x,zIndexMode:v="basic"}={})=>{const S=new Map,_=new Map,C=new Map,E=new Map,N=l??r??[],R=i??t??[],k=m??[0,0],j=x??pi;dg(C,E,N);const{nodesInitialized:L}=Yu(R,S,_,{nodeOrigin:k,nodeExtent:j,zIndexMode:v});let D=[0,0,1];if(d&&a&&u){const B=Ei(S,{filter:Z=>!!((Z.width||Z.initialWidth)&&(Z.height||Z.initialHeight))}),{x:H,y:X,zoom:ee}=sc(B,a,u,p,y,(f==null?void 0:f.padding)??.1);D=[H,X,ee]}return{rfId:"1",width:a??0,height:u??0,transform:D,nodes:R,nodesInitialized:L,nodeLookup:S,parentLookup:_,edges:N,edgeLookup:E,connectionLookup:C,onNodesChange:null,onEdgesChange:null,hasDefaultNodes:i!==void 0,hasDefaultEdges:l!==void 0,panZoom:null,minZoom:p,maxZoom:y,translateExtent:pi,nodeExtent:j,nodesSelectionActive:!1,userSelectionActive:!1,userSelectionRect:null,connectionMode:po.Strict,domNode:null,paneDragging:!1,noPanClassName:"nopan",nodeOrigin:k,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:f,fitViewResolver:null,connection:{...Yp},connectionClickStartHandle:null,connectOnClick:!0,ariaLiveMessage:"",autoPanOnConnect:!0,autoPanOnNodeDrag:!0,autoPanOnNodeFocus:!0,autoPanSpeed:15,connectionRadius:20,onError:$_,isValidConnection:void 0,onSelectionChangeHandlers:[],lib:"react",debug:!1,ariaLabelConfig:Wp,zIndexMode:v,onNodesChangeMiddlewareMap:new Map,onEdgesChangeMiddlewareMap:new Map}},O_=({nodes:t,edges:r,defaultNodes:i,defaultEdges:l,width:a,height:u,fitView:d,fitViewOptions:f,minZoom:p,maxZoom:y,nodeOrigin:m,nodeExtent:x,zIndexMode:v})=>q1((S,_)=>{async function C(){const{nodeLookup:E,panZoom:N,fitViewOptions:R,fitViewResolver:k,width:j,height:L,minZoom:D,maxZoom:B}=_();N&&(await Xw({nodes:E,width:j,height:L,panZoom:N,minZoom:D,maxZoom:B},R),k==null||k.resolve(!0),S({fitViewResolver:null}))}return{...np({nodes:t,edges:r,width:a,height:u,fitView:d,fitViewOptions:f,minZoom:p,maxZoom:y,nodeOrigin:m,nodeExtent:x,defaultNodes:i,defaultEdges:l,zIndexMode:v}),setNodes:E=>{const{nodeLookup:N,parentLookup:R,nodeOrigin:k,nodeExtent:j,elevateNodesOnSelect:L,fitViewQueued:D,zIndexMode:B,nodesSelectionActive:H}=_(),{nodesInitialized:X,hasSelectedNodes:ee}=Yu(E,N,R,{nodeOrigin:k,nodeExtent:j,elevateNodesOnSelect:L,checkEquality:!0,zIndexMode:B}),Z=H&ⅇD&&X?(C(),S({nodes:E,nodesInitialized:X,fitViewQueued:!1,fitViewOptions:void 0,nodesSelectionActive:Z})):S({nodes:E,nodesInitialized:X,nodesSelectionActive:Z})},setEdges:E=>{const{connectionLookup:N,edgeLookup:R}=_();dg(N,R,E),S({edges:E})},setDefaultNodesAndEdges:(E,N)=>{if(E){const{setNodes:R}=_();R(E),S({hasDefaultNodes:!0})}if(N){const{setEdges:R}=_();R(N),S({hasDefaultEdges:!0})}},updateNodeInternals:E=>{const{triggerNodeChanges:N,nodeLookup:R,parentLookup:k,domNode:j,nodeOrigin:L,nodeExtent:D,debug:B,fitViewQueued:H,zIndexMode:X}=_(),{changes:ee,updatedInternals:Z}=m1(E,R,k,j,L,D,X);Z&&(f1(R,k,{nodeOrigin:L,nodeExtent:D,zIndexMode:X}),H?(C(),S({fitViewQueued:!1,fitViewOptions:void 0})):S({}),(ee==null?void 0:ee.length)>0&&(B&&console.log("React Flow: trigger node changes",ee),N==null||N(ee)))},updateNodePositions:(E,N=!1)=>{const R=[];let k=[];const{nodeLookup:j,triggerNodeChanges:L,connection:D,updateConnection:B,onNodesChangeMiddlewareMap:H}=_();for(const[X,ee]of E){const Z=j.get(X),te=!!(Z!=null&&Z.expandParent&&(Z!=null&&Z.parentId)&&(ee!=null&&ee.position)),J={id:X,type:"position",position:te?{x:Math.max(0,ee.position.x),y:Math.max(0,ee.position.y)}:ee.position,dragging:N};if(Z&&D.inProgress&&D.fromNode.id===Z.id){const M=Mr(Z,D.fromHandle,_e.Left,!0);B({...D,from:M})}te&&Z.parentId&&R.push({id:X,parentId:Z.parentId,rect:{...ee.internals.positionAbsolute,width:ee.measured.width??0,height:ee.measured.height??0}}),k.push(J)}if(R.length>0){const{parentLookup:X,nodeOrigin:ee}=_(),Z=fc(R,j,X,ee);k.push(...Z)}for(const X of H.values())k=X(k);L(k)},triggerNodeChanges:E=>{const{onNodesChange:N,setNodes:R,nodes:k,hasDefaultNodes:j,debug:L}=_();if(E!=null&&E.length){if(j){const D=vS(E,k);R(D)}L&&console.log("React Flow: trigger node changes",E),N==null||N(E)}},triggerEdgeChanges:E=>{const{onEdgesChange:N,setEdges:R,edges:k,hasDefaultEdges:j,debug:L}=_();if(E!=null&&E.length){if(j){const D=xS(E,k);R(D)}L&&console.log("React Flow: trigger edge changes",E),N==null||N(E)}},addSelectedNodes:E=>{const{multiSelectionActive:N,edgeLookup:R,nodeLookup:k,triggerNodeChanges:j,triggerEdgeChanges:L}=_();if(N){const D=E.map(B=>wr(B,!0));j(D);return}j(ao(k,new Set([...E]),!0)),L(ao(R))},addSelectedEdges:E=>{const{multiSelectionActive:N,edgeLookup:R,nodeLookup:k,triggerNodeChanges:j,triggerEdgeChanges:L}=_();if(N){const D=E.map(B=>wr(B,!0));L(D);return}L(ao(R,new Set([...E]))),j(ao(k,new Set,!0))},unselectNodesAndEdges:({nodes:E,edges:N}={})=>{const{edges:R,nodes:k,nodeLookup:j,triggerNodeChanges:L,triggerEdgeChanges:D}=_(),B=E||k,H=N||R,X=[];for(const Z of B){if(!Z.selected)continue;const te=j.get(Z.id);te&&(te.selected=!1),X.push(wr(Z.id,!1))}const ee=[];for(const Z of H)Z.selected&&ee.push(wr(Z.id,!1));L(X),D(ee)},setMinZoom:E=>{const{panZoom:N,maxZoom:R}=_();N==null||N.setScaleExtent([E,R]),S({minZoom:E})},setMaxZoom:E=>{const{panZoom:N,minZoom:R}=_();N==null||N.setScaleExtent([R,E]),S({maxZoom:E})},setTranslateExtent:E=>{var N;(N=_().panZoom)==null||N.setTranslateExtent(E),S({translateExtent:E})},resetSelectedElements:()=>{const{edges:E,nodes:N,triggerNodeChanges:R,triggerEdgeChanges:k,elementsSelectable:j}=_();if(!j)return;const L=N.reduce((B,H)=>H.selected?[...B,wr(H.id,!1)]:B,[]),D=E.reduce((B,H)=>H.selected?[...B,wr(H.id,!1)]:B,[]);R(L),k(D)},setNodeExtent:E=>{const{nodes:N,nodeLookup:R,parentLookup:k,nodeOrigin:j,elevateNodesOnSelect:L,nodeExtent:D,zIndexMode:B}=_();E[0][0]===D[0][0]&&E[0][1]===D[0][1]&&E[1][0]===D[1][0]&&E[1][1]===D[1][1]||(Yu(N,R,k,{nodeOrigin:j,nodeExtent:E,elevateNodesOnSelect:L,checkEquality:!1,zIndexMode:B}),S({nodeExtent:E}))},panBy:E=>{const{transform:N,width:R,height:k,panZoom:j,translateExtent:L}=_();return y1({delta:E,panZoom:j,transform:N,translateExtent:L,width:R,height:k})},setCenter:async(E,N,R)=>{const{width:k,height:j,maxZoom:L,panZoom:D}=_();if(!D)return!1;const B=typeof(R==null?void 0:R.zoom)<"u"?R.zoom:L;return await D.setViewport({x:k/2-E*B,y:j/2-N*B,zoom:B},{duration:R==null?void 0:R.duration,ease:R==null?void 0:R.ease,interpolate:R==null?void 0:R.interpolate}),!0},cancelConnection:()=>{S({connection:{...Yp}})},updateConnection:E=>{S({connection:E})},reset:()=>S({...np()})}},Object.is);function Zg({initialNodes:t,initialEdges:r,defaultNodes:i,defaultEdges:l,initialWidth:a,initialHeight:u,initialMinZoom:d,initialMaxZoom:f,initialFitViewOptions:p,fitView:y,nodeOrigin:m,nodeExtent:x,zIndexMode:v,children:S}){const[_]=O.useState(()=>O_({nodes:t,edges:r,defaultNodes:i,defaultEdges:l,width:a,height:u,fitView:y,minZoom:d,maxZoom:f,fitViewOptions:p,nodeOrigin:m,nodeExtent:x,zIndexMode:v}));return g.jsx(Z1,{value:_,children:g.jsx(ES,{children:g.jsx(OS,{children:S})})})}function F_({children:t,nodes:r,edges:i,defaultNodes:l,defaultEdges:a,width:u,height:d,fitView:f,fitViewOptions:p,minZoom:y,maxZoom:m,nodeOrigin:x,nodeExtent:v,zIndexMode:S}){return O.useContext(_l)?g.jsx(g.Fragment,{children:t}):g.jsx(Zg,{initialNodes:r,initialEdges:i,defaultNodes:l,defaultEdges:a,initialWidth:u,initialHeight:d,fitView:f,initialFitViewOptions:p,initialMinZoom:y,initialMaxZoom:m,nodeOrigin:x,nodeExtent:v,zIndexMode:S,children:t})}const H_={width:"100%",height:"100%",overflow:"hidden",position:"relative",zIndex:0};function B_({nodes:t,edges:r,defaultNodes:i,defaultEdges:l,className:a,nodeTypes:u,edgeTypes:d,onNodeClick:f,onEdgeClick:p,onInit:y,onMove:m,onMoveStart:x,onMoveEnd:v,onConnect:S,onConnectStart:_,onConnectEnd:C,onClickConnectStart:E,onClickConnectEnd:N,onNodeMouseEnter:R,onNodeMouseMove:k,onNodeMouseLeave:j,onNodeContextMenu:L,onNodeDoubleClick:D,onNodeDragStart:B,onNodeDrag:H,onNodeDragStop:X,onNodesDelete:ee,onEdgesDelete:Z,onDelete:te,onSelectionChange:J,onSelectionDragStart:M,onSelectionDrag:W,onSelectionDragStop:V,onSelectionContextMenu:U,onSelectionStart:A,onSelectionEnd:b,onBeforeDelete:F,connectionMode:P,connectionLineType:T=Zn.Bezier,connectionLineStyle:ne,connectionLineComponent:re,connectionLineContainerStyle:ue,deleteKeyCode:ce="Backspace",selectionKeyCode:de="Shift",selectionOnDrag:Q=!1,selectionMode:se=gi.Full,panActivationKeyCode:fe="Space",multiSelectionKeyCode:ge=vi()?"Meta":"Control",zoomActivationKeyCode:ve=vi()?"Meta":"Control",snapToGrid:pe,snapGrid:Ce,onlyRenderVisibleElements:je=!1,selectNodesOnDrag:Me,nodesDraggable:ze,autoPanOnNodeFocus:Xe,nodesConnectable:rt,nodesFocusable:Ze,nodeOrigin:Je=Eg,edgesFocusable:Vt,edgesReconnectable:bt,elementsSelectable:At=!0,defaultViewport:lt=dS,minZoom:ht=.5,maxZoom:ot=2,translateExtent:pt=pi,preventScrolling:Cn=!0,nodeExtent:Ut,defaultMarkerColor:hn="#b1b1b7",zoomOnScroll:Ir=!0,zoomOnPinch:er=!0,panOnScroll:tr=!1,panOnScrollSpeed:Rr=.5,panOnScrollMode:jn=kr.Free,zoomOnDoubleClick:Mn=!0,panOnDrag:Pn=!0,onPaneClick:K,onPaneMouseEnter:Se,onPaneMouseMove:Le,onPaneMouseLeave:Nt,onPaneScroll:Ct,onPaneContextMenu:ji,paneClickDistance:Mi=1,nodeClickDistance:Pi=0,children:Ii,onReconnect:xo,onReconnectStart:Ri,onReconnectEnd:nr,onEdgeContextMenu:wo,onEdgeDoubleClick:rr,onEdgeMouseEnter:Cl,onEdgeMouseMove:or,onEdgeMouseLeave:Tr,reconnectRadius:zr=10,onNodesChange:So,onEdgesChange:jl,noDragClassName:Ml="nodrag",noWheelClassName:Pl="nowheel",noPanClassName:on="nopan",fitView:_o,fitViewOptions:ko,connectOnClick:Il,attributionPosition:Ti,proOptions:zi,defaultEdgeOptions:Li,elevateNodesOnSelect:bi=!0,elevateEdgesOnSelect:Rl=!1,disableKeyboardA11y:Ai=!1,autoPanOnConnect:He,autoPanOnNodeDrag:Tl,autoPanOnSelection:Eo=!0,autoPanSpeed:Di,connectionRadius:Lr,isValidConnection:zl,onError:$i,style:br,id:jt,nodeDragThreshold:Ll,connectionDragThreshold:Mt,viewport:bl,onViewportChange:Al,width:Dl,height:Ar,colorMode:Dr="light",debug:ir,onScroll:pn,ariaLabelConfig:$l,zIndexMode:Oi="basic",...No},Fi){const sr=jt||"1",lr=gS(Dr),Ol=O.useCallback($r=>{$r.currentTarget.scrollTo({top:0,left:0,behavior:"instant"}),pn==null||pn($r)},[pn]);return g.jsx("div",{"data-testid":"rf__wrapper",...No,onScroll:Ol,style:{...br,...H_},ref:Fi,className:Qe(["react-flow",a,lr]),id:jt,role:"application",children:g.jsxs(F_,{nodes:t,edges:r,width:Dl,height:Ar,fitView:_o,fitViewOptions:ko,minZoom:ht,maxZoom:ot,nodeOrigin:Je,nodeExtent:Ut,zIndexMode:Oi,children:[g.jsx(pS,{nodes:t,edges:r,defaultNodes:i,defaultEdges:l,onConnect:S,onConnectStart:_,onConnectEnd:C,onClickConnectStart:E,onClickConnectEnd:N,nodesDraggable:ze,autoPanOnNodeFocus:Xe,nodesConnectable:rt,nodesFocusable:Ze,edgesFocusable:Vt,edgesReconnectable:bt,elementsSelectable:At,elevateNodesOnSelect:bi,elevateEdgesOnSelect:Rl,minZoom:ht,maxZoom:ot,nodeExtent:Ut,onNodesChange:So,onEdgesChange:jl,snapToGrid:pe,snapGrid:Ce,connectionMode:P,translateExtent:pt,connectOnClick:Il,defaultEdgeOptions:Li,fitView:_o,fitViewOptions:ko,onNodesDelete:ee,onEdgesDelete:Z,onDelete:te,onNodeDragStart:B,onNodeDrag:H,onNodeDragStop:X,onSelectionDrag:W,onSelectionDragStart:M,onSelectionDragStop:V,onMove:m,onMoveStart:x,onMoveEnd:v,noPanClassName:on,nodeOrigin:Je,rfId:sr,autoPanOnConnect:He,autoPanOnNodeDrag:Tl,autoPanSpeed:Di,onError:$i,connectionRadius:Lr,isValidConnection:zl,selectNodesOnDrag:Me,nodeDragThreshold:Ll,connectionDragThreshold:Mt,onBeforeDelete:F,debug:ir,ariaLabelConfig:$l,zIndexMode:Oi}),g.jsx(D_,{onInit:y,onNodeClick:f,onEdgeClick:p,onNodeMouseEnter:R,onNodeMouseMove:k,onNodeMouseLeave:j,onNodeContextMenu:L,onNodeDoubleClick:D,nodeTypes:u,edgeTypes:d,connectionLineType:T,connectionLineStyle:ne,connectionLineComponent:re,connectionLineContainerStyle:ue,selectionKeyCode:de,selectionOnDrag:Q,selectionMode:se,deleteKeyCode:ce,multiSelectionKeyCode:ge,panActivationKeyCode:fe,zoomActivationKeyCode:ve,onlyRenderVisibleElements:je,defaultViewport:lt,translateExtent:pt,minZoom:ht,maxZoom:ot,preventScrolling:Cn,zoomOnScroll:Ir,zoomOnPinch:er,zoomOnDoubleClick:Mn,panOnScroll:tr,panOnScrollSpeed:Rr,panOnScrollMode:jn,panOnDrag:Pn,autoPanOnSelection:Eo,onPaneClick:K,onPaneMouseEnter:Se,onPaneMouseMove:Le,onPaneMouseLeave:Nt,onPaneScroll:Ct,onPaneContextMenu:ji,paneClickDistance:Mi,nodeClickDistance:Pi,onSelectionContextMenu:U,onSelectionStart:A,onSelectionEnd:b,onReconnect:xo,onReconnectStart:Ri,onReconnectEnd:nr,onEdgeContextMenu:wo,onEdgeDoubleClick:rr,onEdgeMouseEnter:Cl,onEdgeMouseMove:or,onEdgeMouseLeave:Tr,reconnectRadius:zr,defaultMarkerColor:hn,noDragClassName:Ml,noWheelClassName:Pl,noPanClassName:on,rfId:sr,disableKeyboardA11y:Ai,nodeExtent:Ut,viewport:bl,onViewportChange:Al,nodesDraggable:ze}),g.jsx(cS,{onSelectionChange:J}),Ii,g.jsx(iS,{proOptions:zi,position:Ti}),g.jsx(oS,{rfId:sr,disableKeyboardA11y:Ai})]})})}var V_=Cg(B_);function U_({dimensions:t,lineWidth:r,variant:i,className:l}){return g.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",i,l])})}function W_({radius:t,className:r}){return g.jsx("circle",{cx:t,cy:t,r:t,className:Qe(["react-flow__background-pattern","dots",r])})}var Jn;(function(t){t.Lines="lines",t.Dots="dots",t.Cross="cross"})(Jn||(Jn={}));const Y_={[Jn.Dots]:1,[Jn.Lines]:1,[Jn.Cross]:6},X_=t=>({transform:t.transform,patternId:`pattern-${t.rfId}`});function Jg({id:t,variant:r=Jn.Dots,gap:i=20,size:l,lineWidth:a=1,offset:u=0,color:d,bgColor:f,style:p,className:y,patternClassName:m}){const x=O.useRef(null),{transform:v,patternId:S}=Re(X_,Ue),_=l||Y_[r],C=r===Jn.Dots,E=r===Jn.Cross,N=Array.isArray(i)?i:[i,i],R=[N[0]*v[2]||1,N[1]*v[2]||1],k=_*v[2],j=Array.isArray(u)?u:[u,u],L=E?[k,k]:R,D=[j[0]*v[2]+L[0]/2,j[1]*v[2]+L[1]/2],B=`${S}${t||""}`;return g.jsxs("svg",{className:Qe(["react-flow__background",y]),style:{...p,...El,"--xy-background-color-props":f,"--xy-background-pattern-color-props":d},ref:x,"data-testid":"rf__background",children:[g.jsx("pattern",{id:B,x:v[0]%R[0],y:v[1]%R[1],width:R[0],height:R[1],patternUnits:"userSpaceOnUse",patternTransform:`translate(-${D[0]},-${D[1]})`,children:C?g.jsx(W_,{radius:k/2,className:m}):g.jsx(U_,{dimensions:L,lineWidth:a,variant:r,className:m})}),g.jsx("rect",{x:"0",y:"0",width:"100%",height:"100%",fill:`url(#${B})`})]})}Jg.displayName="Background";const G_=O.memo(Jg);function Q_(){return g.jsx("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",children:g.jsx("path",{d:"M32 18.133H18.133V32h-4.266V18.133H0v-4.266h13.867V0h4.266v13.867H32z"})})}function K_(){return g.jsx("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 5",children:g.jsx("path",{d:"M0 0h32v4.2H0z"})})}function q_(){return g.jsx("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 30",children:g.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 g.jsx("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 25 32",children:g.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 J_(){return g.jsx("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 25 32",children:g.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 qs({children:t,className:r,...i}){return g.jsx("button",{type:"button",className:Qe(["react-flow__controls-button",r]),...i,children:t})}const ek=t=>({isInteractive:t.nodesDraggable||t.nodesConnectable||t.elementsSelectable,minZoomReached:t.transform[2]<=t.minZoom,maxZoomReached:t.transform[2]>=t.maxZoom,ariaLabelConfig:t.ariaLabelConfig});function em({style:t,showZoom:r=!0,showFitView:i=!0,showInteractive:l=!0,fitViewOptions:a,onZoomIn:u,onZoomOut:d,onFitView:f,onInteractiveChange:p,className:y,children:m,position:x="bottom-left",orientation:v="vertical","aria-label":S}){const _=Oe(),{isInteractive:C,minZoomReached:E,maxZoomReached:N,ariaLabelConfig:R}=Re(ek,Ue),{zoomIn:k,zoomOut:j,fitView:L}=hc(),D=()=>{k(),u==null||u()},B=()=>{j(),d==null||d()},H=()=>{L(a),f==null||f()},X=()=>{_.setState({nodesDraggable:!C,nodesConnectable:!C,elementsSelectable:!C}),p==null||p(!C)},ee=v==="horizontal"?"horizontal":"vertical";return g.jsxs(kl,{className:Qe(["react-flow__controls",ee,y]),position:x,style:t,"data-testid":"rf__controls","aria-label":S??R["controls.ariaLabel"],children:[r&&g.jsxs(g.Fragment,{children:[g.jsx(qs,{onClick:D,className:"react-flow__controls-zoomin",title:R["controls.zoomIn.ariaLabel"],"aria-label":R["controls.zoomIn.ariaLabel"],disabled:N,children:g.jsx(Q_,{})}),g.jsx(qs,{onClick:B,className:"react-flow__controls-zoomout",title:R["controls.zoomOut.ariaLabel"],"aria-label":R["controls.zoomOut.ariaLabel"],disabled:E,children:g.jsx(K_,{})})]}),i&&g.jsx(qs,{className:"react-flow__controls-fitview",onClick:H,title:R["controls.fitView.ariaLabel"],"aria-label":R["controls.fitView.ariaLabel"],children:g.jsx(q_,{})}),l&&g.jsx(qs,{className:"react-flow__controls-interactive",onClick:X,title:R["controls.interactive.ariaLabel"],"aria-label":R["controls.interactive.ariaLabel"],children:C?g.jsx(J_,{}):g.jsx(Z_,{})}),m]})}em.displayName="Controls";const tk=O.memo(em);function nk({id:t,x:r,y:i,width:l,height:a,style:u,color:d,strokeColor:f,strokeWidth:p,className:y,borderRadius:m,shapeRendering:x,selected:v,onClick:S}){const{background:_,backgroundColor:C}=u||{},E=d||_||C;return g.jsx("rect",{className:Qe(["react-flow__minimap-node",{selected:v},y]),x:r,y:i,rx:m,ry:m,width:l,height:a,style:{fill:E,stroke:f,strokeWidth:p},shapeRendering:x,onClick:S?N=>S(N,t):void 0})}const rk=O.memo(nk),ok=t=>t.nodes.map(r=>r.id),zu=t=>t instanceof Function?t:()=>t;function ik({nodeStrokeColor:t,nodeColor:r,nodeClassName:i="",nodeBorderRadius:l=5,nodeStrokeWidth:a,nodeComponent:u=rk,onClick:d}){const f=Re(ok,Ue),p=zu(r),y=zu(t),m=zu(i),x=typeof window>"u"||window.chrome?"crispEdges":"geometricPrecision";return g.jsx(g.Fragment,{children:f.map(v=>g.jsx(lk,{id:v,nodeColorFunc:p,nodeStrokeColorFunc:y,nodeClassNameFunc:m,nodeBorderRadius:l,nodeStrokeWidth:a,NodeComponent:u,onClick:d,shapeRendering:x},v))})}function sk({id:t,nodeColorFunc:r,nodeStrokeColorFunc:i,nodeClassNameFunc:l,nodeBorderRadius:a,nodeStrokeWidth:u,shapeRendering:d,NodeComponent:f,onClick:p}){const{node:y,x:m,y:x,width:v,height:S}=Re(_=>{const C=_.nodeLookup.get(t);if(!C)return{node:void 0,x:0,y:0,width:0,height:0};const E=C.internals.userNode,{x:N,y:R}=C.internals.positionAbsolute,{width:k,height:j}=rn(E);return{node:E,x:N,y:R,width:k,height:j}},Ue);return!y||y.hidden||!eg(y)?null:g.jsx(f,{x:m,y:x,width:v,height:S,style:y.style,selected:!!y.selected,className:l(y),color:r(y),borderRadius:a,strokeColor:i(y),strokeWidth:u,shapeRendering:d,onClick:p,id:y.id})}const lk=O.memo(sk);var ak=O.memo(ik);const uk=200,ck=150,dk=t=>!t.hidden,fk=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?qp(Ei(t.nodeLookup,{filter:dk}),r):r,rfId:t.rfId,panZoom:t.panZoom,translateExtent:t.translateExtent,flowWidth:t.width,flowHeight:t.height,ariaLabelConfig:t.ariaLabelConfig}},rp=(t,r)=>t.x===r.x&&t.y===r.y&&t.width===r.width&&t.height===r.height,hk=(t,r)=>rp(t.viewBB,r.viewBB)&&rp(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,pk="react-flow__minimap-desc";function tm({style:t,className:r,nodeStrokeColor:i,nodeColor:l,nodeClassName:a="",nodeBorderRadius:u=5,nodeStrokeWidth:d,nodeComponent:f,bgColor:p,maskColor:y,maskStrokeColor:m,maskStrokeWidth:x,position:v="bottom-right",onClick:S,onNodeClick:_,pannable:C=!1,zoomable:E=!1,ariaLabel:N,inversePan:R,zoomStep:k=1,offsetScale:j=5}){const L=Oe(),D=O.useRef(null),{boundingRect:B,viewBB:H,rfId:X,panZoom:ee,translateExtent:Z,flowWidth:te,flowHeight:J,ariaLabelConfig:M}=Re(fk,hk),W=(t==null?void 0:t.width)??uk,V=(t==null?void 0:t.height)??ck,U=B.width/W,A=B.height/V,b=Math.max(U,A),F=b*W,P=b*V,T=j*b,ne=B.x-(F-B.width)/2-T,re=B.y-(P-B.height)/2-T,ue=F+T*2,ce=P+T*2,de=`${pk}-${X}`,Q=O.useRef(0),se=O.useRef();Q.current=b,O.useEffect(()=>{if(D.current&&ee)return se.current=C1({domNode:D.current,panZoom:ee,getTransform:()=>L.getState().transform,getViewScale:()=>Q.current}),()=>{var pe;(pe=se.current)==null||pe.destroy()}},[ee]),O.useEffect(()=>{var pe;(pe=se.current)==null||pe.update({translateExtent:Z,width:te,height:J,inversePan:R,pannable:C,zoomStep:k,zoomable:E})},[C,E,R,k,Z,te,J]);const fe=S?pe=>{var Me;const[Ce,je]=((Me=se.current)==null?void 0:Me.pointer(pe))||[0,0];S(pe,{x:Ce,y:je})}:void 0,ge=_?O.useCallback((pe,Ce)=>{const je=L.getState().nodeLookup.get(Ce).internals.userNode;_(pe,je)},[]):void 0,ve=N??M["minimap.ariaLabel"];return g.jsx(kl,{position:v,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 x=="number"?x*b: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 d=="number"?d:void 0},className:Qe(["react-flow__minimap",r]),"data-testid":"rf__minimap",children:g.jsxs("svg",{width:W,height:V,viewBox:`${ne} ${re} ${ue} ${ce}`,className:"react-flow__minimap-svg",role:"img","aria-labelledby":de,ref:D,onClick:fe,children:[ve&&g.jsx("title",{id:de,children:ve}),g.jsx(ak,{onClick:ge,nodeColor:l,nodeStrokeColor:i,nodeBorderRadius:u,nodeClassName:a,nodeStrokeWidth:d,nodeComponent:f}),g.jsx("path",{className:"react-flow__minimap-mask",d:`M${ne-T},${re-T}h${ue+T*2}v${ce+T*2}h${-ue-T*2}z + M${H.x},${H.y}h${H.width}v${H.height}h${-H.width}z`,fillRule:"evenodd",pointerEvents:"none"})]})})}tm.displayName="MiniMap";const gk=O.memo(tm),mk=t=>r=>t?`${Math.max(1/r.transform[2],1)}`:void 0,yk={[yo.Line]:"right",[yo.Handle]:"bottom-right"};function vk({nodeId:t,position:r,variant:i=yo.Handle,className:l,style:a=void 0,children:u,color:d,minWidth:f=10,minHeight:p=10,maxWidth:y=Number.MAX_VALUE,maxHeight:m=Number.MAX_VALUE,keepAspectRatio:x=!1,resizeDirection:v,autoScale:S=!0,shouldResize:_,onResizeStart:C,onResize:E,onResizeEnd:N}){const R=Rg(),k=typeof t=="string"?t:R,j=Oe(),L=O.useRef(null),D=i===yo.Handle,B=Re(O.useCallback(mk(D&&S),[D,S]),Ue),H=O.useRef(null),X=r??yk[i];O.useEffect(()=>{if(!(!L.current||!k))return H.current||(H.current=O1({domNode:L.current,nodeId:k,getStoreItems:()=>{const{nodeLookup:Z,transform:te,snapGrid:J,snapToGrid:M,nodeOrigin:W,domNode:V}=j.getState();return{nodeLookup:Z,transform:te,snapGrid:J,snapToGrid:M,nodeOrigin:W,paneDomNode:V}},onChange:(Z,te)=>{const{triggerNodeChanges:J,nodeLookup:M,parentLookup:W,nodeOrigin:V}=j.getState(),U=[],A={x:Z.x,y:Z.y},b=M.get(k);if(b&&b.expandParent&&b.parentId){const F=b.origin??V,P=Z.width??b.measured.width??0,T=Z.height??b.measured.height??0,ne={id:b.id,parentId:b.parentId,rect:{width:P,height:T,...tg({x:Z.x??b.position.x,y:Z.y??b.position.y},{width:P,height:T},b.parentId,M,F)}},re=fc([ne],M,W,V);U.push(...re),A.x=Z.x?Math.max(F[0]*P,Z.x):void 0,A.y=Z.y?Math.max(F[1]*T,Z.y):void 0}if(A.x!==void 0&&A.y!==void 0){const F={id:k,type:"position",position:{...A}};U.push(F)}if(Z.width!==void 0&&Z.height!==void 0){const P={id:k,type:"dimensions",resizing:!0,setAttributes:v?v==="horizontal"?"width":"height":!0,dimensions:{width:Z.width,height:Z.height}};U.push(P)}for(const F of te){const P={...F,type:"position"};U.push(P)}J(U)},onEnd:({width:Z,height:te})=>{const J={id:k,type:"dimensions",resizing:!1,dimensions:{width:Z,height:te}};j.getState().triggerNodeChanges([J])}})),H.current.update({controlPosition:X,boundaries:{minWidth:f,minHeight:p,maxWidth:y,maxHeight:m},keepAspectRatio:x,resizeDirection:v,onResizeStart:C,onResize:E,onResizeEnd:N,shouldResize:_}),()=>{var Z;(Z=H.current)==null||Z.destroy()}},[X,f,p,y,m,x,C,E,N,_]);const ee=X.split("-");return g.jsx("div",{className:Qe(["react-flow__resize-control","nodrag",...ee,i,l]),ref:L,style:{...a,scale:B,...d&&{[D?"backgroundColor":"borderColor"]:d}},children:u})}O.memo(vk);const xk={"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.form":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 gc(t){return xk[t]??8}function wk(t){const r=new Map;for(const l of t){const a=gc(l.type),u=r.get(a)??[];u.push(l),r.set(a,u)}const i=new Map;for(const[l,a]of r)a.sort((u,d)=>u.name.localeCompare(d.name)),a.forEach((u,d)=>{i.set(u.id,{x:l*260,y:d*108})});return i}const nm=90,Sk=new Set(["django.field","django.serializer_field","django.relation","django.test","react.test","django.url_name","django.throttle"]),op={"arch.context":"#edf2f4","django.app":"#8d99ae","django.route":"#4cc9f0","django.view":"#4895ef","django.viewset_action":"#4361ee","django.permission":"#7b8cde","django.serializer":"#f4a261","django.form":"#e9c46a","django.serializer_field":"#e9c46a","django.service":"#90be6d","django.model":"#2a9d8f","django.field":"#8ac926","django.task":"#e76f51","django.receiver":"#e85d04","django.signal":"#f4a261","django.test":"#6c757d","django.admin":"#adb5bd","django.migration_op":"#9d4edd","openapi.path":"#00bbf9","react.api_client":"#ff6b6b","react.query_key":"#adb5bd","react.hook":"#7b2cbf","react.feature":"#9d4edd","react.route":"#c77dff","react.page":"#c77dff","react.component":"#9d4edd","react.form_schema":"#ffd166","react.test":"#6c757d"},_k=Math.PI*(3-Math.sqrt(5)),rm=220,kk=26,Yk={0:"context",1:"routes",2:"views",3:"serializers",4:"services",5:"models",6:"fields",7:"jobs / signals",8:"openapi",9:"api client",10:"hooks",11:"pages",12:"components",13:"forms / tests"};function om(t){return t.startsWith("react.")?"react":t.startsWith("openapi.")?"stitch":t.startsWith("arch.")?"arch":"django"}function Xk(t){return op[t]?op[t]:t.startsWith("react.")?"#9d4edd":t.startsWith("openapi.")?"#00bbf9":"#4a5568"}function Ek(t){return t>=nm?"3d":"2d"}function Nk(t){return t>=nm?"overview":"full"}function Ck(t,r,i=1){const l=new Set([t]);let a=new Set([t]);for(let u=0;ui.families.has(om(f.type)));i.detail==="overview"&&(l=l.filter(f=>!Sk.has(f.type)));const a=new Set(l.map(f=>f.id)),u=r.filter(f=>a.has(f.src)&&a.has(f.dst)),d=i.focusId?Ck(i.focusId,u,1):new Set;if(i.neighborhoodOnly&&i.focusId&&d.size){l=l.filter(p=>d.has(p.id));const f=new Set(l.map(p=>p.id));return{nodes:l,edges:u.filter(p=>f.has(p.src)&&f.has(p.dst)),neighborIds:d}}return{nodes:l,edges:u,neighborIds:d}}function Gk(t){const r=new Map;for(const l of t){const a=gc(l.type),u=r.get(a)??[];u.push(l),r.set(a,u)}const i=new Map;for(const[l,a]of r){a.sort((d,f)=>d.name.localeCompare(f.name));const u=l*rm;a.forEach((d,f)=>{if(a.length===1){i.set(d.id,{x:u,y:0,z:0});return}const p=kk*Math.sqrt(f+1),y=f*_k;i.set(d.id,{x:u,y:p*Math.cos(y),z:p*Math.sin(y)})})}return i}function Qk(t){const r=new Map;for(const i of t){const l=gc(i.type);r.set(l,(r.get(l)||0)+1)}return[...r.entries()].sort((i,l)=>i[0]-l[0]).map(([i,l])=>({layer:i,x:i*rm,count:l}))}const Mk=O.lazy(()=>uy(()=>import("./LayeredGraph3D-CoG8lubm.js"),[],import.meta.url).then(t=>({default:t.LayeredGraph3D}))),Pk={cheap:"var(--edge-cheap)",expensive:"var(--edge-expensive)",critical:"var(--edge-critical)"};function Ik({data:t,selected:r}){return g.jsxs("div",{className:r?"lp-node selected":"lp-node",children:[g.jsx(vo,{type:"target",position:_e.Left,isConnectable:!1}),g.jsx("div",{className:"t",children:Qu(t.type)}),g.jsx("div",{className:"n",title:t.name,children:t.name}),g.jsx(vo,{type:"source",position:_e.Right,isConnectable:!1})]})}const Rk={load:Ik},ip=180,sp=56,Tk=new Set(["django","react","stitch","arch"]);function zk(t,r,i=null){const l=new Map(t.map(f=>[f.id,f])),a=wk(t),u=t.map(f=>({id:f.id,type:"load",position:a.get(f.id)??{x:0,y:0},data:{name:f.name,type:f.type,file:f.file_path},selected:i===f.id,sourcePosition:_e.Right,targetPosition:_e.Left,width:ip,height:sp,style:{width:ip,height:sp}})),d=r.filter(f=>l.has(f.src)&&l.has(f.dst)).map(f=>{const p=Pk[f.weight]||"var(--edge-cheap)";return{id:f.id,source:f.src,target:f.dst,type:"smoothstep",animated:f.weight==="critical",style:{stroke:p,strokeWidth:f.weight==="critical"?2.4:1.2,strokeDasharray:f.confidence<.8?"6 4":void 0},markerEnd:{type:mi.ArrowClosed,width:14,height:14,color:p},label:f.type.replaceAll("_"," "),labelStyle:{fill:"var(--muted)",fontSize:10}}});return{rfNodes:u,rfEdges:d}}function lp({node:t}){return g.jsxs("aside",{className:"inspector","data-testid":"graph-inspector",children:[g.jsx("div",{className:"t",children:Qu(t.type)}),g.jsx("div",{className:"n",children:Bs(t.name)}),t.context?g.jsx("div",{className:"muted",children:Bs(t.context)}):null,t.file_path?g.jsx("div",{className:"file",children:Bs(`${t.file_path}${t.start_line?`:${t.start_line}`:""}`)}):null,g.jsx("div",{className:"muted",children:Bs(t.qualified_name)})]})}function Lu({nodes:t,edges:r}){const[i,l]=O.useState(null),[a,u]=O.useState(null),[d,f]=O.useState(null),[p,y]=O.useState(new Set(Tk)),[m,x]=O.useState(!1),v=typeof window<"u"&&window.matchMedia("(prefers-reduced-motion: reduce)").matches,S=a??Ek(t.length),_=d??Nk(t.length),C=O.useMemo(()=>jk(t,r,{detail:_,families:p,focusId:i,neighborhoodOnly:m&&S==="3d"}),[t,r,_,p,i,m,S]),E=O.useMemo(()=>new Map(C.nodes.map(H=>[H.id,H])),[C.nodes]),N=i?E.get(i)??null:null,{rfNodes:R,rfEdges:k}=O.useMemo(()=>{const H=zk(C.nodes,C.edges,i);return v&&(H.rfEdges=H.rfEdges.map(X=>({...X,animated:!1}))),H},[C.nodes,C.edges,i,v]);O.useEffect(()=>{i&&!E.has(i)&&l(null)},[E,i]);const j=(H,X)=>{l(X.id)},L=H=>{y(X=>{const ee=new Set(X);if(ee.has(H)){if(ee.size===1)return X;ee.delete(H)}else ee.add(H);return ee})},D=O.useMemo(()=>{const H=new Set;for(const X of t)H.add(om(X.type));return H},[t]),B=t.length-C.nodes.length;return g.jsxs("div",{className:"impact-graph",style:{flex:1,minHeight:0,position:"relative",display:"flex",flexDirection:"column"},children:[g.jsxs("div",{className:"graph-toolbar","data-testid":"graph-toolbar",children:[g.jsxs("div",{className:"seg","aria-label":"Graph projection",children:[g.jsx("button",{type:"button","data-testid":"graph-view-2d",className:S==="2d"?"active":"","aria-pressed":S==="2d",onClick:()=>u("2d"),children:"2D map"}),g.jsx("button",{type:"button","data-testid":"graph-view-3d",className:S==="3d"?"active":"","aria-pressed":S==="3d",onClick:()=>u("3d"),children:"3D layers"})]}),g.jsxs("div",{className:"seg","aria-label":"Graph detail",children:[g.jsx("button",{type:"button","data-testid":"graph-detail-overview",className:_==="overview"?"active":"","aria-pressed":_==="overview",onClick:()=>f("overview"),children:"Overview"}),g.jsx("button",{type:"button","data-testid":"graph-detail-full",className:_==="full"?"active":"","aria-pressed":_==="full",onClick:()=>f("full"),children:"Full"})]}),g.jsx("div",{className:"seg","aria-label":"Graph families",children:["django","stitch","react"].filter(H=>D.has(H)).map(H=>g.jsx("button",{type:"button","data-testid":`graph-family-${H}`,className:p.has(H)?"active":"","aria-pressed":p.has(H),onClick:()=>L(H),children:H},H))}),S==="3d"?g.jsx("button",{type:"button",className:m?"chip-btn active":"chip-btn","data-testid":"graph-neighborhood",disabled:!i,onClick:()=>x(H=>!H),children:m?"Neighborhood":"Focus neighbors"}):null,g.jsxs("span",{className:"muted graph-count",children:[C.nodes.length," nodes · ",C.edges.length," edges",B?` · ${B} hidden`:""]})]}),g.jsx("div",{className:"graph-stage",children:S==="3d"?g.jsxs("div",{className:"graph-3d","data-testid":"graph-3d",children:[g.jsx("p",{className:"graph-3d-hint",children:"Architecture layers are stacked in depth (Django → stitch → React). Drag to orbit, scroll to zoom, click a node to inspect it."}),g.jsx(O.Suspense,{fallback:g.jsx("p",{className:"muted graph-3d-hint",children:"Loading 3D layers…"}),children:g.jsx(Mk,{nodes:C.nodes,edges:C.edges,selectedId:i,neighborIds:C.neighborIds,onSelect:H=>{l(H),H||x(!1)}})}),N?g.jsx(lp,{node:N}):null]}):g.jsxs(Zg,{children:[g.jsxs(V_,{nodes:R,edges:k,nodeTypes:Rk,fitView:!0,fitViewOptions:{padding:.2,maxZoom:1.15},minZoom:.25,nodesDraggable:!1,nodesConnectable:!1,elementsSelectable:!0,deleteKeyCode:null,onNodeClick:j,onPaneClick:()=>l(null),proOptions:{hideAttribution:!1},"data-testid":"impact-graph",children:[g.jsx(G_,{}),g.jsx(gk,{pannable:!0,zoomable:!0,ariaLabel:"Impact graph overview",nodeColor:"var(--muted)",nodeStrokeColor:"transparent",nodeStrokeWidth:0,maskColor:"rgba(0, 0, 0, 0.45)",maskStrokeColor:"var(--accent)",maskStrokeWidth:1.4,bgColor:"var(--graph-bg)",style:{width:184,height:128}}),g.jsx(tk,{})]}),N?g.jsx(lp,{node:N}):null]})})]})}const ap=[{value:"HEAD",label:"HEAD",group:"preset"},{value:"HEAD~1",label:"HEAD~1",group:"preset"}],Lk=["preset","branch","tag","commit"];function bk(t){var a;if(!(t!=null&&t.git))return[...ap];const r=((a=t.presets)!=null&&a.length?t.presets:ap.map(u=>u.value)).map(u=>({value:u,label:u,group:"preset"})),i=new Set(r.map(u=>u.value)),l=[...r];for(const u of t.branches||[])i.has(u.name)||(i.add(u.name),l.push({value:u.name,label:u.current?`${u.name} (current)`:u.name,detail:u.subject,group:"branch"}));for(const u of t.tags||[])i.has(u.name)||(i.add(u.name),l.push({value:u.name,label:u.name,detail:u.subject,group:"tag"}));for(const u of t.commits||[])i.has(u.sha)||(i.add(u.sha),l.push({value:u.sha,label:u.short,detail:u.subject,group:"commit"}));return l}function Ak(t,r){const i=r.trim().toLowerCase();return i?t.filter(l=>l.value.toLowerCase().includes(i)||l.label.toLowerCase().includes(i)||(l.detail||"").toLowerCase().includes(i)):t}function Dk(t){return Lk.map(r=>({group:r,items:t.filter(i=>i.group===r)})).filter(r=>r.items.length>0)}function $k(t){return t==="preset"?"Common":t==="branch"?"Branches":t==="tag"?"Tags":"Recent commits"}function up({value:t,onChange:r,placeholder:i,testId:l,menuTestId:a,refs:u,onNeedRefs:d}){const f=O.useId(),p=O.useRef(null),[y,m]=O.useState(!1),[x,v]=O.useState(null),[S,_]=O.useState(0),C=O.useMemo(()=>{const j=bk(u);return x===null?j:Ak(j,x)},[u,x]),E=O.useMemo(()=>Dk(C),[C]);O.useEffect(()=>{y&&d()},[y,d]),O.useEffect(()=>{_(0)},[x,y]);const N=()=>{m(!1),v(null)},R=j=>{r(j.value),N()},k=j=>{if(j.key==="ArrowDown"){if(j.preventDefault(),!y){m(!0);return}_(L=>Math.min(L+1,Math.max(C.length-1,0)))}else if(j.key==="ArrowUp"){if(j.preventDefault(),!y)return;_(L=>Math.max(L-1,0))}else if(j.key==="Enter"&&y){j.preventDefault();const L=C[S];L&&R(L)}else j.key==="Escape"&&y&&(j.preventDefault(),N())};return g.jsxs("div",{className:"combo",ref:p,onBlur:j=>{j.currentTarget.contains(j.relatedTarget)||N()},children:[g.jsxs("div",{className:"combo-row",children:[g.jsx("input",{"data-testid":l,value:t,placeholder:i,spellCheck:!1,role:"combobox","aria-expanded":y,"aria-controls":f,"aria-autocomplete":"list",onChange:j=>{r(j.target.value),y&&v(j.target.value)},onKeyDown:k}),g.jsx("button",{type:"button",className:"icon-btn combo-toggle","data-testid":`${l}-toggle`,"aria-label":"Show recent refs","aria-expanded":y,onMouseDown:j=>j.preventDefault(),onClick:()=>y?N():m(!0),children:g.jsx(sy,{})})]}),y?g.jsx("div",{className:"combo-menu",id:f,role:"listbox","data-testid":a,children:E.length===0?g.jsx("div",{className:"combo-empty muted",children:"No matching refs — the typed value is kept"}):E.map(j=>g.jsxs("div",{className:"combo-group",children:[g.jsx("div",{className:"combo-heading",children:$k(j.group)}),j.items.map(L=>{const D=C.indexOf(L);return g.jsxs("button",{type:"button",role:"option","aria-selected":D===S,className:D===S?"combo-option active":"combo-option","data-testid":`ref-option-${L.group}`,onMouseDown:B=>B.preventDefault(),onMouseEnter:()=>_(D),onClick:()=>R(L),children:[g.jsx("span",{className:"combo-label",children:L.label}),L.detail?g.jsx("span",{className:"combo-detail",children:L.detail}):null]},`${L.group}:${L.value}`)})]},j.group))}):null]})}function Ok({initialPath:t,onSelect:r,onClose:i}){const[l,a]=O.useState(null),[u,d]=O.useState(t),[f,p]=O.useState(null),[y,m]=O.useState(""),[x,v]=O.useState(!1),S=O.useRef(null),_=O.useRef(0),C=async k=>{const j=_.current+1;_.current=j,v(!0);try{const L=await ft.browse(k);if(_.current!==j)return;a(L),d(L.path),p(L.is_git?L.path:null),m("")}catch(L){if(_.current!==j)return;m(L instanceof Error?L.message:String(L))}finally{_.current===j&&v(!1)}};O.useEffect(()=>{var k,j;C(t),(k=S.current)==null||k.focus(),(j=S.current)==null||j.select()},[t]);const E=f||(l==null?void 0:l.path)||u,N=f&&f!==(l==null?void 0:l.path)?f.split(/[\\/]/).filter(Boolean).pop():l!=null&&l.is_git?"this repository":"this folder",R=k=>{k.key==="Escape"&&(k.preventDefault(),i())};return g.jsx("div",{className:"modal-backdrop","data-testid":"repo-explorer","data-overlay":"true",onClick:i,onKeyDown:R,children:g.jsxs("div",{className:"modal",role:"dialog","aria-modal":"true","aria-labelledby":"explorer-title",onClick:k=>k.stopPropagation(),children:[g.jsxs("div",{className:"modal-head",children:[g.jsxs("div",{children:[g.jsx("h2",{id:"explorer-title",children:"Select repository"}),g.jsx("p",{className:"muted",children:"Browse to a git root, or paste the full path."})]}),g.jsx("button",{type:"button",className:"btn ghost","data-testid":"explorer-cancel",onClick:i,children:"Cancel"})]}),g.jsxs("form",{className:"explorer-path",onSubmit:k=>{k.preventDefault(),C(u)},children:[g.jsx("input",{ref:S,"data-testid":"explorer-path",value:u,onChange:k=>d(k.target.value),spellCheck:!1,"aria-label":"Directory path"}),g.jsx("button",{type:"button",className:"btn",disabled:!(l!=null&&l.parent),onClick:()=>(l==null?void 0:l.parent)&&void C(l.parent),children:"Up"}),g.jsx("button",{type:"button",className:"btn",onClick:()=>l&&void C(l.home),children:"Home"}),g.jsx("button",{type:"submit",className:"btn",children:"Go"})]}),y?g.jsx("div",{className:"error",role:"alert",children:y}):null,g.jsx("div",{className:"explorer-list",role:"listbox","aria-label":"Folders","aria-busy":x,children:l!=null&&l.entries.length?l.entries.map(k=>{const j=f===k.path;return g.jsxs("button",{type:"button",role:"option","aria-selected":j,className:j?"explorer-row active":"explorer-row","data-testid":"explorer-entry","data-path":k.path,onClick:()=>p(k.path),onDoubleClick:()=>void C(k.path),children:[g.jsx(hp,{}),g.jsx("span",{className:"explorer-name",children:k.name}),k.is_git?g.jsx("span",{className:"chip git-badge",children:"git"}):null]},k.path)}):g.jsx("div",{className:"muted explorer-empty",children:x?"Loading…":"No folders here"})}),g.jsxs("div",{className:"modal-foot",children:[g.jsx("span",{className:"muted explorer-current",title:E,children:E}),g.jsxs("button",{type:"button",className:"btn primary","data-testid":"explorer-use",disabled:!E,onClick:()=>E&&r(E),children:["Use ",N]})]})]})})}const hl=[{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"}],Fk="obsidian",im="loadpath.theme";function Hk(t){return hl.some(r=>r.id===t)}function sm(){try{const t=localStorage.getItem(im)||"";if(Hk(t))return t}catch{}return Fk}function Bk(t){var r;return((r=hl.find(i=>i.id===t))==null?void 0:r.group)==="light"?"light":"dark"}function lm(t){document.documentElement.dataset.theme=t,document.documentElement.style.colorScheme=Bk(t);try{localStorage.setItem(im,t)}catch{}}const cp=[{id:"review",label:"Review",testId:"tab-review",shortcut:"1",icon:ty},{id:"architecture",label:"Architecture",testId:"tab-architecture",shortcut:"2",icon:ny},{id:"graph",label:"Impact graph",testId:"tab-graph",shortcut:"3",icon:ry},{id:"prs",label:"Pull requests",testId:"tab-prs",shortcut:"4",icon:oy},{id:"settings",label:"Settings",testId:"tab-settings",shortcut:"5",icon:iy}];function Vk(){var Ir,er,tr,Rr,jn,Mn,Pn;const[t,r]=O.useState("review"),[i,l]=O.useState(localStorage.getItem("loadpath.repo")||""),[a,u]=O.useState(localStorage.getItem("loadpath.base")||"HEAD~1"),[d,f]=O.useState(localStorage.getItem("loadpath.head")||"HEAD"),[p,y]=O.useState(null),[m,x]=O.useState(null),[v,S]=O.useState([]),[_,C]=O.useState("review"),[E,N]=O.useState(""),[R,k]=O.useState(""),[j,L]=O.useState(""),[D,B]=O.useState({}),[H,X]=O.useState([]),[ee,Z]=O.useState(localStorage.getItem("loadpath.scmRepo")||""),[te,J]=O.useState(localStorage.getItem("loadpath.provider")||"github"),[M,W]=O.useState(localStorage.getItem("loadpath.prNumber")||""),[V,U]=O.useState(""),[A,b]=O.useState(sm),[F,P]=O.useState(!1),[T,ne]=O.useState(!1),[re,ue]=O.useState(null),ce=O.useRef(i);ce.current=i;const de=O.useRef(!1);de.current=T;const Q=O.useRef(""),se=K=>{b(K),lm(K)},fe=O.useRef(""),ge=K=>{fe.current=K,k(K)};O.useEffect(()=>{ft.settings().then(B).catch(()=>{}).finally(()=>P(!0)),ft.repos().then(K=>S(K.repos)).catch(()=>{})},[]);const ve=()=>i.trim()?!0:(N("Point at a local repository path first."),!1);O.useEffect(()=>{if(t!=="architecture"||!i.trim())return;const K=i;let Se=!1;return ft.architecture(K).then(Le=>{!Se&&ce.current===K&&x(Le)}).catch(()=>{}),()=>{Se=!0}},[t,i]);const pe=K=>{l(K),localStorage.setItem("loadpath.repo",K),K.trim()!==Q.current&&(Q.current="",ue(null))},Ce=O.useCallback(()=>{const K=ce.current.trim();!K||Q.current===K||(Q.current=K,ft.gitRefs(K).then(Se=>{ce.current.trim()===K&&ue(Se)}).catch(()=>{Q.current===K&&(Q.current="",ue(null))}))},[]),je=(K,Se)=>{u(K),f(Se),localStorage.setItem("loadpath.base",K),localStorage.setItem("loadpath.head",Se)},Me=(K,Se,Le)=>{J(K),Z(Se),localStorage.setItem("loadpath.provider",K),localStorage.setItem("loadpath.scmRepo",Se),Le!==void 0&&(W(Le),localStorage.setItem("loadpath.prNumber",Le))},ze=async(K=i)=>{if(!K.trim())return null;const Se=await ft.architecture(K);return ce.current===K&&x(Se),Se},Xe=async()=>{if(!fe.current&&ve()){N(""),L(""),ge("Tracing load path…"),pe(i),je(a,d);try{const K=await ft.review(i,a,d,!0);y(K),C("review"),r("review"),await ft.repos().then(Se=>S(Se.repos)).catch(()=>{}),await ze(i)}catch(K){N(K instanceof Error?K.message:String(K))}finally{ge("")}}},rt=async(K=!0)=>{if(!fe.current&&ve()){N(""),L(""),ge(K?"Indexing…":"Full reindex…"),pe(i);try{await ft.index(i,K);const Se=await ze(i);await ft.repos().then(Le=>S(Le.repos)).catch(()=>{}),Se!=null&&Se.indexed&&(C("architecture"),r("architecture"))}catch(Se){N(Se instanceof Error?Se.message:String(Se))}finally{ge("")}}},Ze=async()=>{if(!fe.current&&ve()){N(""),L(""),ge("Detecting layout…"),pe(i);try{const K=await ft.init(i);L(K.message),await ft.repos().then(Se=>S(Se.repos)).catch(()=>{})}catch(K){N(K instanceof Error?K.message:String(K))}finally{ge("")}}},Je=async()=>{if(p!=null&&p.markdown)try{await navigator.clipboard.writeText(p.markdown),L("Copied markdown brief")}catch(K){N(K instanceof Error?K.message:String(K))}},Vt=async()=>{if(!fe.current){if(!(p!=null&&p.markdown)||!ee||!M){N("Pick a pull request first (Pull requests tab), then post the brief.");return}ge("Posting Loadpath brief…");try{const K=await ft.postComment(te,ee,Number(M),p.markdown);L(K.updated?"Updated the Loadpath PR comment":"Posted the Loadpath PR comment")}catch(K){N(K instanceof Error?K.message:String(K))}finally{ge("")}}},bt=async()=>{if(!fe.current){N(""),ge("Fetching pull requests…");try{const K=await ft.prs(te,ee);X(K.pull_requests)}catch(K){N(K instanceof Error?K.message:String(K))}finally{ge("")}}},At=async K=>{K.preventDefault();const Se=new FormData(K.currentTarget),Le={github_token:String(Se.get("github_token")||""),bitbucket_token:String(Se.get("bitbucket_token")||""),bitbucket_username:String(Se.get("bitbucket_username")||""),ai_provider:String(Se.get("ai_provider")||"none"),ai_api_key:String(Se.get("ai_api_key")||""),ai_model:String(Se.get("ai_model")||""),ai_base_url:String(Se.get("ai_base_url")||"")},Nt=v.length?{...Le,workspaces:v.map(Ct=>({path:Ct.path,name:Ct.name}))}:Le;try{B(await ft.saveSettings(Nt)),L("Settings saved on this machine")}catch(Ct){N(Ct instanceof Error?Ct.message:String(Ct))}},lt=async()=>{if(!(!p||fe.current)){ge("Residual analysis…");try{const K=await ft.residual(p);U(K.note)}catch(K){N(K instanceof Error?K.message:String(K))}finally{ge("")}}},ht=O.useRef(Xe);ht.current=Xe;const ot=O.useRef(t);ot.current=t,O.useEffect(()=>{const K=Se=>{if(de.current){Se.key==="Escape"&&(Se.preventDefault(),ne(!1));return}const Le=Se.target;if(Le&&(Le.tagName==="INPUT"||Le.tagName==="TEXTAREA"||Le.tagName==="SELECT"||Le.isContentEditable)){Se.key==="Escape"&&Le.blur();return}if(Se.key==="Escape"){N(""),L("");return}const Nt=cp.find(Ct=>Ct.shortcut===Se.key);if(Nt&&!Se.metaKey&&!Se.ctrlKey&&!Se.altKey&&r(Nt.id),(Se.metaKey||Se.ctrlKey)&&Se.key==="Enter"){if(ot.current==="settings"||ot.current==="prs"||fe.current)return;Se.preventDefault(),ht.current()}};return window.addEventListener("keydown",K),()=>window.removeEventListener("keydown",K)},[]);const pt=O.useMemo(()=>_==="architecture"?(m==null?void 0:m.nodes)??[]:(p==null?void 0:p.nodes)??[],[_,m,p]),Cn=O.useMemo(()=>_==="architecture"?(m==null?void 0:m.edges)??[]:(p==null?void 0:p.edges)??[],[_,m,p]),Ut=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",hn=((p==null?void 0:p.findings)||[]).filter(K=>!K.waived);return g.jsxs("div",{className:"app",children:[g.jsx("a",{className:"skip",href:"#main",children:"Skip to content"}),g.jsxs("nav",{className:"rail","data-testid":"rail","aria-label":"Primary",children:[g.jsxs("div",{className:"brand",children:[g.jsx("div",{className:"brand-mark",children:"Loadpath"}),g.jsx("div",{className:"brand-sub",children:"Load-path review"})]}),cp.map(K=>{const Se=K.icon,Le=t===K.id;return g.jsxs("button",{type:"button","data-testid":K.testId,className:Le?"nav-item active":"nav-item","aria-current":Le?"page":void 0,"aria-label":K.label,onClick:()=>r(K.id),children:[g.jsx(Se,{}),g.jsx("span",{children:K.label})]},K.id)}),g.jsxs("div",{className:"theme-pick",children:[g.jsx("label",{htmlFor:"theme-select",children:"Theme"}),g.jsx("select",{id:"theme-select","data-testid":"theme-select",value:A,onChange:K=>se(K.target.value),children:hl.map(K=>g.jsx("option",{value:K.id,children:K.label},K.id))})]}),g.jsxs("div",{className:"rail-foot",children:[g.jsx("div",{className:"muted",role:"status",children:R||Ut}),g.jsxs("div",{className:"kbd-hint",children:[g.jsx("kbd",{children:"1"}),"–",g.jsx("kbd",{children:"5"})," tabs · ",g.jsx("kbd",{children:"Ctrl"}),"+",g.jsx("kbd",{children:"Enter"})," review"]})]})]}),g.jsxs("div",{className:"main",id:"main",children:[R?g.jsxs("div",{className:"progress",role:"status","aria-live":"polite","aria-busy":"true",children:[g.jsx("i",{}),g.jsx("span",{className:"sr-only",children:R})]}):null,g.jsxs("header",{className:"topbar","data-testid":"topbar",children:[v.length>0?g.jsxs("label",{className:"field workspace",children:[g.jsx("span",{children:"Workspace"}),g.jsxs("select",{"data-testid":"workspace-select",value:v.some(K=>K.path===i)?i:"",onChange:K=>{K.target.value&&pe(K.target.value)},children:[g.jsx("option",{value:"",children:"Indexed repos…"}),v.map(K=>g.jsxs("option",{value:K.path,children:[K.name,K.indexed?` (${K.counts.nodes})`:""]},K.path))]})]}):null,g.jsxs("label",{className:"field path",children:[g.jsx("span",{children:"Repository"}),g.jsxs("div",{className:"path-row",children:[g.jsx("input",{"data-testid":"repo-path",placeholder:"Local monorepo path",value:i,onChange:K=>{const Se=K.target.value;l(Se),Se.trim()!==Q.current&&(Q.current="",ue(null))},spellCheck:!1}),g.jsx("button",{type:"button",className:"icon-btn","data-testid":"btn-browse-repo","aria-label":"Browse for a local repository",onClick:()=>ne(!0),children:g.jsx(hp,{})})]})]}),g.jsxs("label",{className:"field ref",children:[g.jsx("span",{children:"Base"}),g.jsx(up,{testId:"base-ref",menuTestId:"base-ref-menu",value:a,onChange:K=>je(K,d),placeholder:"base",refs:re,onNeedRefs:Ce})]}),g.jsxs("label",{className:"field ref",children:[g.jsx("span",{children:"Head"}),g.jsx(up,{testId:"head-ref",menuTestId:"head-ref-menu",value:d,onChange:K=>je(a,K),placeholder:"head",refs:re,onNeedRefs:Ce})]}),g.jsxs("div",{className:"topbar-actions",children:[g.jsx("button",{type:"button","data-testid":"btn-init",disabled:!!R,onClick:Ze,children:"Draft config"}),g.jsx("button",{type:"button","data-testid":"btn-index",disabled:!!R,onClick:()=>rt(!0),children:"Index"}),g.jsx("button",{type:"button","data-testid":"btn-review",className:"btn primary",disabled:!!R,onClick:Xe,children:"Review"})]})]}),g.jsxs("div",{className:"alerts",children:[E?g.jsxs("div",{className:"error","data-testid":"error",role:"alert",children:[g.jsx("span",{children:E}),g.jsx("button",{type:"button",className:"dismiss",onClick:()=>N(""),"aria-label":"Dismiss error",children:"Ă—"})]}):null,j?g.jsxs("div",{className:"banner","data-testid":"status-note",children:[g.jsx("span",{children:j}),g.jsx("button",{type:"button",className:"dismiss",onClick:()=>L(""),"aria-label":"Dismiss",children:"Ă—"})]}):null,((Ir=p==null?void 0:p.index)!=null&&Ir.stale||m!=null&&m.stale)&&(t==="review"||t==="architecture")?g.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,((er=p==null?void 0:p.index)==null?void 0:er.django_boot)==="failed"||(m==null?void 0:m.django_boot)==="failed"?g.jsx("div",{className:"banner warn","data-testid":"django-boot-failed",children:((tr=p==null?void 0:p.index)==null?void 0:tr.django_boot_detail)||(m==null?void 0:m.django_boot_detail)||"django.setup() failed"}):null,(Rr=p==null?void 0:p.workspace)!=null&&Rr.dirty_overlaps_review&&t==="review"?g.jsxs("div",{className:"banner warn","data-testid":"dirty-tree",children:["Uncommitted files overlap this review: ",(p.workspace.dirty_overlap||[]).slice(0,6).join(", ")]}):null]}),g.jsxs("div",{className:"stage",children:[t==="review"&&g.jsxs("div",{className:"content","data-testid":"review-layout",children:[g.jsx("aside",{className:"brief","data-testid":"brief",children:p?g.jsx(Uk,{review:p,findings:hn,aiNote:V,busy:!!R,onAskAi:lt,onCopy:Je,onPost:Vt}):g.jsxs("div",{className:"empty","data-testid":"review-empty",children:[g.jsx("h2",{children:"Trace the force of this diff"}),g.jsx("p",{children:"The graph is the architecture. The brief is where this change travels — not a hunk list."}),g.jsxs("ol",{children:[g.jsx("li",{children:"Point at a Django + React monorepo, or pick an indexed workspace."}),g.jsxs("li",{children:["Index it. Missing ",g.jsx("code",{children:"loadpath.yml"})," is drafted from ",g.jsx("code",{children:"manage.py"})," and"," ",g.jsx("code",{children:"src/features"}),"."]}),g.jsx("li",{children:"Review a git range, or open a pull request so base/head become a three-dot merge-base."})]})]})}),g.jsx("div",{className:"graph-wrap","data-testid":"review-graph",children:p?g.jsx(Lu,{nodes:p.nodes,edges:p.edges}):null})]}),t==="architecture"&&g.jsxs("div",{className:"content","data-testid":"architecture-panel",children:[g.jsx("aside",{className:"brief","data-testid":"architecture-brief",children:m!=null&&m.indexed?g.jsx(Wk,{architecture:m,busy:!!R,onReindex:()=>rt(!1),onReview:Xe}):g.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."})}),g.jsx("div",{className:"graph-wrap","data-testid":"architecture-graph",children:m!=null&&m.indexed?g.jsx(Lu,{nodes:m.nodes,edges:m.edges}):null})]}),t==="graph"&&g.jsxs("div",{className:"graph-wrap","data-testid":"graph-full",style:{height:"100%"},children:[g.jsxs("div",{className:"graph-modes",children:[g.jsxs("div",{className:"seg","aria-label":"Graph scope",children:[g.jsx("button",{type:"button","aria-pressed":_==="review","data-testid":"graph-mode-review",className:_==="review"?"active":"",onClick:()=>C("review"),children:"This review"}),g.jsx("button",{type:"button","aria-pressed":_==="architecture","data-testid":"graph-mode-architecture",className:_==="architecture"?"active":"",onClick:()=>C("architecture"),children:"Indexed architecture"})]}),g.jsxs("div",{className:"legend","aria-hidden":"true",children:[g.jsxs("span",{children:[g.jsx("i",{})," cheap"]}),g.jsxs("span",{children:[g.jsx("i",{className:"exp"})," expensive"]}),g.jsxs("span",{children:[g.jsx("i",{className:"crit"})," critical"]}),g.jsxs("span",{children:[g.jsx("i",{className:"dash"})," inferred"]})]})]}),pt.length?g.jsx(Lu,{nodes:pt,edges:Cn}):g.jsx("p",{className:"empty","data-testid":"graph-empty",children:"Index the repo or run a review first. Click a node to inspect it."})]}),t==="prs"&&g.jsxs("div",{className:"pr-list","data-testid":"pr-list",children:[g.jsxs("div",{className:"pr-toolbar",children:[g.jsxs("label",{className:"field provider",children:[g.jsx("span",{children:"Provider"}),g.jsxs("select",{"data-testid":"pr-provider",value:te,onChange:K=>Me(K.target.value,ee,M),children:[g.jsx("option",{value:"github",children:"GitHub"}),g.jsx("option",{value:"bitbucket",children:"Bitbucket"})]})]}),g.jsxs("label",{className:"field",children:[g.jsx("span",{children:"Repository"}),g.jsx("input",{"data-testid":"pr-repo",placeholder:"owner/repo",value:ee,onChange:K=>Me(te,K.target.value,M),spellCheck:!1})]}),g.jsx("button",{type:"button","data-testid":"btn-list-prs",className:"btn",disabled:!!R,onClick:bt,children:"List PRs"})]}),H.length===0?g.jsxs("div",{className:"empty","data-testid":"pr-empty",children:[g.jsx("h2",{children:"No pull requests loaded"}),g.jsx("p",{children:"Enter an owner/repo, then list open PRs. Reviewing a PR fills base and head from its SHAs."})]}):H.map(K=>g.jsxs("article",{className:"pr","data-testid":`pr-${K.number}`,children:[g.jsxs("h3",{children:["#",K.number," ",K.title]}),g.jsxs("div",{className:"pr-meta muted",children:[g.jsx("span",{className:`chip ${K.draft?"":"open"}`,children:K.draft?"draft":K.state}),g.jsx("span",{children:K.author}),g.jsxs("span",{children:[K.source_branch," → ",K.target_branch]})]}),g.jsxs("div",{className:"pr-actions",children:[g.jsxs("a",{href:K.url,target:"_blank",rel:"noreferrer",children:["Open on ",K.provider]}),g.jsx("button",{type:"button",className:"btn primary","data-testid":`pr-review-${K.number}`,onClick:()=>{je(K.base_sha||K.target_branch,K.head_sha||K.source_branch),Me(K.provider,K.repo,String(K.number)),r("review")},children:"Review this range"})]})]},`${K.provider}-${K.number}`))]}),t==="settings"&&F&&g.jsxs("form",{className:"settings","data-testid":"settings-form",onSubmit:At,children:[g.jsxs("div",{children:[g.jsx("h1",{children:"Settings"}),g.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."})]}),g.jsxs("section",{className:"settings-card",children:[g.jsx("h2",{children:"Appearance"}),g.jsx("p",{className:"muted",children:"Local to this browser. High contrast is a first-class theme, not an afterthought."}),g.jsx("div",{className:"theme-grid","data-testid":"theme-grid",children:hl.map(K=>g.jsxs("button",{type:"button",className:A===K.id?"theme-swatch active":"theme-swatch","data-testid":`theme-${K.id}`,onClick:()=>se(K.id),children:[g.jsx("div",{className:"name",children:K.label}),g.jsx("div",{className:"group",children:K.group})]},K.id))})]}),g.jsxs("section",{className:"settings-card",children:[g.jsx("h2",{children:"Source control"}),g.jsx("label",{htmlFor:"github_token",children:"GitHub token"}),g.jsx("input",{id:"github_token",name:"github_token",type:"password",placeholder:"ghp_…",autoComplete:"off"}),g.jsx("label",{htmlFor:"bitbucket_token",children:"Bitbucket token"}),g.jsx("input",{id:"bitbucket_token",name:"bitbucket_token",type:"password",autoComplete:"off"}),g.jsx("label",{htmlFor:"bitbucket_username",children:"Bitbucket username (app passwords)"}),g.jsx("input",{id:"bitbucket_username",name:"bitbucket_username",defaultValue:String(D.bitbucket_username||"")})]}),g.jsxs("section",{className:"settings-card",children:[g.jsx("h2",{children:"Residual AI"}),g.jsx("label",{htmlFor:"ai_provider",children:"Provider"}),g.jsxs("select",{id:"ai_provider",name:"ai_provider",defaultValue:String(((jn=D.ai)==null?void 0:jn.provider)||"none"),children:[g.jsx("option",{value:"none",children:"none (graph only)"}),g.jsx("option",{value:"anthropic",children:"Anthropic"}),g.jsx("option",{value:"openai",children:"OpenAI"}),g.jsx("option",{value:"grok",children:"Grok / xAI"}),g.jsx("option",{value:"deepseek",children:"DeepSeek"}),g.jsx("option",{value:"cursor",children:"Cursor-compatible (OpenAI protocol)"}),g.jsx("option",{value:"ollama",children:"Ollama local"})]}),g.jsx("label",{htmlFor:"ai_api_key",children:"API key"}),g.jsx("input",{id:"ai_api_key",name:"ai_api_key",type:"password",autoComplete:"off"}),g.jsx("label",{htmlFor:"ai_model",children:"Model"}),g.jsx("input",{id:"ai_model",name:"ai_model","data-testid":"ai-model",placeholder:"optional override",defaultValue:String(((Mn=D.ai)==null?void 0:Mn.model)||"")}),g.jsx("label",{htmlFor:"ai_base_url",children:"Base URL"}),g.jsx("input",{id:"ai_base_url",name:"ai_base_url","data-testid":"ai-base-url",placeholder:"optional, OpenAI-compatible",defaultValue:String(((Pn=D.ai)==null?void 0:Pn.base_url)||"")}),g.jsx("button",{className:"btn primary",type:"submit","data-testid":"btn-save-settings",children:"Save"})]})]})]})]}),T?g.jsx(Ok,{initialPath:i,onClose:()=>ne(!1),onSelect:K=>{pe(K),ne(!1)}}):null]})}function Uk({review:t,findings:r,aiNote:i,busy:l,onAskAi:a,onCopy:u,onPost:d}){var p,y,m,x,v,S,_,C;const f=[...new Set(t.confidence.reasons||[])];return g.jsxs(g.Fragment,{children:[g.jsxs("div",{className:`merge-box ${t.confidence.level}`,children:[g.jsxs("div",{className:`level ${t.confidence.level}`,children:[t.confidence.level.toUpperCase()," — ",t.title]}),f.length?g.jsx("ul",{className:"reasons",children:f.map(E=>g.jsx("li",{children:E},E))}):null,t.low_risk?g.jsx("span",{className:"chip",children:"low-risk"}):null,t.change_kinds.map(E=>g.jsx("span",{className:"chip",children:Z0(E)},E))]}),g.jsxs("div",{className:"metrics",children:[g.jsxs("div",{className:"metric",children:[g.jsxs("div",{className:"n",children:[t.confidence.covered_sinks,"/",t.confidence.sinks]}),g.jsx("div",{className:"l",children:"Sinks tested"})]}),g.jsxs("div",{className:"metric",children:[g.jsx("div",{className:"n",children:r.length}),g.jsx("div",{className:"l",children:"Findings"})]}),g.jsxs("div",{className:"metric",children:[g.jsx("div",{className:"n",children:t.residuals.length}),g.jsx("div",{className:"l",children:"Residuals"})]})]}),g.jsx("pre",{className:"headline",children:t.headline}),t.index?g.jsxs("details",{className:"section",open:!0,children:[g.jsxs("summary",{children:["Index ",g.jsx("span",{className:"count",children:t.index.counts.nodes})]}),g.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,g.jsxs("details",{className:"section",open:!0,children:[g.jsxs("summary",{children:["Read this ",g.jsx("span",{className:"count",children:t.read_order.length})]}),t.read_order.map((E,N)=>g.jsxs("div",{className:"read-item",children:[g.jsxs("span",{className:"file",children:[N+1,". ",E.path]}),g.jsx("div",{className:"why",children:E.why})]},E.path))]}),g.jsxs("details",{className:"section",children:[g.jsxs("summary",{children:["Clusters ",g.jsx("span",{className:"count",children:t.clusters.length})]}),t.clusters.map(E=>g.jsxs("div",{className:"muted",children:[g.jsx("strong",{children:E.title})," — ",E.files.join(", ")]},E.id))]}),g.jsxs("details",{className:"section",open:!0,children:[g.jsxs("summary",{children:["Architecture ",g.jsx("span",{className:"count",children:r.length})]}),r.length===0?g.jsx("div",{className:"muted",children:t.architecture_note}):r.map(E=>g.jsxs("div",{className:"finding",children:[g.jsx("span",{className:`chip ${E.severity}`,children:E.severity}),E.message]},E.rule+E.message))]}),g.jsx(am,{cards:t.deepening}),g.jsxs("details",{className:"section",open:!0,children:[g.jsxs("summary",{children:["Residual ",g.jsx("span",{className:"count",children:t.residuals.length})]}),g.jsx("p",{className:"muted",children:"AI is only used here, on what the graph could not close."}),t.residuals.map(E=>g.jsx("div",{className:"residual muted",children:E},E))]}),(m=(y=t.evolution)==null?void 0:y.notes)!=null&&m.length||(v=(x=t.evolution)==null?void 0:x.hotspots)!=null&&v.some(E=>E.commits)?g.jsxs("details",{className:"section",children:[g.jsx("summary",{children:"Churn & coupling"}),(((S=t.evolution)==null?void 0:S.notes)||[]).map(E=>g.jsx("div",{className:"muted",children:E},E)),(((_=t.evolution)==null?void 0:_.hotspots)||[]).filter(E=>E.commits).slice(0,6).map(E=>g.jsxs("div",{className:"muted",children:[g.jsx("span",{className:"file",children:E.path})," — ",E.commits," commits, bus factor ",E.bus_factor]},E.path))]}):null,g.jsxs("div",{className:"btn-row",children:[g.jsx("button",{type:"button",className:"btn",disabled:l,onClick:a,children:"Ask configured model"}),g.jsx("button",{type:"button",className:"btn","data-testid":"btn-copy-markdown",onClick:u,children:"Copy markdown"}),g.jsx("button",{type:"button",className:"btn","data-testid":"btn-post-comment",onClick:d,children:"Post to PR"})]}),i?g.jsx("pre",{className:"headline",children:i}):null,g.jsx("div",{className:"kicker",children:"Reviewers"}),g.jsx("div",{className:"muted",children:t.suggested_reviewers.join(", ")||"—"}),(C=t.knowledge_owners)!=null&&C.length?g.jsxs("div",{className:"muted",children:["Knowledge: ",t.knowledge_owners.join(", ")]}):null]})}function Wk({architecture:t,busy:r,onReindex:i,onReview:l}){const a=t.findings.filter(u=>!u.waived);return g.jsxs(g.Fragment,{children:[g.jsxs("div",{className:"merge-box high",children:[g.jsxs("div",{className:"level high",children:["INDEXED — ",t.counts.nodes," nodes"]}),g.jsxs("div",{className:"muted",style:{marginTop:8},children:[t.indexed_at?`Last index ${ey(t.indexed_at)}`:"Indexed",t.incremental?" · incremental":" · full",t.stale?" · stale":"",t.django_boot&&t.django_boot!=="off"?` · Django boot ${t.django_boot}`:""]}),g.jsxs("span",{className:"chip",children:[t.counts.edges," edges"]}),t.has_config?g.jsx("span",{className:"chip",children:"loadpath.yml"}):null]}),g.jsxs("details",{className:"section",open:!0,children:[g.jsx("summary",{children:"Bounded contexts"}),Object.values(t.contexts).map(u=>g.jsxs("div",{className:"muted",children:[g.jsx("strong",{children:u.name})," — ",(u.django_apps||[]).join(", ")||"no apps"," ·"," ",(u.owners||[]).join(", ")||"unowned"]},u.name))]}),g.jsxs("details",{className:"section",children:[g.jsxs("summary",{children:["Rules ",g.jsx("span",{className:"count",children:(t.rules||[]).length})]}),(t.rules||[]).map(u=>g.jsx("div",{className:"muted",children:u},u))]}),g.jsxs("details",{className:"section",open:!0,children:[g.jsxs("summary",{children:["Findings ",g.jsx("span",{className:"count",children:a.length})]}),a.length===0?g.jsx("div",{className:"muted",children:"No architecture rule hits on the full graph."}):a.map(u=>g.jsxs("div",{className:"finding",children:[g.jsx("span",{className:`chip ${u.severity}`,children:u.severity}),u.message]},u.rule+u.message))]}),g.jsx(am,{cards:t.deepening}),g.jsxs("details",{className:"section",open:!0,children:[g.jsx("summary",{children:"Types"}),g.jsx("table",{className:"type-table",children:g.jsx("tbody",{children:Object.entries(t.type_counts||{}).sort((u,d)=>d[1]-u[1]).slice(0,12).map(([u,d])=>g.jsxs("tr",{children:[g.jsx("td",{children:Qu(u)}),g.jsx("td",{children:d})]},u))})})]}),g.jsxs("div",{className:"btn-row",children:[g.jsx("button",{type:"button",className:"btn",disabled:r,onClick:i,"data-testid":"btn-full-reindex",children:"Full reindex"}),g.jsx("button",{type:"button",className:"btn primary",disabled:r,onClick:l,children:"Review against this index"})]})]})}function am({cards:t}){const r=t||[];return r.length?g.jsxs("details",{className:"section",open:!0,"data-testid":"deepening-list",children:[g.jsxs("summary",{children:["Depth ",g.jsx("span",{className:"count",children:r.length})]}),g.jsx("p",{className:"muted",children:"Deepening opportunities: more behaviour behind a smaller interface, at a real seam."}),r.map(i=>g.jsxs("div",{className:"finding","data-testid":"deepening-card",children:[g.jsx("span",{className:`chip ${i.strength}`,children:J0(i.strength)}),i.top?g.jsx("span",{className:"chip",children:"top"}):null,g.jsx("strong",{children:i.title}),g.jsx("div",{className:"why",children:i.message}),i.deletion_test?g.jsxs("div",{className:"muted",children:["Deletion test: ",i.deletion_test]}):null,i.before&&i.after?g.jsxs("div",{className:"muted",children:[i.before," → ",i.after]}):null]},i.rule+i.title))]}):null}lm(sm());Q0.createRoot(document.getElementById("root")).render(g.jsx(O.StrictMode,{children:g.jsx(Vk,{})}));export{Yk as L,Qk as a,Xk as c,g as j,Gk as l,O as r,Qu as t}; diff --git a/src/loadpath/static/assets/index-Bh26i1BD.css b/src/loadpath/static/assets/index-fLLLv9tC.css similarity index 61% rename from src/loadpath/static/assets/index-Bh26i1BD.css rename to src/loadpath/static/assets/index-fLLLv9tC.css index 22a5f84..f010cd1 100644 --- a/src/loadpath/static/assets/index-Bh26i1BD.css +++ b/src/loadpath/static/assets/index-fLLLv9tC.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}: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}.impact-graph{flex:1;min-height:0;position:relative;display:flex;flex-direction:column}.graph-toolbar{display:flex;flex-wrap:wrap;gap:8px;align-items:center;padding:8px 14px;border-bottom:1px solid var(--line);background:var(--bg-2)}.graph-count{margin-left:auto;font-size:11px}.chip-btn{background:var(--surface);border:1px solid var(--line);border-radius:999px;padding:4px 12px;color:var(--muted);cursor:pointer;height:26px}.chip-btn:hover{color:var(--ink)}.chip-btn.active{background:var(--rail-active);color:var(--ink)}.chip-btn:disabled{opacity:.45;cursor:not-allowed}.graph-stage{flex:1;min-height:0;position:relative;display:flex;flex-direction:column}.graph-stage .react-flow,.graph-3d,.graph-3d-host,.graph-3d-canvas-host{flex:1;width:100%;height:100%;min-height:280px}.graph-3d{position:relative;background:var(--graph-bg);display:flex;flex-direction:column}.graph-3d-host{position:relative;min-height:0;display:flex;flex-direction:column}.graph-3d-canvas-host{position:relative;min-height:0}.graph-3d canvas{display:block;width:100%;height:100%}.graph-3d-tip{position:absolute;pointer-events:none;z-index:2;max-width:320px;padding:6px 8px;border-radius:var(--radius);background:var(--surface);border:1px solid var(--line);color:var(--ink);font-size:11px;line-height:1.35;box-shadow:0 8px 24px var(--shadow)}.graph-3d-tip .t{font-size:10px;color:var(--muted);text-transform:uppercase;letter-spacing:.08em}.graph-3d-tip .n{font-weight:600}.graph-3d-hint{position:absolute;left:10px;bottom:10px;z-index:2;margin:0;font-size:11px;color:var(--muted);max-width:min(420px,calc(100% - 24px));pointer-events:none}.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(--graph-bg)!important;border:1px solid var(--line)!important;border-radius:var(--radius);overflow:hidden;box-shadow:0 8px 24px var(--shadow)}.react-flow__minimap-node{fill:var(--muted);stroke:none}.react-flow__minimap-node.selected{fill:var(--accent)}.react-flow__minimap-mask{fill:#00000073!important;stroke:var(--accent)!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.strong{color:var(--low);border-color:var(--low)}.chip.worth_exploring{color:var(--medium);border-color:var(--medium)}.chip.speculative{color:var(--muted);border-color:var(--line)}.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;max-width:calc(100% - 24px);overflow-x:hidden;overflow-wrap:break-word;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,.inspector .file,.inspector .muted{overflow-wrap:break-word}.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);width:180px;max-width:100%;height:56px;box-sizing:border-box;box-shadow:0 0 0 1px var(--shadow);overflow:visible;position:relative}.lp-node .t{font-size:10px;color:var(--muted);text-transform:uppercase;letter-spacing:.08em}.lp-node .n{font-size:13px;font-weight:600;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.lp-node.selected{border-color:var(--accent);box-shadow:0 0 0 1px var(--accent)}.react-flow__node-load .react-flow__handle{width:8px;height:8px;border:none;background:transparent;opacity:0}.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}} +.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,.explorer-path input{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:188px;flex:0 0 188px}.field.workspace{width:180px;flex:0 0 180px}.path-row,.combo-row{display:flex;min-width:0}.path-row input,.combo-row input{flex:1;min-width:0}.combo{position:relative;min-width:0}.combo-row input{border-top-right-radius:0;border-bottom-right-radius:0}.topbar .icon-btn{width:var(--control-h);padding:0;flex:0 0 var(--control-h)}.combo-toggle{border-top-left-radius:0;border-bottom-left-radius:0;border-left:0}.combo-menu{position:absolute;top:calc(100% + 4px);right:0;left:auto;min-width:340px;max-width:min(480px,70vw);max-height:360px;overflow:auto;z-index:40;background:var(--surface);border:1px solid var(--line);border-radius:var(--radius);box-shadow:0 12px 32px var(--shadow);padding:6px 0}.combo-heading{font-size:10px;letter-spacing:.08em;text-transform:uppercase;color:var(--muted);font-weight:600;padding:8px 12px 4px}.combo-menu .combo-option{display:flex;flex-direction:column;align-items:flex-start;gap:2px;width:100%;text-align:left;background:transparent;border:0;border-radius:0;height:auto;padding:6px 12px;color:var(--ink);cursor:pointer}.combo-menu .combo-option:hover,.combo-menu .combo-option.active{background:var(--rail-active)}.combo-label{font-family:var(--mono);font-size:12px}.combo-detail{color:var(--muted);font-size:12px;line-height:1.35;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:100%}.combo-empty{padding:10px 12px}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:50;background:color-mix(in srgb,var(--bg) 72%,transparent);display:grid;place-items:center;padding:24px}.modal{width:min(720px,100%);max-height:min(640px,90vh);background:var(--bg-2);border:1px solid var(--line);border-radius:var(--radius-lg);box-shadow:0 16px 48px var(--shadow);display:flex;flex-direction:column;overflow:hidden}.modal-head{display:flex;align-items:flex-start;justify-content:space-between;gap:12px;padding:14px 16px 10px;border-bottom:1px solid var(--line)}.modal-head h2{font-size:15px}.modal-head .muted{margin:4px 0 0}.explorer-path{display:flex;gap:8px;padding:12px 16px;border-bottom:1px solid var(--line)}.explorer-path input{flex:1;min-width:0}.explorer-list{flex:1;overflow:auto;padding:8px;min-height:220px}.explorer-row{display:flex;align-items:center;gap:8px;width:100%;text-align:left;background:transparent;border:0;border-radius:var(--radius);padding:8px 10px;color:var(--ink);cursor:pointer;height:auto}.explorer-row:hover,.explorer-row.active{background:var(--rail-active)}.explorer-name{min-width:0;overflow:hidden;text-overflow:ellipsis}.git-badge{margin-left:auto;margin-bottom:0}.explorer-empty{padding:18px 10px}.modal-foot{display:flex;align-items:center;gap:12px;padding:12px 16px;border-top:1px solid var(--line)}.explorer-current{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-family:var(--mono);font-size:12px}.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}.impact-graph{flex:1;min-height:0;position:relative;display:flex;flex-direction:column}.graph-toolbar{display:flex;flex-wrap:wrap;gap:8px;align-items:center;padding:8px 14px;border-bottom:1px solid var(--line);background:var(--bg-2)}.graph-count{margin-left:auto;font-size:11px}.chip-btn{background:var(--surface);border:1px solid var(--line);border-radius:999px;padding:4px 12px;color:var(--muted);cursor:pointer;height:26px}.chip-btn:hover{color:var(--ink)}.chip-btn.active{background:var(--rail-active);color:var(--ink)}.chip-btn:disabled{opacity:.45;cursor:not-allowed}.graph-stage{flex:1;min-height:0;position:relative;display:flex;flex-direction:column}.graph-stage .react-flow,.graph-3d,.graph-3d-host,.graph-3d-canvas-host{flex:1;width:100%;height:100%;min-height:280px}.graph-3d{position:relative;background:var(--graph-bg);display:flex;flex-direction:column}.graph-3d-host{position:relative;min-height:0;display:flex;flex-direction:column}.graph-3d-canvas-host{position:relative;min-height:0}.graph-3d canvas{display:block;width:100%;height:100%}.graph-3d-tip{position:absolute;pointer-events:none;z-index:2;max-width:320px;padding:6px 8px;border-radius:var(--radius);background:var(--surface);border:1px solid var(--line);color:var(--ink);font-size:11px;line-height:1.35;box-shadow:0 8px 24px var(--shadow)}.graph-3d-tip .t{font-size:10px;color:var(--muted);text-transform:uppercase;letter-spacing:.08em}.graph-3d-tip .n{font-weight:600}.graph-3d-hint{position:absolute;left:10px;bottom:10px;z-index:2;margin:0;font-size:11px;color:var(--muted);max-width:min(420px,calc(100% - 24px));pointer-events:none}.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(--graph-bg)!important;border:1px solid var(--line)!important;border-radius:var(--radius);overflow:hidden;box-shadow:0 8px 24px var(--shadow)}.react-flow__minimap-node{fill:var(--muted);stroke:none}.react-flow__minimap-node.selected{fill:var(--accent)}.react-flow__minimap-mask{fill:#00000073!important;stroke:var(--accent)!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.strong{color:var(--low);border-color:var(--low)}.chip.worth_exploring{color:var(--medium);border-color:var(--medium)}.chip.speculative{color:var(--muted);border-color:var(--line)}.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;max-width:calc(100% - 24px);overflow-x:hidden;overflow-wrap:break-word;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,.inspector .file,.inspector .muted{overflow-wrap:break-word}.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);width:180px;max-width:100%;height:56px;box-sizing:border-box;box-shadow:0 0 0 1px var(--shadow);overflow:visible;position:relative}.lp-node .t{font-size:10px;color:var(--muted);text-transform:uppercase;letter-spacing:.08em}.lp-node .n{font-size:13px;font-weight:600;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.lp-node.selected{border-color:var(--accent);box-shadow:0 0 0 1px var(--accent)}.react-flow__node-load .react-flow__handle{width:8px;height:8px;border:none;background:transparent;opacity:0}.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 e3c1049..536a14c 100644 --- a/src/loadpath/static/index.html +++ b/src/loadpath/static/index.html @@ -17,8 +17,8 @@ - - + +
diff --git a/src/loadpath/workspace.py b/src/loadpath/workspace.py index 861ec0c..fbfe74f 100644 --- a/src/loadpath/workspace.py +++ b/src/loadpath/workspace.py @@ -1,9 +1,195 @@ -"""Git workspace facts used by review: dirty tree, merge-base, three-dot range.""" +"""Local workspace helpers: directory browsing, git refs, dirty tree, merge-base.""" from __future__ import annotations import subprocess from pathlib import Path +from typing import Any + +_GIT_TIMEOUT = 8 +_MAX_DIR_ENTRIES = 400 +_MAX_DIR_SCAN = 2000 +DEFAULT_COMMIT_LIMIT = 50 +_MAX_COMMIT_LIMIT = 100 +_MAX_BRANCHES = 50 +_MAX_TAGS = 20 + + +def _git_output(repo_root: Path, *args: str) -> str: + return subprocess.check_output( + ["git", "-C", str(repo_root), *args], + text=True, + stderr=subprocess.DEVNULL, + timeout=_GIT_TIMEOUT, + ) + + +def resolve_existing_dir(path: str | None) -> Path: + """Walk up from path until a real directory is found, else home.""" + home = Path.home().resolve() + if not (path or "").strip(): + return home + current = Path(path).expanduser() + try: + current = current.resolve() + except OSError: + pass + while True: + try: + if current.is_dir(): + return current + except OSError: + pass + parent = current.parent + if parent == current: + return home + current = parent + + +def _is_git_root(path: Path) -> bool: + git = path / ".git" + try: + return git.is_dir() or git.is_file() + except OSError: + return False + + +def list_directory(path: str | None = None) -> dict[str, Any]: + """List child directories for the in-app repository picker.""" + home = Path.home().resolve() + root = resolve_existing_dir(path) + parent = str(root.parent) if root.parent != root else None + entries: list[dict[str, Any]] = [] + truncated = False + try: + children = root.iterdir() + except OSError: + children = iter(()) + scanned = 0 + for child in children: + scanned += 1 + if scanned > _MAX_DIR_SCAN: + truncated = True + break + name = child.name + if name.startswith("."): + continue + try: + if not child.is_dir(): + continue + resolved = child.resolve() + except OSError: + continue + entries.append( + { + "name": name, + "path": str(resolved), + "is_dir": True, + "is_git": _is_git_root(resolved), + } + ) + entries.sort(key=lambda item: (not item["is_git"], item["name"].lower())) + if len(entries) > _MAX_DIR_ENTRIES: + truncated = True + entries = entries[:_MAX_DIR_ENTRIES] + return { + "path": str(root), + "name": root.name or str(root), + "parent": parent, + "home": str(home), + "is_git": _is_git_root(root), + "truncated": truncated, + "entries": entries, + } + + +def list_git_refs(repo_root: Path, *, commit_limit: int = DEFAULT_COMMIT_LIMIT) -> dict[str, Any]: + """Branches, tags, and recent commits for base/head pickers.""" + repo_root = repo_root.resolve() + limit = max(1, min(int(commit_limit), _MAX_COMMIT_LIMIT)) + payload: dict[str, Any] = { + "git": False, + "repo_path": str(repo_root), + "head": None, + "head_short": None, + "branches": [], + "tags": [], + "commits": [], + "presets": ["HEAD", "HEAD~1"], + } + if not repo_root.is_dir(): + return payload + try: + inside = _git_output(repo_root, "rev-parse", "--is-inside-work-tree").strip() + except (subprocess.CalledProcessError, FileNotFoundError, subprocess.TimeoutExpired): + return payload + if inside != "true": + return payload + payload["git"] = True + head = git_rev_parse(repo_root, "HEAD") + payload["head"] = head + payload["head_short"] = head[:12] if head else None + payload["commits"] = _list_commits(repo_root, limit) + payload["branches"] = _list_refs(repo_root, ("refs/heads", "refs/remotes"), _MAX_BRANCHES) + payload["tags"] = _list_refs(repo_root, ("refs/tags",), _MAX_TAGS, sort="-creatordate") + return payload + + +def _list_commits(repo_root: Path, limit: int) -> list[dict[str, str]]: + try: + raw = _git_output( + repo_root, + "log", + f"-n{limit}", + "--format=%H%x09%h%x09%an%x09%cI%x09%s", + ) + except (subprocess.CalledProcessError, FileNotFoundError, subprocess.TimeoutExpired): + return [] + commits: list[dict[str, str]] = [] + for line in raw.splitlines(): + sha, short, author, date, subject = (line.split("\t", 4) + [""] * 5)[:5] + if not sha: + continue + commits.append( + {"sha": sha, "short": short, "subject": subject, "author": author, "date": date} + ) + return commits + + +def _list_refs( + repo_root: Path, + patterns: tuple[str, ...], + limit: int, + *, + sort: str = "-committerdate", +) -> list[dict[str, Any]]: + try: + raw = _git_output( + repo_root, + "for-each-ref", + f"--sort={sort}", + *patterns, + "--format=%(refname:short)%09%(objectname)%09%(objectname:short)%09%(HEAD)%09%(contents:subject)", + ) + except (subprocess.CalledProcessError, FileNotFoundError, subprocess.TimeoutExpired): + return [] + refs: list[dict[str, Any]] = [] + for line in raw.splitlines(): + name, sha, short, head_mark, subject = (line.split("\t", 4) + [""] * 5)[:5] + if not name or name == "HEAD" or name.endswith("/HEAD"): + continue + refs.append( + { + "name": name, + "sha": sha, + "short": short, + "subject": subject, + "current": head_mark.strip() == "*", + } + ) + if len(refs) >= limit: + break + return refs def git_dirty_paths(repo_root: Path) -> list[str]: diff --git a/tests/e2e/test_api_flow.py b/tests/e2e/test_api_flow.py index f5e8aef..f743cea 100644 --- a/tests/e2e/test_api_flow.py +++ b/tests/e2e/test_api_flow.py @@ -198,6 +198,44 @@ def test_blank_and_missing_repo_path_rejected(tmp_path, monkeypatch): assert "not found" in missing.json()["detail"].lower() +def test_api_browse_fs_and_git_refs(tmp_path, monkeypatch): + monkeypatch.setenv("HOME", str(tmp_path / "home")) + (tmp_path / "home").mkdir() + repo = prepare_review_repo(tmp_path) + client = TestClient(create_app()) + + home = client.get("/api/fs") + assert home.status_code == 200 + assert home.json()["path"] == str((tmp_path / "home").resolve()) + + listing = client.get("/api/fs", params={"path": str(repo.parent)}) + assert listing.status_code == 200 + names = {item["name"]: item for item in listing.json()["entries"]} + assert names[repo.name]["is_git"] is True + + here = client.get("/api/fs", params={"path": str(repo)}) + assert here.json()["is_git"] is True + + refs = client.get("/api/git/refs", params={"repo_path": str(repo), "limit": 50}) + assert refs.status_code == 200, refs.text + body = refs.json() + assert body["git"] is True + assert body["presets"] == ["HEAD", "HEAD~1"] + subjects = [c["subject"] for c in body["commits"]] + assert "tighten Invoice.total contract" in subjects + assert any(b["name"] == "main" for b in body["branches"]) + assert len(body["commits"]) <= 50 + + missing = client.get("/api/git/refs", params={"repo_path": "/no/such/loadpath-repo"}) + assert missing.status_code == 404 + + plain = tmp_path / "plain" + plain.mkdir() + not_git = client.get("/api/git/refs", params={"repo_path": str(plain)}) + assert not_git.status_code == 200 + assert not_git.json()["git"] is False + + def test_settings_empty_model_does_not_wipe(tmp_path, monkeypatch): monkeypatch.setenv("HOME", str(tmp_path / "home")) (tmp_path / "home").mkdir() diff --git a/tests/e2e/test_ui_flows.py b/tests/e2e/test_ui_flows.py index a9cc1f0..4965762 100644 --- a/tests/e2e/test_ui_flows.py +++ b/tests/e2e/test_ui_flows.py @@ -220,3 +220,56 @@ def test_ui_pr_review_this_range_fills_refs(live_app, browser_page): page.get_by_test_id("review-layout").wait_for() assert page.get_by_test_id("base-ref").input_value() == "abc111base" assert page.get_by_test_id("head-ref").input_value() == "def222head" + + +@pytest.mark.playwright +def test_ui_browse_repo_and_pick_git_refs(live_app, browser_page): + base_url, repo = live_app + page = browser_page + page.goto(base_url, wait_until="networkidle") + _wait_fonts(page) + + page.get_by_test_id("repo-path").fill(str(repo)) + page.get_by_test_id("btn-browse-repo").click() + explorer = page.get_by_test_id("repo-explorer") + explorer.wait_for() + page.get_by_test_id("explorer-path").wait_for() + page.wait_for_function( + "path => document.querySelector('[data-testid=\"explorer-path\"]')?.value.includes(path)", + arg=repo.name, + ) + page.get_by_test_id("explorer-use").click() + explorer.wait_for(state="hidden") + first = page.get_by_test_id("repo-path").input_value() + assert repo.name in first + + page.get_by_test_id("btn-browse-repo").click() + explorer.wait_for() + page.get_by_test_id("explorer-path").fill(str(repo.parent)) + page.get_by_role("button", name="Go").click() + page.get_by_test_id("explorer-entry").filter(has_text=repo.name).wait_for() + page.get_by_test_id("explorer-entry").filter(has_text=repo.name).click() + page.get_by_test_id("explorer-use").click() + explorer.wait_for(state="hidden") + chosen = page.get_by_test_id("repo-path").input_value() + assert repo.name in chosen + + page.get_by_test_id("base-ref").fill("custom-base") + assert page.get_by_test_id("base-ref").input_value() == "custom-base" + + with page.expect_response(lambda r: "/api/git/refs" in r.url, timeout=15_000): + page.get_by_test_id("base-ref-toggle").click() + menu = page.get_by_test_id("base-ref-menu") + menu.wait_for() + menu.get_by_text("HEAD~1", exact=True).wait_for() + menu.get_by_test_id("ref-option-commit").filter(has_text="tighten Invoice.total contract").wait_for() + menu.get_by_test_id("ref-option-commit").filter(has_text="baseline").click() + selected = page.get_by_test_id("base-ref").input_value() + assert selected != "custom-base" + assert len(selected) >= 7 + + page.get_by_test_id("head-ref-toggle").click() + heads = page.get_by_test_id("head-ref-menu") + heads.wait_for() + heads.get_by_test_id("ref-option-branch").filter(has_text="main").click() + assert page.get_by_test_id("head-ref").input_value() == "main" diff --git a/tests/unit/test_workspace.py b/tests/unit/test_workspace.py index 0272874..38169b3 100644 --- a/tests/unit/test_workspace.py +++ b/tests/unit/test_workspace.py @@ -3,7 +3,7 @@ from pathlib import Path from loadpath.review.diff import git_diff -from loadpath.workspace import git_dirty_paths, git_merge_base, resolve_review_range +from loadpath.workspace import git_dirty_paths, git_merge_base, list_directory, list_git_refs, resolve_review_range from tests.conftest import git_commit_all, git_init_with_main @@ -29,3 +29,49 @@ def test_dirty_paths_include_uncommitted(tmp_path: Path): git_init_with_main(repo) (repo / "dirty.txt").write_text("nope\n") assert "dirty.txt" in git_dirty_paths(repo) + + +def test_list_directory_marks_git_repos(tmp_path: Path, monkeypatch): + monkeypatch.setenv("HOME", str(tmp_path / "home")) + (tmp_path / "home").mkdir() + nested = tmp_path / "workspace" / "acme" + nested.mkdir(parents=True) + (nested / "README.md").write_text("hi\n") + git_init_with_main(nested) + (tmp_path / "workspace" / "notes").mkdir() + (tmp_path / "workspace" / "notes" / "todo.txt").write_text("x\n") + listing = list_directory(str(tmp_path / "workspace")) + names = {item["name"]: item for item in listing["entries"]} + assert names["acme"]["is_git"] is True + assert names["notes"]["is_git"] is False + assert listing["is_git"] is False + jumped = list_directory(str(nested / "missing-child")) + assert jumped["path"] == str(nested.resolve()) + assert jumped["is_git"] is True + + +def test_list_git_refs_includes_commits_and_branches(tmp_path: Path): + repo = tmp_path / "r" + repo.mkdir() + (repo / "a.txt").write_text("one\n") + git_init_with_main(repo) + (repo / "b.txt").write_text("two\n") + git_commit_all(repo, "second commit") + refs = list_git_refs(repo, commit_limit=50) + assert refs["git"] is True + assert refs["presets"] == ["HEAD", "HEAD~1"] + subjects = [c["subject"] for c in refs["commits"]] + assert "second commit" in subjects + assert "baseline" in subjects + assert len(refs["commits"]) == 2 + names = {b["name"] for b in refs["branches"]} + assert "main" in names + assert any(b["current"] for b in refs["branches"]) + empty = list_git_refs(tmp_path / "not-a-repo") + assert empty["git"] is False + assert empty["commits"] == [] + nested = repo / "backend" + nested.mkdir() + from_subdir = list_git_refs(nested) + assert from_subdir["git"] is True + assert from_subdir["commits"] diff --git a/ui/src/App.tsx b/ui/src/App.tsx index 0473541..5f9b251 100644 --- a/ui/src/App.tsx +++ b/ui/src/App.tsx @@ -1,10 +1,12 @@ -import { useEffect, useMemo, useRef, useState, type FormEvent } from "react"; +import { useCallback, useEffect, useMemo, useRef, useState, type FormEvent } from "react"; import { api } from "./api"; import { formatWhen, kindLabel, strengthLabel, typeLabel } from "./format"; -import { IconArchitecture, IconGraph, IconPrs, IconReview, IconSettings } from "./icons"; +import { IconArchitecture, IconFolder, IconGraph, IconPrs, IconReview, IconSettings } from "./icons"; import { ImpactGraph } from "./ImpactGraph"; +import { RefCombobox } from "./RefCombobox"; +import { RepoExplorer } from "./RepoExplorer"; import { THEMES, applyTheme, readTheme, type ThemeId } from "./themes"; -import type { ArchitectureReport, DeepeningCandidate, IndexedRepo, PullRequest, Review } from "./types"; +import type { ArchitectureReport, DeepeningCandidate, GitRefs, IndexedRepo, PullRequest, Review } from "./types"; type Tab = "review" | "architecture" | "graph" | "prs" | "settings"; type GraphMode = "review" | "architecture"; @@ -37,8 +39,13 @@ export function App() { const [aiNote, setAiNote] = useState(""); const [theme, setTheme] = useState(readTheme); const [settingsReady, setSettingsReady] = useState(false); + const [explorerOpen, setExplorerOpen] = useState(false); + const [gitRefs, setGitRefs] = useState(null); const repoRef = useRef(repo); repoRef.current = repo; + const explorerOpenRef = useRef(false); + explorerOpenRef.current = explorerOpen; + const gitRefsPath = useRef(""); const persistTheme = (id: ThemeId) => { setTheme(id); @@ -86,8 +93,29 @@ export function App() { const persistRepo = (path: string) => { setRepo(path); localStorage.setItem("loadpath.repo", path); + if (path.trim() !== gitRefsPath.current) { + gitRefsPath.current = ""; + setGitRefs(null); + } }; + const loadGitRefs = useCallback(() => { + const path = repoRef.current.trim(); + if (!path || gitRefsPath.current === path) return; + gitRefsPath.current = path; + api + .gitRefs(path) + .then((next) => { + if (repoRef.current.trim() === path) setGitRefs(next); + }) + .catch(() => { + if (gitRefsPath.current === path) { + gitRefsPath.current = ""; + setGitRefs(null); + } + }); + }, []); + const persistRefs = (nextBase: string, nextHead: string) => { setBase(nextBase); setHead(nextHead); @@ -259,6 +287,13 @@ export function App() { useEffect(() => { const onKey = (event: KeyboardEvent) => { + if (explorerOpenRef.current) { + if (event.key === "Escape") { + event.preventDefault(); + setExplorerOpen(false); + } + return; + } 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(); @@ -381,32 +416,54 @@ export function App() { ) : null}
@@ -715,6 +772,16 @@ export function App() { )}
+ {explorerOpen ? ( + setExplorerOpen(false)} + onSelect={(path) => { + persistRepo(path); + setExplorerOpen(false); + }} + /> + ) : null} ); } diff --git a/ui/src/RefCombobox.tsx b/ui/src/RefCombobox.tsx new file mode 100644 index 0000000..626e322 --- /dev/null +++ b/ui/src/RefCombobox.tsx @@ -0,0 +1,146 @@ +import { useEffect, useId, useMemo, useRef, useState, type KeyboardEvent } from "react"; +import { IconChevron } from "./icons"; +import { filterRefOptions, groupedRefOptions, groupLabel, refOptions, type RefOption } from "./refs"; +import type { GitRefs } from "./types"; + +export function RefCombobox({ + value, + onChange, + placeholder, + testId, + menuTestId, + refs, + onNeedRefs, +}: { + value: string; + onChange: (value: string) => void; + placeholder: string; + testId: string; + menuTestId: string; + refs: GitRefs | null; + onNeedRefs: () => void; +}) { + const listId = useId(); + const rootRef = useRef(null); + const [open, setOpen] = useState(false); + const [filter, setFilter] = useState(null); + const [active, setActive] = useState(0); + + const options = useMemo(() => { + const all = refOptions(refs); + return filter === null ? all : filterRefOptions(all, filter); + }, [refs, filter]); + const sections = useMemo(() => groupedRefOptions(options), [options]); + + useEffect(() => { + if (!open) return; + onNeedRefs(); + }, [open, onNeedRefs]); + + useEffect(() => { + setActive(0); + }, [filter, open]); + + const close = () => { + setOpen(false); + setFilter(null); + }; + + const pick = (option: RefOption) => { + onChange(option.value); + close(); + }; + + const onKey = (event: KeyboardEvent) => { + if (event.key === "ArrowDown") { + event.preventDefault(); + if (!open) { + setOpen(true); + return; + } + setActive((i) => Math.min(i + 1, Math.max(options.length - 1, 0))); + } else if (event.key === "ArrowUp") { + event.preventDefault(); + if (!open) return; + setActive((i) => Math.max(i - 1, 0)); + } else if (event.key === "Enter" && open) { + event.preventDefault(); + const hit = options[active]; + if (hit) pick(hit); + } else if (event.key === "Escape" && open) { + event.preventDefault(); + close(); + } + }; + + return ( +
{ + if (!event.currentTarget.contains(event.relatedTarget as Node)) close(); + }} + > +
+ { + onChange(e.target.value); + if (open) setFilter(e.target.value); + }} + onKeyDown={onKey} + /> + +
+ {open ? ( +
+ {sections.length === 0 ? ( +
No matching refs — the typed value is kept
+ ) : ( + sections.map((section) => ( +
+
{groupLabel(section.group)}
+ {section.items.map((item) => { + const index = options.indexOf(item); + return ( + + ); + })} +
+ )) + )} +
+ ) : null} +
+ ); +} diff --git a/ui/src/RepoExplorer.tsx b/ui/src/RepoExplorer.tsx new file mode 100644 index 0000000..4db317f --- /dev/null +++ b/ui/src/RepoExplorer.tsx @@ -0,0 +1,159 @@ +import { useEffect, useRef, useState, type KeyboardEvent } from "react"; +import { api } from "./api"; +import { IconFolder } from "./icons"; +import type { FsListing } from "./types"; + +export function RepoExplorer({ + initialPath, + onSelect, + onClose, +}: { + initialPath: string; + onSelect: (path: string) => void; + onClose: () => void; +}) { + const [listing, setListing] = useState(null); + const [pathDraft, setPathDraft] = useState(initialPath); + const [selected, setSelected] = useState(null); + const [error, setError] = useState(""); + const [busy, setBusy] = useState(false); + const pathRef = useRef(null); + const requestRef = useRef(0); + + const load = async (path: string) => { + const request = requestRef.current + 1; + requestRef.current = request; + setBusy(true); + try { + const data = await api.browse(path); + if (requestRef.current !== request) return; + setListing(data); + setPathDraft(data.path); + setSelected(data.is_git ? data.path : null); + setError(""); + } catch (e) { + if (requestRef.current !== request) return; + setError(e instanceof Error ? e.message : String(e)); + } finally { + if (requestRef.current === request) setBusy(false); + } + }; + + useEffect(() => { + void load(initialPath); + pathRef.current?.focus(); + pathRef.current?.select(); + }, [initialPath]); + + const chosen = selected || listing?.path || pathDraft; + const useLabel = (selected && selected !== listing?.path + ? selected.split(/[\\/]/).filter(Boolean).pop() + : listing?.is_git + ? "this repository" + : "this folder"); + + const onKey = (event: KeyboardEvent) => { + if (event.key === "Escape") { + event.preventDefault(); + onClose(); + } + }; + + return ( +
+
e.stopPropagation()} + > +
+
+

Select repository

+

Browse to a git root, or paste the full path.

+
+ +
+
{ + e.preventDefault(); + void load(pathDraft); + }} + > + setPathDraft(e.target.value)} + spellCheck={false} + aria-label="Directory path" + /> + + + +
+ {error ? ( +
+ {error} +
+ ) : null} +
+ {listing?.entries.length ? ( + listing.entries.map((entry) => { + const active = selected === entry.path; + return ( + + ); + }) + ) : ( +
{busy ? "Loading…" : "No folders here"}
+ )} +
+
+ + {chosen} + + +
+
+
+ ); +} diff --git a/ui/src/api.ts b/ui/src/api.ts index 0968835..eb52ded 100644 --- a/ui/src/api.ts +++ b/ui/src/api.ts @@ -1,4 +1,4 @@ -import type { ArchitectureReport, IndexedRepo, PullRequest, Review } from "./types"; +import type { ArchitectureReport, FsListing, GitRefs, IndexedRepo, PullRequest, Review } from "./types"; export function formatApiError(text: string, fallback = "Request failed"): string { const trimmed = (text || "").trim(); @@ -50,6 +50,10 @@ export const api = { return req>("/api/settings", { method: "PUT", body: JSON.stringify(payload) }); }, repos: () => req<{ repos: IndexedRepo[] }>("/api/repos"), + browse: (path?: string) => + req(`/api/fs${path ? `?path=${encodeURIComponent(path)}` : ""}`), + gitRefs: (repo_path: string, limit = 50) => + req(`/api/git/refs?repo_path=${encodeURIComponent(repo_path)}&limit=${limit}`), index: (repo_path: string, incremental = true) => req("/api/index", { method: "POST", diff --git a/ui/src/icons.tsx b/ui/src/icons.tsx index fe95bda..d2b98f4 100644 --- a/ui/src/icons.tsx +++ b/ui/src/icons.tsx @@ -72,3 +72,19 @@ export function IconSettings({ className }: IconProps) { ); } + +export function IconFolder({ className }: IconProps) { + return ( + + + + ); +} + +export function IconChevron({ className }: IconProps) { + return ( + + + + ); +} diff --git a/ui/src/refs.test.ts b/ui/src/refs.test.ts new file mode 100644 index 0000000..0a75b62 --- /dev/null +++ b/ui/src/refs.test.ts @@ -0,0 +1,60 @@ +import { describe, expect, it } from "vitest"; +import { filterRefOptions, groupedRefOptions, groupLabel, refOptions } from "./refs"; +import type { GitRefs } from "./types"; + +const refs: GitRefs = { + git: true, + repo_path: "/tmp/acme", + head: "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", + head_short: "aaaaaaaaaaaa", + presets: ["HEAD", "HEAD~1"], + branches: [ + { name: "main", sha: "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", short: "aaaaaaa", subject: "baseline", current: true }, + { name: "feat/total", sha: "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb", short: "bbbbbbb", subject: "wip", current: false }, + ], + tags: [{ name: "v1.0", sha: "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", short: "aaaaaaa", subject: "baseline", current: false }], + commits: [ + { + sha: "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb", + short: "bbbbbbb", + subject: "tighten Invoice.total contract", + author: "ada", + date: "2026-08-14T00:00:00Z", + }, + { + sha: "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", + short: "aaaaaaa", + subject: "baseline", + author: "ada", + date: "2026-08-13T00:00:00Z", + }, + ], +}; + +describe("refOptions", () => { + it("falls back to HEAD presets when the folder is not a git repo", () => { + const options = refOptions({ ...refs, git: false }); + expect(options.map((o) => o.value)).toEqual(["HEAD", "HEAD~1"]); + }); + + it("lists branches, tags, and commits for picking or pasting", () => { + const options = refOptions(refs); + expect(options.some((o) => o.value === "HEAD~1" && o.group === "preset")).toBe(true); + expect(options.some((o) => o.value === "main" && o.label.includes("current"))).toBe(true); + expect(options.some((o) => o.value === "v1.0" && o.group === "tag")).toBe(true); + expect(options.some((o) => o.group === "commit" && o.detail?.includes("tighten"))).toBe(true); + }); + + it("filters by sha, branch, or subject", () => { + const options = refOptions(refs); + expect(filterRefOptions(options, "HEAD~1").map((o) => o.value)).toEqual(["HEAD~1"]); + expect(filterRefOptions(options, "feat").some((o) => o.value === "feat/total")).toBe(true); + expect(filterRefOptions(options, "invoice").some((o) => o.group === "commit")).toBe(true); + }); + + it("keeps group headings only for groups that have rows", () => { + const sections = groupedRefOptions(filterRefOptions(refOptions(refs), "v1")); + expect(sections.map((s) => s.group)).toEqual(["tag"]); + expect(groupLabel("commit")).toBe("Recent commits"); + }); +}); diff --git a/ui/src/refs.ts b/ui/src/refs.ts new file mode 100644 index 0000000..3b5b6a1 --- /dev/null +++ b/ui/src/refs.ts @@ -0,0 +1,83 @@ +import type { GitRefs } from "./types"; + +export type RefGroup = "preset" | "branch" | "tag" | "commit"; + +export type RefOption = { + value: string; + label: string; + detail?: string; + group: RefGroup; +}; + +const PRESETS: RefOption[] = [ + { value: "HEAD", label: "HEAD", group: "preset" }, + { value: "HEAD~1", label: "HEAD~1", group: "preset" }, +]; + +const GROUP_ORDER: RefGroup[] = ["preset", "branch", "tag", "commit"]; + +export function refOptions(refs: GitRefs | null | undefined): RefOption[] { + if (!refs?.git) return [...PRESETS]; + const presets: RefOption[] = (refs.presets?.length ? refs.presets : PRESETS.map((p) => p.value)).map((value) => ({ + value, + label: value, + group: "preset", + })); + const seen = new Set(presets.map((item) => item.value)); + const options: RefOption[] = [...presets]; + for (const branch of refs.branches || []) { + if (seen.has(branch.name)) continue; + seen.add(branch.name); + options.push({ + value: branch.name, + label: branch.current ? `${branch.name} (current)` : branch.name, + detail: branch.subject, + group: "branch", + }); + } + for (const tag of refs.tags || []) { + if (seen.has(tag.name)) continue; + seen.add(tag.name); + options.push({ + value: tag.name, + label: tag.name, + detail: tag.subject, + group: "tag", + }); + } + for (const commit of refs.commits || []) { + if (seen.has(commit.sha)) continue; + seen.add(commit.sha); + options.push({ + value: commit.sha, + label: commit.short, + detail: commit.subject, + group: "commit", + }); + } + return options; +} + +export function filterRefOptions(options: RefOption[], query: string): RefOption[] { + const needle = query.trim().toLowerCase(); + if (!needle) return options; + return options.filter( + (item) => + item.value.toLowerCase().includes(needle) || + item.label.toLowerCase().includes(needle) || + (item.detail || "").toLowerCase().includes(needle), + ); +} + +export function groupedRefOptions(options: RefOption[]): { group: RefGroup; items: RefOption[] }[] { + return GROUP_ORDER.map((group) => ({ group, items: options.filter((item) => item.group === group) })).filter( + (section) => section.items.length > 0, + ); +} + +export function groupLabel(group: RefGroup): string { + if (group === "preset") return "Common"; + if (group === "branch") return "Branches"; + if (group === "tag") return "Tags"; + return "Recent commits"; +} diff --git a/ui/src/styles.css b/ui/src/styles.css index 245136a..dc2fe44 100644 --- a/ui/src/styles.css +++ b/ui/src/styles.css @@ -473,7 +473,8 @@ summary:focus-visible { .topbar input, .topbar select, .settings input, -.settings select { +.settings select, +.explorer-path input { background: var(--surface); border: 1px solid var(--line); border-radius: var(--radius); @@ -549,8 +550,168 @@ kbd { font-weight: 500; } .field.path { flex: 1; min-width: 180px; } -.field.ref { width: 132px; flex: 0 0 132px; } +.field.ref { width: 188px; flex: 0 0 188px; } .field.workspace { width: 180px; flex: 0 0 180px; } +.path-row, +.combo-row { + display: flex; + min-width: 0; +} +.path-row input, +.combo-row input { + flex: 1; + min-width: 0; +} +.combo { position: relative; min-width: 0; } +.combo-row input { + border-top-right-radius: 0; + border-bottom-right-radius: 0; +} +.topbar .icon-btn { + width: var(--control-h); + padding: 0; + flex: 0 0 var(--control-h); +} +.combo-toggle { + border-top-left-radius: 0; + border-bottom-left-radius: 0; + border-left: 0; +} +.combo-menu { + position: absolute; + top: calc(100% + 4px); + right: 0; + left: auto; + min-width: 340px; + max-width: min(480px, 70vw); + max-height: 360px; + overflow: auto; + z-index: 40; + background: var(--surface); + border: 1px solid var(--line); + border-radius: var(--radius); + box-shadow: 0 12px 32px var(--shadow); + padding: 6px 0; +} +.combo-heading { + font-size: 10px; + letter-spacing: 0.08em; + text-transform: uppercase; + color: var(--muted); + font-weight: 600; + padding: 8px 12px 4px; +} +.combo-menu .combo-option { + display: flex; + flex-direction: column; + align-items: flex-start; + gap: 2px; + width: 100%; + text-align: left; + background: transparent; + border: 0; + border-radius: 0; + height: auto; + padding: 6px 12px; + color: var(--ink); + cursor: pointer; +} +.combo-menu .combo-option:hover, +.combo-menu .combo-option.active { + background: var(--rail-active); +} +.combo-label { + font-family: var(--mono); + font-size: 12px; +} +.combo-detail { + color: var(--muted); + font-size: 12px; + line-height: 1.35; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + max-width: 100%; +} +.combo-empty { padding: 10px 12px; } +.modal-backdrop { + position: fixed; + inset: 0; + z-index: 50; + background: color-mix(in srgb, var(--bg) 72%, transparent); + display: grid; + place-items: center; + padding: 24px; +} +.modal { + width: min(720px, 100%); + max-height: min(640px, 90vh); + background: var(--bg-2); + border: 1px solid var(--line); + border-radius: var(--radius-lg); + box-shadow: 0 16px 48px var(--shadow); + display: flex; + flex-direction: column; + overflow: hidden; +} +.modal-head { + display: flex; + align-items: flex-start; + justify-content: space-between; + gap: 12px; + padding: 14px 16px 10px; + border-bottom: 1px solid var(--line); +} +.modal-head h2 { font-size: 15px; } +.modal-head .muted { margin: 4px 0 0; } +.explorer-path { + display: flex; + gap: 8px; + padding: 12px 16px; + border-bottom: 1px solid var(--line); +} +.explorer-path input { flex: 1; min-width: 0; } +.explorer-list { + flex: 1; + overflow: auto; + padding: 8px; + min-height: 220px; +} +.explorer-row { + display: flex; + align-items: center; + gap: 8px; + width: 100%; + text-align: left; + background: transparent; + border: 0; + border-radius: var(--radius); + padding: 8px 10px; + color: var(--ink); + cursor: pointer; + height: auto; +} +.explorer-row:hover, +.explorer-row.active { background: var(--rail-active); } +.explorer-name { min-width: 0; overflow: hidden; text-overflow: ellipsis; } +.git-badge { margin-left: auto; margin-bottom: 0; } +.explorer-empty { padding: 18px 10px; } +.modal-foot { + display: flex; + align-items: center; + gap: 12px; + padding: 12px 16px; + border-top: 1px solid var(--line); +} +.explorer-current { + flex: 1; + min-width: 0; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + font-family: var(--mono); + font-size: 12px; +} .topbar input, .topbar select { min-width: 0; } .topbar-actions { display: flex; diff --git a/ui/src/types.ts b/ui/src/types.ts index 163655e..0afda9c 100644 --- a/ui/src/types.ts +++ b/ui/src/types.ts @@ -162,6 +162,50 @@ export type PullRequest = { base_sha?: string; }; +export type FsEntry = { + name: string; + path: string; + is_dir: boolean; + is_git: boolean; +}; + +export type FsListing = { + path: string; + name: string; + parent: string | null; + home: string; + is_git: boolean; + truncated: boolean; + entries: FsEntry[]; +}; + +export type GitRefItem = { + name: string; + sha: string; + short: string; + subject: string; + current: boolean; +}; + +export type GitCommit = { + sha: string; + short: string; + subject: string; + author: string; + date: string; +}; + +export type GitRefs = { + git: boolean; + repo_path: string; + head: string | null; + head_short: string | null; + branches: GitRefItem[]; + tags: GitRefItem[]; + commits: GitCommit[]; + presets: string[]; +}; + export const LAYER_ORDER: Record = { "arch.context": 0, "django.app": 0,