@next-bricks/ai-portal 0.16.0 → 0.16.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (31) hide show
  1. package/dist/bricks.json +2 -2
  2. package/dist/chunks/6220.43f2b07b.js +3 -0
  3. package/dist/chunks/6220.43f2b07b.js.map +1 -0
  4. package/dist/chunks/6766.58e9ed13.js +3 -0
  5. package/dist/chunks/6766.58e9ed13.js.map +1 -0
  6. package/dist/chunks/9073.c6114084.js +2 -0
  7. package/dist/chunks/9073.c6114084.js.map +1 -0
  8. package/dist/chunks/cruise-canvas.234f0add.js +2 -0
  9. package/dist/chunks/cruise-canvas.234f0add.js.map +1 -0
  10. package/dist/chunks/elevo-sidebar.de21ad02.js.map +1 -1
  11. package/dist/chunks/{main.eecae8a6.js → main.997c6dda.js} +2 -2
  12. package/dist/chunks/{main.eecae8a6.js.map → main.997c6dda.js.map} +1 -1
  13. package/dist/examples.json +3 -3
  14. package/dist/{index.c1a6a59a.js → index.9c92ae05.js} +2 -2
  15. package/dist/{index.c1a6a59a.js.map → index.9c92ae05.js.map} +1 -1
  16. package/dist/manifest.json +9 -9
  17. package/dist/types.json +89 -89
  18. package/dist-types/cruise-canvas/interfaces.d.ts +12 -0
  19. package/dist-types/cruise-canvas/useAutoCenter.d.ts +4 -5
  20. package/dist-types/cruise-canvas/useZoom.d.ts +2 -1
  21. package/package.json +2 -2
  22. package/dist/chunks/6220.770aba56.js +0 -3
  23. package/dist/chunks/6220.770aba56.js.map +0 -1
  24. package/dist/chunks/6766.6cd9fc88.js +0 -3
  25. package/dist/chunks/6766.6cd9fc88.js.map +0 -1
  26. package/dist/chunks/9073.bdd66226.js +0 -2
  27. package/dist/chunks/9073.bdd66226.js.map +0 -1
  28. package/dist/chunks/cruise-canvas.aaa43ae4.js +0 -2
  29. package/dist/chunks/cruise-canvas.aaa43ae4.js.map +0 -1
  30. /package/dist/chunks/{6220.770aba56.js.LICENSE.txt → 6220.43f2b07b.js.LICENSE.txt} +0 -0
  31. /package/dist/chunks/{6766.6cd9fc88.js.LICENSE.txt → 6766.58e9ed13.js.LICENSE.txt} +0 -0
@@ -1,2 +0,0 @@
1
- "use strict";(globalThis.webpackChunk_next_bricks_ai_portal=globalThis.webpackChunk_next_bricks_ai_portal||[]).push([[2267],{16185:(e,t,n)=>{n.r(t),n.d(t,{CruiseCanvas:()=>ye});var s,a=n(74635),r=n(70918),i=n(26902),o=n(5536),l=n(86121),c=n(70829),u=n(62740),d=n(18769),m=n.n(d),h=n(7921),v=n(11280),f=n(23081),p=(n(65168),n(90079)),k=n(53373),b=n.n(k),A=n(99126),E=n(67566),g=n(69445),w=n(80079),y=n(32464),C=n(58231),j=n(36494),x=n(97642),M=n(92773),R=n(59533),I=n(13153),N=n(34999),W=n(27954),S=n(24388),T=n(56938),L=n(77971),H=n(39295),_=n(39194),z=n(16854),$=n(55805),P=n(85620),B=n(73349),X=n(62601),V=n(57097),J=n(83490),O=n(8324);let Q,q,D,Y,F,G,K,U,Z,ee,te,ne,se,ae,re,ie,oe,le,ce,ue,de,me,he,ve,fe,pe;(0,p.initializeI18n)(w.NS,w.I);const{defineElement:ke,property:be,event:Ae,method:Ee}=(0,h.createDecorators)(),ge=(0,d.memo)(Be),we=(0,d.forwardRef)(Pe);let ye;var Ce=new WeakMap,je=new WeakMap,xe=new WeakMap,Me=new WeakMap,Re=new WeakMap,Ie=new WeakSet,Ne=new WeakMap,We=new WeakMap,Se=new WeakMap,Te=new WeakMap,Le=new WeakMap,He=new WeakMap,_e=new WeakMap,ze=new WeakMap;class $e extends v.ReactNextElement{constructor(){super(...arguments),(0,a.A)(this,Ie),(0,r.A)(this,Ce,(Q(this),D(this))),(0,r.A)(this,je,(Y(this),F(this))),(0,r.A)(this,xe,(G(this),K(this))),(0,r.A)(this,Me,(U(this),Z(this))),(0,r.A)(this,Re,(ee(this),te(this))),(0,r.A)(this,Ne,(ae(this),()=>{(0,o.A)(Ie,this,ne).emit()})),(0,r.A)(this,We,re(this)),(0,r.A)(this,Se,(le(this),()=>{(0,o.A)(Ie,this,ie).emit()})),(0,r.A)(this,Te,ce(this)),(0,r.A)(this,Le,(me(this),()=>{(0,o.A)(Ie,this,ue).emit()})),(0,r.A)(this,He,he(this)),(0,r.A)(this,_e,(pe(this),()=>{(0,o.A)(Ie,this,ve).emit()})),(0,r.A)(this,ze,(0,d.createRef)())}get taskId(){return(0,c.A)(Ce,this)}set taskId(e){(0,l.A)(Ce,this,e)}get task(){return(0,c.A)(je,this)}set task(e){(0,l.A)(je,this,e)}get jobs(){return(0,c.A)(xe,this)}set jobs(e){(0,l.A)(xe,this,e)}get replay(){return(0,c.A)(Me,this)}set replay(e){(0,l.A)(Me,this,e)}resumed(){var e;null===(e=(0,c.A)(ze,this).current)||void 0===e||e.resumed()}render(){return m().createElement(we,{taskId:this.taskId,jobs:this.jobs,task:this.task,replay:this.replay,onShare:(0,c.A)(Ne,this),onPause:(0,c.A)(Se,this),onResume:(0,c.A)(Le,this),onCancel:(0,c.A)(_e,this),ref:(0,c.A)(ze,this)})}}function Pe(e,t){var n;let{taskId:s,task:a,jobs:r,replay:i,onShare:o,onPause:l,onResume:c,onCancel:u}=e;const h=(0,d.useRef)(null),{task:v,jobs:p,plan:k,error:A,humanInputRef:w,resumedRef:W}=(0,M.S)(s,i),S=s?v:a,T=s?p:r,L=s?k:null==a?void 0:a.plan,H=(0,R.B)(S,T),_=null==H?void 0:H.nodes,Q=null==H?void 0:H.edges,q=null==H?void 0:H.nav,D=null==H?void 0:H.views,Y=null!==(n=null==S?void 0:S.title)&&void 0!==n?n:"",F=null==S?void 0:S.state,[G,K]=(0,d.useState)(null),U=(0,d.useMemo)((()=>{if(G){const[e,t]=G.split(":");if("job"===e||"view"===e)return t}return null}),[G]);(0,d.useImperativeHandle)(t,(()=>({resumed:()=>{var e;return null===(e=W.current)||void 0===e?void 0:e.call(W)}})),[W]);const Z=(0,d.useRef)(!1);(0,d.useEffect)((()=>{const e=setTimeout((()=>{Z.current=!0}),3e3);return()=>{clearTimeout(e)}}),[]);const ee=(0,d.useRef)(!1),te=(0,d.useCallback)(((e,t)=>Z.current&&0!==t?(ee.current=!0,e.transition().duration(null!=t?t:300).ease((e=>e*(2-e))).on("end",(()=>{ee.current=!1}))):e),[]);(0,d.useEffect)((()=>{(0,f.getRuntime)().applyPageTitle(Y)}),[Y]),(0,d.useEffect)((()=>{A&&(0,f.handleHttpError)(A)}),[A]);const ne=(0,d.useCallback)(((e,t)=>{var n;null===(n=w.current)||void 0===n||n.call(w,e,t)}),[w]),[se,ae]=(0,d.useState)(null),re=(0,d.useCallback)(((e,t)=>{ae((n=>{if(!t){if(!n)return null;const t=new Map(n);return t.delete(e)?t:n}return n?new Map(n).set(e,t):new Map([[e,t]])}))}),[]),{sizeReady:ie,nodes:oe,edges:le}=(0,x.g)({rawNodes:_,rawEdges:Q,state:F,sizeMap:se}),[ce,ue]=(0,d.useState)(!1),{grabbing:de,transform:me,transformRef:he,zoomer:ve}=(0,C.f)({rootRef:h,zoomable:ie,scrollable:ie&&!ce,pannable:ie}),{centered:fe,setCentered:pe,reCenterRef:ke}=(0,j.E)({nodes:oe,sizeReady:ie,zoomer:ve,rootRef:h,selectTransition:te}),be=!z.QB.includes(null!=F?F:"working")&&2===oe.length,Ae=(0,d.useMemo)((()=>new Set(le.map((e=>e.source)))),[le]),Ee=(0,d.useMemo)((()=>{if(!ie)return null;const e=[];for(const t of oe)Ae.has(t.id)||e.push(t);return e.length>0?Math.max(...e.map((e=>e.view.y+e.view.height))):null}),[oe,Ae,ie]),we=(0,d.useRef)(null);(0,d.useEffect)((()=>{we.current=Ee}),[Ee]);const ye=(0,d.useRef)(!1);(0,d.useEffect)((()=>{const e=h.current;if(!e||null===Ee||ye.current)return;const{offsetHeight:t}=e,n=he.current,s=Ee*n.k+n.y,a=t-z.xX-s;a<0&&ve.transform(te((0,E.A)(e),a>-100?100:a<-500?300:200),new O.uV(n.k,n.x,n.y+a))}),[Ee,he,ve,te]),(0,d.useEffect)((()=>{const e=we.current,t=h.current;if(!t||null===e||ee.current)return;const{offsetHeight:n}=t,s=e*me.k+me.y,a=n-z.xX-s;ye.current=a<0}),[me,ve]);const Ce=(0,d.useCallback)((()=>{ke.current=!0,pe(!1)}),[ke,pe]),je=(0,d.useCallback)((e=>{ve.scaleTo((0,E.A)(h.current),e)}),[ve]),xe=(0,d.useMemo)((()=>ie?(0,g.o)(oe.map((e=>e.view))):null),[oe,ie]);(0,d.useEffect)((()=>{if(!xe)return;const e=h.current;if(!e)return;const{offsetWidth:t,offsetHeight:n}=e,s=t/me.k,a=n/me.k,r=-(s-20-xe.x),i=s-20+(xe.x+xe.width),o=-(a-20-xe.y),l=a-20+(xe.y+xe.height);ve.translateExtent([[r,o],[i,l]])}),[ve,me.k,xe]);const Me=(0,d.useCallback)((e=>{let{nodeId:t,jobId:n,behavior:s,block:a}=e;const r=h.current,i=oe.filter((e=>{var s;return!(t&&e.id!==t||n&&(null===(s=e.job)||void 0===s?void 0:s.id)!==n)}));if(!r||0===i.length)return;const o=(0,g.o)(i.map((e=>e.view))),{x:l,y:c}=(0,X.D)(o,[r.offsetWidth,r.offsetHeight],[z.RV,z.kq,z.xX,z.bL],he.current,a);(l||c)&&ve.translateBy(te((0,E.A)(r),"instant"===s?0:void 0),l,c)}),[oe,te,he,ve]),Re=(0,d.useCallback)(((e,t)=>{const n=h.current;if(!n||!ie)return;let s,a=0,r=0,i=300;const o="left"===e||"right"===e;if("line"===t)s=40*("up"===e||"left"===e?1:-1),i=150;else if("page"===t)s=(n.offsetHeight-z.xX)*("up"===e?-1:1);else{const{y:t,height:a}=(0,g.o)(oe.map((e=>e.view)));if("down"===e){const e=t+a-t+z.xX;s=n.offsetHeight-e-he.current.y}else s=t+z.RV-he.current.y}o?a=s:r=s,(a||r)&&ve.translateBy(te((0,E.A)(n),i),a,r)}),[oe,te,ie,he,ve]),[Ie,Ne]=(0,d.useState)(null),[We,Se]=(0,d.useState)(null),Te=(0,d.useMemo)((()=>({humanInput:ne,onShare:o,onPause:l,onResume:c,onCancel:u,onNodeResize:re,activeToolCallJobId:Ie,setActiveToolCallJobId:Ne,setActiveNodeId:K,hoverOnScrollableContent:ce,setHoverOnScrollableContent:ue,activeExpandedViewJobId:We,setActiveExpandedViewJobId:Se})),[Ie,ce,We,re,ne,o,l,c,u]),Le=(0,d.useMemo)((()=>Ie?null==T?void 0:T.find((e=>e.id===Ie)):null),[Ie,T]),He=(0,d.useCallback)((e=>{for(const t of e.nativeEvent.composedPath()){if(t instanceof HTMLElement&&t.classList.contains(y.A.node))return;if(t===h.current)break}K(null)}),[]);return(0,d.useEffect)((()=>{const e=h.current;if(!e||Le||We)return;const t=t=>{if(document.activeElement&&document.activeElement!==document.body&&document.activeElement!==e)return;const n=(0,V.l)(t,{activeNodeId:G,nodes:oe});if(!n)return;const{action:s,node:a}=n;if("scroll"===s)Re(n.direction,n.range);else if("enter"===s){var r,i;if("job"!==a.type&&"view"!==a.type)return;const e="ask_human"===(null===(r=a.job.toolCall)||void 0===r?void 0:r.name),t="ask_human_confirming_plan"===(null===(i=a.job.toolCall)||void 0===i?void 0:i.name);if(e||t)return}t.preventDefault(),t.stopPropagation(),"enter"===s?"view"===a.type?Se(a.job.id):Ne(a.job.id):"switch-active-node"===s&&(K(a.id),"job"===a.type||"view"===a.type?Me({jobId:a.job.id,behavior:"smooth"}):Me({nodeId:a.id,behavior:"smooth"}))};return document.addEventListener("keydown",t),()=>{document.removeEventListener("keydown",t)}}),[G,Le,We,oe,Me,Re]),m().createElement(P.Q.Provider,{value:Te},m().createElement("div",{className:b()(y.A.root,{[y.A.loading]:!S}),ref:h,style:{cursor:de?"grabbing":"grab"},tabIndex:-1,onClick:He},!S&&m().createElement("div",{className:y.A["loading-icon"]},m().createElement($.Bj,{lib:"antd",theme:"outlined",icon:"loading-3-quarters",spinning:!0})),m().createElement("div",{className:b()(y.A.canvas,{[y.A.ready]:ie&&fe}),style:{transform:`translate3d(${me.x}px, ${me.y}px, 0) scale(${me.k})`}},m().createElement("svg",{className:y.A.edges},le.map((e=>m().createElement("path",{className:y.A.edge,key:`${e.source}-${e.target}`,d:e.points.map(((e,t)=>{let{x:n,y:s}=e;return`${0===t?"M":"L"}${n},${s}`})).join(" ")})))),oe.map((e=>{var t,n,s;return m().createElement(ge,{key:e.id,id:e.id,type:e.type,content:e.content,job:e.job,state:e.state,startTime:null==S?void 0:S.startTime,taskLoading:be,instructionLoading:"instruction"===e.type&&!Ae.has(e.id)&&!z.QB.includes(null!==(t=e.state)&&void 0!==t?t:"working")&&!z.X4.includes(null!=F?F:"working"),edges:le,x:null===(n=e.view)||void 0===n?void 0:n.x,y:null===(s=e.view)||void 0===s?void 0:s.y,active:G===e.id})})))),m().createElement("div",{className:y.A.widgets},m().createElement("div",{className:y.A["nav-container"]},m().createElement("ul",{className:y.A.nav},null==q?void 0:q.map((e=>m().createElement("li",{key:e.id,className:b()(y.A["nav-item"],{[y.A.active]:U===e.id})},m().createElement("a",{className:y.A["nav-link"],onClick:()=>{K(`job:${e.id}`),Me({jobId:e.id,block:"start"})}},m().createElement("span",{className:y.A["nav-link-text"]},e.title))))))),m().createElement(I.r,{plan:L,state:F}),m().createElement(N.l,{scale:me.k,onScaleChange:je,onReCenter:Ce})),Le&&m().createElement(B.M,{job:Le}),We&&m().createElement(J.f,{views:D}))}function Be(e){let{id:t,type:n,state:s,job:a,content:r,startTime:i,taskLoading:o,instructionLoading:l,x:c,y:u,active:h}=e;const v=(0,d.useRef)(null),{onNodeResize:f,setActiveNodeId:p}=(0,d.useContext)(P.Q);(0,d.useEffect)((()=>{const e=v.current;if(!e)return;const n=new A.A((()=>{f(t,[e.offsetWidth,e.offsetHeight])}));return n.observe(e),()=>{n.disconnect(),f(t,null)}}),[t,f]),(0,d.useEffect)((()=>{const e=v.current;if(!e)return;const t=e=>{e.stopPropagation()};return e.addEventListener("mousedown",t),()=>{e.removeEventListener("mousedown",t)}}),[]);const k=(0,d.useCallback)((()=>{"start"!==n&&"instruction"!==n&&p(t)}),[t,p,n]);return m().createElement("div",{className:b()(y.A.node,{[y.A.ready]:null!=c&&null!=u}),ref:v,style:{left:c,top:u},onClick:k},"start"===n?m().createElement(W.H,null):"end"===n?m().createElement(H.s,{active:h}):"requirement"===n?m().createElement(S.O,{content:r,startTime:i,loading:o,active:h}):"instruction"===n?m().createElement(T.L,{content:a.instruction,loading:l}):"view"===n?m().createElement(_.Y,{job:a,active:h}):m().createElement(L.W,{state:s,job:a,active:h}))}s=$e,({e:[D,Y,F,G,K,U,Z,ee,te,ne,se,ae,re,ie,oe,le,ce,ue,de,me,he,ve,fe,pe,Q],c:[ye,q]}=(0,u.A)(s,[ke("ai-portal.cruise-canvas",{shadowOptions:!1})],[[be(),1,"taskId"],[be({attribute:!1}),1,"task"],[be({attribute:!1}),1,"jobs"],[be({type:Number}),1,"replay"],[Ae({type:"share"}),1,"shareEvent",e=>(0,c.A)(Re,e),(e,t)=>(0,l.A)(Re,e,t)],[Ae({type:"pause"}),1,"pauseEvent",e=>(0,c.A)(We,e),(e,t)=>(0,l.A)(We,e,t)],[Ae({type:"resume"}),1,"resumeEvent",e=>(0,c.A)(Te,e),(e,t)=>(0,l.A)(Te,e,t)],[Ae({type:"cancel"}),1,"cancelEvent",e=>(0,c.A)(He,e),(e,t)=>(0,l.A)(He,e,t)],[Ee(),2,"resumed"]],0,(e=>ze.has((0,i.A)(e))),v.ReactNextElement)),q()}}]);
2
- //# sourceMappingURL=cruise-canvas.aaa43ae4.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"chunks/cruise-canvas.aaa43ae4.js","mappings":"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","sources":["webpack:///./src/cruise-canvas/index.tsx"],"sourcesContent":["// istanbul ignore file: experimental\nimport React, {\n createRef,\n forwardRef,\n memo,\n useCallback,\n useContext,\n useEffect,\n useImperativeHandle,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport { createDecorators, type EventEmitter } from \"@next-core/element\";\nimport { ReactNextElement } from \"@next-core/react-element\";\nimport { getRuntime, handleHttpError } from \"@next-core/runtime\";\nimport \"@next-core/theme\";\nimport { initializeI18n } from \"@next-core/i18n\";\nimport classNames from \"classnames\";\nimport ResizeObserver from \"resize-observer-polyfill\";\nimport { select, type Selection } from \"d3-selection\";\nimport { mergeRects } from \"@next-shared/diagram\";\nimport { NS, locales } from \"./i18n.js\";\nimport styles from \"./styles.module.css\";\nimport { useZoom } from \"./useZoom.js\";\nimport type {\n SizeTuple,\n GraphNode,\n Job,\n RequirementGraphNode,\n JobGraphNode,\n TaskBaseDetail,\n GraphEdge,\n} from \"./interfaces.js\";\nimport { useAutoCenter } from \"./useAutoCenter.js\";\nimport { useLayout } from \"./useLayout.js\";\nimport { useTaskDetail } from \"./useTaskDetail.js\";\nimport { useTaskGraph } from \"./useTaskGraph.js\";\nimport { PlanProgress } from \"./PlanProgress/PlanProgress.js\";\nimport { ZoomBar } from \"./ZoomBar/ZoomBar.js\";\nimport { NodeStart } from \"./NodeStart/NodeStart.js\";\nimport { NodeRequirement } from \"./NodeRequirement/NodeRequirement.js\";\nimport { NodeInstruction } from \"./NodeInstruction/NodeInstruction.js\";\nimport { NodeJob } from \"./NodeJob/NodeJob.js\";\nimport { NodeEnd } from \"./NodeEnd/NodeEnd.js\";\nimport { NodeView } from \"./NodeView/NodeView.js\";\nimport {\n CANVAS_PADDING_BOTTOM,\n CANVAS_PADDING_LEFT,\n CANVAS_PADDING_RIGHT,\n CANVAS_PADDING_TOP,\n DONE_STATES,\n GENERAL_DONE_STATES,\n} from \"./constants.js\";\nimport { WrappedIcon } from \"./bricks.js\";\nimport { CanvasContext } from \"./CanvasContext.js\";\nimport { ToolCallDetail } from \"./ToolCallDetail/ToolCallDetail.js\";\nimport { getScrollTo } from \"./utils/getScrollTo.js\";\nimport { handleKeyboardNav } from \"./utils/handleKeyboardNav.js\";\nimport { ExpandedView } from \"./ExpandedView/ExpandedView.js\";\nimport { ZoomTransform } from \"d3-zoom\";\n\ninitializeI18n(NS, locales);\n\nconst { defineElement, property, event, method } = createDecorators();\n\nconst MemoizedNodeComponent = memo(NodeComponent);\n\nexport interface CruiseCanvasProps {\n taskId?: string;\n task?: TaskBaseDetail;\n jobs?: Job[];\n replay?: number;\n}\n\nconst CruiseCanvasComponent = forwardRef(LegacyCruiseCanvasComponent);\n\n/**\n * 构件 `ai-portal.cruise-canvas`\n */\nexport\n@defineElement(\"ai-portal.cruise-canvas\", {\n // Will wrap v2 bricks which don't support in shadow DOM.\n shadowOptions: false,\n})\nclass CruiseCanvas extends ReactNextElement implements CruiseCanvasProps {\n @property()\n accessor taskId: string | undefined;\n\n @property({ attribute: false })\n accessor task: TaskBaseDetail | undefined;\n\n @property({ attribute: false })\n accessor jobs: Job[] | undefined;\n\n /**\n * 设置回放时消息之间的时间间隔,单位为秒。\n */\n @property({ type: Number })\n accessor replay: number | undefined;\n\n @event({ type: \"share\" })\n accessor #shareEvent!: EventEmitter<void>;\n\n #onShare = () => {\n this.#shareEvent.emit();\n };\n\n @event({ type: \"pause\" })\n accessor #pauseEvent!: EventEmitter<void>;\n\n #onPause = () => {\n this.#pauseEvent.emit();\n };\n\n @event({ type: \"resume\" })\n accessor #resumeEvent!: EventEmitter<void>;\n\n #onResume = () => {\n this.#resumeEvent.emit();\n };\n\n @event({ type: \"cancel\" })\n accessor #cancelEvent!: EventEmitter<void>;\n\n #onCancel = () => {\n this.#cancelEvent.emit();\n };\n\n #ref = createRef<CruiseCanvasRef>();\n\n @method()\n resumed() {\n this.#ref.current?.resumed();\n }\n\n render() {\n return (\n <CruiseCanvasComponent\n taskId={this.taskId}\n jobs={this.jobs}\n task={this.task}\n replay={this.replay}\n onShare={this.#onShare}\n onPause={this.#onPause}\n onResume={this.#onResume}\n onCancel={this.#onCancel}\n ref={this.#ref}\n />\n );\n }\n}\n\ninterface CruiseCanvasComponentProps extends CruiseCanvasProps {\n onShare: () => void;\n onPause: () => void;\n onResume: () => void;\n onCancel: () => void;\n}\n\ninterface ScrollToOptions {\n nodeId?: string;\n jobId?: string;\n\n /**\n * @default \"auto\"\n */\n behavior?: \"smooth\" | \"instant\" | \"auto\";\n\n /**\n * When set to \"start\", force scroll even if the node is fully visible.\n *\n * @default \"nearest\"\n */\n block?: \"start\" | \"nearest\";\n}\n\ninterface CruiseCanvasRef {\n resumed: () => void;\n}\n\nfunction LegacyCruiseCanvasComponent(\n {\n taskId,\n task: propTask,\n jobs: propJobs,\n replay,\n onShare,\n onPause,\n onResume,\n onCancel,\n }: CruiseCanvasComponentProps,\n ref: React.Ref<CruiseCanvasRef>\n) {\n const rootRef = useRef<HTMLDivElement>(null);\n const {\n task: _task,\n jobs: _jobs,\n plan: _plan,\n error,\n humanInputRef,\n resumedRef,\n } = useTaskDetail(taskId, replay);\n const task = taskId ? _task : propTask;\n const jobs = taskId ? _jobs : propJobs;\n const plan = taskId ? _plan : propTask?.plan;\n const graph = useTaskGraph(task, jobs);\n const rawNodes = graph?.nodes;\n const rawEdges = graph?.edges;\n const nav = graph?.nav;\n const views = graph?.views;\n const pageTitle = task?.title ?? \"\";\n const taskState = task?.state;\n const [activeNodeId, setActiveNodeId] = useState<string | null>(null);\n const currentNavId = useMemo(() => {\n if (activeNodeId) {\n const [type, jobId] = activeNodeId.split(\":\");\n if (type === \"job\" || type === \"view\") {\n return jobId;\n }\n }\n return null;\n }, [activeNodeId]);\n\n useImperativeHandle(\n ref,\n () => ({\n resumed: () => resumedRef.current?.(),\n }),\n [resumedRef]\n );\n\n // Enable transition after 3 seconds to avoid initial flicker\n const transitionEnabledRef = useRef(false);\n useEffect(() => {\n const timer = setTimeout(() => {\n transitionEnabledRef.current = true;\n }, 3e3);\n return () => {\n clearTimeout(timer);\n };\n }, []);\n\n const transitionRef = useRef(false);\n const selectTransition = useCallback(\n (\n selection: Selection<HTMLDivElement, unknown, null, undefined>,\n duration?: number\n ) => {\n if (!transitionEnabledRef.current || duration === 0) {\n return selection;\n }\n transitionRef.current = true;\n return selection\n .transition()\n .duration(duration ?? 300)\n .ease((t) => t * (2 - t)) // Ease in-out\n .on(\"end\", () => {\n transitionRef.current = false;\n });\n },\n []\n );\n\n useEffect(() => {\n getRuntime().applyPageTitle(pageTitle);\n }, [pageTitle]);\n\n useEffect(() => {\n if (error) {\n handleHttpError(error);\n }\n }, [error]);\n\n const humanInput = useCallback(\n (jobId: string, input: string) => {\n humanInputRef.current?.(jobId, input);\n },\n [humanInputRef]\n );\n\n const [sizeMap, setSizeMap] = useState<Map<string, SizeTuple> | null>(null);\n const onNodeResize = useCallback((id: string, size: SizeTuple | null) => {\n // Handle resize logic here\n setSizeMap((prev) => {\n if (!size) {\n if (!prev) {\n return null;\n }\n const newMap = new Map(prev);\n const deleted = newMap.delete(id);\n return deleted ? newMap : prev;\n }\n return prev ? new Map(prev).set(id, size) : new Map([[id, size]]);\n });\n }, []);\n\n const { sizeReady, nodes, edges } = useLayout({\n rawNodes,\n rawEdges,\n state: taskState,\n sizeMap,\n });\n\n const [hoverOnScrollableContent, setHoverOnScrollableContent] =\n useState(false);\n\n const { grabbing, transform, transformRef, zoomer /* , scaleRange */ } =\n useZoom({\n rootRef,\n zoomable: sizeReady,\n scrollable: sizeReady && !hoverOnScrollableContent,\n pannable: sizeReady,\n });\n\n const { centered, setCentered, reCenterRef } = useAutoCenter({\n nodes,\n sizeReady,\n zoomer,\n rootRef,\n selectTransition,\n });\n\n const taskDone = DONE_STATES.includes(taskState ?? \"working\");\n const taskLoading = !taskDone && nodes.length === 2;\n\n const nonLeafNodes = useMemo(() => {\n return new Set<string>(edges.map((edge) => edge.source));\n }, [edges]);\n\n const bottom = useMemo(() => {\n if (!sizeReady) {\n return null;\n }\n\n const leafNodes: GraphNode[] = [];\n for (const node of nodes) {\n if (!nonLeafNodes.has(node.id)) {\n leafNodes.push(node);\n }\n }\n if (leafNodes.length > 0) {\n const y1 = Math.max(\n ...leafNodes.map((node) => node.view!.y + node.view!.height)\n );\n return y1;\n }\n\n return null;\n }, [nodes, nonLeafNodes, sizeReady]);\n\n const bottomRef = useRef<number | null>(null);\n useEffect(() => {\n bottomRef.current = bottom;\n }, [bottom]);\n\n // Disable auto scroll when the user manually scrolled up\n const manualScrolledUpRef = useRef(false);\n\n // Make the latest (bottom most) node visible\n useEffect(() => {\n const root = rootRef.current;\n if (!root || bottom === null || manualScrolledUpRef.current) {\n return;\n }\n const { offsetHeight } = root;\n const transform = transformRef.current;\n const transformedBottom = bottom * transform.k + transform.y;\n const diffY = offsetHeight - CANVAS_PADDING_BOTTOM - transformedBottom;\n if (diffY < 0) {\n // Use `zoomer.transform()` which will not be restricted to its translate/scale extent\n zoomer.transform(\n selectTransition(\n select(root),\n diffY > -100 ? 100 : diffY < -500 ? 300 : 200\n ),\n new ZoomTransform(transform.k, transform.x, transform.y + diffY)\n );\n }\n }, [bottom, transformRef, zoomer, selectTransition]);\n\n // Detect if the user scrolled up manually\n useEffect(() => {\n const bottom = bottomRef.current;\n const root = rootRef.current;\n if (!root || bottom === null || transitionRef.current) {\n return;\n }\n const { offsetHeight } = root;\n const transformedBottom = bottom * transform.k + transform.y;\n\n const diffY = offsetHeight - CANVAS_PADDING_BOTTOM - transformedBottom;\n manualScrolledUpRef.current = diffY < 0;\n }, [transform, zoomer]);\n\n const handleReCenter = useCallback(() => {\n reCenterRef.current = true;\n setCentered(false);\n }, [reCenterRef, setCentered]);\n\n const handleScaleChange = useCallback(\n (scale: number) => {\n zoomer.scaleTo(select(rootRef.current!), scale);\n },\n [zoomer]\n );\n\n const fullRect = useMemo(() => {\n if (!sizeReady) {\n return null;\n }\n return mergeRects(nodes.map((node) => node.view!));\n }, [nodes, sizeReady]);\n\n useEffect(() => {\n if (!fullRect) {\n return;\n }\n const root = rootRef.current;\n if (!root) {\n return;\n }\n\n const distance = 20;\n const { offsetWidth, offsetHeight } = root;\n const viewportWidth = offsetWidth / transform.k;\n const viewportHeight = offsetHeight / transform.k;\n const minX = -(viewportWidth - distance - fullRect.x);\n const maxX = viewportWidth - distance + (fullRect.x + fullRect.width);\n const minY = -(viewportHeight - distance - fullRect.y);\n const maxY = viewportHeight - distance + (fullRect.y + fullRect.height);\n\n zoomer.translateExtent([\n [minX, minY],\n [maxX, maxY],\n ]);\n }, [zoomer, transform.k, fullRect]);\n\n const scrollTo = useCallback(\n ({ nodeId, jobId, behavior, block }: ScrollToOptions) => {\n /**\n * - When the node is fully visible, take no action.\n * - Otherwise, scroll to make it fully visible while make the scroll\n * distance as small as possible.\n * - Special cases:\n * - When the node is higher or wider than the viewport, scroll to\n * the top or left of the node.\n */\n const root = rootRef.current;\n const targets = nodes.filter((n) => {\n if (nodeId && n.id !== nodeId) {\n return false;\n }\n if (jobId && (n as JobGraphNode).job?.id !== jobId) {\n return false;\n }\n return true;\n });\n if (!root || targets.length === 0) {\n return;\n }\n const rect = mergeRects(targets.map((node) => node.view!));\n\n const { x, y } = getScrollTo(\n rect,\n [root.offsetWidth, root.offsetHeight],\n [\n CANVAS_PADDING_TOP,\n CANVAS_PADDING_RIGHT,\n CANVAS_PADDING_BOTTOM,\n CANVAS_PADDING_LEFT,\n ],\n transformRef.current,\n block\n );\n\n if (x || y) {\n zoomer.translateBy(\n selectTransition(\n select(root),\n behavior === \"instant\" ? 0 : undefined\n ),\n x,\n y\n );\n }\n },\n [nodes, selectTransition, transformRef, zoomer]\n );\n\n const scrollBy = useCallback(\n (\n direction: \"up\" | \"down\" | \"left\" | \"right\",\n range: \"line\" | \"page\" | \"document\"\n ) => {\n const root = rootRef.current;\n if (!root || !sizeReady) {\n return;\n }\n let x = 0;\n let y = 0;\n let duration = 300;\n let distance: number;\n const isHorizontal = direction === \"left\" || direction === \"right\";\n if (range === \"line\") {\n const lineHeight = 40;\n distance =\n lineHeight * (direction === \"up\" || direction === \"left\" ? 1 : -1);\n duration = 150;\n } else if (range === \"page\") {\n const pageHeight = root.offsetHeight - CANVAS_PADDING_BOTTOM;\n distance = pageHeight * (direction === \"up\" ? -1 : 1);\n } else {\n const { y: top, height } = mergeRects(nodes.map((node) => node.view!));\n\n if (direction === \"down\") {\n const bottom = top + height;\n const targetHeight = bottom - top + CANVAS_PADDING_BOTTOM;\n distance = root.offsetHeight - targetHeight - transformRef.current.y;\n } else {\n distance = top + CANVAS_PADDING_TOP - transformRef.current.y;\n }\n }\n\n if (isHorizontal) {\n x = distance;\n } else {\n y = distance;\n }\n\n if (x || y) {\n zoomer.translateBy(selectTransition(select(root), duration), x, y);\n }\n },\n [nodes, selectTransition, sizeReady, transformRef, zoomer]\n );\n\n const [activeToolCallJobId, setActiveToolCallJobId] = useState<string | null>(\n null\n );\n\n const [activeExpandedViewJobId, setActiveExpandedViewJobId] = useState<\n string | null\n >(null);\n\n const canvasContextValue = useMemo(\n () => ({\n humanInput,\n onShare,\n onPause,\n onResume,\n onCancel,\n onNodeResize,\n activeToolCallJobId,\n setActiveToolCallJobId,\n setActiveNodeId,\n hoverOnScrollableContent,\n setHoverOnScrollableContent,\n activeExpandedViewJobId,\n setActiveExpandedViewJobId,\n }),\n [\n activeToolCallJobId,\n hoverOnScrollableContent,\n activeExpandedViewJobId,\n onNodeResize,\n humanInput,\n onShare,\n onPause,\n onResume,\n onCancel,\n ]\n );\n\n const activeToolCallJob = useMemo(() => {\n if (!activeToolCallJobId) {\n return null;\n }\n return jobs?.find((job) => job.id === activeToolCallJobId);\n }, [activeToolCallJobId, jobs]);\n\n const handleRootClick = useCallback((e: React.MouseEvent) => {\n for (const element of e.nativeEvent.composedPath()) {\n if (\n element instanceof HTMLElement &&\n element.classList.contains(styles.node)\n ) {\n // If the click is on a node, do not reset active node\n return;\n }\n if (element === rootRef.current) {\n break;\n }\n }\n setActiveNodeId(null);\n }, []);\n\n useEffect(() => {\n const root = rootRef.current;\n if (!root || activeToolCallJob || activeExpandedViewJobId) {\n return;\n }\n\n const handleKeyDown = (e: KeyboardEvent) => {\n if (\n document.activeElement &&\n document.activeElement !== document.body &&\n document.activeElement !== root\n ) {\n return;\n }\n\n const keyboardAction = handleKeyboardNav(e, { activeNodeId, nodes });\n if (!keyboardAction) {\n return;\n }\n const { action, node } = keyboardAction;\n\n if (action === \"scroll\") {\n scrollBy(keyboardAction.direction, keyboardAction.range);\n } else if (action === \"enter\") {\n if (node.type !== \"job\" && node.type !== \"view\") {\n return;\n }\n const askUser = node.job.toolCall?.name === \"ask_human\";\n const askUserPlan =\n node.job.toolCall?.name === \"ask_human_confirming_plan\";\n if (askUser || askUserPlan) {\n return;\n }\n }\n e.preventDefault();\n e.stopPropagation();\n\n if (action === \"enter\") {\n if (node.type === \"view\") {\n setActiveExpandedViewJobId(node.job.id);\n } else {\n setActiveToolCallJobId((node as JobGraphNode).job.id);\n }\n } else if (action === \"switch-active-node\") {\n setActiveNodeId(node.id);\n if (node.type === \"job\" || node.type === \"view\") {\n scrollTo({\n jobId: node.job.id,\n behavior: \"smooth\",\n });\n } else {\n scrollTo({\n nodeId: node.id,\n behavior: \"smooth\",\n });\n }\n }\n };\n document.addEventListener(\"keydown\", handleKeyDown);\n return () => {\n document.removeEventListener(\"keydown\", handleKeyDown);\n };\n }, [\n activeNodeId,\n activeToolCallJob,\n activeExpandedViewJobId,\n nodes,\n scrollTo,\n scrollBy,\n ]);\n\n return (\n <CanvasContext.Provider value={canvasContextValue}>\n <div\n className={classNames(styles.root, { [styles.loading]: !task })}\n ref={rootRef}\n style={{\n cursor: grabbing ? \"grabbing\" : \"grab\",\n }}\n tabIndex={-1}\n onClick={handleRootClick}\n >\n {!task && (\n <div className={styles[\"loading-icon\"]}>\n <WrappedIcon\n lib=\"antd\"\n theme=\"outlined\"\n icon=\"loading-3-quarters\"\n spinning\n />\n </div>\n )}\n <div\n className={classNames(styles.canvas, {\n [styles.ready]: sizeReady && centered,\n })}\n style={{\n transform: `translate3d(${transform.x}px, ${transform.y}px, 0) scale(${transform.k})`,\n }}\n >\n <svg className={styles.edges}>\n {edges.map((edge) => (\n <path\n className={styles.edge}\n key={`${edge.source}-${edge.target}`}\n d={edge\n .points!.map(\n ({ x, y }, i) => `${i === 0 ? \"M\" : \"L\"}${x},${y}`\n )\n .join(\" \")}\n />\n ))}\n </svg>\n {nodes.map((node) => (\n <MemoizedNodeComponent\n key={node.id}\n id={node.id}\n type={node.type}\n content={(node as RequirementGraphNode).content}\n job={(node as JobGraphNode).job}\n state={node.state}\n startTime={task?.startTime}\n taskLoading={taskLoading}\n instructionLoading={\n node.type === \"instruction\" &&\n !nonLeafNodes.has(node.id) &&\n !DONE_STATES.includes(node.state ?? \"working\") &&\n !GENERAL_DONE_STATES.includes(taskState ?? \"working\")\n }\n edges={edges}\n x={node.view?.x}\n y={node.view?.y}\n active={activeNodeId === node.id}\n />\n ))}\n </div>\n </div>\n <div className={styles.widgets}>\n <div className={styles[\"nav-container\"]}>\n <ul className={styles.nav}>\n {nav?.map((item) => (\n <li\n key={item.id}\n className={classNames(styles[\"nav-item\"], {\n [styles.active]: currentNavId === item.id,\n })}\n >\n <a\n className={styles[\"nav-link\"]}\n onClick={() => {\n setActiveNodeId(`job:${item.id}`);\n scrollTo({ jobId: item.id, block: \"start\" });\n }}\n >\n <span className={styles[\"nav-link-text\"]}>{item.title}</span>\n </a>\n </li>\n ))}\n </ul>\n </div>\n <PlanProgress plan={plan} state={taskState} />\n <ZoomBar\n scale={transform.k}\n onScaleChange={handleScaleChange}\n onReCenter={handleReCenter}\n />\n </div>\n {activeToolCallJob && <ToolCallDetail job={activeToolCallJob} />}\n {activeExpandedViewJobId && <ExpandedView views={views!} />}\n </CanvasContext.Provider>\n );\n}\n\ninterface NodeComponentProps {\n id: string;\n type: GraphNode[\"type\"];\n edges: GraphEdge[];\n content?: string;\n job?: Job;\n state?: string;\n startTime?: number;\n taskLoading?: boolean;\n instructionLoading?: boolean;\n x?: number;\n y?: number;\n active?: boolean;\n}\n\nfunction NodeComponent({\n id,\n type,\n state,\n job,\n content,\n startTime,\n taskLoading,\n instructionLoading,\n x,\n y,\n active,\n}: NodeComponentProps) {\n const nodeRef = useRef<HTMLDivElement>(null);\n const { onNodeResize, setActiveNodeId } = useContext(CanvasContext);\n\n useEffect(() => {\n const element = nodeRef.current;\n if (!element) {\n return;\n }\n const observer = new ResizeObserver(() => {\n onNodeResize(id, [element.offsetWidth, element.offsetHeight]);\n });\n observer.observe(element);\n return () => {\n observer.disconnect();\n onNodeResize(id, null);\n };\n }, [id, onNodeResize]);\n\n useEffect(() => {\n const element = nodeRef.current;\n if (!element) {\n return;\n }\n const handleMouseDown = (e: MouseEvent) => {\n e.stopPropagation();\n };\n element.addEventListener(\"mousedown\", handleMouseDown);\n return () => {\n element.removeEventListener(\"mousedown\", handleMouseDown);\n };\n }, []);\n\n const handleClick = useCallback(() => {\n if (type !== \"start\" && type !== \"instruction\") {\n setActiveNodeId(id);\n }\n }, [id, setActiveNodeId, type]);\n\n return (\n <div\n className={classNames(styles.node, {\n [styles.ready]: x != null && y != null,\n })}\n ref={nodeRef}\n style={{\n left: x,\n top: y,\n }}\n onClick={handleClick}\n >\n {type === \"start\" ? (\n <NodeStart />\n ) : type === \"end\" ? (\n <NodeEnd active={active} />\n ) : type === \"requirement\" ? (\n <NodeRequirement\n content={content}\n startTime={startTime}\n loading={taskLoading}\n active={active}\n />\n ) : type === \"instruction\" ? (\n <NodeInstruction\n content={job!.instruction}\n loading={instructionLoading}\n />\n ) : type === \"view\" ? (\n <NodeView job={job!} active={active} />\n ) : (\n <NodeJob state={state} job={job!} active={active} />\n )}\n </div>\n );\n}\n"],"names":["initializeI18n","NS","locales","defineElement","property","event","method","createDecorators","MemoizedNodeComponent","memo","NodeComponent","CruiseCanvasComponent","forwardRef","LegacyCruiseCanvasComponent","_CruiseCanvas","_A","WeakMap","_B","_C","_D","_E","_CruiseCanvas_brand","WeakSet","_onShare","_F","_onPause","_G","_onResume","_H","_onCancel","_ref","CruiseCanvas","ReactNextElement","constructor","arguments","_classPrivateMethodInitSpec","_classPrivateFieldInitSpec","_initProto","_init_taskId","_init_extra_taskId","_init_task","_init_extra_task","_init_jobs","_init_extra_jobs","_init_replay","_init_extra_replay","_init_shareEvent","_init_extra_shareEvent","_classPrivateGetter","this","_get_shareEvent","emit","_init_pauseEvent","_init_extra_pauseEvent","_get_pauseEvent","_init_resumeEvent","_init_extra_resumeEvent","_get_resumeEvent","_init_cancelEvent","_init_extra_cancelEvent","_get_cancelEvent","createRef","taskId","_classPrivateFieldGet","v","_classPrivateFieldSet","task","jobs","replay","resumed","_classPrivateFieldGet2","current","render","React","onShare","onPause","onResume","onCancel","ref","_ref2","_task$title","propTask","propJobs","rootRef","useRef","_task","_jobs","plan","_plan","error","humanInputRef","resumedRef","useTaskDetail","graph","useTaskGraph","rawNodes","nodes","rawEdges","edges","nav","views","pageTitle","title","taskState","state","activeNodeId","setActiveNodeId","useState","currentNavId","useMemo","type","jobId","split","useImperativeHandle","_resumedRef$current","call","transitionEnabledRef","useEffect","timer","setTimeout","clearTimeout","transitionRef","selectTransition","useCallback","selection","duration","transition","ease","t","on","getRuntime","applyPageTitle","handleHttpError","humanInput","input","_humanInputRef$curren","sizeMap","setSizeMap","onNodeResize","id","size","prev","newMap","Map","delete","set","sizeReady","useLayout","hoverOnScrollableContent","setHoverOnScrollableContent","grabbing","transform","transformRef","zoomer","useZoom","zoomable","scrollable","pannable","centered","setCentered","reCenterRef","useAutoCenter","taskLoading","DONE_STATES","includes","length","nonLeafNodes","Set","map","edge","source","bottom","leafNodes","node","has","push","Math","max","view","y","height","bottomRef","manualScrolledUpRef","root","offsetHeight","transformedBottom","k","diffY","CANVAS_PADDING_BOTTOM","select","ZoomTransform","x","handleReCenter","handleScaleChange","scale","scaleTo","fullRect","mergeRects","offsetWidth","viewportWidth","viewportHeight","minX","maxX","width","minY","maxY","translateExtent","scrollTo","_ref3","nodeId","behavior","block","targets","filter","n","_job","job","rect","getScrollTo","CANVAS_PADDING_TOP","CANVAS_PADDING_RIGHT","CANVAS_PADDING_LEFT","translateBy","undefined","scrollBy","direction","range","distance","isHorizontal","top","targetHeight","activeToolCallJobId","setActiveToolCallJobId","activeExpandedViewJobId","setActiveExpandedViewJobId","canvasContextValue","activeToolCallJob","find","handleRootClick","e","element","nativeEvent","composedPath","HTMLElement","classList","contains","styles","handleKeyDown","document","activeElement","body","keyboardAction","handleKeyboardNav","action","_node$job$toolCall","_node$job$toolCall2","askUser","toolCall","name","askUserPlan","preventDefault","stopPropagation","addEventListener","removeEventListener","CanvasContext","Provider","value","className","classNames","loading","style","cursor","tabIndex","onClick","WrappedIcon","lib","theme","icon","spinning","canvas","ready","key","target","d","points","_ref4","i","join","_node$state","_node$view","_node$view2","content","startTime","instructionLoading","GENERAL_DONE_STATES","active","widgets","item","PlanProgress","ZoomBar","onScaleChange","onReCenter","ToolCallDetail","ExpandedView","_ref5","nodeRef","useContext","observer","ResizeObserver","observe","disconnect","handleMouseDown","handleClick","left","NodeStart","NodeEnd","NodeRequirement","NodeInstruction","instruction","NodeView","NodeJob","_CruiseCanvas2","_set_shareEvent","_set_pauseEvent","_set_resumeEvent","_set_cancelEvent","c","_initClass","_applyDecs","shadowOptions","attribute","Number","o","_","_checkInRHS"],"sourceRoot":""}