@next-bricks/ai-portal 0.20.13 → 0.21.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 (77) hide show
  1. package/dist/bricks.json +35 -23
  2. package/dist/chunks/2312.776924b8.js +3 -0
  3. package/dist/chunks/2312.776924b8.js.LICENSE.txt +1 -0
  4. package/dist/chunks/2312.776924b8.js.map +1 -0
  5. package/dist/chunks/2679.94e8a688.js +3 -0
  6. package/dist/chunks/{4410.14ec23d5.js.LICENSE.txt → 2679.94e8a688.js.LICENSE.txt} +0 -2
  7. package/dist/chunks/2679.94e8a688.js.map +1 -0
  8. package/dist/chunks/2873.4150a3c1.js +2 -0
  9. package/dist/chunks/2873.4150a3c1.js.map +1 -0
  10. package/dist/chunks/4845.b7e94ccb.js +3 -0
  11. package/dist/chunks/4845.b7e94ccb.js.map +1 -0
  12. package/dist/chunks/662.c85cde62.js +2 -0
  13. package/dist/chunks/662.c85cde62.js.map +1 -0
  14. package/dist/chunks/7654.2939b726.js +2 -0
  15. package/dist/chunks/7654.2939b726.js.map +1 -0
  16. package/dist/chunks/chat-box.a303e83d.js +2 -0
  17. package/dist/chunks/chat-box.a303e83d.js.map +1 -0
  18. package/dist/chunks/chat-history.720bb746.js +3 -0
  19. package/dist/chunks/chat-history.720bb746.js.map +1 -0
  20. package/dist/chunks/chat-stream.f2653a5d.js +2 -0
  21. package/dist/chunks/chat-stream.f2653a5d.js.map +1 -0
  22. package/dist/chunks/cruise-canvas.36738895.js +2 -0
  23. package/dist/chunks/cruise-canvas.36738895.js.map +1 -0
  24. package/dist/chunks/elevo-sidebar.05379cd1.js +3 -0
  25. package/dist/chunks/elevo-sidebar.05379cd1.js.map +1 -0
  26. package/dist/chunks/main.471c9ce9.js +2 -0
  27. package/dist/chunks/main.471c9ce9.js.map +1 -0
  28. package/dist/examples.json +14 -11
  29. package/dist/images/de350a46.png +0 -0
  30. package/dist/index.af48aa2e.js +2 -0
  31. package/dist/index.af48aa2e.js.map +1 -0
  32. package/dist/manifest.json +219 -147
  33. package/dist/types.json +472 -301
  34. package/dist-types/bootstrap.d.ts +1 -0
  35. package/dist-types/chat-stream/AssistantMessage/AssistantMessage.d.ts +7 -0
  36. package/dist-types/chat-stream/NodeJob/NodeJob.d.ts +7 -0
  37. package/dist-types/chat-stream/UserMessage/UserMessage.d.ts +5 -0
  38. package/dist-types/chat-stream/i18n.d.ts +14 -0
  39. package/dist-types/chat-stream/index.d.ts +26 -0
  40. package/dist-types/chat-stream/interfaces.d.ts +10 -0
  41. package/dist-types/chat-stream/useChatStream.d.ts +3 -0
  42. package/dist-types/cruise-canvas/CanvasContext.d.ts +5 -1
  43. package/dist-types/cruise-canvas/NodeFeedback/NodeFeedback.d.ts +1 -0
  44. package/dist-types/cruise-canvas/constants.d.ts +1 -0
  45. package/dist-types/cruise-canvas/getOrderedJobs.d.ts +10 -0
  46. package/dist-types/cruise-canvas/i18n.d.ts +11 -7
  47. package/dist-types/cruise-canvas/index.d.ts +6 -0
  48. package/dist-types/cruise-canvas/interfaces.d.ts +10 -1
  49. package/dist-types/cruise-canvas/useLayout.d.ts +2 -1
  50. package/dist-types/cruise-canvas/useTaskGraph.d.ts +2 -1
  51. package/dist-types/elevo-sidebar/ChatHistory.d.ts +5 -1
  52. package/dist-types/elevo-sidebar/index.d.ts +4 -0
  53. package/docs/chat-stream.md +11 -0
  54. package/package.json +2 -2
  55. package/dist/chunks/1165.9f35625d.js +0 -2
  56. package/dist/chunks/1165.9f35625d.js.map +0 -1
  57. package/dist/chunks/3362.90a6e017.js +0 -2
  58. package/dist/chunks/3362.90a6e017.js.map +0 -1
  59. package/dist/chunks/4410.14ec23d5.js +0 -3
  60. package/dist/chunks/4410.14ec23d5.js.map +0 -1
  61. package/dist/chunks/8230.e8052bfd.js +0 -3
  62. package/dist/chunks/8230.e8052bfd.js.map +0 -1
  63. package/dist/chunks/chat-box.2fbc1947.js +0 -2
  64. package/dist/chunks/chat-box.2fbc1947.js.map +0 -1
  65. package/dist/chunks/chat-history.73bb371f.js +0 -3
  66. package/dist/chunks/chat-history.73bb371f.js.map +0 -1
  67. package/dist/chunks/cruise-canvas.0f61fbbc.js +0 -2
  68. package/dist/chunks/cruise-canvas.0f61fbbc.js.map +0 -1
  69. package/dist/chunks/elevo-sidebar.859a89ed.js +0 -3
  70. package/dist/chunks/elevo-sidebar.859a89ed.js.map +0 -1
  71. package/dist/chunks/main.c5a8080f.js +0 -2
  72. package/dist/chunks/main.c5a8080f.js.map +0 -1
  73. package/dist/index.975dc931.js +0 -2
  74. package/dist/index.975dc931.js.map +0 -1
  75. /package/dist/chunks/{8230.e8052bfd.js.LICENSE.txt → 4845.b7e94ccb.js.LICENSE.txt} +0 -0
  76. /package/dist/chunks/{chat-history.73bb371f.js.LICENSE.txt → chat-history.720bb746.js.LICENSE.txt} +0 -0
  77. /package/dist/chunks/{elevo-sidebar.859a89ed.js.LICENSE.txt → elevo-sidebar.05379cd1.js.LICENSE.txt} +0 -0
@@ -1 +0,0 @@
1
- {"version":3,"file":"chunks/3362.90a6e017.js","mappings":"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","sources":["webpack:///./src/cruise-canvas/FileList/FileList.module.css","webpack:///./src/cruise-canvas/utils/converters/raw-data-generate/getMemberAccessor.ts","webpack:///./src/cruise-canvas/utils/converters/raw-data-generate/convert.ts","webpack:///./src/cruise-canvas/i18n.ts","webpack:///./src/cruise-canvas/ToolProgressLine/ToolProgressLine.module.css?1d0e","webpack:///./src/cruise-canvas/ToolProgressLine/ToolProgressLine.tsx","webpack:///./src/cruise-canvas/utils/converters/getModelObjectInstanceId.ts","webpack:///./src/cruise-canvas/Nav/Nav.module.css","webpack:///./src/cruise-canvas/constants.ts","webpack:///./src/cruise-canvas/Topology/Topology.module.css","webpack:///./src/cruise-canvas/NodeRequirement/NodeRequirement.module.css?7927","webpack:///./src/cruise-canvas/NodeRequirement/NodeRequirement.tsx","webpack:///./src/cruise-canvas/styles.module.css","webpack:///./src/cruise-canvas/NodeStart/NodeStart.module.css?c135","webpack:///./src/cruise-canvas/NodeStart/NodeStart.tsx","webpack:///./src/cruise-canvas/utils/createPortal.ts","webpack:///./src/cruise-canvas/NodeJob/NodeJob.module.css?69ec","webpack:///./src/cruise-canvas/ChatBox/ChatBox.module.css","webpack:///./src/cruise-canvas/ReplayToolbar/ReplayToolbar.module.css","webpack:///./src/cruise-canvas/styles.module.css?7c94","webpack:///./src/cruise-canvas/ZoomBar/ZoomBar.module.css?7d53","webpack:///./src/cruise-canvas/ZoomBar/ZoomBar.tsx","webpack:///./src/cruise-canvas/NodeRequirement/NodeRequirement.module.css","webpack:///./src/cruise-canvas/utils/converters/findObjectIdByUsedDataContexts.ts","webpack:///./src/cruise-canvas/utils/converters/convertDescriptions.ts","webpack:///./src/cruise-canvas/utils/converters/convertDashboard.ts","webpack:///./src/cruise-canvas/utils/converters/convertTable.ts","webpack:///./src/cruise-canvas/utils/converters/convertEvents.ts","webpack:///./src/cruise-canvas/utils/converters/convertView.ts","webpack:///./src/cruise-canvas/utils/converters/convertList.ts","webpack:///./src/cruise-canvas/utils/converters/convertButton.ts","webpack:///./src/cruise-canvas/utils/converters/convertForm.ts","webpack:///./src/cruise-canvas/utils/converters/convertFormItem.ts","webpack:///./src/cruise-canvas/utils/converters/convertFlexLayout.ts","webpack:///./src/cruise-canvas/utils/converters/convertModal.ts","webpack:///./src/cruise-canvas/useAutoCenter.ts","webpack:///./src/cruise-canvas/shared.module.css?c988","webpack:///./src/cruise-canvas/utils/converters/expressions.ts","webpack:///./src/cruise-canvas/NodeView/NodeView.module.css?cce0","webpack:///./src/cruise-canvas/NodeView/NodeView.tsx","webpack:///./src/cruise-canvas/NodeEnd/NodeEnd.module.css?bd4b","webpack:///./src/cruise-canvas/NodeEnd/NodeEnd.tsx","webpack:///./src/cruise-canvas/Topology/node.shadow.css","webpack:///../../src/schemas.ts","webpack:///../../src/utils.ts","webpack:///../../../src/constructors/values.ts","webpack:///../../../src/constructors/events.ts","webpack:///../../../src/constructors/element.ts","webpack:///../../../src/constructors/view.ts","webpack:///../../src/parseJsx.ts","webpack:///./src/cruise-canvas/reducers/jobs.ts","webpack:///./src/cruise-canvas/reducers/index.ts","webpack:///./src/cruise-canvas/reducers/task.ts","webpack:///./src/cruise-canvas/reducers/error.ts","webpack:///./src/cruise-canvas/useTaskDetail.ts","webpack:///../../src/rehypePrism.ts","webpack:///../../src/rehypeMermaid.ts","webpack:///../../src/MarkdownComponent.tsx","webpack:///./src/cruise-canvas/EnhancedMarkdown/EnhancedMarkdown.tsx","webpack:///./src/cruise-canvas/ToolCallStatus/ToolCallStatus.module.css?6208","webpack:///./src/cruise-canvas/utils/getToolDataProgress.ts","webpack:///./src/cruise-canvas/ToolCallStatus/ToolCallStatus.tsx","webpack:///./src/cruise-canvas/ToolCallStatus/ToolCallStatus.module.css","webpack:///./src/cruise-canvas/HumanConfirm/HumanConfirm.module.css","webpack:///./src/cruise-canvas/ExpandedView/ExpandedView.module.css","webpack:///./src/cruise-canvas/utils/converters/withBox.ts","webpack:///./src/cruise-canvas/Nav/Nav.module.css?7d2d","webpack:///./src/cruise-canvas/Nav/Nav.tsx","webpack:///./src/cruise-canvas/HumanAdjustPlan/HumanAdjustPlan.module.css","webpack:///./src/cruise-canvas/bricks.ts","webpack:///./src/cruise-canvas/utils/converters/getPreGeneratedMetricGroups.ts","webpack:///./src/cruise-canvas/CmdbInstanceDetail/CmdbInstanceDetail.module.css","webpack:///./src/cruise-canvas/NodeInstruction/NodeInstruction.module.css?5e68","webpack:///./src/cruise-canvas/NodeInstruction/NodeInstruction.tsx","webpack:///./src/cruise-canvas/utils/handleKeyboardNav.ts","webpack:///./src/cruise-canvas/utils/jsx-converters/convertEvents.ts","webpack:///./src/cruise-canvas/utils/jsx-converters/findObjectIdByUsedDataContexts.ts","webpack:///./src/cruise-canvas/utils/jsx-converters/convertTable.ts","webpack:///./src/cruise-canvas/utils/jsx-converters/convertDescriptions.ts","webpack:///./src/cruise-canvas/utils/jsx-converters/convertDashboard.ts","webpack:///./src/cruise-canvas/utils/jsx-converters/convertJsx.ts","webpack:///./src/cruise-canvas/utils/jsx-converters/convertList.ts","webpack:///./src/cruise-canvas/utils/jsx-converters/convertButton.ts","webpack:///./src/cruise-canvas/utils/jsx-converters/convertForm.ts","webpack:///./src/cruise-canvas/utils/jsx-converters/convertToolbar.ts","webpack:///./src/cruise-canvas/utils/jsx-converters/convertModal.ts","webpack:///./src/cruise-canvas/utils/jsx-converters/convertFormItem.ts","webpack:///./src/cruise-canvas/utils/jsx-converters/convertDataSources.ts","webpack:///./src/cruise-canvas/utils/jsx-converters/convertVariables.ts","webpack:///./src/cruise-canvas/NodeJob/NodeJob.module.css","webpack:///./src/cruise-canvas/NodeView/NodeView.module.css","webpack:///./src/cruise-canvas/useZoom.ts","webpack:///./src/cruise-canvas/Topology/Topology.module.css?a867","webpack:///./src/cruise-canvas/diagram.ts","webpack:///./src/cruise-canvas/Topology/Topology.tsx","webpack:///./src/cruise-canvas/NodeStart/NodeStart.module.css","webpack:///./src/cruise-canvas/useTaskGraph.ts","webpack:///./src/cruise-canvas/ReplayToolbar/ReplayToolbar.module.css?41a8","webpack:///./src/cruise-canvas/ReplayToolbar/ReplayToolbar.tsx","webpack:///./src/cruise-canvas/utils/getScrollTo.ts","webpack:///./src/cruise-canvas/FilePreview/FilePreview.module.css?cc18","webpack:///./src/cruise-canvas/FilePreview/FilePreview.tsx","webpack:///./src/cruise-canvas/NodeInstruction/NodeInstruction.module.css","webpack:///./src/cruise-canvas/utils/converters/findNearestCandidate.ts","webpack:///./src/cruise-canvas/utils/converters/getPreGeneratedAttrViews.ts","webpack:///./src/cruise-canvas/ChatBox/ChatBox.module.css?d212","webpack:///./src/cruise-canvas/ChatBox/ChatBox.tsx","webpack:///./src/cruise-canvas/ToolProgressLine/ToolProgressLine.module.css","webpack:///./src/cruise-canvas/utils/jsx-converters/isJsxView.ts","webpack:///../../src/mergeRects.ts","webpack:///../../../src/utils/calculateAutoSizeStyle.ts","webpack:///../../src/TextareaAutoResize.tsx","webpack:///./src/cruise-canvas/ToolCallDetail/ToolCallDetail.module.css?7f00","webpack:///./src/cruise-canvas/ToolCallDetail/ToolCallDetail.tsx","webpack:///./src/cruise-canvas/cmdb.tsx","webpack:///./src/cruise-canvas/HumanConfirm/HumanConfirm.module.css?f400","webpack:///./src/cruise-canvas/HumanConfirm/HumanConfirm.tsx","webpack:///./src/cruise-canvas/HumanAdjustPlan/HumanAdjustPlan.module.css?1f4e","webpack:///./src/cruise-canvas/getContentEditable.ts","webpack:///./src/cruise-canvas/HumanAdjustPlan/HumanAdjustPlan.tsx","webpack:///./src/cruise-canvas/HumanAdjustPlanResult/HumanAdjustPlanResult.tsx","webpack:///./src/cruise-canvas/CmdbInstanceDetail/CmdbInstanceDetail.module.css?7513","webpack:///./src/cruise-canvas/CmdbInstanceDetail/CmdbInstanceDetail.tsx","webpack:///./src/cruise-canvas/FileList/FileList.module.css?e818","webpack:///./src/cruise-canvas/FileList/FileList.tsx","webpack:///./src/cruise-canvas/NodeJob/NodeJob.tsx","webpack:///./src/cruise-canvas/NodeEnd/NodeEnd.module.css","webpack:///./src/cruise-canvas/toolbar.module.css","webpack:///./src/cruise-canvas/CodeBlock/CodeBlock.module.css","webpack:///./src/cruise-canvas/ExpandedView/ExpandedView.module.css?bf77","webpack:///./src/cruise-canvas/ExpandedView/ExpandedView.tsx","webpack:///./src/cruise-canvas/ZoomBar/ZoomBar.module.css","webpack:///./src/cruise-canvas/utils/file.ts","webpack:///./src/cruise-canvas/FilePreview/FilePreview.module.css","webpack:///./src/cruise-canvas/CanvasContext.ts","webpack:///./src/cruise-canvas/CodeBlock/CodeBlock.module.css?37c1","webpack:///./src/cruise-canvas/CodeBlock/CodeBlock.tsx","webpack:///./src/cruise-canvas/toolbar.module.css?a4b4","webpack:///./src/cruise-canvas/ToolCallDetail/ToolCallDetail.module.css","webpack:///./src/cruise-canvas/shared.module.css","webpack:///./src/cruise-canvas/useLayout.ts"],"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, `.files--SBFNeFls{display:grid;grid-template-columns:repeat(auto-fit,minmax(210px,1fr));gap:4px;list-style:none;margin:12px 0 0;padding:0}.large--M2NOUc4a{grid-template-columns:repeat(auto-fill,minmax(250px,1fr))}.file--sJi1z1FZ{background:rgba(0,0,0,0.04);border-radius:8px;display:flex;height:60px;align-items:center;padding:0 14px}.file--sJi1z1FZ,\n.file--sJi1z1FZ:hover{color:var(--elevo-color-brand)}.file--sJi1z1FZ:hover{background:rgba(0,0,0,0.08)}.content--W8hFyMBh{min-width:0;flex:1}.icon--OV3uC006{margin-right:11px}.name--i9JLowqW,\n.metadata--xbNLgFgO{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.name--i9JLowqW{color:rgba(0,0,0,0.88)}.metadata--xbNLgFgO{color:rgba(0,0,0,0.45);font-size:12px;margin-top:3px}`, \"\"]);\n// Exports\n___CSS_LOADER_EXPORT___.locals = {\n\t\"files\": `files--SBFNeFls`,\n\t\"large\": `large--M2NOUc4a`,\n\t\"file\": `file--sJi1z1FZ`,\n\t\"content\": `content--W8hFyMBh`,\n\t\"icon\": `icon--OV3uC006`,\n\t\"name\": `name--i9JLowqW`,\n\t\"metadata\": `metadata--xbNLgFgO`\n};\nexport default ___CSS_LOADER_EXPORT___;\n","const VALID_IDENTIFIER_REG = /^[$_\\p{ID_Start}][$\\p{ID_Continue}]*$/u;\n\nexport function getMemberAccessor(property: unknown): string {\n const propertyStr = String(property);\n return VALID_IDENTIFIER_REG.test(propertyStr)\n ? `.${propertyStr}`\n : `[${JSON.stringify(propertyStr)}]`;\n}\n","import type { BrickConf } from \"@next-core/types\";\nimport _ from \"lodash\";\nimport type { VisualConfig, VisualStyle } from \"./raw-data-interfaces.js\";\nimport { getMemberAccessor } from \"./getMemberAccessor.js\";\nimport type { ConvertBrickOptions } from \"../interfaces.js\";\n\nconst { pick } = _;\n\nexport function convertToStoryboard(\n config: VisualConfig,\n attr: string,\n options?: ConvertBrickOptions\n): BrickConf | null {\n return lowLevelConvertToStoryboard(config, getMemberAccessor(attr), options);\n}\n\nexport function lowLevelConvertToStoryboard(\n config: VisualConfig,\n attrAccessor: string,\n options?: ConvertBrickOptions\n): BrickConf | null {\n let brickItem: BrickConf;\n\n switch (config.display) {\n case \"link\":\n case \"text\": {\n brickItem = getPlainBrick(config, attrAccessor, options);\n if (config.type === \"struct-list\" && !config.countOnly) {\n brickItem = {\n brick: \"eo-tag\",\n // errorBoundary: true,\n children: [brickItem],\n };\n } else if (config.display === \"link\") {\n brickItem = {\n brick: \"eo-link\",\n // errorBoundary: true,\n children: [brickItem],\n };\n }\n break;\n }\n case \"tag\": {\n const colorSuffix =\n config.style?.variant === \"background\" ? \"-inverse\" : \"\";\n const valueAccessor = getValueAccessor(config, attrAccessor);\n brickItem = {\n brick: \"eo-tag\",\n // errorBoundary: true,\n properties: {\n textContent: `<% ${valueAccessor} %>`,\n size: getTagSize(config.style?.size),\n color: config.style?.background\n ? `${config.style.background}${colorSuffix}`\n : config.style?.palette\n ? `<%\n \\`\\${new Map(Object.entries(${JSON.stringify(\n config.style.palette,\n null,\n 2\n ).replaceAll(\"\\n\", \"\\n \")})).get(${valueAccessor}) ?? \"gray\"}${colorSuffix}\\`\n%>`\n : `gray${colorSuffix}`,\n outline: config.style?.variant === \"outline\",\n },\n };\n break;\n }\n case \"icon\": {\n brickItem = getIconBrick(config, attrAccessor, options);\n break;\n }\n case \"icon+text\": {\n const iconBrick = getIconBrick(config, attrAccessor, options);\n const textBrick = getPlainBrick(config, attrAccessor, options);\n brickItem = {\n brick: \"span\",\n // errorBoundary: true,\n properties: {\n style: {\n display: \"inline-flex\",\n alignItems: \"center\",\n gap: \"0.5em\",\n },\n },\n children: [iconBrick, textBrick],\n };\n break;\n }\n default:\n return null;\n }\n\n if (config.type !== \"struct-list\" || config.countOnly) {\n return brickItem;\n }\n\n const maxItems = Number(config.maxItems) || 3;\n return {\n brick: \"span\",\n // errorBoundary: true,\n properties: {\n style: {\n display: \"inline-flex\",\n alignItems: \"center\",\n gap: \"0.5em\",\n },\n },\n children: [\n {\n brick: \":forEach\",\n dataSource: `<% DATA${attrAccessor}.slice(0, ${maxItems}) %>`,\n children: [brickItem],\n },\n {\n brick: \"eo-link\",\n if: `<% DATA${attrAccessor}.length > ${maxItems} %>`,\n properties: {\n textContent: `<% \\`+ \\${DATA${attrAccessor}.length - ${maxItems}}\\` %>`,\n },\n },\n ],\n };\n}\n\nfunction getIconBrick(\n config: VisualConfig,\n attrAccessor: string,\n options?: ConvertBrickOptions\n): BrickConf {\n if (config.type === \"boolean\") {\n const valueAccessor = getValueAccessor(config, attrAccessor);\n const trueIcon = config.true?.icon ?? \"check\";\n const falseIcon = config.false?.icon ?? \"xmark\";\n const trueStyle = getPlainStyle(config.true?.style, options);\n const falseStyle = getPlainStyle(config.false?.style, options);\n return {\n brick: \"eo-icon\",\n // errorBoundary: true,\n properties: {\n lib: \"fa\",\n prefix: \"fas\",\n icon: `<% ${valueAccessor} ? ${JSON.stringify(trueIcon)} : ${JSON.stringify(falseIcon)} %>`,\n style: `<% ${valueAccessor} ? ${JSON.stringify(trueStyle)} : ${JSON.stringify(falseStyle)} %>`,\n },\n };\n }\n\n if (config.type === \"json\") {\n const valueAccessor = getValueAccessor(config, attrAccessor);\n return {\n brick: \"eo-icon\",\n // errorBoundary: true,\n properties: {\n lib: `<% ${valueAccessor}?.lib %>`,\n prefix: `<% ${valueAccessor}?.prefix %>`,\n category: `<% ${valueAccessor}?.category %>`,\n theme: `<% ${valueAccessor}?.theme %>`,\n icon: `<% ${valueAccessor}?.icon %>`,\n style: getPlainStyle(config.style, options),\n },\n };\n }\n\n return {\n brick: \"eo-icon\",\n // errorBoundary: true,\n properties: {\n lib: \"fa\",\n prefix: \"fas\",\n icon: config.icon,\n style: getPlainStyle(config.style, options),\n },\n };\n}\n\nfunction getPlainBrick(\n config: VisualConfig,\n attrAccessor: string,\n options?: ConvertBrickOptions\n): BrickConf {\n if (config.type === \"struct-list\" && config.countOnly) {\n return {\n brick: \"span\",\n properties: {\n textContent: `<% \\`\\${DATA${attrAccessor}.length}\\` %>`,\n },\n };\n }\n\n const valueAccessor = getValueAccessor(config, attrAccessor);\n const value = `<% ${valueAccessor} %>`;\n switch (config.formatter?.type) {\n case \"number\":\n return {\n brick: \"eo-formatter-number\",\n // errorBoundary: true,\n properties: {\n value,\n type: config.formatter.format,\n ...pick(config.formatter, [\n \"currency\",\n // \"unit\",\n \"originalUnit\",\n \"decimals\",\n \"thousandsSeparator\",\n ]),\n style: getPlainStyle(config.style, options),\n },\n };\n case \"date\":\n case \"date-time\":\n return {\n brick: \"eo-humanize-time\",\n // errorBoundary: true,\n properties: {\n value,\n type: config.type === \"date\" ? \"date\" : undefined,\n formatter: config.formatter.format,\n style: getPlainStyle(config.style, options),\n },\n };\n case \"cost-time\":\n return {\n brick: \"eo-humanize-time\",\n // errorBoundary: true,\n properties: {\n value,\n isCostTime: true,\n style: getPlainStyle(config.style, options),\n },\n };\n default: {\n let textContent: string | undefined;\n let style: Record<string, any> | string | undefined;\n let tag = \"span\";\n if (config.type === \"boolean\") {\n const trueContent = config.true?.text ?? \"Yes\";\n const falseContent = config.false?.text ?? \"No\";\n const trueStyle = getPlainStyle(config.true?.style, options);\n const falseStyle = getPlainStyle(config.false?.style, options);\n textContent = `<% ${valueAccessor} ? ${JSON.stringify(trueContent)} : ${JSON.stringify(falseContent)} %>`;\n style = `<% ${valueAccessor} ? ${JSON.stringify(trueStyle)} : ${JSON.stringify(falseStyle)} %>`;\n } else {\n style = getPlainStyle(config.style, options);\n if (config.type === \"json\") {\n if (config.display === \"link\") {\n textContent = `<% I18N(\"VIEW\", \"查看\") %>`;\n } else {\n tag = \"pre\";\n textContent = `<% PIPES.jsonStringify(${valueAccessor}) %>`;\n }\n } else {\n textContent = value;\n }\n }\n return {\n brick: tag,\n // errorBoundary: true,\n properties: {\n textContent,\n style,\n },\n };\n }\n }\n}\n\nfunction getValueAccessor(config: VisualConfig, attrAccessor: string): string {\n if (\n (config.type === \"struct\" || config.type === \"struct-list\") &&\n config.field\n ) {\n return `${config.type === \"struct\" ? `DATA${attrAccessor}` : \"ITEM\"}${getMemberAccessor(config.field)}`;\n }\n return `DATA${attrAccessor}`;\n}\n\nfunction getTagSize(size: VisualStyle[\"size\"]): string | undefined {\n switch (size) {\n case \"large\":\n case \"medium\":\n case \"small\":\n return size;\n case \"x-large\":\n return \"large\";\n // case \"x-small\":\n // return \"xs\";\n }\n}\n\nfunction getPlainStyle(\n configStyle: VisualStyle | undefined,\n options?: ConvertBrickOptions\n): Record<string, any> | undefined {\n if (!configStyle || options?.ignoreStyle) {\n return;\n }\n const style: Record<string, any> = {};\n switch (configStyle.size) {\n // case \"x-small\":\n case \"small\":\n style.fontSize = \"var(--sub-title-font-size-small)\";\n break;\n case \"medium\":\n style.fontSize = \"var(--normal-font-size)\";\n break;\n case \"large\":\n style.fontSize = \"var(--card-title-font-size)\";\n break;\n case \"x-large\":\n style.fontSize = \"var(--title-font-size-larger)\";\n break;\n }\n switch (configStyle.fontWeight) {\n case \"bold\":\n case \"normal\":\n style.fontWeight = configStyle.fontWeight;\n }\n if (configStyle.color) {\n style.color = configStyle.color;\n }\n return style;\n}\n","import { i18n } from \"@next-core/i18n\";\n\nexport enum K {\n YES = \"YES\",\n NO = \"NO\",\n CONFIRM = \"CONFIRM\",\n ADD_STEP = \"ADD_STEP\",\n RESET_PLAN = \"RESET_PLAN\",\n PLAN_COMPLETED = \"PLAN_COMPLETED\",\n TASK_COMPLETED = \"TASK_COMPLETED\",\n SHARE = \"SHARE\",\n TYPE_YOUR_MESSAGE_HERE = \"TYPE_YOUR_MESSAGE_HERE\",\n ARGUMENTS = \"ARGUMENTS\",\n PROCESS = \"PROCESS\",\n RESPONSE = \"RESPONSE\",\n CONFIRMING_PLAN_TIPS = \"CONFIRMING_PLAN_TIPS\",\n PAUSE_THE_TASK = \"PAUSE_THE_TASK\",\n RESUME_THE_TASK = \"RESUME_THE_TASK\",\n CANCEL_THE_TASK = \"CANCEL_THE_TASK\",\n CONFIRM_TO_CANCEL_THE_TASK_TITLE = \"CONFIRM_TO_CANCEL_THE_TASK_TITLE\",\n CONFIRM_TO_CANCEL_THE_TASK_CONTENT = \"CONFIRM_TO_CANCEL_THE_TASK_CONTENT\",\n BACK_TO_CENTER = \"BACK_TO_CENTER\",\n ZOOM_IN = \"ZOOM_IN\",\n ZOOM_OUT = \"ZOOM_OUT\",\n FULLSCREEN = \"FULLSCREEN\",\n REPLAYING = \"REPLAYING\",\n REPLAY_COMPLETED = \"REPLAY_COMPLETED\",\n SKIP_TO_RESULTS = \"SKIP_TO_RESULTS\",\n WATCH_AGAIN = \"WATCH_AGAIN\",\n SEND_MESSAGE = \"SEND_MESSAGE\",\n UNTITLED = \"UNTITLED\",\n FILE_PREVIEW_UNPREVIEWABLE_TIP_PREFIX = \"FILE_PREVIEW_UNPREVIEWABLE_TIP_PREFIX\",\n FILE_PREVIEW_UNPREVIEWABLE_TIP_SUFFIX = \"FILE_PREVIEW_UNPREVIEWABLE_TIP_SUFFIX\",\n DOWNLOAD = \"DOWNLOAD\",\n\n cmdb_create_app_system = \"cmdb_create_app_system\",\n cmdb_create_service_set = \"cmdb_create_service_set\",\n cmdb_append_host_to_service_set = \"cmdb_append_host_to_service_set\",\n cmdb_create_agent_scan_job = \"cmdb_create_agent_scan_job\",\n cmdb_service_node_clustering = \"cmdb_service_node_clustering\",\n ask_human = \"ask_human\",\n ask_human_confirming_plan = \"ask_human_confirming_plan\",\n}\n\nconst en: Locale = {\n YES: \"Yes\",\n NO: \"No\",\n CONFIRM: \"Confirm\",\n ADD_STEP: \"Add step\",\n RESET_PLAN: \"Reset plan\",\n PLAN_COMPLETED: \"All jobs done\",\n TASK_COMPLETED: \"Task completed\",\n SHARE: \"Share\",\n TYPE_YOUR_MESSAGE_HERE: \"Type your message here\",\n ARGUMENTS: \"Arguments\",\n PROCESS: \"Process\",\n RESPONSE: \"Response\",\n CONFIRMING_PLAN_TIPS:\n \"According to your request, I have made the following plan:\",\n PAUSE_THE_TASK: \"Pause the task\",\n RESUME_THE_TASK: \"Resume the task\",\n CANCEL_THE_TASK: \"Cancel the task\",\n CONFIRM_TO_CANCEL_THE_TASK_TITLE: \"Are you sure to cancel the task?\",\n CONFIRM_TO_CANCEL_THE_TASK_CONTENT:\n \"The task can not be resumed after been canceled.\",\n BACK_TO_CENTER: \"Back to center\",\n ZOOM_IN: \"Zoom in\",\n ZOOM_OUT: \"Zoom out\",\n FULLSCREEN: \"Fullscreen\",\n REPLAYING: \"Task is replaying...\",\n REPLAY_COMPLETED: \"Task replay completed.\",\n SKIP_TO_RESULTS: \"Skip to results\",\n WATCH_AGAIN: \"Watch again\",\n SEND_MESSAGE: \"Send message\",\n UNTITLED: \"Untitled\",\n FILE_PREVIEW_UNPREVIEWABLE_TIP_PREFIX:\n \"This file is unpreviewable currently, you can\",\n FILE_PREVIEW_UNPREVIEWABLE_TIP_SUFFIX: \"and view it locally.\",\n DOWNLOAD: \"Download\",\n\n cmdb_create_app_system: \"Create app system\",\n cmdb_create_service_set: \"Create service set\",\n cmdb_append_host_to_service_set: \"Append host to service set\",\n cmdb_create_agent_scan_job: \"Create agent scan job\",\n cmdb_service_node_clustering: \"Service node clustering\",\n ask_human: \"Ask user\",\n ask_human_confirming_plan: \"Ask user to confirm the plan\",\n};\n\nconst zh: Locale = {\n YES: \"是\",\n NO: \"否\",\n CONFIRM: \"确认\",\n ADD_STEP: \"添加步骤\",\n RESET_PLAN: \"重置计划\",\n PLAN_COMPLETED: \"所有任务已全部完成\",\n TASK_COMPLETED: \"任务完成\",\n SHARE: \"分享\",\n TYPE_YOUR_MESSAGE_HERE: \"在这里输入信息\",\n ARGUMENTS: \"参数\",\n PROCESS: \"过程\",\n RESPONSE: \"响应\",\n CONFIRMING_PLAN_TIPS: \"根据你的需求,我已制定如下计划:\",\n PAUSE_THE_TASK: \"暂停任务\",\n RESUME_THE_TASK: \"恢复任务\",\n CANCEL_THE_TASK: \"取消任务\",\n CONFIRM_TO_CANCEL_THE_TASK_TITLE: \"确定取消任务吗?\",\n CONFIRM_TO_CANCEL_THE_TASK_CONTENT: \"任务取消后将无法再恢复运行。\",\n BACK_TO_CENTER: \"回中\",\n ZOOM_IN: \"放大\",\n ZOOM_OUT: \"缩小\",\n FULLSCREEN: \"全屏\",\n REPLAYING: \"任务正在回放中...\",\n REPLAY_COMPLETED: \"任务回放完成。\",\n SKIP_TO_RESULTS: \"跳转到结果\",\n WATCH_AGAIN: \"重新观看\",\n SEND_MESSAGE: \"发送消息\",\n UNTITLED: \"未命名\",\n FILE_PREVIEW_UNPREVIEWABLE_TIP_PREFIX: \"该类型文件暂不支持预览,您可以\",\n FILE_PREVIEW_UNPREVIEWABLE_TIP_SUFFIX: \"查看。\",\n DOWNLOAD: \"下载\",\n\n cmdb_create_app_system: \"创建应用系统\",\n cmdb_create_service_set: \"创建服务集\",\n cmdb_append_host_to_service_set: \"将主机添加到服务集\",\n cmdb_create_agent_scan_job: \"创建 agent 扫描任务\",\n cmdb_service_node_clustering: \"服务节点聚类\",\n ask_human: \"询问用户\",\n ask_human_confirming_plan: \"询问用户确认计划\",\n};\n\nexport const NS = \"bricks/ai-portal/cruise-canvas\";\n\nexport const locales = { en, zh };\n\nexport const t = i18n.getFixedT(null, NS);\n\ntype Locale = { [k in K]: string } & {\n [k in K as `${k}_plural`]?: string;\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]!./ToolProgressLine.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]!./ToolProgressLine.module.css\";\n export default content && content.locals ? content.locals : undefined;\n","import React from \"react\";\nimport classNames from \"classnames\";\nimport styles from \"./ToolProgressLine.module.css\";\nimport { DataPart } from \"../interfaces\";\n\nexport interface ToolProgressLineProps {\n progress: DataPart;\n /**\n * 暂定失败肯定是最后一个\n */\n failed?: boolean;\n}\n\nexport function ToolProgressLine({\n progress,\n failed,\n}: ToolProgressLineProps): JSX.Element {\n const data = progress.data;\n\n return (\n <div\n className={classNames(styles[\"progress-line\"], {\n [styles[\"failed\"]]: failed,\n })}\n >\n <div className={classNames(styles.step)} key={data.progress}>\n <div className={styles.axis}>\n <div className={styles.line} />\n <div className={styles.dot} />\n </div>\n <div className={styles.progress}>\n <span className={styles.count}>{data.progress}</span>\n <span>/</span>\n <span className={styles.total}>{data.total}</span>\n </div>\n <div className={styles.description}>{data.message}</div>\n </div>\n </div>\n );\n}\n","import { InstanceApi_postSearchV3 } from \"@next-api-sdk/cmdb-sdk\";\n\nconst cache = new Map<string, Promise<string | null>>();\n\nexport async function getModelObjectInstanceId(objectId: string) {\n if (cache.has(objectId)) {\n return cache.get(objectId)!;\n }\n\n const promise = doGetModelObjectInstanceId(objectId);\n cache.set(objectId, promise);\n return promise;\n}\n\nasync function doGetModelObjectInstanceId(objectId: string) {\n const { list } = await InstanceApi_postSearchV3(\"MODEL_OBJECT\", {\n fields: [\"instanceId\"],\n query: {\n objectId: {\n $eq: objectId,\n },\n },\n page_size: 1,\n });\n\n if (list?.length) {\n return list[0].instanceId;\n }\n\n return null;\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, `.container--nviLvTo4{position:absolute;right:0;top:72px;bottom:72px;padding:48px 0;overflow-y:auto;scrollbar-width: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)}.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","import type { GeneralIconProps } from \"@next-bricks/icons/general-icon\";\nimport { type TaskState } from \"./interfaces.js\";\n\nexport 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 REQUIREMENT_NODE_ID = \"<REQUIREMENT>\";\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\nexport const DONE_STATES = [\"completed\", \"failed\", \"canceled\"] as TaskState[];\n\nexport const GENERAL_DONE_STATES = [...DONE_STATES, \"paused\"] as TaskState[];\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\nexport const ICON_CLOSE: GeneralIconProps = {\n lib: \"antd\",\n icon: \"close\",\n};\n\nexport const ICON_LOADING: GeneralIconProps = {\n lib: \"antd\",\n icon: \"loading-3-quarters\",\n spinning: true,\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, `.topology--H9SWG_Xt{color:#666;position:relative}.topology--H9SWG_Xt:not(.auto-size--We2YyP9m) eo-display-canvas{height:500px}.toolbar--l7OnuKQT{right:20px;bottom:20px}.topology--H9SWG_Xt:not(:hover) .toolbar--l7OnuKQT{display:none}`, \"\"]);\n// Exports\n___CSS_LOADER_EXPORT___.locals = {\n\t\"topology\": `topology--H9SWG_Xt`,\n\t\"auto-size\": `auto-size--We2YyP9m`,\n\t\"toolbar\": `toolbar--l7OnuKQT`\n};\nexport default ___CSS_LOADER_EXPORT___;\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, { useMemo } from \"react\";\nimport { wrapBrick } from \"@next-core/react-element\";\nimport { auth } from \"@next-core/easyops-runtime\";\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\";\n\nconst WrappedEasyOpsAvatar = wrapBrick<EoEasyopsAvatar, EoEasyopsAvatarProps>(\n \"eo-easyops-avatar\"\n);\n\nexport interface NodeRequirementProps {\n content?: string;\n startTime?: number;\n loading?: boolean;\n active?: boolean;\n}\n\nexport function NodeRequirement({\n content,\n startTime,\n loading,\n active,\n}: NodeRequirementProps): JSX.Element {\n const username = useMemo(() => {\n return auth.getAuth().username;\n }, []);\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}>{content}</div>\n {loading && (\n <>\n <svg\n className={styles[\"loading-line\"]}\n viewBox=\"0 0 2 62\"\n width=\"2\"\n height=\"62\"\n >\n <path d=\"M1 0 L1 62\" />\n </svg>\n <div className={styles.loading}>\n <div className={styles.inner} />\n </div>\n </>\n )}\n </div>\n );\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\";\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:rgb(205,206,207);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)}`, \"\"]);\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};\nexport default ___CSS_LOADER_EXPORT___;\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","export function createPortal(rootId: string) {\n const portal = document.createElement(\"div\");\n portal.dataset.rootId = rootId;\n portal.style.position = \"absolute\";\n portal.style.width = portal.style.height = \"0\";\n document.body.append(portal);\n return portal;\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","// 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--ldxobUbg{position:absolute;bottom:28px;left:50%;transform:translate(-50%,0);width:var(--cruise-canvas-node-width-large);max-width:80%;background:linear-gradient(338deg,rgba(198,183,247,1),rgba(157,198,255,1),rgba(153,196,255,1));box-shadow:0px 9px 28px 8px rgba(0,0,0,0.05),0px 6px 16px 0px rgba(0,0,0,0.08),0px 3px 6px -4px rgba(0,0,0,0.12);border-radius:12px;padding:2px;cursor:text}.container--ldxobUbg:has(textarea:focus){background:linear-gradient(338deg,rgba(160,133,249,1),rgba(101,162,246,1),rgba(120,145,255,1))}.box--V5uisReO{display:flex;flex-wrap:wrap;background-color:#fff;border-radius:10px;padding:8px}.input--YXfZsRMa{min-width:0;flex:1}.wrap--K0vzc4Yz .input--YXfZsRMa{flex-basis:100%}textarea{display:block;width:100%;padding:8px;font-size:16px;line-height:24px;color:var(--antd-input-color);border:none;background:none;height:24px;color:#262626}textarea::placeholder{color:#bfbfbf}.toolbar--wGF9nqsH{padding:5px 0 5px 8px;margin-left:auto;display:flex;align-items:center;gap:2px}.btn-send--KxpUPEDG:focus,\ntextarea:focus{outline:none}.btn-send--KxpUPEDG{width:28px;height:28px;display:flex;align-items:center;justify-content:center;background:var(--elevo-color-brand);border:none;border-radius:8px;color:#fff}.btn-send--KxpUPEDG:disabled{background:rgba(0,0,0,0.15)}.btn-send--KxpUPEDG:not(:disabled){cursor:pointer}.btn-send--KxpUPEDG:not(:disabled):hover{background:#5166ff}.btn-send--KxpUPEDG:not(:disabled):active{background:#1e33cc}`, \"\"]);\n// Exports\n___CSS_LOADER_EXPORT___.locals = {\n\t\"container\": `container--ldxobUbg`,\n\t\"box\": `box--V5uisReO`,\n\t\"input\": `input--YXfZsRMa`,\n\t\"wrap\": `wrap--K0vzc4Yz`,\n\t\"toolbar\": `toolbar--wGF9nqsH`,\n\t\"btn-send\": `btn-send--KxpUPEDG`\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--SpNrjJaH{position:absolute;bottom:28px;left:50%;transform:translate(-50%,0);width:var(--cruise-canvas-node-width-large);max-width:80%;background:linear-gradient(338deg,rgba(198,183,247,1),rgba(157,198,255,1),rgba(153,196,255,1));box-shadow:0px 9px 28px 8px rgba(0,0,0,0.05),0px 6px 16px 0px rgba(0,0,0,0.08),0px 3px 6px -4px rgba(0,0,0,0.12);border-radius:12px;padding:2px}.replay--Bm8ZxK4f{display:flex;align-items:center;background-color:#fff;border-radius:10px;height:50px;padding:0 16px}.text--gb_KCMex{min-width:0;flex:1;font-size:16px}.button--TR2LgpD_{margin-left:4px}`, \"\"]);\n// Exports\n___CSS_LOADER_EXPORT___.locals = {\n\t\"container\": `container--SpNrjJaH`,\n\t\"replay\": `replay--Bm8ZxK4f`,\n\t\"text\": `text--gb_KCMex`,\n\t\"button\": `button--TR2LgpD_`\n};\nexport default ___CSS_LOADER_EXPORT___;\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","\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 \"../bricks\";\nimport { K, t } from \"../i18n\";\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 onScaleChange?: (scale: number) => void;\n onReCenter?: () => void;\n}\n\nexport function ZoomBar({\n scale,\n onScaleChange,\n onReCenter,\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 <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","// 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}.loading-line--xDrsXoxu{position:absolute;bottom:-62px;left:50%;transform:translate(-50%,0)}.loading-line--xDrsXoxu path{fill:none;stroke-width:2px;stroke:rgba(255,255,255,0.6);stroke-dasharray:5,5}.loading--yZvyv4wE{position:absolute;bottom:-74px;left:50%;transform:translate(-50%,0);width:24px;height:24px;display:flex;align-items:center;justify-content:center;background:rgba(69,94,255,0.5);border-radius:24px;animation:loading--yZvyv4wE 1s infinite linear}.inner--voOHXPcc{width:12px;height:12px;background:rgb(69,94,255);border-radius:12px}@keyframes loading--yZvyv4wE{0%{transform:translate(-50%,0) scale(1);opacity:1}100%{transform:translate(-50%,0) scale(1.5);opacity:0}}`, \"\"]);\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\t\"loading-line\": `loading-line--xDrsXoxu`,\n\t\"loading\": `loading--yZvyv4wE`,\n\t\"inner\": `inner--voOHXPcc`\n};\nexport default ___CSS_LOADER_EXPORT___;\n","import { strictCollectMemberUsage } from \"@next-core/utils/storyboard\";\nimport type { DataSource, Variable } from \"./interfaces\";\n\n/**\n * Find the object ID associated with the used data contexts.\n *\n * This function traverses the used contexts along their dependency chain.\n */\nexport function findObjectIdByUsedDataContexts(\n usedContexts: Set<string> | undefined,\n dataSources: DataSource[] | undefined,\n variables: Variable[] | undefined\n) {\n let objectId: string | undefined;\n if (usedContexts?.size && dataSources?.length) {\n const dataSourceToObjectIdMap = new Map<string, string>();\n for (const dataSource of dataSources) {\n if (dataSource.api.objectId) {\n dataSourceToObjectIdMap.set(dataSource.name, dataSource.api.objectId);\n }\n }\n\n const variableDepsMap = new Map<string, Set<string>>();\n for (const variable of variables ?? []) {\n const deps = strictCollectMemberUsage(variable.value, \"CTX\");\n variableDepsMap.set(variable.name, deps);\n }\n\n const processedContexts = new Set<string>();\n\n const find = (context: string) => {\n if (processedContexts.has(context)) {\n return false;\n }\n processedContexts.add(context);\n\n const dataSourceObjectId = dataSourceToObjectIdMap.get(context);\n if (dataSourceObjectId) {\n objectId = dataSourceObjectId;\n return true;\n }\n\n const variableDeps = variableDepsMap.get(context);\n for (const dep of variableDeps ?? []) {\n if (find(dep)) {\n return true;\n }\n }\n\n return false;\n };\n\n for (const context of usedContexts) {\n if (find(context)) {\n break;\n }\n }\n }\n\n return objectId;\n}\n","import type { BrickConf } from \"@next-core/types\";\nimport type {\n Component,\n ConvertViewOptions,\n ViewWithInfo,\n} from \"./interfaces.js\";\nimport { convertToStoryboard } from \"./raw-data-generate/convert.js\";\nimport { getPreGeneratedAttrViews } from \"./getPreGeneratedAttrViews.js\";\nimport { parseDataSource } from \"./expressions.js\";\nimport { findObjectIdByUsedDataContexts } from \"./findObjectIdByUsedDataContexts.js\";\n\ninterface DescriptionItem {\n label: string;\n text?: string;\n field?: string;\n}\n\nexport default async function convertDescriptions(\n { properties }: Component,\n view: ViewWithInfo,\n options: ConvertViewOptions\n): Promise<BrickConf> {\n const { data, title, columns, list, ...restProps } = properties as {\n data: string;\n title?: string;\n columns?: number;\n list: DescriptionItem[];\n };\n\n const parsedDataSource = parseDataSource(data);\n\n const objectId = findObjectIdByUsedDataContexts(\n parsedDataSource.usedContexts,\n view.dataSources,\n view.variables\n );\n\n const attrViews = objectId\n ? await getPreGeneratedAttrViews(objectId)\n : undefined;\n\n const configuredItems = new Map<string, any>();\n\n if (attrViews?.size) {\n for (const item of list) {\n if (item.field) {\n const candidate = attrViews.get(item.field);\n if (candidate) {\n const brick = convertToStoryboard(candidate, item.field);\n if (brick) {\n brick.slot = `[${item.field}]`;\n configuredItems.set(item.field, brick);\n }\n }\n }\n }\n }\n\n return {\n brick: \"eo-descriptions\",\n properties: {\n ...restProps,\n dataSource: parsedDataSource.isString ? parsedDataSource.embedded : data,\n // descriptionTitle: title,\n list: list.map((item) => {\n const brick = item.field ? configuredItems.get(item.field) : undefined;\n return brick\n ? {\n label: item.label,\n useChildren: `[${item.field}]`,\n }\n : item;\n }),\n column: options.expanded ? 3 : 1,\n // showCard: !options.expanded,\n themeVariant: \"elevo\",\n },\n children:\n configuredItems.size > 0 ? Array.from(configuredItems.values()) : [],\n };\n}\n","import type { BrickConf } from \"@next-core/types\";\nimport type {\n Component,\n ConvertViewOptions,\n ViewWithInfo,\n} from \"./interfaces.js\";\nimport { parseDataSource } from \"./expressions.js\";\nimport { findObjectIdByUsedDataContexts } from \"./findObjectIdByUsedDataContexts.js\";\nimport { getPreGeneratedMetricGroups } from \"./getPreGeneratedMetricGroups.js\";\n\nconst COLORS = [\n \"#336EF4\",\n \"#45CAFF\",\n \"#41CDCF\",\n \"#8146F3\",\n \"#F8A075\",\n \"#94E65E\",\n \"#57689C\",\n \"#C285EF\",\n \"#FAC60B\",\n \"#E4551F\",\n \"#8984FF\",\n \"#2540FF\",\n \"#08BF33\",\n \"#F7811C\",\n \"#AC7CFF\",\n \"#1BA5DC\",\n \"#E89716\",\n \"#76A6F5\",\n \"#4F69FF\",\n];\n\ninterface Widget {\n title: string;\n type: \"line\" | \"area\";\n metric: {\n id: string;\n unit: string;\n };\n size?: \"small\" | \"medium\" | \"large\";\n precision?: number;\n min?: number;\n max?: number;\n color?: string;\n}\n\ninterface MergedWidget extends Widget {\n relevantMetrics?: string[];\n counterMetric?: string;\n groupTitle?: string;\n}\n\nexport default async function convertDashboard(\n { properties }: Component,\n view: ViewWithInfo,\n options: ConvertViewOptions\n): Promise<BrickConf> {\n const {\n dataSource,\n groupField: _groupField,\n widgets,\n } = properties as {\n dataSource: string;\n groupField?: string;\n widgets: Array<Widget>;\n };\n\n const groupField = _groupField ? \"#showKey\" : undefined;\n\n const { isString, expression, usedContexts } = parseDataSource(dataSource);\n\n const chartData = isString\n ? `<%= CTX.__builtin_fn_extractList((${expression})) %>`\n : dataSource;\n\n if (options.expanded) {\n let mergedWidgets = widgets as MergedWidget[];\n const objectId = findObjectIdByUsedDataContexts(\n usedContexts,\n view.dataSources,\n view.variables\n );\n const metricGroups = objectId\n ? await getPreGeneratedMetricGroups(objectId)\n : [];\n\n if (metricGroups.length > 0) {\n mergedWidgets = [];\n const mergedMetrics = new Set<string>();\n const metricIds = new Set(widgets.map((w) => w.metric.id));\n for (const widget of widgets) {\n if (mergedMetrics.has(widget.metric.id)) {\n continue; // Skip already merged metrics\n }\n const mergedWidget = { ...widget } as MergedWidget;\n mergedWidgets.push(mergedWidget);\n const group = metricGroups.find((g) =>\n g.metrics.includes(widget.metric.id)\n );\n if (group) {\n const relevantMetrics = group.metrics.filter((m) => metricIds.has(m));\n if (relevantMetrics.length > 1) {\n mergedWidget.relevantMetrics = relevantMetrics;\n mergedWidget.counterMetric = group.counter;\n mergedWidget.groupTitle = group.group;\n for (const metricId of relevantMetrics) {\n mergedMetrics.add(metricId);\n metricIds.delete(metricId);\n }\n }\n }\n }\n }\n\n let colorCursor = 0;\n\n return {\n brick: \"div\",\n properties: {\n style: {\n display: \"grid\",\n gridTemplateColumns: \"repeat(auto-fit, minmax(500px, 1fr))\",\n gap: \"16px\",\n },\n },\n children: mergedWidgets.map((widget) => {\n const { title, /* type, */ metric, size, precision, min, max } = widget;\n const colorCount =\n widget.relevantMetrics?.length ?? (groupField ? 2 : 1);\n const colors = Array.from(\n { length: colorCount },\n (_, i) => COLORS[(colorCursor + i) % COLORS.length]\n );\n colorCursor += colorCount;\n const unit = metric.unit === \"load\" ? \"\" : metric.unit;\n const chart = {\n brick: \"chart-v2.time-series-chart\",\n properties: {\n data: chartData,\n xField: \"time\",\n ...(widget.relevantMetrics\n ? {\n // yFields: widget.relevantMetrics,\n yFields: `<% CTX.__builtin_fn_getMetricDisplayNames((${expression}).displayNameList, ${JSON.stringify(\n widget.relevantMetrics\n )}) %>`,\n }\n : {\n // yField: metric.id,\n yField: `<% CTX.__builtin_fn_getMetricDisplayNames((${expression}).displayNameList, [${JSON.stringify(\n metric.id\n )}])[0] %>`,\n }),\n ...(widget.counterMetric\n ? {\n forceAbsoluteNumbers: true,\n series: {\n [widget.counterMetric]: {\n isNegative: true,\n },\n },\n }\n : null),\n height: size === \"large\" ? 230 : 200,\n timeFormat: \"HH:mm\",\n ...(widget.relevantMetrics || groupField\n ? null\n : {\n areaOptions: {\n style: {\n fill: `l(90) 0:${colors[0]} 1:#ffffff`,\n },\n },\n }),\n axis: {\n yAxis: {\n unit,\n precision,\n ...(widget.counterMetric\n ? null\n : unit === \"percent(1)\"\n ? { min: 0, max: 1 }\n : unit === \"percent(100)\" || unit === \"%\"\n ? { min: 0, max: 100 }\n : { min, max }),\n shape: \"smooth\",\n },\n },\n groupField,\n areaShape: \"smooth\",\n legends: !!(widget.relevantMetrics || groupField),\n colors: colors,\n tooltip: {\n marker: {\n fill: colors[0],\n stroke: \"#fff\",\n lineWidth: 2,\n shadowColor: colors[0],\n shadowBlur: 8,\n shadowOffsetX: 0,\n shadowOffsetY: 4,\n },\n domStyles: {\n \"g2-tooltip\": {\n background: [\n `radial-gradient( farthest-corner at -20px 150px, ${colors[0]} 0%, rgba(238,238,238,0) 60%)`,\n \"linear-gradient( 180deg, rgba(255,255,255,0.5) 0%, rgba(255,255,255,0.8) 100%)\",\n ].join(\", \"),\n boxShadow: `0px 4px 8px 0px ${convertHexColorToRGBA(colors[0], 0.08)}`,\n borderRadius: \"8px\",\n border: \"1px solid rgba(255,255,255,1)\",\n backdropFilter: \"blur(3px)\",\n },\n },\n },\n },\n };\n return {\n brick: \"div\",\n properties: {\n style: {\n background: \"rgba(255,255,255,0.8)\",\n boxShadow: \"0px 2px 4px 0px rgba(0,0,0,0.06)\",\n borderRadius: \"8px\",\n padding: \"16px 20px 20px\",\n },\n },\n children: [\n {\n brick: \"div\",\n properties: {\n style: {\n fontSize: \"16px\",\n fontWeight: \"500\",\n marginBottom: \"20px\",\n },\n textContent: widget.groupTitle || title || metric.id,\n },\n },\n chart,\n ],\n };\n }),\n };\n }\n\n if (groupField) {\n return {\n brick: \"div\",\n properties: {\n style: {\n display: \"flex\",\n flexDirection: \"column\",\n gap: \"8px\",\n },\n },\n children: [\n {\n brick: \":forEach\",\n dataSource: `<%= CTX.__builtin_fn_groupMetricData(CTX.__builtin_fn_extractList((${expression})), ${JSON.stringify(groupField)}) %>`,\n children: [\n {\n brick: \"div\",\n properties: {\n textContent: \"<% `${ITEM.group}:` %>\",\n style: {\n fontWeight: \"500\",\n },\n },\n },\n {\n brick: \"div\",\n properties: {\n style: {\n display: \"grid\",\n gridTemplateColumns: \"repeat(auto-fill, minmax(205px, 1fr))\",\n gap: \"10px\",\n marginBottom: \"8px\",\n },\n },\n children: widgets.map((widget, i) => {\n const { title, /* type, */ metric, precision } = widget;\n return {\n brick: \"ai-portal.stat-with-mini-chart\",\n properties: {\n size: \"small\",\n label: title || metric.id,\n data: \"<% ITEM.list %>\",\n xField: \"time\",\n yField: metric.id,\n lineColor: COLORS[i % COLORS.length],\n showArea: true,\n ...(metric.unit === \"percent(1)\"\n ? { min: 0, max: 1 }\n : metric.unit === \"percent(100)\" || metric.unit === \"%\"\n ? { min: 0, max: 100 }\n : null),\n value: `<%= CTX.__builtin_fn_getLatestMetricValue(ITEM.list, ${JSON.stringify(\n {\n metric,\n precision,\n }\n )}) %>`,\n },\n };\n }),\n },\n ],\n },\n ],\n };\n }\n\n return {\n brick: \"div\",\n properties: {\n style: {\n display: \"grid\",\n gridTemplateColumns: \"repeat(auto-fill, minmax(205px, 1fr))\",\n gap: \"10px\",\n },\n },\n children: widgets.map((widget, i) => {\n const { title, /* type, */ metric, precision } = widget;\n return {\n brick: \"ai-portal.stat-with-mini-chart\",\n properties: {\n size: \"small\",\n label: title || metric.id,\n data: chartData,\n xField: \"time\",\n yField: metric.id,\n lineColor: COLORS[i % COLORS.length],\n showArea: true,\n ...(metric.unit === \"percent(1)\"\n ? { min: 0, max: 1 }\n : metric.unit === \"percent(100)\" || metric.unit === \"%\"\n ? { min: 0, max: 100 }\n : null),\n value: `<%= CTX.__builtin_fn_getLatestMetricValue((${\n isString\n ? `CTX.__builtin_fn_extractList((${expression}))`\n : JSON.stringify(dataSource ?? null)\n }), ${JSON.stringify({\n metric,\n precision,\n })}) %>`,\n },\n };\n }),\n };\n}\n\nfunction convertHexColorToRGBA(color: string, alpha: number): string {\n const hex = color.slice(1);\n const bigint = parseInt(hex, 16);\n const r = (bigint >> 16) & 255;\n const g = (bigint >> 8) & 255;\n const b = bigint & 255;\n return `rgba(${r}, ${g}, ${b}, ${alpha})`;\n}\n","import type { BrickConf } from \"@next-core/types\";\nimport type {\n Component,\n ConvertViewOptions,\n ViewWithInfo,\n} from \"./interfaces.js\";\nimport { lowLevelConvertToStoryboard } from \"./raw-data-generate/convert.js\";\nimport { parseDataSource } from \"./expressions.js\";\nimport { getPreGeneratedAttrViews } from \"./getPreGeneratedAttrViews.js\";\nimport { findObjectIdByUsedDataContexts } from \"./findObjectIdByUsedDataContexts.js\";\n\ninterface TableColumn {\n key: string;\n dataIndex: string;\n title: string;\n sortable?: boolean;\n}\n\nexport default async function convertTable(\n component: Component,\n view: ViewWithInfo,\n options: ConvertViewOptions\n): Promise<BrickConf> {\n const { properties } = component;\n const { data, size, columns, rowKey, pagination, ...restProps } =\n properties as {\n data: string;\n columns: Array<TableColumn>;\n rowKey?: string;\n size?: \"small\" | \"medium\" | \"large\";\n pagination?: boolean;\n };\n\n const parsedDataSource = parseDataSource(data);\n\n const objectId = findObjectIdByUsedDataContexts(\n parsedDataSource.usedContexts,\n view.dataSources,\n view.variables\n );\n\n const attrViews = objectId\n ? await getPreGeneratedAttrViews(objectId)\n : undefined;\n\n const configuredColumns = new Map<string, any>();\n\n if (attrViews?.size) {\n for (const column of columns) {\n const candidate = attrViews.get(column.dataIndex);\n if (candidate) {\n const brick = lowLevelConvertToStoryboard(candidate, \".cellData\");\n if (brick) {\n brick.slot = `[${column.dataIndex}]`;\n configuredColumns.set(column.dataIndex, brick);\n }\n }\n }\n }\n\n return {\n brick: \"eo-next-table\",\n properties: {\n dataSource: parsedDataSource.isString ? parsedDataSource.embedded : data,\n ...restProps,\n rowKey: rowKey ?? columns[0]?.key,\n columns: columns.map((column) => {\n const brick = configuredColumns.get(column.dataIndex);\n return brick\n ? {\n ...column,\n useChildren: `[${column.dataIndex}]`,\n }\n : column;\n }),\n themeVariant: \"elevo\",\n scrollConfig: {\n x: \"max-content\",\n },\n ...(options.expanded\n ? {\n bordered: true,\n pagination,\n size: \"large\",\n }\n : {\n size: \"middle\",\n pagination: false,\n }),\n },\n children:\n configuredColumns.size > 0 ? Array.from(configuredColumns.values()) : [],\n };\n}\n","import type {\n Component,\n ConvertViewOptions,\n ViewWithInfo,\n} from \"./interfaces.js\";\nimport type { BrickEventHandler, BrickEventsMap } from \"@next-core/types\";\n\nexport function convertEvents(\n component: Component,\n view: ViewWithInfo,\n options: ConvertViewOptions\n) {\n const eventListeners = view.eventListeners.filter(\n (handler) => handler.componentId === component.componentId\n );\n const events: BrickEventsMap = {};\n for (const eventListener of eventListeners) {\n switch (component.componentName) {\n case \"table\":\n switch (eventListener.event) {\n case \"select\": {\n const action = convertEventAction(eventListener.handler, options);\n if (action) {\n events[\"row.select.v2\"] = action;\n }\n break;\n }\n case \"sort\": {\n const action = convertEventAction(eventListener.handler, options);\n if (action) {\n events[\"sort.change\"] = action;\n }\n break;\n }\n case \"paginate\": {\n const action = convertEventAction(eventListener.handler, options);\n if (action) {\n events[\"page.change\"] = action;\n }\n break;\n }\n }\n break;\n case \"button\":\n if (eventListener.event === \"click\") {\n const action = convertEventAction(eventListener.handler, options);\n if (action) {\n events.click = action;\n }\n }\n break;\n case \"form-item\":\n switch ((component.properties as { type: string }).type) {\n case \"search\":\n if (eventListener.event === \"search\") {\n const action = convertEventAction(eventListener.handler, options);\n if (action) {\n events.search = action;\n }\n }\n break;\n case \"select\":\n if (eventListener.event === \"change\") {\n const action = convertEventAction(eventListener.handler, options);\n if (action) {\n events[\"change.v2\"] = action;\n }\n }\n break;\n }\n break;\n default: {\n const action = convertEventAction(eventListener.handler, options);\n if (action) {\n events[eventListener.event] = action;\n }\n }\n }\n }\n return Object.keys(events).length > 0 ? events : undefined;\n}\n\nfunction convertEventAction(\n handler: any,\n options: ConvertViewOptions,\n eventDetailAccessor?: string\n): BrickEventHandler | undefined {\n switch (handler?.action) {\n case \"update_variable\":\n return {\n action: \"context.replace\",\n args: [\n handler.payload.name,\n Object.prototype.hasOwnProperty.call(handler.payload, \"value\")\n ? handler.payload.value\n : (eventDetailAccessor ?? \"<% EVENT.detail %>\"),\n ],\n };\n case \"refresh_data_source\":\n return {\n action: \"context.refresh\",\n args: [handler.payload.name],\n };\n case \"call_api\": {\n const { api, params } = handler.payload;\n\n const success = handler.callback?.success\n ? ([]\n .concat(handler.callback.success)\n .map((cb: any) => convertEventAction(cb, options))\n .filter(Boolean) as BrickEventHandler[])\n : undefined;\n\n return {\n useProvider: `${api.name}:${api.version}`,\n params,\n callback: {\n success: success?.length ? success : undefined,\n error: {\n action: \"handleHttpError\",\n },\n },\n };\n }\n case \"call_component\":\n return {\n target: `[data-root-id=\"${options.rootId}\"] [data-component-id=\"${handler.payload.componentId}\"]`,\n method: handler.payload.method,\n args: handler.payload.args,\n };\n case \"show_message\":\n return {\n action: `message.${handler.payload.type}` as \"message.info\",\n args: [handler.payload.content],\n };\n }\n}\n","import { pipes } from \"@easyops-cn/brick-next-pipes\";\nimport type {\n Component,\n ConvertViewOptions,\n DataSource,\n Variable,\n ViewWithInfo,\n} from \"./interfaces.js\";\nimport convertList from \"./convertList.js\";\nimport convertDescriptions from \"./convertDescriptions.js\";\nimport convertDashboard from \"./convertDashboard.js\";\nimport convertTable from \"./convertTable.js\";\nimport type { BrickConf, ContextConf } from \"@next-core/types\";\nimport convertButton from \"./convertButton.js\";\nimport convertForm from \"./convertForm.js\";\nimport convertFlexLayout from \"./convertFlexLayout.js\";\nimport convertFormItem from \"./convertFormItem.js\";\nimport convertModal from \"./convertModal.js\";\nimport { convertEvents } from \"./convertEvents.js\";\nimport { withBox } from \"./withBox.js\";\n\nexport interface BrickConfWithContext extends BrickConf {\n context?: ContextConf[];\n}\n\nexport async function convertView(\n view: ViewWithInfo | null | undefined,\n options: ConvertViewOptions\n): Promise<BrickConfWithContext | null> {\n if (!view) {\n return null;\n }\n\n const componentMap = new Map<string, Component>();\n const childrenMap = new Map<string, Component[]>();\n const rootComponents: Component[] = [];\n const convertedComponents = new Set<string>();\n\n for (const component of view.components) {\n componentMap.set(component.componentId, component);\n if (component.parentComponentId) {\n let children = childrenMap.get(component.parentComponentId);\n if (!children) {\n children = [];\n childrenMap.set(component.parentComponentId, children);\n }\n children.push(component);\n } else {\n rootComponents.push(component);\n }\n }\n\n const convert = async (component: Component): Promise<BrickConf | null> => {\n if (convertedComponents.has(component.componentId)) {\n throw new Error(\n `Component ${component.componentId} has been converted already, it indicates a circular component tree.`\n );\n }\n convertedComponents.add(component.componentId);\n\n let brick: BrickConf | null = null;\n switch (component.componentName) {\n case \"list\":\n brick = await convertList(component);\n break;\n case \"table\":\n brick = await convertTable(component, view, options);\n break;\n case \"descriptions\":\n brick = await convertDescriptions(component, view, options);\n break;\n case \"dashboard\":\n brick = await convertDashboard(component, view, options);\n break;\n case \"button\":\n brick = await convertButton(component);\n break;\n case \"form\":\n brick = await convertForm(component);\n break;\n case \"form-item\":\n brick = await convertFormItem(component);\n break;\n case \"flex-layout\":\n brick = await convertFlexLayout(component);\n break;\n case \"modal\":\n brick = await convertModal(component);\n break;\n }\n\n if (!brick) {\n return null;\n }\n\n brick.events = convertEvents(component, view, options);\n\n // Set [data-component-id] for the brick\n brick.properties ??= {};\n brick.properties.dataset ??= {};\n (brick.properties.dataset as Record<string, string>).componentId =\n component.componentId;\n\n const children = (\n await Promise.all(\n (childrenMap.get(component.componentId) ?? []).map(convert)\n )\n ).filter(Boolean) as BrickConf[];\n\n if (children.length > 0) {\n brick.children = [...(brick.children ?? []), ...children];\n }\n\n return brick;\n };\n\n const context = [\n ...convertDataSourcesToContext(view.dataSources ?? []),\n ...convertVariablesToContext(view.variables ?? []),\n {\n name: \"__builtin_fn_getLatestMetricValue\",\n value: function getLatestMetricValue(\n list: Record<string, any>[] | undefined,\n {\n metric,\n precision,\n }: { metric: { id: string; unit: string }; precision?: number }\n ) {\n const value = list?.findLast?.((item) => item[metric.id] != null)?.[\n metric.id\n ];\n const unit = metric.unit === \"load\" ? \"\" : metric.unit;\n return pipes.unitFormat(value, unit, precision).join(\"\");\n },\n },\n {\n name: \"__builtin_fn_extractList\",\n value: function extractList<T = unknown>(data: T[] | { list: T[] }): T[] {\n if (Array.isArray(data)) {\n return data;\n }\n return data?.list;\n },\n },\n {\n name: \"__builtin_fn_groupMetricData\",\n value: function groupMetricData(\n list: Record<string, any>[],\n groupField: string\n ) {\n if (!list || !Array.isArray(list) || list.length === 0) {\n return [];\n }\n const grouped = new Map<\n string,\n { group: string; list: Record<string, any>[] }\n >();\n for (const item of list) {\n const key = item[groupField];\n let groupedList = grouped.get(key);\n if (!groupedList) {\n grouped.set(key, (groupedList = { group: key, list: [] }));\n }\n groupedList.list.push(item);\n }\n return Array.from(grouped.values());\n },\n },\n {\n name: \"__builtin_fn_getMetricDisplayNames\",\n value: function getMetricDisplayNames(\n displayNameList:\n | { metric_name: string; metric_display_name: string }[]\n | undefined,\n metricNames: string[]\n ): string[] {\n return metricNames.map(\n (metricName) =>\n displayNameList?.find((item) => item.metric_name === metricName)\n ?.metric_display_name ?? metricName\n );\n },\n },\n {\n name: \"SIZE\",\n value: options.expanded ? \"medium\" : \"small\",\n },\n ];\n\n const children = (await Promise.all(rootComponents.map(convert))).filter(\n Boolean\n ) as BrickConf[];\n\n const needBox = rootComponents.every((component) =>\n [\"form\", \"descriptions\", \"button\"].includes(component.componentName)\n );\n\n return {\n brick: \"eo-content-layout\",\n children: needBox ? [withBox(children, options)] : children,\n context,\n };\n}\n\nfunction convertDataSourcesToContext(dataSources: DataSource[]): ContextConf[] {\n return dataSources.map((dataSource) => ({\n name: dataSource.name,\n resolve: {\n useProvider: `${dataSource.api.name}:*`,\n params: dataSource.params,\n ...(dataSource.api.name === \"easyops.api.data_exchange.olap@Query\"\n ? {\n params: {\n ...dataSource.params,\n translate: [\"#showKey\"],\n limit: undefined,\n limitBy: undefined,\n order: undefined,\n displayName: true,\n },\n }\n : dataSource.transform\n ? { transform: { value: dataSource.transform } }\n : null),\n },\n track: true,\n }));\n}\n\nfunction convertVariablesToContext(variables: Variable[]): ContextConf[] {\n return variables.map(({ name, value }) => ({\n name,\n value,\n }));\n}\n","import type { BrickConf } from \"@next-core/types\";\nimport type { Component } from \"./interfaces.js\";\nimport { parseDataSource } from \"./expressions.js\";\n\nexport default function convertList({ properties }: Component): BrickConf {\n const props = properties as {\n data: string | object;\n fields: {\n title: string;\n description?: string;\n icon?: string;\n url?: string;\n };\n variant?: \"default\" | \"navigation\" | \"ranking\";\n };\n\n const { data, fields, variant } = props;\n\n const parsedDataSource = parseDataSource(data);\n\n return {\n brick: \"eo-list\",\n properties: {\n variant,\n dataSource: parsedDataSource.isString ? parsedDataSource.embedded : data,\n fields,\n themeVariant: \"elevo\",\n },\n };\n}\n","import type { BrickConf } from \"@next-core/types\";\nimport type { Component } from \"./interfaces.js\";\n\nexport default function convertButton(component: Component): BrickConf {\n const { properties } = component;\n const props = properties as {\n textContent: string;\n icon?: unknown;\n type?: string;\n };\n return {\n brick: \"eo-button\",\n properties: {\n ...props,\n themeVariant: \"elevo\",\n },\n };\n}\n","import type { BrickConf } from \"@next-core/types\";\nimport type { Component } from \"./interfaces.js\";\n\nexport default function convertForm(component: Component): BrickConf {\n const { properties } = component;\n const { values } = (properties ?? {}) as {\n values?: unknown;\n };\n\n return {\n brick: \"eo-form\",\n properties: {\n values: values ?? {},\n themeVariant: \"elevo\",\n },\n };\n}\n","import type { BrickConf } from \"@next-core/types\";\nimport type { Component } from \"./interfaces.js\";\n\ninterface FormItemBase {\n name: string;\n label?: string;\n required?: boolean;\n}\n\ninterface Option {\n label: string;\n value: string;\n}\n\ninterface FormItemSearch {\n type: \"search\";\n placeholder?: string;\n}\n\ninterface FormItemInput extends FormItemBase {\n type: \"input\";\n placeholder?: string;\n}\n\ninterface FormItemNumberInput extends FormItemBase {\n type: \"number-input\";\n min?: number;\n max?: number;\n placeholder?: string;\n}\n\ninterface FormItemTextarea extends FormItemBase {\n type: \"textarea\";\n placeholder?: string;\n}\n\ninterface FormItemSelect extends FormItemBase {\n type: \"select\";\n options: Option[];\n placeholder?: string;\n}\n\ninterface FormItemRadio extends FormItemBase {\n type: \"radio\";\n options: Option[];\n}\n\ninterface FormItemCheckbox extends FormItemBase {\n type: \"checkbox\";\n options: Option[];\n}\n\ninterface FormItemSwitch extends FormItemBase {\n type: \"switch\";\n}\n\ninterface FormItemDatePicker extends FormItemBase {\n type: \"date-picker\";\n}\n\ninterface FormItemTimePicker extends FormItemBase {\n type: \"time-picker\";\n}\n\ntype FormItem =\n | FormItemSearch\n | FormItemInput\n | FormItemNumberInput\n | FormItemTextarea\n | FormItemSelect\n | FormItemRadio\n | FormItemCheckbox\n | FormItemSwitch\n | FormItemDatePicker\n | FormItemTimePicker;\n\nexport default function convertFormItem(component: Component): BrickConf {\n const { properties } = component;\n const { type, ...restProps } = properties as {\n type: FormItem[\"type\"];\n };\n\n let brick: string;\n let props: Record<string, unknown> = {\n ...restProps,\n themeVariant: \"elevo\",\n };\n\n switch (type) {\n case \"search\":\n brick = \"eo-search\";\n props = {\n ...props,\n trim: true,\n };\n break;\n case \"input\":\n brick = \"eo-input\";\n break;\n case \"number-input\":\n brick = \"eo-input\";\n props = {\n type: \"number\",\n ...props,\n };\n break;\n case \"textarea\":\n brick = \"eo-textarea\";\n break;\n case \"select\":\n brick = \"eo-select\";\n break;\n case \"radio\":\n brick = \"eo-radio\";\n break;\n case \"checkbox\":\n brick = \"eo-checkbox\";\n break;\n case \"switch\":\n brick = \"eo-switch\";\n break;\n case \"date-picker\":\n brick = \"eo-date-picker\";\n break;\n case \"time-picker\":\n brick = \"eo-time-picker\";\n break;\n default:\n throw new Error(`Unsupported form item type: ${type}`);\n }\n\n return {\n brick,\n properties: props,\n };\n}\n","import type { BrickConf } from \"@next-core/types\";\nimport type { Component } from \"./interfaces.js\";\n\nexport default function convertFlexLayout(_component: Component): BrickConf {\n return {\n brick: \"eo-flex-layout\",\n properties: {\n gap: \"0.5em\",\n },\n };\n}\n","import type { BrickConf } from \"@next-core/types\";\nimport type { Component } from \"./interfaces.js\";\n\nexport default function convertModal(component: Component): BrickConf {\n const { properties } = component;\n const { title, confirmText, cancelText } = properties as {\n title?: string;\n confirmText?: string;\n cancelText?: string;\n };\n return {\n brick: \"eo-modal\",\n portal: true,\n properties: {\n themeVariant: \"elevo\",\n modalTitle: title,\n confirmText: confirmText,\n cancelText: cancelText,\n keyboard: true,\n },\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","\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]!./shared.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]!./shared.module.css\";\n export default content && content.locals ? content.locals : undefined;\n","import { strictCollectMemberUsage } from \"@next-core/utils/storyboard\";\n\nconst VALID_IDENTIFIER_REG = /^[$_\\p{ID_Start}][$\\p{ID_Continue}]*$/u;\n\nconst EXPRESSION_PREFIX_REG = /^\\s*<%=?\\s+/;\nconst EXPRESSION_SUFFIX_REG = /\\s+%>\\s*$/;\n\nexport function isExpression(value: string) {\n return EXPRESSION_PREFIX_REG.test(value) && EXPRESSION_SUFFIX_REG.test(value);\n}\n\nexport function getMemberAccessor(property: unknown): string {\n const propertyStr = String(property);\n return VALID_IDENTIFIER_REG.test(propertyStr)\n ? `.${propertyStr}`\n : `[${JSON.stringify(propertyStr)}]`;\n}\n\nexport function parseDataSource(data: string | object):\n | {\n isString: false;\n embedded?: undefined;\n expression?: undefined;\n usedContexts?: undefined;\n }\n | {\n isString: true;\n embedded: string;\n expression: string;\n usedContexts: Set<string>;\n } {\n if (typeof data !== \"string\") {\n return {\n isString: false,\n };\n }\n\n let embedded: string;\n let expression: string;\n\n if (isExpression(data)) {\n expression = data\n .replace(EXPRESSION_PREFIX_REG, \"\")\n .replace(EXPRESSION_SUFFIX_REG, \"\")\n .trim();\n\n embedded = data;\n } else if (data.includes(\"CTX.\")) {\n expression = data;\n embedded = `<%= ${data} %>`;\n } else {\n expression = `CTX${getMemberAccessor(data)}`;\n embedded = `<%= ${expression} %>`;\n }\n\n const usedContexts = strictCollectMemberUsage(embedded, \"CTX\");\n\n return {\n isString: true,\n embedded,\n expression,\n usedContexts,\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]!./NodeView.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]!./NodeView.module.css\";\n export default content && content.locals ? content.locals : undefined;\n","// istanbul ignore file: experimental\nimport React, {\n useCallback,\n useContext,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport { unstable_createRoot } from \"@next-core/runtime\";\nimport classNames from \"classnames\";\nimport { uniqueId } from \"lodash\";\nimport styles from \"./NodeView.module.css\";\nimport jobStyles from \"../NodeJob/NodeJob.module.css\";\nimport sharedStyles from \"../shared.module.css\";\nimport type { Job } from \"../interfaces\";\nimport { convertView } from \"../utils/converters/convertView\";\nimport { CanvasContext } from \"../CanvasContext\";\nimport { WrappedIcon } from \"../bricks\";\nimport { t } from \"../i18n\";\nimport { createPortal } from \"../utils/createPortal\";\nimport { convertJsx } from \"../utils/jsx-converters/convertJsx\";\nimport { isJsxView } from \"../utils/jsx-converters/isJsxView\";\n\nexport interface NodeViewProps {\n job: Job;\n active?: boolean;\n}\n\nexport function NodeView({ job, active }: NodeViewProps): JSX.Element {\n const rootId = useMemo(() => uniqueId(), []);\n const { setHoverOnScrollableContent, setActiveExpandedViewJobId } =\n useContext(CanvasContext);\n const ref = useRef<HTMLDivElement>(null);\n const rootRef = useRef<Awaited<\n ReturnType<typeof unstable_createRoot>\n > | null>(null);\n const view = job.generatedView!;\n\n useEffect(() => {\n const container = ref.current;\n if (!container) {\n return;\n }\n const portal = createPortal(rootId);\n const root = unstable_createRoot(container, {\n portal,\n supportsUseChildren: true,\n } as any);\n rootRef.current = root;\n\n return () => {\n root.unmount();\n portal.remove();\n rootRef.current = null;\n };\n }, [rootId]);\n\n const [loading, setLoading] = useState(true);\n\n useEffect(() => {\n let ignore = false;\n (async () => {\n setLoading(true);\n try {\n const convertedView = await (isJsxView(view)\n ? convertJsx(view, { rootId })\n : convertView(view, { rootId }));\n if (ignore) {\n return;\n }\n await rootRef.current?.render(convertedView ?? []);\n } catch (error) {\n // eslint-disable-next-line no-console\n console.error(\"Failed to render view:\", error);\n }\n if (!ignore) {\n setLoading(false);\n }\n })();\n\n return () => {\n ignore = true;\n };\n }, [rootId, view]);\n\n const sizeLarge = useMemo(() => {\n if (isJsxView(view)) {\n // TODO: handle nested components\n for (const component of view.components ?? []) {\n if (component.name === \"table\") {\n return true;\n }\n if (component.name === \"dashboard\") {\n const widgets = component?.properties?.widgets;\n if (\n Array.isArray(widgets) &&\n widgets.length >= (component.properties!.groupField ? 3 : 7)\n ) {\n return true;\n }\n }\n }\n } else {\n for (const component of view.components ?? []) {\n if (component.componentName === \"table\") {\n return true;\n }\n if (component.componentName === \"dashboard\") {\n const widgets = component?.properties?.widgets;\n if (\n Array.isArray(widgets) &&\n widgets.length >= (component.properties!.groupField ? 3 : 7)\n ) {\n return true;\n }\n }\n }\n }\n return false;\n }, [view]);\n\n const handleMouseMove = useCallback(\n (e: React.MouseEvent) => {\n let found = false;\n for (const el of e.nativeEvent.composedPath()) {\n if (el === ref.current) {\n break;\n }\n if (\n el instanceof HTMLElement &&\n el.classList.contains(\"ant-table\") &&\n el.classList.contains(\"ant-table-scroll-horizontal\")\n ) {\n found = true;\n break;\n }\n }\n setHoverOnScrollableContent(found);\n },\n [setHoverOnScrollableContent]\n );\n\n const handleMouseLeave = useCallback(() => {\n setHoverOnScrollableContent(false);\n }, [setHoverOnScrollableContent]);\n\n const handleExpandClick = useCallback(() => {\n setActiveExpandedViewJobId(job.id);\n }, [job.id, setActiveExpandedViewJobId]);\n\n return (\n <div\n className={classNames(jobStyles[\"node-job\"], {\n [jobStyles.active]: active,\n [jobStyles.large]: sizeLarge,\n })}\n >\n <div className={jobStyles.background} />\n <div className={styles.heading}>\n <div\n className={classNames(styles.title, {\n [sharedStyles[\"shine-text\"]]: loading,\n })}\n >\n {view.title}\n </div>\n <button\n className={styles.expand}\n title={t(\"FULLSCREEN\")}\n onClick={handleExpandClick}\n >\n <WrappedIcon lib=\"easyops\" icon=\"fullscreen\" />\n </button>\n </div>\n <div\n data-root-id={rootId}\n ref={ref}\n onMouseMove={handleMouseMove}\n onMouseLeave={handleMouseLeave}\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]!./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 { CanvasContext } from \"../CanvasContext\";\nimport { WrappedIcon } from \"../bricks\";\n\nexport function NodeEnd(): JSX.Element {\n const { onShare } = useContext(CanvasContext);\n\n return (\n <div className={styles[\"node-end\"]}>\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 <button className={styles.button} onClick={onShare}>\n {t(K.SHARE)}\n </button>\n </div>\n );\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, `.topology-node{padding:5px;font-size:24px;width:34px;height:34px}.topology-node eo-icon{display:block}.topology-node-trouble{color:var(--color-warning)}.topology-node-ok{color:var(--color-success)}.topology-node-label{position:absolute;bottom:-20px;left:50%;transform:translate(-50%,0);font-size:14px;line-height:16px;background:#fff;padding:0 2px 2px;border-radius:4px;max-width:124px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}`, \"\"]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___.toString();\n","/* eslint-disable @typescript-eslint/no-use-before-define */\nimport * as z from \"zod\";\n\nexport const DEFINE_VARIABLE = \"defineVariable\";\nexport const DEFINE_DATA_SOURCE = \"defineDataSource\";\n\nexport const EventHandlerOfUpdateVariable = z.strictObject({\n action: z.literal(\"update_variable\"),\n payload: z.strictObject({\n name: z.string(),\n value: z.any(),\n }),\n});\n\nexport const EventHandlerOfRefreshDataSource = z.strictObject({\n action: z.literal(\"refresh_data_source\"),\n payload: z.strictObject({\n name: z.string(),\n }),\n});\n\nexport const EventHandlerOfCallComponent = z.strictObject({\n action: z.literal(\"call_component\"),\n payload: z.strictObject({\n componentId: z.string(),\n method: z.string(),\n args: z.array(z.any()).optional(),\n }),\n});\n\nexport const EventHandlerOfShowMessage = z.strictObject({\n action: z.literal(\"show_message\"),\n payload: z.strictObject({\n type: z.enum([\"info\", \"success\", \"warn\", \"error\"]),\n content: z.string(),\n }),\n});\n\nexport const EventHandlerOfCallAPI = z.strictObject({\n action: z.literal(\"call_api\"),\n payload: z.strictObject({\n api: z.string(),\n params: z.any().optional(),\n }),\n get callback() {\n return EventHandlerCallback.optional();\n },\n});\n\nexport const EventHandler = z.union([\n EventHandlerOfUpdateVariable,\n EventHandlerOfRefreshDataSource,\n EventHandlerOfCallAPI,\n EventHandlerOfCallComponent,\n EventHandlerOfShowMessage,\n]);\n\nexport const OneOrMoreEventHandlers = z.union([\n EventHandler,\n z.array(EventHandler),\n]);\n\nexport const EventHandlerCallback = z.strictObject({\n success: OneOrMoreEventHandlers.optional(),\n error: OneOrMoreEventHandlers.optional(),\n finally: OneOrMoreEventHandlers.optional(),\n});\n","import * as t from \"@babel/types\";\n\nconst EXPRESSION_PREFIX_REG = /^\\s*<%=?\\s+/;\nconst EXPRESSION_SUFFIX_REG = /\\s+%>\\s*$/;\n\nexport function isExpressionString(value: unknown): value is string {\n return (\n typeof value === \"string\" &&\n EXPRESSION_PREFIX_REG.test(value) &&\n EXPRESSION_SUFFIX_REG.test(value)\n );\n}\n\nexport interface ValidateExpressionOptions {\n disallowArrowFunction?: boolean;\n}\n\nexport function validateExpression(\n expr: t.Expression,\n options: ValidateExpressionOptions\n): t.Node | null {\n let invalidNode: t.Node | null = null;\n t.traverse(expr, {\n enter(node) {\n if (\n !invalidNode &&\n (t.isFunctionExpression(node) ||\n t.isStatement(node) ||\n t.isJSX(node) ||\n (options.disallowArrowFunction && t.isArrowFunctionExpression(node)))\n ) {\n invalidNode = node;\n }\n },\n });\n return invalidNode;\n}\n","import * as t from \"@babel/types\";\nimport type {\n ConstructJsValueOptions,\n ConstructResult,\n} from \"../interfaces.js\";\nimport { validateExpression } from \"../utils.js\";\n\nconst ambiguousSymbol = Symbol(\"ambiguous\");\n\nexport function constructJsObject(\n node: t.ObjectExpression,\n state: ConstructResult,\n options: ConstructJsValueOptions\n): string | Record<string, unknown> {\n if (node.properties.some((prop) => t.isSpreadElement(prop))) {\n if (options.allowExpression) {\n const invalidNode = validateExpression(node, options);\n if (invalidNode) {\n state.errors.push({\n message: `Unsupported node type: ${invalidNode.type}`,\n node: invalidNode,\n severity: \"error\",\n });\n } else {\n if (options.ambiguous) {\n return ambiguousSymbol as unknown as string;\n }\n return `<%${options.modifier ?? \"\"} ${state.source.substring(node.start!, node.end!)} %>`;\n }\n }\n }\n\n const obj: Record<string, unknown> = {};\n for (const prop of node.properties) {\n if (t.isObjectProperty(prop)) {\n if (prop.computed || prop.shorthand) {\n state.errors.push({\n message:\n \"Computed properties and shorthand properties are not supported\",\n node: prop.key,\n severity: \"error\",\n });\n continue;\n }\n let key: string;\n if (t.isIdentifier(prop.key)) {\n key = prop.key.name;\n } else if (t.isStringLiteral(prop.key)) {\n key = prop.key.value;\n } else {\n state.errors.push({\n message: `Unsupported object key type: ${prop.key.type}`,\n node: prop.key,\n severity: \"error\",\n });\n continue;\n }\n\n obj[key] = constructJsValue(prop.value, state, options);\n } else {\n state.errors.push({\n message: `Unsupported property type: ${prop.type}`,\n node: prop,\n severity: \"error\",\n });\n continue;\n }\n }\n return obj;\n}\n\nexport function constructJsArray(\n node: t.ArrayExpression,\n state: ConstructResult,\n options: ConstructJsValueOptions\n): string | unknown[] {\n if (node.elements.some((elem) => t.isSpreadElement(elem))) {\n if (options.allowExpression) {\n const invalidNode = validateExpression(node, options);\n if (invalidNode) {\n state.errors.push({\n message: `Unsupported node type: ${invalidNode.type}`,\n node: invalidNode,\n severity: \"error\",\n });\n } else {\n if (options.ambiguous) {\n return ambiguousSymbol as unknown as string;\n }\n return `<%${options.modifier ?? \"\"} ${state.source.substring(node.start!, node.end!)} %>`;\n }\n }\n }\n\n const arr: unknown[] = [];\n\n for (const elem of node.elements) {\n if (elem === null) {\n state.errors.push({\n message: \"Array elements cannot be empty\",\n node,\n severity: \"error\",\n });\n continue;\n }\n if (t.isSpreadElement(elem)) {\n state.errors.push({\n message: \"Spread elements are not supported in arrays\",\n node: elem,\n severity: \"error\",\n });\n continue;\n }\n arr.push(constructJsValue(elem, state, options));\n }\n\n return arr;\n}\n\nexport function constructJsValue(\n node: t.Node,\n state: ConstructResult,\n options: ConstructJsValueOptions\n): unknown {\n if (t.isObjectExpression(node)) {\n return constructJsObject(node, state, options);\n }\n\n if (t.isArrayExpression(node)) {\n return constructJsArray(node, state, options);\n }\n\n if (\n t.isStringLiteral(node) ||\n t.isNumericLiteral(node) ||\n t.isBooleanLiteral(node)\n ) {\n return node.value;\n }\n\n if (t.isNullLiteral(node)) {\n return null;\n }\n\n if (t.isIdentifier(node) && node.name === \"undefined\") {\n return undefined;\n }\n\n if (t.isExpression(node) && options.allowExpression) {\n const invalidNode = validateExpression(node, options);\n if (invalidNode) {\n state.errors.push({\n message: `Unsupported node type: ${invalidNode.type}`,\n node: invalidNode,\n severity: \"error\",\n });\n return null;\n } else {\n if (options.ambiguous) {\n return ambiguousSymbol;\n }\n return `<%${options.modifier ?? \"\"} ${state.source.substring(node.start!, node.end!)} %>`;\n }\n }\n\n state.errors.push({\n message: `Unsupported node type: ${node.type}`,\n node,\n severity: \"error\",\n });\n return null;\n}\n\nexport function constructPropValue(\n expr: t.Expression,\n state: ConstructResult,\n options: ConstructJsValueOptions\n) {\n let shouldCompute = false;\n t.traverse(expr, {\n enter(node, parent) {\n let p: t.Node | undefined;\n if (\n !shouldCompute &&\n !(\n t.isStringLiteral(node) ||\n t.isNumericLiteral(node) ||\n t.isBooleanLiteral(node) ||\n t.isNullLiteral(node) ||\n t.isObjectExpression(node) ||\n t.isArrayExpression(node) ||\n t.isObjectProperty(node) ||\n (t.isIdentifier(node) &&\n ((p = parent[parent.length - 1]?.node), true) &&\n (p && t.isObjectProperty(p)\n ? !p.computed && !p.shorthand\n : node.name === \"undefined\"))\n )\n ) {\n shouldCompute = true;\n }\n },\n });\n\n if (shouldCompute) {\n const invalidNode = validateExpression(expr, options);\n if (!invalidNode) {\n return `<%${options.modifier ?? \"\"} ${state.source.substring(expr.start!, expr.end!)} %>`;\n }\n }\n\n return constructJsValue(expr, state, options);\n}\n","import * as t from \"@babel/types\";\nimport type z from \"zod\";\nimport type { ConstructResult, Events } from \"../interfaces.js\";\nimport { constructJsValue } from \"./values.js\";\nimport { EventHandler, type EventHandlerOfCallAPI } from \"../schemas.js\";\n\nexport function constructEvents(node: t.Expression, result: ConstructResult) {\n if (!t.isObjectExpression(node)) {\n result.errors.push({\n message: `Expected an object expression for events, but got ${node.type}`,\n node,\n severity: \"error\",\n });\n return;\n }\n\n const events: Events = {};\n for (const prop of node.properties) {\n if (!t.isObjectProperty(prop)) {\n result.errors.push({\n message: `Unsupported property type in events: ${prop.type}`,\n node: prop,\n severity: \"error\",\n });\n continue;\n }\n if (prop.computed || prop.shorthand) {\n result.errors.push({\n message:\n \"Computed properties and shorthand properties are not supported in events\",\n node: prop,\n severity: \"error\",\n });\n continue;\n }\n let key: string;\n if (t.isIdentifier(prop.key)) {\n key = prop.key.name;\n } else if (t.isStringLiteral(prop.key)) {\n key = prop.key.value;\n } else {\n result.errors.push({\n message: `Unsupported object key type in events: ${prop.key.type}`,\n node: prop.key,\n severity: \"error\",\n });\n continue;\n }\n\n if (t.isArrayExpression(prop.value)) {\n const handlers: z.infer<typeof EventHandler>[] = [];\n for (const elem of prop.value.elements) {\n if (elem === null) {\n result.errors.push({\n message: \"Array elements cannot be empty in events\",\n node: prop.value,\n severity: \"error\",\n });\n continue;\n }\n if (t.isSpreadElement(elem)) {\n result.errors.push({\n message: \"Spread elements are not supported in events\",\n node: elem,\n severity: \"error\",\n });\n continue;\n }\n const handler = constructEventHandler(elem, result);\n if (handler) {\n handlers.push(handler);\n }\n }\n events[key] = handlers;\n } else if (t.isObjectExpression(prop.value)) {\n const handler = constructEventHandler(prop.value, result);\n if (handler) {\n events[key] = handler;\n }\n }\n }\n return events;\n}\n\nexport function constructEventHandler(\n node: t.Expression,\n result: ConstructResult\n) {\n if (!t.isObjectExpression(node)) {\n result.errors.push({\n message: `Expected an object expression for event handler, but got ${node.type}`,\n node,\n severity: \"error\",\n });\n return null;\n }\n const handler: Record<string, unknown> = {};\n let payloadProp: t.Node | undefined;\n for (const prop of node.properties) {\n if (!t.isObjectProperty(prop)) {\n result.errors.push({\n message: `Unsupported property type in event handler: ${prop.type}`,\n node: prop,\n severity: \"error\",\n });\n continue;\n }\n if (prop.computed || prop.shorthand) {\n result.errors.push({\n message:\n \"Computed properties and shorthand properties are not supported in event handlers\",\n node: prop,\n severity: \"error\",\n });\n continue;\n }\n let key: string;\n if (t.isIdentifier(prop.key)) {\n key = prop.key.name;\n } else if (t.isStringLiteral(prop.key)) {\n key = prop.key.value;\n } else {\n result.errors.push({\n message: `Unsupported object key type in event handler: ${prop.key.type}`,\n node: prop.key,\n severity: \"error\",\n });\n continue;\n }\n\n handler[key] = constructJsValue(prop.value, result, {\n allowExpression: true,\n });\n\n if (key === \"payload\") {\n payloadProp = prop.value;\n }\n }\n\n // Set ambiguousParams if for call_api action\n let ambiguousParams: unknown;\n if (\n handler.action === \"call_api\" &&\n (handler as z.infer<typeof EventHandlerOfCallAPI>).payload?.api &&\n payloadProp\n ) {\n if (t.isObjectExpression(payloadProp)) {\n for (const prop of payloadProp.properties) {\n if (\n t.isObjectProperty(prop) &&\n !prop.computed &&\n !prop.shorthand &&\n t.isIdentifier(prop.key) &&\n prop.key.name === \"params\"\n ) {\n ambiguousParams = constructJsValue(\n prop.value,\n {\n ...result,\n // Ignore errors in ambiguous params\n errors: [],\n },\n {\n allowExpression: true,\n disallowArrowFunction: true,\n ambiguous: true,\n }\n );\n }\n }\n }\n }\n\n const parsedHandler = EventHandler.safeParse(handler);\n if (parsedHandler.success) {\n const result = parsedHandler.data;\n\n if (ambiguousParams) {\n // Assert: result is a call_api action\n (\n result as {\n payload: {\n ambiguousParams?: unknown;\n };\n }\n ).payload.ambiguousParams = ambiguousParams;\n }\n\n return result;\n } else {\n result.errors.push({\n message: `Invalid event handler structure: ${parsedHandler.error}`,\n node,\n severity: \"error\",\n });\n }\n\n return null;\n}\n","import * as t from \"@babel/types\";\nimport type {\n ChildElement,\n ChildExpression,\n ChildMerged,\n ChildText,\n Component,\n ConstructResult,\n Events,\n ParseJsxOptions,\n} from \"../interfaces.js\";\nimport { constructJsValue, constructPropValue } from \"./values.js\";\nimport { validateExpression } from \"../utils.js\";\nimport { constructEvents } from \"./events.js\";\n\nexport function constructElement(\n node:\n | t.JSXElement\n | t.JSXText\n | t.JSXExpressionContainer\n | t.JSXFragment\n | t.JSXSpreadChild,\n result: ConstructResult,\n options?: ParseJsxOptions\n): ChildElement | null {\n if (t.isJSXElement(node)) {\n if (!t.isJSXIdentifier(node.openingElement.name)) {\n result.errors.push({\n message: `Expected JSXIdentifier, but got ${node.openingElement.name.type}`,\n node: node.openingElement.name,\n severity: \"error\",\n });\n return null;\n }\n\n const tagName = node.openingElement.name.name;\n const properties: Record<string, unknown> = {};\n const ambiguousProps: Record<string, unknown> = {};\n let events: Events | undefined;\n let componentId: string | undefined;\n\n for (const attr of node.openingElement.attributes) {\n if (t.isJSXSpreadAttribute(attr)) {\n result.errors.push({\n message: `Spread attributes are not supported in component`,\n node: attr,\n severity: \"error\",\n });\n continue;\n }\n if (!t.isJSXIdentifier(attr.name)) {\n result.errors.push({\n message: `Expected JSXIdentifier, but got ${attr.name.type}`,\n node: attr.name,\n severity: \"error\",\n });\n continue;\n }\n const attrName = attr.name.name;\n\n if (attrName === \"events\") {\n if (!t.isJSXExpressionContainer(attr.value)) {\n result.errors.push({\n message: `\"events\" attribute in component expects a JSXExpressionContainer, but got ${attr.value?.type}`,\n node: attr.value ?? attr,\n severity: \"error\",\n });\n continue;\n }\n if (t.isJSXEmptyExpression(attr.value.expression)) {\n result.errors.push({\n message: `Empty expression in events is not allowed`,\n node: attr.value,\n severity: \"warning\",\n });\n continue;\n }\n events = constructEvents(attr.value.expression, result);\n } else if (attrName === \"componentId\") {\n if (!t.isStringLiteral(attr.value)) {\n result.errors.push({\n message: `\"componentId\" attribute in component expects a string literal, but got ${attr.value?.type}`,\n node: attr.value ?? attr,\n severity: \"error\",\n });\n continue;\n }\n componentId = attr.value.value;\n } else {\n if (attr.value == null) {\n properties[attrName] = true;\n } else if (t.isStringLiteral(attr.value)) {\n properties[attrName] = attr.value.value;\n ambiguousProps[attrName] = attr.value.value;\n } else if (t.isJSXExpressionContainer(attr.value)) {\n if (t.isJSXEmptyExpression(attr.value.expression)) {\n result.errors.push({\n message: `Empty expression in JSX attribute \"${attrName}\" is not allowed`,\n node: attr.value,\n severity: \"warning\",\n });\n continue;\n }\n properties[attrName] = constructPropValue(\n attr.value.expression,\n result,\n {\n allowExpression: true,\n disallowArrowFunction: true,\n modifier: \"=\",\n }\n );\n\n if (options?.reward) {\n ambiguousProps[attrName] = constructJsValue(\n attr.value.expression,\n {\n ...result,\n // Ignore errors in ambiguous props\n errors: [],\n },\n {\n allowExpression: true,\n disallowArrowFunction: true,\n ambiguous: true,\n }\n );\n }\n } else {\n result.errors.push({\n message: `Unsupported attribute value type in component: ${attr.value.type}`,\n node: attr.value,\n severity: \"error\",\n });\n }\n }\n }\n\n let rawChildren: (ChildElement | ChildMerged)[] = node.children.map(\n (child) => constructElement(child, result, options)\n );\n let onlyTextChildren = rawChildren.every((child) => child?.type === \"text\");\n\n if (!onlyTextChildren) {\n let previousChild: ChildElement | ChildMerged | null = null;\n const tempChildren: (ChildElement | ChildMerged)[] = [];\n\n for (const child of rawChildren) {\n if (child === null) {\n // Do nothing\n } else if (child.type === \"text\" || child.type === \"expression\") {\n if (\n previousChild?.type === \"text\" ||\n previousChild?.type === \"expression\"\n ) {\n previousChild = {\n type: \"merged\",\n children: [previousChild, child],\n };\n tempChildren.splice(tempChildren.length - 1, 1, previousChild);\n continue;\n } else if (previousChild?.type === \"merged\") {\n previousChild.children.push(child);\n continue;\n }\n }\n previousChild = child;\n tempChildren.push(child);\n }\n\n rawChildren = tempChildren;\n onlyTextChildren = rawChildren.every(\n (child) =>\n child?.type === \"text\" ||\n (child?.type === \"merged\" &&\n child.children.every((c) => c.type === \"text\"))\n );\n }\n\n let children: Component[] | undefined;\n if (onlyTextChildren) {\n const text = rawChildren\n .flatMap((child) =>\n child!.type === \"text\"\n ? child!.text\n : (child as ChildMerged).children.map((c) => (c as ChildText).text)\n )\n .join(\"\")\n .trim();\n if (text) {\n properties.textContent = text;\n }\n } else {\n const onlyLooseTextChildren = rawChildren.every(\n (child) => !!child && child.type !== \"component\"\n );\n if (onlyLooseTextChildren) {\n const text = mergeTexts(\n rawChildren.flatMap((child) =>\n child!.type === \"merged\"\n ? (child as ChildMerged).children\n : (child as ChildText)\n ),\n result.source\n );\n properties.textContent = text;\n } else {\n children = rawChildren\n .filter((child) => !!child)\n .map((child) =>\n child.type === \"component\"\n ? child.component\n : {\n name: \"eo-text\",\n properties: {\n textContent:\n child.type === \"text\"\n ? child.text\n : child.type === \"expression\"\n ? `<%= ${child.expression} %>`\n : mergeTexts(child.children, result.source),\n },\n }\n );\n }\n }\n\n const component: Component = {\n name: tagName,\n componentId,\n properties,\n events,\n children,\n };\n\n if (options?.reward) {\n component.ambiguousProps = ambiguousProps;\n }\n\n if (componentId) {\n if (result.componentsMap.has(componentId)) {\n result.errors.push({\n message: `Duplicated componentId \"${componentId}\" found`,\n node,\n severity: \"error\",\n });\n } else {\n result.componentsMap.set(componentId, component);\n }\n }\n\n return {\n type: \"component\",\n component,\n };\n }\n if (t.isJSXText(node)) {\n if (node.value.trim()) {\n return {\n type: \"text\",\n text: node.value,\n };\n }\n return null;\n }\n if (t.isJSXExpressionContainer(node)) {\n if (t.isJSXEmptyExpression(node.expression)) {\n result.errors.push({\n message: \"Empty expression in JSX is not allowed\",\n node,\n severity: \"warning\",\n });\n return null;\n }\n const invalidNode = validateExpression(node.expression, {\n disallowArrowFunction: true,\n });\n if (invalidNode) {\n result.errors.push({\n message: `Unsupported node type in expression: ${invalidNode.type}`,\n node: invalidNode,\n severity: \"error\",\n });\n return null;\n }\n return {\n type: \"expression\",\n expression: node.expression,\n };\n }\n\n result.errors.push({\n message: `Unsupported node type in component: ${node.type}`,\n node,\n severity: \"error\",\n });\n return null;\n}\n\nfunction mergeTexts(elements: (ChildText | ChildExpression)[], source: string) {\n return `<%= CTX.__builtin_fn_mergeTexts(${elements\n .map((elem) =>\n elem.type === \"text\"\n ? JSON.stringify(elem)\n : `{type:\"expression\",value:(${source.substring(elem.expression.start!, elem.expression.end!)})}`\n )\n .join(\", \")}) %>`;\n}\n","import * as t from \"@babel/types\";\nimport type { ConstructResult, ParseJsxOptions } from \"../interfaces.js\";\nimport { constructElement } from \"./element.js\";\n\nexport function constructView(\n node: t.JSXElement,\n result: ConstructResult,\n options?: ParseJsxOptions\n) {\n const element = node.openingElement;\n if (!t.isJSXIdentifier(element.name)) {\n result.errors.push({\n message: `Expected JSXIdentifier, but got ${element.name.type}`,\n node: element.name,\n severity: \"error\",\n });\n return;\n }\n const tagName = element.name.name;\n if (tagName !== \"eo-view\") {\n result.errors.push({\n message: `Expected <eo-view>, but got <${tagName}>`,\n node: element.name,\n severity: \"error\",\n });\n return;\n }\n\n for (const attr of element.attributes) {\n if (t.isJSXSpreadAttribute(attr)) {\n result.errors.push({\n message: \"Spread attributes are not supported in <eo-view>\",\n node: attr,\n severity: \"error\",\n });\n continue;\n }\n if (!t.isJSXIdentifier(attr.name)) {\n result.errors.push({\n message: `Expected JSXIdentifier, but got ${attr.name.type}`,\n node: attr.name,\n severity: \"error\",\n });\n continue;\n }\n const name = attr.name.name;\n switch (name) {\n case \"title\":\n if (t.isStringLiteral(attr.value)) {\n result.title = attr.value.value;\n } else {\n result.errors.push({\n message: `\"title\" attribute in <eo-view> expects a string literal, but got ${attr.value?.type}`,\n node: attr.value ?? attr,\n severity: \"error\",\n });\n }\n break;\n default:\n result.errors.push({\n message: `Unsupported attribute \"${name}\" in <eo-view>`,\n node: attr.name,\n severity: \"notice\",\n });\n }\n }\n\n if (!result.title) {\n result.errors.push({\n message: `\"title\" attribute is required in <eo-view>`,\n node: element.name,\n severity: \"warning\",\n });\n }\n\n for (const child of node.children) {\n const element = constructElement(child, result, options);\n if (element === null) {\n continue;\n }\n if (element.type === \"text\") {\n if (element.text.trim() === \"\") {\n continue; // Skip empty text nodes\n }\n result.errors.push({\n message: `Unexpected string child in <eo-view>: \"${element.text}\". Only components are allowed.`,\n node: child,\n severity: \"warning\",\n });\n continue;\n }\n if (element.type === \"expression\") {\n result.errors.push({\n message: `Unexpected expression child in <eo-view>: \"${element.expression}\". Only components are allowed.`,\n node: element.expression,\n severity: \"warning\",\n });\n continue;\n }\n result.components.push(element.component);\n }\n}\n","import { parse, type ParseResult } from \"@babel/parser\";\nimport * as t from \"@babel/types\";\nimport { DEFINE_DATA_SOURCE, DEFINE_VARIABLE } from \"./schemas.js\";\nimport type {\n Component,\n ConstructResult,\n DataSource,\n ParseError,\n ParseJsxOptions,\n Variable,\n} from \"./interfaces.js\";\nimport { constructJsValue } from \"./constructors/values.js\";\nimport { constructView } from \"./constructors/view.js\";\nimport { isExpressionString } from \"./utils.js\";\n\nexport function parseJsx(source: string, options?: ParseJsxOptions) {\n const dataSources: DataSource[] = [];\n const variables: Variable[] = [];\n const components: Component[] = [];\n const errors: ParseError[] = [];\n let title: string | undefined;\n const componentsMap = new Map<string, Component>();\n const result: ConstructResult = {\n source,\n title,\n dataSources,\n variables,\n components,\n componentsMap,\n errors,\n };\n\n let ast: ParseResult<t.File> | undefined;\n try {\n ast = parse(source, {\n plugins: [\"jsx\"],\n sourceType: \"module\",\n errorRecovery: true,\n });\n } catch (error) {\n errors.push({\n message: `Failed to parse JSX: ${error}`,\n node: null,\n severity: \"fatal\",\n });\n }\n\n if (ast?.errors?.length) {\n for (const error of ast.errors) {\n errors.push({\n message: `${error.code}: ${error.reasonCode}`,\n node: null,\n severity: \"error\",\n });\n }\n }\n\n for (const stmt of ast?.program.body ?? []) {\n if (t.isExpressionStatement(stmt)) {\n const expr = stmt.expression;\n if (t.isCallExpression(expr)) {\n if (t.isIdentifier(expr.callee)) {\n if (expr.callee.name === DEFINE_VARIABLE) {\n const missingArgs = expr.arguments.length < 1;\n if (missingArgs || expr.arguments.length > 2) {\n errors.push({\n message: `\"${DEFINE_VARIABLE}()\" expects one or two arguments, but got ${expr.arguments.length}`,\n node: expr,\n severity: missingArgs ? \"error\" : \"notice\",\n });\n if (missingArgs) {\n continue;\n }\n }\n const varName = expr.arguments[0];\n if (!t.isStringLiteral(varName)) {\n errors.push({\n message: `\"${DEFINE_VARIABLE}()\" expects a string literal as the first argument, but got ${varName.type}`,\n node: varName,\n severity: \"error\",\n });\n continue;\n }\n const name = varName.value;\n\n if (expr.arguments.length === 2) {\n const value = constructJsValue(expr.arguments[1], result, {\n allowExpression: true,\n });\n variables.push({ name, value });\n } else {\n variables.push({ name });\n }\n } else if (expr.callee.name === DEFINE_DATA_SOURCE) {\n const missingArgs = expr.arguments.length < 2;\n if (missingArgs || expr.arguments.length > 2) {\n errors.push({\n message: `\"${DEFINE_DATA_SOURCE}()\" expects two arguments, but got ${expr.arguments.length}`,\n node: expr,\n severity: missingArgs ? \"error\" : \"notice\",\n });\n if (missingArgs) {\n continue;\n }\n }\n const dataSourceName = expr.arguments[0];\n if (!t.isStringLiteral(dataSourceName)) {\n errors.push({\n message: `\"${DEFINE_DATA_SOURCE}()\" expects a string literal as the first argument, but got ${dataSourceName.type}`,\n node: dataSourceName,\n severity: \"error\",\n });\n continue;\n }\n const dataSourceConfig = expr.arguments[1];\n if (!t.isObjectExpression(dataSourceConfig)) {\n errors.push({\n message: `\"${DEFINE_DATA_SOURCE}()\" expects an object literal as the second argument, but got ${dataSourceConfig.type}`,\n node: dataSourceConfig,\n severity: \"error\",\n });\n continue;\n }\n\n const dataSource = {\n name: dataSourceName.value,\n } as DataSource;\n for (const prop of dataSourceConfig.properties) {\n if (!t.isObjectProperty(prop)) {\n errors.push({\n message: `Unsupported property type in data source config: ${prop.type}`,\n node: prop,\n severity: \"error\",\n });\n continue;\n }\n if (prop.computed || prop.shorthand) {\n errors.push({\n message:\n \"Computed properties and shorthand properties are not supported in data source config\",\n node: prop,\n severity: \"error\",\n });\n continue;\n }\n let key: string;\n if (t.isIdentifier(prop.key)) {\n key = prop.key.name;\n } else if (t.isStringLiteral(prop.key)) {\n key = prop.key.value;\n } else {\n errors.push({\n message: `Unsupported object key type in data source config: ${prop.key.type}`,\n node: prop.key,\n severity: \"error\",\n });\n continue;\n }\n\n switch (key) {\n case \"api\":\n if (!t.isStringLiteral(prop.value)) {\n errors.push({\n message: `Data source \"api\" expects a string literal, but got ${prop.value.type}`,\n node: prop.value,\n severity: \"error\",\n });\n continue;\n }\n dataSource.api = prop.value.value;\n break;\n case \"objectId\":\n if (!t.isStringLiteral(prop.value)) {\n errors.push({\n message: `Data source \"objectId\" expects a string literal, but got ${prop.value.type}`,\n node: prop.value,\n severity: \"error\",\n });\n continue;\n }\n dataSource.objectId = prop.value.value;\n break;\n case \"params\":\n if (!isNilNode(prop.value)) {\n if (!t.isObjectExpression(prop.value)) {\n errors.push({\n message: `Data source \"params\" prefers an object literal, but got ${prop.value.type}`,\n node: prop.value,\n severity: \"notice\",\n });\n }\n const params = constructJsValue(prop.value, result, {\n allowExpression: true,\n });\n if (\n isExpressionString(params) ||\n (typeof params === \"object\" && params !== null)\n ) {\n dataSource.params = params as\n | string\n | Record<string, unknown>;\n } else {\n errors.push({\n message: `Data source \"params\" expects an object or expression, but got ${typeof params}`,\n node: prop.value,\n severity: \"error\",\n });\n }\n if (options?.reward) {\n dataSource.ambiguousParams = constructJsValue(\n prop.value,\n {\n ...result,\n // Ignore errors in ambiguous params\n errors: [],\n },\n {\n allowExpression: true,\n disallowArrowFunction: true,\n ambiguous: true,\n }\n );\n }\n }\n break;\n case \"transform\":\n if (!isNilNode(prop.value)) {\n if (!t.isArrowFunctionExpression(prop.value)) {\n errors.push({\n message: `Data source \"transform\" expects an arrow function, but got ${prop.value.type}`,\n node: prop.value,\n severity: \"error\",\n });\n continue;\n }\n if (!t.isExpression(prop.value.body)) {\n errors.push({\n message: `\"transform\" function body expects an expression, but got ${prop.value.body.type}`,\n node: prop.value.body,\n severity: \"error\",\n });\n continue;\n }\n if (prop.value.params.length !== 1) {\n errors.push({\n message: `\"transform\" function expects exactly one parameter, but got ${prop.value.params.length}`,\n node: prop.value.params[1] ?? prop.value,\n severity: \"error\",\n });\n continue;\n }\n const arg = prop.value.params[0];\n if (!t.isIdentifier(arg)) {\n errors.push({\n message: `\"transform\" function parameter expects an identifier, but got ${arg.type}`,\n node: arg,\n severity: \"error\",\n });\n continue;\n }\n if (arg.name !== \"DATA\") {\n errors.push({\n message: `\"transform\" function parameter expects named \"DATA\", but got \"${arg.name}\"`,\n node: arg,\n severity: \"error\",\n });\n continue;\n }\n dataSource.transform = `<% ${source.substring(prop.value.body.start!, prop.value.body.end!)} %>`;\n }\n break;\n }\n }\n if (dataSource.api) {\n dataSources.push(dataSource);\n } else {\n errors.push({\n message: `\"${DEFINE_DATA_SOURCE}()\" requires \"api\" property in the second argument`,\n node: dataSourceConfig,\n severity: \"error\",\n });\n }\n }\n }\n }\n } else if (t.isExportDefaultDeclaration(stmt)) {\n const declaration = stmt.declaration;\n if (!t.isJSXElement(declaration)) {\n errors.push({\n message: `Exported default declaration must be a JSX element, but got ${declaration.type}`,\n node: declaration,\n severity: \"error\",\n });\n continue;\n }\n\n constructView(declaration, result, options);\n } else {\n errors.push({\n message: `Unsupported statement type: ${stmt.type}`,\n node: stmt,\n severity: \"error\",\n });\n continue;\n }\n }\n\n return result;\n}\n\nfunction isNilNode(node: t.Node) {\n return (\n t.isNullLiteral(node) || (t.isIdentifier(node) && node.name === \"undefined\")\n );\n}\n","import type { Reducer } from \"react\";\nimport { isEqual, isMatchWith, pick, pull } from \"lodash\";\nimport type {\n ComponentGraph,\n ComponentGraphEdge,\n ComponentGraphNode,\n DataPart,\n Job,\n JobPatch,\n Message,\n Part,\n RawComponentGraphNode,\n TextPart,\n} from \"../interfaces\";\nimport type { CruiseCanvasAction } from \"./interfaces\";\nimport type { ViewWithInfo } from \"../utils/converters/interfaces\";\nimport { parseJsx, type ConstructResult } from \"@next-shared/jsx-storyboard\";\n\nexport const jobs: Reducer<Job[], CruiseCanvasAction> = (state, action) => {\n switch (action.type) {\n case \"sse\": {\n const jobsPatch = action.payload.jobs;\n let jobs = action.isInitial ? [] : state;\n\n if (!Array.isArray(jobsPatch) || jobsPatch.length === 0) {\n return jobs;\n }\n const previousComponentGraph = state.findLast(\n (job) => !!job.componentGraph\n )?.componentGraph;\n\n for (const jobPatch of jobsPatch) {\n const previousJobIndex =\n jobs?.findIndex((job) => job.id === jobPatch.id) ?? -1;\n const { messages: messagesPatch, toolCall } = jobPatch;\n\n if (typeof toolCall?.arguments === \"string\") {\n toolCall.originalArguments = toolCall.arguments;\n try {\n toolCall.arguments = JSON.parse(toolCall.arguments);\n } catch (e) {\n // Failed to parse toolCall arguments\n toolCall.arguments = {};\n toolCall.argumentsParseFailed = true;\n toolCall.argumentsParseError = e;\n }\n }\n\n if (previousJobIndex === -1) {\n const patch = {\n ...jobPatch,\n };\n if (\n (patch.toolCall?.name === \"get_view_with_info\" ||\n patch.toolCall?.name === \"create_view\") &&\n patch.state === \"completed\"\n ) {\n const generatedView = getJobGeneratedView(messagesPatch);\n if (generatedView) {\n patch.generatedView = generatedView;\n }\n }\n const componentGraph = getJobComponentGraph(\n messagesPatch ?? [],\n previousComponentGraph\n );\n if (componentGraph) {\n patch.componentGraph = componentGraph;\n }\n if (Array.isArray(messagesPatch) && messagesPatch.length > 0) {\n jobs = [\n ...jobs,\n {\n ...patch,\n messages: mergeMessages(messagesPatch),\n } as Job,\n ];\n } else {\n jobs = [...jobs, patch as Job];\n }\n } else {\n const previousJob = jobs[previousJobIndex];\n const restMessagesPatch: JobPatch = pick(jobPatch, [\n \"id\",\n \"upstream\",\n \"parent\",\n \"state\",\n \"instruction\",\n \"toolCall\",\n \"isError\",\n \"startTime\",\n \"endTime\",\n ]);\n if (Array.isArray(messagesPatch) && messagesPatch.length > 0) {\n restMessagesPatch.messages = mergeMessages([\n ...(previousJob.messages ?? []),\n ...messagesPatch,\n ]);\n }\n\n if (\n !previousJob.generatedView &&\n (\n [\"get_view_with_info\", \"create_view\"] as (string | undefined)[]\n ).includes(\n restMessagesPatch.toolCall?.name ?? previousJob.toolCall?.name\n ) &&\n (restMessagesPatch.state ?? previousJob.state) === \"completed\"\n ) {\n const generatedView = getJobGeneratedView(messagesPatch);\n if (generatedView) {\n restMessagesPatch.generatedView = generatedView;\n }\n }\n\n const componentGraph = getJobComponentGraph(\n [...(previousJob.messages ?? []), ...(messagesPatch ?? [])],\n previousComponentGraph\n );\n if (componentGraph) {\n restMessagesPatch.componentGraph = componentGraph;\n }\n\n if (!isMatchWith(previousJob, restMessagesPatch, isEqual)) {\n jobs = [\n ...jobs.slice(0, previousJobIndex),\n {\n ...previousJob,\n ...restMessagesPatch,\n },\n ...jobs.slice(previousJobIndex + 1),\n ];\n }\n }\n }\n\n return jobs;\n }\n\n case \"reset\": {\n return state.length === 0 ? state : [];\n }\n }\n\n return state;\n};\n\nfunction mergeMessages(messages: Message[]): Message[] {\n const merged: Message[] = [];\n let previousRole: Message[\"role\"] | undefined;\n for (const message of messages) {\n if (!previousRole || previousRole !== message.role) {\n merged.push({ ...message });\n } else {\n const lastMessage = merged[merged.length - 1];\n lastMessage.parts = [...lastMessage.parts, ...message.parts];\n }\n previousRole = message.role;\n }\n\n for (const message of merged) {\n message.parts = mergeMessageParts(message.parts);\n }\n\n return merged;\n}\n\nfunction mergeMessageParts(parts: Part[]): Part[] {\n const merged: Part[] = [];\n let previousType: Part[\"type\"] | undefined;\n let previousDataType: string | undefined;\n for (const part of parts) {\n if (previousType === \"text\" && part.type === \"text\") {\n const lastPart = merged[merged.length - 1] as TextPart;\n lastPart.text += part.text;\n } else if (\n // Assert: previousType is data when previousDataType is defined\n previousDataType === \"stream\" &&\n part.type === \"data\" &&\n part.data?.type === \"stream\"\n ) {\n const lastPart = merged[merged.length - 1] as DataPart;\n lastPart.data.message += part.data.message;\n } else {\n merged.push({ ...part });\n }\n\n previousType = part.type;\n previousDataType = part.type === \"data\" ? part.data?.type : undefined;\n }\n return merged;\n}\n\nfunction getJobGeneratedView(\n messages: Message[] | undefined\n): ConstructResult | ViewWithInfo | undefined {\n if (!messages) {\n return;\n }\n\n for (const message of messages) {\n if (message.role === \"tool\") {\n for (const part of message.parts) {\n if (part.type === \"text\") {\n try {\n const result = JSON.parse(part.text) as JsxResult | ViewWithInfo;\n return isJsxResult(result) ? parseJsx(result.code) : result;\n } catch {\n // Do nothing, continue to next part\n }\n }\n }\n }\n }\n}\n\nfunction getJobComponentGraph(\n messages: Message[],\n previousGraph: ComponentGraph | undefined\n): ComponentGraph | undefined {\n let graph = previousGraph;\n let hasGraph = false;\n for (const message of messages) {\n if (message.role === \"tool\") {\n for (const part of message.parts) {\n if (part.type === \"data\" && part.data?.type === \"graph\") {\n const msg = part.data.message;\n switch (msg?.type) {\n case \"component_graph\": {\n const nodes: ComponentGraphNode[] = [];\n const edges: ComponentGraphEdge[] = [];\n for (const node of Object.values(\n msg.data\n ) as RawComponentGraphNode[]) {\n // Remove self-references\n if (Array.isArray(node.children)) {\n pull(node.children, node.id);\n }\n\n nodes.push({\n type: \"node\",\n id: node.id,\n data: node,\n });\n edges.push(\n ...(node.children?.map<ComponentGraphEdge>((target) => ({\n type: \"edge\",\n source: node.id,\n target: target,\n })) ?? [])\n );\n }\n graph = { nodes, edges, initial: true };\n hasGraph = true;\n break;\n }\n case \"component_graph_node\": {\n if (graph) {\n const nodeIndex = graph.nodes.findIndex(\n (n) => n.id === msg.data.component\n );\n if (nodeIndex !== -1) {\n const node = graph.nodes[nodeIndex];\n if (node.data.status !== msg.data.status) {\n graph = {\n nodes: [\n ...graph.nodes.slice(0, nodeIndex),\n {\n ...node,\n data: {\n ...node.data,\n status: msg.data.status,\n },\n },\n ...graph.nodes.slice(nodeIndex + 1),\n ],\n edges: graph.edges,\n initial: false,\n };\n }\n }\n hasGraph = true;\n }\n }\n }\n }\n }\n }\n }\n return hasGraph ? graph : undefined;\n}\n\ninterface JsxResult {\n viewId: string;\n code: string;\n}\n\nfunction isJsxResult(view: JsxResult | ViewWithInfo): view is JsxResult {\n return !!(view as JsxResult).code;\n}\n","import { Reducer } from \"react\";\nimport type { CruiseCanvasAction, CruiseCanvasState } from \"./interfaces\";\nimport { jobs } from \"./jobs\";\nimport { task } from \"./task\";\nimport { error } from \"./error\";\n\ntype ReducersMapObject<S, A> = {\n [K in keyof S]: Reducer<S[K], A>;\n};\n\nfunction combineReducers<S, A>(\n reducers: ReducersMapObject<S, A>\n): Reducer<S, A> {\n return ((state, action) =>\n Object.fromEntries(\n Object.entries<Reducer<any, A>>(reducers).map(([key, value]) => [\n key,\n value(state[key as keyof S], action),\n ])\n )) as Reducer<S, A>;\n}\n\nexport const rootReducer = combineReducers<\n CruiseCanvasState,\n CruiseCanvasAction\n>({\n task,\n jobs,\n error,\n});\n","import type { Reducer } from \"react\";\nimport { isEqual, isMatchWith, pick } from \"lodash\";\nimport type { TaskBaseDetail } from \"../interfaces\";\nimport type { CruiseCanvasAction } from \"./interfaces\";\n\nexport const task: Reducer<TaskBaseDetail | null, CruiseCanvasAction> = (\n state,\n action\n) => {\n switch (action.type) {\n case \"sse\": {\n const taskPatch = pick(action.payload, [\n \"id\",\n \"requirement\",\n \"state\",\n \"title\",\n \"startTime\",\n \"endTime\",\n \"plan\",\n ]);\n\n // TODO(): remove temp work around.\n // if ((taskPatch as any).state === \"blocked\") {\n // taskPatch.state = \"working\";\n // }\n\n return (\n action.isInitial\n ? taskPatch\n : state && isMatchWith(state, taskPatch, isEqual)\n ? state\n : { ...state, ...taskPatch }\n ) as TaskBaseDetail;\n }\n\n case \"reset\": {\n return null;\n }\n }\n return state;\n};\n","import type { Reducer } from \"react\";\nimport type { CruiseCanvasAction } from \"./interfaces\";\n\nexport const error: Reducer<string | null, CruiseCanvasAction> = (\n state,\n action\n) => {\n switch (action.type) {\n case \"sse\": {\n const error = action.payload.error;\n return state === null && typeof error === \"string\" ? error : state;\n }\n\n case \"reset\": {\n return null;\n }\n }\n\n return state;\n};\n","// istanbul ignore file\nimport { useCallback, useEffect, useReducer, useRef } from \"react\";\nimport { http } from \"@next-core/http\";\nimport { createSSEStream } from \"@next-core/utils/general\";\nimport { getBasePath, handleHttpError } from \"@next-core/runtime\";\nimport { rootReducer } from \"./reducers\";\nimport type { TaskPatch } from \"./interfaces\";\n\nconst MINIMAL_DELAY = 500;\n\nexport function useTaskDetail(\n taskId: string | undefined,\n replay?: boolean,\n replayDelay?: number\n) {\n const [{ task, jobs, error }, dispatch] = useReducer(\n rootReducer,\n null,\n () => ({\n task: null,\n jobs: [],\n error: null,\n })\n );\n\n const humanInputRef = useRef<(jobId: string, input: string) => void>();\n const resumedRef = useRef<() => void>();\n\n const replayListRef = useRef<TaskPatch[] | null>(null);\n const replayRef = useRef(replay);\n const replayDelayRef = useRef((replayDelay ?? 2) * 1000);\n const replayResolveRef = useRef<(() => void) | null>(null);\n\n const skipToResults = useCallback(() => {\n replayRef.current = false;\n if (replayResolveRef.current) {\n replayResolveRef.current();\n replayResolveRef.current = null;\n }\n }, []);\n\n const watchAgain = useCallback(async () => {\n replayRef.current = true;\n\n let isInitial = true;\n let previousTime: number | undefined;\n for (const value of replayListRef.current!) {\n if (replayRef.current) {\n let delay = replayDelayRef.current;\n if (value.time && previousTime) {\n delay = Math.min(\n Math.max(MINIMAL_DELAY, (value.time - previousTime) * 1000),\n delay\n );\n }\n previousTime = value.time;\n if (!isInitial) {\n await new Promise<void>((resolve) => {\n replayResolveRef.current = resolve;\n setTimeout(resolve, delay);\n });\n replayResolveRef.current = null;\n }\n }\n\n dispatch({ type: \"sse\", payload: value, isInitial });\n isInitial = false;\n }\n }, []);\n\n useEffect(() => {\n dispatch({ type: \"reset\" });\n humanInputRef.current = undefined;\n if (!taskId) {\n return;\n }\n\n let ignore = false;\n let requesting = false;\n let ctrl: AbortController | undefined;\n\n const makeRequest = async () => {\n if (requesting) {\n return;\n }\n\n requesting = true;\n replayListRef.current = [];\n ctrl = new AbortController();\n try {\n const request = await createSSEStream<TaskPatch>(\n `${getBasePath()}api/gateway/logic.llm.aiops_service/api/v1/llm/agent/flow/${taskId}`,\n // `/api/mocks/task/get?${new URLSearchParams({ id: taskId })}`\n // `http://localhost:8888/.netlify/functions/task-get?${new URLSearchParams({ id: taskId })}`\n // `https://serverless-mocks.netlify.app/.netlify/functions/task-get?${new URLSearchParams({ id: taskId })}`\n {\n signal: ctrl.signal,\n }\n );\n const stream = await request;\n let isInitial = true;\n let previousTime: number | undefined;\n for await (const value of stream) {\n if (ignore) {\n requesting = false;\n return;\n }\n\n if (replayRef.current) {\n let delay = replayDelayRef.current;\n if (value.time && previousTime) {\n delay = Math.min(\n Math.max(MINIMAL_DELAY, (value.time - previousTime) * 1000),\n delay\n );\n }\n previousTime = value.time;\n\n if (!isInitial) {\n await new Promise<void>((resolve) => {\n replayResolveRef.current = resolve;\n setTimeout(resolve, delay);\n });\n replayResolveRef.current = null;\n }\n }\n\n replayListRef.current.push(value);\n dispatch({ type: \"sse\", payload: value, isInitial });\n isInitial = false;\n }\n } catch (e) {\n // eslint-disable-next-line no-console\n console.error(\"sse failed\", e);\n handleHttpError(e);\n } finally {\n requesting = false;\n }\n };\n\n resumedRef.current = makeRequest;\n\n humanInputRef.current = async (jobId: string, input: string) => {\n try {\n await http.post(\n `${getBasePath()}api/gateway/logic.llm.aiops_service/api/v1/llm/agent/flow/${taskId}/job/${jobId}`,\n { input }\n );\n } catch (e) {\n // eslint-disable-next-line no-console\n console.error(\"human input failed\", e);\n handleHttpError(e);\n return;\n }\n\n makeRequest();\n };\n\n makeRequest();\n\n return () => {\n ignore = true;\n ctrl?.abort();\n };\n }, [taskId]);\n\n return {\n task,\n jobs,\n error,\n humanInputRef,\n resumedRef,\n skipToResults,\n watchAgain,\n };\n}\n","import { visit } from \"unist-util-visit\";\nimport { toString } from \"hast-util-to-string\";\nimport { refractor, type RefractorElement } from \"refractor\";\nimport { getCodeLanguage } from \"./utils.js\";\n\n// Reference https://github.com/mapbox/rehype-prism\nexport function rehypePrism() {\n function visitor(\n node: RefractorElement,\n _index: number | undefined,\n parent: RefractorElement | undefined\n ) {\n if (!parent || parent.tagName !== \"pre\" || node.tagName !== \"code\") {\n return;\n }\n\n const lang = getCodeLanguage(node);\n\n if (lang === null || lang === \"mermaid\") {\n return;\n }\n\n let result;\n try {\n parent.properties.className = (\n (parent.properties.className as string[]) || []\n ).concat(\"language-\" + lang);\n result = refractor.highlight(toString(node), lang);\n } catch {\n return;\n }\n\n node.children = result.children;\n }\n return (tree: RefractorElement) => {\n visit(tree, \"element\", visitor);\n };\n}\n","import { visit } from \"unist-util-visit\";\nimport { toString } from \"hast-util-to-string\";\nimport type { RefractorElement } from \"refractor\";\nimport mermaid from \"mermaid\";\nimport { fromHtmlIsomorphic } from \"hast-util-from-html-isomorphic\";\nimport { getCodeLanguage } from \"./utils.js\";\n\nlet count = 0;\n\nmermaid.initialize({\n startOnLoad: false,\n theme: \"base\",\n themeVariables: {\n fontSize: \"14px\",\n lineColor: \"#979797\",\n primaryColor: \"#DCD2F3\",\n primaryBorderColor: \"#0000001A\",\n },\n});\n\nconst parser = new DOMParser();\nconst serializer = new XMLSerializer();\n\n// Reference https://github.com/remcohaszing/rehype-mermaid\nexport function rehypeMermaid() {\n return async (tree: RefractorElement) => {\n const promises: Promise<void>[] = [];\n\n function visitor(\n node: RefractorElement,\n index: number | undefined,\n parent: RefractorElement | undefined\n ) {\n if (!parent || parent.tagName !== \"pre\" || node.tagName !== \"code\") {\n return;\n }\n\n const lang = getCodeLanguage(node);\n\n if (lang !== \"mermaid\") {\n return;\n }\n\n promises.push(\n (async () => {\n const id = `mermaid-${count++}`;\n\n const { svg } = await mermaid.render(id, toString(node));\n const root = parser.parseFromString(svg, \"text/html\");\n const svgElement = root.querySelector(\"svg\") as SVGSVGElement;\n\n const defs = root.createElementNS(\n \"http://www.w3.org/2000/svg\",\n \"defs\"\n );\n defs.innerHTML = `<linearGradient id=\"linear-gradient-${id}\" x1=\"0%\" y1=\"0%\" x2=\"0%\" y2=\"100%\">\n <stop offset=\"0%\" stop-color=\"#F0EBFA\" />\n <stop offset=\"75%\" stop-color=\"#DED4F4\" />\n <stop offset=\"100%\" stop-color=\"#C5C7FA\" />\n</linearGradient>`;\n svgElement.prepend(defs);\n\n const style = root.createElementNS(\n \"http://www.w3.org/2000/svg\",\n \"style\"\n );\n style.textContent = `\n#${id} .node rect,\n#${id} .node circle,\n#${id} .node ellipse,\n#${id} .node polygon,\n#${id} .node path {\n fill: url(#linear-gradient-${id});\n}\n#${id} .node rect {\n rx: 4;\n ry: 4;\n}\n#${id} .labelBkg {\n background-color: #f5f8ff;\n}\n#${id} .edgeLabel,\n#${id} .edgeLabel p {\n background-color: transparent;\n}\n#${id} .edgeLabel {\n color: #8c8c8c;\n font-size: 12px;\n}\n`;\n svgElement.appendChild(style);\n\n const modifiedSvg = serializer.serializeToString(svgElement);\n\n const replacements = fromHtmlIsomorphic(modifiedSvg, {\n fragment: true,\n }).children as RefractorElement[];\n parent.children.splice(index!, 1, ...replacements);\n parent.properties.className = (\n (parent.properties.className as string[]) || []\n ).concat(\"mermaid\");\n })()\n );\n }\n\n visit(tree, \"element\", visitor);\n\n await Promise.all(promises);\n };\n}\n","import { useEffect, useState } from \"react\";\nimport { Fragment, jsx, jsxs } from \"react/jsx-runtime\";\nimport { unified } from \"unified\";\nimport remarkParse from \"remark-parse\";\nimport remarkGfm from \"remark-gfm\";\nimport remarkToRehype from \"remark-rehype\";\nimport rehypeReact, { Options as RehypeReactOptions } from \"rehype-react\";\nimport type { Components } from \"hast-util-to-jsx-runtime\";\nimport { rehypePrism } from \"./rehypePrism.js\";\nimport { rehypeMermaid } from \"./rehypeMermaid.js\";\n\nconst production = { Fragment, jsx, jsxs };\n\nexport interface MarkdownComponentProps {\n content?: string;\n components?: Partial<Components>;\n}\n\n// Reference https://github.com/remarkjs/react-remark/blob/39553e5f5c9e9b903bebf261788ff45130668de0/src/index.ts\nexport function MarkdownComponent({\n content,\n components,\n}: MarkdownComponentProps) {\n const [reactContent, setReactContent] = useState<JSX.Element | null>(null);\n\n useEffect(() => {\n let ignore = false;\n unified()\n .use(remarkParse)\n .use(remarkGfm)\n .use(remarkToRehype)\n .use([rehypePrism])\n .use(rehypeMermaid)\n .use(rehypeReact, {\n ...production,\n passNode: true,\n components,\n } as RehypeReactOptions)\n .process(content)\n .then((vFile) => {\n if (!ignore) {\n setReactContent(vFile.result);\n }\n })\n .catch((error) => {\n if (!ignore) {\n // eslint-disable-next-line no-console\n console.error(\"Convert markdown failed:\", error);\n setReactContent(null);\n }\n });\n return () => {\n ignore = true;\n };\n }, [components, content]);\n\n return reactContent;\n}\n","import React, { useCallback, useContext, useRef } from \"react\";\nimport {\n MarkdownComponent,\n type MarkdownComponentProps,\n} from \"@next-shared/markdown\";\nimport { CodeBlock } from \"../CodeBlock/CodeBlock\";\nimport { CanvasContext } from \"../CanvasContext\";\n\nconst components: MarkdownComponentProps[\"components\"] = {\n pre: CodeBlock,\n};\n\nexport function EnhancedMarkdown(props: MarkdownComponentProps) {\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 for (const el of e.nativeEvent.composedPath()) {\n if (el === ref.current) {\n break;\n }\n if (\n (el instanceof HTMLTableElement || el instanceof HTMLPreElement) &&\n el.scrollWidth > el.clientWidth\n ) {\n found = true;\n break;\n }\n }\n setHoverOnScrollableContent(found);\n },\n [setHoverOnScrollableContent]\n );\n\n const handleMouseLeave = useCallback(() => {\n setHoverOnScrollableContent(false);\n }, [setHoverOnScrollableContent]);\n\n return (\n <div onMouseMove={handleMouseMove} onMouseLeave={handleMouseLeave}>\n <MarkdownComponent {...props} components={components} />\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]!./ToolCallStatus.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]!./ToolCallStatus.module.css\";\n export default content && content.locals ? content.locals : undefined;\n","import type { DataPart, Message } from \"../interfaces\";\n\nexport const getToolDataProgress = (\n toolCallMessages: Message[] | undefined\n): DataPart | undefined => {\n let progressPart: DataPart | undefined;\n toolCallMessages?.findLast((message) => {\n progressPart = message.parts?.findLast((part) => {\n return part.type === \"data\" && part.data?.type === \"progress\";\n }) as DataPart | undefined;\n return !!progressPart;\n });\n return progressPart;\n};\n","import React, { useCallback, useContext, useMemo } from \"react\";\nimport classNames from \"classnames\";\nimport moment from \"moment\";\nimport styles from \"./ToolCallStatus.module.css\";\nimport type { Job } from \"../interfaces\";\nimport { WrappedIcon } from \"../bricks\";\nimport { CanvasContext } from \"../CanvasContext\";\nimport { ToolProgressLine } from \"../ToolProgressLine/ToolProgressLine\";\nimport { getToolDataProgress } from \"../utils/getToolDataProgress\";\n\nexport interface NodeJobToolCallProps {\n job: Job;\n variant?: \"default\" | \"read-only\";\n}\n\nexport function ToolCallStatus({\n job,\n variant,\n}: NodeJobToolCallProps): JSX.Element {\n const { setActiveToolCallJobId } = useContext(CanvasContext);\n const toolCall = job.toolCall!;\n const toolTitle = toolCall.annotations?.title;\n const [progress, hasToolCallResponse] = useMemo(() => {\n const toolCallMessages = job.messages?.filter((msg) => msg.role === \"tool\");\n return [\n getToolDataProgress(toolCallMessages),\n toolCallMessages?.some((msg) =>\n msg.parts.some((part) => part.type === \"text\")\n ),\n ];\n }, [job.messages]);\n\n const readOnly = useMemo(() => {\n return variant === \"read-only\";\n }, [variant]);\n\n const handleClick = useCallback(() => {\n if (variant === \"read-only\") {\n return;\n }\n setActiveToolCallJobId(job.id);\n }, [job.id, variant, setActiveToolCallJobId]);\n\n const toolState =\n [\"working\", \"input-required\"].includes(job.state) && hasToolCallResponse\n ? \"completed\"\n : job.state;\n\n const failed = job.isError || toolState === \"failed\";\n\n return (\n <div\n className={classNames(styles[\"tool-call\"], {\n [styles.failed]: failed,\n [styles[\"read-only\"]]: readOnly,\n })}\n onClick={handleClick}\n >\n <div\n className={classNames(styles.status)}\n title={\n job.startTime\n ? `${moment(job.startTime * 1000).format(\"YYYY-MM-DD HH:mm:ss\")}${\n job.endTime\n ? ` (${moment.duration(job.endTime * 1000 - job.startTime * 1000).humanize({ ss: -1 })})`\n : \"\"\n }`\n : undefined\n }\n >\n {job.isError || toolState === \"failed\" ? (\n <WrappedIcon\n className={styles.icon}\n lib=\"fa\"\n prefix=\"fas\"\n icon=\"xmark\"\n />\n ) : toolState === \"completed\" ? (\n <WrappedIcon\n className={styles.icon}\n lib=\"fa\"\n prefix=\"fas\"\n icon=\"check\"\n />\n ) : toolState === \"working\" ? (\n <WrappedIcon\n className={styles.icon}\n lib=\"antd\"\n theme=\"outlined\"\n icon=\"loading-3-quarters\"\n spinning\n />\n ) : toolState === \"input-required\" ? (\n <WrappedIcon\n className={styles.icon}\n lib=\"fa\"\n prefix=\"far\"\n icon=\"circle-user\"\n />\n ) : toolState === \"canceled\" ? (\n <WrappedIcon\n className={styles.icon}\n lib=\"fa\"\n prefix=\"far\"\n icon=\"circle-stop\"\n />\n ) : (\n <WrappedIcon\n className={styles.icon}\n lib=\"fa\"\n prefix=\"far\"\n icon=\"clock\"\n />\n )}\n <span className={styles.name}>\n {variant === \"read-only\" ? toolCall.name : toolTitle || toolCall.name}\n </span>\n </div>\n {!!progress && !readOnly && (\n <ToolProgressLine progress={progress} failed={failed} />\n )}\n </div>\n );\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, `.tool-call--aTh276av{--failed-color:#f24c25;--border-color:#e2e2ec;--status-border-color:rgba(226,226,236,0.8);font-size:13px;color:#595959;border-radius:10px;border:1px solid var(--border-color);background:#e6e9f3}.tool-call--aTh276av:not(.read-only--xWUswNds):hover{background:#e4e9fb;border:1px solid #b8c1ff}.tool-call--aTh276av:not(:last-child){margin-bottom:10px}.tool-call--aTh276av:not(.read-only--xWUswNds){cursor:pointer}.tool-call--aTh276av .status--V5ZXGYOG:not(:last-child){border-bottom:1px solid var(--status-border-color)}.read-only--xWUswNds{font-size:14px;padding:4px}.failed--sz70SlSa{background:#fef5f3}.failed--sz70SlSa:not(.read-only--xWUswNds):hover{background:#fee7e1;border:1px solid #ffc3b5}.failed--sz70SlSa .status--V5ZXGYOG:not(:last-child){border-bottom:1px solid rgba(253,225,218,0.8)}.status--V5ZXGYOG{height:24px;display:flex;align-items:center;padding:0 12px;color:#262626}.icon--LTp5Jjna{margin-right:8px;color:#8c8c8c}.failed--sz70SlSa .icon--LTp5Jjna{color:var(--failed-color)}.name--FwiqyIlQ{flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}`, \"\"]);\n// Exports\n___CSS_LOADER_EXPORT___.locals = {\n\t\"tool-call\": `tool-call--aTh276av`,\n\t\"read-only\": `read-only--xWUswNds`,\n\t\"status\": `status--V5ZXGYOG`,\n\t\"failed\": `failed--sz70SlSa`,\n\t\"icon\": `icon--LTp5Jjna`,\n\t\"name\": `name--FwiqyIlQ`\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, `.human-confirm--pILwNVPH{display:flex;justify-content:center;align-items:center;padding:24px 12px;background:rgba(62,67,102,0.05);box-shadow:0px 1px 0px 0px rgba(255,255,255,0.5);border-radius:9px}.human-confirm--pILwNVPH:not(:first-child){margin-top:6px}.human-confirm--pILwNVPH > * + *{margin-left:8px}`, \"\"]);\n// Exports\n___CSS_LOADER_EXPORT___.locals = {\n\t\"human-confirm\": `human-confirm--pILwNVPH`\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, `.expanded-view--JtP5PBpV{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1;background:rgba(247,248,250,0.5);-webkit-backdrop-filter:blur(74px);backdrop-filter:blur(74px);padding:106px var(--page-padding-right) 40px var(--page-padding-left);overflow-y:auto;display:flex;flex-direction:column;align-items:center}.nav--CRCPQp6z{position:absolute;top:39px;left:50%;transform:translate(-50%,0);list-style:none;margin:0 0 25px;padding:4px;display:flex;justify-content:start;align-items:center;background:rgba(2,0,102,0.05);box-shadow:inset 0px 1px 2px 0px #cdd1d7;border-radius:21px;-webkit-backdrop-filter:blur(15px);backdrop-filter:blur(15px)}.nav-button--kfcX0yV2{display:flex;align-items:center;height:34px;padding:0 26px;background:none;border:none;color:#595959;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;cursor:pointer}.nav-button--kfcX0yV2:not(:last-child){margin-right:12px}.nav-button--kfcX0yV2.active--GF6wwswT{background:rgba(255,255,255,0.6);border-radius:20px;-webkit-backdrop-filter:blur(15px);backdrop-filter:blur(15px);color:var(--elevo-color-brand);text-shadow:-0.02ex 0 0 currentColor,0.02ex 0 0 currentColor}.nav-button--kfcX0yV2:hover{color:var(--elevo-color-brand)}.body--Ftvod7Yd{width:100%;max-width:1556px}.body--Ftvod7Yd.small--XGTfwsoz{max-width:804px}.close--AYtt8Nkr{position:absolute;top:24px;right:24px}.loading--ax0zE9Yp{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);font-size:48px;color:#fff}`, \"\"]);\n// Exports\n___CSS_LOADER_EXPORT___.locals = {\n\t\"expanded-view\": `expanded-view--JtP5PBpV`,\n\t\"nav\": `nav--CRCPQp6z`,\n\t\"nav-button\": `nav-button--kfcX0yV2`,\n\t\"active\": `active--GF6wwswT`,\n\t\"body\": `body--Ftvod7Yd`,\n\t\"small\": `small--XGTfwsoz`,\n\t\"close\": `close--AYtt8Nkr`,\n\t\"loading\": `loading--ax0zE9Yp`\n};\nexport default ___CSS_LOADER_EXPORT___;\n","import { BrickConf } from \"@next-core/types\";\nimport type { ConvertViewOptions } from \"./interfaces\";\n\nexport function withBox(\n children: BrickConf[] | undefined,\n options: ConvertViewOptions\n): BrickConf {\n return {\n brick: \"div\",\n properties: {\n style: options.expanded\n ? {\n background: \"rgba(255, 255, 255, 0.9)\",\n backdropFilter: \"blur(10px)\",\n borderRadius: \"16px\",\n padding: \"24px\",\n }\n : {\n background: \"var(--elevo-component-background)\",\n backdropFilter: \"var(--elevo-component-backdrop-filter)\",\n borderRadius: \"var(--elevo-border-radius)\",\n padding: \"16px\",\n },\n },\n children,\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 {\n GraphNavItem,\n Job,\n JobState,\n Step,\n TaskState,\n} from \"../interfaces\";\nimport { WrappedIcon } from \"../bricks\";\nimport { DONE_STATES } from \"../constants\";\n\nexport interface NavProps {\n nav: GraphNavItem[] | undefined;\n plan: Step[] | undefined;\n jobs: Job[] | undefined;\n jobLevels: Map<string, number> | undefined;\n currentNavId: string | null;\n taskState: TaskState | 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({\n nav,\n plan,\n jobs,\n jobLevels,\n currentNavId,\n taskState,\n onClick,\n}: NavProps) {\n const mergedNav = useMemo<MergedNavItem[] | undefined>(() => {\n const unmatchedSteps = plan?.filter(\n (step) => !nav?.find((job) => job.id === step.id)\n );\n\n if (!unmatchedSteps?.length) {\n return nav;\n }\n\n // For the steps in plan that are not matched in nav,\n // We need to insert them into the nav at the correct position\n const insertsBefore = new Map<string | null, Step[]>();\n let cursor: string | null = null;\n\n for (let index = plan!.length - 1; index >= 0; index--) {\n const step = plan![index];\n if (unmatchedSteps.includes(step)) {\n let list = insertsBefore.get(cursor);\n if (!list) {\n insertsBefore.set(cursor, (list = []));\n }\n list.unshift(step);\n } else {\n cursor = step.id;\n }\n }\n\n const fixedNav = nav ?? [];\n const mergedNav: MergedNavItem[] = [...fixedNav];\n for (const [cursor, steps] of insertsBefore.entries()) {\n const cursorIndex =\n cursor === null\n ? mergedNav.length\n : mergedNav.findIndex((item) => item.id === cursor);\n\n // If the next step state is done, mark the inserted plan steps as skipped\n const nextStep = mergedNav[cursorIndex];\n const skipped = DONE_STATES.includes(nextStep?.state || \"unknown\");\n\n mergedNav.splice(\n cursorIndex,\n 0,\n ...steps.map<MergedNavItem>((step) => {\n const job = jobs?.find((job) => job.id === step.id);\n const level = jobLevels?.get(step.id);\n return {\n id: step.id,\n title: step.instruction,\n state: job?.state ?? (skipped ? \"skipped\" : undefined),\n level: level ?? 0,\n disabled: true,\n };\n })\n );\n }\n\n return mergedNav;\n }, [nav, plan, jobs, jobLevels]);\n\n const ref = useRef<HTMLUListElement>(null);\n useEffect(() => {\n const nav = ref.current;\n if (!nav || !currentNavId) {\n return;\n }\n nav.querySelector(`[data-job-id=\"${currentNavId}\"]`)?.scrollIntoView({\n behavior: \"smooth\",\n block: \"nearest\",\n });\n }, [currentNavId]);\n\n useEffect(() => {\n const nav = ref.current;\n if (!nav || currentNavId) {\n return;\n }\n\n const lastActiveItem = mergedNav?.findLast(\n (item) =>\n DONE_STATES.includes(item.state || \"unknown\") ||\n item.state === \"working\" ||\n item.state === \"input-required\"\n );\n if (lastActiveItem) {\n nav\n .querySelector(`[data-job-id=\"${lastActiveItem.id}\"]`)\n ?.scrollIntoView({\n behavior: \"smooth\",\n block: \"nearest\",\n });\n }\n }, [currentNavId, mergedNav]);\n\n return (\n <div className={styles.container}>\n <ul className={styles.nav} ref={ref}>\n {mergedNav?.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 | 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 | 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 === \"paused\" || taskState === \"canceled\") {\n return {\n icon: {\n lib: \"fa\",\n prefix: \"far\",\n icon: taskState === \"paused\" ? \"circle-pause\" : \"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 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","// 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, `.plan--ScYmFeqq{padding:8px;background:rgba(62,67,102,0.05);box-shadow:0px 1px 0px 0px rgba(255,255,255,0.5);border-radius:9px}.plan--ScYmFeqq:not(:first-child){margin-top:6px}.steps--l0R0pye1{list-style:none;margin:0;padding:0}.step--b20up4EN{background:#fff;border-radius:8px;padding-right:12px;display:flex}.step--b20up4EN + .step--b20up4EN{margin-top:4px}.step--b20up4EN.editing--qJ7xFdgL{background:var(--cruise-canvas-input-background);box-shadow:var(--cruise-canvas-input-box-shadow)}.content--oJ6ZEiGB{flex:1;min-width:0;padding:0 10px 0 5px;margin:10px 0}.step--b20up4EN:not(.editing--qJ7xFdgL) .content--oJ6ZEiGB{display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2;overflow:hidden;text-overflow:ellipsis}.content--oJ6ZEiGB:focus{outline:none}.dragging--jCn2bzij{cursor:grabbing}.toolbar--CiHZDBZ_{margin-top:12px;display:flex;justify-content:center}.handle--pKE0LK3p,\n.delete--hUaJfjMA{color:#8c8c8c;display:flex;align-items:center;justify-content:center}.handle--pKE0LK3p{cursor:grab;width:24px;border-radius:8px 0px 0px 8px;touch-action:none}.handle--pKE0LK3p:hover,\n.dragging--jCn2bzij .handle--pKE0LK3p{background:rgba(62,67,102,0.05)}.dragging--jCn2bzij,\n.dragging--jCn2bzij .handle--pKE0LK3p{cursor:grabbing}.dragging--jCn2bzij{position:relative;z-index:1}.delete--hUaJfjMA{cursor:pointer}.step--b20up4EN:not(:hover) .delete--hUaJfjMA{visibility:hidden}.delete--hUaJfjMA > *:hover{color:#595959}.actions--jUqHGA_J{display:flex;justify-content:space-between;align-items:center;margin-top:8px}.button-add--QJtgEBHC,\n.button-reset--dyu96f9R{background:none;border:none;padding:0;cursor:pointer}.button-icon--z01cXnf1{border-radius:9px;width:18px;height:18px;display:flex;align-items:center;justify-content:center;background:rgba(0,0,0,0.04);color:rgba(0,0,0,0.45);margin-right:8px}.button-reset--dyu96f9R{color:#8c8c8c}.button-reset--dyu96f9R:hover,\n.button-add--QJtgEBHC{color:#595959}.button-add--QJtgEBHC:hover .button-icon--z01cXnf1{background:rgba(0,0,0,0.08)}.button-add--QJtgEBHC{display:flex;align-items:center}`, \"\"]);\n// Exports\n___CSS_LOADER_EXPORT___.locals = {\n\t\"plan\": `plan--ScYmFeqq`,\n\t\"steps\": `steps--l0R0pye1`,\n\t\"step\": `step--b20up4EN`,\n\t\"editing\": `editing--qJ7xFdgL`,\n\t\"content\": `content--oJ6ZEiGB`,\n\t\"dragging\": `dragging--jCn2bzij`,\n\t\"toolbar\": `toolbar--CiHZDBZ_`,\n\t\"handle\": `handle--pKE0LK3p`,\n\t\"delete\": `delete--hUaJfjMA`,\n\t\"actions\": `actions--jUqHGA_J`,\n\t\"button-add\": `button-add--QJtgEBHC`,\n\t\"button-reset\": `button-reset--dyu96f9R`,\n\t\"button-icon\": `button-icon--z01cXnf1`\n};\nexport default ___CSS_LOADER_EXPORT___;\n","import React from \"react\";\nimport { wrapBrick } from \"@next-core/react-element\";\nimport { unwrapProvider } from \"@next-core/utils/general\";\nimport { asyncWrapBrick } from \"@next-core/react-runtime\";\nimport type {\n GeneralIcon,\n GeneralIconProps,\n} from \"@next-bricks/icons/general-icon\";\nimport type { Button, ButtonProps } from \"@next-bricks/basic/button\";\nimport type { Link, LinkProps } from \"@next-bricks/basic/link\";\nimport type { EoTooltip, ToolTipProps } from \"@next-bricks/basic/tooltip\";\nimport type {\n Drawer,\n DrawerProps,\n DrawerEvents,\n DrawerMapEvents,\n} from \"@next-bricks/containers/drawer\";\nimport type { showDialog as _showDialog } from \"@next-bricks/basic/data-providers/show-dialog/show-dialog\";\nimport type { copyToClipboard as _copyToClipboard } from \"@next-bricks/basic/data-providers/copy-to-clipboard\";\nimport { PopoverProps, Popover } from \"@next-bricks/basic/popover\";\nimport { EoNextTable, NextTableProps } from \"@next-bricks/advanced/next-table\";\nimport type { IconButton, IconButtonProps } from \"../icon-button\";\n\nexport const WrappedIcon = wrapBrick<GeneralIcon, GeneralIconProps>(\"eo-icon\");\n\nexport const WrappedButton = wrapBrick<Button, ButtonProps>(\"eo-button\");\n\nexport const WrappedLink = wrapBrick<Link, LinkProps>(\"eo-link\");\n\nexport const WrappedTooltip = wrapBrick<EoTooltip, ToolTipProps>(\"eo-tooltip\");\n\nexport const WrappedPopover = wrapBrick<Popover, PopoverProps>(\"eo-popover\");\n\nexport const WrappedDrawer = wrapBrick<\n Drawer,\n DrawerProps & { keyboard?: boolean },\n DrawerEvents,\n DrawerMapEvents\n>(\"eo-drawer\", {\n onClose: \"close\",\n onOpen: \"open\",\n});\n\nexport const WrappedIconButton = wrapBrick<IconButton, IconButtonProps>(\n \"ai-portal.icon-button\"\n);\n\nexport const showDialog =\n unwrapProvider<typeof _showDialog>(\"basic.show-dialog\");\n\nexport const copyToClipboard = unwrapProvider<typeof _copyToClipboard>(\n \"basic.copy-to-clipboard\"\n);\n\nexport const AsyncWrappedTable = React.lazy(async () => ({\n default: await asyncWrapBrick<EoNextTable, NextTableProps>(\"eo-next-table\"),\n}));\n","import { InstanceApi_getDetail } from \"@next-api-sdk/cmdb-sdk\";\nimport { getModelObjectInstanceId } from \"./getModelObjectInstanceId\";\n\nconst cache = new Map<string, Promise<MetricWithGroup[]>>();\n\nexport interface MetricWithGroup {\n group: string;\n metrics: string[];\n counter?: string;\n}\n\nexport async function getPreGeneratedMetricGroups(objectId: string) {\n if (cache.has(objectId)) {\n return cache.get(objectId)!;\n }\n\n const promise = doGetPreGeneratedMetricGroups(objectId);\n cache.set(objectId, promise);\n return promise;\n}\n\nasync function doGetPreGeneratedMetricGroups(objectId: string) {\n let metricGroups: MetricWithGroup[] = [];\n\n try {\n const instanceId = await getModelObjectInstanceId(objectId);\n if (instanceId) {\n const fields = [\"metricGroups\"].join(\",\");\n\n const { metricGroups: groups } = await InstanceApi_getDetail(\n \"MODEL_OBJECT\",\n instanceId,\n {\n fields,\n }\n );\n\n if (Array.isArray(groups) && groups.length) {\n metricGroups = groups;\n }\n }\n } catch (e) {\n // eslint-disable-next-line no-console\n console.error(\"Error fetching pre-generated metric groups:\", e);\n }\n\n return metricGroups;\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, `.container--YostHfxu{background:var(--elevo-component-background);-webkit-backdrop-filter:var(--elevo-component-backdrop-filter);backdrop-filter:var(--elevo-component-backdrop-filter);border-radius:var(--elevo-border-radius);padding:16px}.loading--FzSrGTPm{position:absolute;top:calc(50% - 7px);left:calc(50% - 7px)}`, \"\"]);\n// Exports\n___CSS_LOADER_EXPORT___.locals = {\n\t\"container\": `container--YostHfxu`,\n\t\"loading\": `loading--FzSrGTPm`\n};\nexport default ___CSS_LOADER_EXPORT___;\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","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 !== \"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","import type { BrickEventHandler, BrickEventsMap } from \"@next-core/types\";\nimport type { Component, EventHandler } from \"@next-shared/jsx-storyboard\";\nimport type { ConvertViewOptions } from \"../converters/interfaces\";\n\nexport function convertEvents(\n component: Component,\n options: ConvertViewOptions\n) {\n const events: BrickEventsMap = {};\n for (const [event, handler] of Object.entries(component.events ?? {})) {\n switch (component.name) {\n case \"table\":\n switch (event) {\n case \"select\": {\n const action = convertEventHandlers(handler, options);\n if (action) {\n events[\"row.select.v2\"] = action;\n }\n break;\n }\n case \"sort\": {\n const action = convertEventHandlers(handler, options);\n if (action) {\n events[\"sort.change\"] = action;\n }\n break;\n }\n case \"paginate\": {\n const action = convertEventHandlers(handler, options);\n if (action) {\n events[\"page.change\"] = action;\n }\n break;\n }\n }\n break;\n case \"button\":\n if (event === \"click\") {\n const action = convertEventHandlers(handler, options);\n if (action) {\n events.click = action;\n }\n }\n break;\n case \"form-item\":\n switch ((component.properties as { type: string }).type) {\n case \"search\":\n if (event === \"search\") {\n const action = convertEventHandlers(handler, options);\n if (action) {\n events.search = action;\n }\n }\n break;\n case \"select\":\n if (event === \"change\") {\n const action = convertEventHandlers(handler, options);\n if (action) {\n events[\"change.v2\"] = action;\n }\n }\n break;\n }\n break;\n default: {\n const action = convertEventHandlers(handler, options);\n if (action) {\n events[event] = action;\n }\n }\n }\n }\n return Object.keys(events).length > 0 ? events : undefined;\n}\n\nfunction convertEventHandlers(\n handler: EventHandler | EventHandler[],\n options: ConvertViewOptions\n): BrickEventHandler[] | undefined {\n const list = (Array.isArray(handler) ? handler : [handler])\n .map((hdl) => convertEventHandler(hdl, options))\n .filter(Boolean) as BrickEventHandler[];\n return list.length > 0 ? list : undefined;\n}\n\nfunction convertEventHandler(\n handler: EventHandler,\n options: ConvertViewOptions\n): BrickEventHandler | undefined {\n switch (handler?.action) {\n case \"update_variable\":\n return {\n action: \"context.replace\",\n args: [handler.payload.name, handler.payload.value],\n };\n case \"refresh_data_source\":\n return {\n action: \"context.refresh\",\n args: [handler.payload.name],\n };\n case \"call_api\": {\n const { api, params } = handler.payload;\n\n const success = handler.callback?.success\n ? convertEventHandlers(\n handler.callback.success as EventHandler | EventHandler[],\n options\n )\n : undefined;\n\n return {\n useProvider: `${api}:*`,\n params,\n callback: {\n success,\n error: {\n action: \"handleHttpError\",\n },\n },\n };\n }\n case \"call_component\":\n return {\n target: `[data-root-id=\"${options.rootId}\"] [data-component-id=\"${handler.payload.componentId}\"]`,\n method: handler.payload.method,\n args: handler.payload.args,\n };\n case \"show_message\":\n return {\n action: `message.${handler.payload.type}` as \"message.info\",\n args: [handler.payload.content],\n };\n }\n}\n","import { strictCollectMemberUsage } from \"@next-core/utils/storyboard\";\nimport type { DataSource, Variable } from \"@next-shared/jsx-storyboard\";\n\n/**\n * Find the object ID associated with the used data contexts.\n *\n * This function traverses the used contexts along their dependency chain.\n */\nexport function findObjectIdByUsedDataContexts(\n usedContexts: Set<string> | undefined,\n dataSources: DataSource[] | undefined,\n variables: Variable[] | undefined\n) {\n let objectId: string | undefined;\n if (usedContexts?.size && dataSources?.length) {\n const dataSourceToObjectIdMap = new Map<string, string>();\n for (const dataSource of dataSources) {\n if (dataSource.objectId) {\n dataSourceToObjectIdMap.set(dataSource.name, dataSource.objectId);\n }\n }\n\n const variableDepsMap = new Map<string, Set<string>>();\n for (const variable of variables ?? []) {\n const deps = strictCollectMemberUsage(variable.value, \"CTX\");\n variableDepsMap.set(variable.name, deps);\n }\n\n const processedContexts = new Set<string>();\n\n const find = (context: string) => {\n if (processedContexts.has(context)) {\n return false;\n }\n processedContexts.add(context);\n\n const dataSourceObjectId = dataSourceToObjectIdMap.get(context);\n if (dataSourceObjectId) {\n objectId = dataSourceObjectId;\n return true;\n }\n\n const variableDeps = variableDepsMap.get(context);\n for (const dep of variableDeps ?? []) {\n if (find(dep)) {\n return true;\n }\n }\n\n return false;\n };\n\n for (const context of usedContexts) {\n if (find(context)) {\n break;\n }\n }\n }\n\n return objectId;\n}\n","import type { BrickConf } from \"@next-core/types\";\nimport type { Component, ConstructResult } from \"@next-shared/jsx-storyboard\";\nimport type { ConvertViewOptions } from \"../converters/interfaces.js\";\nimport { lowLevelConvertToStoryboard } from \"../converters/raw-data-generate/convert.js\";\nimport { parseDataSource } from \"../converters/expressions.js\";\nimport { getPreGeneratedAttrViews } from \"../converters/getPreGeneratedAttrViews.js\";\nimport { findObjectIdByUsedDataContexts } from \"./findObjectIdByUsedDataContexts.js\";\n\ninterface TableColumn {\n key: string;\n dataIndex: string;\n title: string;\n sortable?: boolean;\n}\n\nexport default async function convertTable(\n component: Component,\n view: ConstructResult,\n options: ConvertViewOptions\n): Promise<BrickConf> {\n const { properties } = component;\n const { dataSource, size, columns, rowKey, pagination, ...restProps } =\n properties as {\n dataSource: string;\n columns: Array<TableColumn>;\n rowKey?: string;\n size?: \"small\" | \"medium\" | \"large\";\n pagination?: boolean;\n };\n\n const parsedDataSource = parseDataSource(dataSource);\n\n const objectId = findObjectIdByUsedDataContexts(\n parsedDataSource.usedContexts,\n view.dataSources,\n view.variables\n );\n\n const attrViews = objectId\n ? await getPreGeneratedAttrViews(objectId)\n : undefined;\n\n const configuredColumns = new Map<string, any>();\n\n if (attrViews?.size) {\n for (const column of columns) {\n const candidate = attrViews.get(column.dataIndex);\n if (candidate) {\n const brick = lowLevelConvertToStoryboard(candidate, \".cellData\");\n if (brick) {\n brick.slot = `[${column.dataIndex}]`;\n configuredColumns.set(column.dataIndex, brick);\n }\n }\n }\n }\n\n return {\n brick: \"eo-next-table\",\n properties: {\n dataSource: parsedDataSource.isString\n ? parsedDataSource.embedded\n : dataSource,\n ...restProps,\n rowKey: rowKey ?? columns[0]?.key,\n columns: columns.map((column) => {\n const brick = configuredColumns.get(column.dataIndex);\n return brick\n ? {\n ...column,\n useChildren: `[${column.dataIndex}]`,\n }\n : column;\n }),\n themeVariant: \"elevo\",\n scrollConfig: {\n x: \"max-content\",\n },\n ...(options.expanded\n ? {\n bordered: true,\n pagination,\n size: \"large\",\n }\n : {\n size: \"middle\",\n pagination: false,\n }),\n },\n children:\n configuredColumns.size > 0 ? Array.from(configuredColumns.values()) : [],\n };\n}\n","import type { BrickConf } from \"@next-core/types\";\nimport type { Component, ConstructResult } from \"@next-shared/jsx-storyboard\";\nimport type { ConvertViewOptions } from \"../converters/interfaces.js\";\nimport { convertToStoryboard } from \"../converters/raw-data-generate/convert.js\";\nimport { getPreGeneratedAttrViews } from \"../converters/getPreGeneratedAttrViews.js\";\nimport { parseDataSource } from \"../converters/expressions.js\";\nimport { findObjectIdByUsedDataContexts } from \"./findObjectIdByUsedDataContexts.js\";\n\ninterface DescriptionItem {\n label: string;\n text?: string;\n field?: string;\n}\n\nexport default async function convertDescriptions(\n { properties }: Component,\n view: ConstructResult,\n options: ConvertViewOptions\n): Promise<BrickConf> {\n const { dataSource, title, columns, list, ...restProps } = properties as {\n dataSource: string;\n title?: string;\n columns?: number;\n list: DescriptionItem[];\n };\n\n const parsedDataSource = parseDataSource(dataSource);\n\n const objectId = findObjectIdByUsedDataContexts(\n parsedDataSource.usedContexts,\n view.dataSources,\n view.variables\n );\n\n const attrViews = objectId\n ? await getPreGeneratedAttrViews(objectId)\n : undefined;\n\n const configuredItems = new Map<string, any>();\n\n if (attrViews?.size) {\n for (const item of list) {\n if (item.field) {\n const candidate = attrViews.get(item.field);\n if (candidate) {\n const brick = convertToStoryboard(candidate, item.field);\n if (brick) {\n brick.slot = `[${item.field}]`;\n configuredItems.set(item.field, brick);\n }\n }\n }\n }\n }\n\n return {\n brick: \"eo-descriptions\",\n properties: {\n ...restProps,\n dataSource: parsedDataSource.isString\n ? parsedDataSource.embedded\n : dataSource,\n // descriptionTitle: title,\n list: list.map((item) => {\n const brick = item.field ? configuredItems.get(item.field) : undefined;\n return brick\n ? {\n label: item.label,\n useChildren: `[${item.field}]`,\n }\n : item;\n }),\n column: options.expanded ? 3 : 1,\n // showCard: !options.expanded,\n themeVariant: \"elevo\",\n },\n children:\n configuredItems.size > 0 ? Array.from(configuredItems.values()) : [],\n };\n}\n","import type { BrickConf } from \"@next-core/types\";\nimport type { Component, ConstructResult } from \"@next-shared/jsx-storyboard\";\nimport { parseDataSource } from \"../converters/expressions.js\";\nimport { findObjectIdByUsedDataContexts } from \"./findObjectIdByUsedDataContexts.js\";\nimport { getPreGeneratedMetricGroups } from \"../converters/getPreGeneratedMetricGroups.js\";\nimport type { ConvertViewOptions } from \"../converters/interfaces.js\";\n\nconst COLORS = [\n \"#336EF4\",\n \"#45CAFF\",\n \"#41CDCF\",\n \"#8146F3\",\n \"#F8A075\",\n \"#94E65E\",\n \"#57689C\",\n \"#C285EF\",\n \"#FAC60B\",\n \"#E4551F\",\n \"#8984FF\",\n \"#2540FF\",\n \"#08BF33\",\n \"#F7811C\",\n \"#AC7CFF\",\n \"#1BA5DC\",\n \"#E89716\",\n \"#76A6F5\",\n \"#4F69FF\",\n];\n\ninterface Widget {\n title: string;\n type: \"line\" | \"area\";\n metric: {\n id: string;\n unit: string;\n };\n size?: \"small\" | \"medium\" | \"large\";\n precision?: number;\n min?: number;\n max?: number;\n color?: string;\n}\n\ninterface MergedWidget extends Widget {\n relevantMetrics?: string[];\n counterMetric?: string;\n groupTitle?: string;\n}\n\nexport default async function convertDashboard(\n { properties }: Component,\n view: ConstructResult,\n options: ConvertViewOptions\n): Promise<BrickConf> {\n const {\n dataSource,\n groupField: _groupField,\n widgets,\n } = properties as {\n dataSource: string;\n groupField?: string;\n widgets: Array<Widget>;\n };\n\n const groupField = _groupField ? \"#showKey\" : undefined;\n\n const { isString, expression, usedContexts } = parseDataSource(dataSource);\n\n const chartData = isString\n ? `<%= CTX.__builtin_fn_extractList((${expression})) %>`\n : dataSource;\n\n if (options.expanded) {\n let mergedWidgets = widgets as MergedWidget[];\n const objectId = findObjectIdByUsedDataContexts(\n usedContexts,\n view.dataSources,\n view.variables\n );\n const metricGroups = objectId\n ? await getPreGeneratedMetricGroups(objectId)\n : [];\n\n if (metricGroups.length > 0) {\n mergedWidgets = [];\n const mergedMetrics = new Set<string>();\n const metricIds = new Set(widgets.map((w) => w.metric.id));\n for (const widget of widgets) {\n if (mergedMetrics.has(widget.metric.id)) {\n continue; // Skip already merged metrics\n }\n const mergedWidget = { ...widget } as MergedWidget;\n mergedWidgets.push(mergedWidget);\n const group = metricGroups.find((g) =>\n g.metrics.includes(widget.metric.id)\n );\n if (group) {\n const relevantMetrics = group.metrics.filter((m) => metricIds.has(m));\n if (relevantMetrics.length > 1) {\n mergedWidget.relevantMetrics = relevantMetrics;\n mergedWidget.counterMetric = group.counter;\n mergedWidget.groupTitle = group.group;\n for (const metricId of relevantMetrics) {\n mergedMetrics.add(metricId);\n metricIds.delete(metricId);\n }\n }\n }\n }\n }\n\n let colorCursor = 0;\n\n return {\n brick: \"div\",\n properties: {\n style: {\n display: \"grid\",\n gridTemplateColumns: \"repeat(auto-fit, minmax(500px, 1fr))\",\n gap: \"16px\",\n },\n },\n children: mergedWidgets.map((widget) => {\n const { title, /* type, */ metric, size, precision, min, max } = widget;\n const colorCount =\n widget.relevantMetrics?.length ?? (groupField ? 2 : 1);\n const colors = Array.from(\n { length: colorCount },\n (_, i) => COLORS[(colorCursor + i) % COLORS.length]\n );\n colorCursor += colorCount;\n const unit = metric.unit === \"load\" ? \"\" : metric.unit;\n const chart = {\n brick: \"chart-v2.time-series-chart\",\n properties: {\n data: chartData,\n xField: \"time\",\n ...(widget.relevantMetrics\n ? {\n // yFields: widget.relevantMetrics,\n yFields: `<% CTX.__builtin_fn_getMetricDisplayNames((${expression}).displayNameList, ${JSON.stringify(\n widget.relevantMetrics\n )}) %>`,\n }\n : {\n // yField: metric.id,\n yField: `<% CTX.__builtin_fn_getMetricDisplayNames((${expression}).displayNameList, [${JSON.stringify(\n metric.id\n )}])[0] %>`,\n }),\n ...(widget.counterMetric\n ? {\n forceAbsoluteNumbers: true,\n series: {\n [widget.counterMetric]: {\n isNegative: true,\n },\n },\n }\n : null),\n height: size === \"large\" ? 230 : 200,\n timeFormat: \"HH:mm\",\n ...(widget.relevantMetrics || groupField\n ? null\n : {\n areaOptions: {\n style: {\n fill: `l(90) 0:${colors[0]} 1:#ffffff`,\n },\n },\n }),\n axis: {\n yAxis: {\n unit,\n precision,\n ...(widget.counterMetric\n ? null\n : unit === \"percent(1)\"\n ? { min: 0, max: 1 }\n : unit === \"percent(100)\" || unit === \"%\"\n ? { min: 0, max: 100 }\n : { min, max }),\n shape: \"smooth\",\n },\n },\n groupField,\n areaShape: \"smooth\",\n legends: !!(widget.relevantMetrics || groupField),\n colors: colors,\n tooltip: {\n marker: {\n fill: colors[0],\n stroke: \"#fff\",\n lineWidth: 2,\n shadowColor: colors[0],\n shadowBlur: 8,\n shadowOffsetX: 0,\n shadowOffsetY: 4,\n },\n domStyles: {\n \"g2-tooltip\": {\n background: [\n `radial-gradient( farthest-corner at -20px 150px, ${colors[0]} 0%, rgba(238,238,238,0) 60%)`,\n \"linear-gradient( 180deg, rgba(255,255,255,0.5) 0%, rgba(255,255,255,0.8) 100%)\",\n ].join(\", \"),\n boxShadow: `0px 4px 8px 0px ${convertHexColorToRGBA(colors[0], 0.08)}`,\n borderRadius: \"8px\",\n border: \"1px solid rgba(255,255,255,1)\",\n backdropFilter: \"blur(3px)\",\n },\n },\n },\n },\n };\n return {\n brick: \"div\",\n properties: {\n style: {\n background: \"rgba(255,255,255,0.8)\",\n boxShadow: \"0px 2px 4px 0px rgba(0,0,0,0.06)\",\n borderRadius: \"8px\",\n padding: \"16px 20px 20px\",\n },\n },\n children: [\n {\n brick: \"div\",\n properties: {\n style: {\n fontSize: \"16px\",\n fontWeight: \"500\",\n marginBottom: \"20px\",\n },\n textContent: widget.groupTitle || title || metric.id,\n },\n },\n chart,\n ],\n };\n }),\n };\n }\n\n if (groupField) {\n return {\n brick: \"div\",\n properties: {\n style: {\n display: \"flex\",\n flexDirection: \"column\",\n gap: \"8px\",\n },\n },\n children: [\n {\n brick: \":forEach\",\n dataSource: `<%= CTX.__builtin_fn_groupMetricData(CTX.__builtin_fn_extractList((${expression})), ${JSON.stringify(groupField)}) %>`,\n children: [\n {\n brick: \"div\",\n properties: {\n textContent: \"<% `${ITEM.group}:` %>\",\n style: {\n fontWeight: \"500\",\n },\n },\n },\n {\n brick: \"div\",\n properties: {\n style: {\n display: \"grid\",\n gridTemplateColumns: \"repeat(auto-fill, minmax(205px, 1fr))\",\n gap: \"10px\",\n marginBottom: \"8px\",\n },\n },\n children: widgets.map((widget, i) => {\n const { title, /* type, */ metric, precision } = widget;\n return {\n brick: \"ai-portal.stat-with-mini-chart\",\n properties: {\n size: \"small\",\n label: title || metric.id,\n data: \"<% ITEM.list %>\",\n xField: \"time\",\n yField: metric.id,\n lineColor: COLORS[i % COLORS.length],\n showArea: true,\n ...(metric.unit === \"percent(1)\"\n ? { min: 0, max: 1 }\n : metric.unit === \"percent(100)\" || metric.unit === \"%\"\n ? { min: 0, max: 100 }\n : null),\n value: `<%= CTX.__builtin_fn_getLatestMetricValue(ITEM.list, ${JSON.stringify(\n {\n metric,\n precision,\n }\n )}) %>`,\n },\n };\n }),\n },\n ],\n },\n ],\n };\n }\n\n return {\n brick: \"div\",\n properties: {\n style: {\n display: \"grid\",\n gridTemplateColumns: \"repeat(auto-fill, minmax(205px, 1fr))\",\n gap: \"10px\",\n },\n },\n children: widgets.map((widget, i) => {\n const { title, /* type, */ metric, precision } = widget;\n return {\n brick: \"ai-portal.stat-with-mini-chart\",\n properties: {\n size: \"small\",\n label: title || metric.id,\n data: chartData,\n xField: \"time\",\n yField: metric.id,\n lineColor: COLORS[i % COLORS.length],\n showArea: true,\n ...(metric.unit === \"percent(1)\"\n ? { min: 0, max: 1 }\n : metric.unit === \"percent(100)\" || metric.unit === \"%\"\n ? { min: 0, max: 100 }\n : null),\n value: `<%= CTX.__builtin_fn_getLatestMetricValue((${\n isString\n ? `CTX.__builtin_fn_extractList((${expression}))`\n : JSON.stringify(dataSource ?? null)\n }), ${JSON.stringify({\n metric,\n precision,\n })}) %>`,\n },\n };\n }),\n };\n}\n\nfunction convertHexColorToRGBA(color: string, alpha: number): string {\n const hex = color.slice(1);\n const bigint = parseInt(hex, 16);\n const r = (bigint >> 16) & 255;\n const g = (bigint >> 8) & 255;\n const b = bigint & 255;\n return `rgba(${r}, ${g}, ${b}, ${alpha})`;\n}\n","import type { BrickConf, ContextConf } from \"@next-core/types\";\nimport type { Component, ConstructResult } from \"@next-shared/jsx-storyboard\";\nimport { pipes } from \"@easyops-cn/brick-next-pipes\";\nimport convertList from \"./convertList\";\nimport type { ConvertViewOptions } from \"../converters/interfaces\";\nimport { convertEvents } from \"./convertEvents\";\nimport { withBox } from \"../converters/withBox\";\nimport { convertDataSources } from \"./convertDataSources\";\nimport { convertVariables } from \"./convertVariables\";\nimport convertTable from \"./convertTable\";\nimport convertDescriptions from \"./convertDescriptions\";\nimport convertDashboard from \"./convertDashboard\";\nimport convertButton from \"./convertButton\";\nimport convertForm from \"./convertForm\";\nimport convertFormItem from \"./convertFormItem\";\nimport convertModal from \"./convertModal\";\nimport convertToolbar from \"./convertToolbar\";\n\nexport async function convertJsx(\n result: ConstructResult,\n options: ConvertViewOptions\n) {\n const convert = async (component: Component) => {\n let brick: BrickConf | null = null;\n switch (component.name) {\n case \"eo-list\":\n brick = await convertList(component);\n break;\n case \"eo-table\":\n brick = await convertTable(component, result, options);\n break;\n case \"eo-descriptions\":\n brick = await convertDescriptions(component, result, options);\n break;\n case \"eo-dashboard\":\n brick = await convertDashboard(component, result, options);\n break;\n case \"eo-button\":\n brick = await convertButton(component);\n break;\n case \"eo-form\":\n brick = await convertForm(component);\n break;\n case \"eo-toolbar\":\n brick = await convertToolbar(component);\n break;\n case \"eo-modal\":\n brick = await convertModal(component);\n break;\n case \"eo-search\":\n case \"eo-input\":\n case \"eo-number-input\":\n case \"eo-textarea\":\n case \"eo-select\":\n case \"eo-radio\":\n case \"eo-checkbox\":\n case \"eo-switch\":\n case \"eo-date-picker\":\n case \"eo-time-picker\":\n brick = await convertFormItem(component, component.name);\n break;\n }\n\n if (!brick) {\n return null;\n }\n\n // Set [data-component-id] for the brick\n if (component.componentId) {\n brick.properties ??= {};\n brick.properties.dataset ??= {};\n (brick.properties.dataset as Record<string, string>).componentId =\n component.componentId;\n }\n\n brick.events = convertEvents(component, options);\n\n if (component.children?.length) {\n brick.children = (\n await Promise.all(component.children.map(convert))\n ).filter(Boolean) as BrickConf[];\n }\n\n return brick;\n };\n\n const context: ContextConf[] = [\n ...convertDataSources(result.dataSources ?? []),\n ...convertVariables(result.variables ?? []),\n {\n name: \"__builtin_fn_mergeTexts\",\n value: mergeTexts,\n },\n {\n name: \"__builtin_fn_getLatestMetricValue\",\n value: getLatestMetricValue,\n },\n {\n name: \"__builtin_fn_extractList\",\n value: extractList,\n },\n {\n name: \"__builtin_fn_groupMetricData\",\n value: groupMetricData,\n },\n {\n name: \"__builtin_fn_getMetricDisplayNames\",\n value: getMetricDisplayNames,\n },\n ];\n\n const children = (await Promise.all(result.components.map(convert))).filter(\n Boolean\n ) as BrickConf[];\n\n const needBox = result.components.every((component) =>\n [\"form\", \"descriptions\", \"button\"].includes(component.name)\n );\n\n return {\n brick: \"eo-content-layout\",\n children: needBox ? [withBox(children, options)] : children,\n context,\n };\n}\n\nfunction mergeTexts(\n items: (\n | { type: \"text\"; text: string }\n | { type: \"expression\"; value: unknown }\n )[]\n): string {\n const texts: string[] = [];\n for (const item of items) {\n if (item.type === \"text\") {\n texts.push(item.text.trim());\n } else {\n texts.push(mergeValuesAsText(item.value));\n }\n }\n return texts.join(\"\");\n}\n\nfunction mergeValuesAsText(value: unknown): string {\n if (Array.isArray(value)) {\n return value.map(mergeValuesAsText).join(\"\");\n }\n const type = typeof value;\n if (type === \"string\" || type === \"number\") {\n return String(value);\n }\n if (type === \"object\" && value !== null) {\n throw new Error(\"Can not render object as text\");\n }\n return \"\";\n}\n\nfunction getLatestMetricValue(\n list: Record<string, any>[] | undefined,\n {\n metric,\n precision,\n }: { metric: { id: string; unit: string }; precision?: number }\n) {\n const value = list?.findLast?.((item) => item[metric.id] != null)?.[\n metric.id\n ];\n const unit = metric.unit === \"load\" ? \"\" : metric.unit;\n return pipes.unitFormat(value, unit, precision).join(\"\");\n}\n\nfunction extractList<T = unknown>(data: T[] | { list: T[] }): T[] {\n if (Array.isArray(data)) {\n return data;\n }\n return data?.list;\n}\n\nfunction groupMetricData(list: Record<string, any>[], groupField: string) {\n if (!list || !Array.isArray(list) || list.length === 0) {\n return [];\n }\n const grouped = new Map<\n string,\n { group: string; list: Record<string, any>[] }\n >();\n for (const item of list) {\n const key = item[groupField];\n let groupedList = grouped.get(key);\n if (!groupedList) {\n grouped.set(key, (groupedList = { group: key, list: [] }));\n }\n groupedList.list.push(item);\n }\n return Array.from(grouped.values());\n}\n\nfunction getMetricDisplayNames(\n displayNameList:\n | { metric_name: string; metric_display_name: string }[]\n | undefined,\n metricNames: string[]\n): string[] {\n return metricNames.map(\n (metricName) =>\n displayNameList?.find((item) => item.metric_name === metricName)\n ?.metric_display_name ?? metricName\n );\n}\n","import type { BrickConf } from \"@next-core/types\";\nimport type { Component } from \"@next-shared/jsx-storyboard\";\nimport { parseDataSource } from \"../converters/expressions\";\n\nexport default function convertList({ properties }: Component): BrickConf {\n const props = properties as {\n dataSource: string | object;\n fields: unknown;\n variant?: string;\n };\n\n const { dataSource, fields, variant } = props;\n\n const parsedDataSource = parseDataSource(dataSource);\n\n return {\n brick: \"eo-list\",\n properties: {\n variant,\n dataSource: parsedDataSource.isString\n ? parsedDataSource.embedded\n : dataSource,\n fields,\n themeVariant: \"elevo\",\n },\n };\n}\n","import type { BrickConf } from \"@next-core/types\";\nimport type { Component } from \"@next-shared/jsx-storyboard\";\n\nexport default function convertButton(component: Component): BrickConf {\n const { properties } = component;\n const props = properties as {\n textContent: string;\n icon?: unknown;\n type?: string;\n };\n return {\n brick: \"eo-button\",\n properties: {\n ...props,\n themeVariant: \"elevo\",\n },\n };\n}\n","import type { BrickConf } from \"@next-core/types\";\nimport type { Component } from \"@next-shared/jsx-storyboard\";\n\nexport default function convertForm(component: Component): BrickConf {\n const { properties } = component;\n const { values } = (properties ?? {}) as {\n values?: unknown;\n };\n\n return {\n brick: \"eo-form\",\n properties: {\n values: values ?? {},\n themeVariant: \"elevo\",\n },\n };\n}\n","import type { BrickConf } from \"@next-core/types\";\nimport type { Component } from \"@next-shared/jsx-storyboard\";\n\nexport default function convertToolbar(_component: Component): BrickConf {\n return {\n brick: \"eo-flex-layout\",\n properties: {\n gap: \"0.5em\",\n },\n };\n}\n","import type { BrickConf } from \"@next-core/types\";\nimport type { Component } from \"@next-shared/jsx-storyboard\";\n\nexport default function convertModal(component: Component): BrickConf {\n const { properties } = component;\n const { title, confirmText, cancelText } = properties as {\n title?: string;\n confirmText?: string;\n cancelText?: string;\n };\n return {\n brick: \"eo-modal\",\n portal: true,\n properties: {\n themeVariant: \"elevo\",\n modalTitle: title,\n confirmText: confirmText,\n cancelText: cancelText,\n keyboard: true,\n },\n };\n}\n","import type { BrickConf } from \"@next-core/types\";\nimport type { Component } from \"@next-shared/jsx-storyboard\";\n\ninterface FormItemBase {\n name: string;\n label?: string;\n required?: boolean;\n}\n\ninterface Option {\n label: string;\n value: string;\n}\n\ninterface FormItemSearch {\n type: \"eo-search\";\n placeholder?: string;\n}\n\ninterface FormItemInput extends FormItemBase {\n type: \"eo-input\";\n placeholder?: string;\n}\n\ninterface FormItemNumberInput extends FormItemBase {\n type: \"eo-number-input\";\n min?: number;\n max?: number;\n placeholder?: string;\n}\n\ninterface FormItemTextarea extends FormItemBase {\n type: \"eo-textarea\";\n placeholder?: string;\n}\n\ninterface FormItemSelect extends FormItemBase {\n type: \"eo-select\";\n options: Option[];\n placeholder?: string;\n}\n\ninterface FormItemRadio extends FormItemBase {\n type: \"eo-radio\";\n options: Option[];\n}\n\ninterface FormItemCheckbox extends FormItemBase {\n type: \"eo-checkbox\";\n options: Option[];\n}\n\ninterface FormItemSwitch extends FormItemBase {\n type: \"eo-switch\";\n}\n\ninterface FormItemDatePicker extends FormItemBase {\n type: \"eo-date-picker\";\n}\n\ninterface FormItemTimePicker extends FormItemBase {\n type: \"eo-time-picker\";\n}\n\ntype FormItem =\n | FormItemSearch\n | FormItemInput\n | FormItemNumberInput\n | FormItemTextarea\n | FormItemSelect\n | FormItemRadio\n | FormItemCheckbox\n | FormItemSwitch\n | FormItemDatePicker\n | FormItemTimePicker;\n\nexport default function convertFormItem(\n component: Component,\n type: FormItem[\"type\"]\n): BrickConf {\n const { properties } = component;\n\n let brick = type;\n let props: Record<string, unknown> = {\n ...properties,\n themeVariant: \"elevo\",\n };\n\n switch (brick) {\n case \"eo-search\":\n props = {\n ...props,\n trim: true,\n };\n break;\n case \"eo-number-input\":\n brick = \"eo-input\";\n props = {\n type: \"number\",\n ...props,\n };\n break;\n }\n\n return {\n brick,\n properties: props,\n };\n}\n","import type { ContextConf } from \"@next-core/types\";\nimport { isObject } from \"@next-core/utils/general\";\nimport type { DataSource } from \"@next-shared/jsx-storyboard\";\n\nexport function convertDataSources(dataSources: DataSource[]): ContextConf[] {\n return dataSources.map((dataSource) => ({\n name: dataSource.name,\n resolve: {\n useProvider: `${dataSource.api}:*`,\n params: dataSource.params as Record<string, unknown> | undefined,\n ...(dataSource.api === \"easyops.api.data_exchange.olap@Query\" &&\n isObject(dataSource.params)\n ? {\n params: {\n ...dataSource.params,\n translate: [\"#showKey\"],\n limit: undefined,\n limitBy: undefined,\n order: undefined,\n displayName: true,\n },\n }\n : dataSource.transform\n ? { transform: { value: dataSource.transform } }\n : null),\n },\n track: true,\n }));\n}\n","import type { ContextConf } from \"@next-core/types\";\nimport type { Variable } from \"@next-shared/jsx-storyboard\";\n\nexport function convertVariables(variables: Variable[]): ContextConf[] {\n return variables.map(({ name, value }) => ({\n name,\n value,\n }));\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\";\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)}.ask-user--lf925zGf{background:rgba(255,255,255,0.4);box-shadow:0px 4px 10px 0px rgba(54,64,80,0.18);border-color:rgba(255,255,255,0.5);-webkit-backdrop-filter:blur(28px);backdrop-filter:blur(28px)}.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:none;align-items:center;border-bottom:1px solid #e2e2ec;padding:0 5px 5px;font-size:13px;color:#8c8c8c}.icon--Rb_vveHN{margin-right:6px;font-size:14px}.tool--RR3S1Z1V{flex:1;min-width:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;--shine-text-color:#8c8c8c;--shine-text-highlight-color:#dcdcdc}.time--eHXSEjt6{margin-left:6px}.body--V34MsV9R{padding:9px 4px 4px}.scrollable--LudR_5Pj{max-height:462px;overflow-y:auto}.message--iVQBlD6k:not(:first-child){margin-top:6px}.ask-user--lf925zGf .heading--GZqrhPqL{border-bottom:none}.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}.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}`, \"\"]);\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\"ask-user\": `ask-user--lf925zGf`,\n\t\"error\": `error--IwtdD0T6`,\n\t\"heading\": `heading--GZqrhPqL`,\n\t\"icon\": `icon--Rb_vveHN`,\n\t\"tool\": `tool--RR3S1Z1V`,\n\t\"time\": `time--eHXSEjt6`,\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};\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, `.heading--A42VHBlP{display:flex;justify-content:space-between;align-items:center;margin-bottom:10px}.title--xJaVhVYK{font-size:12px;text-indent:4px;min-width:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;--shine-text-color:rgba(38,38,38,0.65);--shine-text-highlight-color:#dcdcdc}.expand--ksu6jxIu{display:flex;background:none;border:none;padding:3px;cursor:pointer;color:#595959}.expand--ksu6jxIu:hover{color:var(--elevo-color-brand)}`, \"\"]);\n// Exports\n___CSS_LOADER_EXPORT___.locals = {\n\t\"heading\": `heading--A42VHBlP`,\n\t\"title\": `title--xJaVhVYK`,\n\t\"expand\": `expand--ksu6jxIu`\n};\nexport default ___CSS_LOADER_EXPORT___;\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","\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]!./Topology.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]!./Topology.module.css\";\n export default content && content.locals ? content.locals : undefined;\n","import React from \"react\";\nimport { asyncWrapBrick } from \"@next-core/react-runtime\";\nimport {\n EoDisplayCanvas,\n EoDisplayCanvasProps,\n} from \"@next-bricks/diagram/display-canvas\";\n\nexport const AsyncWrappedDisplayCanvas = React.lazy(async () => ({\n default: await asyncWrapBrick<EoDisplayCanvas, EoDisplayCanvasProps>(\n \"eo-display-canvas\"\n ),\n}));\n","import React, { useCallback, useMemo, useRef } from \"react\";\nimport type {\n EoDisplayCanvasProps,\n EoDisplayCanvas,\n} from \"@next-bricks/diagram/display-canvas\";\nimport type { GeneralIconProps } from \"@next-bricks/icons/general-icon\";\nimport classNames from \"classnames\";\nimport sharedStyles from \"../shared.module.css\";\nimport toolbarStyles from \"../toolbar.module.css\";\nimport styles from \"./Topology.module.css\";\nimport nodeStyleText from \"./node.shadow.css\";\nimport { AsyncWrappedDisplayCanvas } from \"../diagram\";\nimport { WrappedIcon, WrappedIconButton } from \"../bricks\";\nimport type { ComponentGraph, RawComponentGraphNode } from \"../interfaces\";\n\nconst DEFAULT_NODE_SIZE: EoDisplayCanvasProps[\"defaultNodeSize\"] = [34, 34];\nconst CANVAS_PADDING: Required<EoDisplayCanvasProps>[\"layoutOptions\"][\"padding\"] =\n [12, 54, 34];\nconst extraStyleTexts = [nodeStyleText];\nconst ICON_EXPAND: GeneralIconProps = {\n lib: \"fa\",\n prefix: \"fas\",\n icon: \"expand\",\n};\n\nexport interface TopologyProps {\n componentGraph: ComponentGraph;\n filter?: \"all\" | \"related\" | \"minimal\";\n autoSize?: boolean;\n}\n\nexport function Topology({\n componentGraph,\n filter,\n autoSize: _autoSize,\n}: TopologyProps): JSX.Element {\n const cells = useMemo<EoDisplayCanvasProps[\"cells\"]>(() => {\n if (filter !== \"all\") {\n const nodesWithStatus = componentGraph.nodes.filter(\n (node) => !!node.data.status\n );\n const nodeIdsWithStatus = new Set(nodesWithStatus.map((node) => node.id));\n const relatedEdges = componentGraph.edges.filter(\n (edge) =>\n nodeIdsWithStatus.has(edge.source) &&\n (filter === \"related\" || nodeIdsWithStatus.has(edge.target))\n );\n const relatedNodeIds =\n filter === \"minimal\"\n ? nodeIdsWithStatus\n : new Set([\n ...nodeIdsWithStatus,\n ...new Set(relatedEdges.map((edge) => edge.target)),\n ]);\n return [\n ...relatedEdges,\n ...componentGraph.nodes.filter((node) => relatedNodeIds.has(node.id)),\n ];\n }\n\n return [...componentGraph.edges, ...componentGraph.nodes];\n /* return [\n {\n type: \"edge\",\n source: \"permission_service\",\n target: \"cmdb_service\",\n },\n {\n type: \"edge\",\n source: \"sys_service\",\n target: \"cmdb_service\",\n },\n {\n type: \"edge\",\n source: \"cmdb_extend\",\n target: \"cmdb_service\",\n },\n {\n type: \"edge\",\n source: \"user_service\",\n target: \"cmdb_service\",\n },\n {\n type: \"edge\",\n source: \"cmdb_service\",\n target: \"easy_core\",\n view: {\n strokeColor: \"var(--color-error)\",\n text: {\n content: \"×\",\n offset: 7,\n style: {\n color: \"var(--color-error)\",\n lineHeight: \"14px\",\n },\n },\n },\n },\n {\n type: \"edge\",\n source: \"cmdb_service\",\n target: \"ens_client\",\n },\n {\n type: \"edge\",\n source: \"user_service\",\n target: \"ens_client\",\n },\n {\n type: \"node\",\n id: \"permission_service\",\n data: {\n name: \"permission_service\",\n icon: {\n lib: \"easyops\",\n category: \"app\",\n icon: \"permission-center-app\",\n },\n },\n },\n {\n type: \"node\",\n id: \"sys_service\",\n data: {\n name: \"sys_service\",\n icon: {\n lib: \"easyops\",\n category: \"customer\",\n icon: \"system-setting\",\n },\n },\n },\n {\n type: \"node\",\n id: \"cmdb_extend\",\n data: {\n name: \"cmdb_extend\",\n icon: {\n lib: \"easyops\",\n category: \"itsc-form\",\n icon: \"extends\",\n },\n },\n },\n {\n type: \"node\",\n id: \"user_service\",\n data: {\n name: \"user_service\",\n icon: {\n lib: \"easyops\",\n category: \"model\",\n icon: \"user-group\",\n },\n },\n },\n {\n type: \"node\",\n id: \"easy_core\",\n data: {\n name: \"easy_core\",\n icon: {\n lib: \"easyops\",\n category: \"model\",\n icon: \"sql-package\",\n },\n },\n },\n {\n type: \"node\",\n id: \"ens_client\",\n data: {\n name: \"ens_client\",\n icon: {\n lib: \"fa\",\n prefix: \"fas\",\n icon: \"map-location\",\n },\n },\n },\n {\n type: \"node\",\n id: \"cmdb_service\",\n data: {\n name: \"cmdb_service\",\n icon: {\n lib: \"easyops\",\n category: \"product\",\n icon: \"easy-cmdb\",\n },\n },\n },\n ] as EoDisplayCanvasProps[\"cells\"]; */\n }, [componentGraph, filter]);\n\n const layoutOptions = useMemo<EoDisplayCanvasProps[\"layoutOptions\"]>(() => {\n return {\n padding: CANVAS_PADDING,\n nodesep: 90,\n ranksep: 70,\n };\n }, []);\n\n const defaultNodeBricks = useMemo<\n EoDisplayCanvasProps[\"defaultNodeBricks\"]\n >(() => {\n return [\n {\n component: TopologyNode,\n },\n ];\n }, []);\n\n const defaultEdgeLines = useMemo<\n EoDisplayCanvasProps[\"defaultEdgeLines\"]\n >(() => {\n return [\n {\n strokeColor: \"#8c8c8c\",\n },\n ];\n }, []);\n\n const autoSize = useMemo<EoDisplayCanvasProps[\"autoSize\"]>(\n () =>\n _autoSize\n ? {\n width: \"fit-content\",\n height: \"fit-content\",\n // 453 - 18 - 8 - 18 = 409\n minWidth: 409,\n // Todo: listen on resize\n maxWidth: window.innerWidth * 0.9,\n minHeight: 150,\n }\n : undefined,\n [_autoSize]\n );\n\n const ref = useRef<EoDisplayCanvas>(null);\n\n const onReCenter = useCallback(() => {\n ref.current?.center();\n }, []);\n\n return (\n <div\n className={classNames(sharedStyles[\"table-container\"], styles.topology, {\n [styles[\"auto-size\"]]: _autoSize,\n })}\n >\n <AsyncWrappedDisplayCanvas\n ref={ref}\n cells={cells}\n layout=\"dagre\"\n layoutOptions={layoutOptions}\n autoSize={autoSize}\n defaultNodeSize={DEFAULT_NODE_SIZE}\n defaultNodeBricks={defaultNodeBricks}\n defaultEdgeLines={defaultEdgeLines}\n hideZoomBar\n scrollable={false}\n extraStyleTexts={extraStyleTexts}\n />\n <div className={`${toolbarStyles.toolbar} ${styles.toolbar}`}>\n <WrappedIconButton\n variant=\"mini\"\n icon={ICON_EXPAND}\n onClick={onReCenter}\n />\n </div>\n </div>\n );\n}\n\ninterface TopologyNodeProps {\n node: {\n id: string;\n data: RawComponentGraphNode;\n };\n refCallback?: (element: HTMLElement | null) => void;\n}\n\nfunction TopologyNode({ node, refCallback }: TopologyNodeProps): JSX.Element {\n return (\n <div\n className={classNames(\"topology-node\", {\n \"topology-node-trouble\": node.data.status === \"trouble\",\n \"topology-node-ok\": node.data.status === \"ok\",\n })}\n ref={refCallback}\n >\n <WrappedIcon lib=\"fa\" prefix=\"fas\" icon=\"cube\" />\n <div className=\"topology-node-label\">{node.data.name}</div>\n </div>\n );\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\";\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","// istanbul ignore file\nimport { useMemo } from \"react\";\nimport type {\n Job,\n GraphEdge,\n GraphNode,\n TaskBaseDetail,\n GraphNavItem,\n GraphGeneratedView,\n} from \"./interfaces\";\nimport { REQUIREMENT_NODE_ID } from \"./constants\";\n\nexport function useTaskGraph(\n task: TaskBaseDetail | null | undefined,\n jobs: Job[] | null | undefined\n) {\n return useMemo(() => {\n if (!task) {\n return null;\n }\n\n const fixedJobs = jobs ?? [];\n const nodes: GraphNode[] = [];\n const edges: GraphEdge[] = [];\n const nav: GraphNavItem[] = [];\n const views: GraphGeneratedView[] = [];\n\n nodes.push({\n type: \"requirement\",\n id: REQUIREMENT_NODE_ID,\n content: task.requirement,\n state: fixedJobs.length === 0 ? \"working\" : \"completed\",\n });\n\n const jobMap = new Map<string, Job>();\n const childrenMap = new Map<string, string[]>();\n const downstreamMap = new Map<string, string[]>();\n const upstreamMap = new Map<string, string[]>();\n const rootDownstream: string[] = [];\n const rootChildren: string[] = [];\n const jobLevels = new Map<string, number>();\n\n for (const job of fixedJobs) {\n if (job.parent) {\n let children = childrenMap.get(job.parent);\n if (!children) {\n children = [];\n childrenMap.set(job.parent, children);\n }\n children.push(job.id);\n }\n }\n\n // Setup jobMap and downstreamMap\n for (const job of fixedJobs) {\n jobMap.set(job.id, job);\n\n for (const up of job.upstream ?? []) {\n let downstream = downstreamMap.get(up);\n if (!downstream) {\n downstream = [];\n downstreamMap.set(up, downstream);\n }\n downstream.push(job.id);\n }\n\n if (!job.parent) {\n rootChildren.push(job.id);\n\n if (!job.upstream?.length) {\n rootDownstream.push(job.id);\n }\n }\n }\n\n const alignDownstreamMap = (children: string[], level: number) => {\n for (const jobId of children) {\n jobLevels.set(jobId, level);\n const subChildren = childrenMap.get(jobId);\n const downstream = downstreamMap.get(jobId);\n\n if (subChildren) {\n const firstLevelChildren = subChildren.filter((child) => {\n const childJob = jobMap.get(child)!;\n return !childJob.upstream?.length;\n });\n\n const lastLevelChildren = downstream\n ? subChildren.filter((child) => {\n return !downstreamMap.has(child);\n })\n : [];\n\n downstreamMap.set(jobId, firstLevelChildren);\n\n for (const child of lastLevelChildren) {\n downstreamMap.set(child, [...downstream!]);\n }\n\n alignDownstreamMap(subChildren, level + 1);\n }\n }\n };\n\n alignDownstreamMap(rootChildren, 0);\n\n // Setup upstreamMap\n for (const [upstream, downstream] of downstreamMap) {\n for (const target of downstream) {\n let upstreams = upstreamMap.get(target);\n if (!upstreams) {\n upstreams = [];\n upstreamMap.set(target, upstreams);\n }\n upstreams.push(upstream);\n }\n }\n\n // Get BFS order of jobs\n const list: string[] = [];\n const visitedJobs = new Set<string>();\n const queue: string[] = [...rootDownstream];\n while (queue.length > 0) {\n const id = queue.shift()!;\n if (visitedJobs.has(id)) {\n continue;\n }\n visitedJobs.add(id);\n list.push(id);\n const downstream = downstreamMap.get(id);\n if (downstream) {\n queue.push(...downstream);\n }\n }\n\n const jobNodesMap = new Map<string, string[]>([\n [REQUIREMENT_NODE_ID, [REQUIREMENT_NODE_ID]],\n ]);\n\n for (const jobId of list) {\n const job = jobMap.get(jobId)!;\n const { messages } = job;\n const hasMessages =\n (Array.isArray(messages) && messages.length > 0) || job.toolCall;\n\n const nodeIds: string[] = [];\n\n if (job.instruction) {\n const instructionNodeId = `instruction:${jobId}`;\n nodes.push({\n type: \"instruction\",\n id: instructionNodeId,\n job,\n state: job.state,\n });\n\n nodeIds.push(instructionNodeId);\n\n nav.push({\n id: job.id,\n title: job.instruction,\n state: job.state,\n level: jobLevels.get(job.id)!,\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: jobLevels.get(job.id)!,\n });\n }\n\n if (hasMessages || !job.instruction) {\n const jobNodeId = `job:${job.id}`;\n nodes.push({\n type: \"job\",\n id: jobNodeId,\n job,\n state: job.state,\n });\n nodeIds.push(jobNodeId);\n }\n\n if (job.generatedView) {\n // Add view node for job\n const viewNodeId = `view:${job.id}`;\n nodes.push({\n type: \"view\",\n id: viewNodeId,\n job,\n });\n nodeIds.push(viewNodeId);\n\n views.push({\n id: job.id,\n view: job.generatedView,\n });\n }\n\n jobNodesMap.set(jobId, nodeIds);\n }\n\n for (const jobId of list) {\n const nodeIds = jobNodesMap.get(jobId)!;\n\n const upstreams = upstreamMap.get(jobId);\n for (const upstream of upstreams ?? [REQUIREMENT_NODE_ID]) {\n const parentNodeIds = jobNodesMap.get(upstream)!;\n edges.push({\n source: parentNodeIds[parentNodeIds.length - 1],\n target: nodeIds[0],\n });\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 }\n\n return {\n nodes,\n edges,\n nav,\n views,\n jobLevels,\n };\n }, [task, jobs]);\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]!./ReplayToolbar.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]!./ReplayToolbar.module.css\";\n export default content && content.locals ? content.locals : undefined;\n","import React from \"react\";\nimport styles from \"./ReplayToolbar.module.css\";\nimport { WrappedButton } from \"../bricks\";\nimport { K, t } from \"../i18n\";\n\nexport interface ReplayToolbarProps {\n taskDone: boolean;\n skipToResults: () => void;\n watchAgain: () => void;\n}\n\nexport function ReplayToolbar({\n taskDone,\n skipToResults,\n watchAgain,\n}: ReplayToolbarProps) {\n return (\n <div className={styles.container}>\n <div className={styles.replay}>\n <div className={styles.text}>\n {taskDone ? t(K.REPLAY_COMPLETED) : t(K.REPLAYING)}\n </div>\n {taskDone ? (\n <WrappedButton\n type=\"primary\"\n themeVariant=\"elevo\"\n className={styles.button}\n onClick={watchAgain}\n >\n {t(K.WATCH_AGAIN)}\n </WrappedButton>\n ) : (\n <WrappedButton\n type=\"primary\"\n themeVariant=\"elevo\"\n className={styles.button}\n onClick={skipToResults}\n >\n {t(K.SKIP_TO_RESULTS)}\n </WrappedButton>\n )}\n </div>\n </div>\n );\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","\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]!./FilePreview.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]!./FilePreview.module.css\";\n export default content && content.locals ? content.locals : undefined;\n","import React, {\n useCallback,\n useContext,\n useEffect,\n useRef,\n useState,\n} from \"react\";\nimport { getBasePath } from \"@next-core/runtime\";\nimport type { Drawer } from \"@next-bricks/containers/drawer\";\nimport type { GeneralIconProps } from \"@next-bricks/icons/general-icon\";\nimport classNames from \"classnames\";\nimport { saveAs } from \"file-saver\";\nimport type { FileInfo } from \"../interfaces\";\nimport {\n WrappedDrawer,\n WrappedIconButton,\n WrappedIcon,\n WrappedButton,\n} from \"../bricks\";\nimport { CanvasContext } from \"../CanvasContext\";\nimport styles from \"./FilePreview.module.css\";\nimport shareStyles from \"../shared.module.css\";\nimport toolbarStyles from \"../toolbar.module.css\";\nimport { EnhancedMarkdown } from \"../EnhancedMarkdown/EnhancedMarkdown\";\nimport { K, t } from \"../i18n\";\nimport { ICON_CLOSE, ICON_LOADING } from \"../constants\";\nimport { getMimeTypeByFilename } from \"../utils/file\";\nimport imageUnpreviewable from \"../images/unpreviewable.png\";\n\nconst ICON_DOWNLOAD: GeneralIconProps = {\n lib: \"antd\",\n icon: \"download\",\n};\n\nexport interface FilePreviewProps {\n file: FileInfo;\n}\n\nfunction getDrawerWidth() {\n const { innerWidth } = window;\n return innerWidth < 800\n ? innerWidth\n : innerWidth < 1280\n ? innerWidth * 0.9\n : 1246;\n}\n\nexport function FilePreview({ file }: FilePreviewProps) {\n const ref = useRef<Drawer>(null);\n const { setActiveFile } = useContext(CanvasContext);\n const { bytes, uri, mimeType, name } = file;\n const type = mimeType || getMimeTypeByFilename(name);\n const [status, setStatus] = useState<\"loading\" | \"loaded\" | \"error\">(\n \"loading\"\n );\n\n const [content, setContent] = useState<string | undefined>();\n useEffect(() => {\n if (type === \"application/pdf\") {\n setStatus(uri || bytes ? \"loaded\" : \"error\");\n return;\n }\n\n setStatus(\"loading\");\n if (type !== \"text/markdown\") {\n setStatus(\"error\");\n return;\n }\n\n if (bytes) {\n setContent(atob(bytes));\n setStatus(\"loaded\");\n return;\n }\n\n if (uri) {\n let ignore = false;\n (async () => {\n try {\n const response = await fetch(\n new URL(uri, `${location.origin}${getBasePath()}`)\n );\n if (!response.ok) {\n throw new Error(`Failed to fetch file: ${response.statusText}`);\n }\n const text = await response.text();\n if (ignore) {\n return;\n }\n setContent(text);\n setStatus(\"loaded\");\n } catch (error) {\n // eslint-disable-next-line no-console\n console.error(\"Error fetching file:\", error);\n setStatus(\"error\");\n }\n })();\n return () => {\n ignore = true;\n };\n }\n }, [bytes, type, uri]);\n\n const handleDownload = useCallback(() => {\n const { bytes, uri, mimeType, name } = file;\n const filename = name || t(K.UNTITLED);\n if (bytes) {\n saveAs(new Blob([atob(bytes)], { type: mimeType }), filename);\n } else if (uri) {\n const link = document.createElement(\"a\");\n link.href = new URL(uri, `${location.origin}${getBasePath()}`).toString();\n link.download = filename;\n document.body.appendChild(link);\n link.click();\n document.body.removeChild(link);\n }\n }, [file]);\n\n const handleClickClose = useCallback(() => {\n ref.current?.close();\n }, []);\n\n const handleClose = useCallback(() => {\n setTimeout(() => {\n setActiveFile(null);\n }, 300);\n }, [setActiveFile]);\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 return (\n <WrappedDrawer\n ref={ref}\n customTitle={file.name || t(K.UNTITLED)}\n width={width}\n closable={false}\n mask\n maskClosable\n keyboard\n onClose={handleClose}\n >\n {status === \"loading\" ? (\n <div className={styles.loading}>\n <WrappedIcon {...ICON_LOADING} />\n </div>\n ) : status === \"error\" ? (\n <div className={styles.error}>\n <img\n src={imageUnpreviewable}\n alt=\"Unpreviewable\"\n width={591}\n height={249}\n />\n <p>\n {t(K.FILE_PREVIEW_UNPREVIEWABLE_TIP_PREFIX)}\n <WrappedButton\n themeVariant=\"elevo\"\n type=\"primary\"\n onClick={handleDownload}\n >\n {t(K.DOWNLOAD)}\n </WrappedButton>\n {t(K.FILE_PREVIEW_UNPREVIEWABLE_TIP_SUFFIX)}\n </p>\n </div>\n ) : type === \"application/pdf\" ? (\n <embed\n className={styles.embed}\n src={\n uri\n ? new URL(uri, `${location.origin}${getBasePath()}`).toString()\n : `data:application/pdf;base64,${bytes}`\n }\n type={type}\n title={name}\n width=\"100%\"\n height=\"100%\"\n />\n ) : (\n <div className={classNames(styles.content, shareStyles.markdown)}>\n <EnhancedMarkdown content={content} />\n </div>\n )}\n <div slot=\"extra\" className={styles.toolbar}>\n <WrappedIconButton icon={ICON_DOWNLOAD} onClick={handleDownload} />\n <div className={toolbarStyles.divider} />\n <WrappedIconButton icon={ICON_CLOSE} onClick={handleClickClose} />\n </div>\n </WrappedDrawer>\n );\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, `.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","export default function findNearestCandidate<\n T extends { visualWeight: number },\n>(candidates: T[] | undefined, weight: number): T | undefined {\n const candidate = candidates?.reduce((nearest, candidate) => {\n if (\n !nearest ||\n Math.abs(candidate.visualWeight - weight) <\n Math.abs(nearest.visualWeight - weight)\n ) {\n return candidate;\n }\n return nearest;\n });\n return candidate;\n}\n","import { InstanceApi_getDetail } from \"@next-api-sdk/cmdb-sdk\";\nimport findNearestCandidate from \"./findNearestCandidate\";\nimport { getModelObjectInstanceId } from \"./getModelObjectInstanceId\";\n\nconst cache = new Map<string, Promise<Map<string, any>>>();\n\nconst attrListCache = new Map<string, any>();\n\nexport async function getPreGeneratedAttrViews(\n objectId: string,\n visualWeight?: number\n) {\n if (cache.has(objectId)) {\n return cache.get(objectId)!;\n }\n\n const promise = doGetPreGeneratedAttrViews(objectId, visualWeight);\n cache.set(objectId, promise);\n return promise;\n}\n\nasync function doGetPreGeneratedAttrViews(\n objectId: string,\n visualWeight?: number\n) {\n const attrViews = new Map<string, any>();\n\n try {\n const attrList = await getAttrList(objectId);\n if (attrList) {\n for (const attr of attrList) {\n const candidates = attr.generatedView?.[0]?.list;\n const select = findNearestCandidate(candidates, visualWeight ?? 0);\n if (select) {\n attrViews.set(attr.id, select);\n }\n }\n }\n } catch (e) {\n // eslint-disable-next-line no-console\n console.error(\"Error fetching pre-generated attr views:\", e);\n }\n\n return attrViews;\n}\n\nasync function getAttrList(objectId: string) {\n if (attrListCache.has(objectId)) {\n return attrListCache.get(objectId)!;\n }\n\n const promise = doGetAttrList(objectId);\n attrListCache.set(objectId, promise);\n return promise;\n}\n\nasync function doGetAttrList(objectId: string) {\n const instanceId = await getModelObjectInstanceId(objectId);\n if (!instanceId) {\n return null;\n }\n\n const fields = [\"attrList.id\", \"attrList.generatedView.list\"].join(\",\");\n\n const { attrList } = await InstanceApi_getDetail(\"MODEL_OBJECT\", instanceId, {\n fields,\n });\n\n return attrList;\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]!./ChatBox.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]!./ChatBox.module.css\";\n export default content && content.locals ? content.locals : undefined;\n","import React, {\n useCallback,\n useContext,\n useEffect,\n useRef,\n useState,\n} from \"react\";\nimport classNames from \"classnames\";\nimport {\n TextareaAutoResize,\n type TextareaAutoResizeRef,\n} from \"@next-shared/form\";\nimport ResizeObserver from \"resize-observer-polyfill\";\nimport type { GeneralIconProps } from \"@next-bricks/icons/general-icon\";\nimport styles from \"./ChatBox.module.css\";\nimport { showDialog, WrappedIcon, WrappedIconButton } from \"../bricks\";\nimport { CanvasContext } from \"../CanvasContext\";\nimport type { TaskState } from \"../interfaces\";\nimport { K, t } from \"../i18n\";\nimport { ICON_LOADING } from \"../constants\";\n\nconst ICON_PAUSE: GeneralIconProps = {\n lib: \"fa\",\n prefix: \"far\",\n icon: \"circle-pause\",\n};\n\nconst ICON_STOP: GeneralIconProps = {\n lib: \"fa\",\n prefix: \"far\",\n icon: \"circle-stop\",\n};\n\nconst ICON_RESUME: GeneralIconProps = {\n lib: \"fa\",\n prefix: \"far\",\n icon: \"circle-play\",\n};\n\nexport interface ChatBoxProps {\n taskState: TaskState | undefined;\n taskDone: boolean;\n}\n\nexport function ChatBox({ taskState, taskDone }: ChatBoxProps): JSX.Element {\n const containerRef = useRef<HTMLDivElement>(null);\n const textareaRef = useRef<TextareaAutoResizeRef>(null);\n const [value, setValue] = useState(\"\");\n const valueRef = useRef(\"\");\n const [wrap, setWrap] = useState(false);\n const { onPause, onResume, onCancel, supports } = useContext(CanvasContext);\n const [actionBeingTaken, setActionBeingTaken] = useState<\n \"toggle\" | \"cancel\" | null\n >(null);\n\n useEffect(() => {\n setActionBeingTaken(null);\n }, [taskState]);\n\n const handleResume = useCallback(() => {\n onResume();\n setActionBeingTaken(\"toggle\");\n }, [onResume]);\n\n const handlePause = useCallback(() => {\n onPause();\n setActionBeingTaken(\"toggle\");\n }, [onPause]);\n\n const handleStop = useCallback(async () => {\n try {\n await showDialog({\n type: \"confirm\",\n title: t(K.CONFIRM_TO_CANCEL_THE_TASK_TITLE),\n content: t(K.CONFIRM_TO_CANCEL_THE_TASK_CONTENT),\n });\n } catch {\n return;\n }\n onCancel();\n setActionBeingTaken(\"cancel\");\n }, [onCancel]);\n\n const onSubmit = useCallback(\n (_value: string) => {\n if (!taskDone) {\n return;\n }\n showDialog({\n type: \"warn\",\n title: \"提示\",\n content: \"功能暂未实现\",\n });\n valueRef.current = \"\";\n setValue(\"\");\n },\n [taskDone]\n );\n\n const handleSubmit = useCallback(\n (e: React.FormEvent<HTMLTextAreaElement>) => {\n if (e.currentTarget.value) {\n onSubmit?.(e.currentTarget.value);\n }\n },\n [onSubmit]\n );\n\n const handleChange = useCallback(\n (e: React.ChangeEvent<HTMLTextAreaElement>) => {\n valueRef.current = e.target.value;\n setValue(e.target.value);\n },\n []\n );\n\n const handleSubmitClick = useCallback(() => {\n onSubmit?.(valueRef.current);\n }, [onSubmit]);\n\n useEffect(() => {\n const container = containerRef?.current;\n if (!container) {\n return;\n }\n const observer = new ResizeObserver((entries) => {\n for (const entry of entries) {\n if (entry.target === container) {\n // istanbul ignore next: compatibility\n const currentBlockSize = entry.contentBoxSize\n ? entry.contentBoxSize[0]\n ? entry.contentBoxSize[0].blockSize\n : (entry.contentBoxSize as unknown as ResizeObserverSize)\n .blockSize\n : entry.contentRect.height;\n if (currentBlockSize > 52) {\n setWrap(true);\n }\n }\n }\n });\n observer.observe(container);\n return () => {\n observer.disconnect();\n };\n }, []);\n\n useEffect(() => {\n if (!value) {\n setWrap(false);\n }\n }, [value]);\n\n const handleContainerClick = useCallback((e: React.MouseEvent) => {\n for (const item of e.nativeEvent.composedPath()) {\n if (\n item instanceof HTMLTextAreaElement ||\n item instanceof HTMLButtonElement\n ) {\n return;\n }\n }\n textareaRef.current?.focus();\n }, []);\n\n return (\n <div className={styles.container} onClick={handleContainerClick}>\n <div className={classNames(styles.box, { [styles.wrap]: wrap })}>\n <div className={styles.input} ref={containerRef}>\n <TextareaAutoResize\n containerRef={containerRef}\n ref={textareaRef}\n value={value}\n minRows={1}\n maxRows={4}\n borderSize={0}\n paddingSize={16}\n autoResize\n placeholder={t(K.SEND_MESSAGE)}\n submitWhen=\"enter-without-shift\"\n onSubmit={handleSubmit}\n onChange={handleChange}\n />\n </div>\n <div className={styles.toolbar}>\n {taskDone || !supports?.intercept ? (\n <button\n className={styles[\"btn-send\"]}\n disabled={!value || !taskDone}\n onClick={handleSubmitClick}\n >\n <WrappedIcon lib=\"fa\" prefix=\"fas\" icon=\"arrow-up\" />\n </button>\n ) : (\n <>\n {actionBeingTaken === \"toggle\" ? (\n <WrappedIconButton icon={ICON_LOADING} disabled />\n ) : taskState === \"paused\" ? (\n <WrappedIconButton\n icon={ICON_RESUME}\n disabled={!!actionBeingTaken}\n tooltip={actionBeingTaken ? undefined : t(K.RESUME_THE_TASK)}\n onClick={handleResume}\n />\n ) : (\n <WrappedIconButton\n icon={ICON_PAUSE}\n disabled={!!actionBeingTaken}\n tooltip={actionBeingTaken ? undefined : t(K.PAUSE_THE_TASK)}\n onClick={handlePause}\n />\n )}\n {actionBeingTaken === \"cancel\" ? (\n <WrappedIconButton icon={ICON_LOADING} disabled />\n ) : (\n <WrappedIconButton\n icon={ICON_STOP}\n disabled={!!actionBeingTaken}\n tooltip={actionBeingTaken ? undefined : t(K.CANCEL_THE_TASK)}\n onClick={handleStop}\n />\n )}\n </>\n )}\n </div>\n </div>\n </div>\n );\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, `.progress-line--CX_xuAHC{--breathing-color:rgba(205,205,217,0.7);--breathing-color-2:rgba(205,205,217,0);display:flex;flex-direction:column}.progress-line--CX_xuAHC .step--YXd66tSR{position:relative;display:flex;align-items:center;padding:10px 4px 10px 16px;color:rgba(0,0,0,0.5)}.progress-line--CX_xuAHC .step--YXd66tSR .axis--T4nVxQt5{position:absolute;top:0;bottom:0;left:14px;width:1px}.progress-line--CX_xuAHC .step--YXd66tSR .axis--T4nVxQt5 .line--BUSBjzxD{width:1px;height:100%;background:linear-gradient(172deg,rgba(205,205,217,0) 0%,#cdcdd9 46%,rgba(205,205,217,0) 100%)}.progress-line--CX_xuAHC .step--YXd66tSR .axis--T4nVxQt5 .dot--TPMEta87{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);width:5px;height:5px;background:rgba(205,205,217,1);border-radius:50%}.progress-line--CX_xuAHC .step--YXd66tSR .progress--alc7SspF{padding:3px;margin:0 8px 0 12px;border-radius:10px;line-height:1;background:#ffffff}.progress-line--CX_xuAHC .step--YXd66tSR .progress--alc7SspF .count--RdZcMYhZ{font-weight:400}.progress-line--CX_xuAHC .step--YXd66tSR .progress--alc7SspF .total--BKoLTm8c{opacity:0.6}.progress-line--CX_xuAHC .step--YXd66tSR .description--AyfMh1_M{flex:1;color:#999}.progress-line--CX_xuAHC .step--YXd66tSR:last-child .progress--alc7SspF .count--RdZcMYhZ{font-weight:600}.failed--Q9TADo_k .step--YXd66tSR:last-child .axis--T4nVxQt5 .line--BUSBjzxD{background:linear-gradient(172deg,rgba(242,76,37,0) 0%,rgba(242,76,37,0.3) 47%,rgba(242,76,37,0) 100%)}.failed--Q9TADo_k .step--YXd66tSR:last-child .axis--T4nVxQt5 .dot--TPMEta87{background:rgba(255,154,120,1)}.failed--Q9TADo_k .step--YXd66tSR:last-child .progress--alc7SspF{background:#ffd6d6}.failed--Q9TADo_k .step--YXd66tSR:last-child .progress--alc7SspF .count--RdZcMYhZ{color:#f44336}`, \"\"]);\n// Exports\n___CSS_LOADER_EXPORT___.locals = {\n\t\"progress-line\": `progress-line--CX_xuAHC`,\n\t\"step\": `step--YXd66tSR`,\n\t\"axis\": `axis--T4nVxQt5`,\n\t\"line\": `line--BUSBjzxD`,\n\t\"dot\": `dot--TPMEta87`,\n\t\"progress\": `progress--alc7SspF`,\n\t\"count\": `count--RdZcMYhZ`,\n\t\"total\": `total--BKoLTm8c`,\n\t\"description\": `description--AyfMh1_M`,\n\t\"failed\": `failed--Q9TADo_k`\n};\nexport default ___CSS_LOADER_EXPORT___;\n","import type { ConstructResult } from \"@next-shared/jsx-storyboard\";\nimport type { ViewWithInfo } from \"../converters/interfaces\";\n\nexport function isJsxView(\n result: ConstructResult | ViewWithInfo\n): result is ConstructResult {\n return !!(result as ConstructResult).source;\n}\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","// istanbul ignore file\nimport type React from \"react\";\n\nconst HIDDEN_TEXTAREA_STYLE = `\n min-height: 0!important;\n max-height: none!important;\n height: 0!important;\n visibility: hidden!important;\n overflow: hidden!important;\n position: absolute!important;\n z-index: -1000!important;\n top: 0!important;\n right: 0!important;\n pointer-events: none!important;\n`;\n\nconst SIZING_STYLE = [\n \"letter-spacing\",\n \"line-height\",\n \"padding-top\",\n \"padding-bottom\",\n \"font-family\",\n \"font-weight\",\n \"font-size\",\n \"font-variant\",\n \"text-rendering\",\n \"text-transform\",\n \"width\",\n \"text-indent\",\n \"padding-left\",\n \"padding-right\",\n \"border-width\",\n \"box-sizing\",\n \"word-break\",\n \"white-space\",\n];\n\nlet hiddenTextarea: HTMLTextAreaElement | undefined;\n\nexport interface AutoSizeOptions {\n minRows?: number | null;\n maxRows?: number | null;\n borderSize?: number;\n paddingSize?: number;\n}\n\n/**\n * 计算 textarea 高度\n * https://github.com/react-component/textarea/blob/1c0026fbe30e5f7dff1fca695b2cf262246381ca/src/calculateNodeHeight.tsx\n */\nexport default function calculateAutoSizeStyle(\n uiTextNode: HTMLTextAreaElement,\n options?: AutoSizeOptions\n): React.CSSProperties {\n const {\n minRows = null,\n maxRows = null,\n borderSize = 2,\n paddingSize = 8,\n } = options ?? {};\n\n if (!hiddenTextarea) {\n hiddenTextarea = document.createElement(\"textarea\");\n hiddenTextarea.setAttribute(\"tab-index\", \"-1\");\n hiddenTextarea.setAttribute(\"aria-hidden\", \"true\");\n document.body.appendChild(hiddenTextarea);\n }\n\n const uiTextNodeStyle = window.getComputedStyle(uiTextNode);\n const sizingStyle = SIZING_STYLE.map(\n (name) => `${name}:${uiTextNodeStyle.getPropertyValue(name)}`\n ).join(\";\");\n\n // equal style\n hiddenTextarea.setAttribute(\n \"style\",\n `${sizingStyle};${HIDDEN_TEXTAREA_STYLE}`\n );\n hiddenTextarea.value = uiTextNode.value || uiTextNode.placeholder || \"\";\n\n let minHeight: number | undefined;\n let maxHeight: number | undefined;\n let overflowY: React.CSSProperties[\"overflowY\"];\n\n let height = hiddenTextarea.scrollHeight + borderSize;\n\n if (minRows !== null || maxRows !== null) {\n const singleRowHeight =\n process.env.NODE_ENV === \"test\"\n ? 22\n : parseFloat(\n window\n .getComputedStyle(hiddenTextarea)\n .getPropertyValue(\"line-height\")\n );\n if (minRows !== null) {\n minHeight = singleRowHeight * minRows + paddingSize + borderSize;\n height = Math.max(minHeight, height);\n }\n if (maxRows !== null) {\n maxHeight = singleRowHeight * maxRows + paddingSize + borderSize;\n if (height <= maxHeight) {\n overflowY = \"hidden\";\n }\n height = Math.min(maxHeight, height);\n }\n }\n\n const style: React.CSSProperties = {\n height,\n overflowY,\n resize: \"none\",\n };\n\n if (minHeight) {\n style.minHeight = minHeight;\n }\n if (maxHeight) {\n style.maxHeight = maxHeight;\n }\n\n return style;\n}\n","import React, {\n useCallback,\n useEffect,\n useImperativeHandle,\n useRef,\n useState,\n} from \"react\";\nimport { flushSync } from \"react-dom\";\nimport ResizeObserver from \"resize-observer-polyfill\";\nimport calculateAutoSizeStyle from \"./utils/calculateAutoSizeStyle.js\";\n\n// istanbul ignore next\nconst modKey = /Mac|iPod|iPhone|iPad/.test(navigator.platform)\n ? \"metaKey\"\n : \"ctrlKey\";\n\nexport interface TextareaAutoResizeProps\n extends React.DetailedHTMLProps<\n React.TextareaHTMLAttributes<HTMLTextAreaElement>,\n HTMLTextAreaElement\n > {\n /** @default true */\n autoResize?: boolean;\n minRows?: number | null;\n maxRows?: number | null;\n /** @default 2 */\n borderSize?: number;\n /** @default 8 */\n paddingSize?: number;\n containerRef?: React.RefObject<HTMLElement>;\n submitWhen?: \"enter-without-shift\" | \"enter-with-mod\";\n}\n\nexport interface TextareaAutoResizeRef {\n focus(): void;\n}\n\nexport const TextareaAutoResize = React.forwardRef<\n TextareaAutoResizeRef,\n TextareaAutoResizeProps\n>(LegacyTextareaAutoResize);\n\nfunction LegacyTextareaAutoResize(\n {\n autoResize: _autoResize,\n minRows,\n maxRows,\n borderSize,\n paddingSize,\n containerRef,\n value: propValue,\n style,\n submitWhen,\n onChange,\n onSubmit,\n onKeyDown,\n onCompositionStart,\n onCompositionEnd,\n ...props\n }: TextareaAutoResizeProps,\n ref: React.ForwardedRef<TextareaAutoResizeRef>\n): React.JSX.Element {\n const autoResize = _autoResize ?? true;\n const [value, setValue] = useState(propValue ?? \"\");\n const textareaRef = useRef<HTMLTextAreaElement>(null);\n const [autoStyle, setAutoStyle] = useState<React.CSSProperties | null>(null);\n\n useImperativeHandle(\n ref,\n () => ({\n focus: () => {\n const textarea = textareaRef.current;\n // istanbul ignore else: defensive check\n if (textarea) {\n const valueLength = textarea.value?.length;\n textarea.focus();\n valueLength && textarea.setSelectionRange(valueLength, valueLength);\n }\n },\n }),\n []\n );\n\n const doAutoResize = useCallback(() => {\n const textarea = textareaRef.current;\n if (textarea && autoResize) {\n const style = calculateAutoSizeStyle(textarea, {\n minRows,\n maxRows,\n borderSize,\n paddingSize,\n });\n // istanbul ignore next\n if (process.env.NODE_ENV === \"test\") {\n setAutoStyle(style);\n } else {\n flushSync(() => {\n setAutoStyle(style);\n });\n }\n }\n }, [autoResize, maxRows, minRows, borderSize, paddingSize]);\n\n const handleInputChange = (\n e: React.ChangeEvent<HTMLTextAreaElement>\n ): void => {\n setValue(e.target.value);\n onChange?.(e);\n };\n\n useEffect(() => {\n setValue(propValue ?? \"\");\n }, [propValue]);\n\n useEffect(() => {\n doAutoResize();\n }, [doAutoResize, value]);\n\n const compositionRef = useRef(false);\n\n const handleCompositionStart = useCallback(\n (e: React.CompositionEvent<HTMLTextAreaElement>) => {\n compositionRef.current = true;\n onCompositionStart?.(e);\n },\n [onCompositionStart]\n );\n\n const handleCompositionEnd = useCallback(\n (e: React.CompositionEvent<HTMLTextAreaElement>) => {\n compositionRef.current = false;\n onCompositionEnd?.(e);\n },\n [onCompositionEnd]\n );\n\n const handleKeyDown = useCallback(\n (e: React.KeyboardEvent<HTMLTextAreaElement>) => {\n if (compositionRef.current) {\n // Ignore key events during composition\n return;\n }\n\n if (\n e.key === \"Enter\" &&\n (submitWhen === \"enter-without-shift\"\n ? !e.shiftKey\n : submitWhen === \"enter-with-mod\" && e[modKey])\n ) {\n e.preventDefault();\n e.stopPropagation();\n onSubmit?.(e);\n }\n\n onKeyDown?.(e);\n },\n [onKeyDown, onSubmit, submitWhen]\n );\n\n // istanbul ignore next\n useEffect(() => {\n const container = containerRef?.current;\n if (!container || !autoResize) {\n return;\n }\n let previousInlineSize: number | undefined;\n const observer = new ResizeObserver((entries) => {\n for (const entry of entries) {\n if (entry.target === container) {\n // istanbul ignore next: compatibility\n const currentInlineSize = entry.contentBoxSize\n ? entry.contentBoxSize[0]\n ? entry.contentBoxSize[0].inlineSize\n : (entry.contentBoxSize as unknown as ResizeObserverSize)\n .inlineSize\n : entry.contentRect.width;\n if (\n currentInlineSize !== undefined &&\n currentInlineSize !== previousInlineSize\n ) {\n const isInitial = !previousInlineSize;\n previousInlineSize = currentInlineSize;\n if (!isInitial) {\n requestAnimationFrame(doAutoResize);\n }\n }\n }\n }\n });\n observer.observe(container);\n return () => {\n observer.disconnect();\n };\n }, [autoResize, containerRef, doAutoResize]);\n\n return (\n <textarea\n {...props}\n ref={textareaRef}\n value={value}\n style={{\n ...style,\n ...autoStyle,\n }}\n onChange={handleInputChange}\n onCompositionStart={handleCompositionStart}\n onCompositionEnd={handleCompositionEnd}\n onKeyDown={handleKeyDown}\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]!./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 \"../interfaces\";\nimport { WrappedDrawer } from \"../bricks\";\nimport styles from \"./ToolCallDetail.module.css\";\nimport sharedStyles from \"../shared.module.css\";\nimport { K, t } from \"../i18n\";\nimport { CanvasContext } from \"../CanvasContext\";\nimport { ToolCallStatus } from \"../ToolCallStatus/ToolCallStatus\";\nimport { ToolProgressLine } from \"../ToolProgressLine/ToolProgressLine\";\nimport { Topology } from \"../Topology/Topology\";\nimport { CodeBlock } from \"../CodeBlock/CodeBlock\";\nimport { EnhancedMarkdown } from \"../EnhancedMarkdown/EnhancedMarkdown\";\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 { setActiveToolCallJobId } = useContext(CanvasContext);\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 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 setActiveToolCallJobId(null);\n }, 300);\n }, [setActiveToolCallJobId]);\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 || t(K[toolCall.name as K]) || toolCall.name}\n width={width}\n closable\n mask\n maskClosable\n keyboard\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 content={toolCall.originalArguments} maybeJson />\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} ${sharedStyles.markdown}`}>\n {intermediateParts.map((part, partIndex) =>\n part.data?.type === \"stream\" ? (\n <ProcessMessageComponent\n key={partIndex}\n content={part.data.message}\n />\n ) : part.data?.type === \"graph\" &&\n [\"component_graph\", \"component_graph_node\"].includes(\n part.data.message?.type\n ) ? (\n job.componentGraph ? (\n <Topology\n key={partIndex}\n componentGraph={job.componentGraph}\n filter={\n part.data.message.type === \"component_graph_node\"\n ? \"related\"\n : \"all\"\n }\n />\n ) : null\n ) : (\n <PreComponent key={partIndex} content={JSON.stringify(part)} />\n )\n )}\n {!!progress && (\n <div\n className={classNames(styles[\"progress-container\"], {\n [styles.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}: {\n content?: string;\n maybeJson?: boolean;\n}): JSX.Element {\n const [refinedContent, fallback] = useMemo(() => {\n if (maybeJson) {\n try {\n const json = JSON.parse(content ?? \"\");\n return [`${\"```json\\n\"}${JSON.stringify(json, null, 2)}${\"\\n```\"}`];\n } catch {\n // Fallback to original content\n }\n }\n return [content, true];\n }, [content, maybeJson]);\n\n return fallback ? (\n <CodeBlock className={classNames(\"language-plaintext\", styles.fallback)}>\n <code>{refinedContent}</code>\n </CodeBlock>\n ) : (\n <EnhancedMarkdown content={refinedContent} />\n );\n}\n\nfunction ProcessMessageComponent({\n content,\n}: {\n content: string;\n}): JSX.Element {\n return (\n <div\n className={classNames(styles[\"stream-message\"], sharedStyles.markdown)}\n >\n <EnhancedMarkdown content={content} />\n </div>\n );\n}\n","import React from \"react\";\nimport { asyncWrapBrick } from \"@next-core/react-runtime\";\n\ninterface CMDBSelectProps {\n objectId?: string | null;\n fieldId?: string | null;\n objectList?: any[] | null;\n}\n\ninterface CMDBSelectEvents {\n \"cmdb.instance.form.change.v2\": CustomEvent<any[]>;\n}\n\ninterface CMDBSelectEvensMapping {\n onChangeV2: \"cmdb.instance.form.change.v2\";\n}\n\nexport const AsyncWrappedCMDB = React.lazy(async () => ({\n default: await asyncWrapBrick<\n HTMLElement,\n CMDBSelectProps,\n CMDBSelectEvents,\n CMDBSelectEvensMapping\n >(\"cmdb-instances.cmdb-instances-input-form\", {\n onChangeV2: \"cmdb.instance.form.change.v2\",\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]!./HumanConfirm.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]!./HumanConfirm.module.css\";\n export default content && content.locals ? content.locals : undefined;\n","// istanbul ignore file: experimental\nimport React, { useContext } from \"react\";\nimport styles from \"./HumanConfirm.module.css\";\nimport { K, t } from \"../i18n.js\";\nimport { WrappedButton } from \"../bricks\";\nimport { CanvasContext } from \"../CanvasContext\";\n\nexport function HumanConfirm({\n jobId,\n confirmText,\n cancelText,\n}: {\n jobId: string;\n confirmText?: string;\n cancelText?: string;\n}): JSX.Element {\n const { humanInput } = useContext(CanvasContext);\n\n return (\n <div className={styles[\"human-confirm\"]}>\n <WrappedButton\n type=\"primary\"\n themeVariant=\"elevo\"\n shape=\"round\"\n onClick={() => {\n humanInput(jobId, confirmText || t(K.YES));\n }}\n >\n {confirmText || t(K.YES)}\n </WrappedButton>\n <WrappedButton\n type=\"text\"\n themeVariant=\"elevo\"\n onClick={() => {\n humanInput(jobId, cancelText || t(K.NO));\n }}\n style={{ marginLeft: \"0.5em\" }}\n >\n {cancelText || t(K.NO)}\n </WrappedButton>\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]!./HumanAdjustPlan.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]!./HumanAdjustPlan.module.css\";\n export default content && content.locals ? content.locals : undefined;\n","// istanbul ignore file: compatibility workaround\nimport type { HTMLAttributes } from \"react\";\n\nlet _supports: boolean | undefined;\n\nfunction supportsContentEditablePlaintextOnly(): boolean {\n if (typeof _supports !== \"boolean\") {\n const div = document.createElement(\"div\");\n div.setAttribute(\"contenteditable\", \"PLAINTEXT-ONLY\");\n _supports = div.contentEditable === \"plaintext-only\";\n }\n return _supports;\n}\n\nexport function getContentEditable(\n editable: boolean\n): HTMLAttributes<HTMLDivElement>[\"contentEditable\"] {\n return editable\n ? supportsContentEditablePlaintextOnly()\n ? \"plaintext-only\"\n : \"true\"\n : \"false\";\n}\n","// istanbul ignore file: experimental\nimport React, {\n useCallback,\n useContext,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport { uniqueId } from \"lodash\";\nimport {\n closestCenter,\n DndContext,\n PointerSensor,\n useSensor,\n useSensors,\n type DragEndEvent,\n} from \"@dnd-kit/core\";\nimport {\n restrictToFirstScrollableAncestor,\n restrictToVerticalAxis,\n} from \"@dnd-kit/modifiers\";\nimport {\n arrayMove,\n SortableContext,\n useSortable,\n verticalListSortingStrategy,\n} from \"@dnd-kit/sortable\";\nimport { CSS } from \"@dnd-kit/utilities\";\nimport classNames from \"classnames\";\nimport styles from \"./HumanAdjustPlan.module.css\";\nimport { WrappedButton, WrappedIcon } from \"../bricks\";\nimport { K, t } from \"../i18n.js\";\nimport { getContentEditable } from \"../getContentEditable\";\nimport { CanvasContext } from \"../CanvasContext\";\n\ninterface DraggableStep {\n id: string;\n content: string;\n newlyAdded?: boolean;\n}\n\nexport interface HumanAdjustPlanProps {\n jobId: string;\n steps?: string[];\n}\n\nexport function HumanAdjustPlan({\n jobId,\n steps,\n}: HumanAdjustPlanProps): JSX.Element {\n const [list, setList] = useState<DraggableStep[]>([]);\n const { humanInput } = useContext(CanvasContext);\n\n useEffect(() => {\n setList(\n (steps ?? []).map((content) => ({\n id: uniqueId(\"step-\"),\n content,\n }))\n );\n }, [steps]);\n\n const idList = useMemo(() => list.map((step) => step.id), [list]);\n const [changed, setChanged] = useState(false);\n\n const sensors = useSensors(\n useSensor(PointerSensor, {\n activationConstraint: {\n distance: 1,\n },\n })\n );\n\n const dndModifiers = useMemo(\n () => [restrictToVerticalAxis, restrictToFirstScrollableAncestor],\n []\n );\n\n const handleDragEnd = useCallback(({ active, over }: DragEndEvent) => {\n if (over && active.id !== over.id) {\n setList((prev) => {\n const activeIndex = prev.findIndex((v) => v.id === active.id);\n const overIndex = prev.findIndex((v) => v.id === over.id);\n return arrayMove(prev, activeIndex, overIndex);\n });\n setChanged(true);\n }\n }, []);\n\n const handleConfirm = useCallback(() => {\n humanInput(\n jobId,\n JSON.stringify({\n type: \"plan\",\n steps: list.map((step) => step.content),\n })\n );\n }, [humanInput, jobId, list]);\n\n const handleReset = useCallback(() => {\n setList(\n (steps ?? []).map((content) => ({\n id: uniqueId(\"step-\"),\n content,\n }))\n );\n setChanged(false);\n }, [steps]);\n\n const handleAddStep = useCallback(() => {\n setList((prev) =>\n prev.concat({\n id: uniqueId(\"step-\"),\n content: \"\",\n newlyAdded: true,\n })\n );\n setChanged(true);\n }, []);\n\n const handleDeleteStep = useCallback((id: string) => {\n setList((prev) => prev.filter((step) => step.id !== id));\n setChanged(true);\n }, []);\n\n const handleUpdateStepContent = useCallback((id: string, content: string) => {\n setList((prev) =>\n prev.map((step) => (step.id === id ? { ...step, content } : step))\n );\n setChanged(true);\n }, []);\n\n return (\n <>\n <div className={styles.plan}>\n <DndContext\n sensors={sensors}\n collisionDetection={closestCenter}\n modifiers={dndModifiers}\n onDragEnd={handleDragEnd}\n >\n <SortableContext\n items={idList}\n strategy={verticalListSortingStrategy}\n >\n <ul className={styles.steps}>\n {list.map((step) => (\n <AdjustStep\n key={step.id}\n id={step.id}\n content={step.content}\n newlyAdded={step.newlyAdded}\n onDelete={handleDeleteStep}\n onUpdateContent={handleUpdateStepContent}\n />\n ))}\n </ul>\n </SortableContext>\n </DndContext>\n <div className={styles.actions}>\n <button className={styles[\"button-add\"]} onClick={handleAddStep}>\n <WrappedIcon\n className={styles[\"button-icon\"]}\n lib=\"antd\"\n icon=\"plus\"\n />\n <span className={styles[\"button-text\"]}>{t(K.ADD_STEP)}</span>\n </button>\n <button\n className={styles[\"button-reset\"]}\n hidden={!changed}\n onClick={handleReset}\n >\n {t(K.RESET_PLAN)}\n </button>\n </div>\n </div>\n <div className={styles.toolbar}>\n <WrappedButton\n type=\"primary\"\n themeVariant=\"elevo\"\n shape=\"round\"\n onClick={handleConfirm}\n >\n {t(K.CONFIRM)}\n </WrappedButton>\n </div>\n </>\n );\n}\n\ninterface AdjustStepProps {\n id: string;\n content: string;\n newlyAdded?: boolean;\n onDelete: (id: string) => void;\n onUpdateContent: (id: string, content: string) => void;\n}\n\nfunction AdjustStep({\n id,\n content,\n newlyAdded,\n onDelete,\n onUpdateContent,\n}: AdjustStepProps) {\n const {\n attributes,\n listeners,\n setNodeRef,\n transform,\n transition,\n isDragging,\n } = useSortable({\n id,\n });\n\n const contentRef = useRef<HTMLSpanElement>(null);\n\n useEffect(\n () => {\n if (newlyAdded) {\n contentRef.current?.focus();\n }\n },\n // One-time focus\n // eslint-disable-next-line react-hooks/exhaustive-deps\n []\n );\n\n const style = useMemo(\n () => ({\n transform: CSS.Transform.toString(transform),\n transition,\n }),\n [transform, transition]\n );\n\n const [editing, setEditing] = useState(false);\n\n const handleFocus = useCallback(() => {\n setEditing(true);\n }, []);\n\n const handleBlur = useCallback(\n (e: React.FocusEvent<HTMLSpanElement>) => {\n setEditing(false);\n const newContent = e.currentTarget.textContent;\n if (newContent !== null && content !== newContent) {\n onUpdateContent(id, newContent);\n }\n },\n [content, id, onUpdateContent]\n );\n\n const handleKeyDown = useCallback(\n (e: React.KeyboardEvent<HTMLSpanElement>) => {\n if (e.key === \"Enter\") {\n e.preventDefault();\n e.currentTarget.blur();\n }\n },\n []\n );\n\n return (\n <li\n ref={setNodeRef}\n {...attributes}\n {...listeners}\n className={classNames(styles.step, {\n [styles.dragging]: isDragging,\n [styles.editing]: editing,\n })}\n style={style}\n >\n <span className={styles.handle}>\n <WrappedIcon lib=\"antd\" icon=\"holder\" />\n </span>\n <span\n className={styles.content}\n ref={contentRef}\n onFocus={handleFocus}\n onBlur={handleBlur}\n onKeyDown={handleKeyDown}\n contentEditable={getContentEditable(true)}\n >\n {content}\n </span>\n <span className={styles.delete}>\n <WrappedIcon\n className={styles.delete}\n lib=\"antd\"\n icon=\"delete\"\n onClick={() => onDelete(id)}\n />\n </span>\n </li>\n );\n}\n","import React, { useMemo } from \"react\";\nimport type { Job } from \"../interfaces\";\nimport styles from \"../NodeJob/NodeJob.module.css\";\n\nexport interface HumanAdjustPlanResultProps {\n job: Job;\n}\n\nexport function HumanAdjustPlanResult({\n job,\n}: HumanAdjustPlanResultProps): JSX.Element {\n const response = useMemo(() => {\n const msg = job.messages?.find((msg) => {\n return msg.role === \"tool\";\n });\n if (msg) {\n const text = msg.parts?.find((part) => part.type === \"text\")?.text;\n if (text) {\n try {\n return JSON.parse(text) as { type: \"plan\"; steps: string[] };\n } catch {\n // Fallback to original text\n }\n }\n }\n return null;\n }, [job.messages]);\n\n if (response?.type === \"plan\" && Array.isArray(response.steps)) {\n return (\n <div className={`${styles.message} ${styles[\"role-user\"]}`}>\n <ol\n style={{\n paddingLeft: `${Math.floor(Math.log10(response.steps.length + 1)) * 0.5 + 1.5}em`,\n }}\n >\n {response.steps.map((step, index) => (\n <li key={index}>{step}</li>\n ))}\n </ol>\n </div>\n );\n }\n\n return (\n <div className={`${styles.message} ${styles[\"role-user\"]}`}>\n Something went wrong.\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]!./CmdbInstanceDetail.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]!./CmdbInstanceDetail.module.css\";\n export default content && content.locals ? content.locals : undefined;\n","import React, { useEffect, useMemo, useRef, useState } from \"react\";\nimport { uniqueId, upperFirst } from \"lodash\";\nimport { unstable_createRoot } from \"@next-core/runtime\";\nimport {\n UseBrickConf,\n type BrickConf,\n type BrickEventHandler,\n type ContextConf,\n type UseSingleBrickConf,\n} from \"@next-core/types\";\nimport { hasOwnProperty, isObject } from \"@next-core/utils/general\";\nimport type { DescriptionItem } from \"@next-bricks/presentational/descriptions\";\nimport type { CmdbInstanceDetailData } from \"../interfaces\";\nimport { getPreGeneratedAttrViews } from \"../utils/converters/getPreGeneratedAttrViews\";\nimport { convertToStoryboard } from \"../utils/converters/raw-data-generate/convert\";\nimport type { JSONSchema, JSONSchemaObject } from \"../json-schema\";\nimport styles from \"./CmdbInstanceDetail.module.css\";\nimport { createPortal } from \"../utils/createPortal\";\nimport { WrappedIcon } from \"../bricks\";\nimport { ICON_LOADING } from \"../constants\";\n\n/**\n * 如果属性数量超过阈值,则使用两列布局\n */\nconst LIST_SPLIT_THRESHOLD = 6;\n\n/**\n * 如果条目数量超过阈值,则使用表格显示\n */\nconst SHOW_AS_TABLE_THRESHOLD = 2;\n\nconst BUILTIN_FN_STRINGIFY = \"__builtin_fn_stringify\";\n\nexport function CmdbInstanceDetail({\n objectId,\n detail,\n outputSchema,\n}: CmdbInstanceDetailData) {\n const rootId = useMemo(() => uniqueId(), []);\n const ref = useRef<HTMLDivElement>(null);\n const rootRef = useRef<Awaited<\n ReturnType<typeof unstable_createRoot>\n > | null>(null);\n\n useEffect(() => {\n const container = ref.current;\n if (!container) {\n return;\n }\n const portal = createPortal(rootId);\n const root = unstable_createRoot(container, {\n portal,\n supportsUseChildren: true,\n } as any);\n rootRef.current = root;\n\n return () => {\n root.unmount();\n portal.remove();\n rootRef.current = null;\n };\n }, [rootId]);\n\n const [loading, setLoading] = useState(true);\n\n useEffect(() => {\n let ignore = false;\n (async () => {\n setLoading(true);\n try {\n const { bricks, context } = await convertCmdbInstanceDetail(\n detail,\n objectId,\n outputSchema,\n rootId\n );\n if (ignore) {\n return;\n }\n await rootRef.current?.render(bricks, { context });\n } catch (error) {\n // eslint-disable-next-line no-console\n console.error(\"Failed to render view:\", error);\n }\n if (!ignore) {\n setLoading(false);\n }\n })();\n\n return () => {\n ignore = true;\n };\n }, [detail, objectId, outputSchema, rootId]);\n\n return (\n <div className={styles.container}>\n {loading && <WrappedIcon className={styles.loading} {...ICON_LOADING} />}\n <div data-root-id={rootId} ref={ref} />\n </div>\n );\n}\n\nfunction isComplexType(type: JSONSchema[\"type\"] | undefined): boolean {\n return !type || type === \"object\" || type === \"array\";\n}\n\nfunction isEmptyValue(detail: Record<string, any>, key: string) {\n return (\n !hasOwnProperty(detail, key) ||\n detail[key] == null ||\n detail[key] === \"\" ||\n (Array.isArray(detail[key]) && detail[key].length === 0)\n );\n}\n\nasync function convertCmdbInstanceDetail(\n detail: Record<string, any>,\n objectId: string,\n outputSchema: JSONSchema | string | undefined,\n rootId: string\n): Promise<{ bricks: BrickConf[]; context: ContextConf[] }> {\n const attrViews = await getPreGeneratedAttrViews(objectId, 1);\n\n let schema: JSONSchema | undefined;\n if (typeof outputSchema === \"string\") {\n try {\n schema = JSON.parse(outputSchema) as JSONSchema;\n } catch (e) {\n // eslint-disable-next-line no-console\n console.error(\"Failed to parse outputSchema as JSON\", e);\n }\n } else {\n schema = outputSchema;\n }\n\n let list: DescriptionItem[];\n const modals: BrickConf[] = [];\n const context: ContextConf[] = [\n {\n name: BUILTIN_FN_STRINGIFY,\n value: builtinFnStringify,\n },\n ];\n\n function convertArrayOfObjects(\n valueAccessor: string,\n schema: JSONSchemaObject,\n label: string,\n idPrefix: string,\n needContext?: boolean\n ): UseSingleBrickConf {\n const props = Object.entries(schema.properties);\n const key = props.length > 0 ? props[0][0] : null;\n const modalId = normalizeIdentifier(`modal__${idPrefix}`);\n const contextId = normalizeIdentifier(`context__${idPrefix}`);\n if (needContext) {\n context.push({\n name: contextId,\n });\n }\n\n const modal: BrickConf = {\n brick: \"eo-modal\",\n portal: true,\n properties: {\n dataset: {\n modalId,\n },\n width: \"800px\",\n themeVariant: \"elevo\",\n modalTitle: label,\n hideCancelButton: true,\n maskClosable: true,\n keyboard: true,\n },\n };\n\n modals.push(modal);\n\n const columns: {\n key: string;\n dataIndex: string;\n title: string;\n useChildren?: string;\n }[] = [];\n const tableChildren: UseSingleBrickConf[] = [];\n\n for (const [k, v] of props) {\n let useChildren: string | undefined;\n if (v.type === \"array\" && v.items.type === \"object\") {\n useChildren = `[${k}]`;\n tableChildren.push({\n ...convertArrayOfObjects(\n \"DATA.cellData\",\n v.items,\n v.description || upperFirst(k),\n `${idPrefix}__${k}`,\n true\n ),\n slot: useChildren,\n });\n } else if (v.type === \"object\") {\n useChildren = `[${k}]`;\n tableChildren.push({\n ...convertObject(\n \"DATA.cellData\",\n v,\n v.description || upperFirst(k),\n `${idPrefix}__${k}`,\n true\n ),\n slot: useChildren,\n });\n }\n\n columns.push({\n key: k,\n dataIndex: k,\n title: v.description || upperFirst(k),\n useChildren,\n });\n }\n\n modal.children = [\n {\n brick: \"eo-next-table\",\n properties: {\n dataSource: needContext\n ? `<%= { list: CTX.${contextId} } %>`\n : `<% { list: (${valueAccessor}) } %>`,\n columns,\n themeVariant: \"elevo\",\n pagination: false,\n bordered: true,\n },\n children: tableChildren,\n },\n ];\n\n const clickHandler: BrickEventHandler[] = [\n ...((needContext\n ? [\n {\n action: \"context.replace\",\n args: [\n {\n name: contextId,\n value: `<% ${valueAccessor} %>`,\n },\n ],\n },\n ]\n : []) as BrickEventHandler[]),\n {\n target: `[data-root-id=\"${rootId}\"] [data-modal-id=\"${modalId}\"]`,\n method: \"open\",\n },\n ];\n\n return {\n brick: \"span\",\n if: `<% !!(${valueAccessor}) %>`,\n properties: {\n style: {\n display: \"inline-flex\",\n alignItems: \"center\",\n gap: \"0.5em\",\n },\n },\n children: [\n {\n brick: \":forEach\",\n dataSource: `<% (${valueAccessor}).slice(0, ${SHOW_AS_TABLE_THRESHOLD}) %>`,\n children: [\n {\n brick: \"eo-tag\",\n properties: {\n textContent: `<% CTX.${BUILTIN_FN_STRINGIFY}(ITEM, ${JSON.stringify(key)}, ${JSON.stringify(props[0]?.[1].type)}) %>`,\n outline: true,\n style: {\n cursor: \"pointer\",\n },\n },\n events: {\n click: clickHandler,\n },\n },\n ],\n },\n {\n brick: \"eo-link\",\n if: `<% (${valueAccessor}).length > ${SHOW_AS_TABLE_THRESHOLD} %>`,\n properties: {\n textContent: `<% \\`+\\${(${valueAccessor}).length - ${SHOW_AS_TABLE_THRESHOLD}}\\` %>`,\n },\n events: {\n click: clickHandler,\n },\n },\n ],\n };\n }\n\n function convertObject(\n valueAccessor: string,\n schema: JSONSchemaObject,\n label: string,\n idPrefix: string,\n needContext?: boolean\n ): UseSingleBrickConf {\n const props = Object.entries(schema.properties);\n const key = props.length > 0 ? props[0][0] : null;\n const modalId = normalizeIdentifier(`modal__${idPrefix}`);\n const contextId = normalizeIdentifier(`context__${idPrefix}`);\n if (needContext) {\n context.push({\n name: contextId,\n });\n }\n\n modals.push({\n brick: \"eo-modal\",\n portal: true,\n properties: {\n dataset: {\n modalId,\n },\n themeVariant: \"elevo\",\n modalTitle: label,\n hideCancelButton: true,\n maskClosable: true,\n keyboard: true,\n },\n children: [\n {\n brick: \"eo-descriptions\",\n properties: {\n themeVariant: \"elevo\",\n column: 1,\n dataSource: needContext\n ? `<%= CTX.${contextId} %>`\n : `<% ${valueAccessor} %> `,\n list: props.map(([k, v]) => ({\n label: v.description || upperFirst(k),\n field: k,\n })),\n },\n },\n ],\n });\n\n return {\n brick: \"span\",\n if: `<% !!(${valueAccessor}) %>`,\n properties: {\n style: {\n display: \"inline-flex\",\n alignItems: \"center\",\n gap: \"0.5em\",\n },\n },\n children: [\n {\n brick: \"eo-tag\",\n properties: {\n textContent: `<% CTX.${BUILTIN_FN_STRINGIFY}(${valueAccessor}, ${JSON.stringify(key)}, ${JSON.stringify(props[0]?.[1].type)}) %>`,\n outline: true,\n style: {\n cursor: \"pointer\",\n },\n },\n events: {\n click: [\n ...((needContext\n ? [\n {\n action: \"context.replace\",\n args: [\n {\n name: contextId,\n value: `<% ${valueAccessor} %>`,\n },\n ],\n },\n ]\n : []) as BrickEventHandler[]),\n {\n target: `[data-root-id=\"${rootId}\"] [data-modal-id=\"${modalId}\"]`,\n method: \"open\",\n },\n ],\n },\n },\n ],\n };\n }\n\n if (schema?.type === \"object\") {\n const entries = Object.entries<JSONSchema>(schema.properties);\n list = entries.map<DescriptionItem>(([key, def]) => {\n const { description, type } = def;\n const label = description || upperFirst(key);\n\n if (isEmptyValue(detail, key)) {\n return {\n label,\n text: \"\",\n };\n }\n\n if (type === \"array\" && Array.isArray(detail[key])) {\n const { items } = def;\n if (items?.type === \"object\") {\n const contextName = normalizeIdentifier(`context__${key}`);\n context.push({\n name: contextName,\n value: detail[key],\n });\n\n return {\n label,\n useBrick: convertArrayOfObjects(\n `CTX.${contextName}`,\n items,\n label,\n key\n ),\n };\n }\n\n if (!isComplexType(items?.type)) {\n return {\n label,\n text: detail[key].join(\", \"),\n };\n }\n }\n\n if (type === \"object\" && isObject(detail[key])) {\n const contextName = normalizeIdentifier(`context__${key}`);\n context.push({\n name: contextName,\n value: detail[key],\n });\n\n return {\n label,\n useBrick: convertObject(`CTX.${contextName}`, def, label, key),\n };\n }\n\n if (isComplexType(type)) {\n return {\n label,\n text: JSON.stringify(detail[key], null, 2),\n };\n }\n\n const candidate = attrViews?.get(key);\n if (candidate) {\n const brick = convertToStoryboard(candidate, key, {\n ignoreStyle: true,\n });\n if (brick) {\n return {\n label,\n useBrick: brick as UseBrickConf,\n };\n }\n }\n\n return {\n label,\n field: key,\n };\n });\n } else {\n list = Object.keys(detail).map((key) => ({\n label: upperFirst(key),\n field: key,\n }));\n }\n\n return {\n bricks: [\n {\n brick: \"eo-descriptions\",\n properties: {\n themeVariant: \"elevo\",\n column: list.length > LIST_SPLIT_THRESHOLD ? 2 : 1,\n dataSource: detail,\n list,\n },\n },\n ...modals,\n ],\n context,\n };\n}\n\nfunction normalizeIdentifier(identifier: string): string {\n return identifier.replace(/[^a-zA-Z0-9_]+/g, \"_\");\n}\n\nfunction builtinFnStringify(\n value: Record<string, unknown>,\n key: string | null,\n type: JSONSchema[\"type\"] | undefined\n): string {\n if (key === null || isEmptyValue(value, key)) {\n return \"\";\n }\n const v = value[key];\n if (isComplexType(type) && isObject(v)) {\n return JSON.stringify(v, null, 2);\n }\n return String(v);\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]!./FileList.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]!./FileList.module.css\";\n export default content && content.locals ? content.locals : undefined;\n","import React, { useContext } from \"react\";\nimport classNames from \"classnames\";\nimport type { FileInfo } from \"../interfaces\";\nimport styles from \"./FileList.module.css\";\nimport { K, t } from \"../i18n\";\nimport { CanvasContext } from \"../CanvasContext\";\nimport { formatFileSize, getFileTypeAndIcon } from \"../utils/file\";\n\nexport interface FileListProps {\n files: FileInfo[];\n large?: boolean;\n}\n\nexport function FileList({ files, large }: FileListProps) {\n const { setActiveFile } = useContext(CanvasContext);\n\n return (\n <ul className={classNames(styles.files, { [styles.large]: large })}>\n {files.map((file, index) => {\n const [type, icon] = getFileTypeAndIcon(file.mimeType, file.name);\n return (\n <li key={index}>\n <a className={styles.file} onClick={() => setActiveFile(file)}>\n <img className={styles.icon} src={icon} width={26} height={32} />\n <div className={styles.content}>\n <div className={styles.name}>{file.name || t(K.UNTITLED)}</div>\n <div className={styles.metadata}>\n {`${type}${file.size ? ` · ${formatFileSize(file.size)}` : \"\"}`}\n </div>\n </div>\n </a>\n </li>\n );\n })}\n </ul>\n );\n}\n","// istanbul ignore file: experimental\nimport React, {\n Suspense,\n useContext,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport { TextareaAutoResize } from \"@next-shared/form\";\nimport { CmdbObjectApi_getObjectRef } from \"@next-api-sdk/cmdb-sdk\";\nimport classNames from \"classnames\";\nimport moment from \"moment\";\nimport { handleHttpError } from \"@next-core/runtime\";\nimport styles from \"./NodeJob.module.css\";\nimport sharedStyles from \"../shared.module.css\";\nimport type { CmdbInstanceDetailData, FileInfo, Job } from \"../interfaces\";\nimport { K, t } from \"../i18n.js\";\nimport { AsyncWrappedCMDB } from \"../cmdb.js\";\nimport { WrappedButton, WrappedIcon } from \"../bricks.js\";\nimport { HumanConfirm } from \"../HumanConfirm/HumanConfirm.js\";\nimport { HumanAdjustPlan } from \"../HumanAdjustPlan/HumanAdjustPlan.js\";\nimport { CanvasContext } from \"../CanvasContext.js\";\nimport { ToolCallStatus } from \"../ToolCallStatus/ToolCallStatus.js\";\nimport { HumanAdjustPlanResult } from \"../HumanAdjustPlanResult/HumanAdjustPlanResult.js\";\nimport { Topology } from \"../Topology/Topology\";\nimport { EnhancedMarkdown } from \"../EnhancedMarkdown/EnhancedMarkdown\";\nimport { CmdbInstanceDetail } from \"../CmdbInstanceDetail/CmdbInstanceDetail\";\nimport { FileList } from \"../FileList/FileList\";\n\n// 当 markdown 中包含超过 4 列的表格时,对节点使用大尺寸样式\nconst RegExpLargeTableInMarkdown = /^\\s*\\|(?:\\s*:?-+:?\\s*\\|){4,}\\s*$/m;\n\nexport interface NodeJobProps {\n job: Job;\n state?: string;\n active?: boolean;\n}\n\nexport function NodeJob({ job, state, active }: NodeJobProps): JSX.Element {\n const toolTitle = job.toolCall?.annotations?.title;\n const toolName = job.toolCall?.name;\n const askUser = toolName === \"ask_human\";\n const askUserPlan = toolName === \"ask_human_confirming_plan\";\n const generalAskUser = askUser || askUserPlan;\n const knownAskUser =\n (askUser &&\n [\n \"ask_user_more\",\n \"ask_user_confirm\",\n \"ask_user_choose\",\n \"ask_user_select_from_cmdb\",\n \"ask_user_adjust_plan\",\n ].includes(job.toolCall!.arguments?.command as string)) ||\n askUserPlan;\n const loading = state === \"working\" || state === \"submitted\";\n const hasGraph = !!job.componentGraph;\n\n const [toolMarkdownContent, cmdbInstanceDetails, files, sizeLarge] =\n useMemo(() => {\n const contents: string[] = [];\n const instanceDetails: CmdbInstanceDetailData[] = [];\n const files: FileInfo[] = [\n // {\n // name: \"Test.md\",\n // mimeType: \"text/markdown\",\n // size: 10240,\n // uri: \"api/...\",\n // },\n // {\n // name: \"Test.pdf\",\n // },\n ];\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 return (\n <div\n className={classNames(styles[\"node-job\"], {\n [styles.error]: job.isError,\n [styles[\"ask-user\"]]: generalAskUser,\n [styles[\"fit-content\"]]: hasGraph,\n [styles.active]: active,\n [styles.large]: sizeLarge,\n })}\n >\n <div className={styles.background} />\n <div className={styles.heading}>\n {generalAskUser ? (\n <WrappedIcon\n className={styles.icon}\n lib=\"fa\"\n prefix=\"fas\"\n // icon=\"person-circle-question\"\n icon=\"user-check\"\n />\n ) : job.toolCall ? (\n <WrappedIcon\n className={styles.icon}\n lib=\"antd\"\n theme=\"outlined\"\n icon=\"tool\"\n />\n ) : (\n <WrappedIcon className={styles.icon} lib=\"easyops\" icon=\"robot\" />\n )}\n <div\n className={classNames(styles.tool, {\n [sharedStyles[\"shine-text\"]]: loading,\n })}\n >\n {toolTitle || (toolName ? t(K[toolName as K]) || toolName : \"Elevo\")}\n </div>\n <div className={styles.time}>\n {job.startTime && moment(job.startTime * 1000).format(\"MM-DD HH:mm\")}\n </div>\n </div>\n <div\n className={classNames(styles.body, {\n // [styles.scrollable]: !generalAskUser && !experimental_showTables,\n })}\n >\n {knownAskUser ? (\n <>\n {(askUserPlan || !!job.toolCall!.arguments?.question) && (\n <div\n className={`${styles.message} ${sharedStyles.markdown} ${styles[\"role-assistant\"]}`}\n >\n <EnhancedMarkdown\n content={\n askUserPlan\n ? t(K.CONFIRMING_PLAN_TIPS)\n : (job.toolCall!.arguments?.question as string)\n }\n />\n </div>\n )}\n {state === \"input-required\" &&\n (job.toolCall!.arguments!.command === \"ask_user_more\" ? (\n <HumanInputComponent jobId={job.id} />\n ) : job.toolCall!.arguments!.command === \"ask_user_confirm\" ? (\n <HumanConfirm\n jobId={job.id}\n confirmText={job.toolCall!.arguments!.confirm_text as string}\n cancelText={job.toolCall!.arguments!.cancel_text as string}\n />\n ) : job.toolCall!.arguments!.command === \"ask_user_choose\" ? (\n <HumanChooseComponent\n jobId={job.id}\n options={job.toolCall!.arguments!.options as string[]}\n />\n ) : job.toolCall!.arguments!.command ===\n \"ask_user_select_from_cmdb\" ? (\n <HumanSelectFromCmdb\n jobId={job.id}\n objectId={job.toolCall!.arguments!.objectId as string}\n attrId={job.toolCall!.arguments!.attrId as string}\n />\n ) : askUserPlan ? (\n <HumanAdjustPlan\n jobId={job.id}\n steps={job.toolCall!.arguments!.steps as string[]}\n />\n ) : null)}\n </>\n ) : askUser ? (\n <div className={`${styles.message} ${styles[\"role-assistant\"]}`}>\n Unexpected ask_human command:{\" \"}\n {JSON.stringify(job.toolCall!.arguments?.command ?? null)}\n </div>\n ) : null}\n {!generalAskUser && job.toolCall && <ToolCallStatus job={job} />}\n {askUserPlan && state !== \"input-required\" ? (\n <HumanAdjustPlanResult job={job} />\n ) : (\n job.messages?.map((message, index) =>\n message.role === \"tool\" && !generalAskUser ? null : (\n <div\n key={index}\n className={classNames(styles.message, sharedStyles.markdown, {\n [styles[\"role-user\"]]: message.role === \"tool\",\n })}\n >\n {message.parts?.map((part, partIndex) => (\n <React.Fragment key={partIndex}>\n {part.type === \"text\" && (\n <EnhancedMarkdown content={part.text} />\n )}\n </React.Fragment>\n ))}\n </div>\n )\n )\n )}\n {toolMarkdownContent && (\n <div\n className={classNames(styles.message, sharedStyles.markdown)}\n style={{ padding: \"0 8px\" }}\n >\n <EnhancedMarkdown content={toolMarkdownContent} />\n </div>\n )}\n {cmdbInstanceDetails.map((detail, index) => (\n <CmdbInstanceDetail key={index} {...detail} />\n ))}\n {hasGraph && !job.componentGraph!.initial && (\n <Topology\n componentGraph={job.componentGraph!}\n filter=\"minimal\"\n autoSize\n />\n )}\n {files.length > 0 && <FileList files={files} large={sizeLarge} />}\n </div>\n </div>\n );\n}\n\nfunction HumanInputComponent({ jobId }: { jobId: string }): JSX.Element {\n const containerRef = useRef<HTMLDivElement>(null);\n const { humanInput } = useContext(CanvasContext);\n\n return (\n <div ref={containerRef}>\n <TextareaAutoResize\n className={styles[\"human-input\"]}\n containerRef={containerRef}\n autoResize\n minRows={2}\n borderSize={0}\n paddingSize={20}\n placeholder={t(K.TYPE_YOUR_MESSAGE_HERE)}\n submitWhen=\"enter-without-shift\"\n onSubmit={(e) => {\n const input = e.currentTarget.value;\n if (input) {\n humanInput(jobId, input);\n }\n }}\n />\n </div>\n );\n}\n\nfunction HumanChooseComponent({\n jobId,\n options,\n}: {\n jobId: string;\n options?: string[];\n}): JSX.Element {\n const { humanInput } = useContext(CanvasContext);\n\n return (\n <div\n style={{\n marginTop: \"1em\",\n display: \"flex\",\n flexDirection: \"column\",\n gap: \"0.5em\",\n }}\n >\n {options?.map((option, index) => (\n <WrappedButton\n key={index}\n themeVariant=\"elevo\"\n onClick={() => {\n humanInput(jobId, option);\n }}\n >\n {option}\n </WrappedButton>\n ))}\n </div>\n );\n}\n\nfunction HumanSelectFromCmdb({\n jobId,\n objectId,\n attrId,\n}: {\n jobId: string;\n objectId?: string;\n attrId?: string;\n}): JSX.Element {\n const { humanInput } = useContext(CanvasContext);\n const [objectList, setObjectList] = useState<any[] | null>(null);\n\n useEffect(() => {\n if (!objectId) {\n return;\n }\n let ignore = false;\n (async () => {\n try {\n const objects = (\n await CmdbObjectApi_getObjectRef({ ref_object: objectId })\n ).data;\n if (!ignore) {\n setObjectList(objects);\n }\n } catch (e) {\n // eslint-disable-next-line no-console\n console.error(\"Fetch object list failed:\", e);\n handleHttpError(e);\n }\n })();\n return () => {\n ignore = true;\n };\n }, [objectId]);\n\n if (!objectId) {\n return (\n <div style={{ marginTop: \"1em\" }}>\n Can not call ask_user_select_from_cmdb without objectId\n </div>\n );\n }\n // if (!objectId || !attrId) {\n // return <div style={{ marginTop: \"1em\" }}>Can not call ask_user_select_from_cmdb without {!objectId ? \"objectId\" : \"attrId\"}</div>;\n // }\n\n const fieldId =\n !attrId || (attrId === \"instanceId\" && objectId === \"HOST\") ? \"ip\" : attrId;\n\n return (\n <div style={{ marginTop: \"1em\" }}>\n <Suspense>\n <AsyncWrappedCMDB\n objectList={objectList}\n objectId={objectId}\n fieldId={fieldId}\n onChangeV2={(e) => {\n if (!e.detail.length) {\n return;\n }\n humanInput(\n jobId,\n e.detail.map((i) => i[fieldId /* ?? \"instanceId\" */]).join(\"\\n\")\n );\n }}\n />\n </Suspense>\n </div>\n );\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, `.node-end--yzRaOZnC{display:flex;flex-direction:column;align-items:center}.content--iXSH199p{display:flex;align-items:center;margin-bottom:20px}.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, `.toolbar--ELlNUAti{position:absolute;display:flex;align-items:center;padding:3px 5px;-webkit-user-select:none;user-select:none;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)}.divider--JeH8feaX{background:rgba(0,0,0,0.15);width:1px;height:16px}.toolbar--ELlNUAti > :not(:last-child){margin-right:6px}`, \"\"]);\n// Exports\n___CSS_LOADER_EXPORT___.locals = {\n\t\"toolbar\": `toolbar--ELlNUAti`,\n\t\"divider\": `divider--JeH8feaX`\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, `.code-block--B8VszXyv{position:relative}.copy--xhIT7aTz{position:absolute;top:8px;right:8px}.code-block--B8VszXyv:not(:hover) .copy--xhIT7aTz{display:none}.success--y_M0QrXy::part(button){color:var(--color-success)}.failed--WtJHXSP6::part(button){color:var(--color-error)}.code-block--B8VszXyv.mermaid{display:flex;justify-content:center}`, \"\"]);\n// Exports\n___CSS_LOADER_EXPORT___.locals = {\n\t\"code-block\": `code-block--B8VszXyv`,\n\t\"copy\": `copy--xhIT7aTz`,\n\t\"success\": `success--y_M0QrXy`,\n\t\"failed\": `failed--WtJHXSP6`\n};\nexport default ___CSS_LOADER_EXPORT___;\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]!./ExpandedView.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]!./ExpandedView.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 classNames from \"classnames\";\nimport { unstable_createRoot } from \"@next-core/runtime\";\nimport { uniqueId } from \"lodash\";\nimport type { GraphGeneratedView } from \"../interfaces\";\nimport styles from \"./ExpandedView.module.css\";\nimport { CanvasContext } from \"../CanvasContext\";\nimport { convertView } from \"../utils/converters/convertView\";\nimport { WrappedIcon, WrappedIconButton } from \"../bricks\";\nimport { createPortal } from \"../utils/createPortal\";\nimport { ICON_CLOSE } from \"../constants\";\nimport { isJsxView } from \"../utils/jsx-converters/isJsxView\";\nimport { convertJsx } from \"../utils/jsx-converters/convertJsx\";\n\nexport interface ExpandedViewProps {\n views: GraphGeneratedView[];\n}\n\nexport function ExpandedView({ views }: ExpandedViewProps) {\n const rootId = useMemo(() => uniqueId(), []);\n const { activeExpandedViewJobId, setActiveExpandedViewJobId } =\n useContext(CanvasContext);\n const viewportRef = useRef<HTMLDivElement>(null);\n const containerRef = useRef<HTMLDivElement>(null);\n const rootRef = useRef<Awaited<\n ReturnType<typeof unstable_createRoot>\n > | null>(null);\n const view = views.find((v) => v.id === activeExpandedViewJobId)?.view;\n\n const sizeSmall = useMemo(() => {\n let hasForm = false;\n if (view && isJsxView(view)) {\n for (const component of view?.components ?? []) {\n switch (component.name) {\n case \"form\":\n case \"button\":\n hasForm = true;\n break;\n default:\n return false;\n }\n }\n } else {\n for (const component of view?.components ?? []) {\n if (!component.parentComponentId) {\n switch (component.componentName) {\n case \"form\":\n case \"button\":\n hasForm = true;\n break;\n default:\n return false;\n }\n }\n }\n }\n return hasForm;\n }, [view]);\n\n useEffect(() => {\n const container = containerRef.current;\n if (!container) {\n return;\n }\n const portal = createPortal(rootId);\n const root = unstable_createRoot(container, {\n portal,\n supportsUseChildren: true,\n } as any);\n rootRef.current = root;\n\n return () => {\n root.unmount();\n portal.remove();\n rootRef.current = null;\n };\n }, [rootId]);\n\n const [loading, setLoading] = useState(true);\n\n useEffect(() => {\n let ignore = false;\n (async () => {\n setLoading(true);\n try {\n const convertedView = view\n ? await (isJsxView(view)\n ? convertJsx(view, { rootId, expanded: true })\n : convertView(view, { rootId, expanded: true }))\n : null;\n if (ignore) {\n return;\n }\n await rootRef.current?.render(convertedView ?? []);\n } catch (error) {\n // eslint-disable-next-line no-console\n console.error(\"Failed to render view:\", error);\n }\n if (!ignore) {\n setLoading(false);\n }\n })();\n\n return () => {\n ignore = true;\n };\n }, [rootId, view]);\n\n const handleClose = useCallback(() => {\n setActiveExpandedViewJobId(null);\n }, [setActiveExpandedViewJobId]);\n\n useEffect(() => {\n setTimeout(() => {\n viewportRef.current?.focus();\n }, 0);\n }, []);\n\n const handleKeydown = useCallback(\n (event: React.KeyboardEvent) => {\n if (event.key === \"Escape\") {\n event.stopPropagation();\n handleClose();\n }\n },\n [handleClose]\n );\n\n return (\n <div\n className={styles[\"expanded-view\"]}\n tabIndex={-1}\n ref={viewportRef}\n onKeyDown={handleKeydown}\n >\n {loading && (\n <div className={styles.loading}>\n <WrappedIcon lib=\"antd\" icon=\"loading-3-quarters\" spinning />\n </div>\n )}\n <div\n className={classNames(styles.body, {\n [styles.small]: sizeSmall,\n })}\n ref={containerRef}\n data-root-id={rootId}\n />\n <ul className={styles.nav}>\n {views.map((view) => (\n <li key={view.id}>\n <button\n className={classNames(styles[\"nav-button\"], {\n [styles.active]: activeExpandedViewJobId === view.id,\n })}\n >\n {view.view.title}\n </button>\n </li>\n ))}\n </ul>\n <WrappedIconButton\n icon={ICON_CLOSE}\n className={styles.close}\n onClick={handleClose}\n />\n </div>\n );\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, `.zoom-bar--MTw5VGPl{left:20px;bottom:20px}@media (max-width: 1079px){.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","import { pipes } from \"@easyops-cn/brick-next-pipes\";\nimport fileText from \"../images/file-text@2x.png\";\nimport filePdf from \"../images/file-pdf@2x.png\";\nimport fileOther from \"../images/file-other@2x.png\";\n\nexport function formatFileSize(size: number) {\n const [value, unit] = pipes.unitFormat(size, \"bytes\", 1);\n const number = +value;\n return `${number > 100 ? Math.round(number) : number} ${unit}`;\n}\n\nexport function getFileTypeAndIcon(\n mimeType: string | undefined,\n filename: string | undefined\n): [type: string, icon: string] {\n const type = mimeType || getMimeTypeByFilename(filename);\n\n switch (type) {\n case \"text/markdown\":\n return [\"Markdown\", fileText];\n case \"application/pdf\":\n return [\"PDF\", filePdf];\n }\n\n if (type.startsWith(\"text/\")) {\n return [\"Text\", fileText];\n }\n\n return [\"File\", fileOther];\n}\n\nexport function getMimeTypeByFilename(filename: string | undefined): string {\n let ext = \"\";\n const matches = filename?.match(/\\.([^.]+)$/);\n if (matches) {\n ext = matches[1].toLowerCase();\n }\n switch (ext) {\n case \"md\":\n return \"text/markdown\";\n case \"pdf\":\n return \"application/pdf\";\n default:\n return \"unknown\";\n }\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, `.content--zNKsww2N{margin:0 auto;padding:16px 0;max-width:800px}.toolbar--YWbNSe1o{display:flex;align-items:center;gap:8px}.loading--yng_2TL3{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);font-size:48px;color:var(--text-color-secondary)}.error--a2Er1bw7{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);padding-bottom:20%;display:flex;flex-direction:column;align-items:center;color:#8c8c8c}.error--a2Er1bw7 eo-button{margin:0 14px}.embed--y9Wq2k7W{display:block}`, \"\"]);\n// Exports\n___CSS_LOADER_EXPORT___.locals = {\n\t\"content\": `content--zNKsww2N`,\n\t\"toolbar\": `toolbar--YWbNSe1o`,\n\t\"loading\": `loading--yng_2TL3`,\n\t\"error\": `error--a2Er1bw7`,\n\t\"embed\": `embed--y9Wq2k7W`\n};\nexport default ___CSS_LOADER_EXPORT___;\n","import { createContext, type Dispatch } from \"react\";\nimport type { FileInfo, SizeTuple } from \"./interfaces\";\n\nexport interface CanvasContextValue {\n humanInput: (jobId: string, input: string) => void;\n onShare: () => void;\n onPause: () => void;\n onResume: () => void;\n onCancel: () => void;\n onNodeResize: (id: string, size: SizeTuple | null) => void;\n activeToolCallJobId: string | null;\n setActiveToolCallJobId: Dispatch<React.SetStateAction<string | null>>;\n setActiveNodeId: Dispatch<React.SetStateAction<string | null>>;\n hoverOnScrollableContent: boolean;\n setHoverOnScrollableContent: Dispatch<React.SetStateAction<boolean>>;\n activeExpandedViewJobId: string | null;\n setActiveExpandedViewJobId: Dispatch<React.SetStateAction<string | null>>;\n supports?: Record<string, boolean>;\n setActiveFile: Dispatch<React.SetStateAction<FileInfo | null>>;\n}\n\nexport const CanvasContext = createContext<CanvasContextValue>({\n humanInput: () => {},\n onShare: () => {},\n onPause: () => {},\n onResume: () => {},\n onCancel: () => {},\n onNodeResize: () => {},\n activeToolCallJobId: null,\n setActiveToolCallJobId: () => {},\n setActiveNodeId: () => {},\n hoverOnScrollableContent: false,\n setHoverOnScrollableContent: () => {},\n activeExpandedViewJobId: null,\n setActiveExpandedViewJobId: () => {},\n setActiveFile: () => {},\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]!./CodeBlock.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]!./CodeBlock.module.css\";\n export default content && content.locals ? content.locals : undefined;\n","import React, { useCallback, useEffect, useRef, useState } from \"react\";\nimport classNames from \"classnames\";\nimport { copyToClipboard, WrappedButton } from \"../bricks\";\nimport styles from \"./CodeBlock.module.css\";\n\nconst COPY_BUTTON_ICON = {\n lib: \"fa\",\n prefix: \"far\",\n icon: \"copy\",\n} as const;\n\nconst COPY_BUTTON_ICON_SUCCESS = {\n lib: \"fa\",\n prefix: \"fas\",\n icon: \"check\",\n} as const;\n\nconst COPY_BUTTON_ICON_FAILED = {\n lib: \"fa\",\n prefix: \"fas\",\n icon: \"triangle-exclamation\",\n} as const;\n\nexport type CodeBlockProps = JSX.IntrinsicElements[\"pre\"] & {\n node?: unknown;\n};\n\nexport function CodeBlock({ children, node, ...props }: CodeBlockProps) {\n const ref = useRef<HTMLPreElement>(null);\n const isCodeBlock = props.className?.includes(\"language-\");\n const [state, setState] = useState<\"idle\" | \"success\" | \"failed\">(\"idle\");\n const timerRef = useRef<ReturnType<typeof setTimeout> | undefined>();\n\n const handleCopy = useCallback(async () => {\n clearTimeout(timerRef.current);\n setState(\"idle\");\n const content = ref.current?.querySelector(\"code\")?.textContent;\n if (content) {\n try {\n await copyToClipboard(content);\n setState(\"success\");\n } catch (error) {\n // eslint-disable-next-line no-console\n console.error(\"Failed to copy code block content to clipboard.\", error);\n setState(\"failed\");\n }\n\n timerRef.current = setTimeout(() => {\n setState(\"idle\");\n }, 2000);\n }\n }, []);\n\n useEffect(() => {\n return () => {\n clearTimeout(timerRef.current);\n };\n }, []);\n\n return (\n <pre\n {...props}\n className={classNames(props.className, styles[\"code-block\"])}\n ref={ref}\n >\n {children}\n {isCodeBlock && (\n <WrappedButton\n themeVariant=\"elevo\"\n className={classNames(styles.copy, {\n [styles.success]: state === \"success\",\n [styles.failed]: state === \"failed\",\n })}\n onClick={handleCopy}\n icon={\n state === \"success\"\n ? COPY_BUTTON_ICON_SUCCESS\n : state === \"failed\"\n ? COPY_BUTTON_ICON_FAILED\n : COPY_BUTTON_ICON\n }\n />\n )}\n </pre>\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]!./toolbar.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]!./toolbar.module.css\";\n export default content && content.locals ? content.locals : undefined;\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}.detail--JiiWugxP .body--H_Wy7M2z code[class*=\"language-\"],.detail--JiiWugxP .body--H_Wy7M2z pre[class*=\"language-\"]{background:#ffffff}.detail--JiiWugxP .body--H_Wy7M2z pre[class*=\"language-\"]{border-radius:9px;border:1px solid #ccd1de}.detail--JiiWugxP .body--H_Wy7M2z pre.fallback--mxkVhIEE{white-space:pre-wrap;background:#fef5f3}.progress-container--tFUAQo73,\n.stream-message--G0tAm9aa{border-radius:9px;border:1px solid #ccd1de;background:#ffffff}.progress-container--tFUAQo73{padding:6px 2px}.fallback--mxkVhIEE{background:#fef5f3}.stream-message--G0tAm9aa{padding:1em;margin:0.5em 0}`, \"\"]);\n// Exports\n___CSS_LOADER_EXPORT___.locals = {\n\t\"detail\": `detail--JiiWugxP`,\n\t\"body\": `body--H_Wy7M2z`,\n\t\"fallback\": `fallback--mxkVhIEE`,\n\t\"progress-container\": `progress-container--tFUAQo73`,\n\t\"stream-message\": `stream-message--G0tAm9aa`\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, `.shine-text--t2t9tIJp{color:transparent;background:linear-gradient(to right,var(--shine-text-color) 0%,var(--shine-text-color) 40%,var(--shine-text-highlight-color) 50%,var(--shine-text-color) 60%,var(--shine-text-color) 100%);background-size:200% 100%;-webkit-background-clip:text;background-clip:text;animation:shineText--ycIJ4nxc 2s infinite linear}@keyframes shineText--ycIJ4nxc{0%{background-position:-50% 50%}100%{background-position:-250% 50%}}.markdown--t5EHw6k4 a{color:var(--elevo-color-brand)}.markdown--t5EHw6k4 a:hover{color:var(--elevo-color-brand-hover)}.markdown--t5EHw6k4 a:active{color:var(--elevo-color-brand-active)}.markdown--t5EHw6k4 code[class*=\"language-\"],.markdown--t5EHw6k4 pre[class*=\"language-\"]{background:hsl(230,1%,98%);color:hsl(230,8%,24%);font-family:\"Fira Code\",\"Fira Mono\",Menlo,Consolas,\"DejaVu Sans Mono\",monospace;direction:ltr;text-align:left;white-space:pre;word-spacing:normal;word-break:normal;line-height:1.5;-moz-tab-size:2;tab-size:2;-webkit-hyphens:none;hyphens:none;font-size:13px}.markdown--t5EHw6k4 code[class*=\"language-\"]::selection,.markdown--t5EHw6k4 code[class*=\"language-\"] *::selection,.markdown--t5EHw6k4 pre[class*=\"language-\"] *::selection{background:hsl(230,1%,90%);color:inherit}.markdown--t5EHw6k4 pre[class*=\"language-\"]{padding:1em;margin:0.5em 0;overflow-x:auto;border-radius:9px}.markdown--t5EHw6k4 :not(pre) > code[class*=\"language-\"]{padding:0.2em 0.3em;border-radius:9px;white-space:normal}.markdown--t5EHw6k4 .token.comment,.markdown--t5EHw6k4 .token.prolog,.markdown--t5EHw6k4 .token.cdata{color:hsl(230,4%,64%)}.markdown--t5EHw6k4 .token.doctype,.markdown--t5EHw6k4 .token.punctuation,.markdown--t5EHw6k4 .token.entity{color:hsl(230,8%,24%)}.markdown--t5EHw6k4 .token.attr-name,.markdown--t5EHw6k4 .token.class-name,.markdown--t5EHw6k4 .token.boolean,.markdown--t5EHw6k4 .token.constant,.markdown--t5EHw6k4 .token.number,.markdown--t5EHw6k4 .token.atrule{color:hsl(35,99%,36%)}.markdown--t5EHw6k4 .token.keyword{color:hsl(301,63%,40%)}.markdown--t5EHw6k4 .token.property,.markdown--t5EHw6k4 .token.tag,.markdown--t5EHw6k4 .token.symbol,.markdown--t5EHw6k4 .token.deleted,.markdown--t5EHw6k4 .token.important{color:hsl(5,74%,59%)}.markdown--t5EHw6k4 .token.selector,.markdown--t5EHw6k4 .token.string,.markdown--t5EHw6k4 .token.char,.markdown--t5EHw6k4 .token.builtin,.markdown--t5EHw6k4 .token.inserted,.markdown--t5EHw6k4 .token.regex,.markdown--t5EHw6k4 .token.attr-value,.markdown--t5EHw6k4 .token.attr-value > .token.punctuation{color:hsl(119,34%,47%)}.markdown--t5EHw6k4 .token.variable,.markdown--t5EHw6k4 .token.operator,.markdown--t5EHw6k4 .token.function{color:hsl(221,87%,60%)}.markdown--t5EHw6k4 .token.url{color:hsl(198,99%,37%)}.markdown--t5EHw6k4 .token.attr-value > .token.punctuation.attr-equals,.markdown--t5EHw6k4 .token.special-attr > .token.attr-value > .token.value.css{color:hsl(230,8%,24%)}.markdown--t5EHw6k4 .language-css .token.selector{color:hsl(5,74%,59%)}.markdown--t5EHw6k4 .language-css .token.property{color:hsl(230,8%,24%)}.markdown--t5EHw6k4 .language-css .token.function,.markdown--t5EHw6k4 .language-css .token.url > .token.function{color:hsl(198,99%,37%)}.markdown--t5EHw6k4 .language-css .token.url > .token.string.url{color:hsl(119,34%,47%)}.markdown--t5EHw6k4 .language-css .token.important,.markdown--t5EHw6k4 .language-css .token.atrule .token.rule{color:hsl(301,63%,40%)}.markdown--t5EHw6k4 .language-javascript .token.operator{color:hsl(301,63%,40%)}.markdown--t5EHw6k4 .language-javascript .token.template-string > .token.interpolation > .token.interpolation-punctuation.punctuation{color:hsl(344,84%,43%)}.markdown--t5EHw6k4 .language-json .token.operator{color:hsl(230,8%,24%)}.markdown--t5EHw6k4 .language-json .token.null.keyword{color:hsl(35,99%,36%)}.markdown--t5EHw6k4 .language-markdown .token.url,.markdown--t5EHw6k4 .language-markdown .token.url > .token.operator,.markdown--t5EHw6k4 .language-markdown .token.url-reference.url > .token.string{color:hsl(230,8%,24%)}.markdown--t5EHw6k4 .language-markdown .token.url > .token.content{color:hsl(221,87%,60%)}.markdown--t5EHw6k4 .language-markdown .token.url > .token.url,.markdown--t5EHw6k4 .language-markdown .token.url-reference.url{color:hsl(198,99%,37%)}.markdown--t5EHw6k4 .language-markdown .token.blockquote.punctuation,.markdown--t5EHw6k4 .language-markdown .token.hr.punctuation{color:hsl(230,4%,64%);font-style:italic}.markdown--t5EHw6k4 .language-markdown .token.code-snippet{color:hsl(119,34%,47%)}.markdown--t5EHw6k4 .language-markdown .token.bold .token.content{color:hsl(35,99%,36%)}.markdown--t5EHw6k4 .language-markdown .token.italic .token.content{color:hsl(301,63%,40%)}.markdown--t5EHw6k4 .language-markdown .token.strike .token.content,.markdown--t5EHw6k4 .language-markdown .token.strike .token.punctuation,.markdown--t5EHw6k4 .language-markdown .token.list.punctuation,.markdown--t5EHw6k4 .language-markdown .token.title.important > .token.punctuation{color:hsl(5,74%,59%)}.markdown--t5EHw6k4 .token.bold{font-weight:bold}.markdown--t5EHw6k4 .token.comment,.markdown--t5EHw6k4 .token.italic{font-style:italic}.markdown--t5EHw6k4 .token.entity{cursor:help}.markdown--t5EHw6k4 .token.namespace{opacity:0.8}.markdown--t5EHw6k4 table{width:100%;overflow-x:auto;border-collapse:collapse}.markdown--t5EHw6k4 tr{border-top:1px solid #ccd1de}.markdown--t5EHw6k4 td,.markdown--t5EHw6k4 th{border:1px solid #ccd1de;padding:6px 13px}.markdown--t5EHw6k4{overflow-wrap:break-word}.markdown--t5EHw6k4:not(:first-child){margin-top:6px}.markdown--t5EHw6k4 p{margin:1em 0}.markdown--t5EHw6k4 > :first-child{margin-top:0}.markdown--t5EHw6k4 > :last-child{margin-bottom:0}.table-container--hekbaxrD{padding:8px 8px 10px;border-radius:12px;border:1px solid #e2e2ec;background:#ffffff}.table-container--hekbaxrD:not(:first-child){margin-top:6px}`, \"\"]);\n// Exports\n___CSS_LOADER_EXPORT___.locals = {\n\t\"shine-text\": `shine-text--t2t9tIJp`,\n\t\"shineText\": `shineText--ycIJ4nxc`,\n\t\"markdown\": `markdown--t5EHw6k4`,\n\t\"table-container\": `table-container--hekbaxrD`\n};\nexport default ___CSS_LOADER_EXPORT___;\n","import dagre from \"@dagrejs/dagre\";\nimport { useMemo, useRef } from \"react\";\nimport type {\n NodePosition,\n NodeRect,\n GraphEdge,\n GraphNode,\n SizeTuple,\n TaskState,\n} from \"./interfaces\";\nimport {\n EDGE_SEP,\n END_NODE_ID,\n NODE_SEP,\n RANK_SEP,\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 state?: TaskState;\n}\n\nexport function useLayout({\n rawNodes: _rawNodes,\n rawEdges: _rawEdges,\n sizeMap,\n state,\n}: UseLayoutOptions) {\n const memoizedPositionsRef = useRef<Map<string, NodePosition> | null>(null);\n const completed = state === \"completed\";\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 hasTarget = completed\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 (completed && !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 initialNodes.push({\n id: END_NODE_ID,\n type: \"end\",\n });\n initialEdges.push(\n ...finishedNodeIds.map((id) => ({\n source: id,\n target: END_NODE_ID,\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 }, [completed, _rawEdges, _rawNodes]);\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"],"names":["___CSS_LOADER_EXPORT___","push","module","id","locals","VALID_IDENTIFIER_REG","getMemberAccessor","property","propertyStr","String","test","JSON","stringify","pick","_","convertToStoryboard","config","attr","options","lowLevelConvertToStoryboard","attrAccessor","brickItem","display","getPlainBrick","type","countOnly","brick","children","_config$style","_config$style2","_config$style3","_config$style4","_config$style5","colorSuffix","style","variant","valueAccessor","getValueAccessor","properties","textContent","size","getTagSize","color","background","palette","replaceAll","outline","getIconBrick","alignItems","gap","maxItems","Number","dataSource","if","_config$true$icon","_config$true","_config$false$icon","_config$false","_config$true2","_config$false2","trueIcon","true","icon","falseIcon","false","trueStyle","getPlainStyle","falseStyle","lib","prefix","category","theme","_config$formatter","value","formatter","format","undefined","isCostTime","tag","_config$true$text","_config$true3","_config$false$text","_config$false3","_config$true4","_config$false4","trueContent","text","falseContent","field","configStyle","ignoreStyle","fontSize","fontWeight","K","NS","locales","en","YES","NO","CONFIRM","ADD_STEP","RESET_PLAN","PLAN_COMPLETED","TASK_COMPLETED","SHARE","TYPE_YOUR_MESSAGE_HERE","ARGUMENTS","PROCESS","RESPONSE","CONFIRMING_PLAN_TIPS","PAUSE_THE_TASK","RESUME_THE_TASK","CANCEL_THE_TASK","CONFIRM_TO_CANCEL_THE_TASK_TITLE","CONFIRM_TO_CANCEL_THE_TASK_CONTENT","BACK_TO_CENTER","ZOOM_IN","ZOOM_OUT","FULLSCREEN","REPLAYING","REPLAY_COMPLETED","SKIP_TO_RESULTS","WATCH_AGAIN","SEND_MESSAGE","UNTITLED","FILE_PREVIEW_UNPREVIEWABLE_TIP_PREFIX","FILE_PREVIEW_UNPREVIEWABLE_TIP_SUFFIX","DOWNLOAD","cmdb_create_app_system","cmdb_create_service_set","cmdb_append_host_to_service_set","cmdb_create_agent_scan_job","cmdb_service_node_clustering","ask_human","ask_human_confirming_plan","zh","t","i18n","getFixedT","styleTagTransform","setAttributes","insert","domAPI","insertStyleElement","ToolProgressLine","_ref","progress","failed","data","React","className","classNames","styles","step","key","axis","line","dot","count","total","description","message","cache","Map","async","getModelObjectInstanceId","objectId","has","get","promise","list","InstanceApi_postSearchV3","fields","query","$eq","page_size","length","instanceId","doGetModelObjectInstanceId","set","DEFAULT_SCALE_RANGE_MIN","DEFAULT_SCALE_RANGE_MAX","START_NODE_ID","END_NODE_ID","REQUIREMENT_NODE_ID","CANVAS_PADDING_TOP","CANVAS_PADDING_RIGHT","CANVAS_PADDING_BOTTOM","CANVAS_PADDING_LEFT","RANK_SEP","NODE_SEP","EDGE_SEP","DONE_STATES","GENERAL_DONE_STATES","IS_MAC","_userAgentData$platfo","_userAgentData","navigator","userAgentData","platform","userAgent","ICON_CLOSE","ICON_LOADING","spinning","WrappedEasyOpsAvatar","wrapBrick","NodeRequirement","content","startTime","loading","active","username","useMemo","auth","getAuth","heading","avatar","nameOrInstanceId","showName","time","moment","body","viewBox","width","height","d","inner","___CSS_LOADER_URL_IMPORT_0___","URL","___CSS_LOADER_URL_REPLACEMENT_0___","NodeStart","createPortal","rootId","portal","document","createElement","dataset","position","append","ICON_BACK_TO_CENTER","ICON_ZOOM_OUT","ICON_ZOOM_IN","ZoomBar","scale","onScaleChange","onReCenter","handleZoomIn","useCallback","handleZoomOut","toolbarStyles","toolbar","WrappedIconButton","onClick","title","divider","findObjectIdByUsedDataContexts","usedContexts","dataSources","variables","dataSourceToObjectIdMap","api","name","variableDepsMap","variable","deps","strictCollectMemberUsage","processedContexts","Set","find","context","add","dataSourceObjectId","variableDeps","dep","convertDescriptions","view","columns","restProps","parsedDataSource","parseDataSource","attrViews","getPreGeneratedAttrViews","configuredItems","item","candidate","slot","isString","embedded","map","label","useChildren","column","expanded","themeVariant","Array","from","values","COLORS","convertHexColorToRGBA","alpha","hex","slice","bigint","parseInt","convertTable","component","_columns$","rowKey","pagination","configuredColumns","dataIndex","scrollConfig","x","bordered","convertEventAction","handler","eventDetailAccessor","action","args","payload","Object","prototype","hasOwnProperty","call","_handler$callback","params","success","callback","concat","cb","filter","Boolean","useProvider","version","error","target","componentId","method","convertView","_view$dataSources","_view$variables","componentMap","childrenMap","rootComponents","convertedComponents","components","parentComponentId","convert","_brick","_brick$properties","_brick$properties2","_brick$properties2$da","_childrenMap$get","Error","componentName","props","convertList","groupField","_groupField","widgets","expression","chartData","mergedWidgets","metricGroups","getPreGeneratedMetricGroups","mergedMetrics","metricIds","w","metric","widget","mergedWidget","group","g","metrics","includes","relevantMetrics","m","counterMetric","counter","groupTitle","metricId","delete","colorCursor","gridTemplateColumns","_widget$relevantMetri","_widget$relevantMetri2","precision","min","max","colorCount","colors","i","unit","chart","xField","yFields","yField","forceAbsoluteNumbers","series","isNegative","timeFormat","areaOptions","fill","yAxis","shape","areaShape","legends","tooltip","marker","stroke","lineWidth","shadowColor","shadowBlur","shadowOffsetX","shadowOffsetY","domStyles","join","boxShadow","borderRadius","border","backdropFilter","padding","marginBottom","flexDirection","lineColor","showArea","convertDashboard","convertButton","convertForm","trim","convertFormItem","confirmText","cancelText","modalTitle","keyboard","convertModal","events","eventListeners","eventListener","event","click","search","keys","convertEvents","Promise","all","_brick$children","resolve","translate","limit","limitBy","order","displayName","transform","track","_ref2","_list$findLast","findLast","pipes","unitFormat","isArray","grouped","groupedList","displayNameList","metricNames","metricName","_displayNameList$find","_displayNameList$find2","metric_name","metric_display_name","every","withBox","useAutoCenter","nodes","sizeReady","zoomer","rootRef","pushZoomTransition","centered","setCentered","useState","reCenterRef","useRef","useEffect","root","current","left","y","top","mergeRects","node","right","bottom","clientWidth","diffY","clientHeight","k","duration","EXPRESSION_PREFIX_REG","EXPRESSION_SUFFIX_REG","replace","NodeView","job","uniqueId","setHoverOnScrollableContent","setActiveExpandedViewJobId","useContext","CanvasContext","ref","generatedView","container","unstable_createRoot","supportsUseChildren","unmount","remove","setLoading","ignore","_rootRef$current","convertedView","isJsxView","convertJsx","render","console","sizeLarge","_view$components","_component$properties","_view$components2","_component$properties2","handleMouseMove","e","found","el","nativeEvent","composedPath","HTMLElement","classList","contains","handleMouseLeave","handleExpandClick","jobStyles","large","sharedStyles","expand","WrappedIcon","onMouseMove","onMouseLeave","NodeEnd","onShare","button","toString","DEFINE_VARIABLE","DEFINE_DATA_SOURCE","EventHandlerOfUpdateVariable","z","EventHandlerOfRefreshDataSource","EventHandlerOfCallComponent","optional","EventHandlerOfShowMessage","EventHandlerOfCallAPI","EventHandlerCallback","EventHandler","OneOrMoreEventHandlers","finally","validateExpression","expr","invalidNode","enter","disallowArrowFunction","ambiguousSymbol","Symbol","constructJsValue","state","some","prop","allowExpression","_options$modifier","ambiguous","modifier","source","substring","start","end","errors","severity","obj","computed","shorthand","constructJsObject","elements","elem","_options$modifier2","arr","constructJsArray","_options$modifier3","constructPropValue","shouldCompute","_options$modifier4","parent","_parent","p","constructEvents","result","handlers","constructEventHandler","_payload","payloadProp","ambiguousParams","parsedHandler","safeParse","constructElement","openingElement","tagName","ambiguousProps","attributes","attrName","_attr$value","_attr$value2","_attr$value3","_attr$value4","reward","rawChildren","child","onlyTextChildren","previousChild","tempChildren","_previousChild","_previousChild2","_previousChild3","splice","c","flatMap","mergeTexts","componentsMap","constructView","element","parseJsx","_ast","ast","parse","plugins","sourceType","errorRecovery","code","reasonCode","stmt","_ast$program$body","_ast2","program","callee","missingArgs","arguments","varName","dataSourceName","dataSourceConfig","isNilNode","_prop$value$params$","arg","declaration","mergeMessages","messages","merged","previousRole","role","lastMessage","parts","mergeMessageParts","previousType","previousDataType","part","_part$data","_part$data2","getJobGeneratedView","getJobComponentGraph","previousGraph","graph","hasGraph","_part$data3","msg","edges","_node$children$map","_node$children","pull","initial","nodeIndex","findIndex","n","status","rootReducer","reducers","task","taskPatch","isInitial","isMatchWith","isEqual","jobs","_state$findLast","jobsPatch","previousComponentGraph","componentGraph","jobPatch","_jobs$findIndex","_jobs","previousJobIndex","messagesPatch","toolCall","originalArguments","argumentsParseFailed","argumentsParseError","_patch$toolCall","_patch$toolCall2","patch","_restMessagesPatch$to","_restMessagesPatch$to2","_previousJob$toolCall","_restMessagesPatch$st","_previousJob$messages2","previousJob","restMessagesPatch","_previousJob$messages","fromEntries","entries","MINIMAL_DELAY","useTaskDetail","taskId","replay","replayDelay","dispatch","useReducer","humanInputRef","resumedRef","replayListRef","replayRef","replayDelayRef","replayResolveRef","skipToResults","watchAgain","previousTime","delay","Math","setTimeout","ctrl","requesting","makeRequest","AbortController","request","createSSEStream","getBasePath","signal","stream","handleHttpError","jobId","input","http","post","_ctrl","abort","getCodeLanguage","classListItem","toLowerCase","rehypePrism","visitor","_index","lang","refractor","highlight","tree","visit","mermaid","initialize","startOnLoad","themeVariables","primaryColor","primaryBorderColor","parser","DOMParser","serializer","XMLSerializer","rehypeMermaid","promises","index","svg","parseFromString","svgElement","querySelector","defs","createElementNS","innerHTML","prepend","appendChild","modifiedSvg","serializeToString","replacements","fromHtmlIsomorphic","fragment","production","Fragment","jsx","jsxs","MarkdownComponent","reactContent","setReactContent","unified","use","remarkParse","remarkGfm","remarkToRehype","rehypeReact","passNode","process","then","vFile","catch","pre","CodeBlock","EnhancedMarkdown","HTMLTableElement","HTMLPreElement","scrollWidth","_extends","getToolDataProgress","toolCallMessages","progressPart","_message$parts","ToolCallStatus","_toolCall$annotations","setActiveToolCallJobId","toolTitle","annotations","hasToolCallResponse","_job$messages","readOnly","handleClick","toolState","isError","endTime","humanize","ss","Nav","nav","plan","jobLevels","currentNavId","taskState","mergedNav","unmatchedSteps","insertsBefore","cursor","unshift","steps","cursorIndex","nextStep","skipped","_job$state","level","instruction","disabled","_nav$querySelector","scrollIntoView","behavior","block","lastActiveItem","_nav$querySelector2","NavItem","completed","working","canceled","getClassNameAndIconProps","marginLeft","link","WrappedButton","WrappedDrawer","onClose","onOpen","showDialog","unwrapProvider","copyToClipboard","groups","InstanceApi_getDetail","doGetPreGeneratedMetricGroups","NodeInstruction","handleKeyboardNav","activeNodeId","ctrlKey","altKey","activeNode","metaKey","direction","shiftKey","range","moveOnAxis","oppositeAxis","activePosition","getCenterPosition","candidates","diff","abs","maxBy","minBy","convertEventHandlers","hdl","convertEventHandler","_result$dataSources","_result$variables","_component$children","_component$events","isObject","getLatestMetricValue","extractList","groupMetricData","getMetricDisplayNames","items","texts","mergeValuesAsText","wheelData","deltaY","deltaMode","useZoom","zoomable","scrollable","pannable","pannableWithCtrl","scaleRange","_scaleRange","manualScrolledUpRef","onSwitchActiveTarget","grabbing","setGrabbing","setTransform","transformRef","zoom","wheelDelta","moved","scaleExtent","on","onContextMenu","preventDefault","addEventListener","removeEventListener","rootSelection","select","unsetZoom","closest","delta","maxScroll","scrollHeight","scrollTop","checkScrollableY","cancelable","translateBy","wheelDeltaX","wheelDeltaY","AsyncWrappedDisplayCanvas","default","asyncWrapBrick","DEFAULT_NODE_SIZE","CANVAS_PADDING","extraStyleTexts","nodeStyleText","ICON_EXPAND","Topology","autoSize","_autoSize","cells","nodesWithStatus","nodeIdsWithStatus","relatedEdges","edge","relatedNodeIds","layoutOptions","nodesep","ranksep","defaultNodeBricks","TopologyNode","defaultEdgeLines","strokeColor","minWidth","maxWidth","window","innerWidth","minHeight","_ref$current","center","topology","layout","defaultNodeSize","hideZoomBar","refCallback","useTaskGraph","fixedJobs","views","requirement","jobMap","downstreamMap","upstreamMap","rootDownstream","rootChildren","up","_job$upstream","upstream","downstream","_job$upstream2","alignDownstreamMap","subChildren","firstLevelChildren","_childJob$upstream","lastLevelChildren","upstreams","visitedJobs","queue","shift","jobNodesMap","_job$toolCall","hasMessages","nodeIds","instructionNodeId","jobNodeId","viewNodeId","parentNodeIds","ReplayToolbar","taskDone","getScrollTo","rect","containerSize","containerWidth","containerHeight","paddingTop","paddingRight","paddingBottom","paddingLeft","diffYTop","diffYBottom","diffXLeft","diffXRight","ICON_DOWNLOAD","getDrawerWidth","FilePreview","file","setActiveFile","bytes","uri","mimeType","getMimeTypeByFilename","setStatus","setContent","atob","response","fetch","location","origin","ok","statusText","handleDownload","filename","saveAs","Blob","href","download","removeChild","handleClickClose","close","handleClose","_ref$current2","open","setWidth","onResize","customTitle","closable","mask","maskClosable","src","imageUnpreviewable","alt","embed","shareStyles","markdown","findNearestCandidate","weight","reduce","nearest","visualWeight","attrListCache","attrList","doGetAttrList","getAttrList","_attr$generatedView","doGetPreGeneratedAttrViews","ICON_PAUSE","ICON_STOP","ICON_RESUME","ChatBox","containerRef","textareaRef","setValue","valueRef","wrap","setWrap","onPause","onResume","onCancel","supports","actionBeingTaken","setActionBeingTaken","handleResume","handlePause","handleStop","onSubmit","_value","handleSubmit","currentTarget","handleChange","handleSubmitClick","observer","ResizeObserver","entry","contentBoxSize","blockSize","contentRect","observe","disconnect","handleContainerClick","_textareaRef$current","HTMLTextAreaElement","HTMLButtonElement","focus","box","TextareaAutoResize","minRows","maxRows","borderSize","paddingSize","autoResize","placeholder","submitWhen","onChange","intercept","rects","Infinity","r","b","SIZING_STYLE","hiddenTextarea","modKey","LegacyTextareaAutoResize","_autoResize","propValue","onKeyDown","onCompositionStart","onCompositionEnd","autoStyle","setAutoStyle","useImperativeHandle","textarea","_textarea$value","valueLength","setSelectionRange","doAutoResize","uiTextNode","setAttribute","uiTextNodeStyle","getComputedStyle","sizingStyle","getPropertyValue","maxHeight","overflowY","singleRowHeight","parseFloat","resize","calculateAutoSizeStyle","flushSync","compositionRef","handleCompositionStart","handleCompositionEnd","handleKeyDown","stopPropagation","previousInlineSize","currentInlineSize","inlineSize","requestAnimationFrame","ToolCallDetail","intermediateParts","responseParts","hasProcessParts","hasResponseParts","detail","PreComponent","maybeJson","partIndex","_part$data$message","ProcessMessageComponent","fallback","_part$data4","refinedContent","json","_ref3","AsyncWrappedCMDB","onChangeV2","HumanConfirm","humanInput","_supports","HumanAdjustPlan","setList","idList","changed","setChanged","sensors","useSensors","useSensor","PointerSensor","activationConstraint","distance","dndModifiers","restrictToVerticalAxis","restrictToFirstScrollableAncestor","handleDragEnd","over","prev","activeIndex","v","overIndex","arrayMove","handleConfirm","handleReset","handleAddStep","newlyAdded","handleDeleteStep","handleUpdateStepContent","DndContext","collisionDetection","closestCenter","modifiers","onDragEnd","SortableContext","strategy","verticalListSortingStrategy","AdjustStep","onDelete","onUpdateContent","actions","hidden","listeners","setNodeRef","transition","isDragging","useSortable","contentRef","_contentRef$current","CSS","Transform","editing","setEditing","handleFocus","handleBlur","newContent","blur","dragging","handle","onFocus","onBlur","contentEditable","editable","div","supportsContentEditablePlaintextOnly","HumanAdjustPlanResult","_msg$parts","floor","log10","LIST_SPLIT_THRESHOLD","SHOW_AS_TABLE_THRESHOLD","BUILTIN_FN_STRINGIFY","CmdbInstanceDetail","outputSchema","bricks","_schema","schema","modals","builtinFnStringify","convertArrayOfObjects","idPrefix","needContext","_props$","modalId","normalizeIdentifier","contextId","modal","hideCancelButton","tableChildren","upperFirst","convertObject","clickHandler","_props$2","def","isEmptyValue","contextName","useBrick","isComplexType","convertCmdbInstanceDetail","identifier","FileList","files","getFileTypeAndIcon","metadata","formatFileSize","RegExpLargeTableInMarkdown","NodeJob","_job$toolCall2","_arguments","_arguments2","_arguments3","_arguments$command","_arguments4","_job$messages2","toolName","askUser","askUserPlan","generalAskUser","knownAskUser","command","toolMarkdownContent","cmdbInstanceDetails","contents","instanceDetails","forEach","markdownContent","tool","question","HumanInputComponent","confirm_text","cancel_text","HumanChooseComponent","HumanSelectFromCmdb","attrId","marginTop","option","_ref4","objectList","setObjectList","objects","CmdbObjectApi_getObjectRef","ref_object","fieldId","Suspense","ExpandedView","_views$find","activeExpandedViewJobId","viewportRef","sizeSmall","hasForm","_viewportRef$current","handleKeydown","tabIndex","small","number","round","fileText","filePdf","startsWith","fileOther","ext","matches","match","createContext","onNodeResize","activeToolCallJobId","setActiveNodeId","hoverOnScrollableContent","COPY_BUTTON_ICON","COPY_BUTTON_ICON_SUCCESS","COPY_BUTTON_ICON_FAILED","_props$className","isCodeBlock","setState","timerRef","handleCopy","clearTimeout","copy","useLayout","rawNodes","_rawNodes","rawEdges","_rawEdges","sizeMap","memoizedPositionsRef","initialNodes","initialEdges","finishedNodeIds","hasSource","hasTarget","memoizedPositions","startNodePositionRef","_memoizedPositionsRef","dagre","Graph","setGraph","rankdir","edgesep","setDefaultEdgeLabel","setEdge","setNode","offsets","nodeView","assign","getPositionWithOffsets","sourcePosition","targetPosition","turnY","points"],"sourceRoot":""}