diff --git a/frontend/src/App.tsx b/frontend/src/App.tsx index b5603b96..b8892a38 100644 --- a/frontend/src/App.tsx +++ b/frontend/src/App.tsx @@ -508,6 +508,7 @@ export default function App() { setAddAgent(false); setAddMenu(false); setSearchView(true); + setError(""); }} onQuickCreate={() => { // "添加 Agent" — open the two-card chooser. Drop any selected session. @@ -519,6 +520,7 @@ export default function App() { setCreateView(null); setImportedDraft(null); setAddMenu(true); + setError(""); }} onSkillCenter={() => { setCreateView(null); @@ -526,6 +528,7 @@ export default function App() { setAddMenu(false); setSearchView(false); setSkillCenter(true); + setError(""); }} onAddAgent={() => { setCreateView(null); @@ -535,6 +538,7 @@ export default function App() { setTurns([]); setAddMenu(false); setAddAgent(true); + setError(""); }} onPickSession={(id) => { setCreateView(null); @@ -542,6 +546,7 @@ export default function App() { setAddAgent(false); setAddMenu(false); setSearchView(false); + setError(""); pickSession(id); }} onDeleteSession={removeSession} diff --git a/veadk/webui/assets/index-n8fSdvy2.js b/veadk/webui/assets/index-C9wgZWJX.js similarity index 99% rename from veadk/webui/assets/index-n8fSdvy2.js rename to veadk/webui/assets/index-C9wgZWJX.js index aefe98b9..1b57e9fa 100644 --- a/veadk/webui/assets/index-n8fSdvy2.js +++ b/veadk/webui/assets/index-C9wgZWJX.js @@ -586,4 +586,4 @@ __all__ = ["agent"] +`).split(` `)),d=c.reduce((u,f)=>u.concat(...f),[]);return[c,d]}return[[],[]]},[e]);return T.useEffect(()=>{const l=(t==null?void 0:t.target)??E1,c=(t==null?void 0:t.actInsideInputWithModifier)??!0;if(e!==null){const d=h=>{var b,m;if(i.current=h.ctrlKey||h.metaKey||h.shiftKey||h.altKey,(!i.current||i.current&&!c)&&SA(h))return!1;const y=_1(h.code,a);if(s.current.add(h[y]),k1(o,s.current,!1)){const w=((m=(b=h.composedPath)==null?void 0:b.call(h))==null?void 0:m[0])||h.target,v=(w==null?void 0:w.nodeName)==="BUTTON"||(w==null?void 0:w.nodeName)==="A";t.preventDefault!==!1&&(i.current||!v)&&h.preventDefault(),r(!0)}},u=h=>{const g=_1(h.code,a);k1(o,s.current,!0)?(r(!1),s.current.clear()):s.current.delete(h[g]),h.key==="Meta"&&s.current.clear(),i.current=!1},f=()=>{s.current.clear(),r(!1)};return l==null||l.addEventListener("keydown",d),l==null||l.addEventListener("keyup",u),window.addEventListener("blur",f),window.addEventListener("contextmenu",f),()=>{l==null||l.removeEventListener("keydown",d),l==null||l.removeEventListener("keyup",u),window.removeEventListener("blur",f),window.removeEventListener("contextmenu",f)}}},[e,r]),n}function k1(e,t,n){return e.filter(r=>n||r.length===t.size).some(r=>r.every(i=>t.has(i)))}function _1(e,t){return t.includes(e)?"code":"key"}const pY=()=>{const e=Be();return T.useMemo(()=>({zoomIn:async t=>{const{panZoom:n}=e.getState();return n?n.scaleBy(1.2,t):!1},zoomOut:async t=>{const{panZoom:n}=e.getState();return n?n.scaleBy(1/1.2,t):!1},zoomTo:async(t,n)=>{const{panZoom:r}=e.getState();return r?r.scaleTo(t,n):!1},getZoom:()=>e.getState().transform[2],setViewport:async(t,n)=>{const{transform:[r,i,s],panZoom:o}=e.getState();return o?(await o.setViewport({x:t.x??r,y:t.y??i,zoom:t.zoom??s},n),!0):!1},getViewport:()=>{const[t,n,r]=e.getState().transform;return{x:t,y:n,zoom:r}},setCenter:async(t,n,r)=>e.getState().setCenter(t,n,r),fitBounds:async(t,n)=>{const{width:r,height:i,minZoom:s,maxZoom:o,panZoom:a}=e.getState(),l=o0(t,r,i,s,o,(n==null?void 0:n.padding)??.1);return a?(await a.setViewport(l,{duration:n==null?void 0:n.duration,ease:n==null?void 0:n.ease,interpolate:n==null?void 0:n.interpolate}),!0):!1},screenToFlowPosition:(t,n={})=>{const{transform:r,snapGrid:i,snapToGrid:s,domNode:o}=e.getState();if(!o)return t;const{x:a,y:l}=o.getBoundingClientRect(),c={x:t.x-a,y:t.y-l},d=n.snapGrid??i,u=n.snapToGrid??s;return No(c,r,u,d)},flowToScreenPosition:t=>{const{transform:n,domNode:r}=e.getState();if(!r)return t;const{x:i,y:s}=r.getBoundingClientRect(),o=ao(t,n);return{x:o.x+i,y:o.y+s}}}),[])};function QA(e,t){const n=[],r=new Map,i=[];for(const s of e)if(s.type==="add"){i.push(s);continue}else if(s.type==="remove"||s.type==="replace")r.set(s.id,[s]);else{const o=r.get(s.id);o?o.push(s):r.set(s.id,[s])}for(const s of t){const o=r.get(s.id);if(!o){n.push(s);continue}if(o[0].type==="remove")continue;if(o[0].type==="replace"){n.push({...o[0].item});continue}const a={...s};for(const l of o)mY(l,a);n.push(a)}return i.length&&i.forEach(s=>{s.index!==void 0?n.splice(s.index,0,{...s.item}):n.push({...s.item})}),n}function mY(e,t){switch(e.type){case"select":{t.selected=e.selected;break}case"position":{typeof e.position<"u"&&(t.position=e.position),typeof e.dragging<"u"&&(t.dragging=e.dragging);break}case"dimensions":{typeof e.dimensions<"u"&&(t.measured={...e.dimensions},e.setAttributes&&((e.setAttributes===!0||e.setAttributes==="width")&&(t.width=e.dimensions.width),(e.setAttributes===!0||e.setAttributes==="height")&&(t.height=e.dimensions.height))),typeof e.resizing=="boolean"&&(t.resizing=e.resizing);break}}}function ZA(e,t){return QA(e,t)}function JA(e,t){return QA(e,t)}function ci(e,t){return{id:e,type:"select",selected:t}}function Cs(e,t=new Set,n=!1){const r=[];for(const[i,s]of e){const o=t.has(i);!(s.selected===void 0&&!o)&&s.selected!==o&&(n&&(s.selected=o),r.push(ci(s.id,o)))}return r}function S1({items:e=[],lookup:t}){var i;const n=[],r=new Map(e.map(s=>[s.id,s]));for(const[s,o]of e.entries()){const a=t.get(o.id),l=((i=a==null?void 0:a.internals)==null?void 0:i.userNode)??a;l!==void 0&&l!==o&&n.push({id:o.id,item:o,type:"replace"}),l===void 0&&n.push({item:o,type:"add",index:s})}for(const[s]of t)r.get(s)===void 0&&n.push({id:s,type:"remove"});return n}function N1(e){return{id:e.id,type:"remove"}}const gY=xA();function e2(e,t,n={}){return UG(e,t,{...n,onError:n.onError??gY})}const T1=e=>TG(e),yY=e=>yA(e);function t2(e){return T.forwardRef(e)}const bY=typeof window<"u"?T.useLayoutEffect:T.useEffect;function C1(e){const[t,n]=T.useState(BigInt(0)),[r]=T.useState(()=>wY(()=>n(i=>i+BigInt(1))));return bY(()=>{const i=r.get();i.length&&(e(i),r.reset())},[t]),r}function wY(e){let t=[];return{get:()=>t,reset:()=>{t=[]},push:n=>{t.push(n),e()}}}const n2=T.createContext(null);function vY({children:e}){const t=Be(),n=T.useCallback(a=>{const{nodes:l=[],setNodes:c,hasDefaultNodes:d,onNodesChange:u,nodeLookup:f,fitViewQueued:h,onNodesChangeMiddlewareMap:g}=t.getState();let y=l;for(const m of a)y=typeof m=="function"?m(y):m;let b=S1({items:y,lookup:f});for(const m of g.values())b=m(b);d&&c(y),b.length>0?u==null||u(b):h&&window.requestAnimationFrame(()=>{const{fitViewQueued:m,nodes:w,setNodes:v}=t.getState();m&&v(w)})},[]),r=C1(n),i=T.useCallback(a=>{const{edges:l=[],setEdges:c,hasDefaultEdges:d,onEdgesChange:u,edgeLookup:f}=t.getState();let h=l;for(const g of a)h=typeof g=="function"?g(h):g;d?c(h):u&&u(S1({items:h,lookup:f}))},[]),s=C1(i),o=T.useMemo(()=>({nodeQueue:r,edgeQueue:s}),[]);return p.jsx(n2.Provider,{value:o,children:e})}function xY(){const e=T.useContext(n2);if(!e)throw new Error("useBatchContext must be used within a BatchProvider");return e}const EY=e=>!!e.panZoom;function h0(){const e=pY(),t=Be(),n=xY(),r=ke(EY),i=T.useMemo(()=>{const s=u=>t.getState().nodeLookup.get(u),o=u=>{n.nodeQueue.push(u)},a=u=>{n.edgeQueue.push(u)},l=u=>{var m,w;const{nodeLookup:f,nodeOrigin:h}=t.getState(),g=T1(u)?u:f.get(u.id),y=g.parentId?kA(g.position,g.measured,g.parentId,f,h):g.position,b={...g,position:y,width:((m=g.measured)==null?void 0:m.width)??g.width,height:((w=g.measured)==null?void 0:w.height)??g.height};return oo(b)},c=(u,f,h={replace:!1})=>{o(g=>g.map(y=>{if(y.id===u){const b=typeof f=="function"?f(y):f;return h.replace&&T1(b)?b:{...y,...b}}return y}))},d=(u,f,h={replace:!1})=>{a(g=>g.map(y=>{if(y.id===u){const b=typeof f=="function"?f(y):f;return h.replace&&yY(b)?b:{...y,...b}}return y}))};return{getNodes:()=>t.getState().nodes.map(u=>({...u})),getNode:u=>{var f;return(f=s(u))==null?void 0:f.internals.userNode},getInternalNode:s,getEdges:()=>{const{edges:u=[]}=t.getState();return u.map(f=>({...f}))},getEdge:u=>t.getState().edgeLookup.get(u),setNodes:o,setEdges:a,addNodes:u=>{const f=Array.isArray(u)?u:[u];n.nodeQueue.push(h=>[...h,...f])},addEdges:u=>{const f=Array.isArray(u)?u:[u];n.edgeQueue.push(h=>[...h,...f])},toObject:()=>{const{nodes:u=[],edges:f=[],transform:h}=t.getState(),[g,y,b]=h;return{nodes:u.map(m=>({...m})),edges:f.map(m=>({...m})),viewport:{x:g,y,zoom:b}}},deleteElements:async({nodes:u=[],edges:f=[]})=>{const{nodes:h,edges:g,onNodesDelete:y,onEdgesDelete:b,triggerNodeChanges:m,triggerEdgeChanges:w,onDelete:v,onBeforeDelete:x}=t.getState(),{nodes:k,edges:E}=await OG({nodesToRemove:u,edgesToRemove:f,nodes:h,edges:g,onBeforeDelete:x}),N=E.length>0,S=k.length>0;if(N){const L=E.map(N1);b==null||b(E),w(L)}if(S){const L=k.map(N1);y==null||y(k),m(L)}return(S||N)&&(v==null||v({nodes:k,edges:E})),{deletedNodes:k,deletedEdges:E}},getIntersectingNodes:(u,f=!0,h)=>{const g=r1(u),y=g?u:l(u),b=h!==void 0;return y?(h||t.getState().nodes).filter(m=>{const w=t.getState().nodeLookup.get(m.id);if(w&&!g&&(m.id===u.id||!w.internals.positionAbsolute))return!1;const v=oo(b?m:w),x=ll(v,y);return f&&x>0||x>=v.width*v.height||x>=y.width*y.height}):[]},isNodeIntersecting:(u,f,h=!0)=>{const y=r1(u)?u:l(u);if(!y)return!1;const b=ll(y,f);return h&&b>0||b>=f.width*f.height||b>=y.width*y.height},updateNode:c,updateNodeData:(u,f,h={replace:!1})=>{c(u,g=>{const y=typeof f=="function"?f(g):f;return h.replace?{...g,data:y}:{...g,data:{...g.data,...y}}},h)},updateEdge:d,updateEdgeData:(u,f,h={replace:!1})=>{d(u,g=>{const y=typeof f=="function"?f(g):f;return h.replace?{...g,data:y}:{...g,data:{...g.data,...y}}},h)},getNodesBounds:u=>{const{nodeLookup:f,nodeOrigin:h}=t.getState();return CG(u,{nodeLookup:f,nodeOrigin:h})},getHandleConnections:({type:u,id:f,nodeId:h})=>{var g;return Array.from(((g=t.getState().connectionLookup.get(`${h}-${u}${f?`-${f}`:""}`))==null?void 0:g.values())??[])},getNodeConnections:({type:u,handleId:f,nodeId:h})=>{var g;return Array.from(((g=t.getState().connectionLookup.get(`${h}${u?f?`-${u}-${f}`:`-${u}`:""}`))==null?void 0:g.values())??[])},fitView:async u=>{const f=t.getState().fitViewResolver??PG();return t.setState({fitViewQueued:!0,fitViewOptions:u,fitViewResolver:f}),n.nodeQueue.push(h=>[...h]),f.promise}}},[]);return T.useMemo(()=>({...i,...e,viewportInitialized:r}),[r])}const A1=e=>e.selected,kY=typeof window<"u"?window:void 0;function _Y({deleteKeyCode:e,multiSelectionKeyCode:t}){const n=Be(),{deleteElements:r}=h0(),i=ul(e,{actInsideInputWithModifier:!1}),s=ul(t,{target:kY});T.useEffect(()=>{if(i){const{edges:o,nodes:a}=n.getState();r({nodes:a.filter(A1),edges:o.filter(A1)}),n.setState({nodesSelectionActive:!1})}},[i]),T.useEffect(()=>{n.setState({multiSelectionActive:s})},[s])}function SY(e){const t=Be();T.useEffect(()=>{const n=()=>{var i,s,o,a;if(!e.current||!(((s=(i=e.current).checkVisibility)==null?void 0:s.call(i))??!0))return!1;const r=a0(e.current);(r.height===0||r.width===0)&&((a=(o=t.getState()).onError)==null||a.call(o,"004",Rn.error004())),t.setState({width:r.width||500,height:r.height||500})};if(e.current){n(),window.addEventListener("resize",n);const r=new ResizeObserver(()=>n());return r.observe(e.current),()=>{window.removeEventListener("resize",n),r&&e.current&&r.unobserve(e.current)}}},[])}const Jd={position:"absolute",width:"100%",height:"100%",top:0,left:0},NY=e=>({userSelectionActive:e.userSelectionActive,lib:e.lib,connectionInProgress:e.connection.inProgress});function TY({onPaneContextMenu:e,zoomOnScroll:t=!0,zoomOnPinch:n=!0,panOnScroll:r=!1,panOnScrollSpeed:i=.5,panOnScrollMode:s=ki.Free,zoomOnDoubleClick:o=!0,panOnDrag:a=!0,defaultViewport:l,translateExtent:c,minZoom:d,maxZoom:u,zoomActivationKeyCode:f,preventScrolling:h=!0,children:g,noWheelClassName:y,noPanClassName:b,onViewportChange:m,isControlledViewport:w,paneClickDistance:v,selectionOnDrag:x}){const k=Be(),E=T.useRef(null),{userSelectionActive:N,lib:S,connectionInProgress:L}=ke(NY,je),M=ul(f),j=T.useRef();SY(E);const R=T.useCallback($=>{m==null||m({x:$[0],y:$[1],zoom:$[2]}),w||k.setState({transform:$})},[m,w]);return T.useEffect(()=>{if(E.current){j.current=bW({domNode:E.current,minZoom:d,maxZoom:u,translateExtent:c,viewport:l,onDraggingChange:I=>k.setState(P=>P.paneDragging===I?P:{paneDragging:I}),onPanZoomStart:(I,P)=>{const{onViewportChangeStart:O,onMoveStart:D}=k.getState();D==null||D(I,P),O==null||O(P)},onPanZoom:(I,P)=>{const{onViewportChange:O,onMove:D}=k.getState();D==null||D(I,P),O==null||O(P)},onPanZoomEnd:(I,P)=>{const{onViewportChangeEnd:O,onMoveEnd:D}=k.getState();D==null||D(I,P),O==null||O(P)}});const{x:$,y:C,zoom:B}=j.current.getViewport();return k.setState({panZoom:j.current,transform:[$,C,B],domNode:E.current.closest(".react-flow")}),()=>{var I;(I=j.current)==null||I.destroy()}}},[]),T.useEffect(()=>{var $;($=j.current)==null||$.update({onPaneContextMenu:e,zoomOnScroll:t,zoomOnPinch:n,panOnScroll:r,panOnScrollSpeed:i,panOnScrollMode:s,zoomOnDoubleClick:o,panOnDrag:a,zoomActivationKeyPressed:M,preventScrolling:h,noPanClassName:b,userSelectionActive:N,noWheelClassName:y,lib:S,onTransformChange:R,connectionInProgress:L,selectionOnDrag:x,paneClickDistance:v})},[e,t,n,r,i,s,o,a,M,h,b,N,y,S,R,L,x,v]),p.jsx("div",{className:"react-flow__renderer",ref:E,style:Jd,children:g})}const CY=e=>({userSelectionActive:e.userSelectionActive,userSelectionRect:e.userSelectionRect});function AY(){const{userSelectionActive:e,userSelectionRect:t}=ke(CY,je);return e&&t?p.jsx("div",{className:"react-flow__selection react-flow__container",style:{width:t.width,height:t.height,transform:`translate(${t.x}px, ${t.y}px)`}}):null}const Th=(e,t)=>n=>{n.target===t.current&&(e==null||e(n))},MY=e=>({userSelectionActive:e.userSelectionActive,elementsSelectable:e.elementsSelectable,connectionInProgress:e.connection.inProgress,dragging:e.paneDragging,panBy:e.panBy,autoPanSpeed:e.autoPanSpeed});function IY({isSelecting:e,selectionKeyPressed:t,selectionMode:n=ol.Full,panOnDrag:r,autoPanOnSelection:i,paneClickDistance:s,selectionOnDrag:o,onSelectionStart:a,onSelectionEnd:l,onPaneClick:c,onPaneContextMenu:d,onPaneScroll:u,onPaneMouseEnter:f,onPaneMouseMove:h,onPaneMouseLeave:g,children:y}){const b=T.useRef(0),m=Be(),{userSelectionActive:w,elementsSelectable:v,dragging:x,connectionInProgress:k,panBy:E,autoPanSpeed:N}=ke(MY,je),S=v&&(e||w),L=T.useRef(null),M=T.useRef(),j=T.useRef(new Set),R=T.useRef(new Set),$=T.useRef(!1),C=T.useRef({x:0,y:0}),B=T.useRef(!1),I=K=>{if($.current||k){$.current=!1;return}c==null||c(K),m.getState().resetSelectedElements(),m.setState({nodesSelectionActive:!1})},P=K=>{if(Array.isArray(r)&&(r!=null&&r.includes(2))){K.preventDefault();return}d==null||d(K)},O=u?K=>u(K):void 0,D=K=>{$.current&&(K.stopPropagation(),$.current=!1)},_=K=>{var ve,ie;const{domNode:X,transform:te}=m.getState();if(M.current=X==null?void 0:X.getBoundingClientRect(),!M.current)return;const ae=K.target===L.current;if(!ae&&!!K.target.closest(".nokey")||!e||!(o&&ae||t)||K.button!==0||!K.isPrimary)return;(ie=(ve=K.target)==null?void 0:ve.setPointerCapture)==null||ie.call(ve,K.pointerId),$.current=!1;const{x:he,y:pe}=Cn(K.nativeEvent,M.current),oe=No({x:he,y:pe},te);m.setState({userSelectionRect:{width:0,height:0,startX:oe.x,startY:oe.y,x:he,y:pe}}),ae||(K.stopPropagation(),K.preventDefault())};function H(K,X){const{userSelectionRect:te}=m.getState();if(!te)return;const{transform:ae,nodeLookup:re,edgeLookup:ne,connectionLookup:he,triggerNodeChanges:pe,triggerEdgeChanges:oe,defaultEdgeOptions:ve}=m.getState(),ie={x:te.startX,y:te.startY},{x:tt,y:xe}=ao(ie,ae),me={startX:ie.x,startY:ie.y,x:Knt.id)),R.current=new Set;const Nt=(ve==null?void 0:ve.selectable)??!0;for(const nt of j.current){const U=he.get(nt);if(U)for(const{edgeId:z}of U.values()){const q=ne.get(z);q&&(q.selectable??Nt)&&R.current.add(z)}}if(!i1(Dt,j.current)){const nt=Cs(re,j.current,!0);pe(nt)}if(!i1(qe,R.current)){const nt=Cs(ne,R.current);oe(nt)}m.setState({userSelectionRect:me,userSelectionActive:!0,nodesSelectionActive:!1})}function F(){if(!i||!M.current)return;const[K,X]=s0(C.current,M.current,N);E({x:K,y:X}).then(te=>{if(!$.current||!te){b.current=requestAnimationFrame(F);return}const{x:ae,y:re}=C.current;H(ae,re),b.current=requestAnimationFrame(F)})}const A=()=>{cancelAnimationFrame(b.current),b.current=0,B.current=!1};T.useEffect(()=>()=>A(),[]);const W=K=>{const{userSelectionRect:X,transform:te,resetSelectedElements:ae}=m.getState();if(!M.current||!X)return;const{x:re,y:ne}=Cn(K.nativeEvent,M.current);C.current={x:re,y:ne};const he=ao({x:X.startX,y:X.startY},te);if(!$.current){const pe=t?0:s;if(Math.hypot(re-he.x,ne-he.y)<=pe)return;ae(),a==null||a(K)}$.current=!0,B.current||(F(),B.current=!0),H(re,ne)},Y=K=>{var X,te;K.button===0&&((te=(X=K.target)==null?void 0:X.releasePointerCapture)==null||te.call(X,K.pointerId),!w&&K.target===L.current&&m.getState().userSelectionRect&&(I==null||I(K)),m.setState({userSelectionActive:!1,userSelectionRect:null}),$.current&&(l==null||l(K),m.setState({nodesSelectionActive:j.current.size>0})),A())},V=K=>{var X,te;(te=(X=K.target)==null?void 0:X.releasePointerCapture)==null||te.call(X,K.pointerId),A()},G=r===!0||Array.isArray(r)&&r.includes(0);return p.jsxs("div",{className:st(["react-flow__pane",{draggable:G,dragging:x,selection:e}]),onClick:S?void 0:Th(I,L),onContextMenu:Th(P,L),onWheel:Th(O,L),onPointerEnter:S?void 0:f,onPointerMove:S?W:h,onPointerUp:S?Y:void 0,onPointerCancel:S?V:void 0,onPointerDownCapture:S?_:void 0,onClickCapture:S?D:void 0,onPointerLeave:g,ref:L,style:Jd,children:[y,p.jsx(AY,{})]})}function Am({id:e,store:t,unselect:n=!1,nodeRef:r}){const{addSelectedNodes:i,unselectNodesAndEdges:s,multiSelectionActive:o,nodeLookup:a,onError:l}=t.getState(),c=a.get(e);if(!c){l==null||l("012",Rn.error012(e));return}t.setState({nodesSelectionActive:!1}),c.selected?(n||c.selected&&o)&&(s({nodes:[c],edges:[]}),requestAnimationFrame(()=>{var d;return(d=r==null?void 0:r.current)==null?void 0:d.blur()})):i([e])}function r2({nodeRef:e,disabled:t=!1,noDragClassName:n,handleSelector:r,nodeId:i,isSelectable:s,nodeClickDistance:o}){const a=Be(),[l,c]=T.useState(!1),d=T.useRef();return T.useEffect(()=>{d.current=iW({getStoreItems:()=>a.getState(),onNodeMouseDown:u=>{Am({id:u,store:a,nodeRef:e})},onDragStart:()=>{c(!0)},onDragStop:()=>{c(!1)}})},[]),T.useEffect(()=>{if(!(t||!e.current||!d.current))return d.current.update({noDragClassName:n,handleSelector:r,domNode:e.current,isSelectable:s,nodeId:i,nodeClickDistance:o}),()=>{var u;(u=d.current)==null||u.destroy()}},[n,r,t,s,e,i,o]),l}const OY=e=>t=>t.selected&&(t.draggable||e&&typeof t.draggable>"u");function i2(){const e=Be();return T.useCallback(n=>{const{nodeExtent:r,snapToGrid:i,snapGrid:s,nodesDraggable:o,onError:a,updateNodePositions:l,nodeLookup:c,nodeOrigin:d}=e.getState(),u=new Map,f=OY(o),h=i?s[0]:5,g=i?s[1]:5,y=n.direction.x*h*n.factor,b=n.direction.y*g*n.factor;for(const[,m]of c){if(!f(m))continue;let w={x:m.internals.positionAbsolute.x+y,y:m.internals.positionAbsolute.y+b};i&&(w=Pl(w,s));const{position:v,positionAbsolute:x}=bA({nodeId:m.id,nextPosition:w,nodeLookup:c,nodeExtent:r,nodeOrigin:d,onError:a});m.position=v,m.internals.positionAbsolute=x,u.set(m.id,m)}l(u)},[])}const p0=T.createContext(null),RY=p0.Provider;p0.Consumer;const s2=()=>T.useContext(p0),LY=e=>({connectOnClick:e.connectOnClick,noPanClassName:e.noPanClassName,rfId:e.rfId}),PY=(e,t,n)=>r=>{const{connectionClickStartHandle:i,connectionMode:s,connection:o}=r,{fromHandle:a,toHandle:l,isValid:c}=o,d=(l==null?void 0:l.nodeId)===e&&(l==null?void 0:l.id)===t&&(l==null?void 0:l.type)===n;return{connectingFrom:(a==null?void 0:a.nodeId)===e&&(a==null?void 0:a.id)===t&&(a==null?void 0:a.type)===n,connectingTo:d,clickConnecting:(i==null?void 0:i.nodeId)===e&&(i==null?void 0:i.id)===t&&(i==null?void 0:i.type)===n,isPossibleEndHandle:s===io.Strict?(a==null?void 0:a.type)!==n:e!==(a==null?void 0:a.nodeId)||t!==(a==null?void 0:a.id),connectionInProcess:!!a,clickConnectionInProcess:!!i,valid:d&&c}};function DY({type:e="source",position:t=ue.Top,isValidConnection:n,isConnectable:r=!0,isConnectableStart:i=!0,isConnectableEnd:s=!0,id:o,onConnect:a,children:l,className:c,onMouseDown:d,onTouchStart:u,...f},h){var B,I;const g=o||null,y=e==="target",b=Be(),m=s2(),{connectOnClick:w,noPanClassName:v,rfId:x}=ke(LY,je),{connectingFrom:k,connectingTo:E,clickConnecting:N,isPossibleEndHandle:S,connectionInProcess:L,clickConnectionInProcess:M,valid:j}=ke(PY(m,g,e),je);m||(I=(B=b.getState()).onError)==null||I.call(B,"010",Rn.error010());const R=P=>{const{defaultEdgeOptions:O,onConnect:D,hasDefaultEdges:_}=b.getState(),H={...O,...P};if(_){const{edges:F,setEdges:A,onError:W}=b.getState();A(e2(H,F,{onError:W}))}D==null||D(H),a==null||a(H)},$=P=>{if(!m)return;const O=NA(P.nativeEvent);if(i&&(O&&P.button===0||!O)){const D=b.getState();Cm.onPointerDown(P.nativeEvent,{handleDomNode:P.currentTarget,autoPanOnConnect:D.autoPanOnConnect,connectionMode:D.connectionMode,connectionRadius:D.connectionRadius,domNode:D.domNode,nodeLookup:D.nodeLookup,lib:D.lib,isTarget:y,handleId:g,nodeId:m,flowId:D.rfId,panBy:D.panBy,cancelConnection:D.cancelConnection,onConnectStart:D.onConnectStart,onConnectEnd:(..._)=>{var H,F;return(F=(H=b.getState()).onConnectEnd)==null?void 0:F.call(H,..._)},updateConnection:D.updateConnection,onConnect:R,isValidConnection:n||((..._)=>{var H,F;return((F=(H=b.getState()).isValidConnection)==null?void 0:F.call(H,..._))??!0}),getTransform:()=>b.getState().transform,getFromHandle:()=>b.getState().connection.fromHandle,autoPanSpeed:D.autoPanSpeed,dragThreshold:D.connectionDragThreshold})}O?d==null||d(P):u==null||u(P)},C=P=>{const{onClickConnectStart:O,onClickConnectEnd:D,connectionClickStartHandle:_,connectionMode:H,isValidConnection:F,lib:A,rfId:W,nodeLookup:Y,connection:V}=b.getState();if(!m||!_&&!i)return;if(!_){O==null||O(P.nativeEvent,{nodeId:m,handleId:g,handleType:e}),b.setState({connectionClickStartHandle:{nodeId:m,type:e,id:g}});return}const G=_A(P.target),K=n||F,{connection:X,isValid:te}=Cm.isValid(P.nativeEvent,{handle:{nodeId:m,id:g,type:e},connectionMode:H,fromNodeId:_.nodeId,fromHandleId:_.id||null,fromType:_.type,isValidConnection:K,flowId:W,doc:G,lib:A,nodeLookup:Y});te&&X&&R(X);const ae=structuredClone(V);delete ae.inProgress,ae.toPosition=ae.toHandle?ae.toHandle.position:null,D==null||D(P,ae),b.setState({connectionClickStartHandle:null})};return p.jsx("div",{"data-handleid":g,"data-nodeid":m,"data-handlepos":t,"data-id":`${x}-${m}-${g}-${e}`,className:st(["react-flow__handle",`react-flow__handle-${t}`,"nodrag",v,c,{source:!y,target:y,connectable:r,connectablestart:i,connectableend:s,clickconnecting:N,connectingfrom:k,connectingto:E,valid:j,connectionindicator:r&&(!L||S)&&(L||M?s:i)}]),onMouseDown:$,onTouchStart:$,onClick:w?C:void 0,ref:h,...f,children:l})}const uo=T.memo(t2(DY));function jY({data:e,isConnectable:t,sourcePosition:n=ue.Bottom}){return p.jsxs(p.Fragment,{children:[e==null?void 0:e.label,p.jsx(uo,{type:"source",position:n,isConnectable:t})]})}function BY({data:e,isConnectable:t,targetPosition:n=ue.Top,sourcePosition:r=ue.Bottom}){return p.jsxs(p.Fragment,{children:[p.jsx(uo,{type:"target",position:n,isConnectable:t}),e==null?void 0:e.label,p.jsx(uo,{type:"source",position:r,isConnectable:t})]})}function $Y(){return null}function FY({data:e,isConnectable:t,targetPosition:n=ue.Top}){return p.jsxs(p.Fragment,{children:[p.jsx(uo,{type:"target",position:n,isConnectable:t}),e==null?void 0:e.label]})}const Ju={ArrowUp:{x:0,y:-1},ArrowDown:{x:0,y:1},ArrowLeft:{x:-1,y:0},ArrowRight:{x:1,y:0}},M1={input:jY,default:BY,output:FY,group:$Y};function zY(e){var t,n,r,i;return e.internals.handleBounds===void 0?{width:e.width??e.initialWidth??((t=e.style)==null?void 0:t.width),height:e.height??e.initialHeight??((n=e.style)==null?void 0:n.height)}:{width:e.width??((r=e.style)==null?void 0:r.width),height:e.height??((i=e.style)==null?void 0:i.height)}}const UY=e=>{const{width:t,height:n,x:r,y:i}=Ll(e.nodeLookup,{filter:s=>!!s.selected});return{width:Tn(t)?t:null,height:Tn(n)?n:null,userSelectionActive:e.userSelectionActive,transformString:`translate(${e.transform[0]}px,${e.transform[1]}px) scale(${e.transform[2]}) translate(${r}px,${i}px)`}};function VY({onSelectionContextMenu:e,noPanClassName:t,disableKeyboardA11y:n}){const r=Be(),{width:i,height:s,transformString:o,userSelectionActive:a}=ke(UY,je),l=i2(),c=T.useRef(null);T.useEffect(()=>{var h;n||(h=c.current)==null||h.focus({preventScroll:!0})},[n]);const d=!a&&i!==null&&s!==null;if(r2({nodeRef:c,disabled:!d}),!d)return null;const u=e?h=>{const g=r.getState().nodes.filter(y=>y.selected);e(h,g)}:void 0,f=h=>{Object.prototype.hasOwnProperty.call(Ju,h.key)&&(h.preventDefault(),l({direction:Ju[h.key],factor:h.shiftKey?4:1}))};return p.jsx("div",{className:st(["react-flow__nodesselection","react-flow__container",t]),style:{transform:o},children:p.jsx("div",{ref:c,className:"react-flow__nodesselection-rect",onContextMenu:u,tabIndex:n?void 0:-1,onKeyDown:n?void 0:f,style:{width:i,height:s}})})}const I1=typeof window<"u"?window:void 0,HY=e=>({nodesSelectionActive:e.nodesSelectionActive,userSelectionActive:e.userSelectionActive});function o2({children:e,onPaneClick:t,onPaneMouseEnter:n,onPaneMouseMove:r,onPaneMouseLeave:i,onPaneContextMenu:s,onPaneScroll:o,paneClickDistance:a,deleteKeyCode:l,selectionKeyCode:c,selectionOnDrag:d,selectionMode:u,onSelectionStart:f,onSelectionEnd:h,multiSelectionKeyCode:g,panActivationKeyCode:y,zoomActivationKeyCode:b,elementsSelectable:m,zoomOnScroll:w,zoomOnPinch:v,panOnScroll:x,panOnScrollSpeed:k,panOnScrollMode:E,zoomOnDoubleClick:N,panOnDrag:S,autoPanOnSelection:L,defaultViewport:M,translateExtent:j,minZoom:R,maxZoom:$,preventScrolling:C,onSelectionContextMenu:B,noWheelClassName:I,noPanClassName:P,disableKeyboardA11y:O,onViewportChange:D,isControlledViewport:_}){const{nodesSelectionActive:H,userSelectionActive:F}=ke(HY,je),A=ul(c,{target:I1}),W=ul(y,{target:I1}),Y=W||S,V=W||x,G=d&&Y!==!0,K=A||F||G;return _Y({deleteKeyCode:l,multiSelectionKeyCode:g}),p.jsx(TY,{onPaneContextMenu:s,elementsSelectable:m,zoomOnScroll:w,zoomOnPinch:v,panOnScroll:V,panOnScrollSpeed:k,panOnScrollMode:E,zoomOnDoubleClick:N,panOnDrag:!A&&Y,defaultViewport:M,translateExtent:j,minZoom:R,maxZoom:$,zoomActivationKeyCode:b,preventScrolling:C,noWheelClassName:I,noPanClassName:P,onViewportChange:D,isControlledViewport:_,paneClickDistance:a,selectionOnDrag:G,children:p.jsxs(IY,{onSelectionStart:f,onSelectionEnd:h,onPaneClick:t,onPaneMouseEnter:n,onPaneMouseMove:r,onPaneMouseLeave:i,onPaneContextMenu:s,onPaneScroll:o,panOnDrag:Y,autoPanOnSelection:L,isSelecting:!!K,selectionMode:u,selectionKeyPressed:A,paneClickDistance:a,selectionOnDrag:G,children:[e,H&&p.jsx(VY,{onSelectionContextMenu:B,noPanClassName:P,disableKeyboardA11y:O})]})})}o2.displayName="FlowRenderer";const KY=T.memo(o2),qY=e=>t=>e?i0(t.nodeLookup,{x:0,y:0,width:t.width,height:t.height},t.transform,!0).map(n=>n.id):Array.from(t.nodeLookup.keys());function GY(e){return ke(T.useCallback(qY(e),[e]),je)}const WY=e=>e.updateNodeInternals;function YY(){const e=ke(WY),[t]=T.useState(()=>typeof ResizeObserver>"u"?null:new ResizeObserver(n=>{const r=new Map;n.forEach(i=>{const s=i.target.getAttribute("data-id");r.set(s,{id:s,nodeElement:i.target,force:!0})}),e(r)}));return T.useEffect(()=>()=>{t==null||t.disconnect()},[t]),t}function XY({node:e,nodeType:t,hasDimensions:n,resizeObserver:r}){const i=Be(),s=T.useRef(null),o=T.useRef(null),a=T.useRef(e.sourcePosition),l=T.useRef(e.targetPosition),c=T.useRef(t),d=n&&!!e.internals.handleBounds;return T.useEffect(()=>{s.current&&!e.hidden&&(!d||o.current!==s.current)&&(o.current&&(r==null||r.unobserve(o.current)),r==null||r.observe(s.current),o.current=s.current)},[d,e.hidden]),T.useEffect(()=>()=>{o.current&&(r==null||r.unobserve(o.current),o.current=null)},[]),T.useEffect(()=>{if(s.current){const u=c.current!==t,f=a.current!==e.sourcePosition,h=l.current!==e.targetPosition;(u||f||h)&&(c.current=t,a.current=e.sourcePosition,l.current=e.targetPosition,i.getState().updateNodeInternals(new Map([[e.id,{id:e.id,nodeElement:s.current,force:!0}]])))}},[e.id,t,e.sourcePosition,e.targetPosition]),s}function QY({id:e,onClick:t,onMouseEnter:n,onMouseMove:r,onMouseLeave:i,onContextMenu:s,onDoubleClick:o,nodesDraggable:a,elementsSelectable:l,nodesConnectable:c,nodesFocusable:d,resizeObserver:u,noDragClassName:f,noPanClassName:h,disableKeyboardA11y:g,rfId:y,nodeTypes:b,nodeClickDistance:m,onError:w}){const{node:v,internals:x,isParent:k}=ke(K=>{const X=K.nodeLookup.get(e),te=K.parentLookup.has(e);return{node:X,internals:X.internals,isParent:te}},je);let E=v.type||"default",N=(b==null?void 0:b[E])||M1[E];N===void 0&&(w==null||w("003",Rn.error003(E)),E="default",N=(b==null?void 0:b.default)||M1.default);const S=!!(v.draggable||a&&typeof v.draggable>"u"),L=!!(v.selectable||l&&typeof v.selectable>"u"),M=!!(v.connectable||c&&typeof v.connectable>"u"),j=!!(v.focusable||d&&typeof v.focusable>"u"),R=Be(),$=EA(v),C=XY({node:v,nodeType:E,hasDimensions:$,resizeObserver:u}),B=r2({nodeRef:C,disabled:v.hidden||!S,noDragClassName:f,handleSelector:v.dragHandle,nodeId:e,isSelectable:L,nodeClickDistance:m}),I=i2();if(v.hidden)return null;const P=vr(v),O=zY(v),D=L||S||t||n||r||i,_=n?K=>n(K,{...x.userNode}):void 0,H=r?K=>r(K,{...x.userNode}):void 0,F=i?K=>i(K,{...x.userNode}):void 0,A=s?K=>s(K,{...x.userNode}):void 0,W=o?K=>o(K,{...x.userNode}):void 0,Y=K=>{const{selectNodesOnDrag:X,nodeDragThreshold:te}=R.getState();L&&(!X||!S||te>0)&&Am({id:e,store:R,nodeRef:C}),t&&t(K,{...x.userNode})},V=K=>{if(!(SA(K.nativeEvent)||g)){if(hA.includes(K.key)&&L){const X=K.key==="Escape";Am({id:e,store:R,unselect:X,nodeRef:C})}else if(S&&v.selected&&Object.prototype.hasOwnProperty.call(Ju,K.key)){K.preventDefault();const{ariaLabelConfig:X}=R.getState();R.setState({ariaLiveMessage:X["node.a11yDescription.ariaLiveMessage"]({direction:K.key.replace("Arrow","").toLowerCase(),x:~~x.positionAbsolute.x,y:~~x.positionAbsolute.y})}),I({direction:Ju[K.key],factor:K.shiftKey?4:1})}}},G=()=>{var he;if(g||!((he=C.current)!=null&&he.matches(":focus-visible")))return;const{transform:K,width:X,height:te,autoPanOnNodeFocus:ae,setCenter:re}=R.getState();if(!ae)return;i0(new Map([[e,v]]),{x:0,y:0,width:X,height:te},K,!0).length>0||re(v.position.x+P.width/2,v.position.y+P.height/2,{zoom:K[2]})};return p.jsx("div",{className:st(["react-flow__node",`react-flow__node-${E}`,{[h]:S},v.className,{selected:v.selected,selectable:L,parent:k,draggable:S,dragging:B}]),ref:C,style:{zIndex:x.z,transform:`translate(${x.positionAbsolute.x}px,${x.positionAbsolute.y}px)`,pointerEvents:D?"all":"none",visibility:$?"visible":"hidden",...v.style,...O},"data-id":e,"data-testid":`rf__node-${e}`,onMouseEnter:_,onMouseMove:H,onMouseLeave:F,onContextMenu:A,onClick:Y,onDoubleClick:W,onKeyDown:j?V:void 0,tabIndex:j?0:void 0,onFocus:j?G:void 0,role:v.ariaRole??(j?"group":void 0),"aria-roledescription":"node","aria-describedby":g?void 0:`${WA}-${y}`,"aria-label":v.ariaLabel,...v.domAttributes,children:p.jsx(RY,{value:e,children:p.jsx(N,{id:e,data:v.data,type:E,positionAbsoluteX:x.positionAbsolute.x,positionAbsoluteY:x.positionAbsolute.y,selected:v.selected??!1,selectable:L,draggable:S,deletable:v.deletable??!0,isConnectable:M,sourcePosition:v.sourcePosition,targetPosition:v.targetPosition,dragging:B,dragHandle:v.dragHandle,zIndex:x.z,parentId:v.parentId,...P})})})}var ZY=T.memo(QY);const JY=e=>({nodesDraggable:e.nodesDraggable,nodesConnectable:e.nodesConnectable,nodesFocusable:e.nodesFocusable,elementsSelectable:e.elementsSelectable,onError:e.onError});function a2(e){const{nodesDraggable:t,nodesConnectable:n,nodesFocusable:r,elementsSelectable:i,onError:s}=ke(JY,je),o=GY(e.onlyRenderVisibleElements),a=YY();return p.jsx("div",{className:"react-flow__nodes",style:Jd,children:o.map(l=>p.jsx(ZY,{id:l,nodeTypes:e.nodeTypes,nodeExtent:e.nodeExtent,onClick:e.onNodeClick,onMouseEnter:e.onNodeMouseEnter,onMouseMove:e.onNodeMouseMove,onMouseLeave:e.onNodeMouseLeave,onContextMenu:e.onNodeContextMenu,onDoubleClick:e.onNodeDoubleClick,noDragClassName:e.noDragClassName,noPanClassName:e.noPanClassName,rfId:e.rfId,disableKeyboardA11y:e.disableKeyboardA11y,resizeObserver:a,nodesDraggable:t,nodesConnectable:n,nodesFocusable:r,elementsSelectable:i,nodeClickDistance:e.nodeClickDistance,onError:s},l))})}a2.displayName="NodeRenderer";const eX=T.memo(a2);function tX(e){return ke(T.useCallback(n=>{if(!e)return n.edges.map(i=>i.id);const r=[];if(n.width&&n.height)for(const i of n.edges){const s=n.nodeLookup.get(i.source),o=n.nodeLookup.get(i.target);s&&o&&$G({sourceNode:s,targetNode:o,width:n.width,height:n.height,transform:n.transform})&&r.push(i.id)}return r},[e]),je)}const nX=({color:e="none",strokeWidth:t=1})=>{const n={strokeWidth:t,...e&&{stroke:e}};return p.jsx("polyline",{className:"arrow",style:n,strokeLinecap:"round",fill:"none",strokeLinejoin:"round",points:"-5,-4 0,0 -5,4"})},rX=({color:e="none",strokeWidth:t=1})=>{const n={strokeWidth:t,...e&&{stroke:e,fill:e}};return p.jsx("polyline",{className:"arrowclosed",style:n,strokeLinecap:"round",strokeLinejoin:"round",points:"-5,-4 0,0 -5,4 -5,-4"})},O1={[al.Arrow]:nX,[al.ArrowClosed]:rX};function iX(e){const t=Be();return T.useMemo(()=>{var i,s;return Object.prototype.hasOwnProperty.call(O1,e)?O1[e]:((s=(i=t.getState()).onError)==null||s.call(i,"009",Rn.error009(e)),null)},[e])}const sX=({id:e,type:t,color:n,width:r=12.5,height:i=12.5,markerUnits:s="strokeWidth",strokeWidth:o,orient:a="auto-start-reverse"})=>{const l=iX(t);return l?p.jsx("marker",{className:"react-flow__arrowhead",id:e,markerWidth:`${r}`,markerHeight:`${i}`,viewBox:"-10 -10 20 20",markerUnits:s,orient:a,refX:"0",refY:"0",children:p.jsx(l,{color:n,strokeWidth:o})}):null},l2=({defaultColor:e,rfId:t})=>{const n=ke(s=>s.edges),r=ke(s=>s.defaultEdgeOptions),i=T.useMemo(()=>GG(n,{id:t,defaultColor:e,defaultMarkerStart:r==null?void 0:r.markerStart,defaultMarkerEnd:r==null?void 0:r.markerEnd}),[n,r,t,e]);return i.length?p.jsx("svg",{className:"react-flow__marker","aria-hidden":"true",children:p.jsx("defs",{children:i.map(s=>p.jsx(sX,{id:s.id,type:s.type,color:s.color,width:s.width,height:s.height,markerUnits:s.markerUnits,strokeWidth:s.strokeWidth,orient:s.orient},s.id))})}):null};l2.displayName="MarkerDefinitions";var oX=T.memo(l2);function c2({x:e,y:t,label:n,labelStyle:r,labelShowBg:i=!0,labelBgStyle:s,labelBgPadding:o=[2,4],labelBgBorderRadius:a=2,children:l,className:c,...d}){const[u,f]=T.useState({x:1,y:0,width:0,height:0}),h=st(["react-flow__edge-textwrapper",c]),g=T.useRef(null);return T.useEffect(()=>{if(g.current){const y=g.current.getBBox();f({x:y.x,y:y.y,width:y.width,height:y.height})}},[n]),n?p.jsxs("g",{transform:`translate(${e-u.width/2} ${t-u.height/2})`,className:h,visibility:u.width?"visible":"hidden",...d,children:[i&&p.jsx("rect",{width:u.width+2*o[0],x:-o[0],y:-o[1],height:u.height+2*o[1],className:"react-flow__edge-textbg",style:s,rx:a,ry:a}),p.jsx("text",{className:"react-flow__edge-text",y:u.height/2,dy:"0.3em",ref:g,style:r,children:n}),l]}):null}c2.displayName="EdgeText";const aX=T.memo(c2);function ef({path:e,labelX:t,labelY:n,label:r,labelStyle:i,labelShowBg:s,labelBgStyle:o,labelBgPadding:a,labelBgBorderRadius:l,interactionWidth:c=20,...d}){return p.jsxs(p.Fragment,{children:[p.jsx("path",{...d,d:e,fill:"none",className:st(["react-flow__edge-path",d.className])}),c?p.jsx("path",{d:e,fill:"none",strokeOpacity:0,strokeWidth:c,className:"react-flow__edge-interaction"}):null,r&&Tn(t)&&Tn(n)?p.jsx(aX,{x:t,y:n,label:r,labelStyle:i,labelShowBg:s,labelBgStyle:o,labelBgPadding:a,labelBgBorderRadius:l}):null]})}function R1({pos:e,x1:t,y1:n,x2:r,y2:i}){return e===ue.Left||e===ue.Right?[.5*(t+r),n]:[t,.5*(n+i)]}function u2({sourceX:e,sourceY:t,sourcePosition:n=ue.Bottom,targetX:r,targetY:i,targetPosition:s=ue.Top}){const[o,a]=R1({pos:n,x1:e,y1:t,x2:r,y2:i}),[l,c]=R1({pos:s,x1:r,y1:i,x2:e,y2:t}),[d,u,f,h]=TA({sourceX:e,sourceY:t,targetX:r,targetY:i,sourceControlX:o,sourceControlY:a,targetControlX:l,targetControlY:c});return[`M${e},${t} C${o},${a} ${l},${c} ${r},${i}`,d,u,f,h]}function d2(e){return T.memo(({id:t,sourceX:n,sourceY:r,targetX:i,targetY:s,sourcePosition:o,targetPosition:a,label:l,labelStyle:c,labelShowBg:d,labelBgStyle:u,labelBgPadding:f,labelBgBorderRadius:h,style:g,markerEnd:y,markerStart:b,interactionWidth:m})=>{const[w,v,x]=u2({sourceX:n,sourceY:r,sourcePosition:o,targetX:i,targetY:s,targetPosition:a}),k=e.isInternal?void 0:t;return p.jsx(ef,{id:k,path:w,labelX:v,labelY:x,label:l,labelStyle:c,labelShowBg:d,labelBgStyle:u,labelBgPadding:f,labelBgBorderRadius:h,style:g,markerEnd:y,markerStart:b,interactionWidth:m})})}const lX=d2({isInternal:!1}),f2=d2({isInternal:!0});lX.displayName="SimpleBezierEdge";f2.displayName="SimpleBezierEdgeInternal";function h2(e){return T.memo(({id:t,sourceX:n,sourceY:r,targetX:i,targetY:s,label:o,labelStyle:a,labelShowBg:l,labelBgStyle:c,labelBgPadding:d,labelBgBorderRadius:u,style:f,sourcePosition:h=ue.Bottom,targetPosition:g=ue.Top,markerEnd:y,markerStart:b,pathOptions:m,interactionWidth:w})=>{const[v,x,k]=Sm({sourceX:n,sourceY:r,sourcePosition:h,targetX:i,targetY:s,targetPosition:g,borderRadius:m==null?void 0:m.borderRadius,offset:m==null?void 0:m.offset,stepPosition:m==null?void 0:m.stepPosition}),E=e.isInternal?void 0:t;return p.jsx(ef,{id:E,path:v,labelX:x,labelY:k,label:o,labelStyle:a,labelShowBg:l,labelBgStyle:c,labelBgPadding:d,labelBgBorderRadius:u,style:f,markerEnd:y,markerStart:b,interactionWidth:w})})}const p2=h2({isInternal:!1}),m2=h2({isInternal:!0});p2.displayName="SmoothStepEdge";m2.displayName="SmoothStepEdgeInternal";function g2(e){return T.memo(({id:t,...n})=>{var i;const r=e.isInternal?void 0:t;return p.jsx(p2,{...n,id:r,pathOptions:T.useMemo(()=>{var s;return{borderRadius:0,offset:(s=n.pathOptions)==null?void 0:s.offset}},[(i=n.pathOptions)==null?void 0:i.offset])})})}const cX=g2({isInternal:!1}),y2=g2({isInternal:!0});cX.displayName="StepEdge";y2.displayName="StepEdgeInternal";function b2(e){return T.memo(({id:t,sourceX:n,sourceY:r,targetX:i,targetY:s,label:o,labelStyle:a,labelShowBg:l,labelBgStyle:c,labelBgPadding:d,labelBgBorderRadius:u,style:f,markerEnd:h,markerStart:g,interactionWidth:y})=>{const[b,m,w]=MA({sourceX:n,sourceY:r,targetX:i,targetY:s}),v=e.isInternal?void 0:t;return p.jsx(ef,{id:v,path:b,labelX:m,labelY:w,label:o,labelStyle:a,labelShowBg:l,labelBgStyle:c,labelBgPadding:d,labelBgBorderRadius:u,style:f,markerEnd:h,markerStart:g,interactionWidth:y})})}const uX=b2({isInternal:!1}),w2=b2({isInternal:!0});uX.displayName="StraightEdge";w2.displayName="StraightEdgeInternal";function v2(e){return T.memo(({id:t,sourceX:n,sourceY:r,targetX:i,targetY:s,sourcePosition:o=ue.Bottom,targetPosition:a=ue.Top,label:l,labelStyle:c,labelShowBg:d,labelBgStyle:u,labelBgPadding:f,labelBgBorderRadius:h,style:g,markerEnd:y,markerStart:b,pathOptions:m,interactionWidth:w})=>{const[v,x,k]=CA({sourceX:n,sourceY:r,sourcePosition:o,targetX:i,targetY:s,targetPosition:a,curvature:m==null?void 0:m.curvature}),E=e.isInternal?void 0:t;return p.jsx(ef,{id:E,path:v,labelX:x,labelY:k,label:l,labelStyle:c,labelShowBg:d,labelBgStyle:u,labelBgPadding:f,labelBgBorderRadius:h,style:g,markerEnd:y,markerStart:b,interactionWidth:w})})}const dX=v2({isInternal:!1}),x2=v2({isInternal:!0});dX.displayName="BezierEdge";x2.displayName="BezierEdgeInternal";const L1={default:x2,straight:w2,step:y2,smoothstep:m2,simplebezier:f2},P1={sourceX:null,sourceY:null,targetX:null,targetY:null,sourcePosition:null,targetPosition:null},fX=(e,t,n)=>n===ue.Left?e-t:n===ue.Right?e+t:e,hX=(e,t,n)=>n===ue.Top?e-t:n===ue.Bottom?e+t:e,D1="react-flow__edgeupdater";function j1({position:e,centerX:t,centerY:n,radius:r=10,onMouseDown:i,onMouseEnter:s,onMouseOut:o,type:a}){return p.jsx("circle",{onMouseDown:i,onMouseEnter:s,onMouseOut:o,className:st([D1,`${D1}-${a}`]),cx:fX(t,r,e),cy:hX(n,r,e),r,stroke:"transparent",fill:"transparent"})}function pX({isReconnectable:e,reconnectRadius:t,edge:n,sourceX:r,sourceY:i,targetX:s,targetY:o,sourcePosition:a,targetPosition:l,onReconnect:c,onReconnectStart:d,onReconnectEnd:u,setReconnecting:f,setUpdateHover:h}){const g=Be(),y=(x,k)=>{if(x.button!==0)return;const{autoPanOnConnect:E,domNode:N,connectionMode:S,connectionRadius:L,lib:M,onConnectStart:j,cancelConnection:R,nodeLookup:$,rfId:C,panBy:B,updateConnection:I}=g.getState(),P=k.type==="target",O=(H,F)=>{f(!1),u==null||u(H,n,k.type,F)},D=H=>c==null?void 0:c(n,H),_=(H,F)=>{f(!0),d==null||d(x,n,k.type),j==null||j(H,F)};Cm.onPointerDown(x.nativeEvent,{autoPanOnConnect:E,connectionMode:S,connectionRadius:L,domNode:N,handleId:k.id,nodeId:k.nodeId,nodeLookup:$,isTarget:P,edgeUpdaterType:k.type,lib:M,flowId:C,cancelConnection:R,panBy:B,isValidConnection:(...H)=>{var F,A;return((A=(F=g.getState()).isValidConnection)==null?void 0:A.call(F,...H))??!0},onConnect:D,onConnectStart:_,onConnectEnd:(...H)=>{var F,A;return(A=(F=g.getState()).onConnectEnd)==null?void 0:A.call(F,...H)},onReconnectEnd:O,updateConnection:I,getTransform:()=>g.getState().transform,getFromHandle:()=>g.getState().connection.fromHandle,dragThreshold:g.getState().connectionDragThreshold,handleDomNode:x.currentTarget})},b=x=>y(x,{nodeId:n.target,id:n.targetHandle??null,type:"target"}),m=x=>y(x,{nodeId:n.source,id:n.sourceHandle??null,type:"source"}),w=()=>h(!0),v=()=>h(!1);return p.jsxs(p.Fragment,{children:[(e===!0||e==="source")&&p.jsx(j1,{position:a,centerX:r,centerY:i,radius:t,onMouseDown:b,onMouseEnter:w,onMouseOut:v,type:"source"}),(e===!0||e==="target")&&p.jsx(j1,{position:l,centerX:s,centerY:o,radius:t,onMouseDown:m,onMouseEnter:w,onMouseOut:v,type:"target"})]})}function mX({id:e,edgesFocusable:t,edgesReconnectable:n,elementsSelectable:r,onClick:i,onDoubleClick:s,onContextMenu:o,onMouseEnter:a,onMouseMove:l,onMouseLeave:c,reconnectRadius:d,onReconnect:u,onReconnectStart:f,onReconnectEnd:h,rfId:g,edgeTypes:y,noPanClassName:b,onError:m,disableKeyboardA11y:w}){let v=ke(re=>re.edgeLookup.get(e));const x=ke(re=>re.defaultEdgeOptions);v=x?{...x,...v}:v;let k=v.type||"default",E=(y==null?void 0:y[k])||L1[k];E===void 0&&(m==null||m("011",Rn.error011(k)),k="default",E=(y==null?void 0:y.default)||L1.default);const N=!!(v.focusable||t&&typeof v.focusable>"u"),S=typeof u<"u"&&(v.reconnectable||n&&typeof v.reconnectable>"u"),L=!!(v.selectable||r&&typeof v.selectable>"u"),M=T.useRef(null),[j,R]=T.useState(!1),[$,C]=T.useState(!1),B=Be(),{zIndex:I,sourceX:P,sourceY:O,targetX:D,targetY:_,sourcePosition:H,targetPosition:F}=ke(T.useCallback(re=>{const ne=re.nodeLookup.get(v.source),he=re.nodeLookup.get(v.target);if(!ne||!he)return{zIndex:v.zIndex,...P1};const pe=qG({id:e,sourceNode:ne,targetNode:he,sourceHandle:v.sourceHandle||null,targetHandle:v.targetHandle||null,connectionMode:re.connectionMode,onError:m});return{zIndex:BG({selected:v.selected,zIndex:v.zIndex,sourceNode:ne,targetNode:he,elevateOnSelect:re.elevateEdgesOnSelect,zIndexMode:re.zIndexMode}),...pe||P1}},[v.source,v.target,v.sourceHandle,v.targetHandle,v.selected,v.zIndex]),je),A=T.useMemo(()=>v.markerStart?`url('#${Nm(v.markerStart,g)}')`:void 0,[v.markerStart,g]),W=T.useMemo(()=>v.markerEnd?`url('#${Nm(v.markerEnd,g)}')`:void 0,[v.markerEnd,g]);if(v.hidden||P===null||O===null||D===null||_===null)return null;const Y=re=>{var oe;const{addSelectedEdges:ne,unselectNodesAndEdges:he,multiSelectionActive:pe}=B.getState();L&&(B.setState({nodesSelectionActive:!1}),v.selected&&pe?(he({nodes:[],edges:[v]}),(oe=M.current)==null||oe.blur()):ne([e])),i&&i(re,v)},V=s?re=>{s(re,{...v})}:void 0,G=o?re=>{o(re,{...v})}:void 0,K=a?re=>{a(re,{...v})}:void 0,X=l?re=>{l(re,{...v})}:void 0,te=c?re=>{c(re,{...v})}:void 0,ae=re=>{var ne;if(!w&&hA.includes(re.key)&&L){const{unselectNodesAndEdges:he,addSelectedEdges:pe}=B.getState();re.key==="Escape"?((ne=M.current)==null||ne.blur(),he({edges:[v]})):pe([e])}};return p.jsx("svg",{style:{zIndex:I},children:p.jsxs("g",{className:st(["react-flow__edge",`react-flow__edge-${k}`,v.className,b,{selected:v.selected,animated:v.animated,inactive:!L&&!i,updating:j,selectable:L}]),onClick:Y,onDoubleClick:V,onContextMenu:G,onMouseEnter:K,onMouseMove:X,onMouseLeave:te,onKeyDown:N?ae:void 0,tabIndex:N?0:void 0,role:v.ariaRole??(N?"group":"img"),"aria-roledescription":"edge","data-id":e,"data-testid":`rf__edge-${e}`,"aria-label":v.ariaLabel===null?void 0:v.ariaLabel||`Edge from ${v.source} to ${v.target}`,"aria-describedby":N?`${YA}-${g}`:void 0,ref:M,...v.domAttributes,children:[!$&&p.jsx(E,{id:e,source:v.source,target:v.target,type:v.type,selected:v.selected,animated:v.animated,selectable:L,deletable:v.deletable??!0,label:v.label,labelStyle:v.labelStyle,labelShowBg:v.labelShowBg,labelBgStyle:v.labelBgStyle,labelBgPadding:v.labelBgPadding,labelBgBorderRadius:v.labelBgBorderRadius,sourceX:P,sourceY:O,targetX:D,targetY:_,sourcePosition:H,targetPosition:F,data:v.data,style:v.style,sourceHandleId:v.sourceHandle,targetHandleId:v.targetHandle,markerStart:A,markerEnd:W,pathOptions:"pathOptions"in v?v.pathOptions:void 0,interactionWidth:v.interactionWidth}),S&&p.jsx(pX,{edge:v,isReconnectable:S,reconnectRadius:d,onReconnect:u,onReconnectStart:f,onReconnectEnd:h,sourceX:P,sourceY:O,targetX:D,targetY:_,sourcePosition:H,targetPosition:F,setUpdateHover:R,setReconnecting:C})]})})}var gX=T.memo(mX);const yX=e=>({edgesFocusable:e.edgesFocusable,edgesReconnectable:e.edgesReconnectable,elementsSelectable:e.elementsSelectable,connectionMode:e.connectionMode,onError:e.onError});function E2({defaultMarkerColor:e,onlyRenderVisibleElements:t,rfId:n,edgeTypes:r,noPanClassName:i,onReconnect:s,onEdgeContextMenu:o,onEdgeMouseEnter:a,onEdgeMouseMove:l,onEdgeMouseLeave:c,onEdgeClick:d,reconnectRadius:u,onEdgeDoubleClick:f,onReconnectStart:h,onReconnectEnd:g,disableKeyboardA11y:y}){const{edgesFocusable:b,edgesReconnectable:m,elementsSelectable:w,onError:v}=ke(yX,je),x=tX(t);return p.jsxs("div",{className:"react-flow__edges",children:[p.jsx(oX,{defaultColor:e,rfId:n}),x.map(k=>p.jsx(gX,{id:k,edgesFocusable:b,edgesReconnectable:m,elementsSelectable:w,noPanClassName:i,onReconnect:s,onContextMenu:o,onMouseEnter:a,onMouseMove:l,onMouseLeave:c,onClick:d,reconnectRadius:u,onDoubleClick:f,onReconnectStart:h,onReconnectEnd:g,rfId:n,onError:v,edgeTypes:r,disableKeyboardA11y:y},k))]})}E2.displayName="EdgeRenderer";const bX=T.memo(E2),wX=e=>`translate(${e.transform[0]}px,${e.transform[1]}px) scale(${e.transform[2]})`;function vX({children:e}){const t=ke(wX);return p.jsx("div",{className:"react-flow__viewport xyflow__viewport react-flow__container",style:{transform:t},children:e})}function xX(e){const t=h0(),n=T.useRef(!1);T.useEffect(()=>{!n.current&&t.viewportInitialized&&e&&(setTimeout(()=>e(t),1),n.current=!0)},[e,t.viewportInitialized])}const EX=e=>{var t;return(t=e.panZoom)==null?void 0:t.syncViewport};function kX(e){const t=ke(EX),n=Be();return T.useEffect(()=>{e&&(t==null||t(e),n.setState({transform:[e.x,e.y,e.zoom]}))},[e,t]),null}function _X(e){return e.connection.inProgress?{...e.connection,to:No(e.connection.to,e.transform)}:{...e.connection}}function SX(e){return _X}function NX(e){const t=SX();return ke(t,je)}const TX=e=>({nodesConnectable:e.nodesConnectable,isValid:e.connection.isValid,inProgress:e.connection.inProgress,width:e.width,height:e.height});function CX({containerStyle:e,style:t,type:n,component:r}){const{nodesConnectable:i,width:s,height:o,isValid:a,inProgress:l}=ke(TX,je);return!(s&&i&&l)?null:p.jsx("svg",{style:e,width:s,height:o,className:"react-flow__connectionline react-flow__container",children:p.jsx("g",{className:st(["react-flow__connection",gA(a)]),children:p.jsx(k2,{style:t,type:n,CustomComponent:r,isValid:a})})})}const k2=({style:e,type:t=Ir.Bezier,CustomComponent:n,isValid:r})=>{const{inProgress:i,from:s,fromNode:o,fromHandle:a,fromPosition:l,to:c,toNode:d,toHandle:u,toPosition:f,pointer:h}=NX();if(!i)return;if(n)return p.jsx(n,{connectionLineType:t,connectionLineStyle:e,fromNode:o,fromHandle:a,fromX:s.x,fromY:s.y,toX:c.x,toY:c.y,fromPosition:l,toPosition:f,connectionStatus:gA(r),toNode:d,toHandle:u,pointer:h});let g="";const y={sourceX:s.x,sourceY:s.y,sourcePosition:l,targetX:c.x,targetY:c.y,targetPosition:f};switch(t){case Ir.Bezier:[g]=CA(y);break;case Ir.SimpleBezier:[g]=u2(y);break;case Ir.Step:[g]=Sm({...y,borderRadius:0});break;case Ir.SmoothStep:[g]=Sm(y);break;default:[g]=MA(y)}return p.jsx("path",{d:g,fill:"none",className:"react-flow__connection-path",style:e})};k2.displayName="ConnectionLine";const AX={};function B1(e=AX){T.useRef(e),Be(),T.useEffect(()=>{},[e])}function MX(){Be(),T.useRef(!1),T.useEffect(()=>{},[])}function _2({nodeTypes:e,edgeTypes:t,onInit:n,onNodeClick:r,onEdgeClick:i,onNodeDoubleClick:s,onEdgeDoubleClick:o,onNodeMouseEnter:a,onNodeMouseMove:l,onNodeMouseLeave:c,onNodeContextMenu:d,onSelectionContextMenu:u,onSelectionStart:f,onSelectionEnd:h,connectionLineType:g,connectionLineStyle:y,connectionLineComponent:b,connectionLineContainerStyle:m,selectionKeyCode:w,selectionOnDrag:v,selectionMode:x,multiSelectionKeyCode:k,panActivationKeyCode:E,zoomActivationKeyCode:N,deleteKeyCode:S,onlyRenderVisibleElements:L,elementsSelectable:M,defaultViewport:j,translateExtent:R,minZoom:$,maxZoom:C,preventScrolling:B,defaultMarkerColor:I,zoomOnScroll:P,zoomOnPinch:O,panOnScroll:D,panOnScrollSpeed:_,panOnScrollMode:H,zoomOnDoubleClick:F,panOnDrag:A,autoPanOnSelection:W,onPaneClick:Y,onPaneMouseEnter:V,onPaneMouseMove:G,onPaneMouseLeave:K,onPaneScroll:X,onPaneContextMenu:te,paneClickDistance:ae,nodeClickDistance:re,onEdgeContextMenu:ne,onEdgeMouseEnter:he,onEdgeMouseMove:pe,onEdgeMouseLeave:oe,reconnectRadius:ve,onReconnect:ie,onReconnectStart:tt,onReconnectEnd:xe,noDragClassName:me,noWheelClassName:Dt,noPanClassName:qe,disableKeyboardA11y:Nt,nodeExtent:nt,rfId:U,viewport:z,onViewportChange:q}){return B1(e),B1(t),MX(),xX(n),kX(z),p.jsx(KY,{onPaneClick:Y,onPaneMouseEnter:V,onPaneMouseMove:G,onPaneMouseLeave:K,onPaneContextMenu:te,onPaneScroll:X,paneClickDistance:ae,deleteKeyCode:S,selectionKeyCode:w,selectionOnDrag:v,selectionMode:x,onSelectionStart:f,onSelectionEnd:h,multiSelectionKeyCode:k,panActivationKeyCode:E,zoomActivationKeyCode:N,elementsSelectable:M,zoomOnScroll:P,zoomOnPinch:O,zoomOnDoubleClick:F,panOnScroll:D,panOnScrollSpeed:_,panOnScrollMode:H,panOnDrag:A,autoPanOnSelection:W,defaultViewport:j,translateExtent:R,minZoom:$,maxZoom:C,onSelectionContextMenu:u,preventScrolling:B,noDragClassName:me,noWheelClassName:Dt,noPanClassName:qe,disableKeyboardA11y:Nt,onViewportChange:q,isControlledViewport:!!z,children:p.jsxs(vX,{children:[p.jsx(bX,{edgeTypes:t,onEdgeClick:i,onEdgeDoubleClick:o,onReconnect:ie,onReconnectStart:tt,onReconnectEnd:xe,onlyRenderVisibleElements:L,onEdgeContextMenu:ne,onEdgeMouseEnter:he,onEdgeMouseMove:pe,onEdgeMouseLeave:oe,reconnectRadius:ve,defaultMarkerColor:I,noPanClassName:qe,disableKeyboardA11y:Nt,rfId:U}),p.jsx(CX,{style:y,type:g,component:b,containerStyle:m}),p.jsx("div",{className:"react-flow__edgelabel-renderer"}),p.jsx(eX,{nodeTypes:e,onNodeClick:r,onNodeDoubleClick:s,onNodeMouseEnter:a,onNodeMouseMove:l,onNodeMouseLeave:c,onNodeContextMenu:d,nodeClickDistance:re,onlyRenderVisibleElements:L,noPanClassName:qe,noDragClassName:me,disableKeyboardA11y:Nt,nodeExtent:nt,rfId:U}),p.jsx("div",{className:"react-flow__viewport-portal"})]})})}_2.displayName="GraphView";const IX=T.memo(_2),OX=xA(),$1=({nodes:e,edges:t,defaultNodes:n,defaultEdges:r,width:i,height:s,fitView:o,fitViewOptions:a,minZoom:l=.5,maxZoom:c=2,nodeOrigin:d,nodeExtent:u,zIndexMode:f="basic"}={})=>{const h=new Map,g=new Map,y=new Map,b=new Map,m=r??t??[],w=n??e??[],v=d??[0,0],x=u??sl;RA(y,b,m);const{nodesInitialized:k}=Tm(w,h,g,{nodeOrigin:v,nodeExtent:x,zIndexMode:f});let E=[0,0,1];if(o&&i&&s){const N=Ll(h,{filter:j=>!!((j.width||j.initialWidth)&&(j.height||j.initialHeight))}),{x:S,y:L,zoom:M}=o0(N,i,s,l,c,(a==null?void 0:a.padding)??.1);E=[S,L,M]}return{rfId:"1",width:i??0,height:s??0,transform:E,nodes:w,nodesInitialized:k,nodeLookup:h,parentLookup:g,edges:m,edgeLookup:b,connectionLookup:y,onNodesChange:null,onEdgesChange:null,hasDefaultNodes:n!==void 0,hasDefaultEdges:r!==void 0,panZoom:null,minZoom:l,maxZoom:c,translateExtent:sl,nodeExtent:x,nodesSelectionActive:!1,userSelectionActive:!1,userSelectionRect:null,connectionMode:io.Strict,domNode:null,paneDragging:!1,noPanClassName:"nopan",nodeOrigin:v,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:o??!1,fitViewOptions:a,fitViewResolver:null,connection:{...mA},connectionClickStartHandle:null,connectOnClick:!0,ariaLiveMessage:"",autoPanOnConnect:!0,autoPanOnNodeDrag:!0,autoPanOnNodeFocus:!0,autoPanSpeed:15,connectionRadius:20,onError:OX,isValidConnection:void 0,onSelectionChangeHandlers:[],lib:"react",debug:!1,ariaLabelConfig:pA,zIndexMode:f,onNodesChangeMiddlewareMap:new Map,onEdgesChangeMiddlewareMap:new Map}},RX=({nodes:e,edges:t,defaultNodes:n,defaultEdges:r,width:i,height:s,fitView:o,fitViewOptions:a,minZoom:l,maxZoom:c,nodeOrigin:d,nodeExtent:u,zIndexMode:f})=>YW((h,g)=>{async function y(){const{nodeLookup:b,panZoom:m,fitViewOptions:w,fitViewResolver:v,width:x,height:k,minZoom:E,maxZoom:N}=g();m&&(await IG({nodes:b,width:x,height:k,panZoom:m,minZoom:E,maxZoom:N},w),v==null||v.resolve(!0),h({fitViewResolver:null}))}return{...$1({nodes:e,edges:t,width:i,height:s,fitView:o,fitViewOptions:a,minZoom:l,maxZoom:c,nodeOrigin:d,nodeExtent:u,defaultNodes:n,defaultEdges:r,zIndexMode:f}),setNodes:b=>{const{nodeLookup:m,parentLookup:w,nodeOrigin:v,elevateNodesOnSelect:x,fitViewQueued:k,zIndexMode:E,nodesSelectionActive:N}=g(),{nodesInitialized:S,hasSelectedNodes:L}=Tm(b,m,w,{nodeOrigin:v,nodeExtent:u,elevateNodesOnSelect:x,checkEquality:!0,zIndexMode:E}),M=N&&L;k&&S?(y(),h({nodes:b,nodesInitialized:S,fitViewQueued:!1,fitViewOptions:void 0,nodesSelectionActive:M})):h({nodes:b,nodesInitialized:S,nodesSelectionActive:M})},setEdges:b=>{const{connectionLookup:m,edgeLookup:w}=g();RA(m,w,b),h({edges:b})},setDefaultNodesAndEdges:(b,m)=>{if(b){const{setNodes:w}=g();w(b),h({hasDefaultNodes:!0})}if(m){const{setEdges:w}=g();w(m),h({hasDefaultEdges:!0})}},updateNodeInternals:b=>{const{triggerNodeChanges:m,nodeLookup:w,parentLookup:v,domNode:x,nodeOrigin:k,nodeExtent:E,debug:N,fitViewQueued:S,zIndexMode:L}=g(),{changes:M,updatedInternals:j}=eW(b,w,v,x,k,E,L);j&&(XG(w,v,{nodeOrigin:k,nodeExtent:E,zIndexMode:L}),S?(y(),h({fitViewQueued:!1,fitViewOptions:void 0})):h({}),(M==null?void 0:M.length)>0&&(N&&console.log("React Flow: trigger node changes",M),m==null||m(M)))},updateNodePositions:(b,m=!1)=>{const w=[];let v=[];const{nodeLookup:x,triggerNodeChanges:k,connection:E,updateConnection:N,onNodesChangeMiddlewareMap:S}=g();for(const[L,M]of b){const j=x.get(L),R=!!(j!=null&&j.expandParent&&(j!=null&&j.parentId)&&(M!=null&&M.position)),$={id:L,type:"position",position:R?{x:Math.max(0,M.position.x),y:Math.max(0,M.position.y)}:M.position,dragging:m};if(j&&E.inProgress&&E.fromNode.id===j.id){const C=ji(j,E.fromHandle,ue.Left,!0);N({...E,from:C})}R&&j.parentId&&w.push({id:L,parentId:j.parentId,rect:{...M.internals.positionAbsolute,width:M.measured.width??0,height:M.measured.height??0}}),v.push($)}if(w.length>0){const{parentLookup:L,nodeOrigin:M}=g(),j=f0(w,x,L,M);v.push(...j)}for(const L of S.values())v=L(v);k(v)},triggerNodeChanges:b=>{const{onNodesChange:m,setNodes:w,nodes:v,hasDefaultNodes:x,debug:k}=g();if(b!=null&&b.length){if(x){const E=ZA(b,v);w(E)}k&&console.log("React Flow: trigger node changes",b),m==null||m(b)}},triggerEdgeChanges:b=>{const{onEdgesChange:m,setEdges:w,edges:v,hasDefaultEdges:x,debug:k}=g();if(b!=null&&b.length){if(x){const E=JA(b,v);w(E)}k&&console.log("React Flow: trigger edge changes",b),m==null||m(b)}},addSelectedNodes:b=>{const{multiSelectionActive:m,edgeLookup:w,nodeLookup:v,triggerNodeChanges:x,triggerEdgeChanges:k}=g();if(m){const E=b.map(N=>ci(N,!0));x(E);return}x(Cs(v,new Set([...b]),!0)),k(Cs(w))},addSelectedEdges:b=>{const{multiSelectionActive:m,edgeLookup:w,nodeLookup:v,triggerNodeChanges:x,triggerEdgeChanges:k}=g();if(m){const E=b.map(N=>ci(N,!0));k(E);return}k(Cs(w,new Set([...b]))),x(Cs(v,new Set,!0))},unselectNodesAndEdges:({nodes:b,edges:m}={})=>{const{edges:w,nodes:v,nodeLookup:x,triggerNodeChanges:k,triggerEdgeChanges:E}=g(),N=b||v,S=m||w,L=[];for(const j of N){if(!j.selected)continue;const R=x.get(j.id);R&&(R.selected=!1),L.push(ci(j.id,!1))}const M=[];for(const j of S)j.selected&&M.push(ci(j.id,!1));k(L),E(M)},setMinZoom:b=>{const{panZoom:m,maxZoom:w}=g();m==null||m.setScaleExtent([b,w]),h({minZoom:b})},setMaxZoom:b=>{const{panZoom:m,minZoom:w}=g();m==null||m.setScaleExtent([w,b]),h({maxZoom:b})},setTranslateExtent:b=>{var m;(m=g().panZoom)==null||m.setTranslateExtent(b),h({translateExtent:b})},resetSelectedElements:()=>{const{edges:b,nodes:m,triggerNodeChanges:w,triggerEdgeChanges:v,elementsSelectable:x}=g();if(!x)return;const k=m.reduce((N,S)=>S.selected?[...N,ci(S.id,!1)]:N,[]),E=b.reduce((N,S)=>S.selected?[...N,ci(S.id,!1)]:N,[]);w(k),v(E)},setNodeExtent:b=>{const{nodes:m,nodeLookup:w,parentLookup:v,nodeOrigin:x,elevateNodesOnSelect:k,nodeExtent:E,zIndexMode:N}=g();b[0][0]===E[0][0]&&b[0][1]===E[0][1]&&b[1][0]===E[1][0]&&b[1][1]===E[1][1]||(Tm(m,w,v,{nodeOrigin:x,nodeExtent:b,elevateNodesOnSelect:k,checkEquality:!1,zIndexMode:N}),h({nodeExtent:b}))},panBy:b=>{const{transform:m,width:w,height:v,panZoom:x,translateExtent:k}=g();return tW({delta:b,panZoom:x,transform:m,translateExtent:k,width:w,height:v})},setCenter:async(b,m,w)=>{const{width:v,height:x,maxZoom:k,panZoom:E}=g();if(!E)return!1;const N=typeof(w==null?void 0:w.zoom)<"u"?w.zoom:k;return await E.setViewport({x:v/2-b*N,y:x/2-m*N,zoom:N},{duration:w==null?void 0:w.duration,ease:w==null?void 0:w.ease,interpolate:w==null?void 0:w.interpolate}),!0},cancelConnection:()=>{h({connection:{...mA}})},updateConnection:b=>{h({connection:b})},reset:()=>h({...$1()})}},Object.is);function S2({initialNodes:e,initialEdges:t,defaultNodes:n,defaultEdges:r,initialWidth:i,initialHeight:s,initialMinZoom:o,initialMaxZoom:a,initialFitViewOptions:l,fitView:c,nodeOrigin:d,nodeExtent:u,zIndexMode:f,children:h}){const[g]=T.useState(()=>RX({nodes:e,edges:t,defaultNodes:n,defaultEdges:r,width:i,height:s,fitView:c,minZoom:o,maxZoom:a,fitViewOptions:l,nodeOrigin:d,nodeExtent:u,zIndexMode:f}));return p.jsx(XW,{value:g,children:p.jsx(vY,{children:h})})}function LX({children:e,nodes:t,edges:n,defaultNodes:r,defaultEdges:i,width:s,height:o,fitView:a,fitViewOptions:l,minZoom:c,maxZoom:d,nodeOrigin:u,nodeExtent:f,zIndexMode:h}){return T.useContext(Qd)?p.jsx(p.Fragment,{children:e}):p.jsx(S2,{initialNodes:t,initialEdges:n,defaultNodes:r,defaultEdges:i,initialWidth:s,initialHeight:o,fitView:a,initialFitViewOptions:l,initialMinZoom:c,initialMaxZoom:d,nodeOrigin:u,nodeExtent:f,zIndexMode:h,children:e})}const PX={width:"100%",height:"100%",overflow:"hidden",position:"relative",zIndex:0};function DX({nodes:e,edges:t,defaultNodes:n,defaultEdges:r,className:i,nodeTypes:s,edgeTypes:o,onNodeClick:a,onEdgeClick:l,onInit:c,onMove:d,onMoveStart:u,onMoveEnd:f,onConnect:h,onConnectStart:g,onConnectEnd:y,onClickConnectStart:b,onClickConnectEnd:m,onNodeMouseEnter:w,onNodeMouseMove:v,onNodeMouseLeave:x,onNodeContextMenu:k,onNodeDoubleClick:E,onNodeDragStart:N,onNodeDrag:S,onNodeDragStop:L,onNodesDelete:M,onEdgesDelete:j,onDelete:R,onSelectionChange:$,onSelectionDragStart:C,onSelectionDrag:B,onSelectionDragStop:I,onSelectionContextMenu:P,onSelectionStart:O,onSelectionEnd:D,onBeforeDelete:_,connectionMode:H,connectionLineType:F=Ir.Bezier,connectionLineStyle:A,connectionLineComponent:W,connectionLineContainerStyle:Y,deleteKeyCode:V="Backspace",selectionKeyCode:G="Shift",selectionOnDrag:K=!1,selectionMode:X=ol.Full,panActivationKeyCode:te="Space",multiSelectionKeyCode:ae=cl()?"Meta":"Control",zoomActivationKeyCode:re=cl()?"Meta":"Control",snapToGrid:ne,snapGrid:he,onlyRenderVisibleElements:pe=!1,selectNodesOnDrag:oe,nodesDraggable:ve,autoPanOnNodeFocus:ie,nodesConnectable:tt,nodesFocusable:xe,nodeOrigin:me=XA,edgesFocusable:Dt,edgesReconnectable:qe,elementsSelectable:Nt=!0,defaultViewport:nt=cY,minZoom:U=.5,maxZoom:z=2,translateExtent:q=sl,preventScrolling:Q=!0,nodeExtent:ee,defaultMarkerColor:le="#b1b1b7",zoomOnScroll:Te=!0,zoomOnPinch:Pe=!0,panOnScroll:Ye=!1,panOnScrollSpeed:Tt=.5,panOnScrollMode:$e=ki.Free,zoomOnDoubleClick:Fe=!0,panOnDrag:gt=!0,onPaneClick:Gi,onPaneMouseEnter:ei,onPaneMouseMove:Wi,onPaneMouseLeave:O2,onPaneScroll:R2,onPaneContextMenu:L2,paneClickDistance:P2=1,nodeClickDistance:D2=0,children:j2,onReconnect:B2,onReconnectStart:$2,onReconnectEnd:F2,onEdgeContextMenu:z2,onEdgeDoubleClick:U2,onEdgeMouseEnter:V2,onEdgeMouseMove:H2,onEdgeMouseLeave:K2,reconnectRadius:q2=10,onNodesChange:G2,onEdgesChange:W2,noDragClassName:Y2="nodrag",noWheelClassName:X2="nowheel",noPanClassName:m0="nopan",fitView:g0,fitViewOptions:y0,connectOnClick:Q2,attributionPosition:Z2,proOptions:J2,defaultEdgeOptions:eM,elevateNodesOnSelect:tM=!0,elevateEdgesOnSelect:nM=!1,disableKeyboardA11y:b0=!1,autoPanOnConnect:rM,autoPanOnNodeDrag:iM,autoPanOnSelection:sM=!0,autoPanSpeed:oM,connectionRadius:aM,isValidConnection:lM,onError:cM,style:uM,id:w0,nodeDragThreshold:dM,connectionDragThreshold:fM,viewport:hM,onViewportChange:pM,width:mM,height:gM,colorMode:yM="light",debug:bM,onScroll:Dl,ariaLabelConfig:wM,zIndexMode:v0="basic",...vM},xM){const tf=w0||"1",EM=hY(yM),kM=T.useCallback(x0=>{x0.currentTarget.scrollTo({top:0,left:0,behavior:"instant"}),Dl==null||Dl(x0)},[Dl]);return p.jsx("div",{"data-testid":"rf__wrapper",...vM,onScroll:kM,style:{...uM,...PX},ref:xM,className:st(["react-flow",i,EM]),id:w0,role:"application",children:p.jsxs(LX,{nodes:e,edges:t,width:mM,height:gM,fitView:g0,fitViewOptions:y0,minZoom:U,maxZoom:z,nodeOrigin:me,nodeExtent:ee,zIndexMode:v0,children:[p.jsx(fY,{nodes:e,edges:t,defaultNodes:n,defaultEdges:r,onConnect:h,onConnectStart:g,onConnectEnd:y,onClickConnectStart:b,onClickConnectEnd:m,nodesDraggable:ve,autoPanOnNodeFocus:ie,nodesConnectable:tt,nodesFocusable:xe,edgesFocusable:Dt,edgesReconnectable:qe,elementsSelectable:Nt,elevateNodesOnSelect:tM,elevateEdgesOnSelect:nM,minZoom:U,maxZoom:z,nodeExtent:ee,onNodesChange:G2,onEdgesChange:W2,snapToGrid:ne,snapGrid:he,connectionMode:H,translateExtent:q,connectOnClick:Q2,defaultEdgeOptions:eM,fitView:g0,fitViewOptions:y0,onNodesDelete:M,onEdgesDelete:j,onDelete:R,onNodeDragStart:N,onNodeDrag:S,onNodeDragStop:L,onSelectionDrag:B,onSelectionDragStart:C,onSelectionDragStop:I,onMove:d,onMoveStart:u,onMoveEnd:f,noPanClassName:m0,nodeOrigin:me,rfId:tf,autoPanOnConnect:rM,autoPanOnNodeDrag:iM,autoPanSpeed:oM,onError:cM,connectionRadius:aM,isValidConnection:lM,selectNodesOnDrag:oe,nodeDragThreshold:dM,connectionDragThreshold:fM,onBeforeDelete:_,debug:bM,ariaLabelConfig:wM,zIndexMode:v0}),p.jsx(IX,{onInit:c,onNodeClick:a,onEdgeClick:l,onNodeMouseEnter:w,onNodeMouseMove:v,onNodeMouseLeave:x,onNodeContextMenu:k,onNodeDoubleClick:E,nodeTypes:s,edgeTypes:o,connectionLineType:F,connectionLineStyle:A,connectionLineComponent:W,connectionLineContainerStyle:Y,selectionKeyCode:G,selectionOnDrag:K,selectionMode:X,deleteKeyCode:V,multiSelectionKeyCode:ae,panActivationKeyCode:te,zoomActivationKeyCode:re,onlyRenderVisibleElements:pe,defaultViewport:nt,translateExtent:q,minZoom:U,maxZoom:z,preventScrolling:Q,zoomOnScroll:Te,zoomOnPinch:Pe,zoomOnDoubleClick:Fe,panOnScroll:Ye,panOnScrollSpeed:Tt,panOnScrollMode:$e,panOnDrag:gt,autoPanOnSelection:sM,onPaneClick:Gi,onPaneMouseEnter:ei,onPaneMouseMove:Wi,onPaneMouseLeave:O2,onPaneScroll:R2,onPaneContextMenu:L2,paneClickDistance:P2,nodeClickDistance:D2,onSelectionContextMenu:P,onSelectionStart:O,onSelectionEnd:D,onReconnect:B2,onReconnectStart:$2,onReconnectEnd:F2,onEdgeContextMenu:z2,onEdgeDoubleClick:U2,onEdgeMouseEnter:V2,onEdgeMouseMove:H2,onEdgeMouseLeave:K2,reconnectRadius:q2,defaultMarkerColor:le,noDragClassName:Y2,noWheelClassName:X2,noPanClassName:m0,rfId:tf,disableKeyboardA11y:b0,nodeExtent:ee,viewport:hM,onViewportChange:pM}),p.jsx(lY,{onSelectionChange:$}),j2,p.jsx(rY,{proOptions:J2,position:Z2}),p.jsx(nY,{rfId:tf,disableKeyboardA11y:b0})]})})}var jX=t2(DX);function BX(e){const[t,n]=T.useState(e),r=T.useCallback(i=>n(s=>ZA(i,s)),[]);return[t,n,r]}function $X(e){const[t,n]=T.useState(e),r=T.useCallback(i=>n(s=>JA(i,s)),[]);return[t,n,r]}function FX({dimensions:e,lineWidth:t,variant:n,className:r}){return p.jsx("path",{strokeWidth:t,d:`M${e[0]/2} 0 V${e[1]} M0 ${e[1]/2} H${e[0]}`,className:st(["react-flow__background-pattern",n,r])})}function zX({radius:e,className:t}){return p.jsx("circle",{cx:e,cy:e,r:e,className:st(["react-flow__background-pattern","dots",t])})}var Hr;(function(e){e.Lines="lines",e.Dots="dots",e.Cross="cross"})(Hr||(Hr={}));const UX={[Hr.Dots]:1,[Hr.Lines]:1,[Hr.Cross]:6},VX=e=>({transform:e.transform,patternId:`pattern-${e.rfId}`});function N2({id:e,variant:t=Hr.Dots,gap:n=20,size:r,lineWidth:i=1,offset:s=0,color:o,bgColor:a,style:l,className:c,patternClassName:d}){const u=T.useRef(null),{transform:f,patternId:h}=ke(VX,je),g=r||UX[t],y=t===Hr.Dots,b=t===Hr.Cross,m=Array.isArray(n)?n:[n,n],w=[m[0]*f[2]||1,m[1]*f[2]||1],v=g*f[2],x=Array.isArray(s)?s:[s,s],k=b?[v,v]:w,E=[x[0]*f[2]||1+k[0]/2,x[1]*f[2]||1+k[1]/2],N=`${h}${e||""}`;return p.jsxs("svg",{className:st(["react-flow__background",c]),style:{...l,...Jd,"--xy-background-color-props":a,"--xy-background-pattern-color-props":o},ref:u,"data-testid":"rf__background",children:[p.jsx("pattern",{id:N,x:f[0]%w[0],y:f[1]%w[1],width:w[0],height:w[1],patternUnits:"userSpaceOnUse",patternTransform:`translate(-${E[0]},-${E[1]})`,children:y?p.jsx(zX,{radius:v/2,className:d}):p.jsx(FX,{dimensions:k,lineWidth:i,variant:t,className:d})}),p.jsx("rect",{x:"0",y:"0",width:"100%",height:"100%",fill:`url(#${N})`})]})}N2.displayName="Background";const HX=T.memo(N2);function KX(){return p.jsx("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",children:p.jsx("path",{d:"M32 18.133H18.133V32h-4.266V18.133H0v-4.266h13.867V0h4.266v13.867H32z"})})}function qX(){return p.jsx("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 5",children:p.jsx("path",{d:"M0 0h32v4.2H0z"})})}function GX(){return p.jsx("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 30",children:p.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 WX(){return p.jsx("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 25 32",children:p.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 YX(){return p.jsx("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 25 32",children:p.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 Cc({children:e,className:t,...n}){return p.jsx("button",{type:"button",className:st(["react-flow__controls-button",t]),...n,children:e})}const XX=e=>({isInteractive:e.nodesDraggable||e.nodesConnectable||e.elementsSelectable,minZoomReached:e.transform[2]<=e.minZoom,maxZoomReached:e.transform[2]>=e.maxZoom,ariaLabelConfig:e.ariaLabelConfig});function T2({style:e,showZoom:t=!0,showFitView:n=!0,showInteractive:r=!0,fitViewOptions:i,onZoomIn:s,onZoomOut:o,onFitView:a,onInteractiveChange:l,className:c,children:d,position:u="bottom-left",orientation:f="vertical","aria-label":h}){const g=Be(),{isInteractive:y,minZoomReached:b,maxZoomReached:m,ariaLabelConfig:w}=ke(XX,je),{zoomIn:v,zoomOut:x,fitView:k}=h0(),E=()=>{v(),s==null||s()},N=()=>{x(),o==null||o()},S=()=>{k(i),a==null||a()},L=()=>{g.setState({nodesDraggable:!y,nodesConnectable:!y,elementsSelectable:!y}),l==null||l(!y)},M=f==="horizontal"?"horizontal":"vertical";return p.jsxs(Zd,{className:st(["react-flow__controls",M,c]),position:u,style:e,"data-testid":"rf__controls","aria-label":h??w["controls.ariaLabel"],children:[t&&p.jsxs(p.Fragment,{children:[p.jsx(Cc,{onClick:E,className:"react-flow__controls-zoomin",title:w["controls.zoomIn.ariaLabel"],"aria-label":w["controls.zoomIn.ariaLabel"],disabled:m,children:p.jsx(KX,{})}),p.jsx(Cc,{onClick:N,className:"react-flow__controls-zoomout",title:w["controls.zoomOut.ariaLabel"],"aria-label":w["controls.zoomOut.ariaLabel"],disabled:b,children:p.jsx(qX,{})})]}),n&&p.jsx(Cc,{className:"react-flow__controls-fitview",onClick:S,title:w["controls.fitView.ariaLabel"],"aria-label":w["controls.fitView.ariaLabel"],children:p.jsx(GX,{})}),r&&p.jsx(Cc,{className:"react-flow__controls-interactive",onClick:L,title:w["controls.interactive.ariaLabel"],"aria-label":w["controls.interactive.ariaLabel"],children:y?p.jsx(YX,{}):p.jsx(WX,{})}),d]})}T2.displayName="Controls";const QX=T.memo(T2);function ZX({id:e,x:t,y:n,width:r,height:i,style:s,color:o,strokeColor:a,strokeWidth:l,className:c,borderRadius:d,shapeRendering:u,selected:f,onClick:h}){const{background:g,backgroundColor:y}=s||{},b=o||g||y;return p.jsx("rect",{className:st(["react-flow__minimap-node",{selected:f},c]),x:t,y:n,rx:d,ry:d,width:r,height:i,style:{fill:b,stroke:a,strokeWidth:l},shapeRendering:u,onClick:h?m=>h(m,e):void 0})}const JX=T.memo(ZX),eQ=e=>e.nodes.map(t=>t.id),Ch=e=>e instanceof Function?e:()=>e;function tQ({nodeStrokeColor:e,nodeColor:t,nodeClassName:n="",nodeBorderRadius:r=5,nodeStrokeWidth:i,nodeComponent:s=JX,onClick:o}){const a=ke(eQ,je),l=Ch(t),c=Ch(e),d=Ch(n),u=typeof window>"u"||window.chrome?"crispEdges":"geometricPrecision";return p.jsx(p.Fragment,{children:a.map(f=>p.jsx(rQ,{id:f,nodeColorFunc:l,nodeStrokeColorFunc:c,nodeClassNameFunc:d,nodeBorderRadius:r,nodeStrokeWidth:i,NodeComponent:s,onClick:o,shapeRendering:u},f))})}function nQ({id:e,nodeColorFunc:t,nodeStrokeColorFunc:n,nodeClassNameFunc:r,nodeBorderRadius:i,nodeStrokeWidth:s,shapeRendering:o,NodeComponent:a,onClick:l}){const{node:c,x:d,y:u,width:f,height:h}=ke(g=>{const y=g.nodeLookup.get(e);if(!y)return{node:void 0,x:0,y:0,width:0,height:0};const b=y.internals.userNode,{x:m,y:w}=y.internals.positionAbsolute,{width:v,height:x}=vr(b);return{node:b,x:m,y:w,width:v,height:x}},je);return!c||c.hidden||!EA(c)?null:p.jsx(a,{x:d,y:u,width:f,height:h,style:c.style,selected:!!c.selected,className:r(c),color:t(c),borderRadius:i,strokeColor:n(c),strokeWidth:s,shapeRendering:o,onClick:l,id:c.id})}const rQ=T.memo(nQ);var iQ=T.memo(tQ);const sQ=200,oQ=150,aQ=e=>!e.hidden,lQ=e=>{const t={x:-e.transform[0]/e.transform[2],y:-e.transform[1]/e.transform[2],width:e.width/e.transform[2],height:e.height/e.transform[2]};return{viewBB:t,boundingRect:e.nodeLookup.size>0?vA(Ll(e.nodeLookup,{filter:aQ}),t):t,rfId:e.rfId,panZoom:e.panZoom,translateExtent:e.translateExtent,flowWidth:e.width,flowHeight:e.height,ariaLabelConfig:e.ariaLabelConfig}},cQ="react-flow__minimap-desc";function C2({style:e,className:t,nodeStrokeColor:n,nodeColor:r,nodeClassName:i="",nodeBorderRadius:s=5,nodeStrokeWidth:o,nodeComponent:a,bgColor:l,maskColor:c,maskStrokeColor:d,maskStrokeWidth:u,position:f="bottom-right",onClick:h,onNodeClick:g,pannable:y=!1,zoomable:b=!1,ariaLabel:m,inversePan:w,zoomStep:v=1,offsetScale:x=5}){const k=Be(),E=T.useRef(null),{boundingRect:N,viewBB:S,rfId:L,panZoom:M,translateExtent:j,flowWidth:R,flowHeight:$,ariaLabelConfig:C}=ke(lQ,je),B=(e==null?void 0:e.width)??sQ,I=(e==null?void 0:e.height)??oQ,P=N.width/B,O=N.height/I,D=Math.max(P,O),_=D*B,H=D*I,F=x*D,A=N.x-(_-N.width)/2-F,W=N.y-(H-N.height)/2-F,Y=_+F*2,V=H+F*2,G=`${cQ}-${L}`,K=T.useRef(0),X=T.useRef();K.current=D,T.useEffect(()=>{if(E.current&&M)return X.current=uW({domNode:E.current,panZoom:M,getTransform:()=>k.getState().transform,getViewScale:()=>K.current}),()=>{var ne;(ne=X.current)==null||ne.destroy()}},[M]),T.useEffect(()=>{var ne;(ne=X.current)==null||ne.update({translateExtent:j,width:R,height:$,inversePan:w,pannable:y,zoomStep:v,zoomable:b})},[y,b,w,v,j,R,$]);const te=h?ne=>{var oe;const[he,pe]=((oe=X.current)==null?void 0:oe.pointer(ne))||[0,0];h(ne,{x:he,y:pe})}:void 0,ae=g?T.useCallback((ne,he)=>{const pe=k.getState().nodeLookup.get(he).internals.userNode;g(ne,pe)},[]):void 0,re=m??C["minimap.ariaLabel"];return p.jsx(Zd,{position:f,style:{...e,"--xy-minimap-background-color-props":typeof l=="string"?l:void 0,"--xy-minimap-mask-background-color-props":typeof c=="string"?c:void 0,"--xy-minimap-mask-stroke-color-props":typeof d=="string"?d:void 0,"--xy-minimap-mask-stroke-width-props":typeof u=="number"?u*D:void 0,"--xy-minimap-node-background-color-props":typeof r=="string"?r:void 0,"--xy-minimap-node-stroke-color-props":typeof n=="string"?n:void 0,"--xy-minimap-node-stroke-width-props":typeof o=="number"?o:void 0},className:st(["react-flow__minimap",t]),"data-testid":"rf__minimap",children:p.jsxs("svg",{width:B,height:I,viewBox:`${A} ${W} ${Y} ${V}`,className:"react-flow__minimap-svg",role:"img","aria-labelledby":G,ref:E,onClick:te,children:[re&&p.jsx("title",{id:G,children:re}),p.jsx(iQ,{onClick:ae,nodeColor:r,nodeStrokeColor:n,nodeBorderRadius:s,nodeClassName:i,nodeStrokeWidth:o,nodeComponent:a}),p.jsx("path",{className:"react-flow__minimap-mask",d:`M${A-F},${W-F}h${Y+F*2}v${V+F*2}h${-Y-F*2}z M${S.x},${S.y}h${S.width}v${S.height}h${-S.width}z`,fillRule:"evenodd",pointerEvents:"none"})]})})}C2.displayName="MiniMap";const uQ=T.memo(C2),dQ=e=>t=>e?`${Math.max(1/t.transform[2],1)}`:void 0,fQ={[lo.Line]:"right",[lo.Handle]:"bottom-right"};function hQ({nodeId:e,position:t,variant:n=lo.Handle,className:r,style:i=void 0,children:s,color:o,minWidth:a=10,minHeight:l=10,maxWidth:c=Number.MAX_VALUE,maxHeight:d=Number.MAX_VALUE,keepAspectRatio:u=!1,resizeDirection:f,autoScale:h=!0,shouldResize:g,onResizeStart:y,onResize:b,onResizeEnd:m}){const w=s2(),v=typeof e=="string"?e:w,x=Be(),k=T.useRef(null),E=n===lo.Handle,N=ke(T.useCallback(dQ(E&&h),[E,h]),je),S=T.useRef(null),L=t??fQ[n];T.useEffect(()=>{if(!(!k.current||!v))return S.current||(S.current=kW({domNode:k.current,nodeId:v,getStoreItems:()=>{const{nodeLookup:j,transform:R,snapGrid:$,snapToGrid:C,nodeOrigin:B,domNode:I}=x.getState();return{nodeLookup:j,transform:R,snapGrid:$,snapToGrid:C,nodeOrigin:B,paneDomNode:I}},onChange:(j,R)=>{const{triggerNodeChanges:$,nodeLookup:C,parentLookup:B,nodeOrigin:I}=x.getState(),P=[],O={x:j.x,y:j.y},D=C.get(v);if(D&&D.expandParent&&D.parentId){const _=D.origin??I,H=j.width??D.measured.width??0,F=j.height??D.measured.height??0,A={id:D.id,parentId:D.parentId,rect:{width:H,height:F,...kA({x:j.x??D.position.x,y:j.y??D.position.y},{width:H,height:F},D.parentId,C,_)}},W=f0([A],C,B,I);P.push(...W),O.x=j.x?Math.max(_[0]*H,j.x):void 0,O.y=j.y?Math.max(_[1]*F,j.y):void 0}if(O.x!==void 0&&O.y!==void 0){const _={id:v,type:"position",position:{...O}};P.push(_)}if(j.width!==void 0&&j.height!==void 0){const H={id:v,type:"dimensions",resizing:!0,setAttributes:f?f==="horizontal"?"width":"height":!0,dimensions:{width:j.width,height:j.height}};P.push(H)}for(const _ of R){const H={..._,type:"position"};P.push(H)}$(P)},onEnd:({width:j,height:R})=>{const $={id:v,type:"dimensions",resizing:!1,dimensions:{width:j,height:R}};x.getState().triggerNodeChanges([$])}})),S.current.update({controlPosition:L,boundaries:{minWidth:a,minHeight:l,maxWidth:c,maxHeight:d},keepAspectRatio:u,resizeDirection:f,onResizeStart:y,onResize:b,onResizeEnd:m,shouldResize:g}),()=>{var j;(j=S.current)==null||j.destroy()}},[L,a,l,c,d,u,y,b,m,g]);const M=L.split("-");return p.jsx("div",{className:st(["react-flow__resize-control","nodrag",...M,n,r]),ref:k,style:{...i,scale:N,...o&&{[E?"backgroundColor":"borderColor"]:o}},children:s})}T.memo(hQ);const pQ=[{type:"sequential",label:"顺序",desc:"节点依次执行",Icon:Zj},{type:"parallel",label:"并行",desc:"节点同时执行",Icon:Nj},{type:"loop",label:"循环",desc:"节点循环执行",Icon:oB}];let Mm=0;function Ah(){return Mm+=1,`node_${Mm}`}function Mh(e,t,n){const r=Oi();return{id:e,type:"agentNode",position:t,data:{agent:{...r,name:(n==null?void 0:n.name)??`agent_${e.replace("node_","")}`,...n}}}}function mQ({data:e,selected:t}){const n=e.agent;return p.jsxs("div",{className:`wfb-node ${t?"wfb-node--selected":""}`,children:[p.jsx(uo,{type:"target",position:ue.Left,className:"wfb-handle"}),p.jsx("div",{className:"wfb-node-icon",children:p.jsx(Ai,{className:"icon"})}),p.jsxs("div",{className:"wfb-node-body",children:[p.jsx("div",{className:"wfb-node-name",children:n.name||"未命名节点"}),p.jsx("div",{className:"wfb-node-desc",children:n.instruction?n.instruction.slice(0,48):"点击编辑指令…"})]}),p.jsx(uo,{type:"source",position:ue.Right,className:"wfb-handle"})]})}const gQ={agentNode:mQ},F1={type:"smoothstep",markerEnd:{type:al.ArrowClosed,width:16,height:16}};function yQ({onBack:e,onCreate:t}){const n=T.useRef(null),[r,i]=T.useState(""),[s,o]=T.useState(""),[a,l]=T.useState("sequential"),c=T.useMemo(()=>{Mm=0;const R=Ah();return Mh(R,{x:80,y:120},{name:"agent_1"})},[]),[d,u,f]=BX([c]),[h,g,y]=$X([]),[b,m]=T.useState(c.id),w=d.find(R=>R.id===b)??null,v=T.useCallback(R=>g($=>e2({...R,...F1},$)),[g]),x=T.useCallback(()=>{const R=Ah(),$=d.length*28,C=Mh(R,{x:80+$,y:120+$});u(B=>B.concat(C)),m(R)},[d.length,u]),k=R=>{R.dataTransfer.setData("application/wfb-node","agentNode"),R.dataTransfer.effectAllowed="move"},E=T.useCallback(R=>{R.preventDefault(),R.dataTransfer.dropEffect="move"},[]),N=T.useCallback(R=>{if(R.preventDefault(),R.dataTransfer.getData("application/wfb-node")!=="agentNode"||!n.current)return;const C=n.current.screenToFlowPosition({x:R.clientX,y:R.clientY}),B=Ah(),I=Mh(B,C);u(P=>P.concat(I)),m(B)},[u]),S=T.useCallback(R=>{b&&u($=>$.map(C=>C.id===b?{...C,data:{...C.data,agent:{...C.data.agent,...R}}}:C))},[b,u]),L=T.useCallback(()=>{b&&(u(R=>R.filter($=>$.id!==b)),g(R=>R.filter($=>$.source!==b&&$.target!==b)),m(null))},[b,u,g]),M=T.useCallback(()=>{const R=d.map(C=>C.data.agent),$={...Oi(),name:r.trim()||"workflow_agent",description:s.trim(),instruction:s.trim(),subAgents:R,workflow:{type:a,nodes:d.map(C=>({id:C.id,agent:C.data.agent})),edges:h.map(C=>({from:C.source,to:C.target}))}};t($)},[d,h,r,s,a,t]),j=d.length>0;return p.jsx("div",{className:"wfb",children:p.jsxs("div",{className:"wfb-grid",children:[p.jsxs("aside",{className:"wfb-palette",children:[p.jsx("div",{className:"wfb-section-label",children:"工作流信息"}),p.jsxs("label",{className:"wfb-field",children:[p.jsx("span",{className:"wfb-field-label",children:"名称"}),p.jsx("input",{className:"wfb-input",value:r,onChange:R=>i(R.target.value),placeholder:"my_workflow"})]}),p.jsxs("label",{className:"wfb-field",children:[p.jsx("span",{className:"wfb-field-label",children:"描述"}),p.jsx("textarea",{className:"wfb-input wfb-textarea",value:s,onChange:R=>o(R.target.value),placeholder:"这个工作流做什么…",rows:2})]}),p.jsx("div",{className:"wfb-section-label",children:"执行方式"}),p.jsx("div",{className:"wfb-types",children:pQ.map(({type:R,label:$,desc:C,Icon:B})=>p.jsxs("button",{type:"button",className:`wfb-type ${a===R?"wfb-type--active":""}`,onClick:()=>l(R),children:[p.jsx(B,{className:"icon"}),p.jsxs("span",{className:"wfb-type-text",children:[p.jsx("span",{className:"wfb-type-name",children:$}),p.jsx("span",{className:"wfb-type-desc",children:C})]})]},R))}),p.jsx("div",{className:"wfb-section-label",children:"节点"}),p.jsxs("div",{className:"wfb-palette-item",draggable:!0,onDragStart:k,title:"拖拽到画布,或点击下方按钮添加",children:[p.jsx(qj,{className:"icon wfb-grip"}),p.jsx("span",{className:"wfb-node-icon wfb-node-icon--sm",children:p.jsx(Ai,{className:"icon"})}),p.jsx("span",{className:"wfb-palette-item-text",children:"Agent 节点"})]}),p.jsxs("button",{className:"wfb-add",type:"button",onClick:x,children:[p.jsx(gr,{className:"icon"}),"添加节点"]}),p.jsx("div",{className:"wfb-hint",children:"拖拽节点的圆点连线以表达执行顺序。"})]}),p.jsxs("div",{className:"wfb-canvas",children:[p.jsxs("button",{className:"wfb-create",onClick:M,disabled:!j,type:"button",children:[p.jsx(kd,{className:"icon"}),"创建工作流"]}),p.jsxs(jX,{nodes:d,edges:h,onNodesChange:f,onEdgesChange:y,onConnect:v,onInit:R=>n.current=R,nodeTypes:gQ,defaultEdgeOptions:F1,onDrop:N,onDragOver:E,onNodeClick:(R,$)=>m($.id),onPaneClick:()=>m(null),fitView:!0,fitViewOptions:{padding:.3,maxZoom:1},proOptions:{hideAttribution:!0},children:[p.jsx(HX,{gap:16,size:1,color:"hsl(240 5.9% 88%)"}),p.jsx(QX,{showInteractive:!1}),p.jsx(uQ,{pannable:!0,zoomable:!0,className:"wfb-minimap"})]})]}),p.jsx("aside",{className:"wfb-inspector",children:w?p.jsxs(p.Fragment,{children:[p.jsxs("div",{className:"wfb-inspector-head",children:[p.jsx("div",{className:"wfb-section-label",children:"节点配置"}),p.jsx("button",{className:"wfb-icon-btn",type:"button",onClick:L,title:"删除节点",children:p.jsx(bo,{className:"icon"})})]}),p.jsxs("label",{className:"wfb-field",children:[p.jsx("span",{className:"wfb-field-label",children:"名称"}),p.jsx("input",{className:"wfb-input",value:w.data.agent.name,onChange:R=>S({name:R.target.value}),placeholder:"agent_name"})]}),p.jsxs("label",{className:"wfb-field",children:[p.jsx("span",{className:"wfb-field-label",children:"描述"}),p.jsx("input",{className:"wfb-input",value:w.data.agent.description,onChange:R=>S({description:R.target.value}),placeholder:"这个 agent 做什么…"})]}),p.jsxs("label",{className:"wfb-field",children:[p.jsx("span",{className:"wfb-field-label",children:"指令 (instruction)"}),p.jsx("textarea",{className:"wfb-input wfb-textarea",value:w.data.agent.instruction,onChange:R=>S({instruction:R.target.value}),placeholder:"你是一个…",rows:6})]}),p.jsxs("label",{className:"wfb-field",children:[p.jsx("span",{className:"wfb-field-label",children:"工具 (逗号分隔)"}),p.jsx("input",{className:"wfb-input",value:w.data.agent.tools.join(", "),onChange:R=>S({tools:R.target.value.split(",").map($=>$.trim()).filter(Boolean)}),placeholder:"web_search, calculator"})]}),p.jsxs("div",{className:"wfb-inspector-meta",children:[p.jsx("span",{className:"wfb-meta-key",children:"节点 ID"}),p.jsx("code",{className:"wfb-meta-val",children:w.id})]})]}):p.jsxs("div",{className:"wfb-inspector-empty",children:[p.jsx(Ai,{className:"wfb-empty-icon"}),p.jsx("p",{children:"选择一个节点以编辑其配置"}),p.jsxs("p",{className:"wfb-empty-sub",children:["共 ",d.length," 个节点 · ",h.length," 条连线"]})]})})]})})}function bQ(e){return p.jsx(S2,{children:p.jsx(yQ,{...e})})}const z1=["#5b8def","#56b87f","#e0a32e","#c062d8","#e06c5e","#3fb6c4"];function Ih(e){let t=0;for(let n=0;n>>0;return z1[t%z1.length]}function wQ(e){const t=new Map;e.forEach(c=>t.set(c.span_id,c));const n=new Map,r=[];for(const c of e)c.parent_span_id!=null&&t.has(c.parent_span_id)?(n.get(c.parent_span_id)??n.set(c.parent_span_id,[]).get(c.parent_span_id)).push(c):r.push(c);const i=(c,d)=>c.start_time-d.start_time,s=(c,d)=>({span:c,depth:d,children:(n.get(c.span_id)??[]).sort(i).map(u=>s(u,d+1))}),o=r.sort(i).map(c=>s(c,0)),a=e.length?Math.min(...e.map(c=>c.start_time)):0,l=e.length?Math.max(...e.map(c=>c.end_time)):1;return{rootNodes:o,min:a,total:l-a||1}}function vQ(e,t){const n=[],r=i=>{n.push(i),t.has(i.span.span_id)||i.children.forEach(r)};return e.forEach(r),n}function U1(e){const t=e/1e6;return t>=1e3?`${(t/1e3).toFixed(2)} s`:`${t.toFixed(t<10?2:1)} ms`}const xQ=e=>e.replace(/^(gen_ai|a2ui|adk)\./,"");function V1(e){return Object.entries(e.attributes).filter(([,t])=>t!=null&&typeof t!="object").map(([t,n])=>{const r=String(n);return{key:xQ(t),value:r,long:r.length>80||r.includes(` -`)}}).sort((t,n)=>Number(t.long)-Number(n.long))}function EQ({sessionId:e,onClose:t}){const[n,r]=T.useState(null),[i,s]=T.useState(""),[o,a]=T.useState(new Set),[l,c]=T.useState(null);T.useEffect(()=>{r(null),s(""),wB(e).then(m=>{r(m),c(m.length?m.reduce((w,v)=>w.start_time<=v.start_time?w:v).span_id:null)}).catch(m=>s(String(m)))},[e]);const{rootNodes:d,min:u,total:f}=T.useMemo(()=>wQ(n??[]),[n]),h=T.useMemo(()=>vQ(d,o),[d,o]),g=(n==null?void 0:n.find(m=>m.span_id===l))??null,y=f/1e6,b=m=>a(w=>{const v=new Set(w);return v.has(m)?v.delete(m):v.add(m),v});return p.jsxs(p.Fragment,{children:[p.jsx("div",{className:"drawer-scrim",onClick:t}),p.jsxs("aside",{className:"drawer drawer--trace",children:[p.jsxs("header",{className:"drawer-head",children:[p.jsxs("div",{children:[p.jsx("div",{className:"drawer-title",children:"Tracing 观测"}),p.jsx("div",{className:"drawer-sub",children:n?`${n.length} spans · ${y.toFixed(1)} ms`:"加载中"})]}),p.jsx("button",{className:"drawer-close",onClick:t,"aria-label":"关闭",children:p.jsx(Sd,{className:"icon"})})]}),n==null&&!i&&p.jsxs("div",{className:"drawer-loading",children:[p.jsx(Wn,{className:"icon spin"})," 加载 trace…"]}),i&&p.jsx("div",{className:"error",children:i}),n&&n.length===0&&p.jsx("div",{className:"drawer-empty",children:"该会话暂无 trace(可能尚未产生调用)。"}),h.length>0&&p.jsxs("div",{className:"trace-split",children:[p.jsx("div",{className:"trace-tree scroll",children:h.map(m=>{const w=m.span,v=(w.start_time-u)/f*100,x=Math.max((w.end_time-w.start_time)/f*100,.6),k=m.children.length>0;return p.jsxs("button",{className:`trace-row ${l===w.span_id?"active":""}`,onClick:()=>c(w.span_id),children:[p.jsxs("span",{className:"trace-label",style:{paddingLeft:m.depth*14},children:[p.jsx("span",{className:`trace-caret ${k?"":"hidden"} ${o.has(w.span_id)?"":"open"}`,onClick:E=>{E.stopPropagation(),k&&b(w.span_id)},children:p.jsx(zi,{className:"chev"})}),p.jsx("span",{className:"trace-dot",style:{background:Ih(w.name)}}),p.jsx("span",{className:"trace-name",title:w.name,children:w.name})]}),p.jsx("span",{className:"trace-dur",children:U1(w.end_time-w.start_time)}),p.jsx("span",{className:"trace-track",children:p.jsx("span",{className:"trace-bar",style:{left:`${v}%`,width:`${x}%`,background:Ih(w.name)}})})]},w.span_id)})}),p.jsx("div",{className:"trace-detail scroll",children:g?p.jsxs(p.Fragment,{children:[p.jsx("div",{className:"td-title",children:g.name}),p.jsxs("div",{className:"td-dur",children:[p.jsx("span",{className:"td-dot",style:{background:Ih(g.name)}}),U1(g.end_time-g.start_time)]}),p.jsx("div",{className:"td-section",children:"Properties"}),p.jsx("div",{className:"td-props",children:V1(g).filter(m=>!m.long).map(m=>p.jsxs("div",{className:"td-prop",children:[p.jsx("span",{className:"td-key",children:m.key}),p.jsx("span",{className:"td-val",children:m.value})]},m.key))}),V1(g).filter(m=>m.long).map(m=>p.jsxs("div",{className:"td-block",children:[p.jsx("div",{className:"td-section",children:m.key}),p.jsx("pre",{className:"td-pre",children:m.value})]},m.key))]}):p.jsx("div",{className:"drawer-empty",children:"选择左侧的一个 span 查看详情"})})]})]})]})}function kQ(e){return e.toLowerCase()==="github"?p.jsx(Hj,{className:"icon"}):p.jsx(Jj,{className:"icon"})}function _Q({onUsername:e}){const[t,n]=T.useState(null),[r,i]=T.useState("");T.useEffect(()=>{YB().then(n)},[]);const s=KB.test(r),o=()=>{s&&e(r)};return p.jsxs("div",{className:"login",children:[p.jsx("header",{className:"login-top",children:p.jsx("span",{className:"login-brand",children:"VeADK Web"})}),p.jsx("main",{className:"login-main",children:p.jsxs("div",{className:"login-card",children:[p.jsxs("h1",{className:"login-title",children:["VeADK 提供",p.jsx("br",{}),"企业级 Agent 解决方案"]}),t===null?null:t.length>0?p.jsxs(p.Fragment,{children:[p.jsx("p",{className:"login-sub",children:"登录以继续使用 VeADK Web"}),p.jsx("div",{className:"login-providers",children:t.map(a=>p.jsxs("button",{className:"login-btn",onClick:()=>XB(a.loginUrl),children:[kQ(a.id),p.jsxs("span",{children:["使用 ",a.label," 登录"]})]},a.id))})]}):p.jsxs(p.Fragment,{children:[p.jsx("p",{className:"login-sub",children:"输入一个用户名即可开始"}),p.jsxs("form",{className:"login-name",onSubmit:a=>{a.preventDefault(),o()},children:[p.jsx("input",{className:"login-name-input",value:r,onChange:a=>i(a.target.value),placeholder:"用户名(字母 + 数字,最多 16 位)",maxLength:16,autoFocus:!0}),p.jsx("button",{type:"submit",className:"login-name-go",disabled:!s,"aria-label":"进入",children:p.jsx($S,{className:"icon"})})]}),r&&!s&&p.jsx("p",{className:"login-hint",children:"只能包含大小写字母和数字,最多 16 位。"})]}),p.jsx("p",{className:"login-legal",children:"继续即表示你已阅读并同意服务条款与隐私政策"})]})}),p.jsx("footer",{className:"login-footer",children:"© 2026 VeADK. All rights reserved."})]})}function SQ({node:e,ctx:t}){const n=e.variant??"default";return p.jsx("button",{type:"button",className:`a2ui-button a2ui-button--${n}`,onClick:()=>t.dispatchAction(e.action,e),children:t.render(e.child)})}Vi("Button",SQ);function NQ({node:e,ctx:t}){return p.jsx("div",{className:"a2ui-card",children:t.render(e.child)})}Vi("Card",NQ);const TQ={start:"flex-start",center:"center",end:"flex-end",spaceBetween:"space-between",spaceAround:"space-around",spaceEvenly:"space-evenly",stretch:"stretch"},CQ={start:"flex-start",center:"center",end:"flex-end",stretch:"stretch"};function A2(e){return TQ[e]??"flex-start"}function M2(e){return CQ[e]??"stretch"}function AQ({node:e,ctx:t}){const n=e.children??[];return p.jsx("div",{className:"a2ui-column",style:{display:"flex",flexDirection:"column",justifyContent:A2(e.justify),alignItems:M2(e.align)},children:n.map(r=>t.render(r))})}Vi("Column",AQ);function MQ({node:e}){const t=e.axis==="vertical";return p.jsx("div",{className:`a2ui-divider ${t?"a2ui-divider--v":"a2ui-divider--h"}`})}Vi("Divider",MQ);const IQ={send:"✈️",check:"✅",close:"✖️",star:"⭐",favorite:"❤️",info:"ℹ️",help:"❓",error:"⛔",calendarToday:"📅",event:"📅",schedule:"🕒",locationOn:"📍",accountCircle:"👤",mail:"✉️",call:"📞",home:"🏠",settings:"⚙️",search:"🔍"};function OQ({node:e}){const t=e.name??"";return p.jsx("span",{className:"a2ui-icon",title:t,"aria-label":t,children:IQ[t]??"•"})}Vi("Icon",OQ);function RQ({node:e,ctx:t}){const n=e.children??[];return p.jsx("div",{className:"a2ui-row",style:{display:"flex",flexDirection:"row",justifyContent:A2(e.justify),alignItems:M2(e.align??"center")},children:n.map(r=>t.render(r))})}Vi("Row",RQ);const LQ=new Set(["h1","h2","h3","h4","h5"]);function PQ({node:e,ctx:t}){const n=e.variant??"body",r=t.resolveString(e.text),i=LQ.has(n)?n:"p";return p.jsx(i,{className:`a2ui-text a2ui-text--${n}`,children:r})}Vi("Text",PQ);const DQ="创建 Agent",jQ={intelligent:"智能模式",custom:"自定义",template:"从模板新建",workflow:"工作流"},os={app:"veadk.appName",view:"veadk.view",session:"veadk.sessionId"};function H1(){const e=typeof localStorage<"u"?localStorage.getItem(os.view):null;return e==="menu"||e==="intelligent"||e==="custom"||e==="template"||e==="workflow"?e:null}function BQ({className:e}){return p.jsxs("svg",{className:e,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"1.7",strokeLinecap:"round",strokeLinejoin:"round","aria-hidden":!0,children:[p.jsx("rect",{x:"5",y:"7.5",width:"14",height:"10.5",rx:"3.2"}),p.jsx("circle",{cx:"9.6",cy:"12.6",r:"1.25",fill:"currentColor",stroke:"none"}),p.jsx("circle",{cx:"14.4",cy:"12.6",r:"1.25",fill:"currentColor",stroke:"none"}),p.jsx("path",{d:"M12 7.5V4.4"}),p.jsx("circle",{cx:"12",cy:"3.4",r:"1.15",fill:"currentColor",stroke:"none"}),p.jsx("path",{d:"M5 13.2H2.8M19 13.2h2.2"})]})}function $Q({className:e}){return p.jsxs("svg",{className:e,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"1.7",strokeLinecap:"round",strokeLinejoin:"round","aria-hidden":!0,children:[p.jsx("ellipse",{cx:"12",cy:"12",rx:"6.6",ry:"8.2"}),p.jsx("path",{d:"M12 8.2l1.05 2.75 2.75 1.05-2.75 1.05L12 15.8l-1.05-2.75L8.2 12l2.75-1.05z",fill:"currentColor",stroke:"none"})]})}function FQ(){return p.jsxs("svg",{viewBox:"0 0 24 24",width:"14",height:"14",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round","aria-hidden":!0,children:[p.jsx("rect",{x:"3",y:"4",width:"14",height:"3.2",rx:"1.2",fill:"currentColor",stroke:"none"}),p.jsx("rect",{x:"6",y:"10.4",width:"13",height:"3.2",rx:"1.2",fill:"currentColor",stroke:"none",opacity:"0.7"}),p.jsx("rect",{x:"9",y:"16.8",width:"9",height:"3.2",rx:"1.2",fill:"currentColor",stroke:"none",opacity:"0.45"})]})}function I2(e){return e?new Date(e*1e3).toLocaleString("zh-CN",{timeZone:"Asia/Shanghai",hour12:!1,month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit",second:"2-digit"}):""}function zQ(e){if(!e)return"";const t=[];return e.ts&&t.push(I2(e.ts)),e.tokens!=null&&t.push(`${e.tokens.toLocaleString()} tokens`),t.join(" · ")}function UQ(e){return e.blocks.map(t=>t.kind==="text"?t.text:"").join("").trim()}function K1({text:e}){const[t,n]=T.useState(!1);return p.jsx("button",{className:"icon-btn",title:t?"已复制":"复制",disabled:!e,onClick:async()=>{if(e)try{await navigator.clipboard.writeText(e),n(!0),setTimeout(()=>n(!1),1500)}catch{}},children:t?p.jsx(ry,{className:"icon"}):p.jsx(Pj,{className:"icon"})})}const q1=["今天想做点什么?","有什么可以帮你的?","需要我帮你查点什么吗?","有问题尽管问我","嗨,我们开始吧","开始一段新对话吧"],G1=()=>q1[Math.floor(Math.random()*q1.length)],VQ=20*1024*1024;function HQ(e){return new Promise((t,n)=>{const r=new FileReader;r.onload=()=>{const i=String(r.result),s=i.indexOf(",");t(s>=0?i.slice(s+1):i)},r.onerror=()=>n(r.error),r.readAsDataURL(e)})}function KQ(){const[e,t]=T.useState([]),[n,r]=T.useState(""),[i,s]=T.useState([]),[o,a]=T.useState(""),[l,c]=T.useState([]),[d,u]=T.useState(""),[f,h]=T.useState([]),[g,y]=T.useState(!1),[b,m]=T.useState(""),[w,v]=T.useState(!1),[x,k]=T.useState(G1),[E,N]=T.useState(null),[S,L]=T.useState(""),[M,j]=T.useState(),[R,$]=T.useState(!1),[C,B]=T.useState(!1),[I,P]=T.useState(H1),[O,D]=T.useState(!1),[_,H]=T.useState(!1),[F,A]=T.useState(!1),[W,Y]=T.useState(null),[V,G]=T.useState(!1),K=T.useRef(null),[X,te]=T.useState(()=>{const z=Hp();return WS(z),z}),[ae,re]=T.useState(!1),ne=T.useRef(!1);function he(z){console.log("create agent draft:",z),P(null),me()}const{ref:pe,onScroll:oe}=XS(l);T.useEffect(()=>{ZB().then(z=>{L(z.userId),j(z.info),$(!!z.local),N(z.status)})},[]);function ve(z){GB(z),L(z),j({name:z}),$(!0),N("authenticated")}function ie(){R?(WB(),L(""),j(void 0),N("unauthenticated")):QB()}T.useEffect(()=>{E!=="unauthenticated"&&gB().then(z=>{t(z);const q=localStorage.getItem(os.app),Q=X.flatMap(Te=>Te.apps.map(Pe=>Nd(Te.id,Pe))),le=q&&(z.includes(q)||Q.includes(q))?q:z[0];le&&r(le)}).catch(z=>m(String(z)))},[E]),T.useEffect(()=>{n&&localStorage.setItem(os.app,n)},[n]),T.useEffect(()=>{localStorage.setItem(os.view,I??"chat")},[I]),T.useEffect(()=>{localStorage.setItem(os.session,o)},[o]),T.useEffect(()=>{!n||!S||(async()=>{const z=await xe(n);if(!ne.current){ne.current=!0;const q=localStorage.getItem(os.session)||"";if(H1()===null&&q&&z.some(Q=>Q.id===q)){qe(q);return}}me()})()},[n,S]),T.useEffect(()=>{const z=K.current;z&&z.app===n&&(K.current=null,qe(z.sid))},[n]);function tt(z,q){G(!1),z===n?qe(q):(K.current={app:z,sid:q},r(z))}async function xe(z){try{const q=await VS(z,S),Q=await Promise.all(q.map(ee=>{var le;return(le=ee.events)!=null&&le.length?Promise.resolve(ee):Up(z,S,ee.id)}));return s(Q),Q}catch(q){return m(String(q)),[]}}function me(){m(""),k(G1()),a(""),c([])}async function Dt(z){try{await bB(n,S,z),z===o&&me(),await xe(n)}catch(q){m(String(q))}}async function qe(z){if(z!==o){m(""),B(!0),a(z);try{const q=await Up(n,S,z);c(SB(q.events??[]))}catch(q){m(String(q))}finally{B(!1)}}}async function Nt(z){const q=[];for(const Q of Array.from(z)){if(Q.size>VQ){m(`文件过大(>20MB):${Q.name}`);continue}const ee=await HQ(Q);q.push({mimeType:Q.type||"application/octet-stream",data:ee,name:Q.name})}q.length&&h(Q=>[...Q,...q])}async function nt(z,q=[]){if(!z.trim()&&q.length===0||g||!n||!S)return;m(""),y(!0);let Q=o;if(!Q)try{Q=await zp(n,S),a(Q);const le=Date.now()/1e3,Te={id:Q,lastUpdateTime:le,events:[{author:"user",timestamp:le,content:{role:"user",parts:[{text:z}]}}]};s(Pe=>[Te,...Pe.filter(Ye=>Ye.id!==Q)])}catch(le){m(String(le)),y(!1);return}const ee=[];q.length&&ee.push({kind:"attachment",files:q.map(le=>({mimeType:le.mimeType,data:le.data,name:le.name}))}),z.trim()&&ee.push({kind:"text",text:z}),c(le=>[...le,{role:"user",blocks:ee,meta:{ts:Date.now()/1e3}},{role:"assistant",blocks:[]}]);try{let le=Ps(),Te=0,Pe=Date.now()/1e3;for await(const Ye of Vp({appName:n,userId:S,sessionId:Q,text:z,attachments:q})){const Tt=Ye.error??Ye.errorMessage??Ye.error_message;if(typeof Tt=="string"&&Tt){m(Tt);break}le=Lu(le,Ye);const $e=Ye.usageMetadata??Ye.usage_metadata;$e!=null&&$e.totalTokenCount&&(Te=$e.totalTokenCount),Ye.timestamp&&(Pe=Ye.timestamp);const Fe=le.blocks,gt={tokens:Te||void 0,ts:Pe};c(Gi=>{const ei=Gi.slice(),Wi=ei[ei.length-1];return(Wi==null?void 0:Wi.role)==="assistant"&&(ei[ei.length-1]={...Wi,blocks:Fe,meta:gt}),ei})}xe(n)}catch(le){m(String(le))}finally{y(!1)}}function U(z,q){var le,Te;const Q=((le=z==null?void 0:z.event)==null?void 0:le.name)??q.id,ee=((Te=z==null?void 0:z.event)==null?void 0:Te.context)??{};nt(`[ui-action] ${Q}: ${JSON.stringify(ee)}`)}return E===null?p.jsx("div",{className:"boot"}):E==="unauthenticated"?p.jsx(_Q,{onUsername:ve}):p.jsxs("div",{className:"layout",children:[p.jsx(HB,{sessions:i,currentSessionId:o,onNewChat:()=>{P(null),D(!1),H(!1),A(!1),G(!1),me()},onSearch:()=>{P(null),D(!1),H(!1),A(!1),G(!0)},onQuickCreate:()=>{a(""),c([]),D(!1),H(!1),G(!1),P(null),Y(null),A(!0)},onSkillCenter:()=>{P(null),H(!1),A(!1),G(!1),D(!0)},onAddAgent:()=>{P(null),D(!1),G(!1),a(""),c([]),A(!1),H(!0)},onPickSession:z=>{P(null),D(!1),H(!1),A(!1),G(!1),qe(z)},onDeleteSession:Dt}),(()=>{const z=p.jsx(F9,{value:d,onChange:u,onSubmit:()=>{const ee=d,le=f;u(""),h([]),nt(ee,le)},disabled:!n||!S,busy:g,attachments:f,onAddFiles:Nt,onRemoveAttachment:ee=>h(le=>le.filter((Te,Pe)=>Pe!==ee))}),q=o$(e,X),Q=ee=>{var le;return((le=q.find(Te=>Te.id===ee))==null?void 0:le.label)??ee};return p.jsxs("main",{className:"main",children:[p.jsx(e$,{apps:q.map(ee=>ee.id),appName:n,onAppChange:r,agentLabel:Q,userInfo:M,onLogout:ie,title:F?"添加 Agent":_?"添加 AgentKit 智能体":O?"技能中心":void 0,crumbs:V||_||O||F||!I?void 0:I==="menu"?[{label:DQ,onClick:()=>{P(null),Y(null),A(!0)}},{label:"从 0 快速创建"}]:[{label:"从 0 快速创建",onClick:()=>re(!0)},{label:jQ[I]}]}),b&&p.jsx("div",{className:"error",children:b}),C&&p.jsxs("div",{className:"session-loading",children:[p.jsx(Wn,{className:"icon spin"})," 加载会话…"]}),F?p.jsx(qT,{title:"您想以哪种方式添加 Agent 来运行?",sub:"选择最适合你的方式,下一步即可开始",cards:[{key:"agentkit",icon:BQ,title:"添加 AgentKit 智能体",desc:"连接已部署在火山引擎 AgentKit 上的远程智能体。",onClick:()=>{A(!1),H(!0)}},{key:"scratch",icon:$Q,title:"从 0 快速创建",desc:"用智能 / 自定义 / 模板 / 工作流的方式从零创建一个 Agent。",onClick:()=>{A(!1),Y(null),P("menu")}}]}):V?p.jsx(FB,{userId:S,appId:n,agentLabel:Q,onOpenSession:tt}):_?p.jsx(a$,{onAdded:ee=>{te(Hp()),H(!1),r(ee)},onCancel:()=>H(!1)}):O?p.jsx(MB,{}):I==="menu"?p.jsx(wH,{onSelect:ee=>{Y(null),P(ee)},onImport:ee=>{Y(ee),P("custom")}}):I==="intelligent"?p.jsx(AH,{userId:S,onBack:()=>P("menu"),onCreate:he}):I==="custom"?p.jsx(zH,{initialDraft:W??void 0,onBack:()=>P("menu"),onCreate:he}):I==="template"?p.jsx(HH,{onBack:()=>P("menu"),onCreate:he}):I==="workflow"?p.jsx(bQ,{onBack:()=>P("menu"),onCreate:he}):l.length===0?p.jsxs("div",{className:"welcome",children:[p.jsx("h1",{className:"welcome-title",children:x}),z]}):p.jsxs(p.Fragment,{children:[p.jsx("div",{className:"transcript",ref:pe,onScroll:oe,children:l.map((ee,le)=>{var Ye;const Te=le===l.length-1;if(ee.role==="user"){const Tt=ee.blocks.map(Fe=>Fe.kind==="text"?Fe.text:"").join(""),$e=ee.blocks.flatMap(Fe=>Fe.kind==="attachment"?Fe.files:[]);return p.jsxs(mt.div,{className:"turn turn--user",initial:{opacity:0,y:8},animate:{opacity:1,y:0},transition:{duration:.2,ease:"easeOut"},children:[$e.length>0&&p.jsx("div",{className:"msg-attachments",children:$e.map((Fe,gt)=>{var Gi;return(Gi=Fe.mimeType)!=null&&Gi.startsWith("image/")&&Fe.data?p.jsx("img",{className:"attachment-thumb",src:`data:${Fe.mimeType};base64,${Fe.data}`,alt:Fe.name??"image"},gt):p.jsxs("div",{className:"attachment-file",children:[p.jsx(iy,{className:"icon"}),p.jsx("span",{className:"attachment-file-name",children:Fe.name??"文件"})]},gt)})}),Tt&&p.jsx("div",{className:"bubble",children:p.jsx(Ry,{text:Tt})}),p.jsxs("div",{className:"turn-actions turn-actions--right",children:[((Ye=ee.meta)==null?void 0:Ye.ts)&&p.jsx("span",{className:"meta-text",children:I2(ee.meta.ts)}),p.jsx(K1,{text:Tt})]})]},le)}const Pe=ee.blocks.length===0;return p.jsx(mt.div,{className:"turn turn--assistant",initial:{opacity:0,y:8},animate:{opacity:1,y:0},transition:{duration:.2,ease:"easeOut"},children:Pe?Te&&g?p.jsx(j9,{}):null:p.jsxs(p.Fragment,{children:[p.jsx($9,{blocks:ee.blocks,onAction:U}),p.jsxs("div",{className:"turn-meta",children:[p.jsxs("div",{className:"turn-actions",children:[p.jsx("button",{className:"icon-btn",title:"Tracing 火焰图",onClick:()=>v(!0),children:p.jsx(FQ,{})}),p.jsx(K1,{text:UQ(ee)})]}),ee.meta&&p.jsx("span",{className:"meta-text",children:zQ(ee.meta)})]})]})},le)})}),z]})]})})(),w&&o&&p.jsx(EQ,{sessionId:o,onClose:()=>v(!1)}),ae&&p.jsx("div",{className:"confirm-scrim",onClick:()=>re(!1),children:p.jsxs("div",{className:"confirm-box",onClick:z=>z.stopPropagation(),children:[p.jsx("div",{className:"confirm-title",children:"返回创建首页?"}),p.jsx("div",{className:"confirm-text",children:"返回后当前填写的内容将会丢失,确定要返回吗?"}),p.jsxs("div",{className:"confirm-actions",children:[p.jsx("button",{className:"confirm-btn",onClick:()=>re(!1),children:"取消"}),p.jsx("button",{className:"confirm-btn confirm-btn--danger",onClick:()=>{Y(null),P("menu"),re(!1)},children:"确定返回"})]})]})})]})}Oh.createRoot(document.getElementById("root")).render(p.jsx(iE.StrictMode,{children:p.jsx(oR,{reducedMotion:"user",children:p.jsx(KQ,{})})})); +`)}}).sort((t,n)=>Number(t.long)-Number(n.long))}function EQ({sessionId:e,onClose:t}){const[n,r]=T.useState(null),[i,s]=T.useState(""),[o,a]=T.useState(new Set),[l,c]=T.useState(null);T.useEffect(()=>{r(null),s(""),wB(e).then(m=>{r(m),c(m.length?m.reduce((w,v)=>w.start_time<=v.start_time?w:v).span_id:null)}).catch(m=>s(String(m)))},[e]);const{rootNodes:d,min:u,total:f}=T.useMemo(()=>wQ(n??[]),[n]),h=T.useMemo(()=>vQ(d,o),[d,o]),g=(n==null?void 0:n.find(m=>m.span_id===l))??null,y=f/1e6,b=m=>a(w=>{const v=new Set(w);return v.has(m)?v.delete(m):v.add(m),v});return p.jsxs(p.Fragment,{children:[p.jsx("div",{className:"drawer-scrim",onClick:t}),p.jsxs("aside",{className:"drawer drawer--trace",children:[p.jsxs("header",{className:"drawer-head",children:[p.jsxs("div",{children:[p.jsx("div",{className:"drawer-title",children:"Tracing 观测"}),p.jsx("div",{className:"drawer-sub",children:n?`${n.length} spans · ${y.toFixed(1)} ms`:"加载中"})]}),p.jsx("button",{className:"drawer-close",onClick:t,"aria-label":"关闭",children:p.jsx(Sd,{className:"icon"})})]}),n==null&&!i&&p.jsxs("div",{className:"drawer-loading",children:[p.jsx(Wn,{className:"icon spin"})," 加载 trace…"]}),i&&p.jsx("div",{className:"error",children:i}),n&&n.length===0&&p.jsx("div",{className:"drawer-empty",children:"该会话暂无 trace(可能尚未产生调用)。"}),h.length>0&&p.jsxs("div",{className:"trace-split",children:[p.jsx("div",{className:"trace-tree scroll",children:h.map(m=>{const w=m.span,v=(w.start_time-u)/f*100,x=Math.max((w.end_time-w.start_time)/f*100,.6),k=m.children.length>0;return p.jsxs("button",{className:`trace-row ${l===w.span_id?"active":""}`,onClick:()=>c(w.span_id),children:[p.jsxs("span",{className:"trace-label",style:{paddingLeft:m.depth*14},children:[p.jsx("span",{className:`trace-caret ${k?"":"hidden"} ${o.has(w.span_id)?"":"open"}`,onClick:E=>{E.stopPropagation(),k&&b(w.span_id)},children:p.jsx(zi,{className:"chev"})}),p.jsx("span",{className:"trace-dot",style:{background:Ih(w.name)}}),p.jsx("span",{className:"trace-name",title:w.name,children:w.name})]}),p.jsx("span",{className:"trace-dur",children:U1(w.end_time-w.start_time)}),p.jsx("span",{className:"trace-track",children:p.jsx("span",{className:"trace-bar",style:{left:`${v}%`,width:`${x}%`,background:Ih(w.name)}})})]},w.span_id)})}),p.jsx("div",{className:"trace-detail scroll",children:g?p.jsxs(p.Fragment,{children:[p.jsx("div",{className:"td-title",children:g.name}),p.jsxs("div",{className:"td-dur",children:[p.jsx("span",{className:"td-dot",style:{background:Ih(g.name)}}),U1(g.end_time-g.start_time)]}),p.jsx("div",{className:"td-section",children:"Properties"}),p.jsx("div",{className:"td-props",children:V1(g).filter(m=>!m.long).map(m=>p.jsxs("div",{className:"td-prop",children:[p.jsx("span",{className:"td-key",children:m.key}),p.jsx("span",{className:"td-val",children:m.value})]},m.key))}),V1(g).filter(m=>m.long).map(m=>p.jsxs("div",{className:"td-block",children:[p.jsx("div",{className:"td-section",children:m.key}),p.jsx("pre",{className:"td-pre",children:m.value})]},m.key))]}):p.jsx("div",{className:"drawer-empty",children:"选择左侧的一个 span 查看详情"})})]})]})]})}function kQ(e){return e.toLowerCase()==="github"?p.jsx(Hj,{className:"icon"}):p.jsx(Jj,{className:"icon"})}function _Q({onUsername:e}){const[t,n]=T.useState(null),[r,i]=T.useState("");T.useEffect(()=>{YB().then(n)},[]);const s=KB.test(r),o=()=>{s&&e(r)};return p.jsxs("div",{className:"login",children:[p.jsx("header",{className:"login-top",children:p.jsx("span",{className:"login-brand",children:"VeADK Web"})}),p.jsx("main",{className:"login-main",children:p.jsxs("div",{className:"login-card",children:[p.jsxs("h1",{className:"login-title",children:["VeADK 提供",p.jsx("br",{}),"企业级 Agent 解决方案"]}),t===null?null:t.length>0?p.jsxs(p.Fragment,{children:[p.jsx("p",{className:"login-sub",children:"登录以继续使用 VeADK Web"}),p.jsx("div",{className:"login-providers",children:t.map(a=>p.jsxs("button",{className:"login-btn",onClick:()=>XB(a.loginUrl),children:[kQ(a.id),p.jsxs("span",{children:["使用 ",a.label," 登录"]})]},a.id))})]}):p.jsxs(p.Fragment,{children:[p.jsx("p",{className:"login-sub",children:"输入一个用户名即可开始"}),p.jsxs("form",{className:"login-name",onSubmit:a=>{a.preventDefault(),o()},children:[p.jsx("input",{className:"login-name-input",value:r,onChange:a=>i(a.target.value),placeholder:"用户名(字母 + 数字,最多 16 位)",maxLength:16,autoFocus:!0}),p.jsx("button",{type:"submit",className:"login-name-go",disabled:!s,"aria-label":"进入",children:p.jsx($S,{className:"icon"})})]}),r&&!s&&p.jsx("p",{className:"login-hint",children:"只能包含大小写字母和数字,最多 16 位。"})]}),p.jsx("p",{className:"login-legal",children:"继续即表示你已阅读并同意服务条款与隐私政策"})]})}),p.jsx("footer",{className:"login-footer",children:"© 2026 VeADK. All rights reserved."})]})}function SQ({node:e,ctx:t}){const n=e.variant??"default";return p.jsx("button",{type:"button",className:`a2ui-button a2ui-button--${n}`,onClick:()=>t.dispatchAction(e.action,e),children:t.render(e.child)})}Vi("Button",SQ);function NQ({node:e,ctx:t}){return p.jsx("div",{className:"a2ui-card",children:t.render(e.child)})}Vi("Card",NQ);const TQ={start:"flex-start",center:"center",end:"flex-end",spaceBetween:"space-between",spaceAround:"space-around",spaceEvenly:"space-evenly",stretch:"stretch"},CQ={start:"flex-start",center:"center",end:"flex-end",stretch:"stretch"};function A2(e){return TQ[e]??"flex-start"}function M2(e){return CQ[e]??"stretch"}function AQ({node:e,ctx:t}){const n=e.children??[];return p.jsx("div",{className:"a2ui-column",style:{display:"flex",flexDirection:"column",justifyContent:A2(e.justify),alignItems:M2(e.align)},children:n.map(r=>t.render(r))})}Vi("Column",AQ);function MQ({node:e}){const t=e.axis==="vertical";return p.jsx("div",{className:`a2ui-divider ${t?"a2ui-divider--v":"a2ui-divider--h"}`})}Vi("Divider",MQ);const IQ={send:"✈️",check:"✅",close:"✖️",star:"⭐",favorite:"❤️",info:"ℹ️",help:"❓",error:"⛔",calendarToday:"📅",event:"📅",schedule:"🕒",locationOn:"📍",accountCircle:"👤",mail:"✉️",call:"📞",home:"🏠",settings:"⚙️",search:"🔍"};function OQ({node:e}){const t=e.name??"";return p.jsx("span",{className:"a2ui-icon",title:t,"aria-label":t,children:IQ[t]??"•"})}Vi("Icon",OQ);function RQ({node:e,ctx:t}){const n=e.children??[];return p.jsx("div",{className:"a2ui-row",style:{display:"flex",flexDirection:"row",justifyContent:A2(e.justify),alignItems:M2(e.align??"center")},children:n.map(r=>t.render(r))})}Vi("Row",RQ);const LQ=new Set(["h1","h2","h3","h4","h5"]);function PQ({node:e,ctx:t}){const n=e.variant??"body",r=t.resolveString(e.text),i=LQ.has(n)?n:"p";return p.jsx(i,{className:`a2ui-text a2ui-text--${n}`,children:r})}Vi("Text",PQ);const DQ="创建 Agent",jQ={intelligent:"智能模式",custom:"自定义",template:"从模板新建",workflow:"工作流"},os={app:"veadk.appName",view:"veadk.view",session:"veadk.sessionId"};function H1(){const e=typeof localStorage<"u"?localStorage.getItem(os.view):null;return e==="menu"||e==="intelligent"||e==="custom"||e==="template"||e==="workflow"?e:null}function BQ({className:e}){return p.jsxs("svg",{className:e,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"1.7",strokeLinecap:"round",strokeLinejoin:"round","aria-hidden":!0,children:[p.jsx("rect",{x:"5",y:"7.5",width:"14",height:"10.5",rx:"3.2"}),p.jsx("circle",{cx:"9.6",cy:"12.6",r:"1.25",fill:"currentColor",stroke:"none"}),p.jsx("circle",{cx:"14.4",cy:"12.6",r:"1.25",fill:"currentColor",stroke:"none"}),p.jsx("path",{d:"M12 7.5V4.4"}),p.jsx("circle",{cx:"12",cy:"3.4",r:"1.15",fill:"currentColor",stroke:"none"}),p.jsx("path",{d:"M5 13.2H2.8M19 13.2h2.2"})]})}function $Q({className:e}){return p.jsxs("svg",{className:e,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"1.7",strokeLinecap:"round",strokeLinejoin:"round","aria-hidden":!0,children:[p.jsx("ellipse",{cx:"12",cy:"12",rx:"6.6",ry:"8.2"}),p.jsx("path",{d:"M12 8.2l1.05 2.75 2.75 1.05-2.75 1.05L12 15.8l-1.05-2.75L8.2 12l2.75-1.05z",fill:"currentColor",stroke:"none"})]})}function FQ(){return p.jsxs("svg",{viewBox:"0 0 24 24",width:"14",height:"14",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round","aria-hidden":!0,children:[p.jsx("rect",{x:"3",y:"4",width:"14",height:"3.2",rx:"1.2",fill:"currentColor",stroke:"none"}),p.jsx("rect",{x:"6",y:"10.4",width:"13",height:"3.2",rx:"1.2",fill:"currentColor",stroke:"none",opacity:"0.7"}),p.jsx("rect",{x:"9",y:"16.8",width:"9",height:"3.2",rx:"1.2",fill:"currentColor",stroke:"none",opacity:"0.45"})]})}function I2(e){return e?new Date(e*1e3).toLocaleString("zh-CN",{timeZone:"Asia/Shanghai",hour12:!1,month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit",second:"2-digit"}):""}function zQ(e){if(!e)return"";const t=[];return e.ts&&t.push(I2(e.ts)),e.tokens!=null&&t.push(`${e.tokens.toLocaleString()} tokens`),t.join(" · ")}function UQ(e){return e.blocks.map(t=>t.kind==="text"?t.text:"").join("").trim()}function K1({text:e}){const[t,n]=T.useState(!1);return p.jsx("button",{className:"icon-btn",title:t?"已复制":"复制",disabled:!e,onClick:async()=>{if(e)try{await navigator.clipboard.writeText(e),n(!0),setTimeout(()=>n(!1),1500)}catch{}},children:t?p.jsx(ry,{className:"icon"}):p.jsx(Pj,{className:"icon"})})}const q1=["今天想做点什么?","有什么可以帮你的?","需要我帮你查点什么吗?","有问题尽管问我","嗨,我们开始吧","开始一段新对话吧"],G1=()=>q1[Math.floor(Math.random()*q1.length)],VQ=20*1024*1024;function HQ(e){return new Promise((t,n)=>{const r=new FileReader;r.onload=()=>{const i=String(r.result),s=i.indexOf(",");t(s>=0?i.slice(s+1):i)},r.onerror=()=>n(r.error),r.readAsDataURL(e)})}function KQ(){const[e,t]=T.useState([]),[n,r]=T.useState(""),[i,s]=T.useState([]),[o,a]=T.useState(""),[l,c]=T.useState([]),[d,u]=T.useState(""),[f,h]=T.useState([]),[g,y]=T.useState(!1),[b,m]=T.useState(""),[w,v]=T.useState(!1),[x,k]=T.useState(G1),[E,N]=T.useState(null),[S,L]=T.useState(""),[M,j]=T.useState(),[R,$]=T.useState(!1),[C,B]=T.useState(!1),[I,P]=T.useState(H1),[O,D]=T.useState(!1),[_,H]=T.useState(!1),[F,A]=T.useState(!1),[W,Y]=T.useState(null),[V,G]=T.useState(!1),K=T.useRef(null),[X,te]=T.useState(()=>{const z=Hp();return WS(z),z}),[ae,re]=T.useState(!1),ne=T.useRef(!1);function he(z){console.log("create agent draft:",z),P(null),me()}const{ref:pe,onScroll:oe}=XS(l);T.useEffect(()=>{ZB().then(z=>{L(z.userId),j(z.info),$(!!z.local),N(z.status)})},[]);function ve(z){GB(z),L(z),j({name:z}),$(!0),N("authenticated")}function ie(){R?(WB(),L(""),j(void 0),N("unauthenticated")):QB()}T.useEffect(()=>{E!=="unauthenticated"&&gB().then(z=>{t(z);const q=localStorage.getItem(os.app),Q=X.flatMap(Te=>Te.apps.map(Pe=>Nd(Te.id,Pe))),le=q&&(z.includes(q)||Q.includes(q))?q:z[0];le&&r(le)}).catch(z=>m(String(z)))},[E]),T.useEffect(()=>{n&&localStorage.setItem(os.app,n)},[n]),T.useEffect(()=>{localStorage.setItem(os.view,I??"chat")},[I]),T.useEffect(()=>{localStorage.setItem(os.session,o)},[o]),T.useEffect(()=>{!n||!S||(async()=>{const z=await xe(n);if(!ne.current){ne.current=!0;const q=localStorage.getItem(os.session)||"";if(H1()===null&&q&&z.some(Q=>Q.id===q)){qe(q);return}}me()})()},[n,S]),T.useEffect(()=>{const z=K.current;z&&z.app===n&&(K.current=null,qe(z.sid))},[n]);function tt(z,q){G(!1),z===n?qe(q):(K.current={app:z,sid:q},r(z))}async function xe(z){try{const q=await VS(z,S),Q=await Promise.all(q.map(ee=>{var le;return(le=ee.events)!=null&&le.length?Promise.resolve(ee):Up(z,S,ee.id)}));return s(Q),Q}catch(q){return m(String(q)),[]}}function me(){m(""),k(G1()),a(""),c([])}async function Dt(z){try{await bB(n,S,z),z===o&&me(),await xe(n)}catch(q){m(String(q))}}async function qe(z){if(z!==o){m(""),B(!0),a(z);try{const q=await Up(n,S,z);c(SB(q.events??[]))}catch(q){m(String(q))}finally{B(!1)}}}async function Nt(z){const q=[];for(const Q of Array.from(z)){if(Q.size>VQ){m(`文件过大(>20MB):${Q.name}`);continue}const ee=await HQ(Q);q.push({mimeType:Q.type||"application/octet-stream",data:ee,name:Q.name})}q.length&&h(Q=>[...Q,...q])}async function nt(z,q=[]){if(!z.trim()&&q.length===0||g||!n||!S)return;m(""),y(!0);let Q=o;if(!Q)try{Q=await zp(n,S),a(Q);const le=Date.now()/1e3,Te={id:Q,lastUpdateTime:le,events:[{author:"user",timestamp:le,content:{role:"user",parts:[{text:z}]}}]};s(Pe=>[Te,...Pe.filter(Ye=>Ye.id!==Q)])}catch(le){m(String(le)),y(!1);return}const ee=[];q.length&&ee.push({kind:"attachment",files:q.map(le=>({mimeType:le.mimeType,data:le.data,name:le.name}))}),z.trim()&&ee.push({kind:"text",text:z}),c(le=>[...le,{role:"user",blocks:ee,meta:{ts:Date.now()/1e3}},{role:"assistant",blocks:[]}]);try{let le=Ps(),Te=0,Pe=Date.now()/1e3;for await(const Ye of Vp({appName:n,userId:S,sessionId:Q,text:z,attachments:q})){const Tt=Ye.error??Ye.errorMessage??Ye.error_message;if(typeof Tt=="string"&&Tt){m(Tt);break}le=Lu(le,Ye);const $e=Ye.usageMetadata??Ye.usage_metadata;$e!=null&&$e.totalTokenCount&&(Te=$e.totalTokenCount),Ye.timestamp&&(Pe=Ye.timestamp);const Fe=le.blocks,gt={tokens:Te||void 0,ts:Pe};c(Gi=>{const ei=Gi.slice(),Wi=ei[ei.length-1];return(Wi==null?void 0:Wi.role)==="assistant"&&(ei[ei.length-1]={...Wi,blocks:Fe,meta:gt}),ei})}xe(n)}catch(le){m(String(le))}finally{y(!1)}}function U(z,q){var le,Te;const Q=((le=z==null?void 0:z.event)==null?void 0:le.name)??q.id,ee=((Te=z==null?void 0:z.event)==null?void 0:Te.context)??{};nt(`[ui-action] ${Q}: ${JSON.stringify(ee)}`)}return E===null?p.jsx("div",{className:"boot"}):E==="unauthenticated"?p.jsx(_Q,{onUsername:ve}):p.jsxs("div",{className:"layout",children:[p.jsx(HB,{sessions:i,currentSessionId:o,onNewChat:()=>{P(null),D(!1),H(!1),A(!1),G(!1),me()},onSearch:()=>{P(null),D(!1),H(!1),A(!1),G(!0),m("")},onQuickCreate:()=>{a(""),c([]),D(!1),H(!1),G(!1),P(null),Y(null),A(!0),m("")},onSkillCenter:()=>{P(null),H(!1),A(!1),G(!1),D(!0),m("")},onAddAgent:()=>{P(null),D(!1),G(!1),a(""),c([]),A(!1),H(!0),m("")},onPickSession:z=>{P(null),D(!1),H(!1),A(!1),G(!1),m(""),qe(z)},onDeleteSession:Dt}),(()=>{const z=p.jsx(F9,{value:d,onChange:u,onSubmit:()=>{const ee=d,le=f;u(""),h([]),nt(ee,le)},disabled:!n||!S,busy:g,attachments:f,onAddFiles:Nt,onRemoveAttachment:ee=>h(le=>le.filter((Te,Pe)=>Pe!==ee))}),q=o$(e,X),Q=ee=>{var le;return((le=q.find(Te=>Te.id===ee))==null?void 0:le.label)??ee};return p.jsxs("main",{className:"main",children:[p.jsx(e$,{apps:q.map(ee=>ee.id),appName:n,onAppChange:r,agentLabel:Q,userInfo:M,onLogout:ie,title:F?"添加 Agent":_?"添加 AgentKit 智能体":O?"技能中心":void 0,crumbs:V||_||O||F||!I?void 0:I==="menu"?[{label:DQ,onClick:()=>{P(null),Y(null),A(!0)}},{label:"从 0 快速创建"}]:[{label:"从 0 快速创建",onClick:()=>re(!0)},{label:jQ[I]}]}),b&&p.jsx("div",{className:"error",children:b}),C&&p.jsxs("div",{className:"session-loading",children:[p.jsx(Wn,{className:"icon spin"})," 加载会话…"]}),F?p.jsx(qT,{title:"您想以哪种方式添加 Agent 来运行?",sub:"选择最适合你的方式,下一步即可开始",cards:[{key:"agentkit",icon:BQ,title:"添加 AgentKit 智能体",desc:"连接已部署在火山引擎 AgentKit 上的远程智能体。",onClick:()=>{A(!1),H(!0)}},{key:"scratch",icon:$Q,title:"从 0 快速创建",desc:"用智能 / 自定义 / 模板 / 工作流的方式从零创建一个 Agent。",onClick:()=>{A(!1),Y(null),P("menu")}}]}):V?p.jsx(FB,{userId:S,appId:n,agentLabel:Q,onOpenSession:tt}):_?p.jsx(a$,{onAdded:ee=>{te(Hp()),H(!1),r(ee)},onCancel:()=>H(!1)}):O?p.jsx(MB,{}):I==="menu"?p.jsx(wH,{onSelect:ee=>{Y(null),P(ee)},onImport:ee=>{Y(ee),P("custom")}}):I==="intelligent"?p.jsx(AH,{userId:S,onBack:()=>P("menu"),onCreate:he}):I==="custom"?p.jsx(zH,{initialDraft:W??void 0,onBack:()=>P("menu"),onCreate:he}):I==="template"?p.jsx(HH,{onBack:()=>P("menu"),onCreate:he}):I==="workflow"?p.jsx(bQ,{onBack:()=>P("menu"),onCreate:he}):l.length===0?p.jsxs("div",{className:"welcome",children:[p.jsx("h1",{className:"welcome-title",children:x}),z]}):p.jsxs(p.Fragment,{children:[p.jsx("div",{className:"transcript",ref:pe,onScroll:oe,children:l.map((ee,le)=>{var Ye;const Te=le===l.length-1;if(ee.role==="user"){const Tt=ee.blocks.map(Fe=>Fe.kind==="text"?Fe.text:"").join(""),$e=ee.blocks.flatMap(Fe=>Fe.kind==="attachment"?Fe.files:[]);return p.jsxs(mt.div,{className:"turn turn--user",initial:{opacity:0,y:8},animate:{opacity:1,y:0},transition:{duration:.2,ease:"easeOut"},children:[$e.length>0&&p.jsx("div",{className:"msg-attachments",children:$e.map((Fe,gt)=>{var Gi;return(Gi=Fe.mimeType)!=null&&Gi.startsWith("image/")&&Fe.data?p.jsx("img",{className:"attachment-thumb",src:`data:${Fe.mimeType};base64,${Fe.data}`,alt:Fe.name??"image"},gt):p.jsxs("div",{className:"attachment-file",children:[p.jsx(iy,{className:"icon"}),p.jsx("span",{className:"attachment-file-name",children:Fe.name??"文件"})]},gt)})}),Tt&&p.jsx("div",{className:"bubble",children:p.jsx(Ry,{text:Tt})}),p.jsxs("div",{className:"turn-actions turn-actions--right",children:[((Ye=ee.meta)==null?void 0:Ye.ts)&&p.jsx("span",{className:"meta-text",children:I2(ee.meta.ts)}),p.jsx(K1,{text:Tt})]})]},le)}const Pe=ee.blocks.length===0;return p.jsx(mt.div,{className:"turn turn--assistant",initial:{opacity:0,y:8},animate:{opacity:1,y:0},transition:{duration:.2,ease:"easeOut"},children:Pe?Te&&g?p.jsx(j9,{}):null:p.jsxs(p.Fragment,{children:[p.jsx($9,{blocks:ee.blocks,onAction:U}),p.jsxs("div",{className:"turn-meta",children:[p.jsxs("div",{className:"turn-actions",children:[p.jsx("button",{className:"icon-btn",title:"Tracing 火焰图",onClick:()=>v(!0),children:p.jsx(FQ,{})}),p.jsx(K1,{text:UQ(ee)})]}),ee.meta&&p.jsx("span",{className:"meta-text",children:zQ(ee.meta)})]})]})},le)})}),z]})]})})(),w&&o&&p.jsx(EQ,{sessionId:o,onClose:()=>v(!1)}),ae&&p.jsx("div",{className:"confirm-scrim",onClick:()=>re(!1),children:p.jsxs("div",{className:"confirm-box",onClick:z=>z.stopPropagation(),children:[p.jsx("div",{className:"confirm-title",children:"返回创建首页?"}),p.jsx("div",{className:"confirm-text",children:"返回后当前填写的内容将会丢失,确定要返回吗?"}),p.jsxs("div",{className:"confirm-actions",children:[p.jsx("button",{className:"confirm-btn",onClick:()=>re(!1),children:"取消"}),p.jsx("button",{className:"confirm-btn confirm-btn--danger",onClick:()=>{Y(null),P("menu"),re(!1)},children:"确定返回"})]})]})})]})}Oh.createRoot(document.getElementById("root")).render(p.jsx(iE.StrictMode,{children:p.jsx(oR,{reducedMotion:"user",children:p.jsx(KQ,{})})})); diff --git a/veadk/webui/index.html b/veadk/webui/index.html index 25fd541d..ed625a83 100644 --- a/veadk/webui/index.html +++ b/veadk/webui/index.html @@ -4,7 +4,7 @@ VeADK Web - +