@next-bricks/ai-portal 0.56.2 → 0.58.0

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 (108) hide show
  1. package/dist/bricks.json +44 -34
  2. package/dist/chunks/1488.89557180.js +2 -0
  3. package/dist/chunks/1488.89557180.js.map +1 -0
  4. package/dist/chunks/151.b87bccc0.js +2 -0
  5. package/dist/chunks/151.b87bccc0.js.map +1 -0
  6. package/dist/chunks/2232.75f1ab0f.js +2 -0
  7. package/dist/chunks/2232.75f1ab0f.js.map +1 -0
  8. package/dist/chunks/3848.01a4987f.js +3 -0
  9. package/dist/chunks/3848.01a4987f.js.map +1 -0
  10. package/dist/chunks/4002.68156a0e.js +3 -0
  11. package/dist/chunks/4002.68156a0e.js.map +1 -0
  12. package/dist/chunks/7041.d7408449.js +2 -0
  13. package/dist/chunks/7041.d7408449.js.map +1 -0
  14. package/dist/chunks/9496.08074e2b.js +2 -0
  15. package/dist/chunks/9496.08074e2b.js.map +1 -0
  16. package/dist/chunks/chat-box.1b2a4a02.js +2 -0
  17. package/dist/chunks/chat-box.1b2a4a02.js.map +1 -0
  18. package/dist/chunks/chat-input.3ca07b82.js +2 -0
  19. package/dist/chunks/chat-input.3ca07b82.js.map +1 -0
  20. package/dist/chunks/chat-stream.a7c4f58d.js +2 -0
  21. package/dist/chunks/chat-stream.a7c4f58d.js.map +1 -0
  22. package/dist/chunks/cruise-canvas.b444c4ca.js +2 -0
  23. package/dist/chunks/cruise-canvas.b444c4ca.js.map +1 -0
  24. package/dist/chunks/{main.e3031a8c.js → main.703a0465.js} +2 -2
  25. package/dist/chunks/{main.e3031a8c.js.map → main.703a0465.js.map} +1 -1
  26. package/dist/chunks/notice-dropdown.37b8ffb2.js +2 -0
  27. package/dist/chunks/notice-dropdown.37b8ffb2.js.map +1 -0
  28. package/dist/examples.json +20 -17
  29. package/dist/images/0155287e.svg +18 -0
  30. package/dist/images/0e89dec0.svg +19 -0
  31. package/dist/images/218d5865.svg +18 -0
  32. package/dist/images/391238ae.png +0 -0
  33. package/dist/images/96be9327.png +0 -0
  34. package/dist/images/dcee4821.svg +12 -0
  35. package/dist/index.7d751c21.js +2 -0
  36. package/dist/index.7d751c21.js.map +1 -0
  37. package/dist/manifest.json +299 -214
  38. package/dist/types.json +1442 -511
  39. package/dist-types/bootstrap.d.ts +1 -0
  40. package/dist-types/chat-box/index.d.ts +3 -12
  41. package/dist-types/chat-input/index.d.ts +5 -2
  42. package/dist-types/chat-stream/ChatStream.d.ts +1 -1
  43. package/dist-types/chat-stream/UserMessage/UserMessage.d.ts +3 -2
  44. package/dist-types/chat-stream/index.d.ts +3 -1
  45. package/dist-types/chat-stream/interfaces.d.ts +2 -1
  46. package/dist-types/cruise-canvas/CanvasContext.d.ts +0 -2
  47. package/dist-types/cruise-canvas/CruiseCanvas.d.ts +1 -1
  48. package/dist-types/cruise-canvas/FileList/FileList.d.ts +2 -1
  49. package/dist-types/cruise-canvas/Nav/Nav.d.ts +3 -6
  50. package/dist-types/cruise-canvas/NodeRequirement/NodeRequirement.d.ts +3 -2
  51. package/dist-types/cruise-canvas/i18n.d.ts +0 -2
  52. package/dist-types/cruise-canvas/index.d.ts +3 -1
  53. package/dist-types/cruise-canvas/interfaces.d.ts +2 -5
  54. package/dist-types/cruise-canvas/useConversationDetail.d.ts +2 -2
  55. package/dist-types/cruise-canvas/useConversationGraph.d.ts +0 -1
  56. package/dist-types/notice-dropdown/i18n.d.ts +18 -0
  57. package/dist-types/notice-dropdown/index.d.ts +61 -0
  58. package/dist-types/notice-dropdown/index.spec.d.ts +1 -0
  59. package/dist-types/shared/FilePreview/FilePreview.d.ts +9 -0
  60. package/dist-types/shared/FilePreview/FilePreviewDrawer.d.ts +6 -0
  61. package/dist-types/shared/FilePreview/i18n.d.ts +18 -0
  62. package/dist-types/shared/FileUpload/GlobalDragOverlay.d.ts +8 -0
  63. package/dist-types/shared/FileUpload/GlobalDragOverlay.spec.d.ts +1 -0
  64. package/dist-types/{chat-box → shared/FileUpload}/UploadButton.d.ts +2 -0
  65. package/dist-types/shared/FileUpload/UploadedFiles.d.ts +10 -0
  66. package/dist-types/shared/FileUpload/acceptFiles.d.ts +1 -0
  67. package/dist-types/shared/FileUpload/acceptFiles.spec.d.ts +1 -0
  68. package/dist-types/shared/FileUpload/i18n.d.ts +18 -0
  69. package/dist-types/{chat-box → shared/FileUpload}/interfaces.d.ts +1 -1
  70. package/dist-types/shared/PlanProgress/PlanProgress.d.ts +15 -0
  71. package/dist-types/shared/PlanProgress/i18n.d.ts +15 -0
  72. package/dist-types/shared/TaskContext.d.ts +4 -2
  73. package/dist-types/shared/bricks.d.ts +1 -0
  74. package/dist-types/shared/interfaces.d.ts +23 -5
  75. package/dist-types/shared/useFilesUploading.d.ts +12 -0
  76. package/dist-types/shared/useFilesUploading.spec.d.ts +1 -0
  77. package/dist-types/shared/useServiceFlowPlan.d.ts +2 -0
  78. package/dist-types/shared/useServiceFlowPlan.spec.d.ts +1 -0
  79. package/docs/notice-dropdown.md +101 -0
  80. package/package.json +2 -2
  81. package/dist/chunks/1510.ba18a788.js +0 -2
  82. package/dist/chunks/1510.ba18a788.js.map +0 -1
  83. package/dist/chunks/161.6c50f07c.js +0 -3
  84. package/dist/chunks/161.6c50f07c.js.map +0 -1
  85. package/dist/chunks/1864.7e31d8fe.js +0 -2
  86. package/dist/chunks/1864.7e31d8fe.js.map +0 -1
  87. package/dist/chunks/6995.65da5073.js +0 -2
  88. package/dist/chunks/6995.65da5073.js.map +0 -1
  89. package/dist/chunks/7279.af201b60.js +0 -3
  90. package/dist/chunks/7279.af201b60.js.map +0 -1
  91. package/dist/chunks/7517.f62fe00f.js +0 -2
  92. package/dist/chunks/7517.f62fe00f.js.map +0 -1
  93. package/dist/chunks/9270.e909e789.js +0 -2
  94. package/dist/chunks/9270.e909e789.js.map +0 -1
  95. package/dist/chunks/chat-box.4d1d4fd9.js +0 -2
  96. package/dist/chunks/chat-box.4d1d4fd9.js.map +0 -1
  97. package/dist/chunks/chat-input.dd3d2035.js +0 -2
  98. package/dist/chunks/chat-input.dd3d2035.js.map +0 -1
  99. package/dist/chunks/chat-stream.9f07e680.js +0 -2
  100. package/dist/chunks/chat-stream.9f07e680.js.map +0 -1
  101. package/dist/chunks/cruise-canvas.eca7469a.js +0 -2
  102. package/dist/chunks/cruise-canvas.eca7469a.js.map +0 -1
  103. package/dist/index.9a811707.js +0 -2
  104. package/dist/index.9a811707.js.map +0 -1
  105. package/dist-types/chat-box/FileListComponent.d.ts +0 -8
  106. package/dist-types/cruise-canvas/FilePreview/FilePreview.d.ts +0 -6
  107. /package/dist/chunks/{7279.af201b60.js.LICENSE.txt → 3848.01a4987f.js.LICENSE.txt} +0 -0
  108. /package/dist/chunks/{161.6c50f07c.js.LICENSE.txt → 4002.68156a0e.js.LICENSE.txt} +0 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chunks/9496.08074e2b.js","mappings":"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","sources":["webpack:///./src/cruise-canvas/Nav/Nav.module.css","webpack:///./src/cruise-canvas/NodeLoading/NodeLoading.module.css","webpack:///../../src/mergeRects.ts","webpack:///./src/cruise-canvas/styles.module.css?7c94","webpack:///./src/cruise-canvas/constants.ts","webpack:///./src/cruise-canvas/NodeJob/NodeJob.module.css?69ec","webpack:///./src/cruise-canvas/useZoom.ts","webpack:///./src/cruise-canvas/useLayout.ts","webpack:///./src/cruise-canvas/ZoomBar/ZoomBar.module.css?7d53","webpack:///./src/cruise-canvas/ZoomBar/ZoomBar.tsx","webpack:///./src/cruise-canvas/NodeStart/NodeStart.module.css?c135","webpack:///./src/cruise-canvas/NodeStart/NodeStart.tsx","webpack:///./src/cruise-canvas/NodeRequirement/NodeRequirement.module.css?7927","webpack:///./src/cruise-canvas/NodeRequirement/NodeRequirement.tsx","webpack:///./src/cruise-canvas/NodeInstruction/NodeInstruction.module.css?5e68","webpack:///./src/cruise-canvas/NodeInstruction/NodeInstruction.tsx","webpack:///./src/cruise-canvas/AIEmployeeAvatar/AIEmployeeAvatar.module.css?6f51","webpack:///./src/cruise-canvas/AIEmployeeAvatar/AIEmployeeAvatar.tsx","webpack:///./src/cruise-canvas/NodeJob/NodeJob.tsx","webpack:///./src/cruise-canvas/NodeEnd/NodeEnd.module.css?bd4b","webpack:///./src/cruise-canvas/NodeEnd/NodeEnd.tsx","webpack:///./src/cruise-canvas/ToolCallDetail/ToolCallDetail.module.css?7f00","webpack:///./src/cruise-canvas/ToolCallDetail/ToolCallDetail.tsx","webpack:///./src/cruise-canvas/utils/handleKeyboardNav.ts","webpack:///./src/cruise-canvas/Nav/Nav.module.css?7d2d","webpack:///./src/cruise-canvas/Nav/Nav.tsx","webpack:///./src/cruise-canvas/NodeLoading/NodeLoading.module.css?c803","webpack:///./src/cruise-canvas/NodeLoading/NodeLoading.tsx","webpack:///./src/shared/JsxEditor/JsxEditor.module.css?1c9c","webpack:///./src/shared/JsxEditor/JsxEditor.tsx","webpack:///./src/cruise-canvas/NodeError/NodeError.module.css?3e0b","webpack:///./src/cruise-canvas/NodeError/NodeError.tsx","webpack:///./src/cruise-canvas/NodeChunk/NodeChunk.tsx","webpack:///./src/cruise-canvas/CruiseCanvas.tsx","webpack:///./src/cruise-canvas/useConversationGraph.ts","webpack:///./src/cruise-canvas/useAutoCenter.ts","webpack:///./src/cruise-canvas/utils/getScrollTo.ts","webpack:///./src/cruise-canvas/AIEmployeeAvatar/AIEmployeeAvatar.module.css","webpack:///./src/cruise-canvas/styles.module.css","webpack:///./src/cruise-canvas/NodeRequirement/NodeRequirement.module.css","webpack:///./src/shared/JsxEditor/JsxEditor.module.css","webpack:///./src/cruise-canvas/NodeJob/NodeJob.module.css","webpack:///./src/cruise-canvas/NodeStart/NodeStart.module.css","webpack:///./src/cruise-canvas/NodeInstruction/NodeInstruction.module.css","webpack:///./src/cruise-canvas/NodeEnd/NodeEnd.module.css","webpack:///./src/cruise-canvas/ZoomBar/ZoomBar.module.css","webpack:///./src/cruise-canvas/ToolCallDetail/ToolCallDetail.module.css","webpack:///./src/cruise-canvas/NodeError/NodeError.module.css"],"sourcesContent":["// Imports\nimport ___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/noSourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `.container--nviLvTo4{position:absolute;right:0;top:72px;bottom:72px;padding:48px 0;overflow-y:auto;scrollbar-width:none;pointer-events:none}.nav--lm9zwHhG{list-style:none;margin:0;padding:20px 0;background:rgba(255,255,255,0);-webkit-backdrop-filter:blur(18px);backdrop-filter:blur(18px);pointer-events:auto}.container--nviLvTo4,\n.nav--lm9zwHhG{border-radius:8px 0px 0px 8px}.link--sJDeRfjL{display:flex;align-items:center;width:170px;height:36px;border-radius:18px 0 0 18px;padding:0 24px 0 16px;font-size:13px}.link--sJDeRfjL,\n.link--sJDeRfjL:hover{color:rgba(93,105,126,0.7)}.link--sJDeRfjL.disabled--UpGab11N{cursor:default}.item--B4GvcxMx:not(:first-child){margin-top:12px}.icon--YLvYVRdC{margin-right:12px;font-size:14px;color:#abaab7}.text--PwKz_ODc{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.link--sJDeRfjL:not(.disabled--UpGab11N):hover,\n.item--B4GvcxMx.active--DwuLIQY_ .link--sJDeRfjL{background-color:rgba(255,255,255,0.2)}.item--B4GvcxMx.active--DwuLIQY_ .link--sJDeRfjL{font-size:14px;color:#424a58;padding-right:16px}.completed--ZPZ8DEeN .icon--YLvYVRdC{color:#0fbe59}.failed--dxvB8UKT .icon--YLvYVRdC{color:#f24c25}.working--IbqFvpPm .icon--YLvYVRdC{color:var(--elevo-color-brand)}.input-required--zcO5ZufK .icon--YLvYVRdC{color:#12aacc}.canceled--GqvLm_YF .icon--YLvYVRdC{color:#fcaa07}@media (max-height: 639px){.container--nviLvTo4{padding:0}}@media (max-width: 719px){.container--nviLvTo4{display:none}}`, \"\"]);\n// Exports\n___CSS_LOADER_EXPORT___.locals = {\n\t\"container\": `container--nviLvTo4`,\n\t\"nav\": `nav--lm9zwHhG`,\n\t\"link\": `link--sJDeRfjL`,\n\t\"disabled\": `disabled--UpGab11N`,\n\t\"item\": `item--B4GvcxMx`,\n\t\"icon\": `icon--YLvYVRdC`,\n\t\"text\": `text--PwKz_ODc`,\n\t\"active\": `active--DwuLIQY_`,\n\t\"completed\": `completed--ZPZ8DEeN`,\n\t\"failed\": `failed--dxvB8UKT`,\n\t\"working\": `working--IbqFvpPm`,\n\t\"input-required\": `input-required--zcO5ZufK`,\n\t\"canceled\": `canceled--GqvLm_YF`\n};\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/noSourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `.loading--LlSQxd6c{width:24px;height:24px;display:flex;align-items:center;justify-content:center;background:rgba(69,94,255,0.5);border-radius:24px;animation:loading--LlSQxd6c 1s infinite linear}.inner--I4b7rAPw{width:12px;height:12px;background:rgb(69,94,255);border-radius:12px}@keyframes loading--LlSQxd6c{0%{transform:scale(1);opacity:1}100%{transform:scale(1.5);opacity:0}}`, \"\"]);\n// Exports\n___CSS_LOADER_EXPORT___.locals = {\n\t\"loading\": `loading--LlSQxd6c`,\n\t\"inner\": `inner--I4b7rAPw`\n};\nexport default ___CSS_LOADER_EXPORT___;\n","export interface Rect {\n x: number;\n y: number;\n width: number;\n height: number;\n}\n\n/**\n * Merges multiple rectangles into a single bounding rectangle.\n */\nexport function mergeRects(rects: Rect[]): Rect {\n let left = Infinity;\n let top = Infinity;\n let right = -Infinity;\n let bottom = -Infinity;\n for (const rect of rects) {\n const r = rect.x + rect.width;\n const b = rect.y + rect.height;\n if (rect.x < left) {\n left = rect.x;\n }\n if (r > right) {\n right = r;\n }\n if (rect.y < top) {\n top = rect.y;\n }\n if (b > bottom) {\n bottom = b;\n }\n }\n\n const width = right - left;\n const height = bottom - top;\n\n return { x: left, y: top, width, height };\n}\n","\n import API from \"!../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[3].use[1]!../../../../node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[3].use[2]!./styles.module.css\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\noptions.insert = insertFn.bind(null, \"head\");\noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[3].use[1]!../../../../node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[3].use[2]!./styles.module.css\";\n export default content && content.locals ? content.locals : undefined;\n","export const DEFAULT_SCALE_RANGE_MIN = 0.5;\nexport const DEFAULT_SCALE_RANGE_MAX = 2;\nexport const START_NODE_ID = \"<START>\";\nexport const END_NODE_ID = \"<END>\";\nexport const FEEDBACK_NODE_ID = \"<FEEDBACK>\";\nexport const REQUIREMENT_NODE_ID = \"<REQUIREMENT>\";\nexport const LOADING_NODE_ID = \"<LOADING>\";\nexport const ERROR_NODE_ID = \"<ERROR>\";\nexport const REPLAY_NODE_ID = \"<REPLAY>\";\nexport const CANVAS_PADDING_TOP = 20;\nexport const CANVAS_PADDING_RIGHT = 20;\n// 20 + 48 + 8 + 26 + 20\nexport const CANVAS_PADDING_BOTTOM = 122;\nexport const CANVAS_PADDING_LEFT = 160;\nexport const RANK_SEP = 40;\nexport const NODE_SEP = 42;\nexport const EDGE_SEP = 10;\n\n// istanbul ignore next\nexport const IS_MAC = /mac/i.test(\n (\n navigator as Navigator & {\n userAgentData?: {\n platform: string;\n };\n }\n ).userAgentData?.platform ??\n navigator.platform ??\n navigator.userAgent\n);\n","\n import API from \"!../../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[3].use[1]!../../../../../node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[3].use[2]!./NodeJob.module.css\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\noptions.insert = insertFn.bind(null, \"head\");\noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[3].use[1]!../../../../../node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[3].use[2]!./NodeJob.module.css\";\n export default content && content.locals ? content.locals : undefined;\n","// istanbul ignore file: hard to test with d3-zoom\nimport React, { useEffect, useMemo, useRef, useState } from \"react\";\nimport { select } from \"d3-selection\";\nimport { zoom, type ZoomBehavior } from \"d3-zoom\";\nimport type {\n RangeTuple,\n TransformLiteral /* , ActiveTarget */,\n} from \"./interfaces\";\nimport {\n DEFAULT_SCALE_RANGE_MIN,\n DEFAULT_SCALE_RANGE_MAX,\n IS_MAC,\n} from \"./constants\";\n// import type { ActiveTarget } from \"./interfaces\";\nimport jobStyles from \"./NodeJob/NodeJob.module.css\";\n\nexport interface UseZoomOptions {\n rootRef: React.RefObject<HTMLDivElement>;\n zoomable?: boolean;\n scrollable?: boolean;\n pannable?: boolean;\n pannableWithCtrl?: boolean;\n scaleRange?: RangeTuple;\n manualScrolledUpRef: React.MutableRefObject<boolean>;\n onSwitchActiveTarget?(target: unknown | null): void;\n}\n\nexport interface UseZoomResult {\n grabbing: boolean;\n transform: TransformLiteral;\n transformRef: React.MutableRefObject<TransformLiteral>;\n scaleRange: RangeTuple;\n zoomer: ZoomBehavior<HTMLDivElement, unknown>;\n}\n\n// istanbul ignore next\nfunction wheelData(event: WheelEvent) {\n // On Windows with normal mouse, deltaY is too big when scroll with ctrlKey pressed,\n // which cause the zooming too fast.\n // While on mac OS, we need to keep default behavior of d3-zoom.\n return (\n -event.deltaY *\n (event.deltaMode === 1 ? 0.05 : event.deltaMode ? 1 : 0.002) *\n (event.ctrlKey && IS_MAC ? 10 : 1)\n );\n}\n\nexport function useZoom({\n rootRef,\n zoomable,\n scrollable,\n pannable,\n pannableWithCtrl,\n scaleRange: _scaleRange,\n manualScrolledUpRef,\n onSwitchActiveTarget,\n}: UseZoomOptions): UseZoomResult {\n const [grabbing, setGrabbing] = useState(false);\n const [transform, setTransform] = useState<TransformLiteral>({\n k: 1,\n x: 0,\n y: 0,\n });\n const transformRef = useRef(transform);\n\n const scaleRange = useMemo(\n () =>\n _scaleRange ??\n ([DEFAULT_SCALE_RANGE_MIN, DEFAULT_SCALE_RANGE_MAX] as RangeTuple),\n [_scaleRange]\n );\n\n const zoomer = useMemo(\n () => zoom<HTMLDivElement, unknown>().wheelDelta(wheelData),\n []\n );\n\n // istanbul ignore next: d3-zoom currently hard to test\n useEffect(() => {\n let moved = false;\n zoomer\n .scaleExtent(zoomable ? scaleRange : [1, 1])\n .on(\"start\", () => {\n moved = false;\n setGrabbing(true);\n })\n .on(\"zoom\", (e: { transform: TransformLiteral }) => {\n moved = true;\n setTransform(e.transform);\n transformRef.current = e.transform;\n })\n .on(\"end\", () => {\n setGrabbing(false);\n if (!moved) {\n onSwitchActiveTarget?.(null);\n }\n })\n .filter(\n (event) =>\n // For wheel event, ignore d3 default behavior, because we control it manually.\n // Except for the trackpad pinch event on Mac OS (with ctrlKey).\n (event.type === \"wheel\"\n ? event.ctrlKey\n : pannableWithCtrl\n ? pannable || event.ctrlKey\n : !event.ctrlKey) && !event.button\n );\n }, [\n onSwitchActiveTarget,\n scaleRange,\n zoomable,\n zoomer,\n pannableWithCtrl,\n pannable,\n ]);\n\n useEffect(() => {\n if (pannableWithCtrl) {\n const onContextMenu = (e: MouseEvent) => {\n if (e.ctrlKey) {\n e.preventDefault();\n }\n };\n document.addEventListener(\"contextmenu\", onContextMenu, true);\n return () => {\n document.removeEventListener(\"contextmenu\", onContextMenu, true);\n };\n }\n }, [pannableWithCtrl]);\n\n // istanbul ignore next: d3-zoom currently hard to test\n useEffect(() => {\n const root = rootRef.current;\n if (!root) {\n return;\n }\n\n const rootSelection = select(root);\n\n const unsetZoom = () => {\n rootSelection\n .on(\".zoom\", null)\n .on(\".zoom.custom\", null)\n .on(\"wheel\", null);\n };\n\n if (!(zoomable || scrollable || pannable)) {\n unsetZoom();\n return;\n }\n\n if (zoomable || scrollable) {\n // Do not override default d3 zoom handler.\n // Only handles *panning*\n rootSelection.on(\n \"wheel.zoom.custom\",\n (e: WheelEvent & { wheelDeltaX: number; wheelDeltaY: number }) => {\n // Mac OS trackpad pinch event is emitted as a wheel.zoom and d3.event.ctrlKey set to true\n if (!e.ctrlKey && scrollable) {\n const node = (e.target as HTMLElement).closest(\n `.${jobStyles.body}`\n );\n if (node) {\n if (checkScrollableY(node, e.deltaY)) {\n return;\n }\n }\n\n if (e.cancelable) {\n if (e.deltaY < 0) {\n manualScrolledUpRef.current = true;\n }\n e.preventDefault();\n zoomer.translateBy(\n rootSelection,\n e.wheelDeltaX / 5,\n e.wheelDeltaY / 5\n );\n }\n }\n // zoomer.scaleBy(rootSelection, Math.pow(2, defaultWheelDelta(e)))\n }\n );\n }\n\n rootSelection\n .call(zoomer)\n .on(\"wheel\", (e: WheelEvent) => {\n if (scrollable || (zoomable && e.ctrlKey)) {\n e.preventDefault();\n }\n })\n .on(\"dblclick.zoom\", null);\n\n if (!pannable && !pannableWithCtrl) {\n rootSelection.on(\"mousedown.zoom\", null);\n }\n\n if (!pannable) {\n rootSelection\n .on(\"touchstart.zoom\", null)\n .on(\"touchmove.zoom\", null)\n .on(\"touchend.zoom\", null);\n }\n\n return unsetZoom;\n }, [\n pannableWithCtrl,\n pannable,\n rootRef,\n manualScrolledUpRef,\n scrollable,\n zoomable,\n zoomer,\n ]);\n\n return { grabbing, transform, transformRef, zoomer, scaleRange };\n}\n\n// 检查元素是否还能滚动\nfunction checkScrollableY(element: Element, delta: number) {\n if (!delta) {\n return false;\n }\n const isScrollingDown = delta > 0;\n // 还能向下滚动 或 还能向上滚动\n if (isScrollingDown) {\n const maxScroll = element.scrollHeight - element.clientHeight;\n return element.scrollTop <= maxScroll - 1;\n }\n return element.scrollTop >= 1;\n}\n\n// 检查元素是否还能滚动\n// function checkScrollableX(element: Element, delta: number) {\n// if (!delta) {\n// return false;\n// }\n// const isScrollingRight = delta > 0; // Updated variable name for clarity\n// // 还能向右滚动 或 还能向左滚动\n// if (isScrollingRight) {\n// const maxScroll = element.scrollWidth - element.clientWidth; // Changed to scrollWidth and clientWidth\n// return element.scrollLeft <= maxScroll - 1; // Changed to scrollLeft\n// }\n// return element.scrollLeft >= 1;\n// }\n","import dagre from \"@dagrejs/dagre\";\nimport { useMemo, useRef } from \"react\";\nimport type {\n NodePosition,\n NodeRect,\n GraphEdge,\n GraphNode,\n SizeTuple,\n} from \"./interfaces\";\nimport {\n EDGE_SEP,\n END_NODE_ID,\n FEEDBACK_NODE_ID,\n NODE_SEP,\n RANK_SEP,\n REPLAY_NODE_ID,\n START_NODE_ID,\n} from \"./constants\";\n\nexport interface UseLayoutOptions {\n rawNodes: GraphNode[] | undefined;\n rawEdges: GraphEdge[] | undefined;\n sizeMap: Map<string, SizeTuple> | null;\n completed?: boolean;\n failed?: boolean;\n finished?: boolean;\n showFeedback?: boolean;\n showFeedbackAfterFailed?: boolean;\n replay?: boolean;\n}\n\nexport function useLayout({\n rawNodes: _rawNodes,\n rawEdges: _rawEdges,\n sizeMap,\n completed,\n failed,\n finished,\n showFeedback,\n showFeedbackAfterFailed,\n replay,\n}: UseLayoutOptions) {\n const memoizedPositionsRef = useRef<Map<string, NodePosition> | null>(null);\n\n const { initialNodes, initialEdges } = useMemo(() => {\n const initialNodes: GraphNode[] = [\n {\n type: \"start\",\n id: START_NODE_ID,\n },\n ];\n const initialEdges: GraphEdge[] = [];\n const finishedNodeIds: string[] = [];\n const rawNodes = _rawNodes ?? [];\n const rawEdges = _rawEdges ?? [];\n\n const hasSource = new Set<string>(rawEdges.map((edge) => edge.target));\n const failedFeedback = failed && showFeedback && showFeedbackAfterFailed;\n const shouldAppend = replay ? finished : completed || failedFeedback;\n const hasTarget = shouldAppend\n ? new Set<string>(rawEdges.map((edge) => edge.source))\n : null;\n\n for (const node of rawNodes) {\n if (!hasSource.has(node.id)) {\n initialEdges.push({\n source: START_NODE_ID,\n target: node.id,\n });\n }\n\n if (shouldAppend && !hasTarget!.has(node.id)) {\n finishedNodeIds.push(node.id);\n }\n }\n\n initialNodes.push(...rawNodes);\n initialEdges.push(...rawEdges);\n\n if (finishedNodeIds.length > 0) {\n let sourceIds = finishedNodeIds;\n\n if (replay) {\n if (finished) {\n initialNodes.push({\n id: END_NODE_ID,\n type: \"end\",\n });\n initialEdges.push(\n ...sourceIds.map((id) => ({\n source: id,\n target: END_NODE_ID,\n }))\n );\n initialNodes.push({\n id: REPLAY_NODE_ID,\n type: \"replay\",\n });\n initialEdges.push({\n source: END_NODE_ID,\n target: REPLAY_NODE_ID,\n });\n }\n } else {\n if (completed) {\n initialNodes.push({\n id: END_NODE_ID,\n type: \"end\",\n });\n initialEdges.push(\n ...sourceIds.map((id) => ({\n source: id,\n target: END_NODE_ID,\n }))\n );\n sourceIds = [END_NODE_ID];\n }\n\n if (showFeedback && (completed || failedFeedback)) {\n initialNodes.push({\n id: FEEDBACK_NODE_ID,\n type: \"feedback\",\n });\n for (const id of sourceIds) {\n initialEdges.push({\n source: id,\n target: FEEDBACK_NODE_ID,\n });\n }\n }\n }\n }\n\n const memoizedPositions = memoizedPositionsRef.current;\n if (memoizedPositions) {\n for (const node of initialNodes) {\n const view = memoizedPositions.get(node.id);\n if (view) {\n node.view = view as NodeRect;\n }\n }\n }\n\n return { initialNodes, initialEdges };\n }, [\n _rawNodes,\n _rawEdges,\n completed,\n failed,\n finished,\n showFeedback,\n showFeedbackAfterFailed,\n replay,\n ]);\n\n const startNodePositionRef = useRef<NodePosition | null>(null);\n\n return useMemo(() => {\n for (const node of initialNodes) {\n if (!sizeMap?.has(node.id)) {\n return { sizeReady: false, nodes: initialNodes, edges: [] };\n }\n }\n\n const graph = new dagre.graphlib.Graph();\n graph.setGraph({\n rankdir: \"TB\",\n nodesep: NODE_SEP,\n edgesep: EDGE_SEP,\n ranksep: RANK_SEP,\n });\n // Default to assigning a new object as a label for each new edge.\n graph.setDefaultEdgeLabel(function () {\n return {};\n });\n for (const edge of initialEdges) {\n graph.setEdge(edge.source, edge.target);\n }\n for (const node of initialNodes) {\n const [width, height] = sizeMap!.get(node.id)!;\n graph.setNode(node.id, {\n id: node.id,\n width,\n height,\n });\n }\n dagre.layout(graph);\n\n // Make the start node position unchanged\n let offsets: NodePosition | null = null;\n\n const nodes = initialNodes.map<GraphNode>((node) => {\n const nodeView = graph.node(node.id);\n const x = nodeView.x - nodeView.width / 2;\n const y = nodeView.y - nodeView.height / 2;\n\n if (node.type === \"start\") {\n if (startNodePositionRef.current) {\n offsets = {\n x: startNodePositionRef.current.x - x,\n y: startNodePositionRef.current.y - y,\n };\n } else {\n startNodePositionRef.current = { x, y };\n }\n }\n\n return {\n ...node,\n view: {\n x,\n y,\n width: nodeView.width,\n height: nodeView.height,\n },\n };\n });\n\n if (offsets) {\n for (const node of nodes) {\n Object.assign(node.view!, getPositionWithOffsets(node.view!, offsets));\n }\n }\n\n const memoizedPositions = (memoizedPositionsRef.current ??= new Map());\n for (const node of nodes) {\n const { x, y } = node.view!;\n memoizedPositions.set(node.id, { x, y });\n }\n\n const edges = initialEdges.map((edge) => {\n const source = graph.node(edge.source);\n const sourcePosition = getPositionWithOffsets(source, offsets);\n const target = graph.node(edge.target);\n const targetPosition = getPositionWithOffsets(target, offsets);\n // const turnY =\n // (sourcePosition.y +\n // source.height / 2 +\n // targetPosition.y -\n // target.height / 2) /\n // 2;\n const turnY = targetPosition.y - (target.height + RANK_SEP) / 2;\n const points: NodePosition[] = [\n { x: sourcePosition.x, y: sourcePosition.y + source.height / 2 },\n { x: sourcePosition.x, y: turnY },\n { x: targetPosition.x, y: turnY },\n { x: targetPosition.x, y: targetPosition.y - target.height / 2 },\n ];\n\n return {\n ...edge,\n points,\n };\n });\n\n return {\n sizeReady: true,\n nodes,\n edges,\n };\n }, [initialEdges, initialNodes, sizeMap]);\n}\n\nfunction getPositionWithOffsets<T extends NodePosition>(\n position: T,\n offsets: NodePosition | null\n): NodePosition {\n if (!offsets) {\n return {\n x: position.x,\n y: position.y,\n };\n }\n return {\n x: position.x + offsets.x,\n y: position.y + offsets.y,\n };\n}\n","\n import API from \"!../../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[3].use[1]!../../../../../node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[3].use[2]!./ZoomBar.module.css\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\noptions.insert = insertFn.bind(null, \"head\");\noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[3].use[1]!../../../../../node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[3].use[2]!./ZoomBar.module.css\";\n export default content && content.locals ? content.locals : undefined;\n","// istanbul ignore file: experimental\nimport React, { useCallback } from \"react\";\nimport type { GeneralIconProps } from \"@next-bricks/icons/general-icon\";\nimport styles from \"./ZoomBar.module.css\";\nimport toolbarStyles from \"../toolbar.module.css\";\nimport { WrappedIconButton } from \"../../shared/bricks\";\nimport { K, t } from \"../i18n\";\nimport { ICON_CHAT } from \"../../shared/constants\";\n\nconst ICON_BACK_TO_CENTER: GeneralIconProps = {\n lib: \"easyops\",\n icon: \"back-to-center\",\n};\nconst ICON_ZOOM_OUT: GeneralIconProps = {\n lib: \"antd\",\n icon: \"minus-circle\",\n};\nconst ICON_ZOOM_IN: GeneralIconProps = {\n lib: \"antd\",\n icon: \"plus-circle\",\n};\n\nexport interface ZoomBarProps {\n scale: number;\n showUiSwitch?: boolean;\n onScaleChange?: (scale: number) => void;\n onReCenter?: () => void;\n onSwitchToChat?: () => void;\n}\n\nexport function ZoomBar({\n scale,\n showUiSwitch,\n onScaleChange,\n onReCenter,\n onSwitchToChat,\n}: ZoomBarProps): JSX.Element {\n const handleZoomIn = useCallback(() => {\n onScaleChange?.(scale + 0.1);\n }, [onScaleChange, scale]);\n\n const handleZoomOut = useCallback(() => {\n onScaleChange?.(scale - 0.1);\n }, [onScaleChange, scale]);\n\n return (\n <div className={`${toolbarStyles.toolbar} ${styles[\"zoom-bar\"]}`}>\n {showUiSwitch && (\n <>\n <WrappedIconButton\n variant=\"mini\"\n icon={ICON_CHAT}\n onClick={onSwitchToChat}\n />\n <div className={toolbarStyles.divider}></div>\n </>\n )}\n <WrappedIconButton\n variant=\"mini\"\n icon={ICON_BACK_TO_CENTER}\n onClick={onReCenter}\n title={t(K.BACK_TO_CENTER)}\n />\n <div className={toolbarStyles.divider}></div>\n <WrappedIconButton\n variant=\"mini\"\n icon={ICON_ZOOM_OUT}\n onClick={handleZoomOut}\n title={t(K.ZOOM_OUT)}\n />\n <WrappedIconButton\n variant=\"mini\"\n icon={ICON_ZOOM_IN}\n onClick={handleZoomIn}\n title={t(K.ZOOM_IN)}\n />\n </div>\n );\n}\n","\n import API from \"!../../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[3].use[1]!../../../../../node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[3].use[2]!./NodeStart.module.css\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\noptions.insert = insertFn.bind(null, \"head\");\noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[3].use[1]!../../../../../node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[3].use[2]!./NodeStart.module.css\";\n export default content && content.locals ? content.locals : undefined;\n","// istanbul ignore file: experimental\nimport React from \"react\";\nimport styles from \"./NodeStart.module.css\";\n\nexport function NodeStart(): JSX.Element {\n return (\n <div className={styles[\"node-start\"]}>\n <div className={styles.icon} />\n </div>\n );\n}\n","\n import API from \"!../../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[3].use[1]!../../../../../node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[3].use[2]!./NodeRequirement.module.css\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\noptions.insert = insertFn.bind(null, \"head\");\noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[3].use[1]!../../../../../node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[3].use[2]!./NodeRequirement.module.css\";\n export default content && content.locals ? content.locals : undefined;\n","// istanbul ignore file: experimental\nimport React, { useContext } from \"react\";\nimport { wrapBrick } from \"@next-core/react-element\";\nimport type {\n EoEasyopsAvatar,\n EoEasyopsAvatarProps,\n} from \"@next-bricks/basic/easyops-avatar\";\nimport moment from \"moment\";\nimport classNames from \"classnames\";\nimport styles from \"./NodeRequirement.module.css\";\nimport type { CommandPayload, FileInfo } from \"../../shared/interfaces\";\nimport { ReadableCommand } from \"../../shared/ReadableCommand/ReadableCommand\";\nimport { FileList } from \"../FileList/FileList\";\nimport { TaskContext } from \"../../shared/TaskContext\";\n\nconst WrappedEasyOpsAvatar = wrapBrick<EoEasyopsAvatar, EoEasyopsAvatarProps>(\n \"eo-easyops-avatar\"\n);\n\nexport interface NodeRequirementProps {\n username?: string;\n content?: string;\n startTime?: number;\n active?: boolean;\n cmd?: CommandPayload;\n files?: FileInfo[];\n}\n\nexport function NodeRequirement({\n username,\n content,\n startTime,\n active,\n cmd,\n files,\n}: NodeRequirementProps): JSX.Element {\n const { setActiveFile } = useContext(TaskContext);\n\n return (\n <div\n className={classNames(styles[\"node-requirement\"], {\n [styles.active]: active,\n })}\n >\n <div className={styles.heading}>\n <WrappedEasyOpsAvatar\n className={styles.avatar}\n nameOrInstanceId={username}\n showName\n size=\"xs\"\n />\n <div className={styles.time}>\n {startTime && moment(startTime * 1000).format(\"MM-DD HH:mm\")}\n </div>\n </div>\n <div className={styles.body}>\n {cmd && <ReadableCommand cmd={cmd} size=\"small\" />}\n {content}\n\n {files?.length ? (\n <FileList files={files} onFileClick={setActiveFile} />\n ) : null}\n </div>\n </div>\n );\n}\n","\n import API from \"!../../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[3].use[1]!../../../../../node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[3].use[2]!./NodeInstruction.module.css\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\noptions.insert = insertFn.bind(null, \"head\");\noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[3].use[1]!../../../../../node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[3].use[2]!./NodeInstruction.module.css\";\n export default content && content.locals ? content.locals : undefined;\n","// istanbul ignore file: experimental\nimport React from \"react\";\nimport classNames from \"classnames\";\nimport styles from \"./NodeInstruction.module.css\";\nimport sharedStyles from \"../shared.module.css\";\n\nexport interface NodeInstructionProps {\n content?: string;\n loading?: boolean;\n}\n\nexport function NodeInstruction({\n content,\n loading,\n}: NodeInstructionProps): JSX.Element {\n return (\n <div className={styles[\"node-instruction\"]}>\n <div\n className={classNames(styles.text, {\n [sharedStyles[\"shine-text\"]]: loading,\n })}\n title={content}\n >\n {content}\n </div>\n </div>\n );\n}\n","\n import API from \"!../../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[3].use[1]!../../../../../node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[3].use[2]!./AIEmployeeAvatar.module.css\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\noptions.insert = insertFn.bind(null, \"head\");\noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[3].use[1]!../../../../../node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[3].use[2]!./AIEmployeeAvatar.module.css\";\n export default content && content.locals ? content.locals : undefined;\n","import React, { Suspense, use, useMemo } from \"react\";\nimport { wrapBrick } from \"@next-core/react-element\";\nimport type { AvatarProps, EoAvatar } from \"@next-bricks/basic/avatar\";\nimport {\n ElevoApi_listElevoAiEmployees,\n type ElevoApi_ListElevoAiEmployeesResponseItem,\n} from \"@next-api-sdk/llm-sdk\";\nimport fallbackAvatar from \"./fallback-avatar.png\";\nimport styles from \"./AIEmployeeAvatar.module.css\";\n\nconst WrappedAvatar = wrapBrick<EoAvatar, AvatarProps>(\"eo-avatar\");\n\nconst cache = new Map<\n string,\n Promise<ElevoApi_ListElevoAiEmployeesResponseItem | undefined>\n>();\n\nexport interface AIEmployeeAvatarProps {\n aiEmployeeId: string;\n}\n\nexport function AIEmployeeAvatar({ aiEmployeeId }: AIEmployeeAvatarProps) {\n return (\n <Suspense\n fallback={\n <WrappedAvatar\n className={styles.avatar}\n showName\n size=\"xs\"\n name={aiEmployeeId}\n src={fallbackAvatar}\n />\n }\n >\n <LegacyAIEmployeeAvatar aiEmployeeId={aiEmployeeId} />\n </Suspense>\n );\n}\n\nfunction LegacyAIEmployeeAvatar({ aiEmployeeId }: AIEmployeeAvatarProps) {\n const employeePromise = useMemo(() => {\n const cached = cache.get(aiEmployeeId);\n if (cached) {\n return cached;\n }\n const promise = fetchEmployee(aiEmployeeId);\n cache.set(aiEmployeeId, promise);\n return promise;\n }, [aiEmployeeId]);\n\n const employee = use(employeePromise);\n\n const props = useMemo(() => {\n if (!employee) {\n return {\n name: aiEmployeeId,\n src: fallbackAvatar,\n };\n }\n const { name, avatar } =\n employee as ElevoApi_ListElevoAiEmployeesResponseItem & {\n avatar?: string;\n };\n const src = avatar\n ? new URL(avatar, location.origin).toString()\n : fallbackAvatar;\n return {\n name,\n src,\n };\n }, [employee, aiEmployeeId]);\n\n return (\n <WrappedAvatar className={styles.avatar} showName size=\"xs\" {...props} />\n );\n}\n\nasync function fetchEmployee(aiEmployeeId: string) {\n const response = await ElevoApi_listElevoAiEmployees({\n employeeId: aiEmployeeId,\n } as any);\n const employee = response.list?.[0];\n return employee?.employeeId === aiEmployeeId ? employee : undefined;\n}\n","// istanbul ignore file: experimental\nimport React, {\n useCallback,\n useContext,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport classNames from \"classnames\";\nimport styles from \"./NodeJob.module.css\";\nimport sharedStyles from \"../shared.module.css\";\nimport type { CmdbInstanceDetailData } from \"../interfaces\";\nimport { FileInfo, Job } from \"../../shared/interfaces\";\nimport { ToolCallStatus } from \"../ToolCallStatus/ToolCallStatus.js\";\nimport { EnhancedMarkdown } from \"../EnhancedMarkdown/EnhancedMarkdown\";\nimport { CmdbInstanceDetail } from \"../CmdbInstanceDetail/CmdbInstanceDetail\";\nimport { FileList } from \"../FileList/FileList\";\nimport { RequestHumanAction } from \"../../shared/RequestHumanAction/RequestHumanAction\";\nimport { AIEmployeeAvatar } from \"../AIEmployeeAvatar/AIEmployeeAvatar\";\nimport { CreatedView } from \"../../shared/CreatedView/CreatedView\";\nimport { CanvasContext } from \"../CanvasContext\";\nimport { ViewToolbar } from \"../../shared/CreatedView/ViewToolbar\";\nimport { TaskContext } from \"../../shared/TaskContext\";\n\n// 当 markdown 中包含超过 4 列的表格时,对节点使用大尺寸样式\nconst RegExpLargeTableInMarkdown = /^\\s*\\|(?:\\s*:?-+:?\\s*\\|){4,}\\s*$/m;\n\nexport interface NodeJobProps {\n job: Job;\n active?: boolean;\n isLeaf?: boolean;\n}\n\nexport function NodeJob({ job, active, isLeaf }: NodeJobProps): JSX.Element {\n const toolName = job.toolCall?.name;\n\n const [toolMarkdownContent, cmdbInstanceDetails, files, sizeLarge] =\n useMemo(() => {\n const contents: string[] = [];\n const instanceDetails: CmdbInstanceDetailData[] = [];\n const files: FileInfo[] = [];\n let large = toolName === \"llm_answer\";\n job.messages?.forEach((message) => {\n if (message.role === \"tool\") {\n for (const part of message.parts) {\n if (part.type === \"data\") {\n switch (part.data?.type) {\n case \"markdown\":\n contents.push(part.data.content);\n break;\n case \"cmdb_instance_detail\":\n instanceDetails.push(part.data as CmdbInstanceDetailData);\n if (!large) {\n large =\n Object.keys(\n part.data?.outputSchema?.type === \"object\"\n ? part.data.outputSchema.properties\n : part.data.detail\n ).length > 6;\n }\n break;\n }\n } else if (part.type === \"file\") {\n files.push(part.file);\n }\n }\n }\n });\n\n const markdownContent = contents.join(\"\");\n\n large = large || RegExpLargeTableInMarkdown.test(markdownContent);\n\n return [markdownContent, instanceDetails, files, large] as const;\n }, [job.messages, toolName]);\n\n const [viewSize, setViewSize] = useState<\"medium\" | \"large\">(\"medium\");\n\n const handleViewSizeChange = useCallback((value: \"medium\" | \"large\") => {\n setViewSize(value);\n }, []);\n\n const { setActiveFile } = useContext(TaskContext);\n\n return (\n <div\n className={classNames(styles[\"node-job\"], {\n [styles.error]: job.isError,\n [styles.active]: active,\n [styles.large]: sizeLarge || viewSize === \"large\",\n })}\n >\n <div className={styles.background} />\n {job.aiEmployeeId ? (\n <div className={styles.heading}>\n <AIEmployeeAvatar aiEmployeeId={job.aiEmployeeId} />\n {job.generatedView ? <ViewToolbar job={job} /> : null}\n </div>\n ) : null}\n <div className={styles.body}>\n {job.toolCall && <ToolCallStatus job={job} />}\n {job.messages?.map((message, index) =>\n message.role === \"tool\" ? null : (\n <div\n key={index}\n className={classNames(styles.message, sharedStyles.markdown, {\n [styles[\"role-user\"]]:\n message.role === \"tool\" || message.role === \"user\",\n })}\n >\n {message.parts?.map((part, partIndex) => (\n <React.Fragment key={partIndex}>\n {part.type === \"text\" && (\n <EnhancedMarkdown\n className={sharedStyles[\"markdown-wrapper\"]}\n content={part.text}\n />\n )}\n </React.Fragment>\n ))}\n </div>\n )\n )}\n {toolMarkdownContent && (\n <div\n className={classNames(styles.message, sharedStyles.markdown)}\n style={{ padding: \"0 8px\" }}\n >\n <EnhancedMarkdown\n className={sharedStyles[\"markdown-wrapper\"]}\n content={toolMarkdownContent}\n />\n </div>\n )}\n {cmdbInstanceDetails.map((detail, index) => (\n <CmdbInstanceDetail key={index} {...detail} />\n ))}\n {files.length > 0 && (\n <FileList\n files={files}\n large={sizeLarge}\n onFileClick={setActiveFile}\n />\n )}\n {isLeaf &&\n !job.humanAction &&\n job.requestHumanAction &&\n (job.state === \"working\" || job.state === \"input-required\") && (\n <RequestHumanAction action={job.requestHumanAction} />\n )}\n </div>\n {job.generatedView ? (\n <ViewContainer job={job} onSizeChange={handleViewSizeChange} />\n ) : null}\n </div>\n );\n}\n\ninterface ViewContainerProps {\n job: Job;\n onSizeChange?: (value: \"medium\" | \"large\") => void;\n}\n\nfunction ViewContainer({ job, onSizeChange }: ViewContainerProps) {\n const ref = useRef<HTMLDivElement>(null);\n const { setHoverOnScrollableContent } = useContext(CanvasContext);\n\n const handleMouseMove = useCallback(\n (e: React.MouseEvent) => {\n let found = false;\n let scrollableContent: HTMLElement | undefined;\n for (const el of e.nativeEvent.composedPath()) {\n if (el === ref.current) {\n break;\n }\n if (!(el instanceof HTMLElement)) {\n continue;\n }\n if (el.tagName === \"PRE\") {\n if (el.scrollWidth > el.clientWidth) {\n found = true;\n break;\n }\n } else if (el.classList.contains(\"ant-table-content\")) {\n scrollableContent = el;\n } else if (\n el.classList.contains(\"ant-table\") &&\n el.classList.contains(\"ant-table-scroll-horizontal\")\n ) {\n if (\n scrollableContent &&\n scrollableContent.scrollWidth > scrollableContent.clientWidth\n ) {\n found = true;\n break;\n }\n }\n }\n setHoverOnScrollableContent(found);\n },\n [setHoverOnScrollableContent]\n );\n\n const handleMouseLeave = useCallback(() => {\n setHoverOnScrollableContent(false);\n }, [setHoverOnScrollableContent]);\n\n return (\n <div\n className={styles[\"view-container\"]}\n ref={ref}\n onMouseMove={handleMouseMove}\n onMouseLeave={handleMouseLeave}\n >\n <CreatedView job={job} noHeading onSizeChange={onSizeChange} />\n </div>\n );\n}\n","\n import API from \"!../../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[3].use[1]!../../../../../node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[3].use[2]!./NodeEnd.module.css\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\noptions.insert = insertFn.bind(null, \"head\");\noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[3].use[1]!../../../../../node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[3].use[2]!./NodeEnd.module.css\";\n export default content && content.locals ? content.locals : undefined;\n","// istanbul ignore file: experimental\nimport React, { useContext } from \"react\";\nimport styles from \"./NodeEnd.module.css\";\nimport { K, t } from \"../i18n\";\nimport { WrappedIcon } from \"../../shared/bricks\";\nimport { TaskContext } from \"../../shared/TaskContext\";\n\nexport function NodeEnd(): JSX.Element {\n const { onShare, replay } = useContext(TaskContext);\n\n return (\n <div className={styles[\"node-end\"]}>\n {replay && (\n <div className={styles.content}>\n <span className={styles.icon}>\n <WrappedIcon lib=\"fa\" prefix=\"fas\" icon=\"check\" />\n </span>\n <span className={styles.text}>{t(K.TASK_COMPLETED)}</span>\n </div>\n )}\n {!replay && (\n <button className={styles.button} onClick={onShare}>\n {t(K.SHARE)}\n </button>\n )}\n </div>\n );\n}\n","\n import API from \"!../../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[3].use[1]!../../../../../node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[3].use[2]!./ToolCallDetail.module.css\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\noptions.insert = insertFn.bind(null, \"head\");\noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[3].use[1]!../../../../../node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[3].use[2]!./ToolCallDetail.module.css\";\n export default content && content.locals ? content.locals : undefined;\n","import React, {\n useCallback,\n useContext,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport type { Drawer } from \"@next-bricks/containers/drawer\";\nimport classNames from \"classnames\";\nimport type { DataPart, Job, Part } from \"../../shared/interfaces\";\nimport { WrappedCodeBlock, WrappedDrawer } from \"../../shared/bricks\";\nimport styles from \"./ToolCallDetail.module.css\";\nimport sharedStyles from \"../shared.module.css\";\nimport { K, t } from \"../i18n\";\nimport { TaskContext } from \"../../shared/TaskContext\";\nimport { ToolCallStatus } from \"../ToolCallStatus/ToolCallStatus\";\nimport { ToolProgressLine } from \"../ToolProgressLine/ToolProgressLine\";\nimport { EnhancedMarkdown } from \"../EnhancedMarkdown/EnhancedMarkdown\";\nimport { MarkdownPre } from \"../../shared/MarkdownPre\";\n\nexport interface ToolCallDetailProps {\n job: Job;\n}\n\nfunction getDrawerWidth() {\n const { innerWidth } = window;\n return innerWidth < 800\n ? Math.min(500, innerWidth)\n : innerWidth < 1000\n ? innerWidth * 0.8\n : 800;\n}\n\nexport function ToolCallDetail({ job }: ToolCallDetailProps): JSX.Element {\n const { setActiveDetail } = useContext(TaskContext);\n const toolCall = job.toolCall!;\n const toolTitle = toolCall.annotations?.title;\n\n const [progress, intermediateParts, responseParts] = useMemo(() => {\n const toolCallMessages = job.messages?.filter((msg) => msg.role === \"tool\");\n const intermediateParts: DataPart[] = [];\n const responseParts: Part[] = [];\n let progress: DataPart | undefined;\n for (const message of toolCallMessages ?? []) {\n for (const part of message.parts) {\n if (part.type === \"data\") {\n switch (part.data?.type) {\n case \"progress\":\n // Take the last progress part\n progress = part;\n continue;\n case \"markdown\":\n case \"cmdb_instance_detail\":\n case \"static_data_view\":\n continue;\n default:\n intermediateParts.push(part);\n continue;\n }\n } else if (part.type === \"file\") {\n continue;\n }\n responseParts.push(part);\n }\n }\n return [progress, intermediateParts, responseParts];\n }, [job.messages]);\n\n const handleClose = useCallback(() => {\n setTimeout(() => {\n setActiveDetail(null);\n }, 300);\n }, [setActiveDetail]);\n\n const ref = useRef<Drawer>(null);\n\n useEffect(() => {\n setTimeout(() => {\n ref.current?.open();\n });\n }, []);\n\n const [width, setWidth] = useState(getDrawerWidth);\n\n useEffect(() => {\n const onResize = () => {\n setWidth(getDrawerWidth);\n };\n window.addEventListener(\"resize\", onResize);\n return () => {\n window.removeEventListener(\"resize\", onResize);\n };\n }, []);\n\n const hasProcessParts = intermediateParts.length > 0 || !!progress;\n const hasResponseParts = responseParts.length > 0;\n const toolState =\n ([\"working\", \"input-required\"].includes(job.state) && hasProcessParts) ||\n hasResponseParts\n ? \"completed\"\n : job.state;\n\n const failed = job.isError || toolState === \"failed\";\n\n return (\n <WrappedDrawer\n ref={ref}\n customTitle={toolTitle || toolCall.name}\n width={width}\n closable\n mask\n maskClosable\n keyboard\n themeVariant=\"elevo\"\n onClose={handleClose}\n >\n <ToolCallStatus job={job} variant=\"read-only\" />\n <div className={styles.detail}>\n <div className={styles.heading}>{t(K.ARGUMENTS)}:</div>\n <div className={`${styles.body} ${sharedStyles.markdown}`}>\n <PreComponent\n content={toolCall.originalArguments}\n maybeJson\n fallbackAsMarkdown\n />\n </div>\n </div>\n {hasProcessParts && (\n <div className={styles.detail}>\n <div className={styles.heading}>{t(K.PROCESS)}:</div>\n <div className={styles.body}>\n {intermediateParts.map((part, partIndex) =>\n part.data?.type === \"stream\" ? (\n <div\n key={partIndex}\n className={classNames(\n styles[\"stream-message\"],\n sharedStyles.markdown\n )}\n >\n <EnhancedMarkdown\n className={sharedStyles[\"markdown-wrapper\"]}\n content={part.data.message}\n />\n </div>\n ) : (\n <div key={partIndex} className={sharedStyles.markdown}>\n <PreComponent content={JSON.stringify(part)} />\n </div>\n )\n )}\n {!!progress && (\n <div\n className={classNames(styles[\"progress-container\"], {\n [styles[\"progress-fallback\"]]: failed,\n })}\n >\n <ToolProgressLine progress={progress} failed={failed} />\n </div>\n )}\n </div>\n </div>\n )}\n {hasResponseParts && (\n <div className={styles.detail}>\n <div className={styles.heading}>{t(K.RESPONSE)}:</div>\n <div className={`${styles.body} ${sharedStyles.markdown}`}>\n {responseParts.map((part, partIndex) =>\n part.type === \"data\" && part.data?.type === \"progress\" ? null : (\n <PreComponent\n key={partIndex}\n content={\n part.type === \"text\" ? part.text : JSON.stringify(part)\n }\n maybeJson={part.type === \"text\"}\n />\n )\n )}\n </div>\n </div>\n )}\n </WrappedDrawer>\n );\n}\n\nfunction PreComponent({\n content,\n maybeJson,\n fallbackAsMarkdown,\n}: {\n content?: string;\n maybeJson?: boolean;\n fallbackAsMarkdown?: boolean;\n}): JSX.Element | null {\n const [refinedContent, fallback, asMarkdown] = useMemo(() => {\n if (maybeJson && content) {\n try {\n const json = JSON.parse(content);\n return [JSON.stringify(json, null, 2), false, false];\n } catch {\n // Fallback to original content\n if (fallbackAsMarkdown) {\n return [content, false, true];\n }\n }\n }\n return [content, true, false];\n }, [content, fallbackAsMarkdown, maybeJson]);\n\n return asMarkdown ? (\n <div className={styles[\"markdown-block\"]}>\n <EnhancedMarkdown\n className={sharedStyles[\"markdown-wrapper\"]}\n content={refinedContent}\n />\n </div>\n ) : fallback ? (\n <div className={styles[\"code-fallback\"]}>\n <MarkdownPre>\n <code>{refinedContent}</code>\n </MarkdownPre>\n </div>\n ) : (\n <WrappedCodeBlock\n className={styles[\"code-block\"]}\n source={refinedContent!}\n language=\"json\"\n themeVariant=\"elevo\"\n />\n );\n}\n","import { maxBy, minBy } from \"lodash\";\nimport type { GraphNode, NodePosition, NodeRect } from \"../interfaces\";\nimport { IS_MAC } from \"../constants\";\n\nexport type KeyboardAction =\n | KeyboardActionSwitchActiveNode\n | KeyboardActionEnter\n | KeyboardActionScroll;\n\nexport interface KeyboardActionSwitchActiveNode {\n action: \"switch-active-node\";\n node: GraphNode | null;\n}\n\nexport interface KeyboardActionEnter {\n action: \"enter\";\n node: GraphNode;\n}\n\nexport interface KeyboardActionScroll {\n action: \"scroll\";\n direction: \"up\" | \"down\" | \"left\" | \"right\";\n range: \"line\" | \"page\" | \"document\";\n node?: undefined;\n}\n\n/**\n * Keyboard navigation:\n * - When no node is active, simulate browser page scrolling shortcuts:\n * - Space: scroll down (or up with shift) by page\n * - Arrow keys: scroll by line in the direction of the arrow\n * - Arrow up/down with ⌘ on Mac: scroll to top/bottom of document\n * - Home/end: scroll to top/bottom of document\n * - When a node is active:\n * - Arrow keys: switch active node in the direction of the arrow\n * - Arrow up/down with ⌘ on Mac: switch active node to the top/bottom most node\n * - Escape: clear active node\n * - Enter: Enter the detail of the active node\n */\nexport function handleKeyboardNav(\n event: KeyboardEvent,\n {\n activeNodeId,\n nodes,\n }: {\n activeNodeId: string | null;\n nodes: GraphNode[];\n }\n): KeyboardAction | undefined {\n if (event.ctrlKey || event.altKey) {\n return;\n }\n\n const activeNode = activeNodeId\n ? nodes.find((node) => node.id === activeNodeId)\n : null;\n\n const key = event.key;\n\n if (!activeNode) {\n if (key === \" \" && !event.metaKey) {\n return {\n action: \"scroll\",\n direction: event.shiftKey ? \"down\" : \"up\",\n range: \"page\",\n };\n }\n\n if (event.shiftKey || (!IS_MAC && event.metaKey)) {\n return;\n }\n\n switch (key) {\n case \"Home\":\n return {\n action: \"scroll\",\n direction: \"up\",\n range: \"document\",\n };\n case \"End\":\n return {\n action: \"scroll\",\n direction: \"down\",\n range: \"document\",\n };\n case \"ArrowUp\":\n case \"ArrowDown\": {\n const direction = key === \"ArrowUp\" ? \"up\" : \"down\";\n if (event.metaKey) {\n return {\n action: \"scroll\",\n direction,\n range: \"document\",\n };\n }\n return {\n action: \"scroll\",\n direction,\n range: \"line\",\n };\n }\n case \"ArrowLeft\":\n case \"ArrowRight\":\n if (!event.metaKey) {\n return {\n action: \"scroll\",\n direction: key === \"ArrowLeft\" ? \"left\" : \"right\",\n range: \"line\",\n };\n }\n }\n\n // Move up or down by arrow keys\n\n return;\n }\n\n if (event.shiftKey || (!IS_MAC && event.metaKey)) {\n return;\n }\n\n const moveOnAxis = (axis: \"x\" | \"y\", direction: 1 | -1) => {\n if (event.metaKey && axis === \"x\") {\n return;\n }\n const oppositeAxis = axis === \"x\" ? \"y\" : \"x\";\n const activePosition = getCenterPosition(activeNode.view!);\n const candidates = nodes.filter((node) => {\n let diff: number;\n let position: NodePosition;\n return (\n node !== activeNode &&\n node.type !== \"start\" &&\n node.type !== \"end\" &&\n node.type !== \"feedback\" &&\n node.type !== \"error\" &&\n node.type !== \"replay\" &&\n node.type !== \"instruction\" &&\n ((position = getCenterPosition(node.view!)),\n (diff = (position[axis] - activePosition[axis]) * direction),\n diff > 0) &&\n diff > Math.abs(activePosition[oppositeAxis] - position[oppositeAxis])\n );\n });\n return (event.metaKey ? maxBy : minBy)(candidates, (node) => {\n const position = getCenterPosition(node.view!);\n return (\n (activePosition[oppositeAxis] - position[oppositeAxis]) ** 2 +\n (activePosition[axis] - position[axis]) ** 2\n );\n });\n };\n\n let node: GraphNode | undefined | null;\n let action: \"switch-active-node\" | \"enter\" | undefined;\n\n switch (key) {\n case \"ArrowLeft\":\n action = \"switch-active-node\";\n node = moveOnAxis(\"x\", -1);\n break;\n case \"ArrowUp\":\n action = \"switch-active-node\";\n node = moveOnAxis(\"y\", -1);\n break;\n case \"ArrowRight\":\n action = \"switch-active-node\";\n node = moveOnAxis(\"x\", 1);\n break;\n case \"ArrowDown\":\n action = \"switch-active-node\";\n node = moveOnAxis(\"y\", 1);\n break;\n case \"Escape\":\n action = \"switch-active-node\";\n node = null;\n break;\n case \"Enter\":\n action = \"enter\";\n node = activeNode;\n break;\n }\n\n if (action && node !== undefined) {\n return { action, node: node! };\n }\n}\n\nfunction getCenterPosition(view: NodeRect): NodePosition {\n return {\n x: view.x + view.width / 2,\n y: view.y + view.height / 2,\n };\n}\n","\n import API from \"!../../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[3].use[1]!../../../../../node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[3].use[2]!./Nav.module.css\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\noptions.insert = insertFn.bind(null, \"head\");\noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[3].use[1]!../../../../../node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[3].use[2]!./Nav.module.css\";\n export default content && content.locals ? content.locals : undefined;\n","import React, { useEffect, useMemo, useRef } from \"react\";\nimport classNames from \"classnames\";\nimport styles from \"./Nav.module.css\";\nimport type { GraphNavItem } from \"../interfaces\";\nimport { WrappedIcon } from \"../../shared/bricks\";\nimport { DONE_STATES } from \"../../shared/constants\";\nimport type {\n ConversationState,\n JobState,\n TaskState,\n} from \"../../shared/interfaces\";\n\nexport interface NavProps {\n nav: GraphNavItem[] | undefined;\n currentNavId: string | null;\n taskState: TaskState | ConversationState | undefined;\n onClick: (jobId: string) => void;\n}\n\ninterface MergedNavItem extends Omit<GraphNavItem, \"state\"> {\n disabled?: boolean;\n state?: JobState;\n}\n\nexport function Nav({ nav, currentNavId, taskState, onClick }: NavProps) {\n const ref = useRef<HTMLUListElement>(null);\n useEffect(() => {\n const navElement = ref.current;\n if (!navElement || !currentNavId) {\n return;\n }\n navElement\n .querySelector(`[data-job-id=\"${currentNavId}\"]`)\n ?.scrollIntoView({\n behavior: \"smooth\",\n block: \"nearest\",\n });\n }, [currentNavId]);\n\n useEffect(() => {\n const navElement = ref.current;\n if (!navElement || currentNavId) {\n return;\n }\n\n const lastActiveItem = nav?.findLast(\n (item) =>\n DONE_STATES.includes(item.state || \"unknown\") ||\n item.state === \"working\" ||\n item.state === \"input-required\"\n );\n if (lastActiveItem) {\n navElement\n .querySelector(`[data-job-id=\"${lastActiveItem.id}\"]`)\n ?.scrollIntoView({\n behavior: \"smooth\",\n block: \"nearest\",\n });\n }\n }, [currentNavId, nav]);\n\n return (\n <div className={styles.container}>\n <ul className={styles.nav} ref={ref}>\n {nav?.map((item) => (\n <NavItem\n key={item.id}\n {...item}\n currentNavId={currentNavId}\n taskState={taskState}\n onClick={onClick}\n />\n ))}\n </ul>\n </div>\n );\n}\n\ninterface NavItemProps extends MergedNavItem {\n currentNavId: string | null;\n taskState: TaskState | ConversationState | undefined;\n onClick: (jobId: string) => void;\n}\n\nfunction NavItem({\n id,\n title,\n state,\n level,\n taskState,\n currentNavId,\n disabled,\n onClick,\n}: NavItemProps) {\n const { className, icon } = useMemo(() => {\n return getClassNameAndIconProps(state, taskState);\n }, [state, taskState]);\n\n return (\n <li\n className={classNames(styles.item, {\n [styles.active]: currentNavId === id,\n })}\n style={{ marginLeft: `${level * 20}px` }}\n >\n <a\n className={classNames(styles.link, className, {\n [styles.disabled]: disabled,\n })}\n data-job-id={id}\n title={title}\n onClick={() => {\n if (!disabled) {\n onClick(id);\n }\n }}\n >\n <WrappedIcon className={styles.icon} {...icon} />\n <span className={styles.text}>{title}</span>\n </a>\n </li>\n );\n}\n\nfunction getClassNameAndIconProps(\n state: JobState | undefined,\n taskState: TaskState | ConversationState | undefined\n) {\n switch (state) {\n case \"completed\":\n return {\n className: styles.completed,\n icon: {\n lib: \"fa\",\n prefix: \"fas\",\n icon: \"check\",\n },\n };\n case \"submitted\":\n case \"working\":\n if (taskState === \"terminated\") {\n return {\n icon: {\n lib: \"fa\",\n prefix: \"far\",\n icon: \"circle-stop\",\n },\n };\n }\n return {\n className: styles.working,\n icon: {\n lib: \"antd\",\n theme: \"outlined\",\n icon: \"loading-3-quarters\",\n spinning: true,\n },\n };\n case \"input-required\":\n return {\n className: styles[\"input-required\"],\n icon: {\n lib: \"fa\",\n prefix: \"far\",\n icon: \"circle-user\",\n },\n };\n case \"failed\":\n return {\n className: styles.failed,\n icon: {\n lib: \"fa\",\n prefix: \"fas\",\n icon: \"xmark\",\n },\n };\n case \"canceled\":\n case \"terminated\" as JobState:\n return {\n className: styles.canceled,\n icon: {\n lib: \"fa\",\n prefix: \"far\",\n icon: \"circle-stop\",\n },\n };\n case \"skipped\":\n return {\n icon: {\n lib: \"fa\",\n prefix: \"fas\",\n icon: \"ban\",\n },\n };\n default:\n return {\n icon: {\n lib: \"fa\",\n prefix: \"far\",\n icon: \"clock\",\n },\n };\n }\n}\n","\n import API from \"!../../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[3].use[1]!../../../../../node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[3].use[2]!./NodeLoading.module.css\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\noptions.insert = insertFn.bind(null, \"head\");\noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[3].use[1]!../../../../../node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[3].use[2]!./NodeLoading.module.css\";\n export default content && content.locals ? content.locals : undefined;\n","// istanbul ignore file: experimental\nimport React from \"react\";\nimport styles from \"./NodeLoading.module.css\";\n\nexport function NodeLoading(): JSX.Element {\n return (\n <div className={styles.loading}>\n <div className={styles.inner} />\n </div>\n );\n}\n","\n import API from \"!../../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[3].use[1]!../../../../../node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[3].use[2]!./JsxEditor.module.css\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\noptions.insert = insertFn.bind(null, \"head\");\noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[3].use[1]!../../../../../node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[3].use[2]!./JsxEditor.module.css\";\n export default content && content.locals ? content.locals : undefined;\n","import React, { Suspense, useContext, useMemo, useState } from \"react\";\nimport { asyncWrapBrick } from \"@next-core/react-runtime\";\nimport type { CodeEditor, CodeEditorProps } from \"@next-bricks/vs/code-editor\";\nimport nextTsxDefinition from \"@next-shared/tsx-parser/lib/next-tsx.d.ts?raw\";\nimport componentsDefinition from \"@next-shared/tsx-converter/lib/components.d.ts?raw\";\nimport styles from \"./JsxEditor.module.css\";\nimport { WrappedButton, WrappedIconButton } from \"../bricks\";\nimport { ICON_CLOSE } from \"../constants\";\nimport { TaskContext } from \"../TaskContext\";\nimport { getAsyncConstructedView } from \"../getAsyncConstructedView\";\n\ninterface CodeEditorEvents {\n \"code.change\": CustomEvent<string>;\n}\n\ninterface CodeEditorMapEvents {\n onCodeChange: \"code.change\";\n}\n\nconst editorLibs: CodeEditorProps[\"extraLibs\"] = [\n {\n filePath: \"/node_modules/next-tsx/components.d.ts\",\n content: componentsDefinition.replaceAll(\"export interface\", \"interface\"),\n },\n {\n filePath: \"/node_modules/next-tsx/package.json\",\n content: JSON.stringify({\n name: \"next-tsx\",\n types: \"./index.d.ts\",\n }),\n },\n {\n filePath: \"/node_modules/next-tsx/index.d.ts\",\n content: nextTsxDefinition,\n },\n {\n filePath: \"/node_modules/next-tsx/contracts.d.ts\",\n content: `type ContractMap = Record<string, any>;`,\n },\n];\n\nconst AsyncWrappedCodeEditor = React.lazy(async () => ({\n default: await asyncWrapBrick<\n CodeEditor,\n CodeEditorProps,\n CodeEditorEvents,\n CodeEditorMapEvents\n >(\"vs.code-editor\", {\n onCodeChange: \"code.change\",\n }),\n}));\n\nexport function JsxEditor() {\n const {\n workspace,\n manuallyUpdatedViews,\n updateView,\n activeJsxEditorJob,\n setActiveJsxEditorJob,\n } = useContext(TaskContext);\n const view =\n manuallyUpdatedViews?.get(activeJsxEditorJob!.id) ??\n activeJsxEditorJob!.generatedView!;\n const source = view.code;\n const [code, setCode] = useState(source);\n\n const libs = useMemo(() => {\n const commonLibs = editorLibs!;\n if (view.withContexts?.RESPONSE) {\n return [\n ...commonLibs,\n {\n filePath: \"tsx-view/response.d.ts\",\n content: `const RESPONSE_VALUE = ${JSON.stringify(view.withContexts.RESPONSE, null, 2)};\n\ndeclare const RESPONSE: typeof RESPONSE_VALUE;`,\n },\n ];\n }\n return commonLibs;\n }, [view.withContexts?.RESPONSE]);\n\n return (\n <div className={styles.container}>\n <div className={styles.editor}>\n <div className={styles.header}>\n <span className={styles.title}>JSX Editor</span>\n <WrappedIconButton\n icon={ICON_CLOSE}\n onClick={() => {\n setActiveJsxEditorJob?.(undefined);\n }}\n />\n </div>\n <div className={styles.body}>\n <div className={styles.content}>\n <Suspense fallback=\"Loading...\">\n <AsyncWrappedCodeEditor\n value={source}\n onCodeChange={(e) => {\n setCode(e.detail);\n }}\n language=\"typescript\"\n uri=\"file:///view.tsx\"\n automaticLayout=\"fit-container\"\n theme=\"tm-vs-dark\"\n extraLibs={libs}\n data-override-theme=\"dark-v2\"\n />\n </Suspense>\n </div>\n </div>\n <div className={styles.footer}>\n <WrappedButton\n themeVariant=\"elevo\"\n type=\"primary\"\n onClick={() => {\n const newView = {\n ...view,\n code,\n };\n newView.asyncConstructedView = getAsyncConstructedView(\n newView,\n workspace\n );\n updateView?.(activeJsxEditorJob!.id, newView);\n setActiveJsxEditorJob?.(undefined);\n }}\n >\n Save\n </WrappedButton>\n </div>\n </div>\n </div>\n );\n}\n","\n import API from \"!../../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[3].use[1]!../../../../../node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[3].use[2]!./NodeError.module.css\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\noptions.insert = insertFn.bind(null, \"head\");\noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[3].use[1]!../../../../../node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[3].use[2]!./NodeError.module.css\";\n export default content && content.locals ? content.locals : undefined;\n","import React from \"react\";\nimport styles from \"./NodeError.module.css\";\nimport jobStyles from \"../NodeJob/NodeJob.module.css\";\nimport classNames from \"classnames\";\n\nexport interface NodeErrorProps {\n content: string;\n}\n\nexport function NodeError({ content }: NodeErrorProps) {\n return (\n <div className={classNames(jobStyles[\"node-job\"], jobStyles.error)}>\n <div className={styles.error}>{content}</div>\n </div>\n );\n}\n","import React from \"react\";\nimport classNames from \"classnames\";\nimport styles from \"../NodeJob/NodeJob.module.css\";\nimport type { ActivityRun, ServiceFlowRun } from \"../../shared/interfaces\";\nimport { K, t } from \"../i18n\";\n\nexport interface NodeChunkProps {\n type: \"flow\" | \"activity\";\n active?: boolean;\n flow: ServiceFlowRun;\n activity?: ActivityRun;\n}\n\nexport function NodeChunk({ type, active, flow, activity }: NodeChunkProps) {\n return (\n <div\n className={classNames(styles[\"node-job\"], {\n [styles.active]: active,\n })}\n >\n <div className={styles.background} />\n <div className={styles.body}>\n {type === \"flow\"\n ? t(K.INITIATING_SERVICE_FLOW, { name: flow.name })\n : t(K.STARTING_SERVICE_FLOW_ACTIVITY, { name: activity!.name })}\n </div>\n </div>\n );\n}\n","// istanbul ignore file: experimental\nimport React, {\n memo,\n useCallback,\n useContext,\n useEffect,\n useImperativeHandle,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport { getBasePath, getRuntime } from \"@next-core/runtime\";\nimport \"@next-core/theme\";\nimport classNames from \"classnames\";\nimport ResizeObserver from \"resize-observer-polyfill\";\nimport { select, type Selection, type TransitionLike } from \"d3-selection\";\nimport { ZoomTransform } from \"d3-zoom\";\nimport { mergeRects } from \"@next-shared/diagram\";\nimport styles from \"./styles.module.css\";\nimport { useZoom } from \"./useZoom.js\";\nimport type {\n SizeTuple,\n GraphNode,\n RequirementGraphNode,\n JobGraphNode,\n ZoomAction,\n FeedbackDetail,\n FlowGraphNode,\n ActivityGraphNode,\n} from \"./interfaces.js\";\nimport { useAutoCenter } from \"./useAutoCenter.js\";\nimport { useLayout } from \"./useLayout.js\";\nimport { useConversationDetail } from \"./useConversationDetail\";\nimport { useConversationGraph } from \"./useConversationGraph\";\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 {\n CANVAS_PADDING_BOTTOM,\n CANVAS_PADDING_LEFT,\n CANVAS_PADDING_RIGHT,\n CANVAS_PADDING_TOP,\n END_NODE_ID,\n FEEDBACK_NODE_ID,\n REPLAY_NODE_ID,\n} from \"./constants.js\";\nimport { DONE_STATES, GENERAL_DONE_STATES } from \"../shared/constants.js\";\nimport { WrappedIcon } from \"../shared/bricks\";\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 \"../shared/ExpandedView/ExpandedView.js\";\nimport { Nav } from \"./Nav/Nav.js\";\nimport { ChatBox } from \"../shared/ChatBox/ChatBox.js\";\nimport { NodeFeedback } from \"../shared/NodeFeedback/NodeFeedback.js\";\nimport { TaskContext } from \"../shared/TaskContext.js\";\nimport { NodeLoading } from \"./NodeLoading/NodeLoading.js\";\nimport { JsxEditor } from \"../shared/JsxEditor/JsxEditor.js\";\nimport { NodeError } from \"./NodeError/NodeError.js\";\nimport type {\n GeneratedView,\n FileInfo,\n Job,\n CommandPayload,\n ActiveDetail,\n ServiceFlowRun,\n ActivityRun,\n ExtraChatPayload,\n} from \"../shared/interfaces\";\nimport { NodeReplay } from \"./NodeReplay/NodeReplay.js\";\nimport type { ConversationDetail, CruiseCanvasProps } from \".\";\nimport { useFlowAndActivityMap } from \"../shared/useFlowAndActivityMap\";\nimport { useFulfilledActiveDetail } from \"../shared/useFulfilledActiveDetail\";\nimport { NodeChunk } from \"./NodeChunk/NodeChunk\";\nimport { FilePreviewDrawer } from \"../shared/FilePreview/FilePreviewDrawer\";\n\nconst MemoizedNodeComponent = memo(NodeComponent);\n\ninterface CruiseCanvasComponentProps extends CruiseCanvasProps {\n conversationId: string;\n onShare: () => void;\n onTerminate: () => void;\n onSubmitFeedback: (detail: FeedbackDetail) => void;\n onSwitchToChat: () => void;\n onFeedbackOnView: (viewId: string) => void;\n onDetailChange: (detail: ConversationDetail) => 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\nexport interface CruiseCanvasRef {\n resumed?: () => void;\n feedbackSubmitDone: () => void;\n feedbackSubmitFailed: () => void;\n feedbackOnViewDone: (viewId: string) => void;\n}\n\nexport function CruiseCanvasComponent(\n {\n conversationId,\n initialRequest,\n replay,\n replayDelay,\n supports,\n showHiddenJobs,\n showHumanActions,\n showFeedback: propShowFeedback,\n showFeedbackAfterFailed,\n showFeedbackOnView,\n showUiSwitch,\n showJsxEditor,\n previewUrlTemplate,\n showCases,\n exampleProjects,\n tryItOutUrl,\n separateInstructions,\n uploadOptions,\n onShare,\n onTerminate,\n onSubmitFeedback,\n onSwitchToChat,\n onFeedbackOnView,\n onDetailChange,\n }: CruiseCanvasComponentProps,\n ref: React.Ref<CruiseCanvasRef>\n) {\n const rootRef = useRef<HTMLDivElement>(null);\n const {\n conversation,\n tasks,\n serviceFlows,\n errors,\n humanInputRef,\n skipToResults,\n watchAgain,\n } = useConversationDetail(\n conversationId,\n initialRequest,\n replay,\n replayDelay\n );\n const { flowMap, activityMap } = useFlowAndActivityMap(serviceFlows);\n const graph = useConversationGraph(\n conversation,\n tasks,\n errors,\n flowMap,\n activityMap,\n {\n showHiddenJobs,\n showHumanActions,\n separateInstructions,\n }\n );\n const rawNodes = graph?.nodes;\n const rawEdges = graph?.edges;\n const nav = graph?.nav;\n const views = graph?.views;\n const jobMap = graph?.jobMap;\n const pageTitle = conversation?.title ?? \"\";\n const conversationState = conversation?.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 useEffect(() => {\n onDetailChange({\n projectId: conversation?.projectId,\n });\n }, [onDetailChange, conversation?.projectId]);\n\n const [submittingFeedback, setSubmittingFeedback] = useState(false);\n const [submittedFeedback, setSubmittedFeedback] = useState(false);\n const [showFeedback, setShowFeedback] = useState<boolean>(!!propShowFeedback);\n useEffect(() => {\n setShowFeedback(!!propShowFeedback);\n }, [propShowFeedback]);\n const [feedbackDoneViews, setFeedbackDoneViews] = useState<\n Set<string> | undefined\n >();\n\n const handleSubmitFeedback = useCallback(\n (detail: FeedbackDetail) => {\n setSubmittingFeedback(true);\n onSubmitFeedback(detail);\n },\n [onSubmitFeedback]\n );\n\n useImperativeHandle(\n ref,\n () => ({\n feedbackSubmitDone: () => {\n setSubmittedFeedback(true);\n setTimeout(() => {\n setShowFeedback(false);\n }, 3000);\n },\n feedbackSubmitFailed: () => {\n setSubmittingFeedback(false);\n },\n feedbackOnViewDone: (viewId: string) => {\n setFeedbackDoneViews((prev) => {\n const newSet = new Set(prev);\n newSet.add(viewId);\n return newSet;\n });\n },\n }),\n []\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 useEffect(() => {\n getRuntime().applyPageTitle(pageTitle);\n }, [pageTitle]);\n\n const humanInput = useCallback(\n (input: string | null, action?: string, extra?: ExtraChatPayload) => {\n humanInputRef.current?.(input, action, extra);\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 completed: conversationState === \"completed\",\n failed: conversationState === \"failed\",\n finished: conversation?.finished,\n sizeMap,\n showFeedback,\n showFeedbackAfterFailed,\n replay,\n });\n\n // Disable auto scroll when the user manually scrolled up\n const detectScrolledUpRef = useRef(false);\n const manualScrolledUpRef = useRef(false);\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 manualScrolledUpRef,\n });\n\n const transitionRef = useRef(false);\n\n const pushZoomTransition = useMemo(() => {\n let nextAction: ZoomAction | null = null;\n\n const run = (action: ZoomAction) => {\n const current = transformRef.current;\n const target = typeof action === \"function\" ? action(current) : action;\n\n if (!target) {\n return;\n }\n\n const { transform, translateBy } = target;\n\n let selection:\n | Selection<HTMLDivElement, unknown, null, undefined>\n | TransitionLike<HTMLDivElement, unknown> = select(rootRef.current!);\n\n if (transitionEnabledRef.current && target.duration !== 0) {\n transitionRef.current = true;\n selection = selection\n .transition()\n .duration(target.duration ?? 300)\n .ease((t) => t * (2 - t)) // Ease in-out\n .on(\"end\", () => {\n transitionRef.current = false;\n if (nextAction) {\n const next = nextAction;\n nextAction = null;\n run(next);\n }\n });\n }\n\n if (transform) {\n zoomer.transform(\n selection,\n new ZoomTransform(\n transform.k ?? current.k,\n transform.x ?? current.x,\n transform.y ?? current.y\n )\n );\n } else {\n zoomer.translateBy(selection, translateBy[0] ?? 0, translateBy[1] ?? 0);\n }\n };\n\n return (action: ZoomAction) => {\n if (transitionRef.current) {\n nextAction = action;\n } else {\n run(action);\n }\n };\n }, [transformRef, zoomer]);\n\n const { centered, setCentered, reCenterRef } = useAutoCenter({\n nodes,\n sizeReady,\n zoomer,\n rootRef,\n pushZoomTransition,\n });\n\n const conversationDone = DONE_STATES.includes(conversationState);\n const canChat = conversationDone || conversationState === \"input-required\";\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 // Make the latest (bottom most) node visible\n useEffect(() => {\n const root = rootRef.current;\n if (\n !root ||\n bottom === null ||\n (detectScrolledUpRef.current && manualScrolledUpRef.current)\n ) {\n return;\n }\n pushZoomTransition((current) => {\n const { offsetHeight } = root;\n const transformedBottom = bottom * current.k + current.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 return {\n transform: {\n y: current.y + diffY,\n },\n duration: diffY > -100 ? 100 : diffY < -500 ? 300 : 200,\n };\n }\n return null;\n });\n }, [bottom, pushZoomTransition]);\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 detectScrolledUpRef.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 pushZoomTransition({\n translateBy: [x, y],\n duration: behavior === \"instant\" ? 0 : undefined,\n });\n }\n },\n [nodes, pushZoomTransition, transformRef]\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 pushZoomTransition({\n translateBy: [x, y],\n duration,\n });\n }\n },\n [nodes, pushZoomTransition, sizeReady, transformRef]\n );\n\n const [activeDetail, setActiveDetail] = useState<ActiveDetail | null>(null);\n const [subActiveDetail, setSubActiveDetail] = useState<ActiveDetail | null>(\n null\n );\n\n const [activeExpandedViewJobId, setActiveExpandedViewJobId] = useState<\n string | null\n >(null);\n const [activeFile, setActiveFile] = React.useState<FileInfo | null>(null);\n const [activeJsxEditorJob, setActiveJsxEditorJob] = useState<\n Job | undefined\n >();\n const [manuallyUpdatedViews, setManuallyUpdatedViews] = useState<\n Map<string, GeneratedView> | undefined\n >();\n const updateView = useCallback((jobId: string, view: GeneratedView) => {\n setManuallyUpdatedViews((prev) => {\n const next = new Map(prev);\n next.set(jobId, view);\n return next;\n });\n }, []);\n\n const requirementNode = rawNodes?.[0];\n\n const userInput = useMemo(() => {\n if (requirementNode?.type === \"requirement\") {\n return requirementNode.content;\n }\n }, [requirementNode]);\n\n const workspace = conversationId;\n\n const taskContextValue = useMemo(\n () => ({\n conversationId,\n conversationState,\n tasks,\n errors,\n workspace,\n previewUrlTemplate,\n replay,\n showCases,\n exampleProjects,\n uploadOptions,\n\n humanInput,\n onShare,\n onTerminate,\n supports,\n\n activeExpandedViewJobId,\n setActiveExpandedViewJobId,\n activeDetail,\n setActiveDetail,\n subActiveDetail,\n setSubActiveDetail,\n\n submittingFeedback,\n submittedFeedback,\n onSubmitFeedback: handleSubmitFeedback,\n setShowFeedback,\n\n showJsxEditor,\n activeJsxEditorJob,\n setActiveJsxEditorJob,\n manuallyUpdatedViews,\n updateView,\n showFeedbackOnView,\n onFeedbackOnView,\n feedbackDoneViews,\n\n skipToResults,\n watchAgain() {\n watchAgain();\n setCentered(false);\n },\n tryItOut() {\n const win = window.open(\n `${getBasePath().slice(0, -1)}${tryItOutUrl ?? \"/elevo\"}`,\n \"_blank\"\n );\n if (win) {\n win.__elevo_try_it_out = {\n content: userInput,\n };\n }\n },\n separateInstructions,\n setActiveFile,\n }),\n [\n conversationId,\n conversationState,\n tasks,\n errors,\n workspace,\n previewUrlTemplate,\n replay,\n showCases,\n exampleProjects,\n uploadOptions,\n\n humanInput,\n onTerminate,\n onShare,\n supports,\n\n activeExpandedViewJobId,\n activeDetail,\n subActiveDetail,\n\n submittingFeedback,\n submittedFeedback,\n handleSubmitFeedback,\n\n showJsxEditor,\n activeJsxEditorJob,\n manuallyUpdatedViews,\n updateView,\n showFeedbackOnView,\n onFeedbackOnView,\n feedbackDoneViews,\n\n skipToResults,\n watchAgain,\n setCentered,\n userInput,\n tryItOutUrl,\n separateInstructions,\n ]\n );\n\n const canvasContextValue = useMemo(\n () => ({\n onNodeResize,\n setActiveNodeId,\n hoverOnScrollableContent,\n setHoverOnScrollableContent,\n }),\n [hoverOnScrollableContent, onNodeResize]\n );\n\n const fulfilledActiveDetail = useFulfilledActiveDetail(\n activeDetail,\n jobMap,\n flowMap,\n activityMap\n );\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 (\n !root ||\n fulfilledActiveDetail ||\n activeExpandedViewJobId ||\n activeFile\n ) {\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 (\n node.type !== \"job\" /* &&\n node.type !== \"flow\" &&\n node.type !== \"activity\" */\n ) {\n return;\n }\n }\n e.preventDefault();\n e.stopPropagation();\n\n if (action === \"enter\") {\n if (node.type === \"job\") {\n setActiveDetail({\n type: node.type,\n id: (node as JobGraphNode).job.id,\n });\n } /* else {\n setActiveDetail({\n type: node.type as \"flow\",\n id: (node as FlowGraphNode).taskId,\n });\n } */\n } else if (action === \"switch-active-node\") {\n if (node) {\n setActiveNodeId(node.id);\n if (node.type === \"job\") {\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 } else {\n setActiveNodeId(null);\n }\n }\n };\n document.addEventListener(\"keydown\", handleKeyDown);\n return () => {\n document.removeEventListener(\"keydown\", handleKeyDown);\n };\n }, [\n activeDetail,\n fulfilledActiveDetail,\n activeNodeId,\n activeExpandedViewJobId,\n activeFile,\n nodes,\n scrollTo,\n scrollBy,\n ]);\n\n return (\n <TaskContext.Provider value={taskContextValue}>\n <CanvasContext.Provider value={canvasContextValue}>\n <div\n className={classNames(styles.root, {\n [styles.loading]: !conversation,\n })}\n ref={rootRef}\n style={{\n cursor: grabbing ? \"grabbing\" : \"grab\",\n }}\n tabIndex={-1}\n onClick={handleRootClick}\n >\n {!conversation && (\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 edge.target === END_NODE_ID ||\n edge.target === REPLAY_NODE_ID ||\n edge.target === FEEDBACK_NODE_ID ? null : (\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 )}\n </svg>\n {nodes.map((node) => (\n <MemoizedNodeComponent\n key={node.id}\n id={node.id}\n type={node.type}\n username={(node as RequirementGraphNode).username}\n content={(node as RequirementGraphNode).content}\n cmd={(node as RequirementGraphNode).cmd}\n files={(node as RequirementGraphNode).files}\n job={(node as JobGraphNode).job}\n flow={(node as FlowGraphNode).flow}\n activity={(node as ActivityGraphNode).activity}\n startTime={conversation?.startTime}\n instructionLoading={\n node.type === \"instruction\" &&\n !nonLeafNodes.has(node.id) &&\n !DONE_STATES.includes(node.state!) &&\n !GENERAL_DONE_STATES.includes(conversationState!)\n }\n isLeaf={!nonLeafNodes.has(node.id)}\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 <Nav\n nav={nav}\n currentNavId={currentNavId}\n taskState={conversationState}\n onClick={(jobId: string) => {\n setActiveNodeId(`job:${jobId}`);\n scrollTo({ jobId, block: \"start\" });\n }}\n />\n <ZoomBar\n scale={transform.k}\n showUiSwitch={showUiSwitch}\n onScaleChange={handleScaleChange}\n onReCenter={handleReCenter}\n onSwitchToChat={onSwitchToChat}\n />\n {replay ? (\n !conversation?.finished && (\n <div className={styles[\"footer-container\"]}>\n <NodeReplay />\n </div>\n )\n ) : supports?.chat ? (\n <div className={styles[\"footer-container\"]}>\n <ChatBox state={conversationState} canChat={canChat} />\n </div>\n ) : null}\n </div>\n {fulfilledActiveDetail?.type === \"job\" && (\n <ToolCallDetail job={fulfilledActiveDetail.job} />\n )}\n {activeExpandedViewJobId && <ExpandedView views={views!} />}\n {activeFile && <FilePreviewDrawer file={activeFile} />}\n {showJsxEditor && activeJsxEditorJob && <JsxEditor />}\n </CanvasContext.Provider>\n </TaskContext.Provider>\n );\n}\n\ninterface NodeComponentProps {\n id: string;\n type: GraphNode[\"type\"];\n username?: string;\n content?: string;\n job?: Job;\n flow?: ServiceFlowRun;\n activity?: ActivityRun;\n startTime?: number;\n instructionLoading?: boolean;\n isLeaf?: boolean;\n x?: number;\n y?: number;\n active?: boolean;\n cmd?: CommandPayload;\n files?: FileInfo[];\n}\n\nfunction NodeComponent({\n id,\n type,\n job,\n flow,\n activity,\n username,\n content,\n startTime,\n instructionLoading,\n isLeaf,\n x,\n y,\n active,\n cmd,\n files,\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 />\n ) : type === \"feedback\" ? (\n <NodeFeedback />\n ) : type === \"requirement\" ? (\n <NodeRequirement\n username={username}\n content={content}\n startTime={startTime}\n active={active}\n cmd={cmd}\n files={files}\n />\n ) : type === \"loading\" ? (\n <NodeLoading />\n ) : type === \"error\" ? (\n <NodeError content={content!} />\n ) : type === \"replay\" ? (\n <NodeReplay finished />\n ) : type === \"flow\" || type === \"activity\" ? (\n <NodeChunk\n type={type}\n active={active}\n flow={flow!}\n activity={activity}\n />\n ) : type === \"instruction\" ? (\n <NodeInstruction\n content={job!.instruction}\n loading={instructionLoading}\n />\n ) : (\n <NodeJob job={job!} active={active} isLeaf={isLeaf} />\n )}\n </div>\n );\n}\n","import { useMemo } from \"react\";\nimport type {\n GraphEdge,\n GraphNode,\n GraphNavItem,\n GraphGeneratedView,\n} from \"./interfaces\";\nimport { LOADING_NODE_ID } from \"./constants\";\nimport type {\n ActivityWithFlow,\n ConversationBaseDetail,\n ConversationError,\n ServiceFlowRun,\n Task,\n} from \"../shared/interfaces\";\nimport { getFlatChunks } from \"../shared/getFlatChunks\";\n\nexport function useConversationGraph(\n conversation: ConversationBaseDetail | null | undefined,\n tasks: Task[],\n errors: ConversationError[],\n flowMap?: Map<string, ServiceFlowRun>,\n activityMap?: Map<string, ActivityWithFlow>,\n options?: {\n showHiddenJobs?: boolean;\n showHumanActions?: boolean;\n separateInstructions?: boolean;\n }\n) {\n const { /* showHiddenJobs, */ showHumanActions, separateInstructions } =\n options ?? {};\n\n return useMemo(() => {\n if (!conversation) {\n return null;\n }\n\n const { chunks, jobMap } = getFlatChunks(\n tasks,\n errors,\n flowMap,\n activityMap\n );\n\n const nodes: GraphNode[] = [];\n const edges: GraphEdge[] = [];\n const nav: GraphNavItem[] = [];\n const views: GraphGeneratedView[] = [];\n const jobLevels = new Map<string, number>();\n\n const userInputNodes: string[] = [];\n let username: string | undefined;\n let previousNodeId: string | undefined;\n\n for (const chunk of chunks) {\n const nodeIds: string[] = [];\n\n if (chunk.type === \"job\") {\n const job = chunk.job;\n jobLevels.set(job.id, chunk.level);\n const { messages } = job;\n const hasMessages =\n (Array.isArray(messages) && messages.length > 0) || job.toolCall;\n\n const userInput = messages\n ?.find((msg) => msg.role === \"user\")\n ?.parts?.find((part) => part.type === \"text\")?.text;\n\n const isRequirementJob =\n userInput !== undefined &&\n (chunk === chunks[0] || messages!.length === 1);\n if (isRequirementJob) {\n const requirementId = `requirement:${job.id}`;\n username = job.username;\n nodes.push({\n type: \"requirement\",\n id: requirementId,\n content: userInput,\n username,\n cmd: job.cmd,\n files: messages\n ?.filter((msg) => msg.role === \"user\")\n .flatMap((msg) => msg.parts)\n .filter((part) => part.type === \"file\")\n .map((part) => part.file),\n });\n nodeIds.push(requirementId);\n userInputNodes.push(requirementId);\n } else {\n if (job.instruction) {\n if (separateInstructions || !job.toolCall) {\n const instructionNodeId = `instruction:${job.id}`;\n nodes.push({\n type: \"instruction\",\n id: instructionNodeId,\n job,\n state: job.state,\n });\n nodeIds.push(instructionNodeId);\n }\n\n nav.push({\n id: job.id,\n title: job.instruction,\n state: job.state,\n level: chunk.level,\n });\n } else if (job.toolCall?.annotations?.title) {\n nav.push({\n id: job.id,\n title: job.toolCall.annotations.title,\n state: job.state,\n level: chunk.level,\n });\n }\n\n const jobNodeId = `job:${job.id}`;\n if (hasMessages) {\n nodes.push({\n type: \"job\",\n id: jobNodeId,\n job,\n state: job.state,\n });\n nodeIds.push(jobNodeId);\n }\n\n const view = job.generatedView;\n if (view) {\n views.push({\n id: job.id,\n view,\n });\n }\n\n if (showHumanActions && job.humanAction) {\n const humanActionNodeId = `human-action:${job.id}`;\n nodes.push({\n type: \"requirement\",\n id: humanActionNodeId,\n content: job.humanAction,\n username,\n });\n nodeIds.push(humanActionNodeId);\n }\n\n // Make sure every job in the list has at least one corresponding node\n if (nodeIds.length === 0) {\n nodes.push({\n type: \"job\",\n id: jobNodeId,\n job,\n state: job.state,\n });\n nodeIds.push(jobNodeId);\n }\n\n if (userInput !== undefined && job.state === \"completed\") {\n userInputNodes.push(nodeIds[nodeIds.length - 1]);\n }\n }\n } else if (chunk.type === \"error\") {\n const errorNodeId = `error:${nodes.length}`;\n nodes.push({\n type: \"error\",\n id: errorNodeId,\n content: chunk.error,\n });\n nodeIds.push(errorNodeId);\n } else {\n const nodeId = `${chunk.type}:${chunk.task.id}`;\n nodes.push({\n type: chunk.type,\n id: nodeId,\n taskId: chunk.task.id,\n flow: chunk.flow,\n ...(chunk.type === \"activity\" ? { activity: chunk.activity } : null),\n } as GraphNode);\n nodeIds.push(nodeId);\n }\n\n for (let i = 1; i < nodeIds.length; i++) {\n edges.push({\n source: nodeIds[i - 1],\n target: nodeIds[i],\n });\n }\n if (nodeIds.length > 0) {\n if (previousNodeId) {\n edges.push({\n source: previousNodeId,\n target: nodeIds[0],\n });\n }\n previousNodeId = nodeIds[nodeIds.length - 1];\n }\n }\n\n if (\n conversation.state !== \"terminated\" &&\n conversation.state !== \"failed\"\n ) {\n if (nodes.length === 0) {\n nodes.push({\n type: \"loading\",\n id: LOADING_NODE_ID,\n });\n } else {\n let counter = 0;\n for (const nodeId of userInputNodes) {\n if (!edges.some((edge) => edge.source === nodeId)) {\n const loadingId = `${LOADING_NODE_ID}:${counter++}`;\n nodes.push({\n type: \"loading\",\n id: loadingId,\n });\n edges.push({\n source: nodeId,\n target: loadingId,\n });\n }\n }\n }\n }\n\n return {\n nodes,\n edges,\n nav,\n views,\n jobMap,\n };\n }, [\n conversation,\n errors,\n separateInstructions,\n // showHiddenJobs,\n showHumanActions,\n tasks,\n flowMap,\n activityMap,\n ]);\n}\n","import { useEffect, useRef, useState, type RefObject } from \"react\";\nimport type { ZoomBehavior } from \"d3-zoom\";\nimport { mergeRects } from \"@next-shared/diagram\";\nimport type { GraphNode, ZoomAction } from \"./interfaces\";\nimport { CANVAS_PADDING_BOTTOM } from \"./constants\";\n\nexport interface UseAutoCenterOptions {\n nodes: GraphNode[];\n sizeReady: boolean;\n zoomer: ZoomBehavior<HTMLDivElement, unknown>;\n rootRef: RefObject<HTMLDivElement>;\n pushZoomTransition: (action: ZoomAction) => void;\n}\n\nexport function useAutoCenter({\n nodes,\n sizeReady,\n zoomer,\n rootRef,\n pushZoomTransition,\n}: UseAutoCenterOptions) {\n const [centered, setCentered] = useState(false);\n const reCenterRef = useRef(false);\n\n // Transform to horizontal center once.\n useEffect(() => {\n const root = rootRef.current;\n if (sizeReady && root && !centered && nodes.length > 0) {\n const {\n x: left,\n y: top,\n width,\n height,\n } = mergeRects(nodes.map((node) => node.view!));\n const right = left + width;\n const bottom = top + height;\n\n const x = (root.clientWidth - (right + left)) / 2;\n let y = 30;\n if (reCenterRef.current) {\n const height = bottom - top + CANVAS_PADDING_BOTTOM;\n const diffY = height - root.clientHeight;\n if (diffY > 0) {\n y = -diffY - top;\n } else {\n y = (root.clientHeight - (bottom + top)) / 2;\n }\n }\n pushZoomTransition({\n transform: { k: 1, x, y },\n duration: reCenterRef.current ? undefined : 0,\n });\n setCentered(true);\n }\n\n reCenterRef.current = false;\n }, [centered, nodes, rootRef, sizeReady, zoomer, pushZoomTransition]);\n\n return { centered, setCentered, reCenterRef };\n}\n","import type { NodeRect, SizeTuple, TransformLiteral } from \"../interfaces\";\n\n/**\n * Get the scroll movement so that the given rectangle is visible in container.\n */\nexport function getScrollTo(\n rect: NodeRect,\n containerSize: SizeTuple,\n padding: [top: number, right: number, bottom: number, left: number],\n transform: TransformLiteral,\n block?: \"start\" | \"nearest\"\n) {\n const [containerWidth, containerHeight] = containerSize;\n const [paddingTop, paddingRight, paddingBottom, paddingLeft] = padding;\n const { x: left, y: top, width, height } = rect;\n const right = left + width;\n const bottom = top + height;\n\n const transformedTop = top * transform.k + transform.y;\n const transformedBottom = bottom * transform.k + transform.y;\n\n const diffYTop = paddingTop - transformedTop;\n const diffYBottom = containerHeight - paddingBottom - transformedBottom;\n const y =\n diffYTop > 0 || block === \"start\"\n ? diffYTop / transform.k\n : diffYBottom < 0\n ? diffYBottom / transform.k\n : 0;\n\n const transformedLeft = left * transform.k + transform.x;\n const transformedRight = right * transform.k + transform.x;\n\n const diffXLeft = paddingLeft - transformedLeft;\n const diffXRight = containerWidth - paddingRight - transformedRight;\n const x =\n diffXLeft > 0\n ? diffXLeft / transform.k\n : diffXRight < 0\n ? diffXRight / transform.k\n : 0;\n\n return { x, y };\n}\n","// Imports\nimport ___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/noSourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `.avatar--v2FiKghW::part(avatar){background-color:rgb(213,214,230);padding:1px}`, \"\"]);\n// Exports\n___CSS_LOADER_EXPORT___.locals = {\n\t\"avatar\": `avatar--v2FiKghW`\n};\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/noSourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/api.js\";\nimport ___CSS_LOADER_GET_URL_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/getUrl.js\";\nvar ___CSS_LOADER_URL_IMPORT_0___ = new URL(\"./images/background.png\", import.meta.url);\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___);\nvar ___CSS_LOADER_URL_REPLACEMENT_0___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_0___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `ai-portal\\\\.cruise-canvas{display:block;position:relative;width:100%;height:100%;overflow:hidden;background-color:#fff;background-image:url(${___CSS_LOADER_URL_REPLACEMENT_0___});background-size:cover;background-repeat:no-repeat;background-position:center;background-attachment:fixed;color:#262626;--cruise-canvas-node-border:1px solid gray;--cruise-canvas-node-width-small:330px;--cruise-canvas-node-width-medium:453px;--cruise-canvas-node-width-large:800px;--cruise-canvas-primary-color:var(--elevo-color-brand);--cruise-canvas-input-background:rgba(255,255,255,0.8);--cruise-canvas-input-box-shadow:0px 1px 0px 0px #ffffff,inset 0px 2px 4px 0px #b3bcf9}.root--z6jdb_BU{width:100%;height:100%;position:relative}.widgets--r6lUPOu2{position:absolute;top:0;right:0;bottom:0;left:0;pointer-events:none;-webkit-user-select:none;user-select:none}.root--z6jdb_BU.loading--m5r507Hp .canvas--u6C26uH_,\n.root--z6jdb_BU.loading--m5r507Hp + .widgets--r6lUPOu2{visibility:hidden}.loading-icon--UkRBMlBy{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);font-size:48px;color:#fff}.widgets--r6lUPOu2 > *{pointer-events:auto;-webkit-user-select:text;user-select:text}.canvas--u6C26uH_,\n.edges--uNPQGWZg{width:100%;height:100%;position:absolute;transform-origin:0% 0%;-webkit-user-select:none;user-select:none}.node--IBGywwp4{position:absolute;-webkit-user-select:text;user-select:text;cursor:auto}.node--IBGywwp4:not(.ready--pmh440go),\n.canvas--u6C26uH_:not(.ready--pmh440go) > .edges--uNPQGWZg{visibility:hidden}svg.edges--uNPQGWZg{pointer-events:none;overflow:visible}.edge--muRUWYG1{fill:none;stroke-width:2px;stroke:rgba(255,255,255,0.6);stroke-dasharray:5,5}.go-back--myNmSpSv{position:absolute;top:20px;left:20px}.go-back--myNmSpSv::part(link){width:32px;height:32px;display:flex;justify-content:center;align-items:center;background:rgba(255,255,255,0.7);box-shadow:0px 3px 14px 0px rgba(0,0,0,0.1),0px 1px 4px 0px rgba(0,0,0,0.06);border-radius:8px;border:1px solid rgba(255,255,255,0.3);color:inherit;box-sizing:border-box}.go-back--myNmSpSv::part(link):hover{background:rgba(255,255,255,0.5)}.go-back--myNmSpSv::part(link):active{background:rgba(255,255,255,0.3)}.footer-container--sTjEGP7I{position:absolute;bottom:28px;left:50%;transform:translate(-50%,0);width:var(--cruise-canvas-node-width-large);max-width:80%}`, \"\"]);\n// Exports\n___CSS_LOADER_EXPORT___.locals = {\n\t\"root\": `root--z6jdb_BU`,\n\t\"widgets\": `widgets--r6lUPOu2`,\n\t\"loading\": `loading--m5r507Hp`,\n\t\"canvas\": `canvas--u6C26uH_`,\n\t\"loading-icon\": `loading-icon--UkRBMlBy`,\n\t\"edges\": `edges--uNPQGWZg`,\n\t\"node\": `node--IBGywwp4`,\n\t\"ready\": `ready--pmh440go`,\n\t\"edge\": `edge--muRUWYG1`,\n\t\"go-back\": `go-back--myNmSpSv`,\n\t\"footer-container\": `footer-container--sTjEGP7I`\n};\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/noSourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/api.js\";\nimport ___CSS_LOADER_GET_URL_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/getUrl.js\";\nvar ___CSS_LOADER_URL_IMPORT_0___ = new URL(\"../images/requirement@2x.png\", import.meta.url);\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___);\nvar ___CSS_LOADER_URL_REPLACEMENT_0___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_0___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `.node-requirement--aVjY3LFY{width:var(--cruise-canvas-node-width-medium);max-width:90vw;background-color:rgba(255,255,255,0.4);background-image:url(${___CSS_LOADER_URL_REPLACEMENT_0___});background-position:center bottom;background-size:var(--cruise-canvas-node-width-medium) 128px;background-repeat:no-repeat;box-shadow:0px 4px 10px 0px rgba(54,64,80,0.18);border-radius:12px;-webkit-backdrop-filter:blur(28px);backdrop-filter:blur(28px);border:1px solid rgba(255,255,255,0.4);padding:8px;white-space:pre-wrap;position:relative}.node-requirement--aVjY3LFY.active--aEZLkOZe{border-color:#a1b5ff}.heading--F8b1aIJT{display:flex;align-items:center;margin-bottom:11px;font-size:13px}.avatar--BbtS9D46{flex:1;min-width:0}.avatar--BbtS9D46::part(avatar){border:1px solid #fff}.time--IRwoiblW{color:#8c8c8c}.body--JYv_r9n_{background:#f1f6ff;box-shadow:0px 1px 0px 0px #ffffff;border-radius:9px;padding:15px 10px;overflow-wrap:break-word}`, \"\"]);\n// Exports\n___CSS_LOADER_EXPORT___.locals = {\n\t\"node-requirement\": `node-requirement--aVjY3LFY`,\n\t\"active\": `active--aEZLkOZe`,\n\t\"heading\": `heading--F8b1aIJT`,\n\t\"avatar\": `avatar--BbtS9D46`,\n\t\"time\": `time--IRwoiblW`,\n\t\"body\": `body--JYv_r9n_`\n};\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/noSourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `.container--qJxxNcfJ{position:fixed;top:0;right:0;bottom:0;left:0;padding:20px;background-color:var(--mask-bg)}.editor--SCuHEqYM{height:100%;max-width:1200px;margin:0 auto;background:#ffffff;box-shadow:1px 1px 10px 0px rgba(0,10,26,0.1);border-radius:12px;display:flex;flex-direction:column}.header--nRP4oDyL{height:52px;display:flex;align-items:center;justify-content:space-between;border-bottom:1px solid rgba(0,0,0,0.15);padding:0 20px}.title--Tq8TUpVz{font-weight:500;font-size:16px;color:#262626}.body--uTZ0qYhS{flex:1;min-height:0;padding:20px;display:flex;flex-direction:column}.content--_WNf_qJr{height:100%}.footer--cblnjGHn{padding:12px 20px;border-top:1px solid rgba(0,0,0,0.15)}`, \"\"]);\n// Exports\n___CSS_LOADER_EXPORT___.locals = {\n\t\"container\": `container--qJxxNcfJ`,\n\t\"editor\": `editor--SCuHEqYM`,\n\t\"header\": `header--nRP4oDyL`,\n\t\"title\": `title--Tq8TUpVz`,\n\t\"body\": `body--uTZ0qYhS`,\n\t\"content\": `content--_WNf_qJr`,\n\t\"footer\": `footer--cblnjGHn`\n};\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/noSourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/api.js\";\nimport ___CSS_LOADER_GET_URL_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/getUrl.js\";\nvar ___CSS_LOADER_URL_IMPORT_0___ = new URL(\"../images/job-background.png\", import.meta.url);\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___);\nvar ___CSS_LOADER_URL_REPLACEMENT_0___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_0___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `.node-job--soTYrcA7{width:var(--cruise-canvas-node-width-medium);max-width:90vw;background:linear-gradient(180deg,#f5f8ff 0%,#edf0f9 100%);box-shadow:0px 4px 10px 0px rgba(177,149,207,0.4),0px 2px 4px 0px rgba(0,0,0,0.06);border-radius:12px;border:1px solid rgba(255,255,255,0.5);padding:8px;position:relative}.node-job--soTYrcA7.active--WIcgH7xW{border-color:#a1b5ff}.background--CKldFV7M{position:absolute;top:0;right:0;bottom:0;left:0;border-radius:12px;background-image:url(${___CSS_LOADER_URL_REPLACEMENT_0___});background-repeat:no-repeat;background-position:top right;z-index:0;transition:opacity 0.15s;opacity:0}.node-job--soTYrcA7.active--WIcgH7xW .background--CKldFV7M,\n.node-job--soTYrcA7:hover .background--CKldFV7M{opacity:1}.background--CKldFV7M ~ *{position:relative;z-index:1}.fit-content--HuAZHd31{min-width:var(--cruise-canvas-node-width-medium);width:min-content}.node-job--soTYrcA7.large--bn_n8RL5{width:var(--cruise-canvas-node-width-large)}.error--IwtdD0T6{box-shadow:inset 0px 0px 8px 2px rgba(242,76,37,0.6);border-color:rgba(242,76,37,0.6)}.heading--GZqrhPqL{display:flex;align-items:center;justify-content:space-between;padding:0 5px 5px;font-size:13px;color:#8c8c8c}.body--V34MsV9R{padding:9px 4px 4px}.scrollable--LudR_5Pj{max-height:462px;overflow-y:auto}.message--iVQBlD6k:not(:first-child){margin-top:6px}.role-assistant--Y8vd9Oms,\n.role-user--nAW4Hzsu{background:var(--cruise-canvas-input-background);border-radius:9px;border:1px solid #ccd1de;padding:6px 16px}.role-user--nAW4Hzsu{white-space:pre-wrap}.role-user--nAW4Hzsu:empty{display:none}.human-input--wFc6ovnT{margin-top:1em;display:block;width:100%;padding:10px 16px;color:inherit;background:var(--cruise-canvas-input-background);box-shadow:var(--cruise-canvas-input-box-shadow);border-radius:9px;border:none;font-size:14px;line-height:22px;height:64px}.human-input--wFc6ovnT:focus{outline:none}.human-input--wFc6ovnT::placeholder{color:#bfbfbf}.node-job--soTYrcA7 *::-webkit-scrollbar{width:5px;height:5px;background:transparent}.node-job--soTYrcA7 *::-webkit-scrollbar-thumb{background-color:#d8d8d8;border-radius:3px}.node-job--soTYrcA7 *::-webkit-scrollbar-track{background:transparent}.view-container--ra1sVc4C{margin-top:10px}`, \"\"]);\n// Exports\n___CSS_LOADER_EXPORT___.locals = {\n\t\"node-job\": `node-job--soTYrcA7`,\n\t\"active\": `active--WIcgH7xW`,\n\t\"background\": `background--CKldFV7M`,\n\t\"fit-content\": `fit-content--HuAZHd31`,\n\t\"large\": `large--bn_n8RL5`,\n\t\"error\": `error--IwtdD0T6`,\n\t\"heading\": `heading--GZqrhPqL`,\n\t\"body\": `body--V34MsV9R`,\n\t\"scrollable\": `scrollable--LudR_5Pj`,\n\t\"message\": `message--iVQBlD6k`,\n\t\"role-assistant\": `role-assistant--Y8vd9Oms`,\n\t\"role-user\": `role-user--nAW4Hzsu`,\n\t\"human-input\": `human-input--wFc6ovnT`,\n\t\"view-container\": `view-container--ra1sVc4C`\n};\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/noSourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/api.js\";\nimport ___CSS_LOADER_GET_URL_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/getUrl.js\";\nvar ___CSS_LOADER_URL_IMPORT_0___ = new URL(\"../images/start@2x.png\", import.meta.url);\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___);\nvar ___CSS_LOADER_URL_REPLACEMENT_0___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_0___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `.node-start--Mrh1iP5r{width:65px;height:65px;position:relative;overflow:visible}.icon--NxC4u6Wl{width:75px;height:75px;background-image:url(${___CSS_LOADER_URL_REPLACEMENT_0___});background-size:75px 75px;background-repeat:no-repeat;background-position:center;position:absolute;left:-5px;top:-1px}`, \"\"]);\n// Exports\n___CSS_LOADER_EXPORT___.locals = {\n\t\"node-start\": `node-start--Mrh1iP5r`,\n\t\"icon\": `icon--NxC4u6Wl`\n};\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/noSourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `.node-instruction--Gu7k6RDs{max-width:437px;max-width:min(437px,90vw);background:rgba(255,255,255,0.2);box-shadow:0px 4px 10px 0px rgba(54,64,80,0.08);border-radius:9999px;border:1px solid rgba(255,255,255,0.284);padding:6px 16px;color:rgba(0,0,0,0.45)}.text--jsSeLl7B{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;--shine-text-color:rgba(0,0,0,0.45);--shine-text-highlight-color:#dcdcdc}`, \"\"]);\n// Exports\n___CSS_LOADER_EXPORT___.locals = {\n\t\"node-instruction\": `node-instruction--Gu7k6RDs`,\n\t\"text\": `text--jsSeLl7B`\n};\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/noSourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `.node-end--yzRaOZnC{display:flex;flex-direction:column;align-items:center;gap:20px}.content--iXSH199p{display:flex;align-items:center}.icon--IVcHjGFO{width:18px;height:18px;display:flex;align-items:center;justify-content:center;color:#fff;background:#29cc49;border-radius:18px;font-size:14px;margin-right:6px}.text--dW7Y74et{font-weight:500}.button--mkIwsPzt{width:120px;height:30px;background:rgba(0,0,0,0.04);border:none;border-radius:15px;text-align:center;cursor:pointer}.button--mkIwsPzt:hover{background:rgba(0,0,0,0.08)}.button--mkIwsPzt:active{background:rgba(0,0,0,0.15)}.button--mkIwsPzt:focus{outline:none}`, \"\"]);\n// Exports\n___CSS_LOADER_EXPORT___.locals = {\n\t\"node-end\": `node-end--yzRaOZnC`,\n\t\"content\": `content--iXSH199p`,\n\t\"icon\": `icon--IVcHjGFO`,\n\t\"text\": `text--dW7Y74et`,\n\t\"button\": `button--mkIwsPzt`\n};\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/noSourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `.zoom-bar--MTw5VGPl{left:20px;bottom:20px}@media (max-width: 1123px){.zoom-bar--MTw5VGPl{left:auto;bottom:auto;top:20px;right:20px}}`, \"\"]);\n// Exports\n___CSS_LOADER_EXPORT___.locals = {\n\t\"zoom-bar\": `zoom-bar--MTw5VGPl`\n};\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/noSourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `.detail--JiiWugxP{margin-top:20px;color:#595959;margin-bottom:7px}.code-block--wccWPbbW::part(pre){border:1px solid #ccd1de}.code-fallback--a8nCduaZ [class*=\"code-wrapper--\"]::part(pre){white-space:pre-wrap;background:#fef5f3!important}.progress-container--tFUAQo73,\n.stream-message--G0tAm9aa{border-radius:9px;border:1px solid #ccd1de;background:#fff}.progress-container--tFUAQo73{padding:6px 2px}.progress-fallback--Xto82BYu{background:#fef5f3}.stream-message--G0tAm9aa{padding:1em;margin:0.5em 0}.markdown-block--C3siNgW9{border:1px solid #ccd1de;border-radius:9px;padding:1em;background:#fff}`, \"\"]);\n// Exports\n___CSS_LOADER_EXPORT___.locals = {\n\t\"detail\": `detail--JiiWugxP`,\n\t\"code-block\": `code-block--wccWPbbW`,\n\t\"code-fallback\": `code-fallback--a8nCduaZ`,\n\t\"progress-container\": `progress-container--tFUAQo73`,\n\t\"stream-message\": `stream-message--G0tAm9aa`,\n\t\"progress-fallback\": `progress-fallback--Xto82BYu`,\n\t\"markdown-block\": `markdown-block--C3siNgW9`\n};\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/noSourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `.error--D_UJOZDA{color:var(--color-error);padding:8px;white-space:pre-wrap;word-break:break-word}`, \"\"]);\n// Exports\n___CSS_LOADER_EXPORT___.locals = {\n\t\"error\": `error--D_UJOZDA`\n};\nexport default ___CSS_LOADER_EXPORT___;\n"],"names":["___CSS_LOADER_EXPORT___","push","module","id","locals","mergeRects","rects","left","Infinity","top","right","bottom","rect","r","x","width","b","y","height","options","styleTagTransform","setAttributes","insert","domAPI","insertStyleElement","undefined","DEFAULT_SCALE_RANGE_MIN","DEFAULT_SCALE_RANGE_MAX","START_NODE_ID","END_NODE_ID","FEEDBACK_NODE_ID","LOADING_NODE_ID","REPLAY_NODE_ID","CANVAS_PADDING_TOP","CANVAS_PADDING_RIGHT","CANVAS_PADDING_BOTTOM","CANVAS_PADDING_LEFT","RANK_SEP","NODE_SEP","EDGE_SEP","IS_MAC","test","_ref","_userAgentData$platfo","_userAgentData","navigator","userAgentData","platform","userAgent","wheelData","event","deltaY","deltaMode","ctrlKey","getPositionWithOffsets","position","offsets","ICON_BACK_TO_CENTER","lib","icon","ICON_ZOOM_OUT","ICON_ZOOM_IN","ZoomBar","scale","showUiSwitch","onScaleChange","onReCenter","onSwitchToChat","handleZoomIn","useCallback","handleZoomOut","React","className","toolbarStyles","toolbar","styles","WrappedIconButton","variant","ICON_CHAT","onClick","divider","title","t","K","BACK_TO_CENTER","ZOOM_OUT","ZOOM_IN","NodeStart","WrappedEasyOpsAvatar","wrapBrick","NodeRequirement","username","content","startTime","active","cmd","files","setActiveFile","useContext","TaskContext","classNames","heading","avatar","nameOrInstanceId","showName","size","time","moment","format","body","ReadableCommand","length","FileList","onFileClick","NodeInstruction","loading","text","sharedStyles","WrappedAvatar","cache","Map","AIEmployeeAvatar","aiEmployeeId","Suspense","fallback","name","src","fallbackAvatar","LegacyAIEmployeeAvatar","_ref2","employeePromise","useMemo","cached","get","promise","async","_response$list","employee","ElevoApi_listElevoAiEmployees","employeeId","list","fetchEmployee","set","use","props","URL","location","origin","toString","_extends","RegExpLargeTableInMarkdown","NodeJob","_job$toolCall","_job$messages2","job","isLeaf","toolName","toolCall","toolMarkdownContent","cmdbInstanceDetails","sizeLarge","_job$messages","contents","instanceDetails","large","messages","forEach","message","role","part","parts","_part$data","type","data","_part$data2","Object","keys","outputSchema","properties","detail","file","markdownContent","join","viewSize","setViewSize","useState","handleViewSizeChange","value","error","isError","background","generatedView","ViewToolbar","ToolCallStatus","map","index","_message$parts","key","markdown","partIndex","EnhancedMarkdown","style","padding","CmdbInstanceDetail","humanAction","requestHumanAction","state","RequestHumanAction","action","ViewContainer","onSizeChange","ref","useRef","setHoverOnScrollableContent","CanvasContext","handleMouseMove","e","scrollableContent","found","el","nativeEvent","composedPath","current","HTMLElement","tagName","scrollWidth","clientWidth","classList","contains","handleMouseLeave","onMouseMove","onMouseLeave","CreatedView","noHeading","NodeEnd","onShare","replay","WrappedIcon","prefix","TASK_COMPLETED","button","SHARE","getDrawerWidth","innerWidth","window","Math","min","ToolCallDetail","_toolCall$annotations","setActiveDetail","toolTitle","annotations","progress","intermediateParts","responseParts","toolCallMessages","filter","msg","handleClose","setTimeout","useEffect","_ref$current","open","setWidth","onResize","addEventListener","removeEventListener","hasProcessParts","hasResponseParts","toolState","includes","failed","WrappedDrawer","customTitle","closable","mask","maskClosable","keyboard","themeVariant","onClose","ARGUMENTS","PreComponent","originalArguments","maybeJson","fallbackAsMarkdown","PROCESS","JSON","stringify","ToolProgressLine","RESPONSE","_part$data3","refinedContent","asMarkdown","json","parse","MarkdownPre","WrappedCodeBlock","source","language","getCenterPosition","view","Nav","nav","currentNavId","taskState","_navElement$querySele","navElement","querySelector","scrollIntoView","behavior","block","lastActiveItem","findLast","item","DONE_STATES","_navElement$querySele2","container","NavItem","level","disabled","completed","working","theme","spinning","canceled","getClassNameAndIconProps","marginLeft","link","NodeLoading","inner","editorLibs","filePath","replaceAll","types","AsyncWrappedCodeEditor","default","asyncWrapBrick","onCodeChange","JsxEditor","_manuallyUpdatedViews","_view$withContexts2","workspace","manuallyUpdatedViews","updateView","activeJsxEditorJob","setActiveJsxEditorJob","code","setCode","libs","_view$withContexts","commonLibs","withContexts","editor","header","ICON_CLOSE","uri","automaticLayout","extraLibs","footer","WrappedButton","newView","asyncConstructedView","getAsyncConstructedView","NodeError","jobStyles","NodeChunk","flow","activity","INITIATING_SERVICE_FLOW","STARTING_SERVICE_FLOW_ACTIVITY","MemoizedNodeComponent","memo","NodeComponent","CruiseCanvasComponent","_conversation$title","conversationId","initialRequest","replayDelay","supports","showHiddenJobs","showHumanActions","showFeedback","propShowFeedback","showFeedbackAfterFailed","showFeedbackOnView","showJsxEditor","previewUrlTemplate","showCases","exampleProjects","tryItOutUrl","separateInstructions","uploadOptions","onTerminate","onSubmitFeedback","onFeedbackOnView","onDetailChange","rootRef","conversation","tasks","serviceFlows","errors","humanInputRef","skipToResults","watchAgain","useConversationDetail","flowMap","activityMap","useFlowAndActivityMap","graph","chunks","jobMap","getFlatChunks","nodes","edges","views","jobLevels","userInputNodes","previousNodeId","chunk","nodeIds","_messages$find","hasMessages","Array","isArray","userInput","find","instruction","instructionNodeId","jobNodeId","humanActionNodeId","requirementId","flatMap","errorNodeId","nodeId","task","taskId","i","target","counter","some","edge","loadingId","useConversationGraph","rawNodes","rawEdges","pageTitle","conversationState","activeNodeId","setActiveNodeId","jobId","split","projectId","submittingFeedback","setSubmittingFeedback","submittedFeedback","setSubmittedFeedback","setShowFeedback","feedbackDoneViews","setFeedbackDoneViews","handleSubmitFeedback","useImperativeHandle","feedbackSubmitDone","feedbackSubmitFailed","feedbackOnViewDone","viewId","prev","newSet","Set","add","transitionEnabledRef","timer","clearTimeout","getRuntime","applyPageTitle","humanInput","input","extra","_humanInputRef$curren","call","sizeMap","setSizeMap","onNodeResize","newMap","delete","sizeReady","_rawNodes","_rawEdges","finished","memoizedPositionsRef","initialNodes","initialEdges","finishedNodeIds","hasSource","failedFeedback","shouldAppend","hasTarget","node","has","sourceIds","memoizedPositions","startNodePositionRef","_memoizedPositionsRef","dagre","Graph","setGraph","rankdir","nodesep","edgesep","ranksep","setDefaultEdgeLabel","setEdge","setNode","nodeView","assign","sourcePosition","targetPosition","turnY","points","useLayout","detectScrolledUpRef","manualScrolledUpRef","hoverOnScrollableContent","grabbing","transform","transformRef","zoomer","zoomable","scrollable","pannable","pannableWithCtrl","scaleRange","_scaleRange","onSwitchActiveTarget","setGrabbing","setTransform","k","zoom","wheelDelta","moved","scaleExtent","on","onContextMenu","preventDefault","document","root","rootSelection","select","unsetZoom","closest","element","delta","maxScroll","scrollHeight","clientHeight","scrollTop","checkScrollableY","cancelable","translateBy","wheelDeltaX","wheelDeltaY","useZoom","transitionRef","pushZoomTransition","nextAction","run","selection","_target$duration","_transform$k","_transform$x","_transform$y","_translateBy$","_translateBy$2","duration","transition","ease","next","ZoomTransform","centered","setCentered","reCenterRef","diffY","useAutoCenter","canChat","nonLeafNodes","leafNodes","max","bottomRef","offsetHeight","transformedBottom","handleReCenter","handleScaleChange","scaleTo","fullRect","offsetWidth","viewportWidth","viewportHeight","minX","maxX","minY","maxY","translateExtent","scrollTo","targets","n","_job","containerSize","containerWidth","containerHeight","paddingTop","paddingRight","paddingBottom","paddingLeft","diffYTop","diffYBottom","diffXLeft","diffXRight","getScrollTo","scrollBy","direction","range","distance","isHorizontal","targetHeight","activeDetail","subActiveDetail","setSubActiveDetail","activeExpandedViewJobId","setActiveExpandedViewJobId","activeFile","setManuallyUpdatedViews","requirementNode","taskContextValue","tryItOut","win","getBasePath","slice","__elevo_try_it_out","canvasContextValue","fulfilledActiveDetail","useFulfilledActiveDetail","handleRootClick","handleKeyDown","activeElement","keyboardAction","altKey","activeNode","metaKey","shiftKey","moveOnAxis","axis","oppositeAxis","activePosition","candidates","diff","abs","maxBy","minBy","handleKeyboardNav","stopPropagation","Provider","cursor","tabIndex","canvas","ready","d","_ref3","_node$view","_node$view2","instructionLoading","GENERAL_DONE_STATES","widgets","NodeReplay","chat","ChatBox","ExpandedView","FilePreviewDrawer","_ref4","nodeRef","observer","ResizeObserver","observe","disconnect","handleMouseDown","handleClick","NodeFeedback","___CSS_LOADER_URL_IMPORT_0___","___CSS_LOADER_URL_REPLACEMENT_0___"],"sourceRoot":""}
@@ -0,0 +1,2 @@
1
+ "use strict";(globalThis.webpackChunk_next_bricks_ai_portal=globalThis.webpackChunk_next_bricks_ai_portal||[]).push([[5944,6573],{1740:e=>{e.exports=function(e){if("undefined"==typeof document)return{update:function(){},remove:function(){}};var t=e.insertStyleElement(e);return{update:function(n){!function(e,t,n){var a="";n.supports&&(a+="@supports (".concat(n.supports,") {")),n.media&&(a+="@media ".concat(n.media," {"));var o=void 0!==n.layer;o&&(a+="@layer".concat(n.layer.length>0?" ".concat(n.layer):""," {")),a+=n.css,o&&(a+="}"),n.media&&(a+="}"),n.supports&&(a+="}");var r=n.sourceMap;r&&"undefined"!=typeof btoa&&(a+="\n/*# sourceMappingURL=data:application/json;base64,".concat(btoa(unescape(encodeURIComponent(JSON.stringify(r))))," */")),t.styleTagTransform(a,e,t.options)}(t,e,n)},remove:function(){!function(e){if(null===e.parentNode)return!1;e.parentNode.removeChild(e)}(t)}}}},16195:(e,t,n)=>{n.d(t,{I:()=>l,K:()=>o,NS:()=>s,t:()=>c});var a=n(52616);let o=function(e){return e.ASK_ANY_THING="ASK_ANYTHING",e.COMMON_TASKS="COMMON_TASKS",e}({});const r={[o.ASK_ANY_THING]:"Ask anything",[o.COMMON_TASKS]:"Common tasks"},i={[o.ASK_ANY_THING]:"询问任何问题",[o.COMMON_TASKS]:"常用任务"},s="bricks/ai-portal/chat-box",l={en:r,zh:i},c=a.i18n.getFixedT(null,s)},17753:(e,t,n)=>{n.d(t,{Bj:()=>o,Tl:()=>r});var a=n(30981);const o=(0,a.wrapBrick)("eo-icon"),r=(0,a.wrapBrick)("eo-actions",{onActionClick:"action.click",onItemDragEnd:"item.drag.end",onItemDragStart:"item.drag.start"});(0,a.wrapBrick)("ai-portal.icon-button")},20062:e=>{e.exports=function(e,t){return t||(t={}),e?(e=String(e.__esModule?e.default:e),/^['"].*['"]$/.test(e)&&(e=e.slice(1,-1)),t.hash&&(e+=t.hash),/["'() \t\n]|(%20)/.test(e)||t.needQuotes?'"'.concat(e.replace(/"/g,'\\"').replace(/\n/g,"\\n"),'"'):e):e}},24586:(e,t,n)=>{n.d(t,{A:()=>o});var a=n(11369);function o(e,t,n){return(t=(0,a.A)(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}},30855:(e,t,n)=>{e.exports=function(e){var t=n.nc;t&&e.setAttribute("nonce",t)}},47008:(e,t,n)=>{n.d(t,{A:()=>p});var a=n(36758),o=n.n(a),r=n(40935),i=n.n(r),s=n(20062),l=n.n(s),c=new URL(n(47336),n.b),u=i()(o()),d=l()(c);u.push([e.id,`:host{display:block}:host([hidden]){display:none}*{box-sizing:border-box}.root{color:#262626;background:url(${d}) no-repeat center bottom;background-size:100% 104px;padding:12px 12px 29px;margin:0 -12px}.container{position:relative;background:#ffffff;box-shadow:0px 2px 4px 0px rgba(38,45,65,0.1);border-radius:16px;border:1px solid #dadfe8}.container:has(textarea:focus){border-color:#b7c3d8}textarea{display:block;width:100%;padding:10px 16px 50px;color:var(--antd-input-color);border-radius:16px;-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);border:1px solid rgba(255,255,255,0.5);font:inherit;font-size:14px;line-height:22px;height:120px}textarea::placeholder{color:rgba(0,0,0,0.4)}button:focus,\ntextarea:focus{outline:none}button{margin:0;padding:0;font:inherit;background:none;border:none}.actions-bar{position:absolute;bottom:12px;left:14px;right:14px;display:flex;align-items:flex-end;justify-content:space-between;gap:6px}.btn-send{width:28px;height:28px;display:flex;align-items:center;justify-content:center;background:var(--elevo-color-brand);border:none;border-radius:8px;color:#fff;flex-shrink:0}.btn-send[disabled]{background:rgba(0,0,0,0.15)}.btn-send:not([disabled]){cursor:pointer}.btn-send:not([disabled]):hover{background:#5166ff}.btn-send:not([disabled]):active{background:#1e33cc}.mention-overlay{position:absolute;border-radius:4px;pointer-events:none;background:rgba(38,45,65,0.1)}.buttons{display:flex;align-items:center;gap:12px}.btn-divider{width:1px;height:16px;background:rgba(0,0,0,0.1)}`,""]);const p=u.toString()},47336:(e,t,n)=>{e.exports=n.p+"images/25c20165.png"},60136:(e,t,n)=>{n.d(t,{v7:()=>d,NL:()=>p,xf:()=>m});var a=n(61919);const o=n.p+"images/62542537.png",r=n.p+"images/94d7a053.png",i=n.p+"images/0e7e6764.png",s=n.p+"images/7944ebaf.png",l=n.p+"images/c7ec12fe.png",c=n.p+"images/3316492a.png",u=new Map([["md","text/markdown"],["pdf","application/pdf"],["doc","application/msword"],["docx","application/vnd.openxmlformats-officedocument.wordprocessingml.document"],["txt","text/plain"],["csv","text/csv"],["xls","application/vnd.ms-excel"],["xlsx","application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"],["ppt","application/vnd.ms-powerpoint"],["pptx","application/vnd.openxmlformats-officedocument.presentationml.presentation"],["jpg","image/jpeg"],["jpeg","image/jpeg"],["png","image/png"],["gif","image/gif"],["bmp","image/bmp"],["webp","image/webp"],["svg","image/svg+xml"]]);function d(e){const[t,n]=a.pipes.unitFormat(e,"bytes",1),o=+t;return`${o>100?Math.round(o):o} ${n}`}function p(e,t){const n=e||m(t);if(n.startsWith("image/"))return["Image",c];switch(n){case"text/markdown":return["Markdown",o];case"application/pdf":return["PDF",r];case"application/msword":case"application/vnd.openxmlformats-officedocument.wordprocessingml.document":return["Word",i];case"application/vnd.ms-excel":case"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet":return["Excel",l];case"application/vnd.ms-powerpoint":case"application/vnd.openxmlformats-officedocument.presentationml.presentation":return["PowerPoint",s]}return n.startsWith("text/")?["Text",o]:["File",c]}function m(e){var t;let n="";const a=null==e?void 0:e.match(/\.([^.]+)$/);return a&&(n=a[1].toLowerCase()),null!==(t=u.get(n))&&void 0!==t?t:"unknown"}},72591:e=>{var t=[];function n(e){for(var n=-1,a=0;a<t.length;a++)if(t[a].identifier===e){n=a;break}return n}function a(e,a){for(var r={},i=[],s=0;s<e.length;s++){var l=e[s],c=a.base?l[0]+a.base:l[0],u=r[c]||0,d="".concat(c," ").concat(u);r[c]=u+1;var p=n(d),m={css:l[1],media:l[2],sourceMap:l[3],supports:l[4],layer:l[5]};if(-1!==p)t[p].references++,t[p].updater(m);else{var f=o(m,a);a.byIndex=s,t.splice(s,0,{identifier:d,updater:f,references:1})}i.push(d)}return i}function o(e,t){var n=t.domAPI(t);return n.update(e),function(t){if(t){if(t.css===e.css&&t.media===e.media&&t.sourceMap===e.sourceMap&&t.supports===e.supports&&t.layer===e.layer)return;n.update(e=t)}else n.remove()}}e.exports=function(e,o){var r=a(e=e||[],o=o||{});return function(e){e=e||[];for(var i=0;i<r.length;i++){var s=n(r[i]);t[s].references--}for(var l=a(e,o),c=0;c<r.length;c++){var u=n(r[c]);0===t[u].references&&(t[u].updater(),t.splice(u,1))}r=l}}},73656:e=>{e.exports=function(e,t){if(t.styleSheet)t.styleSheet.cssText=e;else{for(;t.firstChild;)t.removeChild(t.firstChild);t.appendChild(document.createTextNode(e))}}},78404:(e,t,n)=>{n.d(t,{U:()=>r});var a=n(80592);let o;function r(e,t){o||(o=document.createElement("div"),o.setAttribute("tab-index","-1"),o.setAttribute("aria-hidden","true"),document.body.appendChild(o)),o.setAttribute("style",(0,a.w)(e)),o.textContent=e.value.slice(0,t);const n=document.createElement("span");n.textContent="​",o.appendChild(n);const r=n.getBoundingClientRect();return n.remove(),{top:r.top,left:r.left}}},86572:(e,t,n)=>{n.d(t,{I:()=>r});var a=n(80592);let o;function r(e,t,n){o||(o=document.createElement("div"),o.setAttribute("tab-index","-1"),o.setAttribute("aria-hidden","true"),document.body.appendChild(o)),o.setAttribute("style",(0,a.w)(e)),o.textContent=t;const r=document.createElement("span");r.textContent=n,o.appendChild(r);const i=r.getBoundingClientRect();if(r.remove(),n.length<=1)return[i];const s=n[0],l=document.createElement("span");l.textContent=s,o.appendChild(l);const c=l.getBoundingClientRect();l.remove(),o.textContent=`${t}${n.slice(0,-1)}`;const u=n[n.length-1],d=document.createElement("span");d.textContent=u,o.appendChild(d);const p=d.getBoundingClientRect();if(d.remove(),c.top===p.top)return[i];const m=[];m.push(new DOMRect(c.left,c.top,i.right-c.left,c.bottom-c.top));const f=p.top-c.bottom;return f>=10&&m.push(new DOMRect(i.left,c.bottom,i.width,f)),m.push(new DOMRect(i.left,p.top,p.right-i.left,p.bottom-p.top)),m}},88128:e=>{var t={};e.exports=function(e,n){var a=function(e){if(void 0===t[e]){var n=document.querySelector(e);if(window.HTMLIFrameElement&&n instanceof window.HTMLIFrameElement)try{n=n.contentDocument.head}catch(e){n=null}t[e]=n}return t[e]}(e);if(!a)throw new Error("Couldn't find a style target. This probably means that the value for the 'insert' parameter is invalid.");a.appendChild(n)}},89575:(e,t,n)=>{function a(){return a=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var a in n)Object.prototype.hasOwnProperty.call(n,a)&&(e[a]=n[a])}return e},a.apply(this,arguments)}n.d(t,{A:()=>a})},93051:e=>{e.exports=function(e){var t=document.createElement("style");return e.setAttributes(t,e.attributes),e.insert(t,e.options),t}},93757:(e,t,n)=>{n.r(t),n.d(t,{getChatCommand:()=>i,setChatCommand:()=>r});var a=n(77019);let o=null;function r(e){o=e}function i(){return o}customElements.define("ai-portal.set-chat-command",(0,a.createProviderClass)(r))},94669:(e,t,n)=>{n.r(t),n.d(t,{ChatBox:()=>se,ChatBoxComponent:()=>ie});var a,o=n(74635),r=n(70918),i=n(24586),s=n(26902),l=n(5536),c=n(86121),u=n(70829),d=n(62740),p=n(18769),m=n.n(p),f=n(59435),h=n(90870),g=n(30981),v=n(78404),b=n(86572),x=n(92879),y=(n(34419),n(52616)),w=n(16195),A=n(47008),k=n(93757),C=n(57227),E=n(45387),S=n(51020),M=n(17753),I=n(45889),T=n(83403);let _,N,O,R,F,$,L,P,W,D,B,j,K,U,z,H,V,G,Y,q,Q,J,X,Z,ee,te;(0,y.initializeI18n)(w.NS,w.I);const{defineElement:ne,property:ae,event:oe,method:re}=(0,h.createDecorators)(),ie=(0,p.forwardRef)(Ae);let se;var le=new WeakMap,ce=new WeakMap,ue=new WeakMap,de=new WeakMap,pe=new WeakMap,me=new WeakMap,fe=new WeakMap,he=new WeakSet,ge=new WeakMap,ve=new WeakMap,be=new WeakMap,xe=new WeakMap,ye=new WeakMap;class we extends g.ReactNextElement{constructor(){super(...arguments),(0,o.A)(this,he),(0,i.A)(this,"ref",(_(this),(0,p.createRef)())),(0,r.A)(this,le,O(this)),(0,r.A)(this,ce,(R(this),F(this))),(0,r.A)(this,ue,($(this),L(this))),(0,r.A)(this,de,(P(this),W(this))),(0,r.A)(this,pe,(D(this),B(this))),(0,r.A)(this,me,(j(this),K(this))),(0,r.A)(this,fe,(U(this),z(this))),(0,r.A)(this,ge,(G(this),e=>{(0,l.A)(he,this,H).emit(e)})),(0,r.A)(this,ve,Y(this)),(0,r.A)(this,be,(J(this),e=>{(0,l.A)(he,this,q).emit(e)})),(0,r.A)(this,xe,X(this)),(0,r.A)(this,ye,(te(this),e=>{(0,l.A)(he,this,Z).emit(e)}))}get disabled(){return(0,u.A)(le,this)}set disabled(e){(0,c.A)(le,this,e)}get placeholder(){return(0,u.A)(ce,this)}set placeholder(e){(0,c.A)(ce,this,e)}get autoFocus(){return(0,u.A)(ue,this)}set autoFocus(e){(0,c.A)(ue,this,e)}get aiEmployees(){return(0,u.A)(de,this)}set aiEmployees(e){(0,c.A)(de,this,e)}get commands(){return(0,u.A)(pe,this)}set commands(e){(0,c.A)(pe,this,e)}get uploadOptions(){return(0,u.A)(me,this)}set uploadOptions(e){(0,c.A)(me,this,e)}setValue(e){var t;null===(t=this.ref.current)||void 0===t||t.setValue(e)}getValue(){var e;return null===(e=this.ref.current)||void 0===e?void 0:e.getValue()}focusOnInput(){var e;return null===(e=this.ref.current)||void 0===e?void 0:e.focusOnInput()}render(){return m().createElement(ie,{disabled:this.disabled,placeholder:this.placeholder,autoFocus:this.autoFocus,aiEmployees:this.aiEmployees,commands:this.commands,uploadOptions:this.uploadOptions,onMessageSubmit:(0,u.A)(ge,this),onChatSubmit:(0,u.A)(be,this),onCommandSelect:(0,u.A)(ye,this),ref:this.ref})}}function Ae(e,t){let{disabled:n,placeholder:a,autoFocus:o,aiEmployees:r,commands:i,uploadOptions:s,onMessageSubmit:l,onChatSubmit:c,onCommandSelect:u}=e;const d=(0,p.useRef)(null),h=(0,p.useRef)(null),[g,y]=(0,p.useState)(""),A=(0,p.useRef)(""),[S,_]=(0,p.useState)(null),[N,O]=(0,p.useState)(""),[R,F]=(0,p.useState)(0),[$,L]=(0,p.useState)([0]),[P,W]=(0,p.useState)(null),[D,B]=(0,p.useState)(null),[j,K]=(0,p.useState)(null),[U,z]=(0,p.useState)(null),[H,V]=(0,p.useState)(""),G=(0,p.useRef)(null),Y=null==s?void 0:s.enabled,{files:q,resetFiles:Q,appendFiles:J,removeFile:X,hasFiles:Z,allFilesDone:ee,fileInfos:te,exceeded:ne}=(0,I.O)(null==s?void 0:s.maxFiles);(0,p.useEffect)((()=>{Y||Q()}),[Y,Q]),(0,p.useEffect)((()=>{const e=window.__elevo_try_it_out;e&&delete window.__elevo_try_it_out,"string"==typeof(null==e?void 0:e.content)&&(A.current=e.content,y(e.content))}),[]),(0,p.useImperativeHandle)(t,(()=>({setValue:e=>{A.current=e,y(e)},getValue:()=>A.current,focusOnInput:()=>{var e;null===(e=h.current)||void 0===e||e.focus()}})));const ae=(0,p.useCallback)((e=>{const t=e.slice(H.length||N.length);l(t),c({content:t,files:te,cmd:P,aiEmployeeId:D})}),[H.length,N.length,P,te,D,c,l]),oe=(0,p.useCallback)((e=>{e.currentTarget.value&&ee&&ae(e.currentTarget.value)}),[ae,ee]),re=(0,p.useCallback)((e=>{const{value:t,selectionStart:n,selectionEnd:a}=e.target;if(A.current=t,y(t),null!==n&&n===a&&null!=r&&r.length){const a=t.slice(0,n);if(a.startsWith("@")){const t=a.slice(1).toLowerCase(),o=r.filter((e=>e.employeeId.toLowerCase().includes(t)||e.name.toLowerCase().includes(t))).slice(0,10);if(o.length>0){const t=(0,v.U)(e.currentTarget,n),a=e.currentTarget.getBoundingClientRect();return _({style:{left:t.left+10+a.left,top:t.top+22+a.top,position:"absolute",zIndex:1},range:{start:0,end:n},actions:o.map((e=>({key:e.employeeId,text:e.name,data:e})))}),void F(0)}}}if(_(null),null!==n&&n===a&&null!=i&&i.length){const a=t.slice(0,n);if(a.startsWith("/")){const t=a.slice(1).toLowerCase(),o=i.filter((e=>e.label.toLowerCase().includes(t))).slice(0,10);if(o.length>0){const t=(0,v.U)(e.currentTarget,n),a=e.currentTarget.getBoundingClientRect();return K({style:{left:t.left+10+a.left,top:t.top+22+a.top,position:"absolute",zIndex:1},range:{start:0,end:n},actions:o.map((e=>({key:e.value,text:e.label,data:e,ancestors:[],items:ke(e,[]),payload:e.payload})))}),void L([0])}}}K(null)}),[r,i]);(0,p.useEffect)((()=>{N&&!g.includes(N)&&(O(""),B(null))}),[N,g]),(0,p.useEffect)((()=>{H&&!g.includes(H)&&(V(""),W(null),u(null))}),[H,u,g]);const ie=(0,p.useCallback)((()=>{ae(A.current)}),[ae]);(0,p.useEffect)((()=>{o&&Promise.resolve().then((()=>{var e;null===(e=h.current)||void 0===e||e.focus()}))}),[]);const se=(0,p.useMemo)((()=>{var e;const t=null===(e=h.current)||void 0===e?void 0:e.element;if(!N||!t)return"";const n=g.indexOf(N);return n<0?"":g.slice(0,n)}),[N,g]),le=(0,p.useMemo)((()=>{var e;const t=null===(e=h.current)||void 0===e?void 0:e.element;return N&&t?(0,b.I)(t,se,N.slice(0,-1)).map((e=>({left:e.left-1,top:e.top-1,width:e.width+4,height:e.height+4}))):null}),[N,se]);(0,p.useEffect)((()=>{var e;const t=null===(e=h.current)||void 0===e?void 0:e.element;if(!H||!t)return void z(null);const n=(0,b.I)(t,"",H.slice(0,-1));z(n.map((e=>({left:e.left-1,top:e.top-1,width:e.width+4,height:e.height+4}))))}),[H]);const ce=(0,p.useMemo)((()=>{const e=(0,k.getChatCommand)();return e&&(0,k.setChatCommand)(null),e}),[]);(0,p.useEffect)((()=>{ce&&(W(ce.payload),u(ce.payload))}),[ce,u]),(0,p.useEffect)((()=>{var e;const t=null===(e=h.current)||void 0===e?void 0:e.element;if(ce&&t){const e=`/${ce.command} `,n=(0,b.I)(t,"",e.slice(0,-1));z(n.map((e=>({left:e.left-1,top:e.top-1,width:e.width+4,height:e.height+4})))),A.current=e,G.current={start:e.length,end:e.length},y(e),V(e)}}),[ce]);const ue=(0,p.useCallback)((e=>{var t;const n=`@${e.text} `,a=`${A.current.slice(0,S.range.start)}${n}`,o=`${a}${A.current.slice(S.range.end)}`;A.current=o,G.current={start:a.length,end:a.length},y(o),O(n),_(null),B(e.data.employeeId),null===(t=h.current)||void 0===t||t.focus()}),[S]),de=(0,p.useCallback)((e=>{var t;const n=`/${[...e.ancestors.map((e=>e.label)),e.text].join(": ")} `,a=`${A.current.slice(0,j.range.start)}${n}`,o=`${a}${A.current.slice(j.range.end)}`;A.current=o,G.current={start:a.length,end:a.length},y(o),V(n),K(null),W(e.payload),u(e.payload),null===(t=h.current)||void 0===t||t.focus()}),[j,u]),pe=(0,p.useCallback)((e=>{switch(e.key){case"Escape":if(!S&&!j)return;return e.preventDefault(),e.stopPropagation(),e.nativeEvent.stopImmediatePropagation(),_(null),K(null),!1;case"ArrowUp":case"ArrowDown":if(!S&&!j)return;return e.preventDefault(),e.stopPropagation(),e.nativeEvent.stopImmediatePropagation(),S?F((t=>{const n=t+("ArrowUp"===e.key?-1:1),a=S.actions.length;return(a+n)%a})):L((t=>{let n=0,{actions:a}=j;const o=[];for(;n<t.length-1;){const e=a[t[n]];if(!Ce(e))break;a=e.items,o.push(t[n]),n+=1}const r=t[n]+("ArrowUp"===e.key?-1:1),i=a.length,s=(i+r)%i;return o.push(s),o})),!1;case"Enter":case"ArrowLeft":case"ArrowRight":if(S){if("Enter"===e.key)return e.preventDefault(),e.stopPropagation(),e.nativeEvent.stopImmediatePropagation(),ue(S.actions[R]),!1}else if(j){if(e.preventDefault(),e.stopPropagation(),e.nativeEvent.stopImmediatePropagation(),"ArrowLeft"===e.key)return $.length>1&&L((e=>e.slice(0,-1))),!1;let t,n=0,{actions:a}=j;for(;n<$.length&&(t=a[$[n]],Ce(t));)a=t.items,n+=1;return t&&(Ce(t)?L((e=>[...e,0])):"Enter"===e.key&&de(t)),!1}break;case"Delete":case"Backspace":{const t=[{textLength:null==N?void 0:N.length,prefixLength:se.length},{textLength:null==H?void 0:H.length,prefixLength:0}];for(const{textLength:n,prefixLength:a}of t)if(n){let{selectionStart:t,selectionEnd:o}=e.currentTarget;t===o&&("Backspace"===e.key?t-=1:o+=1);const r=a,i=r+n;if(t<i&&o>r){const n=Math.min(t,r),a=Math.max(o,i),s=`${A.current.slice(0,n)}${A.current.slice(a)}`;return A.current=s,G.current={start:n,end:n},y(s),e.preventDefault(),e.stopPropagation(),!1}}break}}}),[R,$,j,null==H?void 0:H.length,ue,de,S,se.length,null==N?void 0:N.length]),me=(0,p.useMemo)((()=>{if(!j)return[];let e=j.actions;const t=[];for(let n=0;n<$.length;n+=1){const a=e[$[n]];if(!a)break;if(!Ce(a)){t.push(a.key);break}t.push(a.key),e=a.items}return t}),[$,j]),fe=(0,p.useRef)(null),he=(0,p.useCallback)((e=>{var t;J(e.map((e=>({uid:(0,C.Q)(),file:e,status:"ready"})))),null===(t=h.current)||void 0===t||t.focus()}),[J]);return m().createElement(m().Fragment,null,m().createElement("div",{className:"root"},m().createElement("div",{className:"container",ref:d},m().createElement(x.e,{containerRef:d,ref:h,value:g,minRows:58/22,paddingSize:Z?144:60,autoResize:!0,disabled:n,placeholder:null!=a?a:(0,w.t)(w.K.ASK_ANY_THING),submitWhen:"enter-without-shift",desiredSelectionRef:G,onSubmit:oe,onChange:re,onKeyDown:pe,style:{paddingTop:Z?94:10}}),Z&&m().createElement(E.C,{files:q,onRemove:(e,t)=>{X(e),null==t||t.abort()},onAdd:()=>{var e;null===(e=fe.current)||void 0===e||e.requestUpload()}}),m().createElement("div",{className:"actions-bar"},m().createElement("div",null,m().createElement("slot",{name:"actions"})),m().createElement("div",{className:"buttons"},Y?m().createElement(m().Fragment,null,m().createElement(C.s,{ref:fe,accept:null==s?void 0:s.accept,disabled:ne,onChange:e=>{var t;J(e),null===(t=h.current)||void 0===t||t.focus()}}),m().createElement("div",{className:"btn-divider"})):null,m().createElement("button",{className:"btn-send",disabled:!g||!ee,onClick:ie},m().createElement(M.Bj,{lib:"fa",prefix:"fas",icon:"arrow-up"})))),null==le?void 0:le.map(((e,t)=>m().createElement("div",{key:t,className:"mention-overlay",style:e}))),null==U?void 0:U.map(((e,t)=>m().createElement("div",{key:t,className:"mention-overlay",style:e}))),S&&(0,f.createPortal)(m().createElement(M.Tl,{actions:S.actions,style:S.style,activeKeys:[S.actions[R].key],onActionClick:e=>ue(e.detail)}),document.body),j&&(0,f.createPortal)(m().createElement(M.Tl,{actions:j.actions,style:j.style,activeKeys:me,onActionClick:e=>de(e.detail)}),document.body))),m().createElement(T.A,{disabled:!Y||ne,accept:null==s?void 0:s.accept,dragTips:null==s?void 0:s.dragTips,onFilesDropped:he}))}function ke(e,t){var n;return null===(n=e.options)||void 0===n?void 0:n.map((n=>{const a=[...t,e];return{key:n.value,text:n.label,data:n,ancestors:a,items:ke(n,a),payload:n.payload}}))}function Ce(e){var t;return!(null===(t=e.items)||void 0===t||!t.length)}a=we,({e:[O,R,F,$,L,P,W,D,B,j,K,U,z,H,V,G,Y,q,Q,J,X,Z,ee,te,_],c:[se,N]}=(0,d.A)(a,[ne("ai-portal.chat-box",{styleTexts:[A.A,S.A],shadowOptions:{delegatesFocus:!0}})],[[ae({type:Boolean}),1,"disabled"],[ae(),1,"placeholder"],[ae({type:Boolean}),1,"autoFocus"],[ae({attribute:!1}),1,"aiEmployees"],[ae({attribute:!1}),1,"commands"],[ae({attribute:!1}),1,"uploadOptions"],[oe({type:"message.submit"}),1,"messageSubmit",e=>(0,u.A)(fe,e),(e,t)=>(0,c.A)(fe,e,t)],[oe({type:"chat.submit"}),1,"chatSubmit",e=>(0,u.A)(ve,e),(e,t)=>(0,c.A)(ve,e,t)],[oe({type:"command.select"}),1,"commandSelect",e=>(0,u.A)(xe,e),(e,t)=>(0,c.A)(xe,e,t)],[re(),2,"setValue"],[re(),2,"getValue"],[re(),2,"focusOnInput"]],0,(e=>ye.has((0,s.A)(e))),g.ReactNextElement)),N()}}]);
2
+ //# sourceMappingURL=chat-box.1b2a4a02.js.map