@rxflow/base 0.0.4-alpha.3 → 0.0.4-alpha.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/cjs/Flow.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"Flow.d.ts","sourceRoot":"","sources":["Flow.tsx"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,8BAA8B,CAAC;AACtC,OAAO,EAAC,cAAc,EAAC,MAAM,SAAS,CAAC;AAQvC,OAAO,EAGL,IAAI,EAGJ,IAAI,EAOL,MAAM,eAAe,CAAC;AAavB,OAAO,cAAc,CAAC;AA2HtB,wBAAgB,IAAI,CAAC,QAAQ,SAAS,IAAI,GAAG,IAAI,EAAE,QAAQ,SAAS,IAAI,GAAG,IAAI,EAAE,KAAK,EAAE,cAAc,CAAC,QAAQ,EAAE,QAAQ,CAAC,2CA0NzH"}
1
+ {"version":3,"file":"Flow.d.ts","sourceRoot":"","sources":["Flow.tsx"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,8BAA8B,CAAC;AACtC,OAAO,EAAC,cAAc,EAAC,MAAM,SAAS,CAAC;AAQvC,OAAO,EAGL,IAAI,EAGJ,IAAI,EAOL,MAAM,eAAe,CAAC;AAYvB,OAAO,cAAc,CAAC;AAMtB,wBAAgB,IAAI,CAAC,QAAQ,SAAS,IAAI,GAAG,IAAI,EAAE,QAAQ,SAAS,IAAI,GAAG,IAAI,EAAE,KAAK,EAAE,cAAc,CAAC,QAAQ,EAAE,QAAQ,CAAC,2CAwZzH"}
package/cjs/Flow.js CHANGED
@@ -9,8 +9,7 @@ var _components = require("./components");
9
9
  var _hooks = require("./hooks");
10
10
  var _react = require("@xyflow/react");
11
11
  var _ahooks = require("ahooks");
12
- var _lodash = require("lodash");
13
- var _react2 = _interopRequireWildcard(require("react"));
12
+ var _react2 = require("react");
14
13
  var _Controls = _interopRequireDefault(require("./components/Controls"));
15
14
  var _DebugInfo = require("./components/DebugInfo");
16
15
  var _manhattan = require("./edges/manhattan");
@@ -24,8 +23,6 @@ require("./index.less");
24
23
  var _base = require("./utils/layouts/base");
25
24
  var _jsxRuntime = require("react/jsx-runtime");
26
25
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
27
- function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
28
- function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && Object.prototype.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
29
26
  /**
30
27
  * @author: yanxianliang
31
28
  * @date: 2025-07-27 16:33
@@ -35,20 +32,6 @@ function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e;
35
32
  * Copyright (c) 2025 by yanxianliang, All Rights Reserved.
36
33
  */
37
34
 
38
- /**
39
- * ReactFlow 原生支持的属性列表
40
- * 这些属性会透传给 ReactFlow
41
- */const REACT_FLOW_PROPS = [
42
- // 核心数据
43
- 'defaultNodes', 'defaultEdges', 'defaultEdgeOptions',
44
- // 视图控制
45
- 'fitView', 'fitViewOptions', 'minZoom', 'maxZoom', 'defaultViewport', 'snapToGrid', 'snapGrid', 'onlyRenderVisibleElements',
46
- // 交互控制
47
- 'nodesDraggable', 'nodesConnectable', 'nodesFocusable', 'edgesFocusable', 'elementsSelectable', 'selectNodesOnDrag', 'panOnDrag', 'panOnScroll', 'panOnScrollSpeed', 'panOnScrollMode', 'zoomOnScroll', 'zoomOnPinch', 'zoomOnDoubleClick', 'preventScrolling', 'connectionMode', 'connectionLineType', 'connectionLineStyle', 'connectionLineComponent', 'connectionLineContainerStyle', 'connectionRadius', 'isValidConnection', 'nodeDragThreshold', 'autoPanOnConnect', 'autoPanOnNodeDrag', 'autoPanSpeed', 'selectionOnDrag', 'selectionMode', 'selectionKeyCode', 'multiSelectionKeyCode', 'zoomActivationKeyCode', 'panActivationKeyCode', 'deleteKeyCode', 'nodeExtent', 'translateExtent', 'elevateNodesOnSelect', 'elevateEdgesOnSelect', 'disableKeyboardA11y', 'noDragClassName', 'noWheelClassName', 'noPanClassName',
48
- // 事件回调
49
- 'onNodeClick', 'onNodeDoubleClick', 'onNodeMouseEnter', 'onNodeMouseMove', 'onNodeMouseLeave', 'onNodeContextMenu', 'onNodeDragStart', 'onNodeDrag', 'onNodeDragStop', 'onNodesDelete', 'onEdgeClick', 'onEdgeDoubleClick', 'onEdgeMouseEnter', 'onEdgeMouseMove', 'onEdgeMouseLeave', 'onEdgeContextMenu', 'onEdgeUpdate', 'onEdgeUpdateStart', 'onEdgeUpdateEnd', 'onEdgesDelete', 'onConnect', 'onConnectStart', 'onConnectEnd', 'onClickConnectStart', 'onClickConnectEnd', 'onDrop', 'onMove', 'onMoveStart', 'onMoveEnd', 'onSelectionChange', 'onSelectionDragStart', 'onSelectionDrag', 'onSelectionDragStop', 'onSelectionContextMenu', 'onSelectionStart', 'onSelectionEnd', 'onPaneClick', 'onPaneContextMenu', 'onPaneScroll', 'onPaneMouseEnter', 'onPaneMouseMove', 'onPaneMouseLeave', 'onInit', 'onError', 'onDelete', 'onBeforeDelete',
50
- // 样式
51
- 'style', 'className', 'id', 'colorMode'];
52
35
  const proOptions = {
53
36
  hideAttribution: true
54
37
  }; // 默认隐藏水印
@@ -70,12 +53,7 @@ function Flow(props) {
70
53
  showInteractive,
71
54
  showFitView,
72
55
  showZoom,
73
- onlyRenderVisibleElements = true,
74
- // 默认开启虚拟渲染
75
56
  rootStyle: _rootStyle,
76
- fitViewOptions,
77
- nodes,
78
- edges,
79
57
  layout = _base.baseLayout,
80
58
  autoCenter = false,
81
59
  forceLayout = !!props.layout,
@@ -90,11 +68,78 @@ function Flow(props) {
90
68
  onInteractiveChange,
91
69
  customControls,
92
70
  nodeTypes: _nodeTypes,
93
- onEdgesChange,
71
+ edgeTypes: userEdgeTypes,
72
+ nodes,
73
+ edges,
74
+ onNodesChange: userOnNodesChange,
75
+ onEdgesChange: userOnEdgesChange,
94
76
  children,
95
- forceFitView
77
+ forceFitView,
78
+ // 常用 ReactFlow 属性(外层定义)
79
+ fitView: userFitView = true,
80
+ fitViewOptions: userFitViewOptions,
81
+ minZoom: userMinZoom,
82
+ maxZoom: userMaxZoom,
83
+ defaultViewport: userDefaultViewport,
84
+ onInit: userOnInit,
85
+ onNodeClick: userOnNodeClick,
86
+ onNodeDoubleClick: userOnNodeDoubleClick,
87
+ onNodeContextMenu: userOnNodeContextMenu,
88
+ onNodeMouseEnter: userOnNodeMouseEnter,
89
+ onNodeMouseLeave: userOnNodeMouseLeave,
90
+ onNodeMouseMove: userOnNodeMouseMove,
91
+ onEdgeClick: userOnEdgeClick,
92
+ onEdgeDoubleClick: userOnEdgeDoubleClick,
93
+ onEdgeContextMenu: userOnEdgeContextMenu,
94
+ onEdgeMouseEnter: userOnEdgeMouseEnter,
95
+ onEdgeMouseLeave: userOnEdgeMouseLeave,
96
+ onEdgeMouseMove: userOnEdgeMouseMove,
97
+ onPaneClick: userOnPaneClick,
98
+ onPaneContextMenu: userOnPaneContextMenu,
99
+ onPaneScroll: userOnPaneScroll,
100
+ onPaneMouseEnter: userOnPaneMouseEnter,
101
+ onPaneMouseLeave: userOnPaneMouseLeave,
102
+ onPaneMouseMove: userOnPaneMouseMove,
103
+ onSelectionChange: userOnSelectionChange,
104
+ onSelectionContextMenu: userOnSelectionContextMenu,
105
+ // 画布鼠标事件(外层定义)
106
+ onMouseEnter: userOnMouseEnter,
107
+ onMouseLeave: userOnMouseLeave,
108
+ onMouseMove: userOnMouseMove,
109
+ onMouseDown: userOnMouseDown,
110
+ onMouseUp: userOnMouseUp,
111
+ // 移动和缩放事件(外层定义)
112
+ onMove: userOnMove,
113
+ onMoveStart: userOnMoveStart,
114
+ onMoveEnd: userOnMoveEnd,
115
+ // 节点交互相关(外层定义)
116
+ nodesDraggable: userNodesDraggable,
117
+ nodesConnectable: userNodesConnectable,
118
+ elementsSelectable: userElementsSelectable,
119
+ selectNodesOnDrag: userSelectNodesOnDrag,
120
+ nodeOrigin: userNodeOrigin,
121
+ // 画布交互相关(外层定义)
122
+ panOnDrag: userPanOnDrag,
123
+ panOnScroll: userPanOnScroll,
124
+ zoomOnScroll: userZoomOnScroll,
125
+ selectionOnDrag: userSelectionOnDrag,
126
+ selectionMode: userSelectionMode,
127
+ deleteKeyCode: userDeleteKeyCode,
128
+ // 连接相关(外层定义)
129
+ isValidConnection: userIsValidConnection,
130
+ onConnect: userOnConnect,
131
+ onBeforeDelete: userOnBeforeDelete,
132
+ // 拖拽相关事件(外层定义)
133
+ onDrop: userOnDrop,
134
+ onDragOver: userOnDragOver,
135
+ onNodeDrag: userOnNodeDrag,
136
+ onNodeDragStart: userOnNodeDragStart,
137
+ onNodeDragStop: userOnNodeDragStop,
138
+ // 性能相关配置(外层定义)
139
+ onlyRenderVisibleElements = true,
140
+ // 扩展属性
141
+ flowProps: userFlowProps = {}
96
142
  } = props;
97
- console.log('render', '------');
98
143
  (0, _useListenRender.useListenRender)(); // 性能监听 hook
99
144
 
100
145
  const [minimapVisible, setMinimapVisible] = (0, _react2.useState)(!!(showMiniMap && !showControls)); // 不显示控制器是默认按照字段控制 miniMap显示状态
@@ -128,7 +173,6 @@ function Flow(props) {
128
173
  originEdges: edges || [],
129
174
  theme,
130
175
  onlyRenderVisibleElements,
131
- // 不支持修改该参数
132
176
  store,
133
177
  state: getState(),
134
178
  flowProps: props
@@ -137,29 +181,85 @@ function Flow(props) {
137
181
  const edgeTypes = (0, _react2.useMemo)(() => {
138
182
  return {
139
183
  manhattan: _manhattan.ManhattanEdge,
140
- ...(props.edgeTypes || {})
184
+ ...(userEdgeTypes || {})
141
185
  };
142
- }, [props.edgeTypes]);
143
- const flowProps = (0, _react2.useMemo)(() => {
144
- // 使用 pick 选择需要透传的属性,而不是 omit 排除
145
- const passthroughProps = (0, _lodash.pick)(props, REACT_FLOW_PROPS);
186
+ }, [userEdgeTypes]);
187
+ const reactFlowProps = (0, _react2.useMemo)(() => {
188
+ // 构建传递给 ReactFlow 的属性
146
189
  const options = {
147
190
  // 默认配置
148
- selectNodesOnDrag: false,
149
191
  preventScrolling: true,
150
- panOnScroll: false,
151
- zoomOnScroll: true,
152
- nodesDraggable: false,
153
192
  proOptions: proOptions,
193
+ // 透传用户传入的 ReactFlow 扩展属性(flowProps,优先级最低)
194
+ ...userFlowProps,
195
+ // 外层定义的属性(优先级高于 flowProps)
196
+ // 视图和缩放相关
197
+ fitView: userFitView ?? true,
198
+ minZoom: userMinZoom,
199
+ maxZoom: userMaxZoom,
200
+ defaultViewport: userDefaultViewport,
201
+ onlyRenderVisibleElements,
202
+ // 节点交互相关
203
+ nodesDraggable: userNodesDraggable ?? false,
204
+ nodesConnectable: userNodesConnectable,
205
+ elementsSelectable: userElementsSelectable,
206
+ selectNodesOnDrag: userSelectNodesOnDrag ?? false,
207
+ nodeOrigin: userNodeOrigin,
208
+ // 画布交互相关
209
+ panOnDrag: userPanOnDrag,
210
+ panOnScroll: userPanOnScroll ?? false,
211
+ zoomOnScroll: userZoomOnScroll ?? true,
212
+ selectionOnDrag: userSelectionOnDrag,
213
+ selectionMode: userSelectionMode,
214
+ deleteKeyCode: userDeleteKeyCode,
215
+ // 连接相关
216
+ isValidConnection: userIsValidConnection,
217
+ onConnect: userOnConnect,
218
+ onBeforeDelete: userOnBeforeDelete,
219
+ // 事件回调
220
+ onInit: userOnInit,
221
+ onNodeClick: userOnNodeClick,
222
+ onNodeDoubleClick: userOnNodeDoubleClick,
223
+ onNodeContextMenu: userOnNodeContextMenu,
224
+ onNodeMouseEnter: userOnNodeMouseEnter,
225
+ onNodeMouseLeave: userOnNodeMouseLeave,
226
+ onNodeMouseMove: userOnNodeMouseMove,
227
+ onEdgeClick: userOnEdgeClick,
228
+ onEdgeDoubleClick: userOnEdgeDoubleClick,
229
+ onEdgeContextMenu: userOnEdgeContextMenu,
230
+ onEdgeMouseEnter: userOnEdgeMouseEnter,
231
+ onEdgeMouseLeave: userOnEdgeMouseLeave,
232
+ onEdgeMouseMove: userOnEdgeMouseMove,
233
+ onPaneClick: userOnPaneClick,
234
+ onPaneContextMenu: userOnPaneContextMenu,
235
+ onPaneScroll: userOnPaneScroll,
236
+ onPaneMouseEnter: userOnPaneMouseEnter,
237
+ onPaneMouseLeave: userOnPaneMouseLeave,
238
+ onPaneMouseMove: userOnPaneMouseMove,
239
+ onSelectionChange: userOnSelectionChange,
240
+ onSelectionContextMenu: userOnSelectionContextMenu,
241
+ // 画布鼠标事件
242
+ onMouseEnter: userOnMouseEnter,
243
+ onMouseLeave: userOnMouseLeave,
244
+ onMouseMove: userOnMouseMove,
245
+ onMouseDown: userOnMouseDown,
246
+ onMouseUp: userOnMouseUp,
247
+ // 移动和缩放事件
248
+ onMove: userOnMove,
249
+ onMoveStart: userOnMoveStart,
250
+ onMoveEnd: userOnMoveEnd,
251
+ // 拖拽相关事件
252
+ onDrop: userOnDrop,
253
+ onDragOver: userOnDragOver,
254
+ onNodeDrag: userOnNodeDrag,
255
+ // fitViewOptions 需要特殊合并处理
154
256
  fitViewOptions: {
155
257
  nodes: _nodes?.length && autoCenter ? [_nodes[0]] : undefined,
156
- ...props.fitViewOptions
157
- },
158
- fitView: true,
159
- onlyRenderVisibleElements,
160
- // 透传 ReactFlow 原生属性
161
- ...passthroughProps
258
+ ...userFitViewOptions
259
+ }
162
260
  };
261
+
262
+ // scroller 插件特殊处理
163
263
  if (plugins?.scroller) {
164
264
  options.zoomOnScroll = false;
165
265
  options.panOnScroll = true;
@@ -167,39 +267,57 @@ function Flow(props) {
167
267
  options.selectionOnDrag = options.selectionOnDrag ?? true;
168
268
  options.selectionMode = options.selectionMode ?? _react.SelectionMode.Partial;
169
269
  }
270
+
271
+ // 只读模式特殊处理
170
272
  if (readOnly) {
171
273
  options.nodesDraggable = false;
172
274
  options.nodesConnectable = false;
173
275
  options.elementsSelectable = false;
174
276
  }
175
277
  return options;
176
- }, [props, _nodes, readOnly, onlyRenderVisibleElements, autoCenter, plugins?.scroller]);
278
+ }, [userFlowProps, _nodes, readOnly, onlyRenderVisibleElements, autoCenter, plugins?.scroller,
279
+ // 视图和缩放相关
280
+ userFitView, userFitViewOptions, userMinZoom, userMaxZoom, userDefaultViewport,
281
+ // 节点交互相关
282
+ userNodesDraggable, userNodesConnectable, userElementsSelectable, userSelectNodesOnDrag, userNodeOrigin,
283
+ // 画布交互相关
284
+ userPanOnDrag, userPanOnScroll, userZoomOnScroll, userSelectionOnDrag, userSelectionMode, userDeleteKeyCode,
285
+ // 连接相关
286
+ userIsValidConnection, userOnConnect, userOnBeforeDelete,
287
+ // 事件回调
288
+ userOnInit, userOnNodeClick, userOnNodeDoubleClick, userOnNodeContextMenu, userOnNodeMouseEnter, userOnNodeMouseLeave, userOnNodeMouseMove, userOnEdgeClick, userOnEdgeDoubleClick, userOnEdgeContextMenu, userOnEdgeMouseEnter, userOnEdgeMouseLeave, userOnEdgeMouseMove, userOnPaneClick, userOnPaneContextMenu, userOnPaneScroll, userOnPaneMouseEnter, userOnPaneMouseLeave, userOnPaneMouseMove, userOnSelectionChange, userOnSelectionContextMenu,
289
+ // 画布鼠标事件
290
+ userOnMouseEnter, userOnMouseLeave, userOnMouseMove, userOnMouseDown, userOnMouseUp,
291
+ // 移动和缩放事件
292
+ userOnMove, userOnMoveStart, userOnMoveEnd,
293
+ // 拖拽相关事件
294
+ userOnDrop, userOnDragOver, userOnNodeDrag]);
177
295
  const onNodesChange = (0, _ahooks.useMemoizedFn)(changes => {
178
296
  if (forceLayout && (0, _hasDimensionsChange.hasDimensionsChange)(changes)) {
179
297
  // 强制布局
180
298
  triggerLayout();
181
299
  }
182
- props.onNodesChange?.(changes);
300
+ userOnNodesChange?.(changes);
183
301
  });
184
302
  const onNodeDragStart = (0, _ahooks.useMemoizedFn)((event, node, nodes) => {
185
303
  setNodeDragging(true);
186
- flowProps.onNodeDragStart?.(event, node, nodes);
304
+ userOnNodeDragStart?.(event, node, nodes);
187
305
  });
188
306
  const onNodeDragStop = (0, _ahooks.useMemoizedFn)((event, node, nodes) => {
189
307
  setNodeDragging(false);
190
- flowProps.onNodeDragStop?.(event, node, nodes);
308
+ userOnNodeDragStop?.(event, node, nodes);
191
309
  });
192
310
  const getEdgesChangeHandlers = (0, _useGetEdgesChangeHandlers.useGetEdgesChangeHandlers)();
193
- const _onEdgesChange = (0, _ahooks.useMemoizedFn)(changes => {
194
- onEdgesChange?.(changes);
311
+ const onEdgesChange = (0, _ahooks.useMemoizedFn)(changes => {
312
+ userOnEdgesChange?.(changes);
195
313
  // 触发注册事件
196
- getEdgesChangeHandlers()?.forEach(onEdgesChange => {
197
- onEdgesChange?.(changes);
314
+ getEdgesChangeHandlers()?.forEach(handler => {
315
+ handler?.(changes);
198
316
  });
199
317
  });
200
318
  (0, _react2.useEffect)(() => {
201
319
  if (forceFitView) {
202
- instance.fitView(fitViewOptions);
320
+ instance.fitView(reactFlowProps.fitViewOptions);
203
321
  }
204
322
  }, [nodes]);
205
323
  return /*#__PURE__*/(0, _jsxRuntime.jsxs)("div", {
@@ -211,14 +329,14 @@ function Flow(props) {
211
329
  marks: markers
212
330
  }) : null, /*#__PURE__*/(0, _jsxRuntime.jsxs)(_react.ReactFlow, {
213
331
  nodeTypes: nodeTypes,
214
- ...flowProps,
332
+ ...reactFlowProps,
215
333
  edgeTypes: edgeTypes,
216
334
  nodes: _nodes,
217
335
  edges: _edges,
218
336
  onNodesChange: onNodesChange,
219
337
  onNodeDragStart: onNodeDragStart,
220
338
  onNodeDragStop: onNodeDragStop,
221
- onEdgesChange: _onEdgesChange,
339
+ onEdgesChange: onEdgesChange,
222
340
  children: [plugins?.scroller ? /*#__PURE__*/(0, _jsxRuntime.jsx)(_scrollbar.Scrollbar, {
223
341
  ...plugins.scroller,
224
342
  width: width,
@@ -234,7 +352,7 @@ function Flow(props) {
234
352
  }), showControls && /*#__PURE__*/(0, _jsxRuntime.jsx)(_Controls.default, {
235
353
  showFullscreen: showFullscreen,
236
354
  containerRef: containerRef,
237
- fitViewOptions: fitViewOptions,
355
+ fitViewOptions: reactFlowProps.fitViewOptions,
238
356
  position: controlsPosition,
239
357
  showInteractive: showInteractive,
240
358
  showMiniMap: showMiniMap,
@@ -92,7 +92,7 @@ const PropsStore = ({
92
92
  inputProps,
93
93
  flowProps,
94
94
  // 其他状态
95
- id: flowProps.id || defaultId,
95
+ id: flowProps.flowProps?.id || defaultId,
96
96
  nodeTypeMap
97
97
  });
98
98
  }, [inputDataProps, flowDataProps]);
package/cjs/types.d.ts CHANGED
@@ -5,7 +5,7 @@
5
5
  *
6
6
  * Copyright (c) 2025 by yanxianliang, All Rights Reserved.
7
7
  */
8
- import { Edge, MarkerType, Node, PanelPosition, ReactFlowState, NodeProps, OnEdgesChange, ReactFlowProps } from "@xyflow/react";
8
+ import { Edge, MarkerType, Node, PanelPosition, ReactFlowState, NodeProps, OnEdgesChange, ReactFlowProps, EdgeTypes } from "@xyflow/react";
9
9
  import { NodeHandleBounds } from "@xyflow/system";
10
10
  import React, { ComponentType } from "react";
11
11
  import { MarkDefinition } from "./components/MarkerDefinitions/types";
@@ -48,6 +48,16 @@ export interface BaseThemeConfig {
48
48
  */
49
49
  showCount?: boolean;
50
50
  }
51
+ /**
52
+ * 从 ReactFlowProps 中排除的属性(在外层已定义或内部固定处理)
53
+ */
54
+ type ExcludedFlowProps = 'nodeTypes' | 'edgeTypes' | 'nodes' | 'edges' | 'width' | 'height' | 'onNodesChange' | 'onEdgesChange' | 'proOptions' | 'children' | 'fitView' | 'fitViewOptions' | 'minZoom' | 'maxZoom' | 'defaultViewport' | 'nodeOrigin' | 'nodesDraggable' | 'nodesConnectable' | 'elementsSelectable' | 'selectNodesOnDrag' | 'panOnDrag' | 'panOnScroll' | 'zoomOnScroll' | 'selectionOnDrag' | 'selectionMode' | 'deleteKeyCode' | 'isValidConnection' | 'onConnect' | 'onBeforeDelete' | 'onInit' | 'onNodeClick' | 'onNodeDoubleClick' | 'onNodeContextMenu' | 'onNodeMouseEnter' | 'onNodeMouseLeave' | 'onNodeMouseMove' | 'onEdgeClick' | 'onEdgeDoubleClick' | 'onEdgeContextMenu' | 'onEdgeMouseEnter' | 'onEdgeMouseLeave' | 'onEdgeMouseMove' | 'onPaneClick' | 'onPaneContextMenu' | 'onPaneScroll' | 'onPaneMouseEnter' | 'onPaneMouseLeave' | 'onPaneMouseMove' | 'onSelectionChange' | 'onSelectionContextMenu' | 'onMouseEnter' | 'onMouseLeave' | 'onMouseMove' | 'onMouseDown' | 'onMouseUp' | 'onDrop' | 'onDragOver' | 'onNodeDrag' | 'onNodeDragStart' | 'onNodeDragStop' | 'onMove' | 'onMoveStart' | 'onMoveEnd' | 'onlyRenderVisibleElements';
55
+ /**
56
+ * ReactFlow 原生属性类型(扩展属性)
57
+ * 排除了已在 IBaseFlowProps 外层定义的属性
58
+ * 用于传递不常用的 ReactFlow 配置
59
+ */
60
+ export type FlowProps<NodeType extends Node = Node, EdgeType extends Edge = Edge> = Omit<ReactFlowProps<NodeType, EdgeType>, ExcludedFlowProps>;
51
61
  export type LayoutConfig<NodeType extends Node = Node, EdgeType extends Edge = Edge> = {
52
62
  nodeTypes: Record<string, NodeTypeComponent>;
53
63
  originNodes: NodeType[];
@@ -86,7 +96,11 @@ export interface INodeDefinition<DataType extends Record<string, unknown> = Reco
86
96
  };
87
97
  [key: string]: any;
88
98
  }
89
- export interface IBaseFlowProps<NodeType extends Node = Node, EdgeType extends Edge = Edge> extends Omit<ReactFlowProps<NodeType, EdgeType>, 'nodeTypes' | 'width' | 'height'> {
99
+ /**
100
+ * BaseFlow 组件自身的属性
101
+ * 这些属性由 BaseFlow 组件处理,不会透传给 ReactFlow
102
+ */
103
+ export interface IBaseFlowProps<NodeType extends Node = Node, EdgeType extends Edge = Edge> {
90
104
  /**
91
105
  * @description graph 宽度
92
106
  */
@@ -103,7 +117,256 @@ export interface IBaseFlowProps<NodeType extends Node = Node, EdgeType extends E
103
117
  * @description 主题配置
104
118
  */
105
119
  theme?: BaseThemeConfig;
120
+ /**
121
+ * @description 节点数据
122
+ */
123
+ nodes?: NodeType[];
124
+ /**
125
+ * @description 边数据
126
+ */
127
+ edges?: EdgeType[];
128
+ /**
129
+ * @description 节点类型定义,使用数组方式定义,可以用在 sider 上
130
+ * 注意:这是组件库扩展的属性,会转换为 ReactFlow 的 nodeTypes
131
+ */
106
132
  nodeTypes?: Array<INodeDefinition<NodeType['data']>>;
133
+ /**
134
+ * @description 边类型定义
135
+ */
136
+ edgeTypes?: EdgeTypes;
137
+ /**
138
+ * @description 节点变化回调
139
+ */
140
+ onNodesChange?: ReactFlowProps<NodeType, EdgeType>['onNodesChange'];
141
+ /**
142
+ * @description 边变化回调
143
+ */
144
+ onEdgesChange?: ReactFlowProps<NodeType, EdgeType>['onEdgesChange'];
145
+ /**
146
+ * @description 是否自动适配视图
147
+ * @default true
148
+ */
149
+ fitView?: boolean;
150
+ /**
151
+ * @description 适配视图选项
152
+ */
153
+ fitViewOptions?: ReactFlowProps<NodeType, EdgeType>['fitViewOptions'];
154
+ /**
155
+ * @description 最小缩放比例
156
+ */
157
+ minZoom?: number;
158
+ /**
159
+ * @description 最大缩放比例
160
+ */
161
+ maxZoom?: number;
162
+ /**
163
+ * @description 默认视口配置
164
+ */
165
+ defaultViewport?: ReactFlowProps<NodeType, EdgeType>['defaultViewport'];
166
+ /**
167
+ * @description ReactFlow 初始化完成回调
168
+ */
169
+ onInit?: ReactFlowProps<NodeType, EdgeType>['onInit'];
170
+ /**
171
+ * @description 节点点击回调
172
+ */
173
+ onNodeClick?: ReactFlowProps<NodeType, EdgeType>['onNodeClick'];
174
+ /**
175
+ * @description 节点双击回调
176
+ */
177
+ onNodeDoubleClick?: ReactFlowProps<NodeType, EdgeType>['onNodeDoubleClick'];
178
+ /**
179
+ * @description 节点右键菜单回调
180
+ */
181
+ onNodeContextMenu?: ReactFlowProps<NodeType, EdgeType>['onNodeContextMenu'];
182
+ /**
183
+ * @description 节点鼠标进入回调
184
+ */
185
+ onNodeMouseEnter?: ReactFlowProps<NodeType, EdgeType>['onNodeMouseEnter'];
186
+ /**
187
+ * @description 节点鼠标离开回调
188
+ */
189
+ onNodeMouseLeave?: ReactFlowProps<NodeType, EdgeType>['onNodeMouseLeave'];
190
+ /**
191
+ * @description 节点鼠标移动回调
192
+ */
193
+ onNodeMouseMove?: ReactFlowProps<NodeType, EdgeType>['onNodeMouseMove'];
194
+ /**
195
+ * @description 边点击回调
196
+ */
197
+ onEdgeClick?: ReactFlowProps<NodeType, EdgeType>['onEdgeClick'];
198
+ /**
199
+ * @description 边双击回调
200
+ */
201
+ onEdgeDoubleClick?: ReactFlowProps<NodeType, EdgeType>['onEdgeDoubleClick'];
202
+ /**
203
+ * @description 边右键菜单回调
204
+ */
205
+ onEdgeContextMenu?: ReactFlowProps<NodeType, EdgeType>['onEdgeContextMenu'];
206
+ /**
207
+ * @description 边鼠标进入回调
208
+ */
209
+ onEdgeMouseEnter?: ReactFlowProps<NodeType, EdgeType>['onEdgeMouseEnter'];
210
+ /**
211
+ * @description 边鼠标离开回调
212
+ */
213
+ onEdgeMouseLeave?: ReactFlowProps<NodeType, EdgeType>['onEdgeMouseLeave'];
214
+ /**
215
+ * @description 边鼠标移动回调
216
+ */
217
+ onEdgeMouseMove?: ReactFlowProps<NodeType, EdgeType>['onEdgeMouseMove'];
218
+ /**
219
+ * @description 画布点击回调
220
+ */
221
+ onPaneClick?: ReactFlowProps<NodeType, EdgeType>['onPaneClick'];
222
+ /**
223
+ * @description 画布右键菜单回调
224
+ */
225
+ onPaneContextMenu?: ReactFlowProps<NodeType, EdgeType>['onPaneContextMenu'];
226
+ /**
227
+ * @description 画布滚动回调
228
+ */
229
+ onPaneScroll?: ReactFlowProps<NodeType, EdgeType>['onPaneScroll'];
230
+ /**
231
+ * @description 画布鼠标进入回调
232
+ */
233
+ onPaneMouseEnter?: ReactFlowProps<NodeType, EdgeType>['onPaneMouseEnter'];
234
+ /**
235
+ * @description 画布鼠标离开回调
236
+ */
237
+ onPaneMouseLeave?: ReactFlowProps<NodeType, EdgeType>['onPaneMouseLeave'];
238
+ /**
239
+ * @description 画布鼠标移动回调
240
+ */
241
+ onPaneMouseMove?: ReactFlowProps<NodeType, EdgeType>['onPaneMouseMove'];
242
+ /**
243
+ * @description 选择变化回调
244
+ */
245
+ onSelectionChange?: ReactFlowProps<NodeType, EdgeType>['onSelectionChange'];
246
+ /**
247
+ * @description 选择右键菜单回调
248
+ */
249
+ onSelectionContextMenu?: ReactFlowProps<NodeType, EdgeType>['onSelectionContextMenu'];
250
+ /**
251
+ * @description 节点是否可拖拽
252
+ * @default false
253
+ */
254
+ nodesDraggable?: boolean;
255
+ /**
256
+ * @description 节点是否可连接
257
+ * @default true
258
+ */
259
+ nodesConnectable?: boolean;
260
+ /**
261
+ * @description 元素是否可选择
262
+ * @default true
263
+ */
264
+ elementsSelectable?: boolean;
265
+ /**
266
+ * @description 拖拽时是否选中节点
267
+ * @default false
268
+ */
269
+ selectNodesOnDrag?: boolean;
270
+ /**
271
+ * @description 节点原点位置
272
+ * @default [0, 0]
273
+ */
274
+ nodeOrigin?: ReactFlowProps<NodeType, EdgeType>['nodeOrigin'];
275
+ /**
276
+ * @description 拖拽画布的鼠标按键配置
277
+ */
278
+ panOnDrag?: ReactFlowProps<NodeType, EdgeType>['panOnDrag'];
279
+ /**
280
+ * @description 是否支持滚动平移
281
+ * @default false
282
+ */
283
+ panOnScroll?: boolean;
284
+ /**
285
+ * @description 是否支持滚轮缩放
286
+ * @default true
287
+ */
288
+ zoomOnScroll?: boolean;
289
+ /**
290
+ * @description 是否支持拖拽选择
291
+ */
292
+ selectionOnDrag?: boolean;
293
+ /**
294
+ * @description 选择模式
295
+ */
296
+ selectionMode?: ReactFlowProps<NodeType, EdgeType>['selectionMode'];
297
+ /**
298
+ * @description 删除快捷键
299
+ */
300
+ deleteKeyCode?: ReactFlowProps<NodeType, EdgeType>['deleteKeyCode'];
301
+ /**
302
+ * @description 连接验证函数
303
+ */
304
+ isValidConnection?: ReactFlowProps<NodeType, EdgeType>['isValidConnection'];
305
+ /**
306
+ * @description 连接完成回调
307
+ */
308
+ onConnect?: ReactFlowProps<NodeType, EdgeType>['onConnect'];
309
+ /**
310
+ * @description 删除前回调
311
+ */
312
+ onBeforeDelete?: ReactFlowProps<NodeType, EdgeType>['onBeforeDelete'];
313
+ /**
314
+ * @description 拖拽放置回调(用于从外部拖入元素)
315
+ */
316
+ onDrop?: ReactFlowProps<NodeType, EdgeType>['onDrop'];
317
+ /**
318
+ * @description 拖拽经过回调
319
+ */
320
+ onDragOver?: ReactFlowProps<NodeType, EdgeType>['onDragOver'];
321
+ /**
322
+ * @description 节点拖拽中回调
323
+ */
324
+ onNodeDrag?: ReactFlowProps<NodeType, EdgeType>['onNodeDrag'];
325
+ /**
326
+ * @description 节点拖拽开始回调
327
+ */
328
+ onNodeDragStart?: ReactFlowProps<NodeType, EdgeType>['onNodeDragStart'];
329
+ /**
330
+ * @description 节点拖拽结束回调
331
+ */
332
+ onNodeDragStop?: ReactFlowProps<NodeType, EdgeType>['onNodeDragStop'];
333
+ /**
334
+ * @description 画布鼠标进入回调(整个 ReactFlow 容器)
335
+ */
336
+ onMouseEnter?: ReactFlowProps<NodeType, EdgeType>['onMouseEnter'];
337
+ /**
338
+ * @description 画布鼠标离开回调(整个 ReactFlow 容器)
339
+ */
340
+ onMouseLeave?: ReactFlowProps<NodeType, EdgeType>['onMouseLeave'];
341
+ /**
342
+ * @description 画布鼠标移动回调(整个 ReactFlow 容器)
343
+ */
344
+ onMouseMove?: ReactFlowProps<NodeType, EdgeType>['onMouseMove'];
345
+ /**
346
+ * @description 画布鼠标按下回调(整个 ReactFlow 容器)
347
+ */
348
+ onMouseDown?: ReactFlowProps<NodeType, EdgeType>['onMouseDown'];
349
+ /**
350
+ * @description 画布鼠标抬起回调(整个 ReactFlow 容器)
351
+ */
352
+ onMouseUp?: ReactFlowProps<NodeType, EdgeType>['onMouseUp'];
353
+ /**
354
+ * @description 视口移动回调
355
+ */
356
+ onMove?: ReactFlowProps<NodeType, EdgeType>['onMove'];
357
+ /**
358
+ * @description 视口移动开始回调
359
+ */
360
+ onMoveStart?: ReactFlowProps<NodeType, EdgeType>['onMoveStart'];
361
+ /**
362
+ * @description 视口移动结束回调
363
+ */
364
+ onMoveEnd?: ReactFlowProps<NodeType, EdgeType>['onMoveEnd'];
365
+ /**
366
+ * @description 是否只渲染可见元素(性能优化)
367
+ * @default true
368
+ */
369
+ onlyRenderVisibleElements?: boolean;
107
370
  /**
108
371
  * @description 是否显示控制器
109
372
  * @default true
@@ -149,10 +412,6 @@ export interface IBaseFlowProps<NodeType extends Node = Node, EdgeType extends E
149
412
  plugins?: {
150
413
  scroller?: false | ScrollbarPluginOptions;
151
414
  };
152
- /**
153
- * @description 是否开启 service worker 模式,当为数字时,检测当前的节点数量,节点数量大于配置阈值时启用 serviceWorker模式,否则直接在 js中执行;当为true时强制使用 service worker 执行计算逻辑。false时默认关闭
154
- * @default false
155
- */
156
415
  readOnly?: boolean;
157
416
  onZoomIn?: () => void;
158
417
  /** Called in addition the default zoom behavior when the zoom out button is clicked. */
@@ -173,6 +432,20 @@ export interface IBaseFlowProps<NodeType extends Node = Node, EdgeType extends E
173
432
  */
174
433
  forceFitView?: boolean;
175
434
  loading?: boolean;
435
+ /**
436
+ * @description ReactFlow 扩展属性(不常用的配置)
437
+ * 用于传递未在外层定义的 ReactFlow 原生属性
438
+ * 如:nodesDraggable, panOnDrag, zoomOnScroll, 其他事件回调等
439
+ */
440
+ flowProps?: FlowProps<NodeType, EdgeType>;
441
+ /**
442
+ * @description 子元素
443
+ */
444
+ children?: React.ReactNode;
445
+ /**
446
+ * @description 调试模式
447
+ */
448
+ debug?: boolean;
176
449
  }
177
450
  export type CollapseButtonProps = {
178
451
  position?: 'left' | 'right';
@@ -225,4 +498,5 @@ export type BaseStateType = {
225
498
  export type ExtractState<S> = S extends {
226
499
  getState: () => infer T;
227
500
  } ? T : never;
501
+ export {};
228
502
  //# sourceMappingURL=types.d.ts.map