@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 +1 -1
- package/cjs/Flow.js +172 -54
- package/cjs/store/PropsStore.js +1 -1
- package/cjs/types.d.ts +280 -6
- package/cjs/types.d.ts.map +1 -1
- package/cjs/workers/manhattan.worker.js +12534 -31
- package/esm/Flow.d.ts.map +1 -1
- package/esm/Flow.js +167 -57
- package/esm/store/PropsStore.js +2 -1
- package/esm/types.d.ts +280 -6
- package/esm/types.d.ts.map +1 -1
- package/package.json +2 -2
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;
|
|
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
|
|
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
|
-
|
|
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
|
-
...(
|
|
184
|
+
...(userEdgeTypes || {})
|
|
141
185
|
};
|
|
142
|
-
}, [
|
|
143
|
-
const
|
|
144
|
-
//
|
|
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
|
-
...
|
|
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
|
-
}, [
|
|
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
|
-
|
|
300
|
+
userOnNodesChange?.(changes);
|
|
183
301
|
});
|
|
184
302
|
const onNodeDragStart = (0, _ahooks.useMemoizedFn)((event, node, nodes) => {
|
|
185
303
|
setNodeDragging(true);
|
|
186
|
-
|
|
304
|
+
userOnNodeDragStart?.(event, node, nodes);
|
|
187
305
|
});
|
|
188
306
|
const onNodeDragStop = (0, _ahooks.useMemoizedFn)((event, node, nodes) => {
|
|
189
307
|
setNodeDragging(false);
|
|
190
|
-
|
|
308
|
+
userOnNodeDragStop?.(event, node, nodes);
|
|
191
309
|
});
|
|
192
310
|
const getEdgesChangeHandlers = (0, _useGetEdgesChangeHandlers.useGetEdgesChangeHandlers)();
|
|
193
|
-
const
|
|
194
|
-
|
|
311
|
+
const onEdgesChange = (0, _ahooks.useMemoizedFn)(changes => {
|
|
312
|
+
userOnEdgesChange?.(changes);
|
|
195
313
|
// 触发注册事件
|
|
196
|
-
getEdgesChangeHandlers()?.forEach(
|
|
197
|
-
|
|
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
|
-
...
|
|
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:
|
|
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,
|
package/cjs/store/PropsStore.js
CHANGED
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
|
-
|
|
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
|