@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 +1 -1
- package/cjs/Flow.js +166 -54
- package/cjs/store/PropsStore.js +1 -1
- package/cjs/types.d.ts +267 -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 +161 -57
- package/esm/store/PropsStore.js +2 -1
- package/esm/types.d.ts +267 -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,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
|
|
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
|
-
|
|
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
|
-
...(
|
|
181
|
+
...(userEdgeTypes || {})
|
|
141
182
|
};
|
|
142
|
-
}, [
|
|
143
|
-
const
|
|
144
|
-
//
|
|
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
|
-
...
|
|
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
|
-
}, [
|
|
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
|
-
|
|
294
|
+
userOnNodesChange?.(changes);
|
|
183
295
|
});
|
|
184
296
|
const onNodeDragStart = (0, _ahooks.useMemoizedFn)((event, node, nodes) => {
|
|
185
297
|
setNodeDragging(true);
|
|
186
|
-
|
|
298
|
+
userOnNodeDragStart?.(event, node, nodes);
|
|
187
299
|
});
|
|
188
300
|
const onNodeDragStop = (0, _ahooks.useMemoizedFn)((event, node, nodes) => {
|
|
189
301
|
setNodeDragging(false);
|
|
190
|
-
|
|
302
|
+
userOnNodeDragStop?.(event, node, nodes);
|
|
191
303
|
});
|
|
192
304
|
const getEdgesChangeHandlers = (0, _useGetEdgesChangeHandlers.useGetEdgesChangeHandlers)();
|
|
193
|
-
const
|
|
194
|
-
|
|
305
|
+
const onEdgesChange = (0, _ahooks.useMemoizedFn)(changes => {
|
|
306
|
+
userOnEdgesChange?.(changes);
|
|
195
307
|
// 触发注册事件
|
|
196
|
-
getEdgesChangeHandlers()?.forEach(
|
|
197
|
-
|
|
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
|
-
...
|
|
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:
|
|
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,
|
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' | '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
|
-
|
|
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
|