@digitalsee-ai/rcs 1.1.8 → 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 (168) 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 +3 -6
  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/useWorkflowCanvasState.d.ts +22 -4
  16. package/dist/components/digitalsee/workflow/Canvas/types.d.ts +18 -6
  17. package/dist/components/digitalsee/workflow/Edges/BaseEdge.d.ts +2 -0
  18. package/dist/components/digitalsee/workflow/Edges/EdgeFactory.d.ts +3 -8
  19. package/dist/components/digitalsee/workflow/Edges/edgeLayout.d.ts +73 -0
  20. package/dist/components/digitalsee/workflow/Handles/CustomHandle.d.ts +1 -0
  21. package/dist/components/digitalsee/workflow/Handles/customHandleConnectable.d.ts +19 -0
  22. package/dist/components/digitalsee/workflow/Nodes/DeclaredNode.d.ts +33 -0
  23. package/dist/components/digitalsee/workflow/Nodes/DynamicNode.d.ts +24 -0
  24. package/dist/components/digitalsee/workflow/Nodes/NodeFactory.d.ts +42 -4
  25. package/dist/components/digitalsee/workflow/Nodes/SuperBaseNode.d.ts +2 -1
  26. package/dist/components/digitalsee/workflow/Nodes/classicPortLayout.d.ts +51 -0
  27. package/dist/components/digitalsee/workflow/Nodes/components/NodeStatusBadge.d.ts +11 -0
  28. package/dist/components/digitalsee/workflow/Nodes/{classicNodePackagePortLayout.d.ts → nodePackagePortLayout.d.ts} +4 -4
  29. package/dist/components/digitalsee/workflow/Nodes/nodeTypeRegistry.d.ts +131 -0
  30. package/dist/components/digitalsee/workflow/Nodes/useNodePackagePorts.d.ts +35 -0
  31. package/dist/components/digitalsee/workflow/NodesConfig/NodePackageConfig/fieldSchemaAdapter.d.ts +14 -0
  32. package/dist/components/digitalsee/workflow/NodesConfig/components/FormFieldRenderer/fields/RichTagInput/help.d.ts +5 -1
  33. package/dist/components/digitalsee/workflow/NodesConfig/components/FormFieldRenderer/index.d.ts +1 -0
  34. package/dist/components/digitalsee/workflow/NodesConfig/components/NodeTest.d.ts +2 -0
  35. package/dist/components/digitalsee/workflow/NodesConfig/components/NodeTest.helpers.d.ts +11 -0
  36. package/dist/components/digitalsee/workflow/NodesConfig/components/VariableModal/tree-help.d.ts +5 -12
  37. package/dist/components/digitalsee/workflow/NodesConfig/submitPayload.d.ts +10 -17
  38. package/dist/components/digitalsee/workflow/Panels/CanvasConfigDebugger.d.ts +1 -1
  39. package/dist/components/digitalsee/workflow/Panels/ModernNodeSelectorPanel/components/CategoryItem.d.ts +1 -1
  40. package/dist/components/digitalsee/workflow/Panels/ModernNodeSelectorPanel/components/CategoryTabs.d.ts +1 -1
  41. package/dist/components/digitalsee/workflow/Panels/ModernNodeSelectorPanel/components/NodeCard.d.ts +1 -1
  42. package/dist/components/digitalsee/workflow/Panels/ModernNodeSelectorPanel/components/NodeItem.d.ts +1 -1
  43. package/dist/components/digitalsee/workflow/Panels/ModernNodeSelectorPanel/components/PanelHeader.d.ts +1 -1
  44. package/dist/components/digitalsee/workflow/Panels/ModernNodeSelectorPanel/hooks/useConnectableNodeSelector.d.ts +2 -5
  45. package/dist/components/digitalsee/workflow/Panels/ModernNodeSelectorPanel/types.d.ts +10 -4
  46. package/dist/components/digitalsee/workflow/Panels/ModernNodeSelectorPanel/utils/connectableDataSource.d.ts +6 -10
  47. package/dist/components/digitalsee/workflow/Panels/SimpleNodeSelectorPanel/components/NodeListItem.d.ts +1 -1
  48. package/dist/components/digitalsee/workflow/api/dip.types.d.ts +30 -1
  49. package/dist/components/digitalsee/workflow/api/index.d.ts +3 -22
  50. package/dist/components/digitalsee/workflow/builtin/controls/ConfigSubflow/index.d.ts +2 -2
  51. package/dist/components/digitalsee/workflow/builtin/globalConfig/index.d.ts +5 -1
  52. package/dist/components/digitalsee/workflow/config/globalConfig.d.ts +1 -5
  53. package/dist/components/digitalsee/workflow/config/layerConfig.d.ts +14 -0
  54. package/dist/components/digitalsee/workflow/config/themeConfig.d.ts +19 -23
  55. package/dist/components/digitalsee/workflow/constants/nodePackageHandles.d.ts +10 -0
  56. package/dist/components/digitalsee/workflow/context/workflowTriggerContext.d.ts +22 -0
  57. package/dist/components/digitalsee/workflow/coverage/acceptanceManifest.d.ts +30 -0
  58. package/dist/components/digitalsee/workflow/coverage/runtimeCoverage.d.ts +34 -0
  59. package/dist/components/digitalsee/workflow/design-system/AiFlowNodeTestPanel.d.ts +24 -0
  60. package/dist/components/digitalsee/workflow/design-system/AiFlowVariableTree.d.ts +34 -0
  61. package/dist/components/digitalsee/workflow/design-system/index.d.ts +3 -0
  62. package/dist/components/digitalsee/workflow/design-system/tokens.d.ts +103 -0
  63. package/dist/components/digitalsee/workflow/enums/canvas.d.ts +0 -12
  64. package/dist/components/digitalsee/workflow/enums/edge.d.ts +4 -2
  65. package/dist/components/digitalsee/workflow/enums/node.d.ts +5 -6
  66. package/dist/components/digitalsee/workflow/enums/workflow.d.ts +1 -1
  67. package/dist/components/digitalsee/workflow/examples/global-config-example.d.ts +1 -1
  68. package/dist/components/digitalsee/workflow/hooks/state.hooks.d.ts +1 -7
  69. package/dist/components/digitalsee/workflow/hooks/use-flow-data-operation.d.ts +1 -1
  70. package/dist/components/digitalsee/workflow/hooks/useCanvasLayout.d.ts +1 -1
  71. package/dist/components/digitalsee/workflow/hooks/useCanvasMode.d.ts +8 -0
  72. package/dist/components/digitalsee/workflow/hooks/useHandleConnections.d.ts +9 -1
  73. package/dist/components/digitalsee/workflow/hooks/useVariables.d.ts +1 -0
  74. package/dist/components/digitalsee/workflow/hooks/useWorkflow.d.ts +1 -1
  75. package/dist/components/digitalsee/workflow/index.d.ts +18 -44
  76. package/dist/components/digitalsee/workflow/migration/umi.d.ts +1 -2
  77. package/dist/components/digitalsee/workflow/store/workflowSlice.d.ts +5 -2
  78. package/dist/components/digitalsee/workflow/types/Node.d.ts +2 -0
  79. package/dist/components/digitalsee/workflow/types/Workflow.d.ts +1 -1
  80. package/dist/components/digitalsee/workflow/types/engine.d.ts +21 -12
  81. package/dist/components/digitalsee/workflow/types/flowVersion.d.ts +0 -30
  82. package/dist/components/digitalsee/workflow/utils/connectionCheck.d.ts +30 -0
  83. package/dist/components/digitalsee/workflow/utils/layoutUtils.d.ts +2 -2
  84. package/dist/components/digitalsee/workflow/utils/mcpCanvas.d.ts +0 -40
  85. package/dist/components/digitalsee/workflow/utils/mode.d.ts +18 -0
  86. package/dist/components/digitalsee/workflow/utils/nodeAutoConnect.d.ts +24 -0
  87. package/dist/components/digitalsee/workflow/utils/nodeCommon.d.ts +5 -0
  88. package/dist/components/digitalsee/workflow/utils/nodeHandleLayout.d.ts +83 -0
  89. package/dist/components/digitalsee/workflow/utils/nodePackageConnection.d.ts +28 -0
  90. package/dist/components/digitalsee/workflow/utils/nodePackageGraphValidation.d.ts +29 -0
  91. package/dist/components/digitalsee/workflow/utils/nodePackageSchemaCache.d.ts +15 -0
  92. package/dist/components/digitalsee/workflow/utils/onNodeRemoveHook.d.ts +13 -0
  93. package/dist/components/digitalsee/workflow/utils/triggerNode.d.ts +13 -0
  94. package/dist/components/digitalsee/workflow/utils/workflowConnectionValidator.d.ts +1 -3
  95. package/dist/components/digitalsee/workflow/workflow.story-fixtures.d.ts +50 -0
  96. package/dist/components/dynamic-form/context/VariableSelectorContext.d.ts +17 -16
  97. package/dist/components/dynamic-form/index.d.ts +1 -1
  98. package/dist/index-CBoDAvhq.mjs +285 -0
  99. package/dist/{index-CRdKUD0G.mjs → index-zEq02rJh.mjs} +23582 -25697
  100. package/dist/locales/en-US/common.d.ts +29 -52
  101. package/dist/locales/en-US.d.ts +29 -52
  102. package/dist/locales/zh-CN/common.d.ts +29 -52
  103. package/dist/locales/zh-CN.d.ts +29 -52
  104. package/dist/locales/zh-TW/common.d.ts +29 -52
  105. package/dist/locales/zh-TW.d.ts +29 -52
  106. package/dist/rcs.css +1 -1
  107. package/dist/rcs.es.js +65 -61
  108. package/dist/rcs.umd.js +132 -72
  109. package/package.json +38 -23
  110. package/dist/components/digitalsee/workflow/Canvas/FlowVersionManager.d.ts +0 -16
  111. package/dist/components/digitalsee/workflow/Canvas/NextConfigModalWrapper.d.ts +0 -9
  112. package/dist/components/digitalsee/workflow/Canvas/NextWorkflowCanvas.d.ts +0 -4
  113. package/dist/components/digitalsee/workflow/Canvas/NextWorkflowCanvasHeader.d.ts +0 -15
  114. package/dist/components/digitalsee/workflow/Canvas/hooks/createNodeAddHandlerNext.d.ts +0 -38
  115. package/dist/components/digitalsee/workflow/NextNodesConfigModal/index.d.ts +0 -13
  116. package/dist/components/digitalsee/workflow/Nodes/AISubNode.d.ts +0 -9
  117. package/dist/components/digitalsee/workflow/Nodes/ActionNode.d.ts +0 -13
  118. package/dist/components/digitalsee/workflow/Nodes/AgentNode.d.ts +0 -10
  119. package/dist/components/digitalsee/workflow/Nodes/BrowserNode.d.ts +0 -10
  120. package/dist/components/digitalsee/workflow/Nodes/BuiltinMCPNode.d.ts +0 -9
  121. package/dist/components/digitalsee/workflow/Nodes/ConditionNode.d.ts +0 -13
  122. package/dist/components/digitalsee/workflow/Nodes/CustomNode.d.ts +0 -15
  123. package/dist/components/digitalsee/workflow/Nodes/LoopNode.d.ts +0 -4
  124. package/dist/components/digitalsee/workflow/Nodes/MCPServerNode.d.ts +0 -9
  125. package/dist/components/digitalsee/workflow/Nodes/MCPToolNode.d.ts +0 -9
  126. package/dist/components/digitalsee/workflow/Nodes/NextNodeFactory.d.ts +0 -12
  127. package/dist/components/digitalsee/workflow/Nodes/NextNodes/NextActionNode.d.ts +0 -9
  128. package/dist/components/digitalsee/workflow/Nodes/NextNodes/NextBaseNode.d.ts +0 -16
  129. package/dist/components/digitalsee/workflow/Nodes/NextNodes/NextConditionNode.d.ts +0 -10
  130. package/dist/components/digitalsee/workflow/Nodes/NextNodes/NextLoopNode.d.ts +0 -10
  131. package/dist/components/digitalsee/workflow/Nodes/NextNodes/NextSwitchNode.d.ts +0 -10
  132. package/dist/components/digitalsee/workflow/Nodes/NextNodes/NextTriggerNode.d.ts +0 -9
  133. package/dist/components/digitalsee/workflow/Nodes/SelfLoopNode.d.ts +0 -4
  134. package/dist/components/digitalsee/workflow/Nodes/StartNode.d.ts +0 -1
  135. package/dist/components/digitalsee/workflow/Nodes/SwitchNode.d.ts +0 -13
  136. package/dist/components/digitalsee/workflow/Nodes/TriggerNode.d.ts +0 -10
  137. package/dist/components/digitalsee/workflow/Nodes/components/NextNodeDescription.d.ts +0 -16
  138. package/dist/components/digitalsee/workflow/Nodes/components/NextNodeOperations.d.ts +0 -11
  139. package/dist/components/digitalsee/workflow/Nodes/useClassicNodePackagePorts.d.ts +0 -27
  140. package/dist/components/digitalsee/workflow/NodesConfig/NextNodeConfig/CreateCredentialModal.d.ts +0 -13
  141. package/dist/components/digitalsee/workflow/NodesConfig/NextNodeConfig/CredentialSelect.d.ts +0 -17
  142. package/dist/components/digitalsee/workflow/NodesConfig/NextNodeConfig/ModifyCredentialModal.d.ts +0 -17
  143. package/dist/components/digitalsee/workflow/NodesConfig/NextNodeConfig/fieldSchemaAdapter.d.ts +0 -10
  144. package/dist/components/digitalsee/workflow/NodesConfig/NextNodeConfig/index.d.ts +0 -17
  145. package/dist/components/digitalsee/workflow/NodesConfig/components/NextNodeSettings.d.ts +0 -6
  146. package/dist/components/digitalsee/workflow/NodesConfig/components/NextNodeTest.d.ts +0 -6
  147. package/dist/components/digitalsee/workflow/NodesConfig/components/NextVariableModal/index.d.ts +0 -6
  148. package/dist/components/digitalsee/workflow/NodesConfig/components/NextVariableModal/variable-tree-next.d.ts +0 -49
  149. package/dist/components/digitalsee/workflow/Panels/ModernNodeSelectorPanel/components/EntryTypeSelector.d.ts +0 -8
  150. package/dist/components/digitalsee/workflow/Panels/ModernNodeSelectorPanel/components/NodeCardList.d.ts +0 -20
  151. package/dist/components/digitalsee/workflow/Panels/ModernNodeSelectorPanel/hooks/useNodeActionState.d.ts +0 -28
  152. package/dist/components/digitalsee/workflow/Panels/ModernNodeSelectorPanel/hooks/useNodeSelectorPresentation.d.ts +0 -25
  153. package/dist/components/digitalsee/workflow/Panels/ModernNodeSelectorPanel/utils/queryParams.d.ts +0 -18
  154. package/dist/components/digitalsee/workflow/constants/nextHandles.d.ts +0 -1
  155. package/dist/components/digitalsee/workflow/utils/classicNodePackageConnection.d.ts +0 -28
  156. package/dist/components/digitalsee/workflow/utils/classicNodePackageGraphValidation.d.ts +0 -29
  157. package/dist/components/digitalsee/workflow/utils/nextNodeSchemaCache.d.ts +0 -14
  158. package/dist/components/digitalsee/workflow/utils/queuedNodeConfigOpen.d.ts +0 -12
  159. package/dist/index-CRdKUD0G.mjs.map +0 -1
  160. package/dist/index-rjDBrC08.mjs +0 -312
  161. package/dist/index-rjDBrC08.mjs.map +0 -1
  162. package/dist/rcs.es.js.map +0 -1
  163. package/dist/rcs.umd.js.map +0 -1
  164. /package/dist/components/digitalsee/workflow/NodesConfig/{NextNodeConfig → NodePackageConfig}/WorkflowNodeSchemaFieldProvider.d.ts +0 -0
  165. /package/dist/components/digitalsee/workflow/NodesConfig/{NextNodeConfig → NodePackageConfig}/fields/WorkflowCodeField.d.ts +0 -0
  166. /package/dist/components/digitalsee/workflow/NodesConfig/{NextNodeConfig → NodePackageConfig}/fields/WorkflowProxyField.d.ts +0 -0
  167. /package/dist/components/digitalsee/workflow/NodesConfig/{NextNodeConfig → NodePackageConfig}/proxyField.d.ts +0 -0
  168. /package/dist/components/digitalsee/workflow/NodesConfig/components/FormFieldRenderer/{next-compatible.d.ts → nodePackage-compatible.d.ts} +0 -0
package/README.md CHANGED
@@ -2,17 +2,16 @@
2
2
 
3
3
  数犀 React 组件库,当前主要提供工作流画布、DynamicForm 和 JsonRenderer。
4
4
 
5
- ## 环境要求
6
-
7
- - Node.js `>= 22`
8
- - pnpm `10.12.1`
9
-
10
- ## 安装与使用
5
+ ## 安装
11
6
 
12
7
  ```bash
13
8
  pnpm add @digitalsee-ai/rcs
14
9
  ```
15
10
 
11
+ ## 使用
12
+
13
+ 工作流画布:
14
+
16
15
  ```tsx
17
16
  import { DigitalseeWorkFlow } from '@digitalsee-ai/rcs';
18
17
  import '@digitalsee-ai/rcs/styles.css';
@@ -22,7 +21,7 @@ export function WorkflowPage() {
22
21
  }
23
22
  ```
24
23
 
25
- DynamicForm 示例:
24
+ DynamicForm
26
25
 
27
26
  ```tsx
28
27
  import { DynamicForm, DynamicFormField, type FormSchema } from '@digitalsee-ai/rcs';
@@ -36,34 +35,3 @@ export function FormPage() {
36
35
  return <DynamicForm schema={schema} />;
37
36
  }
38
37
  ```
39
-
40
- ## 开发命令
41
-
42
- ```bash
43
- pnpm install
44
- pnpm dev # Storybook,默认 http://localhost:8888
45
- pnpm build:lib # tsc + Vite,生成 dist
46
- pnpm build:vite # 仅 Vite 构建,适合快速联调
47
- pnpm tsc # 类型检查
48
- pnpm test # Vitest watch
49
- pnpm test:cov # 单次运行并生成覆盖率
50
- pnpm format # Biome 格式化 src
51
- pnpm lint # Biome lint 并自动修复 src
52
- ```
53
-
54
- `dist/` 是 npm 包实际消费的构建产物。修改源码后,宿主项目不会自动获得更新,需重新构建。
55
-
56
- ## 文档
57
-
58
- - [文档索引与维护状态](docs/README.md)
59
- - [本地联调 npm 包](docs/development/local-package-debugging.md)
60
- - [工作流组件集成](docs/guides/workflow-integration.md)
61
- - [发布说明](docs/development/publishing.md)
62
-
63
- ## 包导出
64
-
65
- - `@digitalsee-ai/rcs`:组件、类型与工具
66
- - `@digitalsee-ai/rcs/styles.css`:组件库样式
67
-
68
- 构建产物包括 `dist/rcs.es.js`、`dist/rcs.umd.js`、`dist/rcs.css` 和
69
- `dist/index.d.ts`。
package/README.npm.md ADDED
@@ -0,0 +1,37 @@
1
+ # @digitalsee-ai/rcs
2
+
3
+ 数犀 React 组件库,当前主要提供工作流画布、DynamicForm 和 JsonRenderer。
4
+
5
+ ## 安装
6
+
7
+ ```bash
8
+ pnpm add @digitalsee-ai/rcs
9
+ ```
10
+
11
+ ## 使用
12
+
13
+ 工作流画布:
14
+
15
+ ```tsx
16
+ import { DigitalseeWorkFlow } from '@digitalsee-ai/rcs';
17
+ import '@digitalsee-ai/rcs/styles.css';
18
+
19
+ export function WorkflowPage() {
20
+ return <DigitalseeWorkFlow workflowId="workflow-id" />;
21
+ }
22
+ ```
23
+
24
+ DynamicForm:
25
+
26
+ ```tsx
27
+ import { DynamicForm, DynamicFormField, type FormSchema } from '@digitalsee-ai/rcs';
28
+ import '@digitalsee-ai/rcs/styles.css';
29
+
30
+ const schema: FormSchema = {
31
+ fields: [{ type: DynamicFormField.TEXT, name: 'name', label: '名称' }],
32
+ };
33
+
34
+ export function FormPage() {
35
+ return <DynamicForm schema={schema} />;
36
+ }
37
+ ```
@@ -1,7 +1,7 @@
1
1
  import { default as React } from 'react';
2
2
  export interface JsonNode {
3
3
  key: string;
4
- value: any;
4
+ value: unknown;
5
5
  type: 'object' | 'array' | 'string' | 'number' | 'boolean' | 'null';
6
6
  path: string[];
7
7
  level: number;
@@ -1,9 +1,12 @@
1
- import { default as React, ReactEventHandler } from 'react';
1
+ import { default as React } from 'react';
2
2
  export interface ToolbarPanelProps {
3
3
  /**
4
4
  * 打开节点选择面板的回调
5
5
  */
6
- onOpenNodeSelector?: (e: ReactEventHandler) => void;
6
+ onOpenNodeSelector?: (e?: {
7
+ protocol?: string;
8
+ trigger?: boolean;
9
+ }) => void;
7
10
  /**
8
11
  * 添加便签节点的回调
9
12
  */
@@ -1,3 +1,11 @@
1
- export declare const FullscreenLoading: import('react').MemoExoticComponent<({ loading }: {
1
+ export interface LoadErrorInfo {
2
+ code?: string;
3
+ description?: string;
4
+ }
5
+ interface FullscreenLoadingProps {
2
6
  loading: boolean;
3
- }) => import("react/jsx-runtime").JSX.Element>;
7
+ error?: LoadErrorInfo | null;
8
+ onRetry?: () => void;
9
+ }
10
+ export declare const FullscreenLoading: import('react').MemoExoticComponent<({ loading, error, onRetry }: FullscreenLoadingProps) => import("react/jsx-runtime").JSX.Element>;
11
+ export {};
@@ -1,3 +1,3 @@
1
1
  import { MiniMap as NativeMiniMap } from '@xyflow/react';
2
2
  import { ComponentProps } from 'react';
3
- export default function MiniMap<T extends ComponentProps<typeof NativeMiniMap> = any>(props: T): import("react/jsx-runtime").JSX.Element;
3
+ export default function MiniMap<T extends ComponentProps<typeof NativeMiniMap>>(props: T): import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,12 @@
1
+ import { default as React } from 'react';
2
+ export interface NodePlaceholderProps {
3
+ /**
4
+ * 打开节点选择面板的回调
5
+ */
6
+ onOpenNodeSelector?: (e?: {
7
+ protocol?: string;
8
+ trigger?: boolean;
9
+ }) => void;
10
+ }
11
+ declare const NodePlaceholder: React.FC<NodePlaceholderProps>;
12
+ export default NodePlaceholder;
@@ -1,18 +1,15 @@
1
1
  import { default as React } from 'react';
2
2
  import { SaveStatus } from '../enums/workflow';
3
- import { CanvasAPI } from '../types/engine';
4
3
  import { FlowDraftPayload } from '../types/flowVersion';
5
4
  interface WorkflowCanvasHeaderProps {
5
+ /** 连接流加载中或加载失败:除返回外 header 操作均不可用 */
6
+ loading?: boolean;
6
7
  onSave?: () => Promise<FlowDraftPayload | undefined>;
7
8
  getFlowPayload?: () => FlowDraftPayload;
8
- readOnly?: boolean;
9
9
  unSave?: boolean;
10
- preview?: boolean;
11
- appFlowMode?: boolean;
12
10
  autoSaveStatus?: SaveStatus;
13
11
  lastSavedTime?: string;
14
- /** 画布对外 API,用于工具栏按钮回调 */
15
- canvasApi?: CanvasAPI;
12
+ onOffline?: (workflowId: string) => Promise<boolean>;
16
13
  }
17
14
  declare const WorkflowCanvasHeader: React.FC<WorkflowCanvasHeaderProps>;
18
15
  export default WorkflowCanvasHeader;
@@ -4,11 +4,6 @@ type ConvertibleActionItem = Partial<ActionItem> & {
4
4
  status?: string;
5
5
  protocol?: string;
6
6
  } & Record<string, unknown>;
7
- /** 将节点动作转换为 CLASSIC 画布节点数据。 */
7
+ /** 将节点动作转换为画布节点数据。 */
8
8
  export declare const convertActionItemToNodeData: (actionItem: ConvertibleActionItem) => NodeFactoryData;
9
- /**
10
- * NEXT 模式专用转换函数(暂废保留分支):额外保留 name 字段。
11
- * 当前 nodepackage 节点仍走 CLASSIC 的 convertActionItemToNodeData。
12
- */
13
- export declare const convertActionItemToNodeDataNext: (actionItem: ConvertibleActionItem) => NodeFactoryData;
14
9
  export {};
@@ -1,25 +1,8 @@
1
1
  import { EdgeType } from '../enums/edge';
2
- import { CanvasAPI } from '../types/engine';
2
+ import { CanvasAPI, WorkflowCanvasMode } from '../types/engine';
3
3
  import { FlowDraftPayload } from '../types/flowVersion';
4
- import { NodeType } from '../types/Node';
5
4
  import { MarkerType, Viewport } from '@xyflow/react';
6
- export { convertActionItemToNodeData, convertActionItemToNodeDataNext, } from './actionItemToNodeData';
7
- export declare const startNode: {
8
- type: NodeType;
9
- id: string;
10
- position: {
11
- x: number;
12
- y: number;
13
- };
14
- data: {
15
- type: NodeType;
16
- name: string;
17
- nodeId: string;
18
- id: string;
19
- description: string;
20
- };
21
- };
22
- export declare const nodeTypes: Record<NodeType, import('react').ComponentType<any>>;
5
+ export { convertActionItemToNodeData } from './actionItemToNodeData';
23
6
  export declare const edgeTypes: {
24
7
  main: import('react').FC<import('../Edges/BaseEdge').CustomEdgeProps>;
25
8
  };
@@ -41,13 +24,12 @@ export declare const defaultEdgeOptions: {
41
24
  /** 工作流画布属性接口 */
42
25
  export interface WorkflowCanvasProps {
43
26
  workflowId?: string;
44
- readOnly?: boolean;
45
- preview?: boolean;
46
- previewId?: string;
47
- appFlowMode?: boolean;
48
- linkMode?: boolean;
27
+ /** 画布模式(默认 'edit') */
28
+ mode?: WorkflowCanvasMode;
49
29
  onSave?: (workflow: FlowDraftPayload) => void | Promise<void>;
50
30
  onInit?: (api: CanvasAPI) => void;
31
+ onOffline?: (workflowId: string) => Promise<boolean>;
32
+ scene?: string;
51
33
  }
52
34
  /** 常量定义 */
53
35
  export declare const DEBOUNCE_DELAY: {
@@ -56,5 +38,3 @@ export declare const DEBOUNCE_DELAY: {
56
38
  };
57
39
  /** 便签节点的action_id 快捷入口添加时直接写死 */
58
40
  export declare const STICKY_ACTION_ID = "944";
59
- /** DIP 模式下便签节点的 nodeKey */
60
- export declare const DIP_STICKY_NODE_KEY = "core.stickyNote";
@@ -4,7 +4,7 @@ import { NodeAddInfo } from '../../types/NodeAddContext';
4
4
  import { Edge, Node } from '@xyflow/react';
5
5
  type ReportConnectable = (messageId: string, details: Record<string, unknown>) => void;
6
6
  type ReportAmbiguousPorts = (details: Record<string, unknown>) => void;
7
- export interface TryConnectClassicNodePackageParams {
7
+ export interface TryConnectNodePackageParams {
8
8
  info: NodeAddInfo;
9
9
  newNode: Node<NodeFactoryData>;
10
10
  currentNodes: Node[];
@@ -28,7 +28,7 @@ export interface TryConnectClassicNodePackageParams {
28
28
  * 画布)走 Schema 端口;AI_LANGUAGE_MODEL / AI_MEMORY 等专项 protocol 仍走 legacy handle。
29
29
  * MCP Tool 下游新增也必须走这里,否则会写死 targetHandle=`input`,与 nodepackage 的 `main` 冲突。
30
30
  */
31
- export declare function canUseClassicConnectablePorts(options: {
31
+ export declare function canUseConnectablePorts(options: {
32
32
  connectableEnabled: boolean;
33
33
  protocol?: string | null;
34
34
  }): boolean;
@@ -38,5 +38,5 @@ export declare function canUseClassicConnectablePorts(options: {
38
38
  * 返回 true 表示该上下文已完整处理(成功连线或保留独立节点并给出提示);
39
39
  * 返回 false 时调用方继续 legacy 固定 handle 流程。
40
40
  */
41
- export declare function tryConnectClassicNodePackage({ info, newNode, currentNodes, currentEdges, canUseConnectablePorts, addEdges, removeEdges, handleEdgeAddNode, saveFlow, reportConnectableFallback, reportAmbiguousPorts, validateConnectionAgainstSnapshot, }: TryConnectClassicNodePackageParams): Promise<boolean>;
41
+ export declare function tryConnectNodePackage({ info, newNode, currentNodes, currentEdges, canUseConnectablePorts, addEdges, removeEdges, handleEdgeAddNode, saveFlow, reportConnectableFallback, reportAmbiguousPorts, validateConnectionAgainstSnapshot, }: TryConnectNodePackageParams): Promise<boolean>;
42
42
  export {};
@@ -1,7 +1,9 @@
1
1
  import { AppDispatch } from '../../store';
2
2
  import { CanvasAPI } from '../../types/engine';
3
+ import { FlowDraftPayload } from '../../types/flowVersion';
3
4
  import { ReactFlowInstance } from '@xyflow/react';
4
5
  interface UseCanvasApiParams {
6
+ workflowId?: string;
5
7
  dispatch: AppDispatch;
6
8
  reactFlow: ReactFlowInstance;
7
9
  setEdges: (edges: any) => void;
@@ -10,12 +12,12 @@ interface UseCanvasApiParams {
10
12
  getState: () => any;
11
13
  };
12
14
  setNodeConfigVisible: (nodeId: string | null) => void;
13
- saveFlowRef: React.RefObject<() => Promise<import('../../types/flowVersion').FlowDraftPayload | undefined>>;
15
+ saveFlowRef: React.RefObject<() => Promise<FlowDraftPayload | undefined>>;
14
16
  }
15
17
  /**
16
18
  * 构造对外 Canvas API
17
19
  */
18
- export declare function useCanvasApi({ dispatch, reactFlow, setEdges, setNodes, store, setNodeConfigVisible, saveFlowRef, }: UseCanvasApiParams): {
20
+ export declare function useCanvasApi({ workflowId, dispatch, reactFlow, setEdges, setNodes, store, setNodeConfigVisible, saveFlowRef, }: UseCanvasApiParams): {
19
21
  canvasApi: CanvasAPI;
20
22
  eventListenersRef: React.RefObject<Map<string, Set<Function>>>;
21
23
  };
@@ -1,21 +1,50 @@
1
+ import { LoadErrorInfo } from '../FullscreenLoading';
1
2
  import { WorkflowCanvasStrategy } from '../types';
2
3
  import { AppDispatch } from '../../store';
4
+ import { Edge, Node } from '@xyflow/react';
3
5
  interface UseDataLoadingParams {
4
6
  workflowId?: string;
5
7
  strategy: WorkflowCanvasStrategy;
6
- setNodes: (nodes: any) => void;
7
- setEdges: (edges: any) => void;
8
+ setNodes: (nodes: Node[]) => void;
9
+ setEdges: (edges: Edge[]) => void;
8
10
  fitView: (options?: any) => void;
9
11
  setLoading: (v: boolean) => void;
10
- setUnSave: (v: boolean) => void;
11
12
  dispatch: AppDispatch;
12
13
  setFlowOpStatusAction: (status: any) => void;
13
14
  refreshWorkFlowNum: number;
14
15
  }
16
+ /**
17
+ * 扫描 flowNodes 中带 action_key / action_ver 的 NodePackage 节点,
18
+ * 在 setNodes / setEdges 之前把所有 schema 预热到 nodePackageSchemaCache,
19
+ * 避免首次渲染时所有节点都进入 `loading` 状态、连线校验时拿不到 schema。
20
+ *
21
+ * - Schema 唯一来源:{@link getNodePackageSchema}(命中即同步返回 / 否则远端拉取,去重 + pending 复用);
22
+ * - 任意一次失败都吞掉,不阻塞画布渲染。
23
+ *
24
+ * action_ver 缺失或非法值时 fallback 到 version=1 并 console.warn。
25
+ *
26
+ * Export 仅供测试访问,业务侧请通过 useDataLoading 触发。
27
+ */
28
+ export declare function preloadClassicNodeSchemas(flowNodes: Node[]): Promise<void>;
29
+ /**
30
+ * 把 flowNodes 中所有 NodePackage 节点对应的 ReactFlow nodeType wrapper 注册到全局表。
31
+ *
32
+ * - 缺 action_key 的节点:ensureNodeTypeRegistered 内部 console.warn 后返回 null,
33
+ * 调用方继续走 NodeType 经典 wrapper(acceptable degradation)
34
+ * - schema 拉取失败:仅 console.error(后续 PR 处理),wrapper 仍按 base 注册
35
+ * - 已注册或成功注册的节点:触发 useNodeTypes 重渲染,ReactFlow 拿到最新 wrapper
36
+ *
37
+ * 内部走 Promise.all:上游 preloadClassicNodeSchemas 已对相同 (key, version) schema
38
+ * 拉取做去重,幂等检查由 listRegisteredDescriptorIds().includes 兜底。
39
+ */
40
+ export declare function ensureClassicNodeTypesRegistered(flowNodes: Node[]): Promise<void>;
15
41
  /**
16
42
  * 数据加载 Hook
17
43
  *
18
44
  * @param params 加载所需的依赖
19
45
  */
20
- export declare function useDataLoading(params: UseDataLoadingParams): void;
46
+ export declare function useDataLoading(params: UseDataLoadingParams): {
47
+ loadError: LoadErrorInfo;
48
+ retry: () => void;
49
+ };
21
50
  export {};
@@ -1,5 +1,4 @@
1
1
  import { WorkflowCanvasStrategy } from '../types';
2
- import { EngineMode } from '../../enums/workflow';
3
2
  import { NodeData as NodeFactoryData } from '../../Nodes/NodeFactory';
4
3
  import { ActionItem } from '../../Panels/ModernNodeSelectorPanel/types';
5
4
  import { EdgeConfig } from '../../types/engine';
@@ -17,6 +16,7 @@ interface UseNodeAddCallbackParams {
17
16
  addNodes: (nodes: Node<NodeFactoryData>[]) => void;
18
17
  addEdges: (edges: Edge[]) => void;
19
18
  removeEdges: (edgeIds: string[]) => void;
19
+ updateEdge: (id: string, edgeUpdate: Partial<Edge>) => void;
20
20
  setNodeAddCallback: (callback: (info: NodeAddInfo, nodeType: ActionItem) => void) => void;
21
21
  handleEdgeAddNode: (position: {
22
22
  x: number;
@@ -26,7 +26,6 @@ interface UseNodeAddCallbackParams {
26
26
  setNodeFitHumanView: (nodeId: string) => void;
27
27
  validateConnectionAgainstSnapshot: (edge: EdgeConfig, nodes: Node[], edges: Edge[]) => boolean;
28
28
  saveFlow: () => Promise<void>;
29
- engineMode: EngineMode;
30
29
  }
31
- export declare function useNodeAddCallback({ workflowId, strategy, store, addNodes, addEdges, removeEdges, setNodeAddCallback, handleEdgeAddNode, setNodeConfigVisible, setNodeFitHumanView, validateConnectionAgainstSnapshot, saveFlow, engineMode, }: UseNodeAddCallbackParams): void;
30
+ export declare function useNodeAddCallback({ workflowId, strategy, store, addNodes, addEdges, removeEdges, updateEdge, setNodeAddCallback, handleEdgeAddNode, setNodeConfigVisible, setNodeFitHumanView, validateConnectionAgainstSnapshot, saveFlow, }: UseNodeAddCallbackParams): void;
32
31
  export {};
@@ -7,8 +7,16 @@ import { usePanel } from '../../hooks/usePanel';
7
7
  import { useWorkflow } from '../../hooks/useWorkflow';
8
8
  import { useAppDispatch } from '../../store';
9
9
  import { CanvasAPI, EdgeConfig as EngineEdgeConfig } from '../../types/engine';
10
+ import { FlowDraftPayload } from '../../types/flowVersion';
10
11
  import { Connection, Edge, EdgeChange, Node, NodeChange, useEdgesState, useNodesState, useReactFlow, useStoreApi } from '@xyflow/react';
11
12
  import { default as React } from 'react';
13
+ /** 当前画布 trigger 节点信息;一个画布最多一个 trigger,记录它即可推导画布级状态。 */
14
+ export interface TriggerNodeInfo {
15
+ /** trigger 节点 id */
16
+ id: string;
17
+ /** 是否为 MCP Server 触发画布(trigger 节点的 action_key 指向 MCP Server) */
18
+ isMcpServer: boolean;
19
+ }
12
20
  export interface WorkflowCanvasStateResult {
13
21
  nodes: Node[];
14
22
  edges: Edge[];
@@ -16,6 +24,14 @@ export interface WorkflowCanvasStateResult {
16
24
  setEdges: ReturnType<typeof useEdgesState>[1];
17
25
  unSave: boolean;
18
26
  setUnSave: (v: boolean) => void;
27
+ /** 当前画布 trigger 节点信息(一个画布最多一个 trigger),为 null 表示没有 trigger。 */
28
+ triggerNode: TriggerNodeInfo | null;
29
+ /** 画布是否已存在 trigger 节点。 */
30
+ hasTriggerNode: boolean;
31
+ /** 画布是否为 MCP Server 触发画布(由 trigger 节点决定)。 */
32
+ isMcpServerCanvas: boolean;
33
+ /** 用户是否手动删除过 trigger 节点(手动删除后不再展示 NodePlaceholder)。 */
34
+ triggerDeleted: boolean;
19
35
  loading: boolean;
20
36
  setLoading: (v: boolean) => void;
21
37
  debugVisible: boolean;
@@ -41,7 +57,10 @@ export interface WorkflowCanvasStateResult {
41
57
  x: number;
42
58
  y: number;
43
59
  }, edge?: Edge) => void;
44
- handleOpenNodeSelector: (e: any) => void;
60
+ handleOpenNodeSelector: (e?: {
61
+ protocol?: string;
62
+ trigger?: boolean;
63
+ }) => void;
45
64
  handleAddNoteNode: () => void;
46
65
  handleTidy: () => void;
47
66
  onEdgeMouseEnter: ReturnType<typeof useEdgesInteraction>['onEdgeMouseEnter'];
@@ -56,7 +75,6 @@ export interface WorkflowCanvasStateResult {
56
75
  reactFlow: ReturnType<typeof useReactFlow>;
57
76
  dispatch: ReturnType<typeof useAppDispatch>;
58
77
  store: ReturnType<typeof useStoreApi>;
59
- storeEdges: Edge[];
60
78
  refreshWorkFlowNum: number;
61
79
  addNodes: ReturnType<typeof useFlowDataOperation>['addNodes'];
62
80
  addEdges: ReturnType<typeof useFlowDataOperation>['addEdges'];
@@ -69,12 +87,12 @@ export interface WorkflowCanvasStateResult {
69
87
  openNodeSelector: ReturnType<typeof usePanel>['openNodeSelector'];
70
88
  handleManualAdd: ReturnType<typeof usePanel>['handleManualAdd'];
71
89
  restNativeProps: Record<string, any>;
72
- saveFlowRef: React.RefObject<() => Promise<import('../../types/flowVersion').FlowDraftPayload | undefined>>;
90
+ saveFlowRef: React.RefObject<() => Promise<FlowDraftPayload | undefined>>;
73
91
  }
74
92
  /**
75
93
  * 工作流画布共享状态 Hook
76
94
  *
77
95
  * @param props 画布组件 props
78
- * @param stickyNodeKey 便签节点的 key(classic: '944' / next: 'core.stickyNote'
96
+ * @param stickyNodeKey 便签节点的 key(默认 '944')
79
97
  */
80
98
  export declare function useWorkflowCanvasState(props: WorkflowCanvasProps, stickyNodeKey: string): WorkflowCanvasStateResult;
@@ -3,19 +3,26 @@ import { SaveStatus } from '../enums/canvas';
3
3
  import { NodeData as NodeFactoryData } from '../Nodes/NodeFactory';
4
4
  import { ActionItem } from '../Panels/ModernNodeSelectorPanel/types';
5
5
  import { ExecutionControlState } from '../store/workflowSlice';
6
- import { CanvasAPI } from '../types/engine';
7
6
  import { FlowDraftPayload } from '../types/flowVersion';
8
7
  import { Edge, Node, NodeTypes } from '@xyflow/react';
9
8
  export interface CanvasHeaderProps {
9
+ /** 连接流加载中或加载失败:除返回外 header 操作均不可用 */
10
+ loading?: boolean;
10
11
  onSave?: () => Promise<FlowDraftPayload | undefined>;
11
12
  getFlowPayload?: () => FlowDraftPayload;
12
- readOnly?: boolean;
13
13
  unSave?: boolean;
14
- preview?: boolean;
15
- appFlowMode?: boolean;
16
14
  autoSaveStatus?: SaveStatus;
17
15
  lastSavedTime?: string;
18
- canvasApi?: CanvasAPI;
16
+ onOffline?: (workflowId: string) => Promise<boolean>;
17
+ }
18
+ /**
19
+ * 连接流加载失败:后端业务错误(result=false)透传的错误码与描述。
20
+ * message 兜底为 description || code,保证日志可读。
21
+ */
22
+ export declare class FlowLoadError extends Error {
23
+ code?: string;
24
+ description?: string;
25
+ constructor(code?: string, description?: string);
19
26
  }
20
27
  export interface CreateNodeParams {
21
28
  /** 工作流 ID */
@@ -82,7 +89,11 @@ export interface WorkflowCanvasStrategy {
82
89
  convertNodeData?: (actionItem: Partial<ActionItem> & Record<string, any>) => NodeFactoryData;
83
90
  /** 便签节点的 action ID / nodeKey */
84
91
  stickyNodeKey: string;
85
- /** ReactFlow nodeTypes 注册表(可选,不提供则回退到 NodeFactory.getNodeTypes()) */
92
+ /**
93
+ * 可选 ReactFlow nodeTypes 初始 seed:仅在 canvas 首次挂载时与内置 map 合并,
94
+ * 不会覆盖运行期通过 {@link nodeTypeRegistry} 动态注册的 descriptorId。
95
+ * 不传则使用 {@link NodeFactory.getNodeTypes} 默认合并结果。
96
+ */
86
97
  nodeTypes?: NodeTypes;
87
98
  /** 头部组件 */
88
99
  HeaderComponent: React.ComponentType<CanvasHeaderProps>;
@@ -95,4 +106,5 @@ export interface WorkflowCanvasStrategy {
95
106
  }
96
107
  export interface WorkflowCanvasBaseProps extends WorkflowCanvasProps {
97
108
  strategy: WorkflowCanvasStrategy;
109
+ nodeTypes: NodeTypes;
98
110
  }
@@ -22,6 +22,8 @@ export interface CustomEdgeProps extends EdgeProps {
22
22
  onDelete?: (id: string) => void;
23
23
  onMouseEnter?: (id: string) => void;
24
24
  onMouseLeave?: (id: string) => void;
25
+ type?: string;
26
+ renderType?: string;
25
27
  };
26
28
  type: any;
27
29
  target: string;
@@ -1,6 +1,6 @@
1
- import { Edge } from '@xyflow/react';
2
- import { EdgeData, EdgeDefinition } from '../types/Edge';
3
1
  import { EdgeType } from '../enums/edge';
2
+ import { EdgeData } from '../types/Edge';
3
+ import { Edge } from '@xyflow/react';
4
4
  interface EdgeCreationOptions {
5
5
  sourceHandle?: string;
6
6
  targetHandle?: string;
@@ -24,7 +24,7 @@ declare class EdgeFactory {
24
24
  * 根据连线类型获取对应的连线组件
25
25
  * @param type 连线类型
26
26
  */
27
- static getEdgeComponent(type: EdgeType): any;
27
+ static getEdgeComponent(type: EdgeType): import('react').FC<import('./BaseEdge').CustomEdgeProps>;
28
28
  /**
29
29
  * 创建一个连线实例
30
30
  * @param type 连线类型
@@ -34,10 +34,5 @@ declare class EdgeFactory {
34
34
  * @param options 可选参数,包括sourceHandle, targetHandle, data和回调函数
35
35
  */
36
36
  static createEdge(type: EdgeType | string, id: string, source: string, target: string, options?: EdgeCreationOptions): Edge;
37
- /**
38
- * 渲染连线
39
- * @param props 连线属性
40
- */
41
- static renderEdge(props: EdgeDefinition): import("react/jsx-runtime").JSX.Element;
42
37
  }
43
38
  export default EdgeFactory;
@@ -0,0 +1,73 @@
1
+ import { Position } from '@xyflow/react';
2
+ /**
3
+ * 是否为 vertical layout 边(source handle 在 Top/Bottom):
4
+ * - AI 子节点 → Agent(Top → Bottom)
5
+ * - MCP 系列(Bottom → Top)
6
+ * - 任意画在 Top/Bottom 的 source handle
7
+ *
8
+ * 边布局方向由 source 驱动:target handle 在 targetNode 上的位置跟随 source 配对。
9
+ */
10
+ export declare function isVerticalEdgeBySourcePosition(sourcePosition: Position | undefined): boolean;
11
+ /**
12
+ * 选择当前边应使用的样式。
13
+ *
14
+ * 优先级:
15
+ * 1. vertical 边(Top/Bottom)→ `edgeStyles.vertical`(虚线)
16
+ * 2. loop 边 → `edgeStyles.loop`
17
+ * 3. hover → `edgeStyles.hovered`
18
+ * 4. 默认 → `edgeStyles.default`
19
+ */
20
+ export declare function selectEdgeStyle(opts: {
21
+ isVerticalEdge: boolean;
22
+ isLoopEdge: boolean;
23
+ isHovered: boolean;
24
+ }): {
25
+ stroke: string;
26
+ fill: string;
27
+ };
28
+ /**
29
+ * 当前边是否需要走贝塞尔曲线(而非平滑阶梯线)。
30
+ *
31
+ * 走贝塞尔仅限以下两种场景:
32
+ * - 上下布局:source handle 在 bottom、target handle 在 top,且 source 节点在 target 节点上方
33
+ * - 左右布局:source handle 在 right、target handle 在 left,且 source 节点在 target 节点左侧(允许紧邻)
34
+ *
35
+ * 其余情况(top→bottom、同向 handle、source 在 target 下方 / 右侧、两节点区间相交等)
36
+ * 一律走平滑阶梯线。
37
+ */
38
+ export declare function shouldUseBezierPath(opts: {
39
+ sourcePosition: Position | undefined;
40
+ targetPosition: Position | undefined;
41
+ /** source 节点是否在 target 节点上方(上下布局走贝塞尔的前置条件) */
42
+ sourceAboveTarget: boolean;
43
+ /** source 节点是否在 target 节点左侧(左右布局走贝塞尔的前置条件,允许紧邻) */
44
+ sourceLeftOfTarget: boolean;
45
+ }): boolean;
46
+ export interface SelfLoopPathParams {
47
+ sourceX: number;
48
+ sourceY: number;
49
+ sourcePosition: Position | undefined;
50
+ targetX: number;
51
+ targetY: number;
52
+ targetPosition: Position | undefined;
53
+ /** 圆角半径(透传 EDGE_BORDER_RADIUS) */
54
+ borderRadius: number;
55
+ }
56
+ /**
57
+ * 生成自环边的单条连续正交圆角路径(非贝塞尔)。
58
+ *
59
+ * 覆盖全部 16 种 (sourcePosition, targetPosition) 组合,按对称性分 5 组:
60
+ * - 对边水平(R→L / L→R):回环盒在节点下方
61
+ * - 对边垂直(T→B / B→T):回环盒在节点右侧
62
+ * - 同向水平(R→R / L→L):先向朝向伸出 L,再做四角长方形回环(回环盒在外侧)
63
+ * - 同向垂直(T→T / B→B):同上,回环盒在节点右侧
64
+ * - 相邻(R→T 等 8 种):角部回环
65
+ *
66
+ * 每条折线的最后一段从 handle 外侧指向 target,保证 markerEnd 箭头朝内。
67
+ * position 缺省时默认 Right / Left(LOOP 自环的唯一真实场景)。
68
+ */
69
+ export declare function getSelfLoopPath(params: SelfLoopPathParams): {
70
+ edgePath: string;
71
+ labelX: number;
72
+ labelY: number;
73
+ };
@@ -23,6 +23,7 @@ interface CustomHandleProps {
23
23
  protocol?: string;
24
24
  /** NodePackage 真实端口 Schema;仅用于保留端口元数据,不改变 input 只接收连线的语义。 */
25
25
  portSchema?: DipPortSchema;
26
+ index?: number[];
26
27
  }
27
28
  /**
28
29
  * @description 自定义连接桩组件,统一输出 11×11px 菱形桩点并同步节点状态色。
@@ -19,6 +19,25 @@ export declare function getHandleConnectionPermissions(type: 'source' | 'target'
19
19
  isConnectableStart: boolean;
20
20
  isConnectableEnd: boolean;
21
21
  };
22
+ interface SelfConnectionDragOptions {
23
+ connection: {
24
+ inProgress: boolean;
25
+ fromHandle: {
26
+ id?: string | null;
27
+ nodeId: string;
28
+ type: string;
29
+ } | null;
30
+ fromNode: Node | null;
31
+ };
32
+ nodeId: string;
33
+ handleId: string;
34
+ }
35
+ /**
36
+ * 判断进行中的拖线是否为"本节点自身输出桩发起、且 (sourceHandle -> handleId)
37
+ * 命中 auto_connect 声明"的自连。命中时满载 target 桩临时解除禁用
38
+ * (自连不占 maxConnections 名额),拖线结束(成功/取消)后自动恢复。
39
+ */
40
+ export declare function isAllowedSelfConnectionInProgress(options: SelfConnectionDragOptions): boolean;
22
41
  interface BuildHandleNodeAddInfoOptions {
23
42
  type: 'source' | 'target';
24
43
  nodeId: string;