@digitalsee-ai/rcs 1.1.8 → 1.1.9

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.
@@ -1,11 +1,12 @@
1
1
  import { CanvasAPI } from '../types/engine';
2
2
  import { FlowDraftPayload } from '../types/flowVersion';
3
+ import { SaveFlowFn } from './types';
3
4
  interface FlowVersionManagerProps {
4
5
  flowId: string;
5
6
  flowName?: string;
6
7
  dirty: boolean;
7
8
  canManage: boolean;
8
- onSave?: () => Promise<FlowDraftPayload | undefined>;
9
+ onSave?: SaveFlowFn;
9
10
  getFlowPayload?: () => FlowDraftPayload;
10
11
  canvasApi?: CanvasAPI;
11
12
  offlineApi?: (flowId: string) => Promise<void>;
@@ -2,7 +2,9 @@ import { default as React } from 'react';
2
2
  import { SaveStatus } from '../enums/workflow';
3
3
  import { CanvasAPI } from '../types/engine';
4
4
  interface NextWorkflowCanvasHeaderProps {
5
- onSave?: () => void;
5
+ onSave?: (options?: {
6
+ notifyHost?: boolean;
7
+ }) => void;
6
8
  readOnly?: boolean;
7
9
  unSave?: boolean;
8
10
  preview?: boolean;
@@ -2,8 +2,9 @@ import { default as React } from 'react';
2
2
  import { SaveStatus } from '../enums/workflow';
3
3
  import { CanvasAPI } from '../types/engine';
4
4
  import { FlowDraftPayload } from '../types/flowVersion';
5
+ import { SaveFlowFn } from './types';
5
6
  interface WorkflowCanvasHeaderProps {
6
- onSave?: () => Promise<FlowDraftPayload | undefined>;
7
+ onSave?: SaveFlowFn;
7
8
  getFlowPayload?: () => FlowDraftPayload;
8
9
  readOnly?: boolean;
9
10
  unSave?: boolean;
@@ -10,7 +10,7 @@ interface UseCanvasApiParams {
10
10
  getState: () => any;
11
11
  };
12
12
  setNodeConfigVisible: (nodeId: string | null) => void;
13
- saveFlowRef: React.RefObject<() => Promise<import('../../types/flowVersion').FlowDraftPayload | undefined>>;
13
+ saveFlowRef: React.RefObject<(options?: import('../types').SaveFlowCallOptions) => Promise<import('../../types/flowVersion').FlowDraftPayload | undefined>>;
14
14
  }
15
15
  /**
16
16
  * 构造对外 Canvas API
@@ -1,9 +1,12 @@
1
- import { FlowDraftPayload } from '../../types/flowVersion';
2
- /** 将画布保存返回值收敛为节点新增流程需要的 Promise<void>。 */
3
- export declare const createSaveFlowAfterNodeAdd: (saveFlow: () => Promise<FlowDraftPayload | undefined>) => () => Promise<void>;
1
+ import { SaveFlowFn } from '../types';
2
+ /**
3
+ * 将画布保存适配为节点新增流程需要的 Promise<void>。
4
+ * 不传 notifyHost,避免内部自动保存触发宿主 onSave / toast。
5
+ */
6
+ export declare const createSaveFlowAfterNodeAdd: (saveFlow: SaveFlowFn) => () => Promise<void>;
4
7
  /**
5
8
  * 将带返回值的画布保存函数适配为节点新增回调需要的 Promise<void>。
6
9
  *
7
10
  * 必须保持引用稳定,否则 useNodeAddCallback 的 effect 会反复清理并 dispatch,造成无限更新。
8
11
  */
9
- export declare const useSaveFlowAfterNodeAdd: (saveFlow: () => Promise<FlowDraftPayload | undefined>) => () => Promise<void>;
12
+ export declare const useSaveFlowAfterNodeAdd: (saveFlow: SaveFlowFn) => () => Promise<void>;
@@ -69,7 +69,7 @@ export interface WorkflowCanvasStateResult {
69
69
  openNodeSelector: ReturnType<typeof usePanel>['openNodeSelector'];
70
70
  handleManualAdd: ReturnType<typeof usePanel>['handleManualAdd'];
71
71
  restNativeProps: Record<string, any>;
72
- saveFlowRef: React.RefObject<() => Promise<import('../../types/flowVersion').FlowDraftPayload | undefined>>;
72
+ saveFlowRef: React.RefObject<(options?: import('../types').SaveFlowCallOptions) => Promise<import('../../types/flowVersion').FlowDraftPayload | undefined>>;
73
73
  }
74
74
  /**
75
75
  * 工作流画布共享状态 Hook
@@ -6,8 +6,22 @@ import { ExecutionControlState } from '../store/workflowSlice';
6
6
  import { CanvasAPI } from '../types/engine';
7
7
  import { FlowDraftPayload } from '../types/flowVersion';
8
8
  import { Edge, Node, NodeTypes } from '@xyflow/react';
9
+ /**
10
+ * 画布 saveFlow 调用选项。
11
+ *
12
+ * 节点新增等内部自动保存默认不通知宿主;用户主动保存(工具栏、发布前落草稿、canvasApi)应传 notifyHost: true。
13
+ */
14
+ export interface SaveFlowCallOptions {
15
+ /**
16
+ * 是否回调宿主 DigitalseeWorkFlow.onSave。
17
+ * @default false
18
+ */
19
+ notifyHost?: boolean;
20
+ }
21
+ /** 画布内部保存函数签名 */
22
+ export type SaveFlowFn = (options?: SaveFlowCallOptions) => Promise<FlowDraftPayload | undefined>;
9
23
  export interface CanvasHeaderProps {
10
- onSave?: () => Promise<FlowDraftPayload | undefined>;
24
+ onSave?: SaveFlowFn;
11
25
  getFlowPayload?: () => FlowDraftPayload;
12
26
  readOnly?: boolean;
13
27
  unSave?: boolean;
@@ -43,6 +43,9 @@ export interface DigitalseeWorkFlowProps {
43
43
  /**
44
44
  * 保存回调
45
45
  *
46
+ * 仅在用户主动保存时触发(工具栏保存、发布前落草稿、canvasApi.saveFlow),
47
+ * 节点新增等内部自动保存不会调用,避免宿主 toast 刷屏。
48
+ *
46
49
  * @param workflow 当前工作流数据
47
50
  */
48
51
  onSave?: (workflow: FlowDraftPayload) => void | Promise<void>;
@@ -11,40 +11,34 @@ export interface VariableInfo {
11
11
  /** 图标 URL 或 React 节点 */
12
12
  icon?: string | React.ReactNode;
13
13
  }
14
- export type ValueMode = 'normal' | 'expression' | 'code' | 'fixValue';
14
+ export type ValueMode = 'normal' | 'expression' | 'code' | 'formValue';
15
15
  interface RegisteredField {
16
16
  id: string;
17
17
  insertVariable: (variable: string, formatted: boolean) => void;
18
18
  focus: () => void;
19
19
  }
20
- export interface VariableSelectorContextValue {
21
- /** 当前激活的字段 ID */
20
+ /** 会随焦点/可见性变化的状态;仅真正需要订阅的组件应使用 */
21
+ export interface VariableSelectorStateValue {
22
22
  activeFieldId: string | null;
23
- /** 变量选择器是否可见 */
24
23
  selectorVisible: boolean;
25
- /** 可用变量列表 */
26
24
  availableVariables: VariableInfo[];
27
- /** 注册字段 */
25
+ }
26
+ /** 稳定操作接口;VariableInput 只消费这份,避免焦点切换拖垮整树 Slate 重渲染 */
27
+ export interface VariableSelectorActionsValue {
28
28
  registerField: (field: RegisteredField) => void;
29
- /** 注销字段 */
30
29
  unregisterField: (id: string) => void;
31
- /** 激活字段(获得焦点时调用) */
32
30
  activateField: (id: string) => void;
33
- /** 取消激活 */
34
31
  deactivateField: () => void;
35
- /** 显示/隐藏变量选择器 */
36
32
  setSelectorVisible: (visible: boolean) => void;
37
- /** 插入变量到当前激活的字段 */
38
33
  insertVariableToActiveField: (variable: string, wrapWithBraces?: boolean) => void;
39
- /** 设置可用变量列表 */
40
34
  setAvailableVariables: (variables: VariableInfo[]) => void;
41
- /** 验证变量是否有效 */
42
35
  validateVariable: (variable: string) => boolean;
43
- /** 格式化变量为 {{variable}} 格式 */
44
36
  formatVariable: (variable: string) => string;
45
- /** 从格式化字符串中提取变量 */
46
37
  extractVariable: (formatted: string) => string | null;
38
+ /** 读取当前激活字段(不触发订阅,供桥接插入使用) */
39
+ getActiveFieldId: () => string | null;
47
40
  }
41
+ export type VariableSelectorContextValue = VariableSelectorStateValue & VariableSelectorActionsValue;
48
42
  export interface VariableSelectorProviderProps {
49
43
  children: React.ReactNode;
50
44
  /** 初始可用变量列表 */
@@ -57,11 +51,18 @@ export interface VariableSelectorProviderProps {
57
51
  onValidateVariable?: (variable: string) => boolean;
58
52
  }
59
53
  export declare const VariableSelectorProvider: React.FC<VariableSelectorProviderProps>;
54
+ /** 完整读写(状态 + 操作)。焦点切换时会重渲染,仅桥接/面板使用 */
60
55
  export declare const useVariableSelector: () => VariableSelectorContextValue;
56
+ /**
57
+ * 注册字段:只订阅稳定 Actions,不因 activeFieldId 变化而重渲染。
58
+ * 这是创建账号弹窗内多个 Slate 与节点配置表单并存时避免假死的关键路径。
59
+ */
61
60
  export declare const useRegisterVariableField: (id: string, insertVariable: (variable: string, formatted: boolean) => void, focus: () => void) => {
62
61
  activate: () => void;
63
62
  deactivate: () => void;
64
- isActive: boolean;
65
63
  };
64
+ /** 仅订阅稳定操作,不因焦点切换重渲染 */
65
+ export declare const useVariableSelectorActionsOptional: () => VariableSelectorActionsValue | null;
66
+ /** 可选订阅:同时拿状态与操作;无 Provider 时返回 null */
66
67
  export declare const useVariableSelectorOptional: () => VariableSelectorContextValue | null;
67
68
  export {};
@@ -4,7 +4,7 @@ export { type SelectValueMode, SelectWithExpression, type SelectWithExpressionPr
4
4
  export { useValueModePolicyOptional, type ValueMode, ValueModeFieldScope, ValueModePolicyScope, ValueModeSwitch, type ValueModeSwitchProps, ValueModeWrapper, type ValueModeWrapperProps, withInheritedValueModePolicy, } from './components/ValueModeWrapper';
5
5
  export { VariableInput, type VariableInputProps, } from './components/VariableInput';
6
6
  export { VariableTextarea, type VariableTextareaProps, } from './components/VariableTextarea';
7
- export { useRegisterVariableField, useVariableSelector, useVariableSelectorOptional, type VariableInfo, type VariableSelectorContextValue, VariableSelectorProvider, type VariableSelectorProviderProps, } from './context/VariableSelectorContext';
7
+ export { useRegisterVariableField, useVariableSelector, useVariableSelectorActionsOptional, useVariableSelectorOptional, type VariableInfo, type VariableSelectorActionsValue, type VariableSelectorContextValue, VariableSelectorProvider, type VariableSelectorProviderProps, type VariableSelectorStateValue, } from './context/VariableSelectorContext';
8
8
  export * from './DynamicForm';
9
9
  export * from './DynamicFormContext';
10
10
  export * from './FieldRenderer';
@@ -1,5 +1,5 @@
1
1
  import { jsx as n, jsxs as C } from "react/jsx-runtime";
2
- import { D as F, V as R, e as V, i as T, t as l, f as P, d as L } from "./index-CRdKUD0G.mjs";
2
+ import { D as F, V as R, e as V, i as T, t as l, f as P, d as L } from "./index-CqZ6Y0AC.mjs";
3
3
  import { useEventEmitter as O, useReactive as B, useSize as W } from "ahooks";
4
4
  import { FormattedMessage as $ } from "react-intl";
5
5
  import { CloseCircleFilled as z, CheckCircleFilled as A } from "@ant-design/icons";
@@ -309,4 +309,4 @@ function $e(e) {
309
309
  export {
310
310
  $e as default
311
311
  };
312
- //# sourceMappingURL=index-rjDBrC08.mjs.map
312
+ //# sourceMappingURL=index-BnE-Ea2s.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"index-rjDBrC08.mjs","sources":["../src/lib/components/digitalsee/workflow/NodesConfig/components/online-ide/components/IDEVariableModal/index.tsx","../src/lib/components/digitalsee/workflow/NodesConfig/components/online-ide/components/sider/index.tsx","../src/lib/components/digitalsee/workflow/NodesConfig/components/online-ide/components/title/index.tsx","../src/lib/components/digitalsee/workflow/NodesConfig/components/online-ide/components/toolbar/index.tsx","../src/lib/components/digitalsee/workflow/NodesConfig/components/online-ide/index.tsx"],"sourcesContent":["import styles from '@workflow/NodesConfig/components/online-ide/components/IDEVariableModal/variableModal.module.less';\nimport { VariableModal } from '@workflow/NodesConfig/components/VariableModal';\nimport { DrawerContext } from '@workflow/NodesConfig/context';\nimport { useEventEmitter } from 'ahooks';\n\ntype VariableModalProps = {\n nodeId: string;\n onInsert: (values: any) => void;\n open: boolean;\n};\n\nexport const IDEVariableModal: React.FC<VariableModalProps> = (props) => {\n const { nodeId, onInsert, open } = props;\n const event$ = useEventEmitter<any>();\n\n event$.useSubscription((value: any) => {\n if (value.type === 'insert') {\n onInsert(value.expression);\n }\n });\n\n return (\n <DrawerContext.Provider value={{ event$ }}>\n <div className={styles.ideWrapper}>\n <VariableModal nodeId={nodeId} onInsert={onInsert} open={open} />\n </div>\n </DrawerContext.Provider>\n );\n};\n","import { IDEVariableModal } from '@workflow/NodesConfig/components/online-ide/components/IDEVariableModal';\nimport styles from '@workflow/NodesConfig/components/online-ide/components/sider/sider.module.less';\n\ninterface ISiderProps {\n onFinish: () => void;\n onCancel: () => void;\n editor: any;\n open: boolean;\n onInsert: (values) => void;\n nodeId: string;\n}\nexport function Sider(props: ISiderProps) {\n return (\n <div className={styles.siderContainer}>\n <div>\n <IDEVariableModal open={props.open} nodeId={props.nodeId} onInsert={props.onInsert} />\n </div>\n <div style={{ textAlign: 'center' }}></div>\n </div>\n );\n}\n","import { FormattedMessage } from '@workflow/migration/umi';\n\ninterface TitleControlProps {\n language?: string;\n}\n\nexport function TitleControl({ language = 'javascript' }: TitleControlProps) {\n return (\n <h3 style={{ color: '#999', fontSize: 16, margin: '6px 0' }}>\n <FormattedMessage id=\"link.flow.code_editor\" /> ({language.toUpperCase()})\n </h3>\n );\n}\n","import { CheckCircleFilled, CloseCircleFilled } from '@ant-design/icons';\nimport { Button } from 'antd';\nimport { FormattedMessage } from '@workflow/migration/umi';\n\ninterface IToolBarProps {\n onFinish: () => void;\n onCancel: () => void;\n}\nexport function ToolBar(props: IToolBarProps) {\n return (\n <div\n style={{\n color: 'white',\n display: 'flex',\n paddingRight: 30,\n alignItems: 'center',\n height: '100%',\n fontSize: 16,\n }}\n >\n <Button\n type=\"primary\"\n size=\"small\"\n style={{ marginRight: 10 }}\n disabled={false}\n danger\n onClick={props.onCancel}\n icon={<CloseCircleFilled onClick={props.onCancel} />}\n >\n <FormattedMessage id=\"app.common.word.cancel\" />\n </Button>\n <Button\n type=\"primary\"\n size=\"small\"\n style={{ marginRight: 10 }}\n onClick={props.onFinish}\n icon={<CheckCircleFilled />}\n >\n <FormattedMessage id=\"app.common.word.finish\" />\n </Button>\n </div>\n );\n}\n","// cspell:ignore jssnippets\nimport styles from '@workflow/NodesConfig/components/online-ide/onlineIDE.module.less';\nimport '@workflow/NodesConfig/components/online-ide/ide.token.less';\nimport { Sider } from '@workflow/NodesConfig/components/online-ide/components/sider';\nimport { TitleControl } from '@workflow/NodesConfig/components/online-ide/components/title';\nimport { ToolBar } from '@workflow/NodesConfig/components/online-ide/components/toolbar';\nimport type { FlowVariableMatch } from '@workflow/NodesConfig/components/online-ide/helper/flowVariables';\nimport {\n doesRangeIntersectFlowVariable,\n extractFlowVariables,\n isPositionInFlowVariable,\n} from '@workflow/NodesConfig/components/online-ide/helper/flowVariables';\nimport jsSnippets from '@workflow/NodesConfig/components/online-ide/helper/jssnippets.json';\nimport { t } from '@workflow/utils/common';\nimport { flowDesignerDAO } from '@workflow/utils/glob';\nimport { useReactive, useSize } from 'ahooks';\nimport * as monaco from 'monaco-editor';\nimport { useEffect, useRef } from 'react';\nimport { createPortal } from 'react-dom';\nimport type { EditorDidMount } from 'react-monaco-editor';\nimport MonacoEditor from 'react-monaco-editor';\n\ntype Writable<T> = {\n -readonly [K in keyof T]: T[K];\n};\ntype Options = Parameters<typeof MonacoEditor>['0']['options'];\n\ntype EditorInstance = Writable<Parameters<EditorDidMount>['0']>;\ntype MonacoInstance = Parameters<EditorDidMount>['1'];\n\nconst OPTIONS: Options = {\n selectOnLineNumbers: true,\n automaticLayout: true,\n padding: {\n top: 10,\n },\n};\n\nfunction formatFlowVariableHover(variable: FlowVariableMatch) {\n if (variable.type === 'global') {\n return [\n `**${t('link.flow.variable_type_global')}**`,\n `${t('link.flow.variable_path')}:\\`${variable.value}\\``,\n `${t('link.flow.variable_name')}:\\`${variable.path}\\``,\n ]\n .filter(Boolean)\n .join('\\n\\n');\n }\n if (variable.type === 'builtin') {\n const builtinTips = flowDesignerDAO.getBuiltinVariableTips(variable.firstPart);\n return [\n `**${t('link.flow.variable_type_builtin')}**`,\n `${t('link.flow.variable_path')}:\\`${variable.value}\\``,\n builtinTips,\n ]\n .filter(Boolean)\n .join('\\n\\n');\n }\n if (variable.type === 'node') {\n return [\n `**${t('link.flow.variable_type_node')}**`,\n `${t('link.flow.variable_path')}:\\`${variable.value}\\``,\n variable.path ? `${t('link.flow.variable_field')}:\\`${variable.path}\\`` : '',\n ]\n .filter(Boolean)\n .join('\\n\\n');\n }\n return [\n `**${t('link.flow.variable_type_platform')}**`,\n `${t('link.flow.variable_path')}:\\`${variable.value}\\``,\n ].join('\\n\\n');\n}\n\nconst toMarkerData = (marker: monaco.editor.IMarker): monaco.editor.IMarkerData => ({\n code: marker.code,\n severity: marker.severity,\n message: marker.message,\n source: marker.source,\n startLineNumber: marker.startLineNumber,\n startColumn: marker.startColumn,\n endLineNumber: marker.endLineNumber,\n endColumn: marker.endColumn,\n modelVersionId: marker.modelVersionId,\n relatedInformation: marker.relatedInformation,\n tags: marker.tags,\n});\n\nfunction filterFlowVariableMarkers(\n monacoInstance: MonacoInstance,\n model: monaco.editor.ITextModel,\n) {\n const variables = extractFlowVariables(model.getValue());\n if (!variables.length) {\n return;\n }\n\n const markers = monacoInstance.editor.getModelMarkers({ resource: model.uri });\n const markersByOwner = new Map<string, monaco.editor.IMarker[]>();\n\n markers.forEach((marker) => {\n const ownerMarkers = markersByOwner.get(marker.owner) ?? [];\n ownerMarkers.push(marker);\n markersByOwner.set(marker.owner, ownerMarkers);\n });\n\n markersByOwner.forEach((ownerMarkers, owner) => {\n const nextMarkers = ownerMarkers.filter(\n (marker) => !variables.some((variable) => doesRangeIntersectFlowVariable(variable, marker)),\n );\n\n if (nextMarkers.length !== ownerMarkers.length) {\n monacoInstance.editor.setModelMarkers(model, owner, nextMarkers.map(toMarkerData));\n }\n });\n}\n\nfunction initPrompt(monaco, language: 'javascript' | 'json') {\n const suggestions = [].map((item) => {\n return {\n insertText: item,\n kind: monaco.languages.CompletionItemKind.Function, // 对应提示图标的不同\n label: item,\n };\n });\n return monaco.languages.registerCompletionItemProvider(language, {\n provideCompletionItems() {\n return {\n suggestions,\n };\n },\n quickSuggestions: true, // 默认提示关闭\n triggerCharacters: ['{', '.', '=', ':'], // 触发提示的字符 可以定义多个\n });\n}\nfunction initLanguageAndHoverSettings(monaco) {\n monaco.languages.typescript.javascriptDefaults.setDiagnosticsOptions({\n noSemanticValidation: true,\n noSyntaxValidation: false,\n });\n\n // compiler options\n monaco.languages.typescript.javascriptDefaults.setCompilerOptions({\n target: monaco.languages.typescript.ScriptTarget.ES2015,\n allowNonTsExtensions: true,\n });\n return monaco.languages.registerCompletionItemProvider('javascript', {\n provideCompletionItems: () => {\n const snippets = jsSnippets as any;\n\n return {\n suggestions: snippets.snippets.map((snippet) => ({\n label: snippet.trigger,\n kind: monaco.languages.CompletionItemKind.Method,\n detail: snippet.desc ?? '',\n insertText: snippet.content,\n insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet,\n })),\n };\n },\n });\n}\n\nexport interface IOnlineIDEProps {\n initialValue?: string;\n\n nodeId?: string;\n\n onChange?: (value: string) => void;\n\n onFinish: (value: string) => void;\n\n onCancel: () => void;\n\n open?: boolean;\n\n language?: 'javascript' | 'json';\n\n showVariableSidebar?: boolean;\n}\n\nexport default function OnlineIDE(props: IOnlineIDEProps) {\n const { open, nodeId, initialValue, language = 'javascript', showVariableSidebar = true } = props;\n\n const editorInstance = useRef<EditorInstance>(null);\n const languageDisposables = useRef<monaco.IDisposable[]>([]);\n const state = useReactive({\n code: '',\n range: new monaco.Range(1, 1, 1, 1) as any,\n });\n const editorDidMount: EditorDidMount = (editor, monaco) => {\n editor.onDidChangeCursorPosition((event) => {\n // 获取当前光标的位置\n const position = event.position;\n // 保存光标位置,可以将其存储在一个变量或者其他地方\n const { lineNumber = 0, column = 0 } = position;\n state.range = new monaco.Range(lineNumber, column, lineNumber, column);\n });\n editorInstance.current = editor as EditorInstance;\n\n // 注册鼠标hover事件\n editor.focus();\n state.code = editor.getValue();\n const hoverDisposable = monaco.languages.registerHoverProvider(language, {\n provideHover: (model, position) => {\n // 根据鼠标位置和文本内容,计算需要显示的自定义 hover 内容\n // 这里可以使用你的位置信息和内容信息进行逻辑处理和自定义展示\n // 返回一个包含自定义 hover 内容的 Promise 对象\n\n // 示例:返回一个包含位置信息和内容信息的字符串\n\n return new Promise((resolve) => {\n const matches = extractFlowVariables(model.getValue());\n const locatedVariable = matches.find((item) =>\n isPositionInFlowVariable(item, position.lineNumber, position.column),\n );\n\n if (!locatedVariable) {\n resolve(null);\n return;\n }\n\n resolve({\n range: new monaco.Range(\n locatedVariable.startLine,\n locatedVariable.startColumn,\n locatedVariable.endLine,\n locatedVariable.endColumn,\n ),\n contents: [{ value: formatFlowVariableHover(locatedVariable) }],\n });\n });\n },\n });\n\n const model = editor.getModel();\n if (model) {\n let filteringMarkers = false;\n const markerDisposable = monaco.editor.onDidChangeMarkers((uris) => {\n if (filteringMarkers || !uris.some((uri) => uri.toString() === model.uri.toString())) {\n return;\n }\n\n filteringMarkers = true;\n window.setTimeout(() => {\n try {\n filterFlowVariableMarkers(monaco, model);\n } finally {\n filteringMarkers = false;\n }\n }, 0);\n });\n\n filterFlowVariableMarkers(monaco, model);\n editor.onDidDispose(() => markerDisposable.dispose());\n }\n editor.onDidDispose(() => hoverDisposable.dispose());\n };\n const beforeMount = (monaco) => {\n languageDisposables.current.forEach((disposable) => {\n disposable.dispose();\n });\n languageDisposables.current = [initPrompt(monaco, language)];\n if (language === 'javascript') {\n languageDisposables.current.push(initLanguageAndHoverSettings(monaco));\n }\n };\n\n useEffect(\n () => () => {\n languageDisposables.current.forEach((disposable) => {\n disposable.dispose();\n });\n languageDisposables.current = [];\n },\n [],\n );\n\n const onInsert = (nodeVariableText: string) => {\n const content = [\n {\n range: state.range,\n text: nodeVariableText,\n forceMoveMarkers: true,\n },\n ];\n if (editorInstance.current && state.range) {\n editorInstance.current.executeEdits('my-source', content);\n }\n };\n const onFinish = () => {\n props.onFinish?.(state.code);\n };\n const ideContainerRef = useRef(null);\n const size = useSize(ideContainerRef);\n return createPortal(\n <div\n className={styles.modalContainer}\n ref={ideContainerRef}\n style={{ display: open ? 'flex' : 'none' }}\n >\n <div className={styles.editorContainer} id=\"javascript-code-editor\">\n {showVariableSidebar ? (\n <div className={styles.sider}>\n <Sider\n onCancel={props.onCancel}\n onFinish={onFinish}\n editor={editorInstance.current}\n nodeId={nodeId as string}\n open={open!}\n onInsert={onInsert}\n />\n </div>\n ) : null}\n\n <div className={styles.main}>\n <div className={styles.header}>\n <TitleControl language={language} />\n\n <ToolBar onCancel={props.onCancel} onFinish={onFinish} />\n </div>\n <div className={styles.editor}>\n <MonacoEditor\n width=\"100%\"\n key={nodeId}\n height={(size?.height ?? 0) - 40}\n language={language}\n theme=\"vs-dark\"\n value={initialValue}\n options={OPTIONS}\n onChange={(value) => {\n state.code = value;\n }}\n editorWillMount={beforeMount}\n editorDidMount={editorDidMount}\n />\n </div>\n </div>\n </div>\n </div>,\n document.body,\n );\n}\n"],"names":["IDEVariableModal","props","nodeId","onInsert","open","event$","useEventEmitter","value","DrawerContext","jsx","styles","VariableModal","Sider","jsxs","TitleControl","language","FormattedMessage","ToolBar","Button","CloseCircleFilled","CheckCircleFilled","OPTIONS","formatFlowVariableHover","variable","t","builtinTips","flowDesignerDAO","toMarkerData","marker","filterFlowVariableMarkers","monacoInstance","model","variables","extractFlowVariables","markers","markersByOwner","ownerMarkers","owner","nextMarkers","doesRangeIntersectFlowVariable","initPrompt","monaco","suggestions","item","initLanguageAndHoverSettings","jsSnippets","snippet","OnlineIDE","initialValue","showVariableSidebar","editorInstance","useRef","languageDisposables","state","useReactive","editorDidMount","editor","event","position","lineNumber","column","hoverDisposable","resolve","locatedVariable","isPositionInFlowVariable","filteringMarkers","markerDisposable","uris","uri","beforeMount","disposable","useEffect","nodeVariableText","content","onFinish","_a","ideContainerRef","size","useSize","createPortal","MonacoEditor"],"mappings":"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"}
1
+ {"version":3,"file":"index-BnE-Ea2s.mjs","sources":["../src/lib/components/digitalsee/workflow/NodesConfig/components/online-ide/components/IDEVariableModal/index.tsx","../src/lib/components/digitalsee/workflow/NodesConfig/components/online-ide/components/sider/index.tsx","../src/lib/components/digitalsee/workflow/NodesConfig/components/online-ide/components/title/index.tsx","../src/lib/components/digitalsee/workflow/NodesConfig/components/online-ide/components/toolbar/index.tsx","../src/lib/components/digitalsee/workflow/NodesConfig/components/online-ide/index.tsx"],"sourcesContent":["import styles from '@workflow/NodesConfig/components/online-ide/components/IDEVariableModal/variableModal.module.less';\nimport { VariableModal } from '@workflow/NodesConfig/components/VariableModal';\nimport { DrawerContext } from '@workflow/NodesConfig/context';\nimport { useEventEmitter } from 'ahooks';\n\ntype VariableModalProps = {\n nodeId: string;\n onInsert: (values: any) => void;\n open: boolean;\n};\n\nexport const IDEVariableModal: React.FC<VariableModalProps> = (props) => {\n const { nodeId, onInsert, open } = props;\n const event$ = useEventEmitter<any>();\n\n event$.useSubscription((value: any) => {\n if (value.type === 'insert') {\n onInsert(value.expression);\n }\n });\n\n return (\n <DrawerContext.Provider value={{ event$ }}>\n <div className={styles.ideWrapper}>\n <VariableModal nodeId={nodeId} onInsert={onInsert} open={open} />\n </div>\n </DrawerContext.Provider>\n );\n};\n","import { IDEVariableModal } from '@workflow/NodesConfig/components/online-ide/components/IDEVariableModal';\nimport styles from '@workflow/NodesConfig/components/online-ide/components/sider/sider.module.less';\n\ninterface ISiderProps {\n onFinish: () => void;\n onCancel: () => void;\n editor: any;\n open: boolean;\n onInsert: (values) => void;\n nodeId: string;\n}\nexport function Sider(props: ISiderProps) {\n return (\n <div className={styles.siderContainer}>\n <div>\n <IDEVariableModal open={props.open} nodeId={props.nodeId} onInsert={props.onInsert} />\n </div>\n <div style={{ textAlign: 'center' }}></div>\n </div>\n );\n}\n","import { FormattedMessage } from '@workflow/migration/umi';\n\ninterface TitleControlProps {\n language?: string;\n}\n\nexport function TitleControl({ language = 'javascript' }: TitleControlProps) {\n return (\n <h3 style={{ color: '#999', fontSize: 16, margin: '6px 0' }}>\n <FormattedMessage id=\"link.flow.code_editor\" /> ({language.toUpperCase()})\n </h3>\n );\n}\n","import { CheckCircleFilled, CloseCircleFilled } from '@ant-design/icons';\nimport { Button } from 'antd';\nimport { FormattedMessage } from '@workflow/migration/umi';\n\ninterface IToolBarProps {\n onFinish: () => void;\n onCancel: () => void;\n}\nexport function ToolBar(props: IToolBarProps) {\n return (\n <div\n style={{\n color: 'white',\n display: 'flex',\n paddingRight: 30,\n alignItems: 'center',\n height: '100%',\n fontSize: 16,\n }}\n >\n <Button\n type=\"primary\"\n size=\"small\"\n style={{ marginRight: 10 }}\n disabled={false}\n danger\n onClick={props.onCancel}\n icon={<CloseCircleFilled onClick={props.onCancel} />}\n >\n <FormattedMessage id=\"app.common.word.cancel\" />\n </Button>\n <Button\n type=\"primary\"\n size=\"small\"\n style={{ marginRight: 10 }}\n onClick={props.onFinish}\n icon={<CheckCircleFilled />}\n >\n <FormattedMessage id=\"app.common.word.finish\" />\n </Button>\n </div>\n );\n}\n","// cspell:ignore jssnippets\nimport styles from '@workflow/NodesConfig/components/online-ide/onlineIDE.module.less';\nimport '@workflow/NodesConfig/components/online-ide/ide.token.less';\nimport { Sider } from '@workflow/NodesConfig/components/online-ide/components/sider';\nimport { TitleControl } from '@workflow/NodesConfig/components/online-ide/components/title';\nimport { ToolBar } from '@workflow/NodesConfig/components/online-ide/components/toolbar';\nimport type { FlowVariableMatch } from '@workflow/NodesConfig/components/online-ide/helper/flowVariables';\nimport {\n doesRangeIntersectFlowVariable,\n extractFlowVariables,\n isPositionInFlowVariable,\n} from '@workflow/NodesConfig/components/online-ide/helper/flowVariables';\nimport jsSnippets from '@workflow/NodesConfig/components/online-ide/helper/jssnippets.json';\nimport { t } from '@workflow/utils/common';\nimport { flowDesignerDAO } from '@workflow/utils/glob';\nimport { useReactive, useSize } from 'ahooks';\nimport * as monaco from 'monaco-editor';\nimport { useEffect, useRef } from 'react';\nimport { createPortal } from 'react-dom';\nimport type { EditorDidMount } from 'react-monaco-editor';\nimport MonacoEditor from 'react-monaco-editor';\n\ntype Writable<T> = {\n -readonly [K in keyof T]: T[K];\n};\ntype Options = Parameters<typeof MonacoEditor>['0']['options'];\n\ntype EditorInstance = Writable<Parameters<EditorDidMount>['0']>;\ntype MonacoInstance = Parameters<EditorDidMount>['1'];\n\nconst OPTIONS: Options = {\n selectOnLineNumbers: true,\n automaticLayout: true,\n padding: {\n top: 10,\n },\n};\n\nfunction formatFlowVariableHover(variable: FlowVariableMatch) {\n if (variable.type === 'global') {\n return [\n `**${t('link.flow.variable_type_global')}**`,\n `${t('link.flow.variable_path')}:\\`${variable.value}\\``,\n `${t('link.flow.variable_name')}:\\`${variable.path}\\``,\n ]\n .filter(Boolean)\n .join('\\n\\n');\n }\n if (variable.type === 'builtin') {\n const builtinTips = flowDesignerDAO.getBuiltinVariableTips(variable.firstPart);\n return [\n `**${t('link.flow.variable_type_builtin')}**`,\n `${t('link.flow.variable_path')}:\\`${variable.value}\\``,\n builtinTips,\n ]\n .filter(Boolean)\n .join('\\n\\n');\n }\n if (variable.type === 'node') {\n return [\n `**${t('link.flow.variable_type_node')}**`,\n `${t('link.flow.variable_path')}:\\`${variable.value}\\``,\n variable.path ? `${t('link.flow.variable_field')}:\\`${variable.path}\\`` : '',\n ]\n .filter(Boolean)\n .join('\\n\\n');\n }\n return [\n `**${t('link.flow.variable_type_platform')}**`,\n `${t('link.flow.variable_path')}:\\`${variable.value}\\``,\n ].join('\\n\\n');\n}\n\nconst toMarkerData = (marker: monaco.editor.IMarker): monaco.editor.IMarkerData => ({\n code: marker.code,\n severity: marker.severity,\n message: marker.message,\n source: marker.source,\n startLineNumber: marker.startLineNumber,\n startColumn: marker.startColumn,\n endLineNumber: marker.endLineNumber,\n endColumn: marker.endColumn,\n modelVersionId: marker.modelVersionId,\n relatedInformation: marker.relatedInformation,\n tags: marker.tags,\n});\n\nfunction filterFlowVariableMarkers(\n monacoInstance: MonacoInstance,\n model: monaco.editor.ITextModel,\n) {\n const variables = extractFlowVariables(model.getValue());\n if (!variables.length) {\n return;\n }\n\n const markers = monacoInstance.editor.getModelMarkers({ resource: model.uri });\n const markersByOwner = new Map<string, monaco.editor.IMarker[]>();\n\n markers.forEach((marker) => {\n const ownerMarkers = markersByOwner.get(marker.owner) ?? [];\n ownerMarkers.push(marker);\n markersByOwner.set(marker.owner, ownerMarkers);\n });\n\n markersByOwner.forEach((ownerMarkers, owner) => {\n const nextMarkers = ownerMarkers.filter(\n (marker) => !variables.some((variable) => doesRangeIntersectFlowVariable(variable, marker)),\n );\n\n if (nextMarkers.length !== ownerMarkers.length) {\n monacoInstance.editor.setModelMarkers(model, owner, nextMarkers.map(toMarkerData));\n }\n });\n}\n\nfunction initPrompt(monaco, language: 'javascript' | 'json') {\n const suggestions = [].map((item) => {\n return {\n insertText: item,\n kind: monaco.languages.CompletionItemKind.Function, // 对应提示图标的不同\n label: item,\n };\n });\n return monaco.languages.registerCompletionItemProvider(language, {\n provideCompletionItems() {\n return {\n suggestions,\n };\n },\n quickSuggestions: true, // 默认提示关闭\n triggerCharacters: ['{', '.', '=', ':'], // 触发提示的字符 可以定义多个\n });\n}\nfunction initLanguageAndHoverSettings(monaco) {\n monaco.languages.typescript.javascriptDefaults.setDiagnosticsOptions({\n noSemanticValidation: true,\n noSyntaxValidation: false,\n });\n\n // compiler options\n monaco.languages.typescript.javascriptDefaults.setCompilerOptions({\n target: monaco.languages.typescript.ScriptTarget.ES2015,\n allowNonTsExtensions: true,\n });\n return monaco.languages.registerCompletionItemProvider('javascript', {\n provideCompletionItems: () => {\n const snippets = jsSnippets as any;\n\n return {\n suggestions: snippets.snippets.map((snippet) => ({\n label: snippet.trigger,\n kind: monaco.languages.CompletionItemKind.Method,\n detail: snippet.desc ?? '',\n insertText: snippet.content,\n insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet,\n })),\n };\n },\n });\n}\n\nexport interface IOnlineIDEProps {\n initialValue?: string;\n\n nodeId?: string;\n\n onChange?: (value: string) => void;\n\n onFinish: (value: string) => void;\n\n onCancel: () => void;\n\n open?: boolean;\n\n language?: 'javascript' | 'json';\n\n showVariableSidebar?: boolean;\n}\n\nexport default function OnlineIDE(props: IOnlineIDEProps) {\n const { open, nodeId, initialValue, language = 'javascript', showVariableSidebar = true } = props;\n\n const editorInstance = useRef<EditorInstance>(null);\n const languageDisposables = useRef<monaco.IDisposable[]>([]);\n const state = useReactive({\n code: '',\n range: new monaco.Range(1, 1, 1, 1) as any,\n });\n const editorDidMount: EditorDidMount = (editor, monaco) => {\n editor.onDidChangeCursorPosition((event) => {\n // 获取当前光标的位置\n const position = event.position;\n // 保存光标位置,可以将其存储在一个变量或者其他地方\n const { lineNumber = 0, column = 0 } = position;\n state.range = new monaco.Range(lineNumber, column, lineNumber, column);\n });\n editorInstance.current = editor as EditorInstance;\n\n // 注册鼠标hover事件\n editor.focus();\n state.code = editor.getValue();\n const hoverDisposable = monaco.languages.registerHoverProvider(language, {\n provideHover: (model, position) => {\n // 根据鼠标位置和文本内容,计算需要显示的自定义 hover 内容\n // 这里可以使用你的位置信息和内容信息进行逻辑处理和自定义展示\n // 返回一个包含自定义 hover 内容的 Promise 对象\n\n // 示例:返回一个包含位置信息和内容信息的字符串\n\n return new Promise((resolve) => {\n const matches = extractFlowVariables(model.getValue());\n const locatedVariable = matches.find((item) =>\n isPositionInFlowVariable(item, position.lineNumber, position.column),\n );\n\n if (!locatedVariable) {\n resolve(null);\n return;\n }\n\n resolve({\n range: new monaco.Range(\n locatedVariable.startLine,\n locatedVariable.startColumn,\n locatedVariable.endLine,\n locatedVariable.endColumn,\n ),\n contents: [{ value: formatFlowVariableHover(locatedVariable) }],\n });\n });\n },\n });\n\n const model = editor.getModel();\n if (model) {\n let filteringMarkers = false;\n const markerDisposable = monaco.editor.onDidChangeMarkers((uris) => {\n if (filteringMarkers || !uris.some((uri) => uri.toString() === model.uri.toString())) {\n return;\n }\n\n filteringMarkers = true;\n window.setTimeout(() => {\n try {\n filterFlowVariableMarkers(monaco, model);\n } finally {\n filteringMarkers = false;\n }\n }, 0);\n });\n\n filterFlowVariableMarkers(monaco, model);\n editor.onDidDispose(() => markerDisposable.dispose());\n }\n editor.onDidDispose(() => hoverDisposable.dispose());\n };\n const beforeMount = (monaco) => {\n languageDisposables.current.forEach((disposable) => {\n disposable.dispose();\n });\n languageDisposables.current = [initPrompt(monaco, language)];\n if (language === 'javascript') {\n languageDisposables.current.push(initLanguageAndHoverSettings(monaco));\n }\n };\n\n useEffect(\n () => () => {\n languageDisposables.current.forEach((disposable) => {\n disposable.dispose();\n });\n languageDisposables.current = [];\n },\n [],\n );\n\n const onInsert = (nodeVariableText: string) => {\n const content = [\n {\n range: state.range,\n text: nodeVariableText,\n forceMoveMarkers: true,\n },\n ];\n if (editorInstance.current && state.range) {\n editorInstance.current.executeEdits('my-source', content);\n }\n };\n const onFinish = () => {\n props.onFinish?.(state.code);\n };\n const ideContainerRef = useRef(null);\n const size = useSize(ideContainerRef);\n return createPortal(\n <div\n className={styles.modalContainer}\n ref={ideContainerRef}\n style={{ display: open ? 'flex' : 'none' }}\n >\n <div className={styles.editorContainer} id=\"javascript-code-editor\">\n {showVariableSidebar ? (\n <div className={styles.sider}>\n <Sider\n onCancel={props.onCancel}\n onFinish={onFinish}\n editor={editorInstance.current}\n nodeId={nodeId as string}\n open={open!}\n onInsert={onInsert}\n />\n </div>\n ) : null}\n\n <div className={styles.main}>\n <div className={styles.header}>\n <TitleControl language={language} />\n\n <ToolBar onCancel={props.onCancel} onFinish={onFinish} />\n </div>\n <div className={styles.editor}>\n <MonacoEditor\n width=\"100%\"\n key={nodeId}\n height={(size?.height ?? 0) - 40}\n language={language}\n theme=\"vs-dark\"\n value={initialValue}\n options={OPTIONS}\n onChange={(value) => {\n state.code = value;\n }}\n editorWillMount={beforeMount}\n editorDidMount={editorDidMount}\n />\n </div>\n </div>\n </div>\n </div>,\n document.body,\n );\n}\n"],"names":["IDEVariableModal","props","nodeId","onInsert","open","event$","useEventEmitter","value","DrawerContext","jsx","styles","VariableModal","Sider","jsxs","TitleControl","language","FormattedMessage","ToolBar","Button","CloseCircleFilled","CheckCircleFilled","OPTIONS","formatFlowVariableHover","variable","t","builtinTips","flowDesignerDAO","toMarkerData","marker","filterFlowVariableMarkers","monacoInstance","model","variables","extractFlowVariables","markers","markersByOwner","ownerMarkers","owner","nextMarkers","doesRangeIntersectFlowVariable","initPrompt","monaco","suggestions","item","initLanguageAndHoverSettings","jsSnippets","snippet","OnlineIDE","initialValue","showVariableSidebar","editorInstance","useRef","languageDisposables","state","useReactive","editorDidMount","editor","event","position","lineNumber","column","hoverDisposable","resolve","locatedVariable","isPositionInFlowVariable","filteringMarkers","markerDisposable","uris","uri","beforeMount","disposable","useEffect","nodeVariableText","content","onFinish","_a","ideContainerRef","size","useSize","createPortal","MonacoEditor"],"mappings":"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"}