@rxflow/base 0.0.4-alpha.2 → 0.0.4-alpha.4

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;AA0HtB,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,2CA+YzH"}
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', '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,75 @@ 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
+ // 移动和缩放事件(外层定义)
110
+ onMove: userOnMove,
111
+ onMoveStart: userOnMoveStart,
112
+ onMoveEnd: userOnMoveEnd,
113
+ // 节点交互相关(外层定义)
114
+ nodesDraggable: userNodesDraggable,
115
+ nodesConnectable: userNodesConnectable,
116
+ elementsSelectable: userElementsSelectable,
117
+ selectNodesOnDrag: userSelectNodesOnDrag,
118
+ // 画布交互相关(外层定义)
119
+ panOnDrag: userPanOnDrag,
120
+ panOnScroll: userPanOnScroll,
121
+ zoomOnScroll: userZoomOnScroll,
122
+ selectionOnDrag: userSelectionOnDrag,
123
+ selectionMode: userSelectionMode,
124
+ deleteKeyCode: userDeleteKeyCode,
125
+ // 连接相关(外层定义)
126
+ isValidConnection: userIsValidConnection,
127
+ onConnect: userOnConnect,
128
+ onBeforeDelete: userOnBeforeDelete,
129
+ // 拖拽相关事件(外层定义)
130
+ onDrop: userOnDrop,
131
+ onDragOver: userOnDragOver,
132
+ onNodeDrag: userOnNodeDrag,
133
+ onNodeDragStart: userOnNodeDragStart,
134
+ onNodeDragStop: userOnNodeDragStop,
135
+ // 性能相关配置(外层定义)
136
+ onlyRenderVisibleElements = true,
137
+ // 扩展属性
138
+ flowProps: userFlowProps = {}
96
139
  } = props;
97
- console.log('render', '------');
98
140
  (0, _useListenRender.useListenRender)(); // 性能监听 hook
99
141
 
100
142
  const [minimapVisible, setMinimapVisible] = (0, _react2.useState)(!!(showMiniMap && !showControls)); // 不显示控制器是默认按照字段控制 miniMap显示状态
@@ -128,7 +170,6 @@ function Flow(props) {
128
170
  originEdges: edges || [],
129
171
  theme,
130
172
  onlyRenderVisibleElements,
131
- // 不支持修改该参数
132
173
  store,
133
174
  state: getState(),
134
175
  flowProps: props
@@ -137,29 +178,82 @@ function Flow(props) {
137
178
  const edgeTypes = (0, _react2.useMemo)(() => {
138
179
  return {
139
180
  manhattan: _manhattan.ManhattanEdge,
140
- ...(props.edgeTypes || {})
181
+ ...(userEdgeTypes || {})
141
182
  };
142
- }, [props.edgeTypes]);
143
- const flowProps = (0, _react2.useMemo)(() => {
144
- // 使用 pick 选择需要透传的属性,而不是 omit 排除
145
- const passthroughProps = (0, _lodash.pick)(props, REACT_FLOW_PROPS);
183
+ }, [userEdgeTypes]);
184
+ const reactFlowProps = (0, _react2.useMemo)(() => {
185
+ // 构建传递给 ReactFlow 的属性
146
186
  const options = {
147
187
  // 默认配置
148
- selectNodesOnDrag: false,
149
188
  preventScrolling: true,
150
- panOnScroll: false,
151
- zoomOnScroll: true,
152
- nodesDraggable: false,
153
189
  proOptions: proOptions,
190
+ // 透传用户传入的 ReactFlow 扩展属性(flowProps,优先级最低)
191
+ ...userFlowProps,
192
+ // 外层定义的属性(优先级高于 flowProps)
193
+ // 视图和缩放相关
194
+ fitView: userFitView ?? true,
195
+ minZoom: userMinZoom,
196
+ maxZoom: userMaxZoom,
197
+ defaultViewport: userDefaultViewport,
198
+ onlyRenderVisibleElements,
199
+ // 节点交互相关
200
+ nodesDraggable: userNodesDraggable ?? false,
201
+ nodesConnectable: userNodesConnectable,
202
+ elementsSelectable: userElementsSelectable,
203
+ selectNodesOnDrag: userSelectNodesOnDrag ?? false,
204
+ // 画布交互相关
205
+ panOnDrag: userPanOnDrag,
206
+ panOnScroll: userPanOnScroll ?? false,
207
+ zoomOnScroll: userZoomOnScroll ?? true,
208
+ selectionOnDrag: userSelectionOnDrag,
209
+ selectionMode: userSelectionMode,
210
+ deleteKeyCode: userDeleteKeyCode,
211
+ // 连接相关
212
+ isValidConnection: userIsValidConnection,
213
+ onConnect: userOnConnect,
214
+ onBeforeDelete: userOnBeforeDelete,
215
+ // 事件回调
216
+ onInit: userOnInit,
217
+ onNodeClick: userOnNodeClick,
218
+ onNodeDoubleClick: userOnNodeDoubleClick,
219
+ onNodeContextMenu: userOnNodeContextMenu,
220
+ onNodeMouseEnter: userOnNodeMouseEnter,
221
+ onNodeMouseLeave: userOnNodeMouseLeave,
222
+ onNodeMouseMove: userOnNodeMouseMove,
223
+ onEdgeClick: userOnEdgeClick,
224
+ onEdgeDoubleClick: userOnEdgeDoubleClick,
225
+ onEdgeContextMenu: userOnEdgeContextMenu,
226
+ onEdgeMouseEnter: userOnEdgeMouseEnter,
227
+ onEdgeMouseLeave: userOnEdgeMouseLeave,
228
+ onEdgeMouseMove: userOnEdgeMouseMove,
229
+ onPaneClick: userOnPaneClick,
230
+ onPaneContextMenu: userOnPaneContextMenu,
231
+ onPaneScroll: userOnPaneScroll,
232
+ onPaneMouseEnter: userOnPaneMouseEnter,
233
+ onPaneMouseLeave: userOnPaneMouseLeave,
234
+ onPaneMouseMove: userOnPaneMouseMove,
235
+ onSelectionChange: userOnSelectionChange,
236
+ onSelectionContextMenu: userOnSelectionContextMenu,
237
+ // 画布鼠标事件
238
+ onMouseEnter: userOnMouseEnter,
239
+ onMouseLeave: userOnMouseLeave,
240
+ onMouseMove: userOnMouseMove,
241
+ // 移动和缩放事件
242
+ onMove: userOnMove,
243
+ onMoveStart: userOnMoveStart,
244
+ onMoveEnd: userOnMoveEnd,
245
+ // 拖拽相关事件
246
+ onDrop: userOnDrop,
247
+ onDragOver: userOnDragOver,
248
+ onNodeDrag: userOnNodeDrag,
249
+ // fitViewOptions 需要特殊合并处理
154
250
  fitViewOptions: {
155
251
  nodes: _nodes?.length && autoCenter ? [_nodes[0]] : undefined,
156
- ...props.fitViewOptions
157
- },
158
- fitView: true,
159
- onlyRenderVisibleElements,
160
- // 透传 ReactFlow 原生属性
161
- ...passthroughProps
252
+ ...userFitViewOptions
253
+ }
162
254
  };
255
+
256
+ // scroller 插件特殊处理
163
257
  if (plugins?.scroller) {
164
258
  options.zoomOnScroll = false;
165
259
  options.panOnScroll = true;
@@ -167,39 +261,57 @@ function Flow(props) {
167
261
  options.selectionOnDrag = options.selectionOnDrag ?? true;
168
262
  options.selectionMode = options.selectionMode ?? _react.SelectionMode.Partial;
169
263
  }
264
+
265
+ // 只读模式特殊处理
170
266
  if (readOnly) {
171
267
  options.nodesDraggable = false;
172
268
  options.nodesConnectable = false;
173
269
  options.elementsSelectable = false;
174
270
  }
175
271
  return options;
176
- }, [props, _nodes, readOnly, onlyRenderVisibleElements, autoCenter, plugins?.scroller]);
272
+ }, [userFlowProps, _nodes, readOnly, onlyRenderVisibleElements, autoCenter, plugins?.scroller,
273
+ // 视图和缩放相关
274
+ userFitView, userFitViewOptions, userMinZoom, userMaxZoom, userDefaultViewport,
275
+ // 节点交互相关
276
+ userNodesDraggable, userNodesConnectable, userElementsSelectable, userSelectNodesOnDrag,
277
+ // 画布交互相关
278
+ userPanOnDrag, userPanOnScroll, userZoomOnScroll, userSelectionOnDrag, userSelectionMode, userDeleteKeyCode,
279
+ // 连接相关
280
+ userIsValidConnection, userOnConnect, userOnBeforeDelete,
281
+ // 事件回调
282
+ userOnInit, userOnNodeClick, userOnNodeDoubleClick, userOnNodeContextMenu, userOnNodeMouseEnter, userOnNodeMouseLeave, userOnNodeMouseMove, userOnEdgeClick, userOnEdgeDoubleClick, userOnEdgeContextMenu, userOnEdgeMouseEnter, userOnEdgeMouseLeave, userOnEdgeMouseMove, userOnPaneClick, userOnPaneContextMenu, userOnPaneScroll, userOnPaneMouseEnter, userOnPaneMouseLeave, userOnPaneMouseMove, userOnSelectionChange, userOnSelectionContextMenu,
283
+ // 画布鼠标事件
284
+ userOnMouseEnter, userOnMouseLeave, userOnMouseMove,
285
+ // 移动和缩放事件
286
+ userOnMove, userOnMoveStart, userOnMoveEnd,
287
+ // 拖拽相关事件
288
+ userOnDrop, userOnDragOver, userOnNodeDrag]);
177
289
  const onNodesChange = (0, _ahooks.useMemoizedFn)(changes => {
178
290
  if (forceLayout && (0, _hasDimensionsChange.hasDimensionsChange)(changes)) {
179
291
  // 强制布局
180
292
  triggerLayout();
181
293
  }
182
- props.onNodesChange?.(changes);
294
+ userOnNodesChange?.(changes);
183
295
  });
184
296
  const onNodeDragStart = (0, _ahooks.useMemoizedFn)((event, node, nodes) => {
185
297
  setNodeDragging(true);
186
- flowProps.onNodeDragStart?.(event, node, nodes);
298
+ userOnNodeDragStart?.(event, node, nodes);
187
299
  });
188
300
  const onNodeDragStop = (0, _ahooks.useMemoizedFn)((event, node, nodes) => {
189
301
  setNodeDragging(false);
190
- flowProps.onNodeDragStop?.(event, node, nodes);
302
+ userOnNodeDragStop?.(event, node, nodes);
191
303
  });
192
304
  const getEdgesChangeHandlers = (0, _useGetEdgesChangeHandlers.useGetEdgesChangeHandlers)();
193
- const _onEdgesChange = (0, _ahooks.useMemoizedFn)(changes => {
194
- onEdgesChange?.(changes);
305
+ const onEdgesChange = (0, _ahooks.useMemoizedFn)(changes => {
306
+ userOnEdgesChange?.(changes);
195
307
  // 触发注册事件
196
- getEdgesChangeHandlers()?.forEach(onEdgesChange => {
197
- onEdgesChange?.(changes);
308
+ getEdgesChangeHandlers()?.forEach(handler => {
309
+ handler?.(changes);
198
310
  });
199
311
  });
200
312
  (0, _react2.useEffect)(() => {
201
313
  if (forceFitView) {
202
- instance.fitView(fitViewOptions);
314
+ instance.fitView(reactFlowProps.fitViewOptions);
203
315
  }
204
316
  }, [nodes]);
205
317
  return /*#__PURE__*/(0, _jsxRuntime.jsxs)("div", {
@@ -211,14 +323,14 @@ function Flow(props) {
211
323
  marks: markers
212
324
  }) : null, /*#__PURE__*/(0, _jsxRuntime.jsxs)(_react.ReactFlow, {
213
325
  nodeTypes: nodeTypes,
214
- ...flowProps,
326
+ ...reactFlowProps,
215
327
  edgeTypes: edgeTypes,
216
328
  nodes: _nodes,
217
329
  edges: _edges,
218
330
  onNodesChange: onNodesChange,
219
331
  onNodeDragStart: onNodeDragStart,
220
332
  onNodeDragStop: onNodeDragStop,
221
- onEdgesChange: _onEdgesChange,
333
+ onEdgesChange: onEdgesChange,
222
334
  children: [plugins?.scroller ? /*#__PURE__*/(0, _jsxRuntime.jsx)(_scrollbar.Scrollbar, {
223
335
  ...plugins.scroller,
224
336
  width: width,
@@ -234,7 +346,7 @@ function Flow(props) {
234
346
  }), showControls && /*#__PURE__*/(0, _jsxRuntime.jsx)(_Controls.default, {
235
347
  showFullscreen: showFullscreen,
236
348
  containerRef: containerRef,
237
- fitViewOptions: fitViewOptions,
349
+ fitViewOptions: reactFlowProps.fitViewOptions,
238
350
  position: controlsPosition,
239
351
  showInteractive: showInteractive,
240
352
  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' | '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' | '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,243 @@ 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
+ */
273
+ panOnDrag?: ReactFlowProps<NodeType, EdgeType>['panOnDrag'];
274
+ /**
275
+ * @description 是否支持滚动平移
276
+ * @default false
277
+ */
278
+ panOnScroll?: boolean;
279
+ /**
280
+ * @description 是否支持滚轮缩放
281
+ * @default true
282
+ */
283
+ zoomOnScroll?: boolean;
284
+ /**
285
+ * @description 是否支持拖拽选择
286
+ */
287
+ selectionOnDrag?: boolean;
288
+ /**
289
+ * @description 选择模式
290
+ */
291
+ selectionMode?: ReactFlowProps<NodeType, EdgeType>['selectionMode'];
292
+ /**
293
+ * @description 删除快捷键
294
+ */
295
+ deleteKeyCode?: ReactFlowProps<NodeType, EdgeType>['deleteKeyCode'];
296
+ /**
297
+ * @description 连接验证函数
298
+ */
299
+ isValidConnection?: ReactFlowProps<NodeType, EdgeType>['isValidConnection'];
300
+ /**
301
+ * @description 连接完成回调
302
+ */
303
+ onConnect?: ReactFlowProps<NodeType, EdgeType>['onConnect'];
304
+ /**
305
+ * @description 删除前回调
306
+ */
307
+ onBeforeDelete?: ReactFlowProps<NodeType, EdgeType>['onBeforeDelete'];
308
+ /**
309
+ * @description 拖拽放置回调(用于从外部拖入元素)
310
+ */
311
+ onDrop?: ReactFlowProps<NodeType, EdgeType>['onDrop'];
312
+ /**
313
+ * @description 拖拽经过回调
314
+ */
315
+ onDragOver?: ReactFlowProps<NodeType, EdgeType>['onDragOver'];
316
+ /**
317
+ * @description 节点拖拽中回调
318
+ */
319
+ onNodeDrag?: ReactFlowProps<NodeType, EdgeType>['onNodeDrag'];
320
+ /**
321
+ * @description 节点拖拽开始回调
322
+ */
323
+ onNodeDragStart?: ReactFlowProps<NodeType, EdgeType>['onNodeDragStart'];
324
+ /**
325
+ * @description 节点拖拽结束回调
326
+ */
327
+ onNodeDragStop?: ReactFlowProps<NodeType, EdgeType>['onNodeDragStop'];
328
+ /**
329
+ * @description 画布鼠标进入回调(整个 ReactFlow 容器)
330
+ */
331
+ onMouseEnter?: ReactFlowProps<NodeType, EdgeType>['onMouseEnter'];
332
+ /**
333
+ * @description 画布鼠标离开回调(整个 ReactFlow 容器)
334
+ */
335
+ onMouseLeave?: ReactFlowProps<NodeType, EdgeType>['onMouseLeave'];
336
+ /**
337
+ * @description 画布鼠标移动回调(整个 ReactFlow 容器)
338
+ */
339
+ onMouseMove?: ReactFlowProps<NodeType, EdgeType>['onMouseMove'];
340
+ /**
341
+ * @description 视口移动回调
342
+ */
343
+ onMove?: ReactFlowProps<NodeType, EdgeType>['onMove'];
344
+ /**
345
+ * @description 视口移动开始回调
346
+ */
347
+ onMoveStart?: ReactFlowProps<NodeType, EdgeType>['onMoveStart'];
348
+ /**
349
+ * @description 视口移动结束回调
350
+ */
351
+ onMoveEnd?: ReactFlowProps<NodeType, EdgeType>['onMoveEnd'];
352
+ /**
353
+ * @description 是否只渲染可见元素(性能优化)
354
+ * @default true
355
+ */
356
+ onlyRenderVisibleElements?: boolean;
107
357
  /**
108
358
  * @description 是否显示控制器
109
359
  * @default true
@@ -149,10 +399,6 @@ export interface IBaseFlowProps<NodeType extends Node = Node, EdgeType extends E
149
399
  plugins?: {
150
400
  scroller?: false | ScrollbarPluginOptions;
151
401
  };
152
- /**
153
- * @description 是否开启 service worker 模式,当为数字时,检测当前的节点数量,节点数量大于配置阈值时启用 serviceWorker模式,否则直接在 js中执行;当为true时强制使用 service worker 执行计算逻辑。false时默认关闭
154
- * @default false
155
- */
156
402
  readOnly?: boolean;
157
403
  onZoomIn?: () => void;
158
404
  /** Called in addition the default zoom behavior when the zoom out button is clicked. */
@@ -173,6 +419,20 @@ export interface IBaseFlowProps<NodeType extends Node = Node, EdgeType extends E
173
419
  */
174
420
  forceFitView?: boolean;
175
421
  loading?: boolean;
422
+ /**
423
+ * @description ReactFlow 扩展属性(不常用的配置)
424
+ * 用于传递未在外层定义的 ReactFlow 原生属性
425
+ * 如:nodesDraggable, panOnDrag, zoomOnScroll, 其他事件回调等
426
+ */
427
+ flowProps?: FlowProps<NodeType, EdgeType>;
428
+ /**
429
+ * @description 子元素
430
+ */
431
+ children?: React.ReactNode;
432
+ /**
433
+ * @description 调试模式
434
+ */
435
+ debug?: boolean;
176
436
  }
177
437
  export type CollapseButtonProps = {
178
438
  position?: 'left' | 'right';
@@ -225,4 +485,5 @@ export type BaseStateType = {
225
485
  export type ExtractState<S> = S extends {
226
486
  getState: () => infer T;
227
487
  } ? T : never;
488
+ export {};
228
489
  //# sourceMappingURL=types.d.ts.map