@digitalsee-ai/rcs 1.1.9 → 2.0.0-beta2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (167) hide show
  1. package/README.md +6 -38
  2. package/README.npm.md +37 -0
  3. package/dist/components/digitalsee/JsonRenderer/index.d.ts +1 -1
  4. package/dist/components/digitalsee/workflow/Canvas/FastOperationButtons.d.ts +5 -2
  5. package/dist/components/digitalsee/workflow/Canvas/FullscreenLoading.d.ts +10 -2
  6. package/dist/components/digitalsee/workflow/Canvas/MiniMap.d.ts +1 -1
  7. package/dist/components/digitalsee/workflow/Canvas/NodePlaceholder.d.ts +12 -0
  8. package/dist/components/digitalsee/workflow/Canvas/WorkflowCanvasHeader.d.ts +4 -8
  9. package/dist/components/digitalsee/workflow/Canvas/actionItemToNodeData.d.ts +1 -6
  10. package/dist/components/digitalsee/workflow/Canvas/constants.d.ts +6 -26
  11. package/dist/components/digitalsee/workflow/Canvas/hooks/{classicNodeAddConnection.d.ts → nodePackageAddConnection.d.ts} +3 -3
  12. package/dist/components/digitalsee/workflow/Canvas/hooks/useCanvasApi.d.ts +4 -2
  13. package/dist/components/digitalsee/workflow/Canvas/hooks/useDataLoading.d.ts +33 -4
  14. package/dist/components/digitalsee/workflow/Canvas/hooks/useNodeAddCallback.d.ts +2 -3
  15. package/dist/components/digitalsee/workflow/Canvas/hooks/useSaveFlowAfterNodeAdd.d.ts +4 -7
  16. package/dist/components/digitalsee/workflow/Canvas/hooks/useWorkflowCanvasState.d.ts +22 -4
  17. package/dist/components/digitalsee/workflow/Canvas/types.d.ts +19 -21
  18. package/dist/components/digitalsee/workflow/Edges/BaseEdge.d.ts +2 -0
  19. package/dist/components/digitalsee/workflow/Edges/EdgeFactory.d.ts +3 -8
  20. package/dist/components/digitalsee/workflow/Edges/edgeLayout.d.ts +73 -0
  21. package/dist/components/digitalsee/workflow/Handles/CustomHandle.d.ts +1 -0
  22. package/dist/components/digitalsee/workflow/Handles/customHandleConnectable.d.ts +19 -0
  23. package/dist/components/digitalsee/workflow/Nodes/DeclaredNode.d.ts +33 -0
  24. package/dist/components/digitalsee/workflow/Nodes/DynamicNode.d.ts +24 -0
  25. package/dist/components/digitalsee/workflow/Nodes/NodeFactory.d.ts +42 -4
  26. package/dist/components/digitalsee/workflow/Nodes/SuperBaseNode.d.ts +2 -1
  27. package/dist/components/digitalsee/workflow/Nodes/classicPortLayout.d.ts +51 -0
  28. package/dist/components/digitalsee/workflow/Nodes/components/NodeStatusBadge.d.ts +11 -0
  29. package/dist/components/digitalsee/workflow/Nodes/{classicNodePackagePortLayout.d.ts → nodePackagePortLayout.d.ts} +4 -4
  30. package/dist/components/digitalsee/workflow/Nodes/nodeTypeRegistry.d.ts +131 -0
  31. package/dist/components/digitalsee/workflow/Nodes/useNodePackagePorts.d.ts +35 -0
  32. package/dist/components/digitalsee/workflow/NodesConfig/NodePackageConfig/fieldSchemaAdapter.d.ts +14 -0
  33. package/dist/components/digitalsee/workflow/NodesConfig/components/FormFieldRenderer/fields/RichTagInput/help.d.ts +5 -1
  34. package/dist/components/digitalsee/workflow/NodesConfig/components/FormFieldRenderer/index.d.ts +1 -0
  35. package/dist/components/digitalsee/workflow/NodesConfig/components/NodeTest.d.ts +2 -0
  36. package/dist/components/digitalsee/workflow/NodesConfig/components/NodeTest.helpers.d.ts +11 -0
  37. package/dist/components/digitalsee/workflow/NodesConfig/components/VariableModal/tree-help.d.ts +5 -12
  38. package/dist/components/digitalsee/workflow/NodesConfig/submitPayload.d.ts +10 -17
  39. package/dist/components/digitalsee/workflow/Panels/CanvasConfigDebugger.d.ts +1 -1
  40. package/dist/components/digitalsee/workflow/Panels/ModernNodeSelectorPanel/components/CategoryItem.d.ts +1 -1
  41. package/dist/components/digitalsee/workflow/Panels/ModernNodeSelectorPanel/components/CategoryTabs.d.ts +1 -1
  42. package/dist/components/digitalsee/workflow/Panels/ModernNodeSelectorPanel/components/NodeCard.d.ts +1 -1
  43. package/dist/components/digitalsee/workflow/Panels/ModernNodeSelectorPanel/components/NodeItem.d.ts +1 -1
  44. package/dist/components/digitalsee/workflow/Panels/ModernNodeSelectorPanel/components/PanelHeader.d.ts +1 -1
  45. package/dist/components/digitalsee/workflow/Panels/ModernNodeSelectorPanel/hooks/useConnectableNodeSelector.d.ts +2 -5
  46. package/dist/components/digitalsee/workflow/Panels/ModernNodeSelectorPanel/types.d.ts +10 -4
  47. package/dist/components/digitalsee/workflow/Panels/ModernNodeSelectorPanel/utils/connectableDataSource.d.ts +6 -10
  48. package/dist/components/digitalsee/workflow/Panels/SimpleNodeSelectorPanel/components/NodeListItem.d.ts +1 -1
  49. package/dist/components/digitalsee/workflow/api/dip.types.d.ts +30 -1
  50. package/dist/components/digitalsee/workflow/api/index.d.ts +3 -22
  51. package/dist/components/digitalsee/workflow/builtin/controls/ConfigSubflow/index.d.ts +2 -2
  52. package/dist/components/digitalsee/workflow/builtin/globalConfig/index.d.ts +5 -1
  53. package/dist/components/digitalsee/workflow/config/globalConfig.d.ts +1 -5
  54. package/dist/components/digitalsee/workflow/config/layerConfig.d.ts +14 -0
  55. package/dist/components/digitalsee/workflow/config/themeConfig.d.ts +19 -23
  56. package/dist/components/digitalsee/workflow/constants/nodePackageHandles.d.ts +10 -0
  57. package/dist/components/digitalsee/workflow/context/workflowTriggerContext.d.ts +22 -0
  58. package/dist/components/digitalsee/workflow/coverage/acceptanceManifest.d.ts +30 -0
  59. package/dist/components/digitalsee/workflow/coverage/runtimeCoverage.d.ts +34 -0
  60. package/dist/components/digitalsee/workflow/design-system/AiFlowNodeTestPanel.d.ts +24 -0
  61. package/dist/components/digitalsee/workflow/design-system/AiFlowVariableTree.d.ts +34 -0
  62. package/dist/components/digitalsee/workflow/design-system/index.d.ts +3 -0
  63. package/dist/components/digitalsee/workflow/design-system/tokens.d.ts +103 -0
  64. package/dist/components/digitalsee/workflow/enums/canvas.d.ts +0 -12
  65. package/dist/components/digitalsee/workflow/enums/edge.d.ts +4 -2
  66. package/dist/components/digitalsee/workflow/enums/node.d.ts +5 -6
  67. package/dist/components/digitalsee/workflow/enums/workflow.d.ts +1 -1
  68. package/dist/components/digitalsee/workflow/examples/global-config-example.d.ts +1 -1
  69. package/dist/components/digitalsee/workflow/hooks/state.hooks.d.ts +1 -7
  70. package/dist/components/digitalsee/workflow/hooks/use-flow-data-operation.d.ts +1 -1
  71. package/dist/components/digitalsee/workflow/hooks/useCanvasLayout.d.ts +1 -1
  72. package/dist/components/digitalsee/workflow/hooks/useCanvasMode.d.ts +8 -0
  73. package/dist/components/digitalsee/workflow/hooks/useHandleConnections.d.ts +9 -1
  74. package/dist/components/digitalsee/workflow/hooks/useVariables.d.ts +1 -0
  75. package/dist/components/digitalsee/workflow/hooks/useWorkflow.d.ts +1 -1
  76. package/dist/components/digitalsee/workflow/index.d.ts +18 -47
  77. package/dist/components/digitalsee/workflow/migration/umi.d.ts +1 -2
  78. package/dist/components/digitalsee/workflow/store/workflowSlice.d.ts +5 -2
  79. package/dist/components/digitalsee/workflow/types/Node.d.ts +2 -0
  80. package/dist/components/digitalsee/workflow/types/Workflow.d.ts +1 -1
  81. package/dist/components/digitalsee/workflow/types/engine.d.ts +21 -12
  82. package/dist/components/digitalsee/workflow/types/flowVersion.d.ts +0 -30
  83. package/dist/components/digitalsee/workflow/utils/connectionCheck.d.ts +30 -0
  84. package/dist/components/digitalsee/workflow/utils/layoutUtils.d.ts +2 -2
  85. package/dist/components/digitalsee/workflow/utils/mcpCanvas.d.ts +0 -40
  86. package/dist/components/digitalsee/workflow/utils/mode.d.ts +18 -0
  87. package/dist/components/digitalsee/workflow/utils/nodeAutoConnect.d.ts +24 -0
  88. package/dist/components/digitalsee/workflow/utils/nodeCommon.d.ts +5 -0
  89. package/dist/components/digitalsee/workflow/utils/nodeHandleLayout.d.ts +83 -0
  90. package/dist/components/digitalsee/workflow/utils/nodePackageConnection.d.ts +28 -0
  91. package/dist/components/digitalsee/workflow/utils/nodePackageGraphValidation.d.ts +29 -0
  92. package/dist/components/digitalsee/workflow/utils/nodePackageSchemaCache.d.ts +15 -0
  93. package/dist/components/digitalsee/workflow/utils/onNodeRemoveHook.d.ts +13 -0
  94. package/dist/components/digitalsee/workflow/utils/triggerNode.d.ts +13 -0
  95. package/dist/components/digitalsee/workflow/utils/workflowConnectionValidator.d.ts +1 -3
  96. package/dist/components/digitalsee/workflow/workflow.story-fixtures.d.ts +50 -0
  97. package/dist/index-CBoDAvhq.mjs +285 -0
  98. package/dist/{index-CqZ6Y0AC.mjs → index-zEq02rJh.mjs} +23586 -25735
  99. package/dist/locales/en-US/common.d.ts +29 -52
  100. package/dist/locales/en-US.d.ts +29 -52
  101. package/dist/locales/zh-CN/common.d.ts +29 -52
  102. package/dist/locales/zh-CN.d.ts +29 -52
  103. package/dist/locales/zh-TW/common.d.ts +29 -52
  104. package/dist/locales/zh-TW.d.ts +29 -52
  105. package/dist/rcs.css +1 -1
  106. package/dist/rcs.es.js +65 -62
  107. package/dist/rcs.umd.js +132 -72
  108. package/package.json +38 -23
  109. package/dist/components/digitalsee/workflow/Canvas/FlowVersionManager.d.ts +0 -17
  110. package/dist/components/digitalsee/workflow/Canvas/NextConfigModalWrapper.d.ts +0 -9
  111. package/dist/components/digitalsee/workflow/Canvas/NextWorkflowCanvas.d.ts +0 -4
  112. package/dist/components/digitalsee/workflow/Canvas/NextWorkflowCanvasHeader.d.ts +0 -17
  113. package/dist/components/digitalsee/workflow/Canvas/hooks/createNodeAddHandlerNext.d.ts +0 -38
  114. package/dist/components/digitalsee/workflow/NextNodesConfigModal/index.d.ts +0 -13
  115. package/dist/components/digitalsee/workflow/Nodes/AISubNode.d.ts +0 -9
  116. package/dist/components/digitalsee/workflow/Nodes/ActionNode.d.ts +0 -13
  117. package/dist/components/digitalsee/workflow/Nodes/AgentNode.d.ts +0 -10
  118. package/dist/components/digitalsee/workflow/Nodes/BrowserNode.d.ts +0 -10
  119. package/dist/components/digitalsee/workflow/Nodes/BuiltinMCPNode.d.ts +0 -9
  120. package/dist/components/digitalsee/workflow/Nodes/ConditionNode.d.ts +0 -13
  121. package/dist/components/digitalsee/workflow/Nodes/CustomNode.d.ts +0 -15
  122. package/dist/components/digitalsee/workflow/Nodes/LoopNode.d.ts +0 -4
  123. package/dist/components/digitalsee/workflow/Nodes/MCPServerNode.d.ts +0 -9
  124. package/dist/components/digitalsee/workflow/Nodes/MCPToolNode.d.ts +0 -9
  125. package/dist/components/digitalsee/workflow/Nodes/NextNodeFactory.d.ts +0 -12
  126. package/dist/components/digitalsee/workflow/Nodes/NextNodes/NextActionNode.d.ts +0 -9
  127. package/dist/components/digitalsee/workflow/Nodes/NextNodes/NextBaseNode.d.ts +0 -16
  128. package/dist/components/digitalsee/workflow/Nodes/NextNodes/NextConditionNode.d.ts +0 -10
  129. package/dist/components/digitalsee/workflow/Nodes/NextNodes/NextLoopNode.d.ts +0 -10
  130. package/dist/components/digitalsee/workflow/Nodes/NextNodes/NextSwitchNode.d.ts +0 -10
  131. package/dist/components/digitalsee/workflow/Nodes/NextNodes/NextTriggerNode.d.ts +0 -9
  132. package/dist/components/digitalsee/workflow/Nodes/SelfLoopNode.d.ts +0 -4
  133. package/dist/components/digitalsee/workflow/Nodes/StartNode.d.ts +0 -1
  134. package/dist/components/digitalsee/workflow/Nodes/SwitchNode.d.ts +0 -13
  135. package/dist/components/digitalsee/workflow/Nodes/TriggerNode.d.ts +0 -10
  136. package/dist/components/digitalsee/workflow/Nodes/components/NextNodeDescription.d.ts +0 -16
  137. package/dist/components/digitalsee/workflow/Nodes/components/NextNodeOperations.d.ts +0 -11
  138. package/dist/components/digitalsee/workflow/Nodes/useClassicNodePackagePorts.d.ts +0 -27
  139. package/dist/components/digitalsee/workflow/NodesConfig/NextNodeConfig/CreateCredentialModal.d.ts +0 -13
  140. package/dist/components/digitalsee/workflow/NodesConfig/NextNodeConfig/CredentialSelect.d.ts +0 -17
  141. package/dist/components/digitalsee/workflow/NodesConfig/NextNodeConfig/ModifyCredentialModal.d.ts +0 -17
  142. package/dist/components/digitalsee/workflow/NodesConfig/NextNodeConfig/fieldSchemaAdapter.d.ts +0 -10
  143. package/dist/components/digitalsee/workflow/NodesConfig/NextNodeConfig/index.d.ts +0 -17
  144. package/dist/components/digitalsee/workflow/NodesConfig/components/NextNodeSettings.d.ts +0 -6
  145. package/dist/components/digitalsee/workflow/NodesConfig/components/NextNodeTest.d.ts +0 -6
  146. package/dist/components/digitalsee/workflow/NodesConfig/components/NextVariableModal/index.d.ts +0 -6
  147. package/dist/components/digitalsee/workflow/NodesConfig/components/NextVariableModal/variable-tree-next.d.ts +0 -49
  148. package/dist/components/digitalsee/workflow/Panels/ModernNodeSelectorPanel/components/EntryTypeSelector.d.ts +0 -8
  149. package/dist/components/digitalsee/workflow/Panels/ModernNodeSelectorPanel/components/NodeCardList.d.ts +0 -20
  150. package/dist/components/digitalsee/workflow/Panels/ModernNodeSelectorPanel/hooks/useNodeActionState.d.ts +0 -28
  151. package/dist/components/digitalsee/workflow/Panels/ModernNodeSelectorPanel/hooks/useNodeSelectorPresentation.d.ts +0 -25
  152. package/dist/components/digitalsee/workflow/Panels/ModernNodeSelectorPanel/utils/queryParams.d.ts +0 -18
  153. package/dist/components/digitalsee/workflow/constants/nextHandles.d.ts +0 -1
  154. package/dist/components/digitalsee/workflow/utils/classicNodePackageConnection.d.ts +0 -28
  155. package/dist/components/digitalsee/workflow/utils/classicNodePackageGraphValidation.d.ts +0 -29
  156. package/dist/components/digitalsee/workflow/utils/nextNodeSchemaCache.d.ts +0 -14
  157. package/dist/components/digitalsee/workflow/utils/queuedNodeConfigOpen.d.ts +0 -12
  158. package/dist/index-BnE-Ea2s.mjs +0 -312
  159. package/dist/index-BnE-Ea2s.mjs.map +0 -1
  160. package/dist/index-CqZ6Y0AC.mjs.map +0 -1
  161. package/dist/rcs.es.js.map +0 -1
  162. package/dist/rcs.umd.js.map +0 -1
  163. /package/dist/components/digitalsee/workflow/NodesConfig/{NextNodeConfig → NodePackageConfig}/WorkflowNodeSchemaFieldProvider.d.ts +0 -0
  164. /package/dist/components/digitalsee/workflow/NodesConfig/{NextNodeConfig → NodePackageConfig}/fields/WorkflowCodeField.d.ts +0 -0
  165. /package/dist/components/digitalsee/workflow/NodesConfig/{NextNodeConfig → NodePackageConfig}/fields/WorkflowProxyField.d.ts +0 -0
  166. /package/dist/components/digitalsee/workflow/NodesConfig/{NextNodeConfig → NodePackageConfig}/proxyField.d.ts +0 -0
  167. /package/dist/components/digitalsee/workflow/NodesConfig/components/FormFieldRenderer/{next-compatible.d.ts → nodePackage-compatible.d.ts} +0 -0
@@ -1,6 +0,0 @@
1
- interface NextNodeTestProps {
2
- nodeId: string;
3
- beforeHook?: (isRunNodeTest?: boolean, ignore?: boolean, output?: string) => void;
4
- }
5
- declare const NextNodeTest: import('react').ForwardRefExoticComponent<NextNodeTestProps & import('react').RefAttributes<unknown>>;
6
- export default NextNodeTest;
@@ -1,6 +0,0 @@
1
- interface NextVariableModalProps {
2
- nodeId: string;
3
- open: boolean;
4
- }
5
- export declare const NextVariableModal: import('react').ForwardRefExoticComponent<NextVariableModalProps & import('react').RefAttributes<any>>;
6
- export {};
@@ -1,49 +0,0 @@
1
- import { Edge, Node } from '@xyflow/react';
2
- /** 变量树节点 */
3
- export interface VariableTreeNode {
4
- /** 唯一标识 */
5
- key: string;
6
- /** 显示文本 */
7
- title: string;
8
- /** 数据类型 */
9
- type?: string;
10
- /** 是否叶子节点(可选中插入) */
11
- isLeaf: boolean;
12
- /** 选中时生成的表达式 */
13
- expression?: string;
14
- /** 子节点 */
15
- children?: VariableTreeNode[];
16
- }
17
- export interface AvailableSource {
18
- node: Node;
19
- outputMode: 'normal' | 'error';
20
- }
21
- /** 清除 Schema 缓存 */
22
- export declare function clearSchemaCache(): void;
23
- /** 获取当前节点的可确定上游节点(按拓扑路径顺序) */
24
- export declare function getUpstreamNodes(currentNodeId: string, nodes: Node[], edges: Edge[]): Node[];
25
- export declare function getUpstreamSources(currentNodeId: string, nodes: Node[], edges: Edge[]): AvailableSource[];
26
- /**
27
- * 将 Next 变量树节点转换为后端可解析的旧版变量表达式。
28
- *
29
- * 处理逻辑:
30
- * - 节点 ID:先做首尾空白裁剪,再转换为旧版变量 token。
31
- * - 旧版变量 token:固定使用 `N` 作为节点 ID 前缀;如果传入值已经以 `N`
32
- * 开头,认为它已经是旧版 token,不重复补前缀。
33
- * - 字段路径为空:返回 `{{N节点ID}}`,用于极端兜底场景。
34
- * - 字段路径非空:返回 `{{N节点ID.字段路径}}`。
35
- *
36
- * @param nodeId React Flow 节点 ID。
37
- * @param fieldPath 输出字段路径。
38
- * @returns 旧版变量表达式。
39
- */
40
- export declare function formatClassicVariableExpression(nodeId: string, fieldPath: string): string;
41
- /**
42
- * 构建当前节点可引用的变量树
43
- *
44
- * @param currentNodeId 当前正在配置的节点 ID
45
- * @param nodes 画布中所有节点
46
- * @param edges 画布中所有连线
47
- * @returns 变量树根节点列表(每个上游节点一棵子树)
48
- */
49
- export declare function buildVariableTree(currentNodeId: string, nodes: Node[], edges: Edge[]): Promise<VariableTreeNode[]>;
@@ -1,8 +0,0 @@
1
- import { default as React } from 'react';
2
- export type EntryMode = 'automation' | 'mcp' | null;
3
- interface EntryTypeSelectorProps {
4
- onSelect: (mode: Exclude<EntryMode, null>) => void;
5
- }
6
- /** @description 首节点入口类型选择。 */
7
- declare const EntryTypeSelector: React.FC<EntryTypeSelectorProps>;
8
- export default EntryTypeSelector;
@@ -1,20 +0,0 @@
1
- import { NodeActionMeta } from '../hooks/useNodeActionState';
2
- import { ActionItem, NodeTypeItem } from '../types';
3
- import { default as React } from 'react';
4
- interface NodeCardListProps {
5
- isSearching: boolean;
6
- visibleNodes: NodeTypeItem[];
7
- useConnectableDataSource: boolean;
8
- expandedNodeIds: string[];
9
- nodeActionsMap: Record<string, NodeActionMeta>;
10
- searchText: string;
11
- isInitialLoading: boolean;
12
- isLoadingNodes: boolean;
13
- hasMore: boolean;
14
- onNodeToggle: (node: NodeTypeItem) => void;
15
- onActionSelect: (node: NodeTypeItem, action: ActionItem) => void;
16
- onLoadAllActions: (node: NodeTypeItem) => void;
17
- }
18
- /** @description 节点卡片集合及其加载、空态和分页尾部。 */
19
- declare const NodeCardList: React.FC<NodeCardListProps>;
20
- export default NodeCardList;
@@ -1,28 +0,0 @@
1
- import { ActionItem, NodeTypeItem } from '../types';
2
- export interface NodeActionMeta {
3
- actions: ActionItem[];
4
- loading: boolean;
5
- source?: 'search-partial' | 'full';
6
- }
7
- interface UseNodeActionStateProps {
8
- actionRequestContextKey: string;
9
- contextMode?: string;
10
- fetchNodeActions: (node: NodeTypeItem, options?: {
11
- suppressLoading?: boolean;
12
- }) => Promise<ActionItem[]>;
13
- isMcpServerEntryMode: boolean;
14
- visibleNodes: NodeTypeItem[];
15
- searchText: string;
16
- }
17
- /**
18
- * @description 管理连接器的展开状态、动作缓存,以及异步动作请求的竞态保护。
19
- */
20
- export declare function useNodeActionState({ actionRequestContextKey, contextMode, fetchNodeActions, isMcpServerEntryMode, visibleNodes, searchText, }: UseNodeActionStateProps): {
21
- expandedNodeIds: string[];
22
- nodeActionsMap: Record<string, NodeActionMeta>;
23
- handleNodeToggle: (node: NodeTypeItem) => Promise<void>;
24
- handleLoadAllActions: (node: NodeTypeItem) => Promise<void>;
25
- resetNodeActionState: () => void;
26
- setExpandedNodeIds: import('react').Dispatch<import('react').SetStateAction<string[]>>;
27
- };
28
- export {};
@@ -1,25 +0,0 @@
1
- import { CategoryItem, LinkSearchParams, NodeTypeItem } from '../types';
2
- import { NodeAddInfo } from '../../../types/NodeAddContext';
3
- interface UseNodeSelectorPresentationProps {
4
- effectiveNodeAddInfo?: NodeAddInfo | null;
5
- isEntryTypeSelection: boolean;
6
- activeCategoryId?: string;
7
- currentCategory: CategoryItem | null;
8
- categoryNodes: NodeTypeItem[];
9
- searchResults: NodeTypeItem[];
10
- searchText: string;
11
- isRealTriggerMode: boolean;
12
- workflowId?: string;
13
- useConnectableDataSource?: boolean;
14
- }
15
- /**
16
- * @description 汇总节点选择器的协议展示状态和列表/搜索派生参数。
17
- */
18
- export declare function useNodeSelectorPresentation({ effectiveNodeAddInfo, isEntryTypeSelection, activeCategoryId, currentCategory, categoryNodes, searchResults, searchText, isRealTriggerMode, workflowId, useConnectableDataSource, }: UseNodeSelectorPresentationProps): {
19
- panelTitle: string;
20
- searchPlaceholder: string;
21
- visibleNodes: NodeTypeItem[];
22
- buildSearchParams: () => LinkSearchParams;
23
- isMcpServerEntryMode: boolean;
24
- };
25
- export {};
@@ -1,18 +0,0 @@
1
- import { NodeProtocol } from '../../../types/NodeProtocol';
2
- interface CanvasContextNode {
3
- data?: {
4
- __isMcpServerCanvas?: unknown;
5
- };
6
- }
7
- interface ResolveNodeSelectorProtocolParams {
8
- protocol?: string;
9
- sourceNode?: CanvasContextNode | null;
10
- targetNode?: CanvasContextNode | null;
11
- }
12
- /**
13
- * Resolve the protocol used by node-catalog requests without changing the
14
- * selector's entry mode. MCP execution-node selectors have no entry protocol,
15
- * so they fall back to the canvas marker carried by their source/target node.
16
- */
17
- export declare const resolveNodeSelectorProtocol: ({ protocol, sourceNode, targetNode, }: ResolveNodeSelectorProtocolParams) => NodeProtocol.AI_LANGUAGE_MODEL | NodeProtocol.AI_MEMORY | NodeProtocol.MCP | NodeProtocol.MCP_SERVER;
18
- export {};
@@ -1 +0,0 @@
1
- export declare const NEXT_ERROR_HANDLE_ID = "error";
@@ -1,28 +0,0 @@
1
- import { DipNodeSchema } from '../api/dip';
2
- import { PortConnectionEdge, PortConnectionValidationCode } from './portConnectionValidator';
3
- import { Node } from '@xyflow/react';
4
- export type ClassicNodePackageConnectionCode = PortConnectionValidationCode | 'NOT_APPLICABLE' | 'SCHEMA_NOT_READY';
5
- export interface ClassicNodePackageConnectionResult {
6
- applicable: boolean;
7
- valid: boolean;
8
- code: ClassicNodePackageConnectionCode;
9
- reason: string;
10
- missingSchemaNodeIds?: string[];
11
- }
12
- export interface ValidateClassicNodePackageConnectionInput {
13
- sourceNode?: Node | null;
14
- targetNode?: Node | null;
15
- sourceHandle?: string | null;
16
- targetHandle?: string | null;
17
- edges?: readonly PortConnectionEdge[];
18
- }
19
- /** 同步解析节点内联或已预加载的 CLASSIC nodepackage Schema。 */
20
- export declare function resolveClassicNodePackageSchema(node?: Node | null): DipNodeSchema | null;
21
- export declare function isClassicNodePackageNode(node?: Node | null): boolean;
22
- /**
23
- * 校验两个 CLASSIC nodepackage 节点之间的端口连接。
24
- *
25
- * 混合 legacy/nodepackage 连接保留前端当前精确 handle 名称,并按后端虚拟端口契约
26
- * 将 legacy 端口能力类型统一映射为 main。
27
- */
28
- export declare function validateClassicNodePackageConnection({ sourceNode, targetNode, sourceHandle, targetHandle, edges, }: ValidateClassicNodePackageConnectionInput): ClassicNodePackageConnectionResult;
@@ -1,29 +0,0 @@
1
- import { PortConnectionValidationCode } from './portConnectionValidator';
2
- import { Edge, Node } from '@xyflow/react';
3
- export type ClassicNodePackageGraphIssueCode = PortConnectionValidationCode | 'REQUIRED_INPUT_MISSING' | 'SCHEMA_NOT_READY';
4
- export interface ClassicNodePackageGraphIssue {
5
- code: ClassicNodePackageGraphIssueCode;
6
- reason: string;
7
- blocking: boolean;
8
- nodeId?: string;
9
- portName?: string;
10
- edgeId?: string;
11
- sourceNodeId?: string;
12
- targetNodeId?: string;
13
- }
14
- export interface ClassicNodePackageGraphValidationResult {
15
- valid: boolean;
16
- issues: ClassicNodePackageGraphIssue[];
17
- blockingIssues: ClassicNodePackageGraphIssue[];
18
- missingSchemaNodeIds: string[];
19
- }
20
- interface ValidateClassicNodePackageGraphInput {
21
- nodes: readonly Node[];
22
- edges: readonly Edge[];
23
- }
24
- /**
25
- * 保存前检查当前已知的 CLASSIC nodepackage 端口约束。
26
- * Schema 尚未加载属于非阻塞 warning,最终交给 ACM 后端兜底;已知非法端口则阻止保存。
27
- */
28
- export declare function validateClassicNodePackageGraph({ nodes, edges, }: ValidateClassicNodePackageGraphInput): ClassicNodePackageGraphValidationResult;
29
- export {};
@@ -1,14 +0,0 @@
1
- import { DipNodeSchema } from '../api/dip';
2
- export declare function clearNextNodeSchemaCache(): void;
3
- export declare function setCachedNextNodeSchema(nodeKey: string, nodeVersion: number | undefined, schema: DipNodeSchema): void;
4
- export declare function setCachedClassicNextNodeSchema(nodeKey: string, nodeVersion: number | undefined, schema: DipNodeSchema): void;
5
- /**
6
- * 同步读取已预加载的 CLASSIC nodepackage Schema,不触发网络请求。
7
- *
8
- * 手动拖线发生在 ReactFlow 的同步校验阶段,无法等待异步 Schema 请求;
9
- * 因此画布加载/选择器转换阶段会先预热缓存,再由这里读取。缺失版本时与
10
- * `getCachedClassicNextNodeSchema` 保持一致,按 ACM 版本 1 兜底。
11
- */
12
- export declare function peekCachedClassicNextNodeSchema(nodeKey: string, nodeVersion?: number): DipNodeSchema | null;
13
- export declare function getCachedClassicNextNodeSchema(nodeKey: string, nodeVersion?: number): Promise<DipNodeSchema | null>;
14
- export declare function getCachedNextNodeSchema(nodeKey: string, nodeVersion?: number): Promise<DipNodeSchema | null>;
@@ -1,12 +0,0 @@
1
- /**
2
- * 新增节点后「保存完成再打开配置弹窗」的排队状态。
3
- *
4
- * 历史实现挂在 window 上,保存成功时由 updateSaveStatus 消费。
5
- * 若用户在保存完成前关闭弹窗,必须取消排队,否则会偶现再次自动打开。
6
- */
7
- /** 排队:保存成功后打开指定节点配置 */
8
- export declare function queueNodeConfigOpen(nodeId: string | null | undefined): void;
9
- /** 取消排队(用户关闭配置弹窗时调用) */
10
- export declare function cancelQueuedNodeConfigOpen(): void;
11
- /** 消费排队并清空,返回待打开的节点 ID(无则空串) */
12
- export declare function consumeQueuedNodeConfigOpen(): string;
@@ -1,312 +0,0 @@
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-CqZ6Y0AC.mjs";
3
- import { useEventEmitter as O, useReactive as B, useSize as W } from "ahooks";
4
- import { FormattedMessage as $ } from "react-intl";
5
- import { CloseCircleFilled as z, CheckCircleFilled as A } from "@ant-design/icons";
6
- import { Button as D } from "antd";
7
- import * as H from "monaco-editor";
8
- import { useRef as I, useEffect as K } from "react";
9
- import { createPortal as q } from "react-dom";
10
- import U from "react-monaco-editor";
11
- const G = "_modalContainer_6vx6e_1", J = "_editorContainer_6vx6e_10", Q = "_sider_6vx6e_20", X = "_main_6vx6e_23", Y = "_header_6vx6e_28", Z = "_editor_6vx6e_10", v = {
12
- modalContainer: G,
13
- editorContainer: J,
14
- sider: Q,
15
- main: X,
16
- header: Y,
17
- editor: Z
18
- }, ee = "_ideWrapper_sfar6_1", ne = {
19
- ideWrapper: ee
20
- }, te = (e) => {
21
- const { nodeId: r, onInsert: i, open: d } = e, o = O();
22
- return o.useSubscription((s) => {
23
- s.type === "insert" && i(s.expression);
24
- }), /* @__PURE__ */ n(F.Provider, { value: { event$: o }, children: /* @__PURE__ */ n("div", { className: ne.ideWrapper, children: /* @__PURE__ */ n(R, { nodeId: r, onInsert: i, open: d }) }) });
25
- }, ie = "_siderContainer_fhkbn_1", re = {
26
- siderContainer: ie
27
- };
28
- function oe(e) {
29
- return /* @__PURE__ */ C("div", { className: re.siderContainer, children: [
30
- /* @__PURE__ */ n("div", { children: /* @__PURE__ */ n(te, { open: e.open, nodeId: e.nodeId, onInsert: e.onInsert }) }),
31
- /* @__PURE__ */ n("div", { style: { textAlign: "center" } })
32
- ] });
33
- }
34
- function se({ language: e = "javascript" }) {
35
- return /* @__PURE__ */ C("h3", { style: { color: "#999", fontSize: 16, margin: "6px 0" }, children: [
36
- /* @__PURE__ */ n($, { id: "link.flow.code_editor" }),
37
- " (",
38
- e.toUpperCase(),
39
- ")"
40
- ] });
41
- }
42
- function ae(e) {
43
- return /* @__PURE__ */ C(
44
- "div",
45
- {
46
- style: {
47
- color: "white",
48
- display: "flex",
49
- paddingRight: 30,
50
- alignItems: "center",
51
- height: "100%",
52
- fontSize: 16
53
- },
54
- children: [
55
- /* @__PURE__ */ n(
56
- D,
57
- {
58
- type: "primary",
59
- size: "small",
60
- style: { marginRight: 10 },
61
- disabled: !1,
62
- danger: !0,
63
- onClick: e.onCancel,
64
- icon: /* @__PURE__ */ n(z, { onClick: e.onCancel }),
65
- children: /* @__PURE__ */ n($, { id: "app.common.word.cancel" })
66
- }
67
- ),
68
- /* @__PURE__ */ n(
69
- D,
70
- {
71
- type: "primary",
72
- size: "small",
73
- style: { marginRight: 10 },
74
- onClick: e.onFinish,
75
- icon: /* @__PURE__ */ n(A, {}),
76
- children: /* @__PURE__ */ n($, { id: "app.common.word.finish" })
77
- }
78
- )
79
- ]
80
- }
81
- );
82
- }
83
- const le = [{ trigger: "log", content: "console.log('$1');$2", desc: "输出日志" }, { trigger: "imp", content: "import $1 from '$2';$3" }, { trigger: "loop", content: `for (let $1=0; i< $2.length;i++) {
84
-
85
- }`, desc: "循环操作" }], ce = {
86
- snippets: le
87
- }, de = {
88
- selectOnLineNumbers: !0,
89
- automaticLayout: !0,
90
- padding: {
91
- top: 10
92
- }
93
- };
94
- function ue(e) {
95
- if (e.type === "global")
96
- return [
97
- `**${l("link.flow.variable_type_global")}**`,
98
- `${l("link.flow.variable_path")}:\`${e.value}\``,
99
- `${l("link.flow.variable_name")}:\`${e.path}\``
100
- ].filter(Boolean).join(`
101
-
102
- `);
103
- if (e.type === "builtin") {
104
- const r = P.getBuiltinVariableTips(e.firstPart);
105
- return [
106
- `**${l("link.flow.variable_type_builtin")}**`,
107
- `${l("link.flow.variable_path")}:\`${e.value}\``,
108
- r
109
- ].filter(Boolean).join(`
110
-
111
- `);
112
- }
113
- return e.type === "node" ? [
114
- `**${l("link.flow.variable_type_node")}**`,
115
- `${l("link.flow.variable_path")}:\`${e.value}\``,
116
- e.path ? `${l("link.flow.variable_field")}:\`${e.path}\`` : ""
117
- ].filter(Boolean).join(`
118
-
119
- `) : [
120
- `**${l("link.flow.variable_type_platform")}**`,
121
- `${l("link.flow.variable_path")}:\`${e.value}\``
122
- ].join(`
123
-
124
- `);
125
- }
126
- const ge = (e) => ({
127
- code: e.code,
128
- severity: e.severity,
129
- message: e.message,
130
- source: e.source,
131
- startLineNumber: e.startLineNumber,
132
- startColumn: e.startColumn,
133
- endLineNumber: e.endLineNumber,
134
- endColumn: e.endColumn,
135
- modelVersionId: e.modelVersionId,
136
- relatedInformation: e.relatedInformation,
137
- tags: e.tags
138
- });
139
- function k(e, r) {
140
- const i = V(r.getValue());
141
- if (!i.length)
142
- return;
143
- const d = e.editor.getModelMarkers({ resource: r.uri }), o = /* @__PURE__ */ new Map();
144
- d.forEach((s) => {
145
- const c = o.get(s.owner) ?? [];
146
- c.push(s), o.set(s.owner, c);
147
- }), o.forEach((s, c) => {
148
- const u = s.filter(
149
- (g) => !i.some((b) => L(b, g))
150
- );
151
- u.length !== s.length && e.editor.setModelMarkers(r, c, u.map(ge));
152
- });
153
- }
154
- function pe(e, r) {
155
- const i = [].map((d) => ({
156
- insertText: d,
157
- kind: e.languages.CompletionItemKind.Function,
158
- // 对应提示图标的不同
159
- label: d
160
- }));
161
- return e.languages.registerCompletionItemProvider(r, {
162
- provideCompletionItems() {
163
- return {
164
- suggestions: i
165
- };
166
- },
167
- quickSuggestions: !0,
168
- // 默认提示关闭
169
- triggerCharacters: ["{", ".", "=", ":"]
170
- // 触发提示的字符 可以定义多个
171
- });
172
- }
173
- function fe(e) {
174
- return e.languages.typescript.javascriptDefaults.setDiagnosticsOptions({
175
- noSemanticValidation: !0,
176
- noSyntaxValidation: !1
177
- }), e.languages.typescript.javascriptDefaults.setCompilerOptions({
178
- target: e.languages.typescript.ScriptTarget.ES2015,
179
- allowNonTsExtensions: !0
180
- }), e.languages.registerCompletionItemProvider("javascript", {
181
- provideCompletionItems: () => ({
182
- suggestions: ce.snippets.map((i) => ({
183
- label: i.trigger,
184
- kind: e.languages.CompletionItemKind.Method,
185
- detail: i.desc ?? "",
186
- insertText: i.content,
187
- insertTextRules: e.languages.CompletionItemInsertTextRule.InsertAsSnippet
188
- }))
189
- })
190
- });
191
- }
192
- function $e(e) {
193
- const { open: r, nodeId: i, initialValue: d, language: o = "javascript", showVariableSidebar: s = !0 } = e, c = I(null), u = I([]), g = B({
194
- code: "",
195
- range: new H.Range(1, 1, 1, 1)
196
- }), b = (t, a) => {
197
- t.onDidChangeCursorPosition((p) => {
198
- const m = p.position, { lineNumber: f = 0, column: _ = 0 } = m;
199
- g.range = new a.Range(f, _, f, _);
200
- }), c.current = t, t.focus(), g.code = t.getValue();
201
- const j = a.languages.registerHoverProvider(o, {
202
- provideHover: (p, m) => new Promise((f) => {
203
- const h = V(p.getValue()).find(
204
- (E) => T(E, m.lineNumber, m.column)
205
- );
206
- if (!h) {
207
- f(null);
208
- return;
209
- }
210
- f({
211
- range: new a.Range(
212
- h.startLine,
213
- h.startColumn,
214
- h.endLine,
215
- h.endColumn
216
- ),
217
- contents: [{ value: ue(h) }]
218
- });
219
- })
220
- }), y = t.getModel();
221
- if (y) {
222
- let p = !1;
223
- const m = a.editor.onDidChangeMarkers((f) => {
224
- p || !f.some((_) => _.toString() === y.uri.toString()) || (p = !0, window.setTimeout(() => {
225
- try {
226
- k(a, y);
227
- } finally {
228
- p = !1;
229
- }
230
- }, 0));
231
- });
232
- k(a, y), t.onDidDispose(() => m.dispose());
233
- }
234
- t.onDidDispose(() => j.dispose());
235
- }, N = (t) => {
236
- u.current.forEach((a) => {
237
- a.dispose();
238
- }), u.current = [pe(t, o)], o === "javascript" && u.current.push(fe(t));
239
- };
240
- K(
241
- () => () => {
242
- u.current.forEach((t) => {
243
- t.dispose();
244
- }), u.current = [];
245
- },
246
- []
247
- );
248
- const S = (t) => {
249
- const a = [
250
- {
251
- range: g.range,
252
- text: t,
253
- forceMoveMarkers: !0
254
- }
255
- ];
256
- c.current && g.range && c.current.executeEdits("my-source", a);
257
- }, x = () => {
258
- var t;
259
- (t = e.onFinish) == null || t.call(e, g.code);
260
- }, M = I(null), w = W(M);
261
- return q(
262
- /* @__PURE__ */ n(
263
- "div",
264
- {
265
- className: v.modalContainer,
266
- ref: M,
267
- style: { display: r ? "flex" : "none" },
268
- children: /* @__PURE__ */ C("div", { className: v.editorContainer, id: "javascript-code-editor", children: [
269
- s ? /* @__PURE__ */ n("div", { className: v.sider, children: /* @__PURE__ */ n(
270
- oe,
271
- {
272
- onCancel: e.onCancel,
273
- onFinish: x,
274
- editor: c.current,
275
- nodeId: i,
276
- open: r,
277
- onInsert: S
278
- }
279
- ) }) : null,
280
- /* @__PURE__ */ C("div", { className: v.main, children: [
281
- /* @__PURE__ */ C("div", { className: v.header, children: [
282
- /* @__PURE__ */ n(se, { language: o }),
283
- /* @__PURE__ */ n(ae, { onCancel: e.onCancel, onFinish: x })
284
- ] }),
285
- /* @__PURE__ */ n("div", { className: v.editor, children: /* @__PURE__ */ n(
286
- U,
287
- {
288
- width: "100%",
289
- height: ((w == null ? void 0 : w.height) ?? 0) - 40,
290
- language: o,
291
- theme: "vs-dark",
292
- value: d,
293
- options: de,
294
- onChange: (t) => {
295
- g.code = t;
296
- },
297
- editorWillMount: N,
298
- editorDidMount: b
299
- },
300
- i
301
- ) })
302
- ] })
303
- ] })
304
- }
305
- ),
306
- document.body
307
- );
308
- }
309
- export {
310
- $e as default
311
- };
312
- //# sourceMappingURL=index-BnE-Ea2s.mjs.map
@@ -1 +0,0 @@
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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"}