@next-bricks/ai-portal 0.34.1 → 0.34.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/bricks.json +27 -27
- package/dist/chunks/3554.f585e0fd.js +2 -0
- package/dist/chunks/3554.f585e0fd.js.map +1 -0
- package/dist/chunks/407.9c5249e2.js +2 -0
- package/dist/chunks/407.9c5249e2.js.map +1 -0
- package/dist/chunks/{4937.506a3a98.js → 4937.d270f5bb.js} +2 -2
- package/dist/chunks/4937.d270f5bb.js.map +1 -0
- package/dist/chunks/main.097732bc.js +2 -0
- package/dist/chunks/{main.262519e6.js.map → main.097732bc.js.map} +1 -1
- package/dist/examples.json +15 -15
- package/dist/index.60427935.js +2 -0
- package/dist/{index.71db87df.js.map → index.60427935.js.map} +1 -1
- package/dist/manifest.json +244 -244
- package/dist/types.json +109 -109
- package/dist-types/shared/CodeDisplay.d.ts +7 -0
- package/package.json +2 -2
- package/dist/chunks/3554.7e4c8630.js +0 -2
- package/dist/chunks/3554.7e4c8630.js.map +0 -1
- package/dist/chunks/4937.506a3a98.js.map +0 -1
- package/dist/chunks/8397.a6476197.js +0 -2
- package/dist/chunks/8397.a6476197.js.map +0 -1
- package/dist/chunks/main.262519e6.js +0 -2
- package/dist/index.71db87df.js +0 -2
- package/dist-types/shared/useCodeBlock.d.ts +0 -6
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"chunks/8397.a6476197.js","mappings":"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","sources":["webpack:///../../src/index.ts","webpack:///./src/cruise-canvas/ToolProgressLine/ToolProgressLine.module.css?1d0e","webpack:///./src/cruise-canvas/ToolProgressLine/ToolProgressLine.tsx","webpack:///./src/cruise-canvas/legacy-reducers/jobs.ts","webpack:///./src/cruise-canvas/legacy-reducers/index.ts","webpack:///./src/cruise-canvas/legacy-reducers/task.ts","webpack:///./src/cruise-canvas/legacy-reducers/error.ts","webpack:///./src/cruise-canvas/useTaskDetail.ts","webpack:///./src/shared/NodeFeedback/NodeFeedback.module.css","webpack:///./src/shared/CreatedView/CreatedView.module.css","webpack:///./src/shared/NodeFeedback/NodeFeedback.module.css?99d4","webpack:///./src/shared/NodeFeedback/i18n.ts","webpack:///./src/shared/NodeFeedback/NodeFeedback.tsx","webpack:///./src/cruise-canvas/getFlatOrderedJobs.ts","webpack:///./src/shared/useCodeBlock.ts","webpack:///../../src/withBox.ts","webpack:///../../src/convertDataSources.ts","webpack:///../../src/expressions.ts","webpack:///../../src/convertEvents.ts","webpack:///../../../src/raw-data-generate/getMemberAccessor.ts","webpack:///../../../src/raw-data-generate/convert.ts","webpack:///../../src/findNearestCandidate.ts","webpack:///../../src/getModelObjectInstanceId.ts","webpack:///../../src/getPreGeneratedAttrViews.ts","webpack:///../../src/findObjectIdByUsedDataContexts.ts","webpack:///../../src/utils.ts","webpack:///../../src/deepReplaceVariables.ts","webpack:///../../../src/tsx-constructors/replaceVariables.ts","webpack:///../../src/convertTable.ts","webpack:///../../src/getPreGeneratedMetricGroups.ts","webpack:///../../src/convertDashboard.ts","webpack:///../../src/convertComponent.ts","webpack:///../../src/convertList.ts","webpack:///../../src/convertDescriptions.ts","webpack:///../../src/convertCard.ts","webpack:///../../src/convertButton.ts","webpack:///../../src/convertForm.ts","webpack:///../../src/convertToolbar.ts","webpack:///../../src/convertModal.ts","webpack:///../../src/convertText.ts","webpack:///../../src/convertLink.ts","webpack:///../../src/convertOutput.ts","webpack:///../../src/convertTag.ts","webpack:///../../src/convertAvatar.ts","webpack:///../../src/convertAvatarGroup.ts","webpack:///../../src/convertFormItem.ts","webpack:///../../src/convertForEach.ts","webpack:///../../src/convertIf.ts","webpack:///../../src/convertTsx.ts","webpack:///../../src/convertVariables.ts","webpack:///./src/shared/useViewFeedbackDone.ts","webpack:///./src/shared/ChatBox/ChatBox.module.css","webpack:///./src/shared/ReplayToolbar/ReplayToolbar.module.css","webpack:///./src/shared/CreatedView/CreatedView.module.css?fa62","webpack:///./src/shared/CreatedView/i18n.ts","webpack:///./src/shared/CreatedView/CreatedView.tsx","webpack:///./src/shared/workers/tsxParser.ts","webpack:///./src/shared/getAsyncConstructedView.ts","webpack:///./src/cruise-canvas/utils/createPortal.ts","webpack:///./src/shared/TaskContext.ts","webpack:///./src/cruise-canvas/shared.module.css?c988","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/shared/bricks.ts","webpack:///./src/shared/HumanAdjustPlan/HumanAdjustPlan.module.css","webpack:///./src/cruise-canvas/CmdbInstanceDetail/CmdbInstanceDetail.module.css","webpack:///./src/cruise-canvas/getOrderedNodes.ts","webpack:///./src/shared/ReplayToolbar/ReplayToolbar.module.css?fceb","webpack:///./src/shared/ReplayToolbar/i18n.ts","webpack:///./src/shared/ReplayToolbar/ReplayToolbar.tsx","webpack:///../../src/rehypeMermaid.ts","webpack:///../../src/MarkdownComponent.tsx","webpack:///./src/cruise-canvas/EnhancedMarkdown/EnhancedMarkdown.tsx","webpack:///./src/cruise-canvas/ToolProgressLine/ToolProgressLine.module.css","webpack:///../../../src/utils/calculateAutoSizeStyle.ts","webpack:///../../src/TextareaAutoResize.tsx","webpack:///./src/cruise-canvas/CmdbInstanceDetail/CmdbInstanceDetail.module.css?7513","webpack:///./src/cruise-canvas/CmdbInstanceDetail/CmdbInstanceDetail.tsx","webpack:///./src/cruise-canvas/reducers/tasks.ts","webpack:///./src/cruise-canvas/reducers/index.ts","webpack:///./src/cruise-canvas/reducers/conversation.ts","webpack:///./src/cruise-canvas/reducers/error.ts","webpack:///./src/cruise-canvas/useConversationDetail.ts","webpack:///./src/cruise-canvas/toolbar.module.css","webpack:///./src/cruise-canvas/CodeBlock/CodeBlock.module.css","webpack:///./src/shared/ExpandedView/ExpandedView.module.css?985a","webpack:///./src/shared/ExpandedView/ExpandedView.tsx","webpack:///./src/shared/ExpandedView/ExpandedView.module.css","webpack:///./src/shared/HumanAdjustPlan/HumanAdjustPlan.module.css?8909","webpack:///./src/shared/HumanAdjustPlan/i18n.ts","webpack:///./src/shared/getContentEditable.ts","webpack:///./src/shared/HumanAdjustPlan/HumanAdjustPlan.tsx","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/shared.module.css","webpack:///./src/shared/ChatBox/ChatBox.module.css?ebca","webpack:///./src/shared/ChatBox/i18n.ts","webpack:///./src/shared/ChatBox/ChatBox.tsx","webpack:///./src/shared/constants.ts"],"sourcesContent":["// istanbul ignore file\n\n/*\nnpx shiki-codegen \\\n --langs json,javascript,typescript,html,html-derivative,xml,css,markdown,mermaid,jsx,tsx,shellscript,python,go,sql \\\n --themes light-plus,dark-plus \\\n --engine oniguruma \\\n ./shared/shiki/src/bundle.ts\n*/\n\nimport lightPlus from \"@shikijs/themes/light-plus\";\nimport darkPlus from \"@shikijs/themes/dark-plus\";\n\n/* Generate by @shikijs/codegen */\nimport type {\n DynamicImportLanguageRegistration,\n HighlighterGeneric,\n ThemeInput,\n} from \"@shikijs/types\";\nimport {\n createSingletonShorthands,\n createdBundledHighlighter,\n} from \"@shikijs/core\";\nimport { createOnigurumaEngine } from \"@shikijs/engine-oniguruma\";\n\ntype BundledLanguage =\n | \"json\"\n | \"javascript\"\n | \"js\"\n | \"typescript\"\n | \"ts\"\n | \"html\"\n | \"html-derivative\"\n | \"xml\"\n | \"css\"\n | \"markdown\"\n | \"md\"\n | \"mermaid\"\n | \"mmd\"\n | \"jsx\"\n | \"tsx\"\n | \"shellscript\"\n | \"bash\"\n | \"sh\"\n | \"shell\"\n | \"zsh\"\n | \"python\"\n | \"py\"\n | \"go\"\n | \"sql\";\ntype BundledTheme = \"light-plus\" | \"dark-plus\";\ntype Highlighter = HighlighterGeneric<BundledLanguage, BundledTheme>;\n\nconst bundledLanguages = {\n json: () => import(\"@shikijs/langs/json\"),\n javascript: () => import(\"@shikijs/langs/javascript\"),\n js: () => import(\"@shikijs/langs/javascript\"),\n typescript: () => import(\"@shikijs/langs/typescript\"),\n ts: () => import(\"@shikijs/langs/typescript\"),\n html: () => import(\"@shikijs/langs/html\"),\n \"html-derivative\": () => import(\"@shikijs/langs/html-derivative\"),\n xml: () => import(\"@shikijs/langs/xml\"),\n css: () => import(\"@shikijs/langs/css\"),\n markdown: () => import(\"@shikijs/langs/markdown\"),\n md: () => import(\"@shikijs/langs/markdown\"),\n mermaid: () => import(\"@shikijs/langs/mermaid\"),\n mmd: () => import(\"@shikijs/langs/mermaid\"),\n jsx: () => import(\"@shikijs/langs/jsx\"),\n tsx: () => import(\"@shikijs/langs/tsx\"),\n shellscript: () => import(\"@shikijs/langs/shellscript\"),\n bash: () => import(\"@shikijs/langs/shellscript\"),\n sh: () => import(\"@shikijs/langs/shellscript\"),\n shell: () => import(\"@shikijs/langs/shellscript\"),\n zsh: () => import(\"@shikijs/langs/shellscript\"),\n python: () => import(\"@shikijs/langs/python\"),\n py: () => import(\"@shikijs/langs/python\"),\n go: () => import(\"@shikijs/langs/go\"),\n sql: () => import(\"@shikijs/langs/sql\"),\n} as Record<BundledLanguage, DynamicImportLanguageRegistration>;\n\nconst bundledThemes = {\n \"light-plus\": lightPlus,\n \"dark-plus\": darkPlus,\n} as Record<BundledTheme, ThemeInput>;\n\nconst createHighlighter = /* @__PURE__ */ createdBundledHighlighter<\n BundledLanguage,\n BundledTheme\n>({\n langs: bundledLanguages,\n themes: bundledThemes,\n engine: () => createOnigurumaEngine(import(\"shiki/wasm\")),\n});\n\nconst {\n codeToHtml,\n codeToHast,\n codeToTokensBase,\n codeToTokens,\n codeToTokensWithThemes,\n getSingletonHighlighter,\n getLastGrammarState,\n} = /* @__PURE__ */ createSingletonShorthands<BundledLanguage, BundledTheme>(\n createHighlighter,\n {\n guessEmbeddedLanguages(code, lang) {\n if (lang === \"markdown\" || lang === \"md\") {\n return [\"mermaid\"];\n }\n },\n }\n);\n\nexport {\n bundledLanguages,\n bundledThemes,\n codeToHast,\n codeToHtml,\n codeToTokens,\n codeToTokensBase,\n codeToTokensWithThemes,\n getLastGrammarState,\n getSingletonHighlighter,\n};\nexport type { BundledLanguage, BundledTheme, Highlighter };\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 type { Reducer } from \"react\";\nimport { isEqual, isMatchWith, pick } from \"lodash\";\nimport type {\n DataPart,\n Job,\n JobPatch,\n Message,\n Part,\n TextPart,\n} from \"../interfaces\";\nimport type { CruiseCanvasAction } from \"./interfaces\";\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\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 (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 \"hidden\",\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 (!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","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 \"./legacy-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 {\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","// 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-feedback--qSAvjvCa{width:var(--cruise-canvas-node-width-medium);background:rgba(255,255,255,0.2);border-radius:12px;border:1px solid rgba(255,255,255,0.3);-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);padding:20px 28px}.heading--zbbPDsFk{display:flex;align-items:center;justify-content:space-between;margin-bottom:16px}.title--l9cmJRhB{font-weight:500}.form-item--wtgYuM1v{font-size:12px;line-height:17px;color:rgba(0,0,0,0.88)}.form-item--wtgYuM1v.horizontal--zqc5U1Jh{display:flex;align-items:center;justify-content:space-between;margin-bottom:14px;gap:1em}.form-item--wtgYuM1v.vertical--i26lXOiT{margin-top:16px}.form-item--wtgYuM1v.vertical--i26lXOiT label{display:block;color:rgba(0,0,0,0.45);margin-bottom:8px}.form-item--wtgYuM1v textarea{width:100%;background:none;border-radius:8px;border:1px solid rgba(0,0,0,0.15);padding:8px;color:#262626}.form-item--wtgYuM1v textarea:focus{outline:none;border-color:rgba(0,0,0,0.25)}.options--Cak4FPTk{display:flex;align-items:center}.radio--P5Vo_D45{position:relative;cursor:pointer}.radio--P5Vo_D45 input{width:0px;height:0px;position:absolute;-webkit-appearance:none;-moz-appearance:none;appearance:none}.radio--P5Vo_D45 span{display:flex;align-items:center;justify-content:center;width:64px;height:28px;border-radius:8px;background:none;border:1px solid rgba(0,0,0,0.15)}.radio--P5Vo_D45 input:checked + span{background:rgba(255,255,255,0.5);border:none}.radio--P5Vo_D45 input:not(:checked) + span:hover{background:rgba(255,255,255,0.3);border:none}.radio--P5Vo_D45 + .radio--P5Vo_D45{margin-left:8px}.submit--eCyA49Nq{display:flex;justify-content:end;margin-top:18px;gap:8px}.validate--krlXob4C .form-item--wtgYuM1v:has(input:invalid) .label--U8YsN4Mm{color:#f24c25}.submitted--XxktB9y5{background:#d0e7d6;-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);border:none;font-weight:500;color:#009929;padding:17px;text-align:center}`, \"\"]);\n// Exports\n___CSS_LOADER_EXPORT___.locals = {\n\t\"node-feedback\": `node-feedback--qSAvjvCa`,\n\t\"heading\": `heading--zbbPDsFk`,\n\t\"title\": `title--l9cmJRhB`,\n\t\"form-item\": `form-item--wtgYuM1v`,\n\t\"horizontal\": `horizontal--zqc5U1Jh`,\n\t\"vertical\": `vertical--i26lXOiT`,\n\t\"options\": `options--Cak4FPTk`,\n\t\"radio\": `radio--P5Vo_D45`,\n\t\"submit\": `submit--eCyA49Nq`,\n\t\"validate\": `validate--krlXob4C`,\n\t\"label\": `label--U8YsN4Mm`,\n\t\"submitted\": `submitted--XxktB9y5`\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--Mi2u66PA{display:flex;justify-content:space-between;align-items:center;margin-bottom:16px}.buttons--s1Vtr06S{display:flex;align-items:center;gap:8px}.title--t7OpwWbH{font-size:12px;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}ai-portal\\\\.cruise-canvas .title--t7OpwWbH{text-indent:4px}ai-portal\\\\.cruise-canvas .heading--Mi2u66PA{margin-bottom:10px}.button--ulIeUcT5{display:flex;background:none;border:none;padding:3px;cursor:pointer;color:#595959}.button--ulIeUcT5:hover{color:var(--elevo-color-brand)}`, \"\"]);\n// Exports\n___CSS_LOADER_EXPORT___.locals = {\n\t\"heading\": `heading--Mi2u66PA`,\n\t\"buttons\": `buttons--s1Vtr06S`,\n\t\"title\": `title--t7OpwWbH`,\n\t\"button\": `button--ulIeUcT5`\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]!./NodeFeedback.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]!./NodeFeedback.module.css\";\n export default content && content.locals ? content.locals : undefined;\n","import { i18n } from \"@next-core/i18n\";\n\nexport enum K {\n YES = \"YES\",\n NO = \"NO\",\n SUBMIT = \"SUBMIT\",\n RESET = \"RESET\",\n FEEDBACK_NODE_TITLE = \"FEEDBACK_NODE_TITLE\",\n PROBLEM_FEEDBACK = \"PROBLEM_FEEDBACK\",\n PROBLEM_FEEDBACK_PLACEHOLDER = \"PROBLEM_FEEDBACK_PLACEHOLDER\",\n IS_THE_TASK_PLAN_COMPLETE = \"IS_THE_TASK_PLAN_COMPLETE\",\n IS_THE_TASK_PLAN_LOGICALLY_CORRECT = \"IS_THE_TASK_PLAN_LOGICALLY_CORRECT\",\n ARE_THE_TASK_PLAN_STEPS_CONCISE = \"ARE_THE_TASK_PLAN_STEPS_CONCISE\",\n ARE_THE_ANALYTICAL_CONCLUSIONS_ACCURATE = \"ARE_THE_ANALYTICAL_CONCLUSIONS_ACCURATE\",\n IS_THE_EVIDENCE_SUPPORTING_THE_CONCLUSIONS_SUFFICIENT = \"IS_THE_EVIDENCE_SUPPORTING_THE_CONCLUSIONS_SUFFICIENT\",\n THANKS_FOR_YOUR_FEEDBACK = \"THANKS_FOR_YOUR_FEEDBACK\",\n}\n\nconst en: Locale = {\n YES: \"Yes\",\n NO: \"No\",\n SUBMIT: \"Submit\",\n RESET: \"Reset\",\n FEEDBACK_NODE_TITLE: \"How do you think Elevo has done this task?\",\n PROBLEM_FEEDBACK: \"Problem feedback\",\n PROBLEM_FEEDBACK_PLACEHOLDER: \"Please describe the problem you encountered.\",\n IS_THE_TASK_PLAN_COMPLETE: \"Is the task plan complete:\",\n IS_THE_TASK_PLAN_LOGICALLY_CORRECT: \"Is the task plan logically correct:\",\n ARE_THE_TASK_PLAN_STEPS_CONCISE: \"Are the task plan steps concise:\",\n ARE_THE_ANALYTICAL_CONCLUSIONS_ACCURATE:\n \"Are the analytical conclusions accurate:\",\n IS_THE_EVIDENCE_SUPPORTING_THE_CONCLUSIONS_SUFFICIENT:\n \"Is the evidence supporting the conclusions sufficient:\",\n THANKS_FOR_YOUR_FEEDBACK: \"Thank you for helping us become better.\",\n};\n\nconst zh: Locale = {\n YES: \"是\",\n NO: \"否\",\n SUBMIT: \"提交\",\n RESET: \"重置\",\n FEEDBACK_NODE_TITLE: \"Elevo 完成这项任务的效果如何?\",\n PROBLEM_FEEDBACK: \"问题反馈\",\n PROBLEM_FEEDBACK_PLACEHOLDER: \"欢迎留下您的意见\",\n IS_THE_TASK_PLAN_COMPLETE: \"任务计划是否完备:\",\n IS_THE_TASK_PLAN_LOGICALLY_CORRECT: \"任务计划是否逻辑正确:\",\n ARE_THE_TASK_PLAN_STEPS_CONCISE: \"任务计划步骤是否精简:\",\n ARE_THE_ANALYTICAL_CONCLUSIONS_ACCURATE: \"分析结论是否准确:\",\n IS_THE_EVIDENCE_SUPPORTING_THE_CONCLUSIONS_SUFFICIENT:\n \"结论的支撑证据是否充足:\",\n THANKS_FOR_YOUR_FEEDBACK: \"感谢你帮我们变得更好。\",\n};\n\nexport const NS = \"bricks/ai-portal/NodeFeedback\";\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","// istanbul ignore file: experimental\nimport React, { useCallback, useContext, useRef, useState } from \"react\";\nimport classNames from \"classnames\";\nimport { initializeI18n } from \"@next-core/i18n\";\nimport styles from \"./NodeFeedback.module.css\";\nimport { K, locales, NS, t } from \"./i18n\";\nimport { WrappedButton, WrappedIconButton } from \"../bricks\";\nimport { ICON_CLOSE } from \"../constants\";\nimport { TaskContext } from \"../TaskContext\";\n\ninitializeI18n(NS, locales);\n\nlet checks:\n | Array<{\n label: string;\n value: string;\n group: \"plan\" | \"result\";\n }>\n | undefined;\n\nfunction getChecks() {\n if (!checks) {\n checks = [\n {\n label: `1. ${t(K.IS_THE_TASK_PLAN_COMPLETE)}`,\n value: \"计划完备\",\n group: \"plan\",\n },\n {\n label: `2. ${t(K.IS_THE_TASK_PLAN_LOGICALLY_CORRECT)}`,\n value: \"逻辑正确\",\n group: \"plan\",\n },\n {\n label: `3. ${t(K.ARE_THE_TASK_PLAN_STEPS_CONCISE)}`,\n value: \"步骤精简\",\n group: \"plan\",\n },\n {\n label: `4. ${t(K.ARE_THE_ANALYTICAL_CONCLUSIONS_ACCURATE)}`,\n value: \"结论准确\",\n group: \"result\",\n },\n {\n label: `5. ${t(K.IS_THE_EVIDENCE_SUPPORTING_THE_CONCLUSIONS_SUFFICIENT)}`,\n value: \"支撑证据充足\",\n group: \"result\",\n },\n ];\n }\n return checks;\n}\n\nexport interface NodeFeedbackProps {\n className?: string;\n}\n\nexport function NodeFeedback({ className }: NodeFeedbackProps): JSX.Element {\n const {\n submittingFeedback,\n submittedFeedback,\n setShowFeedback,\n onSubmitFeedback,\n } = useContext(TaskContext);\n const formRef = useRef<HTMLFormElement>(null);\n const checks = getChecks();\n const [triedSubmit, setTriedSubmit] = useState(false);\n\n const handleSubmit = useCallback(\n (e: React.MouseEvent) => {\n e.preventDefault();\n setTriedSubmit(true);\n if (!formRef.current?.reportValidity()) {\n return;\n }\n const formData = new FormData(formRef.current!);\n const plan: string[] = [];\n const result: string[] = [];\n for (let i = 0; i < checks.length; i++) {\n const value = formData.get(`feedback-check-${i}`);\n if (value) {\n if (checks[i].group === \"plan\") {\n plan.push(value as string);\n } else {\n result.push(value as string);\n }\n }\n }\n onSubmitFeedback({\n plan,\n result,\n feedback: (formData.get(\"feedback\") ?? \"\") as string,\n });\n },\n [checks, onSubmitFeedback]\n );\n\n const handleReset = useCallback((e: React.MouseEvent) => {\n e.preventDefault();\n setTriedSubmit(false);\n formRef.current?.reset();\n }, []);\n\n if (submittedFeedback) {\n return (\n <div className={`${styles[\"node-feedback\"]} ${styles.submitted}`}>\n {t(K.THANKS_FOR_YOUR_FEEDBACK)}\n </div>\n );\n }\n\n return (\n <div className={classNames(styles[\"node-feedback\"], className)}>\n <div className={styles.heading}>\n <div className={styles.title}>{t(K.FEEDBACK_NODE_TITLE)}</div>\n <WrappedIconButton\n icon={ICON_CLOSE}\n variant=\"mini\"\n onClick={() => setShowFeedback(false)}\n />\n </div>\n <form\n className={classNames(styles.form, { [styles.validate]: triedSubmit })}\n ref={formRef}\n >\n {checks.map((check, index) => (\n <div\n key={index}\n className={`${styles[\"form-item\"]} ${styles.horizontal}`}\n >\n <div className={styles.label}>{check.label}</div>\n <div className={styles.options}>\n <label className={styles.radio}>\n <input\n type=\"radio\"\n required\n name={`feedback-check-${index}`}\n value={check.value}\n />\n <span>{t(K.YES)}</span>\n </label>\n <label className={styles.radio}>\n <input\n type=\"radio\"\n required\n name={`feedback-check-${index}`}\n value=\"\"\n />\n <span>{t(K.NO)}</span>\n </label>\n </div>\n </div>\n ))}\n <div className={`${styles[\"form-item\"]} ${styles.vertical}`}>\n <label htmlFor=\"feedback-content\">{t(K.PROBLEM_FEEDBACK)}</label>\n <textarea\n id=\"feedback-content\"\n name=\"feedback\"\n placeholder={t(K.PROBLEM_FEEDBACK_PLACEHOLDER)}\n rows={2}\n />\n </div>\n <div className={styles.submit}>\n <WrappedButton themeVariant=\"elevo\" type=\"text\" onClick={handleReset}>\n {t(K.RESET)}\n </WrappedButton>\n <WrappedButton\n themeVariant=\"elevo\"\n type=\"primary\"\n shape=\"round\"\n onClick={handleSubmit}\n disabled={submittingFeedback}\n >\n {t(K.SUBMIT)}\n </WrappedButton>\n </div>\n </form>\n </div>\n );\n}\n","import type { Task, Job } from \"../shared/interfaces\";\nimport { getOrderedNodes } from \"./getOrderedNodes\";\n\nexport function getFlatOrderedJobs(\n tasks: Task[] | null | undefined,\n options?: {\n showHiddenJobs?: boolean;\n }\n) {\n const {\n list: taskIds,\n map: taskMap,\n roots: taskRoots,\n downstreamMap: taskDownstreamMap,\n } = getOrderedNodes(tasks);\n\n const jobOptions = {\n showHiddenNodes: options?.showHiddenJobs,\n };\n\n // Job ID list\n const list: string[] = [];\n const mapEntries: [string, Job][] = [];\n const levelEntries: [string, number][] = [];\n const downstreamMapEntries: [string, string[]][] = [];\n const roots: string[] = [];\n\n const orderedTasks = new Map(\n taskIds.map((taskId) => {\n const task = taskMap.get(taskId)!;\n return [taskId, getOrderedNodes(task.jobs, jobOptions)];\n })\n );\n\n for (const [taskId, orderedTask] of orderedTasks) {\n const {\n list: jobIds,\n map: jobMap,\n levels: jobLevels,\n roots: jobRoots,\n leaves: jobLeaves,\n downstreamMap: jobDownstreamMap,\n } = orderedTask;\n\n list.push(...jobIds);\n mapEntries.push(...jobMap);\n levelEntries.push(...jobLevels);\n downstreamMapEntries.push(...jobDownstreamMap);\n if (taskRoots.includes(taskId)) {\n roots.push(...jobRoots);\n }\n\n const downstreamTasks = taskDownstreamMap.get(taskId);\n if (downstreamTasks?.length) {\n for (const downstreamTaskId of downstreamTasks) {\n const { roots: downstreamTaskRoots } =\n orderedTasks.get(downstreamTaskId)!;\n for (const leaf of jobLeaves) {\n downstreamMapEntries.push([leaf, downstreamTaskRoots]);\n }\n }\n }\n }\n\n return {\n list,\n map: new Map(mapEntries),\n roots,\n levels: new Map(levelEntries),\n downstreamMap: new Map(downstreamMapEntries),\n };\n}\n","import { useEffect, useState } from \"react\";\nimport { Fragment, jsx, jsxs } from \"react/jsx-runtime\";\nimport { toJsxRuntime, type Options } from \"hast-util-to-jsx-runtime\";\nimport { toString } from \"hast-util-to-string\";\nimport type { Element } from \"hast\";\nimport { codeToHast } from \"@next-shared/shiki\";\nimport { CodeBlock } from \"../cruise-canvas/CodeBlock/CodeBlock\";\n\nconst production = { Fragment, jsx, jsxs } as Options;\n\nconst THEME = \"light-plus\";\n\nexport interface UseCodeBlockOptions {\n language: string;\n source: string;\n disabled?: boolean;\n}\n\nexport function useCodeBlock({\n language,\n source,\n disabled,\n}: UseCodeBlockOptions) {\n const [node, setNode] = useState<JSX.Element | null>(null);\n useEffect(() => {\n if (disabled) {\n setNode(null);\n return;\n }\n let ignore = false;\n (async () => {\n const rendered = await renderCodeBlock(source, language);\n if (!ignore) {\n setNode(rendered);\n }\n })();\n return () => {\n ignore = true;\n };\n }, [language, source, disabled]);\n return node;\n}\n\nasync function renderCodeBlock(source: string, language: string) {\n const isMarkdown = language === \"markdown\" || language === \"md\";\n const hast = await codeToHast(source, {\n lang: language,\n theme: THEME,\n transformers: isMarkdown\n ? [\n {\n pre(node) {\n const string = toString(node);\n if (/^(?:`{3,})mermaid\\b/.test(string)) {\n const root = this.codeToHast(string, {\n lang: \"mermaid\",\n theme: THEME,\n });\n const pre = root.children.find(\n (child) => child.type === \"element\" && child.tagName === \"pre\"\n ) as Element;\n return pre;\n }\n },\n },\n ]\n : undefined,\n });\n return toJsxRuntime(hast, {\n ...production,\n components: {\n pre: CodeBlock,\n },\n });\n}\n","import { BrickConf } from \"@next-core/types\";\nimport type { ConvertOptions } from \"./interfaces.js\";\n\nexport function withBox(\n children: BrickConf[] | undefined,\n options: ConvertOptions\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","import type { ContextConf } from \"@next-core/types\";\nimport { isObject } from \"@next-core/utils/general\";\nimport type { DataSource } from \"@next-shared/tsx-parser\";\nimport type { ConvertOptions } from \"./interfaces.js\";\n\nexport function convertDataSources(\n dataSources: DataSource[],\n options: ConvertOptions\n): ContextConf[] {\n return dataSources.map(\n ({ name, http, api, params, entity, transform, rejectTransform }) => ({\n name: name,\n resolve: {\n ...(http\n ? {\n useProvider: \"basic.http-request\",\n args: [api, params],\n }\n : typeof entity === \"string\"\n ? {\n useProvider: `ai-portal.${api.toLowerCase().replace(\".\", \"-sdk-\")}`,\n args: [options.workspace, entity, params],\n }\n : {\n useProvider: `${api}:*`,\n params: params as Record<string, unknown> | undefined,\n // TODO: remove the temporary workaround below\n ...(api === \"easyops.api.data_exchange.olap@Query\" &&\n isObject(params)\n ? {\n params: {\n ...params,\n translate: [\"#showKey\"],\n limit: undefined,\n limitBy: undefined,\n order: undefined,\n displayName: true,\n },\n }\n : null),\n }),\n ...(transform ? { transform: { value: transform } } : null),\n ...(rejectTransform\n ? { onReject: { transform: { value: rejectTransform } } }\n : null),\n },\n track: true,\n })\n );\n}\n","import { strictCollectMemberUsage } from \"@next-core/utils/storyboard\";\n\nconst EXPRESSION_PREFIX_REG = /^<%=?\\s/;\nconst EXPRESSION_SUFFIX_REG = /\\s%>$/;\n\n/**\n * @param value The trimmed string content\n * @returns if the value is a valid expression\n */\nfunction isExpression(value: string) {\n return EXPRESSION_PREFIX_REG.test(value) && EXPRESSION_SUFFIX_REG.test(value);\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 expression: string;\n const expr = data.trim();\n if (isExpression(expr)) {\n expression = expr\n .replace(EXPRESSION_PREFIX_REG, \"\")\n .replace(EXPRESSION_SUFFIX_REG, \"\")\n .trim();\n } else {\n // eslint-disable-next-line no-console\n console.warn(\"Invalid expression:\", JSON.stringify(data));\n expression = \"null\";\n }\n\n const usedContexts = strictCollectMemberUsage(data, \"CTX\");\n\n return {\n isString: true,\n embedded: data,\n expression,\n usedContexts,\n };\n}\n","import type { BrickEventHandler, BrickEventsMap } from \"@next-core/types\";\nimport type { Component, EventHandler } from \"@next-shared/tsx-parser\";\nimport type { ConvertOptions } from \"./interfaces.js\";\n\nexport function convertEvents(component: Component, options: ConvertOptions) {\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 \"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 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: ConvertOptions\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: ConvertOptions\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, http, entity, 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 ...(http\n ? {\n useProvider: \"basic.http-request\",\n args: [api, params],\n }\n : typeof entity === \"string\"\n ? {\n useProvider: `ai-portal.${api.toLowerCase().replace(\".\", \"-sdk-\")}`,\n args: [options.workspace, entity, params],\n }\n : {\n useProvider: `${api}:*`,\n params,\n }),\n callback: {\n ...(success && { 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","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\";\n\nconst { pick } = _;\n\nexport interface ConvertBrickOptions {\n ignoreStyle?: boolean;\n}\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","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_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","import { InstanceApi_getDetail } from \"@next-api-sdk/cmdb-sdk\";\nimport findNearestCandidate from \"./findNearestCandidate.js\";\nimport { getModelObjectInstanceId } from \"./getModelObjectInstanceId.js\";\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","import { strictCollectMemberUsage } from \"@next-core/utils/storyboard\";\nimport type { DataSource, Variable } from \"@next-shared/tsx-parser\";\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 * as t from \"@babel/types\";\n\nconst EXPRESSION_PREFIX_REG = /^<%=?\\s/;\nconst EXPRESSION_SUFFIX_REG = /\\s%>$/;\n\nexport function isExpressionString(value: unknown): value is string {\n if (typeof value !== \"string\") {\n return false;\n }\n const trimmed = value.trim();\n return (\n EXPRESSION_PREFIX_REG.test(trimmed) && EXPRESSION_SUFFIX_REG.test(trimmed)\n );\n}\n\nexport function validateExpression(expr: t.Expression): t.Node | null {\n let invalidNode: t.Node | null = null;\n t.traverse(expr, {\n enter(node, parent) {\n if (\n !invalidNode &&\n (t.isFunctionExpression(node) ||\n t.isStatement(node) ||\n t.isJSX(node) ||\n (t.isArrowFunctionExpression(node) &&\n (t.isBlockStatement(node.body) ||\n t.isObjectProperty(parent[parent.length - 1]?.node))))\n ) {\n invalidNode = node;\n }\n },\n });\n return invalidNode;\n}\n\nexport function isNilNode(node: t.Node) {\n return (\n t.isNullLiteral(node) || (t.isIdentifier(node) && node.name === \"undefined\")\n );\n}\n\nexport function containsJsxNode(expr: t.Expression): boolean {\n let found = false;\n t.traverse(expr, {\n enter(node) {\n if (!found && (t.isJSXElement(node) || t.isJSXFragment(node))) {\n found = true;\n }\n },\n });\n return found;\n}\n\nexport function convertJsxEventAttr(attr: string): string {\n return attr\n .slice(2)\n .replace(/([a-z])([A-Z])/g, \"$1.$2\")\n .toLowerCase();\n}\n","import { isExpressionString, replaceVariables } from \"@next-shared/tsx-parser\";\n\nexport function deepReplaceVariables<T>(\n value: T,\n patterns: Map<string, string> | undefined\n): T {\n if (!patterns?.size) {\n return value;\n }\n\n if (Array.isArray(value)) {\n return value.map((item) =>\n deepReplaceVariables(item, patterns)\n ) as unknown as T;\n }\n\n if (typeof value === \"object\" && value !== null) {\n return Object.fromEntries(\n Object.entries(value).map(([k, v]) => [\n k,\n deepReplaceVariables(v, patterns),\n ])\n ) as T;\n }\n\n if (typeof value === \"string\" && isExpressionString(value)) {\n return replaceVariables(value, patterns) as unknown as T;\n }\n\n return value;\n}\n","import * as t from \"@babel/types\";\nimport { preevaluate, PreevaluateResult } from \"@next-core/cook\";\n\ninterface Replacement {\n id: t.Identifier;\n shorthand?: boolean;\n}\n\nexport function mergeReplacePatterns(\n pattern1: Map<string, string> | undefined,\n pattern2: Map<string, string> | undefined\n): Map<string, string> | undefined {\n if (pattern1 && pattern2) {\n return new Map([...pattern1, ...pattern2]);\n }\n return pattern1 || pattern2;\n}\n\nexport function replaceCTX(expr: string, contexts: string[]): string {\n const patterns = new Map(contexts.map((k) => [k, `CTX.${k}`]));\n return replaceVariables(expr, patterns);\n}\n\nexport function replaceVariables(\n expr: string,\n patterns: Map<string, string> | undefined\n): string {\n if (!patterns?.size) {\n return expr;\n }\n const keywords = [...patterns.keys()];\n if (keywords.some((k) => expr.includes(k))) {\n const replacements: Replacement[] = [];\n let result: PreevaluateResult | undefined;\n try {\n result = preevaluate(expr, {\n withParent: true,\n hooks: {\n beforeVisitGlobal(node, parent) {\n if (patterns.has(node.name)) {\n const p = parent![parent!.length - 1]?.node;\n let shorthand: boolean | undefined;\n if (p && p.type === \"Property\" && !p.computed && p.shorthand) {\n shorthand = true;\n }\n replacements.push({ id: node, shorthand });\n }\n },\n },\n });\n } catch (error) {\n // eslint-disable-next-line no-console\n console.error(\n \"Parse evaluation string failed when scanning expression:\",\n error\n );\n }\n if (replacements.length > 0 && result) {\n const { prefix, source, suffix } = result;\n const chunks: string[] = [];\n let prevStart = 0;\n for (let i = 0; i < replacements.length; i++) {\n const { id, shorthand } = replacements[i];\n const { name, start, end } = id;\n chunks.push(\n source.substring(prevStart, start!),\n `${shorthand ? `${name}: ` : \"\"}${patterns.get(name)}`\n );\n prevStart = end!;\n }\n chunks.push(source.substring(prevStart));\n return `${prefix}${chunks.join(\"\")}${suffix}`;\n }\n }\n return expr;\n}\n","import type { BrickConf } from \"@next-core/types\";\nimport type {\n Component,\n ParseResult,\n RenderUseBrick,\n} from \"@next-shared/tsx-parser\";\nimport type { TableColumn, TableProps } from \"../lib/components.js\";\nimport type { ConvertOptions } 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\";\nimport { convertComponent } from \"./convertComponent.js\";\nimport { deepReplaceVariables } from \"./deepReplaceVariables.js\";\n\nconst columnUseBrickParams = [\"cellData\", \"rowData\"];\n\nexport default async function convertTable(\n component: Component,\n view: ParseResult,\n options: ConvertOptions\n): Promise<BrickConf> {\n const { properties } = component;\n const { dataSource, size, columns, rowKey, pagination, ...restProps } =\n properties as Omit<TableProps<object>, \"dataSource\" | \"columns\"> & {\n dataSource: string | object;\n size?: \"small\" | \"medium\" | \"large\";\n pagination?: boolean;\n columns:\n | string\n | Array<\n Omit<TableColumn<object>, \"render\"> & {\n render?: RenderUseBrick;\n }\n >;\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, BrickConf>();\n\n if (attrViews?.size && Array.isArray(columns)) {\n for (const column of columns) {\n if (column.render || typeof column.dataIndex !== \"string\") {\n continue;\n }\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 const convertedColumns = Array.isArray(columns)\n ? await Promise.all(\n columns.map(async ({ render, ...column }) => {\n if (render) {\n const patterns = new Map<string, string>();\n for (\n let i = 0;\n i < render.params.length && i < columnUseBrickParams.length;\n i++\n ) {\n patterns.set(render.params[i], `DATA.${columnUseBrickParams[i]}`);\n }\n\n const useBrick = (\n await Promise.all(\n render.children.map((child) =>\n convertComponent(child, view, options)\n )\n )\n ).flatMap((child) => deepReplaceVariables(child, patterns));\n\n return {\n ...column,\n useBrick,\n };\n }\n return typeof column.dataIndex === \"string\" &&\n configuredColumns.has(column.dataIndex)\n ? {\n ...column,\n useChildren: `[${column.dataIndex}]`,\n }\n : column;\n })\n )\n : columns;\n\n return {\n brick: \"eo-next-table\",\n properties: {\n dataSource: parsedDataSource.isString\n ? parsedDataSource.embedded\n : dataSource,\n ...restProps,\n rowKey: rowKey ?? (Array.isArray(columns) ? columns[0]?.key : undefined),\n columns: convertedColumns,\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 { InstanceApi_getDetail } from \"@next-api-sdk/cmdb-sdk\";\nimport { getModelObjectInstanceId } from \"./getModelObjectInstanceId.js\";\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","import type { BrickConf } from \"@next-core/types\";\nimport type { Component, ParseResult } from \"@next-shared/tsx-parser\";\nimport type { DashboardProps, DashboardWidget } from \"../lib/components.js\";\nimport { parseDataSource } from \"./expressions.js\";\nimport { findObjectIdByUsedDataContexts } from \"./findObjectIdByUsedDataContexts.js\";\nimport { getPreGeneratedMetricGroups } from \"./getPreGeneratedMetricGroups.js\";\nimport type { ConvertOptions } from \"./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 MergedWidget extends DashboardWidget {\n relevantMetrics?: string[];\n counterMetric?: string;\n groupTitle?: string;\n size?: \"small\" | \"medium\" | \"large\";\n}\n\nexport default async function convertDashboard(\n { properties }: Component,\n view: ParseResult,\n options: ConvertOptions\n): Promise<BrickConf> {\n const {\n dataSource,\n groupField: _groupField,\n widgets,\n } = properties as Omit<DashboardProps, \"dataSource\"> & {\n dataSource: string | object;\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 } = 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: 0 }),\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(200px, 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 : { min: 0 }),\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(200px, 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 : { min: 0 }),\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 { Component, ParseResult } from \"@next-shared/tsx-parser\";\nimport convertList from \"./convertList.js\";\nimport type { ConvertOptions } from \"./interfaces.js\";\nimport { convertEvents } from \"./convertEvents.js\";\nimport convertTable from \"./convertTable.js\";\nimport convertDescriptions from \"./convertDescriptions.js\";\nimport convertDashboard from \"./convertDashboard.js\";\nimport convertButton from \"./convertButton.js\";\nimport convertForm from \"./convertForm.js\";\nimport convertFormItem from \"./convertFormItem.js\";\nimport convertModal from \"./convertModal.js\";\nimport convertToolbar from \"./convertToolbar.js\";\nimport convertText from \"./convertText.js\";\nimport convertCard from \"./convertCard.js\";\nimport convertForEach from \"./convertForEach.js\";\nimport convertIf from \"./convertIf.js\";\nimport convertOutput from \"./convertOutput.js\";\nimport convertLink from \"./convertLink.js\";\nimport convertTag from \"./convertTag.js\";\nimport convertAvatar from \"./convertAvatar.js\";\nimport convertAvatarGroup from \"./convertAvatarGroup.js\";\n\nexport async function convertComponent(\n component: Component,\n result: ParseResult,\n options: ConvertOptions\n): Promise<BrickConf | BrickConf[]> {\n let brick: BrickConf | null = null;\n switch (component.name) {\n case \"List\":\n brick = await convertList(component);\n break;\n case \"Table\":\n brick = await convertTable(component, result, options);\n break;\n case \"Descriptions\":\n brick = await convertDescriptions(component, result, options);\n break;\n case \"Card\":\n brick = await convertCard(component);\n break;\n case \"Dashboard\":\n brick = await convertDashboard(component, result, 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 \"Toolbar\":\n brick = await convertToolbar(component);\n break;\n case \"Modal\":\n brick = await convertModal(component);\n break;\n case \"Plaintext\":\n brick = await convertText(component);\n break;\n case \"Link\":\n brick = await convertLink(component);\n break;\n case \"Output\":\n brick = await convertOutput(component);\n break;\n case \"Tag\":\n brick = await convertTag(component);\n break;\n case \"Avatar\":\n brick = await convertAvatar(component);\n break;\n case \"AvatarGroup\":\n brick = await convertAvatarGroup(component);\n break;\n case \"Search\":\n case \"Input\":\n case \"NumberInput\":\n case \"Textarea\":\n case \"Select\":\n case \"Radio\":\n case \"Checkbox\":\n case \"Switch\":\n case \"DatePicker\":\n case \"TimePicker\":\n brick = await convertFormItem(\n component,\n convertComponentName(component.name)\n );\n break;\n case \"ForEach\":\n brick = await convertForEach(component);\n break;\n case \"If\":\n brick = await convertIf(component);\n break;\n default:\n // eslint-disable-next-line no-console\n console.error(\"Unsupported component:\", component.name);\n }\n\n if (!brick) {\n return [];\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 if (component.slot) {\n brick.slot = component.slot;\n }\n\n brick.events = convertEvents(component, options);\n\n if (component.children?.length) {\n brick.children = (\n await Promise.all(\n component.children.map((child) =>\n convertComponent(child, result, options)\n )\n )\n ).flat();\n\n if (component.name === \"Card\" && brick.children.length > 1) {\n brick.children = [\n {\n brick: \"eo-content-layout\",\n children: brick.children,\n },\n ];\n }\n }\n\n return brick;\n}\n\nfunction convertComponentName(name: string) {\n return name.includes(\"-\")\n ? name\n : `eo${name.replace(/([A-Z])/g, \"-$1\").toLowerCase()}`;\n}\n","import type { BrickConf } from \"@next-core/types\";\nimport type { Component } from \"@next-shared/tsx-parser\";\nimport type { ListProps } from \"../lib/components.js\";\nimport { parseDataSource } from \"./expressions.js\";\n\nexport default function convertList({ properties }: Component): BrickConf {\n const props = properties as Omit<ListProps, \"dataSource\"> & {\n dataSource: string | object;\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 {\n Component,\n ParseResult,\n RenderUseBrick,\n} from \"@next-shared/tsx-parser\";\nimport type { DescriptionsProps } from \"../lib/components.js\";\nimport { convertToStoryboard } from \"./raw-data-generate/convert.js\";\nimport { getPreGeneratedAttrViews } from \"./getPreGeneratedAttrViews.js\";\nimport { parseDataSource } from \"./expressions.js\";\nimport { findObjectIdByUsedDataContexts } from \"./findObjectIdByUsedDataContexts.js\";\nimport { convertComponent } from \"./convertComponent.js\";\nimport { deepReplaceVariables } from \"./deepReplaceVariables.js\";\nimport type { ConvertOptions } from \"./interfaces.js\";\n\ninterface DescriptionItem {\n label: string;\n text?: string;\n field?: string;\n render?: RenderUseBrick;\n}\n\nexport default async function convertDescriptions(\n { properties }: Component,\n view: ParseResult,\n options: ConvertOptions\n): Promise<BrickConf> {\n const { dataSource, title, list, ...restProps } = properties as Partial<\n DescriptionsProps<object>\n > as Omit<DescriptionsProps<object>, \"list\"> & {\n dataSource: string | object;\n list: DescriptionItem[] | string;\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, BrickConf>();\n\n if (attrViews?.size && Array.isArray(list)) {\n for (const item of list) {\n if (item.render) {\n continue;\n }\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 const convertedList = Array.isArray(list)\n ? await Promise.all(\n list.map(async ({ render, ...item }) => {\n if (render) {\n const patterns = new Map<string, string>();\n if (render.params.length > 0) {\n patterns.set(render.params[0], \"DATA\");\n }\n\n const useBrick = (\n await Promise.all(\n render.children.map((child) =>\n convertComponent(child, view, options)\n )\n )\n ).flatMap((child) => deepReplaceVariables(child, patterns));\n\n return {\n label: item.label,\n useBrick,\n };\n }\n const brick = item.field\n ? configuredItems.get(item.field)\n : undefined;\n return brick\n ? {\n label: item.label,\n useChildren: `[${item.field}]`,\n }\n : item;\n })\n )\n : list;\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: convertedList,\n column: options.expanded ? 3 : 1,\n templateColumns: \"repeat(auto-fill,minmax(360px,1fr))\",\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 } from \"@next-shared/tsx-parser\";\nimport type { CardProps } from \"../lib/components.js\";\n\nexport default function convertCard(component: Component): BrickConf {\n const { properties } = component;\n const { title, textContent } = properties as CardProps & {\n textContent?: string;\n };\n return {\n brick: \"eo-card\",\n properties: {\n themeVariant: \"elevo\",\n cardTitle: title,\n background: \"#fff\",\n outline: \"background\",\n ...(textContent ? { textContent } : null),\n },\n };\n}\n","import type { BrickConf } from \"@next-core/types\";\nimport type { Component } from \"@next-shared/tsx-parser\";\nimport type { ButtonProps } from \"../lib/components.js\";\n\nexport default function convertButton(component: Component): BrickConf {\n const { properties } = component;\n const props = properties as ButtonProps & {\n textContent?: 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/tsx-parser\";\nimport type { FormProps } from \"../lib/components.js\";\n\nexport default function convertForm(component: Component): BrickConf {\n const { properties } = component;\n const { values } = (properties ?? {}) as FormProps<object>;\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/tsx-parser\";\n\nexport default function convertToolbar(_component: Component): BrickConf {\n return {\n brick: \"eo-flex-layout\",\n properties: {\n gap: \"0.5em\",\n alignItems: \"center\",\n },\n };\n}\n","import type { BrickConf } from \"@next-core/types\";\nimport type { Component } from \"@next-shared/tsx-parser\";\nimport type { ModalProps } from \"../lib/components.js\";\n\nexport default function convertModal(component: Component): BrickConf {\n const { properties } = component;\n const { title, confirmText, cancelText, textContent } =\n properties as Partial<ModalProps> & {\n textContent?: 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 ...(textContent ? { textContent } : null),\n },\n };\n}\n","import type { BrickConf } from \"@next-core/types\";\nimport type { Component } from \"@next-shared/tsx-parser\";\n\nexport default function convertText(component: Component): BrickConf {\n const { properties } = component;\n const props = properties as {\n textContent?: string;\n };\n return {\n brick: \"span\",\n properties: {\n ...props,\n },\n };\n}\n","import type { BrickConf } from \"@next-core/types\";\nimport type { Component } from \"@next-shared/tsx-parser\";\nimport type { LinkProps } from \"../lib/components.js\";\n\nexport default function convertLink(component: Component): BrickConf {\n const { properties } = component;\n const props = properties as LinkProps & {\n textContent?: string;\n };\n return {\n brick: \"eo-link\",\n properties: {\n ...props,\n themeVariant: \"elevo\",\n },\n };\n}\n","import type { BrickConf } from \"@next-core/types\";\nimport type { Component } from \"@next-shared/tsx-parser\";\n\nexport default function convertOutput(component: Component): BrickConf {\n const { properties } = component;\n const { textContent } = properties as {\n textContent?: string;\n };\n\n return {\n brick: \"pre\",\n properties: {\n textContent,\n style: {\n background: \"hsl(230, 1%, 98%)\",\n color: \"hsl(230, 8%, 24%)\",\n fontFamily:\n '\"Fira Code\", \"Fira Mono\", Menlo, Consolas, \"DejaVu Sans Mono\", monospace',\n direction: \"ltr\",\n textAlign: \"left\",\n whiteSpace: \"pre\",\n wordSpacing: \"normal\",\n wordBreak: \"normal\",\n lineHeight: \"1.5\",\n tabSize: \"2\",\n hyphens: \"none\",\n fontSize: \"13px\",\n\n padding: \"1em\",\n // margin: \"0.5em 0\",\n margin: \"0\",\n overflowX: \"auto\",\n borderRadius: \"9px\",\n },\n },\n };\n}\n","import type { BrickConf } from \"@next-core/types\";\nimport type { Component } from \"@next-shared/tsx-parser\";\nimport type { TagProps } from \"../lib/components.js\";\n\nexport default function convertTag(component: Component): BrickConf {\n const { properties } = component;\n const props = properties as TagProps & {\n textContent?: string;\n };\n return {\n brick: \"eo-tag\",\n properties: {\n ...props,\n themeVariant: \"elevo\",\n },\n };\n}\n","import type { BrickConf } from \"@next-core/types\";\nimport type { Component } from \"@next-shared/tsx-parser\";\nimport type { AvatarProps } from \"../lib/components.js\";\n\nexport default function convertAvatar(component: Component): BrickConf {\n const { properties } = component;\n const props = properties as AvatarProps;\n return {\n brick: \"eo-avatar\",\n properties: {\n ...props,\n themeVariant: \"elevo\",\n },\n };\n}\n","import type { BrickConf } from \"@next-core/types\";\nimport type { Component } from \"@next-shared/tsx-parser\";\nimport type { AvatarGroupProps } from \"../lib/components.js\";\n\nexport default function convertAvatarGroup(component: Component): BrickConf {\n const { properties } = component;\n const props = properties as AvatarGroupProps;\n return {\n brick: \"eo-avatar-group\",\n properties: {\n ...props,\n themeVariant: \"elevo\",\n },\n };\n}\n","import type { BrickConf } from \"@next-core/types\";\nimport type { Component } from \"@next-shared/tsx-parser\";\n\nexport default function convertFormItem(\n component: Component,\n type: string\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 { BrickConf } from \"@next-core/types\";\nimport type { Component } from \"@next-shared/tsx-parser\";\n\nexport default function convertForEach(component: Component): BrickConf {\n const { properties } = component;\n const { dataSource } = properties as {\n dataSource?: unknown;\n };\n return {\n brick: \":forEach\",\n dataSource,\n };\n}\n","import type { BrickConf } from \"@next-core/types\";\nimport type { Component } from \"@next-shared/tsx-parser\";\n\nexport default function convertIf(component: Component): BrickConf {\n const { properties } = component;\n const { dataSource } = properties as {\n dataSource?: unknown;\n };\n return {\n brick: \":if\",\n dataSource,\n };\n}\n","import type { ContextConf } from \"@next-core/types\";\nimport { pipes } from \"@easyops-cn/brick-next-pipes\";\nimport type { ParseResult } from \"@next-shared/tsx-parser\";\nimport { withBox } from \"./withBox.js\";\nimport { convertDataSources } from \"./convertDataSources.js\";\nimport { convertVariables } from \"./convertVariables.js\";\nimport { convertComponent } from \"./convertComponent.js\";\nimport type { ConvertOptions, ConvertResult } from \"./interfaces.js\";\n\nconst BUILTIN_FUNCTIONS: ContextConf[] = [\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\nexport async function convertTsx(\n result: ParseResult,\n options: ConvertOptions\n): Promise<ConvertResult> {\n const context: ContextConf[] = [\n ...convertDataSources(result.dataSources ?? [], options),\n ...convertVariables(result.variables ?? []),\n ...(options.withContexts\n ? Object.entries(options.withContexts).map(([name, value]) => ({\n name,\n value,\n }))\n : []),\n ...BUILTIN_FUNCTIONS,\n ];\n\n const children = (\n await Promise.all(\n result.components.map((component) =>\n convertComponent(component, result, options)\n )\n )\n ).flat();\n\n const needBox = result.components.every((component) =>\n [\"Form\", \"Descriptions\", \"Button\"].includes(component.name)\n );\n\n return {\n brick: {\n brick: \"eo-content-layout\",\n children: needBox ? [withBox(children, options)] : children,\n },\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 { ContextConf } from \"@next-core/types\";\nimport type { Variable } from \"@next-shared/tsx-parser\";\n\nexport function convertVariables(variables: Variable[]): ContextConf[] {\n return variables.map(({ name, value }) => ({\n name,\n value,\n }));\n}\n","import { InstanceApi_getDetail } from \"@next-api-sdk/cmdb-sdk\";\nimport { useEffect, useState } from \"react\";\n\nconst cache = new Map<string, Promise<boolean>>();\n\nexport function useViewFeedbackDone(\n viewId: string | undefined,\n showFeedbackOnView?: boolean\n) {\n const [done, setDone] = useState(true);\n\n useEffect(() => {\n if (!viewId || !showFeedbackOnView) {\n setDone(true);\n return;\n }\n let promise = cache.get(viewId);\n if (promise === undefined) {\n promise = fetchViewFeedbackDone(viewId);\n cache.set(viewId, promise);\n }\n let ignore = false;\n promise.then((value) => {\n if (!ignore) {\n setDone(value);\n }\n });\n return () => {\n ignore = true;\n };\n }, [viewId, showFeedbackOnView]);\n\n return done;\n}\n\nasync function fetchViewFeedbackDone(viewId: string): Promise<boolean> {\n const response = await InstanceApi_getDetail(\n \"LLM_WEB_VIEW_INFO@EASYOPS\",\n viewId,\n {\n fields: \"feedback.instanceId\",\n },\n {\n priority: \"low\",\n }\n );\n return !!response?.feedback?.length;\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--Apd6yCgP{background-color:#fff;border:2px solid #7891ff;border-radius:12px;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);cursor:text}.container--Apd6yCgP:not(:has(textarea:focus)){background-color:rgba(255,255,255,0.5);border-color:#99c4ff;-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px)}.box--XpA_yq1C{display:flex;flex-wrap:wrap;border-radius:10px;padding:8px}.input--e72Z4Eem{min-width:0;flex:1}.wrap--AFlJemgG .input--e72Z4Eem{flex-basis:100%}.input--e72Z4Eem 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}.input--e72Z4Eem textarea::placeholder{color:#bfbfbf}.toolbar--QaTOip9S{padding:5px 0 5px 8px;margin-left:auto;display:flex;align-items:center;gap:2px}.btn-send--W8EuSrM1:focus,\ntextarea:focus{outline:none}.btn-send--W8EuSrM1{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--W8EuSrM1:disabled{background:rgba(0,0,0,0.15)}.btn-send--W8EuSrM1:not(:disabled){cursor:pointer}.btn-send--W8EuSrM1:not(:disabled):hover{background:#5166ff}.btn-send--W8EuSrM1:not(:disabled):active{background:#1e33cc}`, \"\"]);\n// Exports\n___CSS_LOADER_EXPORT___.locals = {\n\t\"container\": `container--Apd6yCgP`,\n\t\"box\": `box--XpA_yq1C`,\n\t\"input\": `input--e72Z4Eem`,\n\t\"wrap\": `wrap--AFlJemgG`,\n\t\"toolbar\": `toolbar--QaTOip9S`,\n\t\"btn-send\": `btn-send--W8EuSrM1`\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--L3e7p3FP{background-image:linear-gradient(#fff,#fff),linear-gradient(338deg,rgba(198,183,247,1),rgba(157,198,255,1),rgba(153,196,255,1));background-origin:border-box;background-clip:content-box,border-box;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--L3e7p3FP:has(textarea:focus){background-image:linear-gradient(#fff,#fff),linear-gradient(338deg,rgba(160,133,249,1),rgba(101,162,246,1),rgba(120,145,255,1))}.replay--f75xXTdn{display:flex;align-items:center;border-radius:10px;height:50px;padding:0 16px}.text--JTEj9D2P{min-width:0;flex:1;font-size:16px}.button--deqoKbsu{margin-left:4px}`, \"\"]);\n// Exports\n___CSS_LOADER_EXPORT___.locals = {\n\t\"container\": `container--L3e7p3FP`,\n\t\"replay\": `replay--f75xXTdn`,\n\t\"text\": `text--JTEj9D2P`,\n\t\"button\": `button--deqoKbsu`\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]!./CreatedView.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]!./CreatedView.module.css\";\n export default content && content.locals ? content.locals : undefined;\n","import { i18n } from \"@next-core/i18n\";\n\nexport enum K {\n FULLSCREEN = \"FULLSCREEN\",\n FEEDBACK = \"FEEDBACK\",\n}\n\nconst en: Locale = {\n FULLSCREEN: \"Fullscreen\",\n FEEDBACK: \"Feedback\",\n};\n\nconst zh: Locale = {\n FULLSCREEN: \"全屏\",\n FEEDBACK: \"反馈\",\n};\n\nexport const NS = \"bricks/ai-portal/CreatedView\";\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","// 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 { initializeI18n } from \"@next-core/i18n\";\nimport { convertTsx } from \"@next-shared/tsx-converter\";\nimport type { Component, ParseResult } from \"@next-shared/tsx-parser\";\nimport styles from \"./CreatedView.module.css\";\nimport sharedStyles from \"../../cruise-canvas/shared.module.css\";\nimport type { Job } from \"../../cruise-canvas/interfaces\";\nimport { WrappedIcon } from \"../../shared/bricks\";\nimport { K, locales, NS, t } from \"./i18n\";\nimport { createPortal } from \"../../cruise-canvas/utils/createPortal\";\nimport { TaskContext } from \"../TaskContext\";\nimport { ICON_FEEDBACK, ICON_LOADING } from \"../constants\";\nimport { useViewFeedbackDone } from \"../useViewFeedbackDone\";\n\ninitializeI18n(NS, locales);\n\nexport interface CreatedViewProps {\n job: Job;\n onSizeChange?: (size: \"medium\" | \"large\") => void;\n}\n\nexport function CreatedView({\n job,\n onSizeChange,\n}: CreatedViewProps): JSX.Element {\n const rootId = useMemo(() => uniqueId(), []);\n const {\n workspace,\n showJsxEditor,\n setActiveExpandedViewJobId,\n setActiveJsxEditorJob,\n manuallyUpdatedViews,\n showFeedbackOnView,\n onFeedbackOnView,\n feedbackDoneViews,\n } = useContext(TaskContext);\n const ref = useRef<HTMLDivElement>(null);\n const rootRef = useRef<Awaited<\n ReturnType<typeof unstable_createRoot>\n > | null>(null);\n const generatedView = manuallyUpdatedViews?.get(job.id) ?? job.generatedView!;\n const feedbackDone =\n useViewFeedbackDone(generatedView.viewId, showFeedbackOnView) ||\n feedbackDoneViews?.has(generatedView.viewId);\n const [view, setView] = useState<ParseResult | null>(null);\n const canFeedback =\n !!view && !!generatedView.viewId && generatedView.from !== \"config\";\n\n useEffect(() => {\n generatedView.asyncConstructedView?.then((view) => {\n setView(view);\n });\n }, [generatedView, workspace]);\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 setLoading(true);\n if (!view) {\n return;\n }\n let ignore = false;\n (async () => {\n try {\n const convertedView = await convertTsx(view, {\n rootId,\n workspace,\n withContexts: generatedView.withContexts,\n });\n if (ignore) {\n return;\n }\n const { brick, context } = convertedView;\n await rootRef.current?.render(brick, { 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 }, [rootId, workspace, view, generatedView]);\n\n const sizeLarge = useMemo(() => {\n let large = false;\n traverseComponents(view?.components ?? [], (component) => {\n if (large) {\n return;\n }\n if (component.name === \"Table\" || component.name === \"eo-table\") {\n large = true;\n } else if (\n component.name === \"Dashboard\" ||\n component.name === \"eo-dashboard\"\n ) {\n const widgets = component?.properties?.widgets;\n if (\n Array.isArray(widgets) &&\n widgets.length >= (component.properties!.groupField ? 3 : 7)\n ) {\n large = true;\n }\n }\n });\n return large;\n }, [view]);\n\n useEffect(() => {\n onSizeChange?.(sizeLarge ? \"large\" : \"medium\");\n }, [onSizeChange, sizeLarge]);\n\n const handleExpandClick = useCallback(() => {\n setActiveExpandedViewJobId(job.id);\n }, [job.id, setActiveExpandedViewJobId]);\n\n return (\n <div>\n <div className={styles.heading}>\n <div\n className={classNames(styles.title, {\n [sharedStyles[\"shine-text\"]]: view && loading,\n })}\n >\n {view ? view.title : <WrappedIcon {...ICON_LOADING} />}\n </div>\n <div className={styles.buttons}>\n {showJsxEditor && (\n <button\n className={styles.button}\n onClick={() => {\n setActiveJsxEditorJob?.(job);\n }}\n >\n <WrappedIcon lib=\"antd\" icon=\"bug\" />\n </button>\n )}\n {showFeedbackOnView && !feedbackDone && canFeedback && (\n <button\n className={styles.button}\n title={t(K.FEEDBACK)}\n onClick={() => onFeedbackOnView?.(generatedView.viewId)}\n >\n <WrappedIcon {...ICON_FEEDBACK} />\n </button>\n )}\n <button\n className={styles.button}\n title={t(K.FULLSCREEN)}\n onClick={handleExpandClick}\n >\n <WrappedIcon lib=\"easyops\" icon=\"expand\" />\n </button>\n </div>\n </div>\n <div data-root-id={rootId} ref={ref} />\n </div>\n );\n}\n\nfunction traverseComponents(\n components: Component[],\n callback: (component: Component) => void\n) {\n for (const component of components) {\n callback(component);\n traverseComponents(component.children ?? [], callback);\n }\n}\n","// istanbul ignore file\nimport type { ParseResult, ParseOptions } from \"@next-shared/tsx-parser\";\nimport { wrap } from \"comlink\";\n\nexport interface RemoteTsxParserWorker {\n parse(source: string, options?: ParseOptions): Promise<ParseResult>;\n}\n\nlet remoteWorkerPromise: Promise<RemoteTsxParserWorker> | undefined;\n\nlet worker: Worker | undefined;\n\nexport function getRemoteTsxParserWorker() {\n if (!remoteWorkerPromise) {\n remoteWorkerPromise = (async () => {\n const Remote = wrap<{ new (): RemoteTsxParserWorker }>(getWorker());\n return await new Remote();\n })();\n }\n return remoteWorkerPromise;\n}\n\nfunction getWorker() {\n if (!worker) {\n worker = new Worker(new URL(\"./tsxParser.worker.ts\", import.meta.url));\n }\n return worker;\n}\n","import { getRemoteTsxParserWorker } from \"./workers/tsxParser.js\";\nimport type { GeneratedView } from \"./interfaces.js\";\n\nexport async function getAsyncConstructedView(\n generatedView: GeneratedView,\n workspace: string | undefined\n) {\n try {\n const worker = await getRemoteTsxParserWorker();\n const result = await worker.parse(generatedView.code, {\n workspace,\n withContexts: generatedView.withContexts\n ? Object.keys(generatedView.withContexts)\n : undefined,\n });\n return result;\n } catch (error) {\n // eslint-disable-next-line no-console\n console.error(\"Failed to parse generated view:\", error);\n return null;\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","import { createContext, type Dispatch } from \"react\";\nimport type { FeedbackDetail, Job } from \"../cruise-canvas/interfaces\";\nimport type { GeneratedView } from \"./interfaces\";\n\nexport interface TaskContextValue {\n workspace?: string;\n\n humanInput: (jobId: string, input: string) => void;\n onShare: () => void;\n onTerminate: () => void;\n supports?: Record<string, boolean>;\n\n activeExpandedViewJobId: string | null;\n setActiveExpandedViewJobId: Dispatch<React.SetStateAction<string | null>>;\n activeToolCallJobId: string | null;\n setActiveToolCallJobId: Dispatch<React.SetStateAction<string | null>>;\n\n submittingFeedback: boolean;\n submittedFeedback: boolean;\n onSubmitFeedback: (detail: FeedbackDetail) => void;\n setShowFeedback: Dispatch<React.SetStateAction<boolean>>;\n\n showJsxEditor?: boolean;\n activeJsxEditorJob?: Job;\n setActiveJsxEditorJob?: Dispatch<React.SetStateAction<Job | undefined>>;\n manuallyUpdatedViews?: Map<string, GeneratedView>;\n updateView?: (jobId: string, view: GeneratedView) => void;\n showFeedbackOnView?: boolean;\n onFeedbackOnView?: (viewId: string) => void;\n feedbackDoneViews?: Set<string>;\n}\n\nexport const TaskContext = createContext<TaskContextValue>({\n humanInput: () => {},\n onShare: () => {},\n onTerminate: () => {},\n activeExpandedViewJobId: null,\n setActiveExpandedViewJobId: () => {},\n activeToolCallJobId: null,\n setActiveToolCallJobId: () => {},\n submittingFeedback: false,\n submittedFeedback: false,\n onSubmitFeedback: () => {},\n setShowFeedback: () => {},\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","\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 \"../../shared/bricks\";\nimport { TaskContext } from \"../../shared/TaskContext\";\nimport { ToolProgressLine } from \"../ToolProgressLine/ToolProgressLine\";\nimport { getToolDataProgress } from \"../utils/getToolDataProgress\";\nimport type { JobState } from \"../../shared/interfaces\";\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(TaskContext);\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 toolState === (\"terminated\" as JobState) ? (\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","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","// 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--wphhC6CP,\n.toolbar--V4jK_1LK{font-size:14px;line-height:22px}.plan--wphhC6CP{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--wphhC6CP:not(:first-child){margin-top:6px}.steps--Ba0Uqoow{list-style:none;margin:0;padding:0}.step--vXcPggL0{background:#fff;border-radius:8px;padding-right:12px;display:flex}.step--vXcPggL0 + .step--vXcPggL0{margin-top:4px}.step--vXcPggL0.editing--NZsTtGHU{background:var(--cruise-canvas-input-background);box-shadow:var(--cruise-canvas-input-box-shadow)}.content--V4BbaELE{flex:1;min-width:0;padding:0 10px 0 5px;margin:10px 0}.step--vXcPggL0:not(.editing--NZsTtGHU) .content--V4BbaELE{display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2;overflow:hidden;text-overflow:ellipsis}.content--V4BbaELE:focus{outline:none}.dragging--bSak5zJX{cursor:grabbing}.toolbar--V4jK_1LK{margin-top:12px;display:flex;justify-content:center}.handle--n8KwiyLW,\n.delete--TSNogdQu{color:#8c8c8c;display:flex;align-items:center;justify-content:center}.handle--n8KwiyLW{cursor:grab;width:24px;border-radius:8px 0px 0px 8px;touch-action:none}.handle--n8KwiyLW:hover,\n.dragging--bSak5zJX .handle--n8KwiyLW{background:rgba(62,67,102,0.05)}.dragging--bSak5zJX,\n.dragging--bSak5zJX .handle--n8KwiyLW{cursor:grabbing}.dragging--bSak5zJX{position:relative;z-index:1}.delete--TSNogdQu{cursor:pointer}.step--vXcPggL0:not(:hover) .delete--TSNogdQu{visibility:hidden}.delete--TSNogdQu > *:hover{color:#595959}.actions--GWq0_5DJ{display:flex;justify-content:space-between;align-items:center;margin-top:8px}.button-add--zKhH8CP1,\n.button-reset--VKCfnFas{background:none;border:none;padding:0;cursor:pointer}.button-icon--qL49LHsn{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--VKCfnFas{color:#8c8c8c}.button-reset--VKCfnFas:hover,\n.button-add--zKhH8CP1{color:#595959}.button-add--zKhH8CP1:hover .button-icon--qL49LHsn{background:rgba(0,0,0,0.08)}.button-add--zKhH8CP1{display:flex;align-items:center}`, \"\"]);\n// Exports\n___CSS_LOADER_EXPORT___.locals = {\n\t\"plan\": `plan--wphhC6CP`,\n\t\"toolbar\": `toolbar--V4jK_1LK`,\n\t\"steps\": `steps--Ba0Uqoow`,\n\t\"step\": `step--vXcPggL0`,\n\t\"editing\": `editing--NZsTtGHU`,\n\t\"content\": `content--V4BbaELE`,\n\t\"dragging\": `dragging--bSak5zJX`,\n\t\"handle\": `handle--n8KwiyLW`,\n\t\"delete\": `delete--TSNogdQu`,\n\t\"actions\": `actions--GWq0_5DJ`,\n\t\"button-add\": `button-add--zKhH8CP1`,\n\t\"button-reset\": `button-reset--VKCfnFas`,\n\t\"button-icon\": `button-icon--qL49LHsn`\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--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}.container--YostHfxu:not(:first-child){margin-top:10px}ai-portal\\\\.chat-stream .container--YostHfxu{background:rgba(255,255,255,0.6);border-radius:8px;border:1px solid rgba(0,0,0,0.1);-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);padding:12px 20px}.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","export interface GeneralNode {\n id: string;\n upstream?: string[];\n parent?: string;\n hidden?: boolean;\n}\n\nexport interface GetOrderedNodesOptions {\n showHiddenNodes?: boolean;\n}\n\nexport function getOrderedNodes<T extends GeneralNode>(\n nodes: T[] | null | undefined,\n options?: GetOrderedNodesOptions\n) {\n const fixedNodes = nodes ?? [];\n const map = new Map<string, T>();\n const childrenMap = new Map<string, string[]>();\n let downstreamMap = new Map<string, string[]>();\n let roots: string[] = [];\n const rootChildren: string[] = [];\n const levels = new Map<string, number>();\n const hiddenNodeIds = new Set<string>();\n const showHiddenNodes = options?.showHiddenNodes;\n\n // Setup children relations\n for (const node of fixedNodes) {\n map.set(node.id, node);\n // TODO: remove mock\n if (!showHiddenNodes && node.hidden) {\n hiddenNodeIds.add(node.id);\n }\n if (node.parent) {\n let children = childrenMap.get(node.parent);\n if (!children) {\n childrenMap.set(node.parent, (children = []));\n }\n children.push(node.id);\n } else {\n rootChildren.push(node.id);\n }\n }\n\n // Setup downstream relations\n for (const node of fixedNodes) {\n for (const up of node.upstream ?? []) {\n let downstream = downstreamMap.get(up);\n if (!downstream) {\n downstreamMap.set(up, (downstream = []));\n }\n downstream.push(node.id);\n }\n\n if (\n !node.parent &&\n !node.upstream?.length &&\n (showHiddenNodes || !node.hidden)\n ) {\n roots.push(node.id);\n }\n }\n\n // Convert children to flat downstream\n const alignDownstreamMap = (children: string[], level: number) => {\n for (const nodeId of children) {\n levels.set(nodeId, level);\n const subChildren = childrenMap.get(nodeId);\n const downstream = downstreamMap.get(nodeId);\n\n if (subChildren) {\n const directSubChildren = subChildren.filter((child) => {\n const childNode = map.get(child)!;\n return !childNode.upstream?.length;\n });\n\n const leafSubChildren = downstream\n ? subChildren.filter((child) => {\n return !downstreamMap.has(child);\n })\n : [];\n\n downstreamMap.set(nodeId, directSubChildren);\n\n for (const child of leafSubChildren) {\n downstreamMap.set(child, [...downstream!]);\n }\n\n alignDownstreamMap(subChildren, level + 1);\n }\n }\n };\n\n alignDownstreamMap(rootChildren, 0);\n\n // Remove hidden nodes, and reconnect related downstream connections.\n let fullDownstreamMap: Map<string, string[]> | undefined;\n if (!showHiddenNodes && hiddenNodeIds.size > 0) {\n const findVisibleDownstreams = (downstreams: string[]): string[] => {\n return downstreams.flatMap((nodeId) => {\n const node = map.get(nodeId)!;\n if (node.hidden) {\n const nextDownstreams = downstreamMap.get(nodeId);\n return nextDownstreams ? findVisibleDownstreams(nextDownstreams) : [];\n }\n return nodeId;\n });\n };\n\n const newDownstreamMap = new Map<string, string[]>();\n\n const fixDownstreams = (visibleDownstreams: string[]) => {\n for (const id of visibleDownstreams) {\n const downstreams = downstreamMap.get(id);\n if (downstreams) {\n const visibleDownstreams = findVisibleDownstreams(downstreams);\n newDownstreamMap.set(id, visibleDownstreams);\n fixDownstreams(visibleDownstreams);\n }\n }\n };\n\n roots = findVisibleDownstreams(roots);\n fixDownstreams(roots);\n fullDownstreamMap = downstreamMap;\n downstreamMap = newDownstreamMap;\n }\n\n // Get BFS order of nodes\n const list: string[] = [];\n const visitedNodes = new Set<string>();\n const queue: string[] = [...roots];\n const leaves: string[] = [];\n while (queue.length > 0) {\n const id = queue.shift()!;\n if (visitedNodes.has(id)) {\n continue;\n }\n visitedNodes.add(id);\n list.push(id);\n const downstream = downstreamMap.get(id);\n if (downstream?.length) {\n queue.push(...downstream);\n } else {\n leaves.push(id);\n }\n }\n\n return { list, map, levels, roots, leaves, downstreamMap, fullDownstreamMap };\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 { i18n } from \"@next-core/i18n\";\n\nexport enum K {\n REPLAYING = \"REPLAYING\",\n REPLAY_COMPLETED = \"REPLAY_COMPLETED\",\n SKIP_TO_RESULTS = \"SKIP_TO_RESULTS\",\n WATCH_AGAIN = \"WATCH_AGAIN\",\n}\n\nconst en: Locale = {\n REPLAYING: \"Task is replaying...\",\n REPLAY_COMPLETED: \"Task replay completed.\",\n SKIP_TO_RESULTS: \"Skip to results\",\n WATCH_AGAIN: \"Watch again\",\n};\n\nconst zh: Locale = {\n REPLAYING: \"任务正在回放中...\",\n REPLAY_COMPLETED: \"任务回放完成。\",\n SKIP_TO_RESULTS: \"跳转到结果\",\n WATCH_AGAIN: \"重新观看\",\n};\n\nexport const NS = \"bricks/ai-portal/ReplayToolbar\";\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","import React from \"react\";\nimport { initializeI18n } from \"@next-core/i18n\";\nimport styles from \"./ReplayToolbar.module.css\";\nimport { WrappedButton } from \"../../shared/bricks\";\nimport { K, locales, NS, t } from \"./i18n\";\n\ninitializeI18n(NS, locales);\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 { visit } from \"unist-util-visit\";\nimport { toString } from \"hast-util-to-string\";\nimport type { Element } from \"hast\";\nimport type Mermaid from \"mermaid\";\nimport { fromHtmlIsomorphic } from \"hast-util-from-html-isomorphic\";\nimport { getCodeLanguage } from \"./utils.js\";\n\nlet mermaidPromise: Promise<typeof Mermaid> | undefined;\n\nfunction loadMermaid() {\n if (mermaidPromise) {\n return mermaidPromise;\n }\n mermaidPromise = doLoadMermaid();\n return mermaidPromise;\n}\n\nasync function doLoadMermaid() {\n const mermaid = (await import(\"mermaid\")).default;\n mermaid.initialize({\n startOnLoad: false,\n theme: \"base\",\n themeVariables: {\n fontSize: \"14px\",\n lineColor: \"#979797\",\n primaryColor: \"#DCD2F3\",\n primaryBorderColor: \"#0000001A\",\n },\n });\n return mermaid;\n}\n\nlet count = 0;\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: Element) => {\n const promises: Promise<void>[] = [];\n\n visit(tree, \"element\", (node, index, parent) => {\n if (\n !parent ||\n parent.type !== \"element\" ||\n parent.tagName !== \"pre\" ||\n node.tagName !== \"code\"\n ) {\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 let svg: string;\n try {\n const mermaid = await loadMermaid();\n const result = await mermaid.render(id, toString(node));\n svg = result.svg;\n } catch (error) {\n // eslint-disable-next-line no-console\n console.error(\"Error rendering mermaid diagram:\", error);\n document.getElementById(id)?.remove();\n return;\n }\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 Element[];\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 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 rehypeShikiFromHighlighter from \"@shikijs/rehype/core\";\nimport { getSingletonHighlighter } from \"@next-shared/shiki\";\nimport { rehypeMermaid } from \"./rehypeMermaid.js\";\n\nconst production = { Fragment, jsx, jsxs };\n\nexport interface MarkdownComponentProps {\n content?: string;\n components?: Partial<Components>;\n shiki?: {\n /** @default \"dark-plus\" */\n theme?: \"light-plus\" | \"dark-plus\";\n };\n}\n\n// Reference https://github.com/remarkjs/react-remark/blob/39553e5f5c9e9b903bebf261788ff45130668de0/src/index.ts\nexport function MarkdownComponent({\n content,\n components,\n shiki,\n}: MarkdownComponentProps) {\n const [reactContent, setReactContent] = useState<JSX.Element | null>(null);\n const theme = shiki?.theme ?? \"dark-plus\";\n\n useEffect(() => {\n let ignore = false;\n (async () => {\n try {\n const highlighter = await getSingletonHighlighter({\n themes: [theme],\n });\n if (ignore) {\n return;\n }\n const vFile = await unified()\n .use(remarkParse)\n .use(remarkGfm)\n .use(remarkToRehype)\n .use(rehypeMermaid)\n .use(rehypeShikiFromHighlighter, highlighter as any, {\n theme,\n lazy: true,\n defaultLanguage: \"text\",\n })\n .use(rehypeReact, {\n ...production,\n passNode: true,\n components,\n } as RehypeReactOptions)\n .process(content);\n if (!ignore) {\n setReactContent(vFile.result);\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 })();\n return () => {\n ignore = true;\n };\n }, [components, content, theme]);\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\nconst shikiOptions: MarkdownComponentProps[\"shiki\"] = {\n theme: \"light-plus\",\n};\n\nexport interface EnhancedMarkdownProps extends MarkdownComponentProps {\n className?: string;\n}\n\nexport function EnhancedMarkdown({\n className,\n ...props\n}: EnhancedMarkdownProps) {\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\n className={className}\n onMouseMove={handleMouseMove}\n onMouseLeave={handleMouseLeave}\n >\n <MarkdownComponent\n {...props}\n components={components}\n shiki={shikiOptions}\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, `.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","// 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]!./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 { orderBy, 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\";\n// import { getPreGeneratedAttrViews } from \"../utils/converters/getPreGeneratedAttrViews\";\n// import { 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 \"../../shared/bricks\";\nimport { ICON_LOADING } from \"../../shared/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 = getOrderedProps(schema);\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 = getOrderedProps(schema);\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\nfunction getOrderedProps(schema: JSONSchemaObject) {\n const props = Object.entries(schema.properties);\n if (!schema.required?.length) {\n return props;\n }\n const propKeys = Object.keys(schema.properties);\n return orderBy(\n props,\n [\n ([k]) => {\n const requiredIndex = schema.required!.indexOf(k);\n if (requiredIndex === -1) {\n return schema.required!.length + propKeys.indexOf(k);\n }\n return requiredIndex;\n },\n ],\n [\"asc\"]\n );\n}\n","import type { Reducer } from \"react\";\nimport { isMatch, pick } from \"lodash\";\nimport type {\n DataPart,\n GeneratedView,\n Job,\n JobPatch,\n Message,\n Part,\n Task,\n TextPart,\n} from \"../../shared/interfaces\";\nimport type { CruiseCanvasAction } from \"./interfaces\";\nimport { getAsyncConstructedView } from \"../../shared/getAsyncConstructedView\";\n\nexport const tasks: Reducer<Task[], CruiseCanvasAction> = (state, action) => {\n switch (action.type) {\n case \"sse\": {\n const tasksPatch = action.payload.tasks;\n let tasks = state;\n\n if (!Array.isArray(tasksPatch) || tasksPatch.length === 0) {\n return state;\n }\n\n for (const task of tasksPatch) {\n const taskPatch = pick(task, [\n \"id\",\n \"upstream\",\n \"parent\",\n \"state\",\n \"plan\",\n \"startTime\",\n \"endTime\",\n \"jobs\",\n ]);\n const previousTaskIndex = tasks.findIndex(\n (task) => task.id === taskPatch.id\n );\n const previousTask = tasks[previousTaskIndex];\n taskPatch.jobs = mergeJobs(\n previousTask?.jobs,\n taskPatch.jobs,\n action.workspace\n );\n\n if (previousTaskIndex === -1) {\n tasks = [...tasks, { ...taskPatch } as Task];\n } else {\n if (!isMatch(previousTask, taskPatch)) {\n tasks = [\n ...tasks.slice(0, previousTaskIndex),\n { ...previousTask, ...taskPatch } as Task,\n ...tasks.slice(previousTaskIndex + 1),\n ];\n }\n }\n }\n\n return tasks;\n }\n\n case \"reset\": {\n return state.length === 0 ? state : [];\n }\n }\n\n return state;\n};\n\nfunction mergeJobs(\n previousJobs: Job[] | undefined,\n jobsPatch: JobPatch[] | undefined,\n workspace: string\n): Job[] {\n let jobs = previousJobs ?? [];\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 === \"create_view\" &&\n patch.state === \"completed\"\n ) {\n const generatedView = getJobGeneratedView(messagesPatch, workspace);\n if (generatedView) {\n patch.generatedView = generatedView;\n }\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 \"hidden\",\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 ([\"create_view\"] as (string | undefined)[]).includes(\n restMessagesPatch.toolCall?.name ?? previousJob.toolCall?.name\n ) &&\n (restMessagesPatch.state ?? previousJob.state) === \"completed\"\n ) {\n const generatedView = getJobGeneratedView(messagesPatch, workspace);\n if (generatedView) {\n restMessagesPatch.generatedView = generatedView;\n }\n }\n\n if (!previousJob.generatedView && !restMessagesPatch.generatedView) {\n const view = getJobStaticDataView(messagesPatch);\n if (view) {\n view.withContexts = {\n RESPONSE: getJobStaticDataResponse(restMessagesPatch.messages!),\n };\n view.asyncConstructedView = getAsyncConstructedView(view, workspace);\n restMessagesPatch.generatedView = view;\n }\n }\n\n if (!isMatch(previousJob, restMessagesPatch)) {\n jobs = [\n ...jobs.slice(0, previousJobIndex),\n {\n ...previousJob,\n ...restMessagesPatch,\n },\n ...jobs.slice(previousJobIndex + 1),\n ];\n }\n }\n }\n return jobs;\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 workspace: string\n): GeneratedView | 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 view = JSON.parse(part.text) as GeneratedView;\n view.asyncConstructedView = getAsyncConstructedView(\n view,\n workspace\n );\n return view;\n } catch {\n // Do nothing, continue to next part\n }\n }\n }\n }\n }\n}\n\nfunction getJobStaticDataView(\n messages: Message[] | undefined\n): GeneratedView | 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 === \"data\" && part.data?.type === \"static_data_view\") {\n const view: GeneratedView = {\n viewId: part.data.viewId,\n code: part.data.code,\n from: part.data.from,\n isStaticData: true,\n };\n return view;\n }\n }\n }\n }\n}\n\nfunction getJobStaticDataResponse(messages: Message[]) {\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 return JSON.parse(part.text);\n } catch (e) {\n // eslint-disable-next-line no-console\n console.error(\"Failed to parse static data response as JSON:\", e);\n }\n }\n }\n }\n }\n\n return null;\n}\n","import { Reducer } from \"react\";\nimport type { CruiseCanvasAction, CruiseCanvasState } from \"./interfaces\";\nimport { tasks } from \"./tasks\";\nimport { conversation } from \"./conversation\";\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 conversation,\n tasks,\n error,\n});\n","import type { Reducer } from \"react\";\nimport { isMatch, pick } from \"lodash\";\nimport type { CruiseCanvasAction } from \"./interfaces\";\nimport type { ConversationBaseDetail } from \"../../shared/interfaces\";\n\nexport const conversation: Reducer<\n ConversationBaseDetail | null,\n CruiseCanvasAction\n> = (state, action) => {\n switch (action.type) {\n case \"sse\": {\n const patch = pick(action.payload, [\n \"id\",\n \"state\",\n \"title\",\n \"startTime\",\n \"endTime\",\n ]);\n\n return (\n state && isMatch(state, patch) ? state : { ...state, ...patch }\n ) as ConversationBaseDetail;\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 { createSSEStream } from \"@next-core/utils/general\";\nimport { getBasePath, handleHttpError } from \"@next-core/runtime\";\nimport { rootReducer } from \"./reducers\";\nimport type { ConversationPatch, RequestStore } from \"../shared/interfaces\";\n\nconst MINIMAL_DELAY = 500;\n\nexport function useConversationDetail(\n conversationId: string,\n initialRequest?: RequestStore | null,\n replay?: boolean,\n replayDelay?: number\n) {\n const [{ conversation, tasks, error }, dispatch] = useReducer(\n rootReducer,\n null,\n () => ({\n conversation: null,\n tasks: [],\n error: null,\n })\n );\n\n const humanInputRef = useRef<(jobId: string, input: string) => void>();\n\n const replayListRef = useRef<ConversationPatch[]>([]);\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 dispatch({ type: \"reset\" });\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, workspace: conversationId });\n isInitial = false;\n }\n }, [conversationId]);\n\n useEffect(() => {\n dispatch({ type: \"reset\" });\n replayListRef.current = [];\n humanInputRef.current = undefined;\n\n let ignore = false;\n let requesting = false;\n let ctrl: AbortController | undefined;\n\n const makeRequest = async (content: string | null) => {\n if (requesting) {\n return;\n }\n\n requesting = true;\n ctrl = new AbortController();\n try {\n const sseRequest = await (content === null\n ? createSSEStream<ConversationPatch>(\n `${getBasePath()}api/gateway/logic.llm.aiops_service/api/v1/elevo/conversations/${conversationId}/stream`,\n {\n signal: ctrl.signal,\n }\n )\n : createSSEStream<ConversationPatch>(\n `${getBasePath()}api/gateway/logic.llm.aiops_service/api/v1/elevo/conversations/${conversationId}/messages`,\n {\n signal: ctrl.signal,\n method: \"POST\",\n body: JSON.stringify({ content }),\n headers: {\n \"Content-Type\": \"application/json\",\n },\n }\n ));\n const stream = await sseRequest;\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, workspace: conversationId });\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 humanInputRef.current = async (jobId: string, content: string) => {\n makeRequest(content);\n };\n\n makeRequest(\n initialRequest?.conversationId === conversationId\n ? initialRequest.content\n : null\n );\n\n return () => {\n ignore = true;\n ctrl?.abort();\n };\n }, [conversationId, initialRequest]);\n\n return {\n conversation,\n tasks,\n error,\n humanInputRef,\n skipToResults,\n watchAgain,\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, `.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}ai-portal\\\\.cruise-canvas[hide-mermaid] .code-block--B8VszXyv .mermaid{display:none}`, \"\"]);\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 { convertTsx } from \"@next-shared/tsx-converter\";\nimport type { ParseResult } from \"@next-shared/tsx-parser\";\nimport type { GraphGeneratedView } from \"../../cruise-canvas/interfaces\";\nimport styles from \"./ExpandedView.module.css\";\nimport { WrappedIcon, WrappedIconButton } from \"../../shared/bricks\";\nimport { createPortal } from \"../../cruise-canvas/utils/createPortal\";\nimport { ICON_CLOSE, ICON_FEEDBACK } from \"../constants\";\nimport { TaskContext } from \"../TaskContext\";\nimport { useViewFeedbackDone } from \"../useViewFeedbackDone\";\n\nexport interface ExpandedViewProps {\n views: GraphGeneratedView[];\n}\n\nexport function ExpandedView({ views }: ExpandedViewProps) {\n const rootId = useMemo(() => uniqueId(), []);\n const {\n workspace,\n activeExpandedViewJobId,\n setActiveExpandedViewJobId,\n manuallyUpdatedViews,\n showFeedbackOnView,\n onFeedbackOnView,\n feedbackDoneViews,\n } = useContext(TaskContext);\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 generatedView = activeExpandedViewJobId\n ? (manuallyUpdatedViews?.get(activeExpandedViewJobId) ??\n views.find((v) => v.id === activeExpandedViewJobId)?.view)\n : null;\n const feedbackDone =\n useViewFeedbackDone(generatedView?.viewId, showFeedbackOnView) ||\n (generatedView && feedbackDoneViews?.has(generatedView.viewId));\n const [view, setView] = useState<ParseResult | null>(null);\n const canFeedback =\n !!view && !!generatedView?.viewId && generatedView.from !== \"config\";\n const [viewsWithTitle, setViewsWithTitle] = useState<\n Array<\n GraphGeneratedView & {\n title?: string;\n }\n >\n >(views);\n\n useEffect(() => {\n generatedView?.asyncConstructedView?.then((view) => {\n setView(view);\n });\n }, [generatedView, workspace]);\n\n useEffect(() => {\n Promise.all(\n views.map(async (v) => {\n const view = await v.view.asyncConstructedView;\n return {\n ...v,\n title: view?.title,\n };\n })\n ).then((result) => {\n setViewsWithTitle(result);\n });\n }, [views]);\n\n const sizeSmall = useMemo(() => {\n let hasForm = false;\n if (view) {\n for (const component of view?.components ?? []) {\n switch (component.name) {\n case \"Form\":\n case \"eo-form\":\n case \"Button\":\n case \"eo-button\":\n hasForm = true;\n break;\n default:\n return false;\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 setLoading(true);\n if (!view || !generatedView) {\n return;\n }\n let ignore = false;\n (async () => {\n try {\n const convertedView = await convertTsx(view, {\n rootId,\n workspace,\n expanded: true,\n withContexts: generatedView.withContexts,\n });\n if (ignore) {\n return;\n }\n const { brick, context } = convertedView;\n await rootRef.current?.render(brick, { 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 }, [rootId, workspace, view, generatedView]);\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 {viewsWithTitle.map((view) => (\n <li key={view.id}>\n <button\n className={classNames(styles[\"nav-button\"], {\n [styles.active]: activeExpandedViewJobId === view.id,\n })}\n onClick={() => setActiveExpandedViewJobId(view.id)}\n >\n {view.title ?? \"…\"}\n </button>\n </li>\n ))}\n </ul>\n <div className={styles.buttons}>\n {showFeedbackOnView && !feedbackDone && canFeedback && (\n <WrappedIconButton\n icon={ICON_FEEDBACK}\n onClick={() => onFeedbackOnView?.(generatedView.viewId)}\n />\n )}\n <WrappedIconButton icon={ICON_CLOSE} onClick={handleClose} />\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, `.expanded-view--Pl3PL2nR{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--dLWwzH3E{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--zv2Yj10m{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--zv2Yj10m:not(:last-child){margin-right:12px}.nav-button--zv2Yj10m.active--MHyqtaKu{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--zv2Yj10m:hover{color:var(--elevo-color-brand)}.body--edodw95r{width:100%;max-width:1556px}.body--edodw95r.small--Y90AL_bt{max-width:804px}.loading--UxfFogUY{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);font-size:48px;color:#fff}.buttons--ZZYyY2LU{position:absolute;top:24px;right:24px;display:flex;gap:12px}`, \"\"]);\n// Exports\n___CSS_LOADER_EXPORT___.locals = {\n\t\"expanded-view\": `expanded-view--Pl3PL2nR`,\n\t\"nav\": `nav--dLWwzH3E`,\n\t\"nav-button\": `nav-button--zv2Yj10m`,\n\t\"active\": `active--MHyqtaKu`,\n\t\"body\": `body--edodw95r`,\n\t\"small\": `small--Y90AL_bt`,\n\t\"loading\": `loading--UxfFogUY`,\n\t\"buttons\": `buttons--ZZYyY2LU`\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]!./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","import { i18n } from \"@next-core/i18n\";\n\nexport enum K {\n CONFIRM = \"CONFIRM\",\n ADD_STEP = \"ADD_STEP\",\n RESET_PLAN = \"RESET_PLAN\",\n}\n\nconst en: Locale = {\n CONFIRM: \"Confirm\",\n ADD_STEP: \"Add step\",\n RESET_PLAN: \"Reset plan\",\n};\n\nconst zh: Locale = {\n CONFIRM: \"确认\",\n ADD_STEP: \"添加步骤\",\n RESET_PLAN: \"重置计划\",\n};\n\nexport const NS = \"bricks/ai-portal/HumanAdjustPlan\";\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","// 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 { initializeI18n } from \"@next-core/i18n\";\nimport styles from \"./HumanAdjustPlan.module.css\";\nimport { WrappedButton, WrappedIcon } from \"../bricks\";\nimport { K, locales, NS, t } from \"./i18n.js\";\nimport { getContentEditable } from \"../getContentEditable\";\nimport { TaskContext } from \"../TaskContext\";\n\ninitializeI18n(NS, locales);\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 { humanInput } = useContext(TaskContext);\n const [list, setList] = useState<DraggableStep[]>([]);\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 { createContext, type Dispatch } from \"react\";\nimport type { FileInfo, SizeTuple } from \"./interfaces\";\n\nexport interface CanvasContextValue {\n onNodeResize: (id: string, size: SizeTuple | null) => void;\n setActiveNodeId: Dispatch<React.SetStateAction<string | null>>;\n hoverOnScrollableContent: boolean;\n setHoverOnScrollableContent: Dispatch<React.SetStateAction<boolean>>;\n supports?: Record<string, boolean>;\n setActiveFile: Dispatch<React.SetStateAction<FileInfo | null>>;\n}\n\nexport const CanvasContext = createContext<CanvasContextValue>({\n onNodeResize: () => {},\n setActiveNodeId: () => {},\n hoverOnScrollableContent: false,\n setHoverOnScrollableContent: () => {},\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 \"../../shared/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(\"shiki\");\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 <div className={styles[\"code-block\"]}>\n <pre {...props} className={props.className} ref={ref}>\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 </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]!./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, `.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 .shiki{font-family:\"Fira Code\",\"Fira Mono\",Menlo,Consolas,\"DejaVu Sans Mono\",monospace;white-space:pre;word-spacing:normal;word-break:normal;line-height:1.5;-moz-tab-size:4;tab-size:4;-webkit-hyphens:none;hyphens:none;font-size:13px;padding:1em;margin:0.5em 0;overflow-x:auto;border-radius:9px}.markdown--t5EHw6k4 .shiki.light-plus{background:hsl(230,1%,98%)!important}.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","\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 { i18n } from \"@next-core/i18n\";\n\nexport enum K {\n PAUSE_THE_TASK = \"PAUSE_THE_TASK\",\n RESUME_THE_TASK = \"RESUME_THE_TASK\",\n TERMINATE_THE_TASK = \"TERMINATE_THE_TASK\",\n CONFIRM_TO_TERMINATE_THE_TASK_TITLE = \"CONFIRM_TO_TERMINATE_THE_TASK_TITLE\",\n CONFIRM_TO_TERMINATE_THE_TASK_CONTENT = \"CONFIRM_TO_TERMINATE_THE_TASK_CONTENT\",\n SEND_MESSAGE = \"SEND_MESSAGE\",\n}\n\nconst en: Locale = {\n PAUSE_THE_TASK: \"Pause the task\",\n RESUME_THE_TASK: \"Resume the task\",\n TERMINATE_THE_TASK: \"Terminate the task\",\n CONFIRM_TO_TERMINATE_THE_TASK_TITLE: \"Are you sure to terminate the task?\",\n CONFIRM_TO_TERMINATE_THE_TASK_CONTENT:\n \"The task can not be resumed after been terminated.\",\n SEND_MESSAGE: \"Send message\",\n};\n\nconst zh: Locale = {\n PAUSE_THE_TASK: \"暂停任务\",\n RESUME_THE_TASK: \"恢复任务\",\n TERMINATE_THE_TASK: \"终止任务\",\n CONFIRM_TO_TERMINATE_THE_TASK_TITLE: \"确定终止任务吗?\",\n CONFIRM_TO_TERMINATE_THE_TASK_CONTENT: \"任务终止后将无法再恢复运行。\",\n SEND_MESSAGE: \"发送消息\",\n};\n\nexport const NS = \"bricks/ai-portal/ChatBox\";\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","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 { initializeI18n } from \"@next-core/i18n\";\nimport styles from \"./ChatBox.module.css\";\nimport { showDialog, WrappedIcon, WrappedIconButton } from \"../bricks\";\nimport type { TaskState } from \"../../cruise-canvas/interfaces\";\nimport { K, locales, NS, t } from \"./i18n\";\nimport { ICON_LOADING } from \"../constants\";\nimport { TaskContext } from \"../TaskContext\";\nimport type { ConversationState } from \"../interfaces\";\n\ninitializeI18n(NS, locales);\n\nconst ICON_STOP: GeneralIconProps = {\n lib: \"fa\",\n prefix: \"far\",\n icon: \"circle-stop\",\n};\n\nexport interface ChatBoxProps {\n state: TaskState | ConversationState | undefined;\n canChat: boolean;\n inputRequiredJobId?: string | null;\n}\n\nexport function ChatBox({\n state,\n canChat,\n inputRequiredJobId,\n}: 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 { humanInput, onTerminate, supports } = useContext(TaskContext);\n const [actionBeingTaken, setActionBeingTaken] = useState(false);\n\n useEffect(() => {\n setActionBeingTaken(false);\n }, [state]);\n\n const handleTerminate = useCallback(async () => {\n try {\n await showDialog({\n type: \"confirm\",\n title: t(K.CONFIRM_TO_TERMINATE_THE_TASK_TITLE),\n content: \"\",\n // content: t(K.CONFIRM_TO_TERMINATE_THE_TASK_CONTENT),\n });\n } catch {\n return;\n }\n onTerminate();\n setActionBeingTaken(true);\n }, [onTerminate]);\n\n useEffect(() => {\n if (canChat) {\n textareaRef.current?.focus();\n }\n }, [canChat]);\n\n const onSubmit = useCallback(\n (value: string) => {\n if (!canChat || !value) {\n return;\n }\n\n if (inputRequiredJobId) {\n humanInput(inputRequiredJobId, value);\n } else {\n humanInput(\"\", value);\n }\n valueRef.current = \"\";\n setValue(\"\");\n },\n [humanInput, inputRequiredJobId, canChat]\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 {canChat || !supports?.intercept ? (\n <button\n className={styles[\"btn-send\"]}\n disabled={!value || !canChat}\n onClick={handleSubmitClick}\n >\n <WrappedIcon lib=\"fa\" prefix=\"fas\" icon=\"arrow-up\" />\n </button>\n ) : (\n <>\n {actionBeingTaken ? (\n <WrappedIconButton icon={ICON_LOADING} disabled />\n ) : (\n <WrappedIconButton\n icon={ICON_STOP}\n disabled={!!actionBeingTaken}\n tooltip={\n actionBeingTaken ? undefined : t(K.TERMINATE_THE_TASK)\n }\n onClick={handleTerminate}\n />\n )}\n </>\n )}\n </div>\n </div>\n </div>\n );\n}\n","import type { GeneralIconProps } from \"@next-bricks/icons/general-icon\";\nimport type { TaskState as LegacyTaskState } from \"../cruise-canvas/interfaces.js\";\nimport type { ConversationState, TaskState } from \"./interfaces.js\";\n\nexport const DONE_STATES = [\n \"completed\",\n \"failed\",\n \"canceled\",\n \"terminated\",\n] as (ConversationState | TaskState | LegacyTaskState | undefined)[];\n\nexport const GENERAL_DONE_STATES = [...DONE_STATES, \"paused\"] as (\n | ConversationState\n | TaskState\n | LegacyTaskState\n | undefined\n)[];\n\nexport const NON_WORKING_STATES = [...GENERAL_DONE_STATES, \"input-required\"];\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\nexport const ICON_CANVAS: GeneralIconProps = {\n lib: \"lucide\",\n icon: \"network\",\n} as GeneralIconProps;\n\nexport const ICON_CHAT: GeneralIconProps = {\n lib: \"lucide\",\n icon: \"messages-square\",\n} as GeneralIconProps;\n\nexport const ICON_FEEDBACK: GeneralIconProps = {\n lib: \"fa\",\n prefix: \"far\",\n icon: \"message\",\n};\n"],"names":["bundledLanguages","json","javascript","js","typescript","ts","html","html-derivative","xml","css","markdown","md","mermaid","mmd","jsx","tsx","shellscript","bash","sh","shell","zsh","python","py","go","sql","bundledThemes","lightPlus","darkPlus","createHighlighter","createdBundledHighlighter","langs","themes","engine","createOnigurumaEngine","codeToHtml","codeToHast","codeToTokensBase","codeToTokens","codeToTokensWithThemes","getSingletonHighlighter","getLastGrammarState","createSingletonShorthands","guessEmbeddedLanguages","code","lang","options","styleTagTransform","setAttributes","insert","domAPI","insertStyleElement","locals","undefined","ToolProgressLine","_ref","progress","failed","data","React","className","classNames","styles","step","key","axis","line","dot","count","total","description","message","mergeMessages","messages","merged","previousRole","role","lastMessage","length","parts","push","mergeMessageParts","previousType","previousDataType","part","_part$data","_part$data2","type","text","rootReducer","reducers","task","state","action","taskPatch","pick","payload","isInitial","isMatchWith","isEqual","jobs","jobsPatch","Array","isArray","jobPatch","_jobs$findIndex","_jobs","previousJobIndex","findIndex","job","id","messagesPatch","toolCall","arguments","originalArguments","JSON","parse","e","argumentsParseFailed","argumentsParseError","patch","previousJob","restMessagesPatch","_previousJob$messages","slice","error","Object","fromEntries","entries","map","value","MINIMAL_DELAY","useTaskDetail","taskId","replay","replayDelay","dispatch","useReducer","humanInputRef","useRef","resumedRef","replayListRef","replayRef","replayDelayRef","replayResolveRef","skipToResults","useCallback","current","watchAgain","async","previousTime","delay","time","Math","min","max","Promise","resolve","setTimeout","useEffect","ctrl","ignore","requesting","makeRequest","AbortController","request","createSSEStream","getBasePath","signal","stream","console","handleHttpError","jobId","input","http","post","_ctrl","abort","___CSS_LOADER_EXPORT___","module","K","NS","t","i18n","getFixedT","checks","getChecks","label","IS_THE_TASK_PLAN_COMPLETE","group","IS_THE_TASK_PLAN_LOGICALLY_CORRECT","ARE_THE_TASK_PLAN_STEPS_CONCISE","ARE_THE_ANALYTICAL_CONCLUSIONS_ACCURATE","IS_THE_EVIDENCE_SUPPORTING_THE_CONCLUSIONS_SUFFICIENT","NodeFeedback","submittingFeedback","submittedFeedback","setShowFeedback","onSubmitFeedback","useContext","TaskContext","formRef","triedSubmit","setTriedSubmit","useState","handleSubmit","_formRef$current","_formData$get","preventDefault","reportValidity","formData","FormData","plan","result","i","get","feedback","handleReset","_formRef$current2","reset","submitted","THANKS_FOR_YOUR_FEEDBACK","heading","title","FEEDBACK_NODE_TITLE","WrappedIconButton","icon","ICON_CLOSE","variant","onClick","form","validate","ref","check","index","horizontal","radio","required","name","YES","NO","vertical","htmlFor","PROBLEM_FEEDBACK","placeholder","PROBLEM_FEEDBACK_PLACEHOLDER","rows","submit","WrappedButton","themeVariant","RESET","shape","disabled","SUBMIT","initializeI18n","en","zh","getFlatOrderedJobs","tasks","list","taskIds","taskMap","roots","taskRoots","downstreamMap","taskDownstreamMap","getOrderedNodes","jobOptions","showHiddenNodes","showHiddenJobs","mapEntries","levelEntries","downstreamMapEntries","orderedTasks","Map","orderedTask","jobIds","jobMap","levels","jobLevels","jobRoots","leaves","jobLeaves","jobDownstreamMap","includes","downstreamTasks","downstreamTaskId","downstreamTaskRoots","leaf","production","Fragment","jsxs","THEME","useCodeBlock","language","source","node","setNode","rendered","isMarkdown","hast","theme","transformers","pre","string","toString","test","this","children","find","child","tagName","toJsxRuntime","components","CodeBlock","renderCodeBlock","withBox","brick","properties","style","expanded","background","backdropFilter","borderRadius","padding","convertDataSources","dataSources","api","params","entity","transform","rejectTransform","useProvider","args","toLowerCase","replace","workspace","isObject","translate","limit","limitBy","order","displayName","onReject","track","EXPRESSION_PREFIX_REG","EXPRESSION_SUFFIX_REG","parseDataSource","isString","expression","expr","trim","warn","stringify","embedded","usedContexts","strictCollectMemberUsage","convertEventHandlers","handler","hdl","_handler$callback","success","callback","target","rootId","componentId","method","content","convertEventHandler","filter","Boolean","VALID_IDENTIFIER_REG","getMemberAccessor","property","propertyStr","String","_","convertToStoryboard","config","attr","lowLevelConvertToStoryboard","attrAccessor","brickItem","display","getPlainBrick","countOnly","_config$style","_config$style2","_config$style3","_config$style4","_config$style5","colorSuffix","valueAccessor","getValueAccessor","textContent","size","getTagSize","color","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","falseIcon","false","trueStyle","getPlainStyle","falseStyle","lib","prefix","category","_config$formatter","formatter","format","isCostTime","tag","_config$true$text","_config$true3","_config$false$text","_config$false3","_config$true4","_config$false4","trueContent","falseContent","field","configStyle","ignoreStyle","fontSize","fontWeight","findNearestCandidate","candidates","weight","reduce","nearest","candidate","abs","visualWeight","cache","getModelObjectInstanceId","objectId","has","promise","InstanceApi_postSearchV3","fields","query","$eq","page_size","instanceId","doGetModelObjectInstanceId","set","attrListCache","getPreGeneratedAttrViews","attrViews","attrList","join","InstanceApi_getDetail","doGetAttrList","getAttrList","_attr$generatedView","select","generatedView","doGetPreGeneratedAttrViews","findObjectIdByUsedDataContexts","variables","dataSourceToObjectIdMap","variableDepsMap","variable","deps","processedContexts","Set","context","add","dataSourceObjectId","variableDeps","dep","deepReplaceVariables","patterns","item","k","v","trimmed","isExpressionString","keys","some","replacements","preevaluate","withParent","hooks","beforeVisitGlobal","parent","p","shorthand","computed","suffix","chunks","prevStart","start","end","substring","replaceVariables","columnUseBrickParams","COLORS","convertHexColorToRGBA","alpha","hex","bigint","parseInt","convertComponent","component","_component$children","props","parsedDataSource","convertList","view","_columns$","columns","rowKey","pagination","restProps","configuredColumns","column","render","dataIndex","slot","convertedColumns","all","useBrick","flatMap","useChildren","scrollConfig","x","bordered","from","values","convertTable","configuredItems","convertedList","_ref2","templateColumns","convertDescriptions","cardTitle","convertCard","groupField","_groupField","widgets","chartData","mergedWidgets","metricGroups","groups","doGetPreGeneratedMetricGroups","getPreGeneratedMetricGroups","mergedMetrics","metricIds","w","metric","widget","mergedWidget","g","metrics","relevantMetrics","m","counterMetric","counter","groupTitle","metricId","delete","colorCursor","gridTemplateColumns","_widget$relevantMetri","_widget$relevantMetri2","precision","colorCount","colors","unit","chart","xField","yFields","yField","forceAbsoluteNumbers","series","isNegative","height","timeFormat","areaOptions","fill","yAxis","areaShape","legends","tooltip","marker","stroke","lineWidth","shadowColor","shadowBlur","shadowOffsetX","shadowOffsetY","domStyles","boxShadow","border","marginBottom","flexDirection","lineColor","showArea","convertDashboard","convertButton","convertForm","confirmText","cancelText","portal","modalTitle","keyboard","convertModal","convertText","convertLink","fontFamily","direction","textAlign","whiteSpace","wordSpacing","wordBreak","lineHeight","tabSize","hyphens","margin","overflowX","convertOutput","convertTag","convertAvatar","convertAvatarGroup","convertFormItem","convertForEach","convertIf","_brick","_brick$properties","_brick$properties2","_brick$properties2$da","dataset","events","event","_component$events","click","search","convertEvents","flat","BUILTIN_FUNCTIONS","texts","_len","items","_key","mergeValuesAsText","_list$findLast","findLast","call","pipes","unitFormat","grouped","groupedList","displayNameList","metricNames","metricName","_displayNameList$find","_displayNameList$find2","metric_name","metric_display_name","convertTsx","_result$dataSources","_result$variables","withContexts","every","Error","useViewFeedbackDone","viewId","showFeedbackOnView","done","setDone","_response$feedback","response","priority","fetchViewFeedbackDone","then","CreatedView","_manuallyUpdatedViews","onSizeChange","useMemo","uniqueId","showJsxEditor","setActiveExpandedViewJobId","setActiveJsxEditorJob","manuallyUpdatedViews","onFeedbackOnView","feedbackDoneViews","rootRef","feedbackDone","setView","canFeedback","_generatedView$asyncC","asyncConstructedView","container","createPortal","root","unstable_createRoot","supportsUseChildren","unmount","remove","loading","setLoading","_rootRef$current","convertedView","sizeLarge","_view$components","large","traverseComponents","_component$properties","handleExpandClick","sharedStyles","WrappedIcon","ICON_LOADING","buttons","button","FEEDBACK","ICON_FEEDBACK","FULLSCREEN","remoteWorkerPromise","worker","getRemoteTsxParserWorker","Remote","wrap","Worker","URL","getAsyncConstructedView","document","createElement","position","width","body","append","createContext","humanInput","onShare","onTerminate","activeExpandedViewJobId","activeToolCallJobId","setActiveToolCallJobId","getToolDataProgress","toolCallMessages","progressPart","_message$parts","ToolCallStatus","_toolCall$annotations","toolTitle","annotations","hasToolCallResponse","_job$messages","msg","readOnly","handleClick","toolState","isError","status","startTime","moment","endTime","humanize","ss","spinning","wrapBrick","WrappedDrawer","onClose","onOpen","showDialog","unwrapProvider","copyToClipboard","nodes","fixedNodes","childrenMap","rootChildren","hiddenNodeIds","hidden","_node$upstream2","up","_node$upstream","upstream","downstream","alignDownstreamMap","level","nodeId","subChildren","directSubChildren","_childNode$upstream","leafSubChildren","fullDownstreamMap","findVisibleDownstreams","downstreams","nextDownstreams","newDownstreamMap","fixDownstreams","visibleDownstreams","visitedNodes","queue","shift","ReplayToolbar","taskDone","REPLAY_COMPLETED","REPLAYING","WATCH_AGAIN","SKIP_TO_RESULTS","mermaidPromise","parser","DOMParser","serializer","XMLSerializer","rehypeMermaid","promises","visit","tree","classListItem","getCodeLanguage","svg","default","initialize","startOnLoad","themeVariables","primaryColor","primaryBorderColor","doLoadMermaid","_document$getElementB","getElementById","parseFromString","svgElement","querySelector","defs","createElementNS","innerHTML","prepend","appendChild","modifiedSvg","serializeToString","fromHtmlIsomorphic","fragment","splice","concat","MarkdownComponent","_shiki$theme","shiki","reactContent","setReactContent","highlighter","vFile","unified","use","remarkParse","remarkGfm","remarkToRehype","rehypeShikiFromHighlighter","lazy","defaultLanguage","rehypeReact","passNode","process","shikiOptions","EnhancedMarkdown","setHoverOnScrollableContent","CanvasContext","handleMouseMove","found","el","nativeEvent","composedPath","HTMLTableElement","HTMLPreElement","scrollWidth","clientWidth","handleMouseLeave","onMouseMove","onMouseLeave","_extends","SIZING_STYLE","hiddenTextarea","modKey","navigator","platform","TextareaAutoResize","LegacyTextareaAutoResize","autoResize","_autoResize","minRows","maxRows","borderSize","paddingSize","containerRef","propValue","submitWhen","onChange","onSubmit","onKeyDown","onCompositionStart","onCompositionEnd","setValue","textareaRef","autoStyle","setAutoStyle","useImperativeHandle","focus","textarea","_textarea$value","valueLength","setSelectionRange","doAutoResize","uiTextNode","setAttribute","uiTextNodeStyle","window","getComputedStyle","sizingStyle","getPropertyValue","minHeight","maxHeight","overflowY","scrollHeight","singleRowHeight","parseFloat","resize","calculateAutoSizeStyle","flushSync","compositionRef","handleCompositionStart","handleCompositionEnd","handleKeyDown","shiftKey","stopPropagation","previousInlineSize","observer","ResizeObserver","entry","currentInlineSize","contentBoxSize","inlineSize","contentRect","requestAnimationFrame","observe","disconnect","LIST_SPLIT_THRESHOLD","SHOW_AS_TABLE_THRESHOLD","BUILTIN_FN_STRINGIFY","CmdbInstanceDetail","detail","outputSchema","bricks","_schema","schema","modals","builtinFnStringify","convertArrayOfObjects","idPrefix","needContext","_props$","getOrderedProps","modalId","normalizeIdentifier","contextId","modal","hideCancelButton","maskClosable","tableChildren","upperFirst","convertObject","clickHandler","cursor","_props$2","_ref3","def","isEmptyValue","contextName","isComplexType","convertCmdbInstanceDetail","hasOwnProperty","identifier","_schema$required","propKeys","orderBy","_ref4","requiredIndex","indexOf","mergeJobs","previousJobs","_patch$toolCall","getJobGeneratedView","_restMessagesPatch$to","_restMessagesPatch$to2","_previousJob$toolCall","_restMessagesPatch$st","getJobStaticDataView","RESPONSE","getJobStaticDataResponse","isMatch","_part$data3","isStaticData","conversation","tasksPatch","previousTaskIndex","previousTask","useConversationDetail","conversationId","initialRequest","sseRequest","headers","ExpandedView","_views$find","views","viewportRef","viewsWithTitle","setViewsWithTitle","sizeSmall","hasForm","handleClose","_viewportRef$current","handleKeydown","tabIndex","small","nav","_view$title","active","_supports","HumanAdjustPlan","steps","setList","idList","changed","setChanged","sensors","useSensors","useSensor","PointerSensor","activationConstraint","distance","dndModifiers","restrictToVerticalAxis","restrictToFirstScrollableAncestor","handleDragEnd","over","prev","activeIndex","overIndex","arrayMove","handleConfirm","handleAddStep","newlyAdded","handleDeleteStep","handleUpdateStepContent","DndContext","collisionDetection","closestCenter","modifiers","onDragEnd","SortableContext","strategy","verticalListSortingStrategy","AdjustStep","onDelete","onUpdateContent","actions","ADD_STEP","RESET_PLAN","toolbar","CONFIRM","attributes","listeners","setNodeRef","transition","isDragging","useSortable","contentRef","_contentRef$current","CSS","Transform","editing","setEditing","handleFocus","handleBlur","newContent","currentTarget","blur","dragging","handle","onFocus","onBlur","contentEditable","editable","div","supportsContentEditablePlaintextOnly","onNodeResize","setActiveNodeId","hoverOnScrollableContent","setActiveFile","COPY_BUTTON_ICON","COPY_BUTTON_ICON_SUCCESS","COPY_BUTTON_ICON_FAILED","_props$className","isCodeBlock","setState","timerRef","handleCopy","_ref$current","clearTimeout","copy","PAUSE_THE_TASK","RESUME_THE_TASK","TERMINATE_THE_TASK","CONFIRM_TO_TERMINATE_THE_TASK_TITLE","CONFIRM_TO_TERMINATE_THE_TASK_CONTENT","SEND_MESSAGE","ICON_STOP","ChatBox","canChat","inputRequiredJobId","valueRef","setWrap","supports","actionBeingTaken","setActionBeingTaken","handleTerminate","_textareaRef$current","handleChange","handleSubmitClick","blockSize","handleContainerClick","_textareaRef$current2","HTMLTextAreaElement","HTMLButtonElement","box","intercept","DONE_STATES","GENERAL_DONE_STATES","NON_WORKING_STATES","ICON_CANVAS","ICON_CHAT"],"sourceRoot":""}
|