Files
hive/frontend/node_modules/react-flow-renderer/dist/esm/index.js
anthonyrawlins 85bf1341f3 Add comprehensive frontend UI and distributed infrastructure
Frontend Enhancements:
- Complete React TypeScript frontend with modern UI components
- Distributed workflows management interface with real-time updates
- Socket.IO integration for live agent status monitoring
- Agent management dashboard with cluster visualization
- Project management interface with metrics and task tracking
- Responsive design with proper error handling and loading states

Backend Infrastructure:
- Distributed coordinator for multi-agent workflow orchestration
- Cluster management API with comprehensive agent operations
- Enhanced database models for agents and projects
- Project service for filesystem-based project discovery
- Performance monitoring and metrics collection
- Comprehensive API documentation and error handling

Documentation:
- Complete distributed development guide (README_DISTRIBUTED.md)
- Comprehensive development report with architecture insights
- System configuration templates and deployment guides

The platform now provides a complete web interface for managing the distributed AI cluster
with real-time monitoring, workflow orchestration, and agent coordination capabilities.

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-07-10 08:41:59 +10:00

4128 lines
170 KiB
JavaScript

import { _ as _slicedToArray, a as _defineProperty, P as Position, C as ConnectionMode, g as getHostForElement, u as useStoreApi, b as useStore, c as addEdge, d as getMarkerId, i as internalsSymbol, r as rectToBox, e as getConnectedEdges, f as getDimensions, h as PanOnScrollMode, j as clamp, k as getNodesInside, l as getSelectionChanges, m as clampPosition, p as pointToRendererPoint, n as handleNodeClick, o as getRectOfNodes, q as ConnectionLineType, M as MarkerType, s as isNumeric, t as getMouseHandler$1, v as Provider$1, w as createStore, x as infiniteExtent, y as applyNodeChanges, z as applyEdgeChanges } from './index-a12c80bd.js';
export { H as BackgroundVariant, q as ConnectionLineType, C as ConnectionMode, M as MarkerType, h as PanOnScrollMode, P as Position, c as addEdge, z as applyEdgeChanges, y as applyNodeChanges, e as getConnectedEdges, E as getIncomers, D as getOutgoers, o as getRectOfNodes, G as getTransformForBounds, i as internalsSymbol, B as isEdge, A as isNode, F as updateEdge, b as useStore, u as useStoreApi } from './index-a12c80bd.js';
import { _ as _objectWithoutProperties } from './index-20df97c0.js';
export { C as ControlButton, i as Controls } from './index-20df97c0.js';
import React, { memo, useRef, useState, useEffect, createContext, forwardRef, useContext, useMemo, useCallback } from 'react';
import cc from 'classcat';
import { _ as _toConsumableArray, u as useReactFlow } from './useReactFlow-993c30ca.js';
export { u as useReactFlow } from './useReactFlow-993c30ca.js';
import shallow from 'zustand/shallow';
import { zoom, zoomIdentity } from 'd3-zoom';
import { select, pointer } from 'd3-selection';
import { drag } from 'd3-drag';
export { default as MiniMap } from './index2.js';
export { default as Background } from './index3.js';
export { default as useUpdateNodeInternals } from './useUpdateNodeInternals.js';
export { default as useNodes } from './useNodes.js';
export { default as useEdges } from './useEdges.js';
export { default as useViewport } from './useViewport.js';
import 'zustand';
import 'zustand/context';
var accounts = ['paid-pro', 'paid-sponsor', 'paid-enterprise', 'paid-custom'];
function Attribution(_ref) {
var proOptions = _ref.proOptions,
_ref$position = _ref.position,
position = _ref$position === void 0 ? 'bottom-right' : _ref$position;
if (proOptions !== null && proOptions !== void 0 && proOptions.account && accounts.includes(proOptions === null || proOptions === void 0 ? void 0 : proOptions.account) && proOptions !== null && proOptions !== void 0 && proOptions.hideAttribution) {
return null;
}
var positionClasses = "".concat(position).split('-');
return /*#__PURE__*/React.createElement("div", {
className: cc(['react-flow__attribution'].concat(_toConsumableArray(positionClasses))),
"data-message": "Please only hide this attribution when you are subscribed to React Flow Pro: https://pro.reactflow.dev/pricing"
}, /*#__PURE__*/React.createElement("a", {
href: "https://reactflow.dev",
target: "_blank",
rel: "noopener noreferrer"
}, "React Flow"));
}
var _excluded$2 = ["x", "y", "label", "labelStyle", "labelShowBg", "labelBgStyle", "labelBgPadding", "labelBgBorderRadius", "children", "className"];
function ownKeys$c(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
function _objectSpread$c(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys$c(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys$c(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
var EdgeText = function EdgeText(_ref) {
var x = _ref.x,
y = _ref.y,
label = _ref.label,
_ref$labelStyle = _ref.labelStyle,
labelStyle = _ref$labelStyle === void 0 ? {} : _ref$labelStyle,
_ref$labelShowBg = _ref.labelShowBg,
labelShowBg = _ref$labelShowBg === void 0 ? true : _ref$labelShowBg,
_ref$labelBgStyle = _ref.labelBgStyle,
labelBgStyle = _ref$labelBgStyle === void 0 ? {} : _ref$labelBgStyle,
_ref$labelBgPadding = _ref.labelBgPadding,
labelBgPadding = _ref$labelBgPadding === void 0 ? [2, 4] : _ref$labelBgPadding,
_ref$labelBgBorderRad = _ref.labelBgBorderRadius,
labelBgBorderRadius = _ref$labelBgBorderRad === void 0 ? 2 : _ref$labelBgBorderRad,
children = _ref.children,
className = _ref.className,
rest = _objectWithoutProperties(_ref, _excluded$2);
var edgeRef = useRef(null);
var _useState = useState({
x: 0,
y: 0,
width: 0,
height: 0
}),
_useState2 = _slicedToArray(_useState, 2),
edgeTextBbox = _useState2[0],
setEdgeTextBbox = _useState2[1];
var edgeTextClasses = cc(['react-flow__edge-textwrapper', className]);
useEffect(function () {
if (edgeRef.current) {
var textBbox = edgeRef.current.getBBox();
setEdgeTextBbox({
x: textBbox.x,
y: textBbox.y,
width: textBbox.width,
height: textBbox.height
});
}
}, [label]);
if (typeof label === 'undefined' || !label) {
return null;
}
return /*#__PURE__*/React.createElement("g", _objectSpread$c({
transform: "translate(".concat(x - edgeTextBbox.width / 2, " ").concat(y - edgeTextBbox.height / 2, ")"),
className: edgeTextClasses
}, rest), labelShowBg && /*#__PURE__*/React.createElement("rect", {
width: edgeTextBbox.width + 2 * labelBgPadding[0],
x: -labelBgPadding[0],
y: -labelBgPadding[1],
height: edgeTextBbox.height + 2 * labelBgPadding[1],
className: "react-flow__edge-textbg",
style: labelBgStyle,
rx: labelBgBorderRadius,
ry: labelBgBorderRadius
}), /*#__PURE__*/React.createElement("text", {
className: "react-flow__edge-text",
y: edgeTextBbox.height / 2,
dy: "0.3em",
ref: edgeRef,
style: labelStyle
}, label), children);
};
var EdgeText$1 = /*#__PURE__*/memo(EdgeText);
var BaseEdge = (function (_ref) {
var path = _ref.path,
centerX = _ref.centerX,
centerY = _ref.centerY,
label = _ref.label,
labelStyle = _ref.labelStyle,
labelShowBg = _ref.labelShowBg,
labelBgStyle = _ref.labelBgStyle,
labelBgPadding = _ref.labelBgPadding,
labelBgBorderRadius = _ref.labelBgBorderRadius,
style = _ref.style,
markerEnd = _ref.markerEnd,
markerStart = _ref.markerStart;
var text = label ? /*#__PURE__*/React.createElement(EdgeText$1, {
x: centerX,
y: centerY,
label: label,
labelStyle: labelStyle,
labelShowBg: labelShowBg,
labelBgStyle: labelBgStyle,
labelBgPadding: labelBgPadding,
labelBgBorderRadius: labelBgBorderRadius
}) : null;
return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("path", {
style: style,
d: path,
className: "react-flow__edge-path",
markerEnd: markerEnd,
markerStart: markerStart
}), text);
});
function getControl(_ref) {
var pos = _ref.pos,
x1 = _ref.x1,
y1 = _ref.y1,
x2 = _ref.x2,
y2 = _ref.y2;
var ctX, ctY;
switch (pos) {
case Position.Left:
case Position.Right:
{
ctX = 0.5 * (x1 + x2);
ctY = y1;
}
break;
case Position.Top:
case Position.Bottom:
{
ctX = x1;
ctY = 0.5 * (y1 + y2);
}
break;
}
return [ctX, ctY];
}
function getSimpleBezierPath(_ref2) {
var sourceX = _ref2.sourceX,
sourceY = _ref2.sourceY,
_ref2$sourcePosition = _ref2.sourcePosition,
sourcePosition = _ref2$sourcePosition === void 0 ? Position.Bottom : _ref2$sourcePosition,
targetX = _ref2.targetX,
targetY = _ref2.targetY,
_ref2$targetPosition = _ref2.targetPosition,
targetPosition = _ref2$targetPosition === void 0 ? Position.Top : _ref2$targetPosition;
var _getControl = getControl({
pos: sourcePosition,
x1: sourceX,
y1: sourceY,
x2: targetX,
y2: targetY
}),
_getControl2 = _slicedToArray(_getControl, 2),
sourceControlX = _getControl2[0],
sourceControlY = _getControl2[1];
var _getControl3 = getControl({
pos: targetPosition,
x1: targetX,
y1: targetY,
x2: sourceX,
y2: sourceY
}),
_getControl4 = _slicedToArray(_getControl3, 2),
targetControlX = _getControl4[0],
targetControlY = _getControl4[1];
return "M".concat(sourceX, ",").concat(sourceY, " C").concat(sourceControlX, ",").concat(sourceControlY, " ").concat(targetControlX, ",").concat(targetControlY, " ").concat(targetX, ",").concat(targetY);
} // @TODO: this function will recalculate the control points
// one option is to let getXXXPath() return center points
// but will introduce breaking changes
// the getCenter() of other types of edges might need to change, too
function getSimpleBezierCenter(_ref3) {
var sourceX = _ref3.sourceX,
sourceY = _ref3.sourceY,
_ref3$sourcePosition = _ref3.sourcePosition,
sourcePosition = _ref3$sourcePosition === void 0 ? Position.Bottom : _ref3$sourcePosition,
targetX = _ref3.targetX,
targetY = _ref3.targetY,
_ref3$targetPosition = _ref3.targetPosition,
targetPosition = _ref3$targetPosition === void 0 ? Position.Top : _ref3$targetPosition;
var _getControl5 = getControl({
pos: sourcePosition,
x1: sourceX,
y1: sourceY,
x2: targetX,
y2: targetY
}),
_getControl6 = _slicedToArray(_getControl5, 2),
sourceControlX = _getControl6[0],
sourceControlY = _getControl6[1];
var _getControl7 = getControl({
pos: targetPosition,
x1: targetX,
y1: targetY,
x2: sourceX,
y2: sourceY
}),
_getControl8 = _slicedToArray(_getControl7, 2),
targetControlX = _getControl8[0],
targetControlY = _getControl8[1]; // cubic bezier t=0.5 mid point, not the actual mid point, but easy to calculate
// https://stackoverflow.com/questions/67516101/how-to-find-distance-mid-point-of-bezier-curve
var centerX = sourceX * 0.125 + sourceControlX * 0.375 + targetControlX * 0.375 + targetX * 0.125;
var centerY = sourceY * 0.125 + sourceControlY * 0.375 + targetControlY * 0.375 + targetY * 0.125;
var xOffset = Math.abs(centerX - sourceX);
var yOffset = Math.abs(centerY - sourceY);
return [centerX, centerY, xOffset, yOffset];
}
var SimpleBezierEdge = /*#__PURE__*/memo(function (_ref4) {
var sourceX = _ref4.sourceX,
sourceY = _ref4.sourceY,
targetX = _ref4.targetX,
targetY = _ref4.targetY,
_ref4$sourcePosition = _ref4.sourcePosition,
sourcePosition = _ref4$sourcePosition === void 0 ? Position.Bottom : _ref4$sourcePosition,
_ref4$targetPosition = _ref4.targetPosition,
targetPosition = _ref4$targetPosition === void 0 ? Position.Top : _ref4$targetPosition,
label = _ref4.label,
labelStyle = _ref4.labelStyle,
labelShowBg = _ref4.labelShowBg,
labelBgStyle = _ref4.labelBgStyle,
labelBgPadding = _ref4.labelBgPadding,
labelBgBorderRadius = _ref4.labelBgBorderRadius,
style = _ref4.style,
markerEnd = _ref4.markerEnd,
markerStart = _ref4.markerStart;
var params = {
sourceX: sourceX,
sourceY: sourceY,
sourcePosition: sourcePosition,
targetX: targetX,
targetY: targetY,
targetPosition: targetPosition
};
var path = getSimpleBezierPath(params);
var _getSimpleBezierCente = getSimpleBezierCenter(params),
_getSimpleBezierCente2 = _slicedToArray(_getSimpleBezierCente, 2),
centerX = _getSimpleBezierCente2[0],
centerY = _getSimpleBezierCente2[1];
return /*#__PURE__*/React.createElement(BaseEdge, {
path: path,
centerX: centerX,
centerY: centerY,
label: label,
labelStyle: labelStyle,
labelShowBg: labelShowBg,
labelBgStyle: labelBgStyle,
labelBgPadding: labelBgPadding,
labelBgBorderRadius: labelBgBorderRadius,
style: style,
markerEnd: markerEnd,
markerStart: markerStart
});
});
function ownKeys$b(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
function _objectSpread$b(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys$b(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys$b(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
var getMarkerEnd = function getMarkerEnd(markerType, markerEndId) {
if (typeof markerEndId !== 'undefined' && markerEndId) {
return "url(#".concat(markerEndId, ")");
}
return typeof markerType !== 'undefined' ? "url(#react-flow__".concat(markerType, ")") : 'none';
};
var LeftOrRight = [Position.Left, Position.Right];
var getCenter = function getCenter(_ref) {
var sourceX = _ref.sourceX,
sourceY = _ref.sourceY,
targetX = _ref.targetX,
targetY = _ref.targetY,
_ref$sourcePosition = _ref.sourcePosition,
sourcePosition = _ref$sourcePosition === void 0 ? Position.Bottom : _ref$sourcePosition,
_ref$targetPosition = _ref.targetPosition,
targetPosition = _ref$targetPosition === void 0 ? Position.Top : _ref$targetPosition;
var sourceIsLeftOrRight = LeftOrRight.includes(sourcePosition);
var targetIsLeftOrRight = LeftOrRight.includes(targetPosition); // we expect flows to be horizontal or vertical (all handles left or right respectively top or bottom)
// a mixed edge is when one the source is on the left and the target is on the top for example.
var mixedEdge = sourceIsLeftOrRight && !targetIsLeftOrRight || targetIsLeftOrRight && !sourceIsLeftOrRight;
if (mixedEdge) {
var _xOffset = sourceIsLeftOrRight ? Math.abs(targetX - sourceX) : 0;
var _centerX = sourceX > targetX ? sourceX - _xOffset : sourceX + _xOffset;
var _yOffset = sourceIsLeftOrRight ? 0 : Math.abs(targetY - sourceY);
var _centerY = sourceY < targetY ? sourceY + _yOffset : sourceY - _yOffset;
return [_centerX, _centerY, _xOffset, _yOffset];
}
var xOffset = Math.abs(targetX - sourceX) / 2;
var centerX = targetX < sourceX ? targetX + xOffset : targetX - xOffset;
var yOffset = Math.abs(targetY - sourceY) / 2;
var centerY = targetY < sourceY ? targetY + yOffset : targetY - yOffset;
return [centerX, centerY, xOffset, yOffset];
};
function getMouseHandler(id, getState, handler) {
return handler === undefined ? handler : function (event) {
var edge = getState().edges.find(function (e) {
return e.id === id;
});
handler(event, _objectSpread$b({}, edge));
};
}
// The name indicates the direction of the path. "bottomLeftCorner" goes
// from bottom to the left and "leftBottomCorner" goes from left to the bottom.
// We have to consider the direction of the paths because of the animated lines.
var bottomLeftCorner = function bottomLeftCorner(x, y, size) {
return "L ".concat(x, ",").concat(y - size, "Q ").concat(x, ",").concat(y, " ").concat(x + size, ",").concat(y);
};
var leftBottomCorner = function leftBottomCorner(x, y, size) {
return "L ".concat(x + size, ",").concat(y, "Q ").concat(x, ",").concat(y, " ").concat(x, ",").concat(y - size);
};
var bottomRightCorner = function bottomRightCorner(x, y, size) {
return "L ".concat(x, ",").concat(y - size, "Q ").concat(x, ",").concat(y, " ").concat(x - size, ",").concat(y);
};
var rightBottomCorner = function rightBottomCorner(x, y, size) {
return "L ".concat(x - size, ",").concat(y, "Q ").concat(x, ",").concat(y, " ").concat(x, ",").concat(y - size);
};
var leftTopCorner = function leftTopCorner(x, y, size) {
return "L ".concat(x + size, ",").concat(y, "Q ").concat(x, ",").concat(y, " ").concat(x, ",").concat(y + size);
};
var topLeftCorner = function topLeftCorner(x, y, size) {
return "L ".concat(x, ",").concat(y + size, "Q ").concat(x, ",").concat(y, " ").concat(x + size, ",").concat(y);
};
var topRightCorner = function topRightCorner(x, y, size) {
return "L ".concat(x, ",").concat(y + size, "Q ").concat(x, ",").concat(y, " ").concat(x - size, ",").concat(y);
};
var rightTopCorner = function rightTopCorner(x, y, size) {
return "L ".concat(x - size, ",").concat(y, "Q ").concat(x, ",").concat(y, " ").concat(x, ",").concat(y + size);
};
function getSmoothStepPath(_ref) {
var sourceX = _ref.sourceX,
sourceY = _ref.sourceY,
_ref$sourcePosition = _ref.sourcePosition,
sourcePosition = _ref$sourcePosition === void 0 ? Position.Bottom : _ref$sourcePosition,
targetX = _ref.targetX,
targetY = _ref.targetY,
_ref$targetPosition = _ref.targetPosition,
targetPosition = _ref$targetPosition === void 0 ? Position.Top : _ref$targetPosition,
_ref$borderRadius = _ref.borderRadius,
borderRadius = _ref$borderRadius === void 0 ? 5 : _ref$borderRadius,
centerX = _ref.centerX,
centerY = _ref.centerY;
var _getCenter = getCenter({
sourceX: sourceX,
sourceY: sourceY,
targetX: targetX,
targetY: targetY
}),
_getCenter2 = _slicedToArray(_getCenter, 4),
_centerX = _getCenter2[0],
_centerY = _getCenter2[1],
offsetX = _getCenter2[2],
offsetY = _getCenter2[3];
var cornerWidth = Math.min(borderRadius, Math.abs(targetX - sourceX));
var cornerHeight = Math.min(borderRadius, Math.abs(targetY - sourceY));
var cornerSize = Math.min(cornerWidth, cornerHeight, offsetX, offsetY);
var leftAndRight = [Position.Left, Position.Right];
var cX = typeof centerX !== 'undefined' ? centerX : _centerX;
var cY = typeof centerY !== 'undefined' ? centerY : _centerY;
var firstCornerPath = null;
var secondCornerPath = null;
if (sourceX <= targetX) {
firstCornerPath = sourceY <= targetY ? bottomLeftCorner(sourceX, cY, cornerSize) : topLeftCorner(sourceX, cY, cornerSize);
secondCornerPath = sourceY <= targetY ? rightTopCorner(targetX, cY, cornerSize) : rightBottomCorner(targetX, cY, cornerSize);
} else {
firstCornerPath = sourceY < targetY ? bottomRightCorner(sourceX, cY, cornerSize) : topRightCorner(sourceX, cY, cornerSize);
secondCornerPath = sourceY < targetY ? leftTopCorner(targetX, cY, cornerSize) : leftBottomCorner(targetX, cY, cornerSize);
}
if (leftAndRight.includes(sourcePosition) && leftAndRight.includes(targetPosition)) {
if (sourceX <= targetX) {
firstCornerPath = sourceY <= targetY ? rightTopCorner(cX, sourceY, cornerSize) : rightBottomCorner(cX, sourceY, cornerSize);
secondCornerPath = sourceY <= targetY ? bottomLeftCorner(cX, targetY, cornerSize) : topLeftCorner(cX, targetY, cornerSize);
} else if (sourcePosition === Position.Right && targetPosition === Position.Left || sourcePosition === Position.Left && targetPosition === Position.Right || sourcePosition === Position.Left && targetPosition === Position.Left) {
// and sourceX > targetX
firstCornerPath = sourceY <= targetY ? leftTopCorner(cX, sourceY, cornerSize) : leftBottomCorner(cX, sourceY, cornerSize);
secondCornerPath = sourceY <= targetY ? bottomRightCorner(cX, targetY, cornerSize) : topRightCorner(cX, targetY, cornerSize);
}
} else if (leftAndRight.includes(sourcePosition) && !leftAndRight.includes(targetPosition)) {
if (sourceX <= targetX) {
firstCornerPath = sourceY <= targetY ? rightTopCorner(targetX, sourceY, cornerSize) : rightBottomCorner(targetX, sourceY, cornerSize);
} else {
firstCornerPath = sourceY <= targetY ? leftTopCorner(targetX, sourceY, cornerSize) : leftBottomCorner(targetX, sourceY, cornerSize);
}
secondCornerPath = '';
} else if (!leftAndRight.includes(sourcePosition) && leftAndRight.includes(targetPosition)) {
if (sourceX <= targetX) {
firstCornerPath = sourceY <= targetY ? bottomLeftCorner(sourceX, targetY, cornerSize) : topLeftCorner(sourceX, targetY, cornerSize);
} else {
firstCornerPath = sourceY <= targetY ? bottomRightCorner(sourceX, targetY, cornerSize) : topRightCorner(sourceX, targetY, cornerSize);
}
secondCornerPath = '';
}
return "M ".concat(sourceX, ",").concat(sourceY).concat(firstCornerPath).concat(secondCornerPath, "L ").concat(targetX, ",").concat(targetY);
}
var SmoothStepEdge = /*#__PURE__*/memo(function (_ref2) {
var sourceX = _ref2.sourceX,
sourceY = _ref2.sourceY,
targetX = _ref2.targetX,
targetY = _ref2.targetY,
label = _ref2.label,
labelStyle = _ref2.labelStyle,
labelShowBg = _ref2.labelShowBg,
labelBgStyle = _ref2.labelBgStyle,
labelBgPadding = _ref2.labelBgPadding,
labelBgBorderRadius = _ref2.labelBgBorderRadius,
style = _ref2.style,
_ref2$sourcePosition = _ref2.sourcePosition,
sourcePosition = _ref2$sourcePosition === void 0 ? Position.Bottom : _ref2$sourcePosition,
_ref2$targetPosition = _ref2.targetPosition,
targetPosition = _ref2$targetPosition === void 0 ? Position.Top : _ref2$targetPosition,
markerEnd = _ref2.markerEnd,
markerStart = _ref2.markerStart,
_ref2$borderRadius = _ref2.borderRadius,
borderRadius = _ref2$borderRadius === void 0 ? 5 : _ref2$borderRadius;
var _getCenter3 = getCenter({
sourceX: sourceX,
sourceY: sourceY,
targetX: targetX,
targetY: targetY,
sourcePosition: sourcePosition,
targetPosition: targetPosition
}),
_getCenter4 = _slicedToArray(_getCenter3, 2),
centerX = _getCenter4[0],
centerY = _getCenter4[1];
var path = getSmoothStepPath({
sourceX: sourceX,
sourceY: sourceY,
sourcePosition: sourcePosition,
targetX: targetX,
targetY: targetY,
targetPosition: targetPosition,
borderRadius: borderRadius
});
return /*#__PURE__*/React.createElement(BaseEdge, {
path: path,
centerX: centerX,
centerY: centerY,
label: label,
labelStyle: labelStyle,
labelShowBg: labelShowBg,
labelBgStyle: labelBgStyle,
labelBgPadding: labelBgPadding,
labelBgBorderRadius: labelBgBorderRadius,
style: style,
markerEnd: markerEnd,
markerStart: markerStart
});
});
function ownKeys$a(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
function _objectSpread$a(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys$a(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys$a(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
var StepEdge = /*#__PURE__*/memo(function (props) {
return /*#__PURE__*/React.createElement(SmoothStepEdge, _objectSpread$a(_objectSpread$a({}, props), {}, {
borderRadius: 0
}));
});
var StraightEdge = /*#__PURE__*/memo(function (_ref) {
var sourceX = _ref.sourceX,
sourceY = _ref.sourceY,
targetX = _ref.targetX,
targetY = _ref.targetY,
label = _ref.label,
labelStyle = _ref.labelStyle,
labelShowBg = _ref.labelShowBg,
labelBgStyle = _ref.labelBgStyle,
labelBgPadding = _ref.labelBgPadding,
labelBgBorderRadius = _ref.labelBgBorderRadius,
style = _ref.style,
markerEnd = _ref.markerEnd,
markerStart = _ref.markerStart;
var yOffset = Math.abs(targetY - sourceY) / 2;
var centerY = targetY < sourceY ? targetY + yOffset : targetY - yOffset;
var xOffset = Math.abs(targetX - sourceX) / 2;
var centerX = targetX < sourceX ? targetX + xOffset : targetX - xOffset;
var path = "M ".concat(sourceX, ",").concat(sourceY, "L ").concat(targetX, ",").concat(targetY);
return /*#__PURE__*/React.createElement(BaseEdge, {
path: path,
centerX: centerX,
centerY: centerY,
label: label,
labelStyle: labelStyle,
labelShowBg: labelShowBg,
labelBgStyle: labelBgStyle,
labelBgPadding: labelBgPadding,
labelBgBorderRadius: labelBgBorderRadius,
style: style,
markerEnd: markerEnd,
markerStart: markerStart
});
});
function calculateControlOffset(distance, curvature) {
if (distance >= 0) {
return 0.5 * distance;
} else {
return curvature * 25 * Math.sqrt(-distance);
}
}
function getControlWithCurvature(_ref) {
var pos = _ref.pos,
x1 = _ref.x1,
y1 = _ref.y1,
x2 = _ref.x2,
y2 = _ref.y2,
c = _ref.c;
var ctX, ctY;
switch (pos) {
case Position.Left:
{
ctX = x1 - calculateControlOffset(x1 - x2, c);
ctY = y1;
}
break;
case Position.Right:
{
ctX = x1 + calculateControlOffset(x2 - x1, c);
ctY = y1;
}
break;
case Position.Top:
{
ctX = x1;
ctY = y1 - calculateControlOffset(y1 - y2, c);
}
break;
case Position.Bottom:
{
ctX = x1;
ctY = y1 + calculateControlOffset(y2 - y1, c);
}
break;
}
return [ctX, ctY];
}
function getBezierPath(_ref2) {
var sourceX = _ref2.sourceX,
sourceY = _ref2.sourceY,
_ref2$sourcePosition = _ref2.sourcePosition,
sourcePosition = _ref2$sourcePosition === void 0 ? Position.Bottom : _ref2$sourcePosition,
targetX = _ref2.targetX,
targetY = _ref2.targetY,
_ref2$targetPosition = _ref2.targetPosition,
targetPosition = _ref2$targetPosition === void 0 ? Position.Top : _ref2$targetPosition,
_ref2$curvature = _ref2.curvature,
curvature = _ref2$curvature === void 0 ? 0.25 : _ref2$curvature;
var _getControlWithCurvat = getControlWithCurvature({
pos: sourcePosition,
x1: sourceX,
y1: sourceY,
x2: targetX,
y2: targetY,
c: curvature
}),
_getControlWithCurvat2 = _slicedToArray(_getControlWithCurvat, 2),
sourceControlX = _getControlWithCurvat2[0],
sourceControlY = _getControlWithCurvat2[1];
var _getControlWithCurvat3 = getControlWithCurvature({
pos: targetPosition,
x1: targetX,
y1: targetY,
x2: sourceX,
y2: sourceY,
c: curvature
}),
_getControlWithCurvat4 = _slicedToArray(_getControlWithCurvat3, 2),
targetControlX = _getControlWithCurvat4[0],
targetControlY = _getControlWithCurvat4[1];
return "M".concat(sourceX, ",").concat(sourceY, " C").concat(sourceControlX, ",").concat(sourceControlY, " ").concat(targetControlX, ",").concat(targetControlY, " ").concat(targetX, ",").concat(targetY);
} // @TODO: this function will recalculate the control points
// one option is to let getXXXPath() return center points
// but will introduce breaking changes
// the getCenter() of other types of edges might need to change, too
function getBezierCenter(_ref3) {
var sourceX = _ref3.sourceX,
sourceY = _ref3.sourceY,
_ref3$sourcePosition = _ref3.sourcePosition,
sourcePosition = _ref3$sourcePosition === void 0 ? Position.Bottom : _ref3$sourcePosition,
targetX = _ref3.targetX,
targetY = _ref3.targetY,
_ref3$targetPosition = _ref3.targetPosition,
targetPosition = _ref3$targetPosition === void 0 ? Position.Top : _ref3$targetPosition,
_ref3$curvature = _ref3.curvature,
curvature = _ref3$curvature === void 0 ? 0.25 : _ref3$curvature;
var _getControlWithCurvat5 = getControlWithCurvature({
pos: sourcePosition,
x1: sourceX,
y1: sourceY,
x2: targetX,
y2: targetY,
c: curvature
}),
_getControlWithCurvat6 = _slicedToArray(_getControlWithCurvat5, 2),
sourceControlX = _getControlWithCurvat6[0],
sourceControlY = _getControlWithCurvat6[1];
var _getControlWithCurvat7 = getControlWithCurvature({
pos: targetPosition,
x1: targetX,
y1: targetY,
x2: sourceX,
y2: sourceY,
c: curvature
}),
_getControlWithCurvat8 = _slicedToArray(_getControlWithCurvat7, 2),
targetControlX = _getControlWithCurvat8[0],
targetControlY = _getControlWithCurvat8[1]; // cubic bezier t=0.5 mid point, not the actual mid point, but easy to calculate
// https://stackoverflow.com/questions/67516101/how-to-find-distance-mid-point-of-bezier-curve
var centerX = sourceX * 0.125 + sourceControlX * 0.375 + targetControlX * 0.375 + targetX * 0.125;
var centerY = sourceY * 0.125 + sourceControlY * 0.375 + targetControlY * 0.375 + targetY * 0.125;
var xOffset = Math.abs(centerX - sourceX);
var yOffset = Math.abs(centerY - sourceY);
return [centerX, centerY, xOffset, yOffset];
}
var BezierEdge = /*#__PURE__*/memo(function (_ref4) {
var sourceX = _ref4.sourceX,
sourceY = _ref4.sourceY,
targetX = _ref4.targetX,
targetY = _ref4.targetY,
_ref4$sourcePosition = _ref4.sourcePosition,
sourcePosition = _ref4$sourcePosition === void 0 ? Position.Bottom : _ref4$sourcePosition,
_ref4$targetPosition = _ref4.targetPosition,
targetPosition = _ref4$targetPosition === void 0 ? Position.Top : _ref4$targetPosition,
label = _ref4.label,
labelStyle = _ref4.labelStyle,
labelShowBg = _ref4.labelShowBg,
labelBgStyle = _ref4.labelBgStyle,
labelBgPadding = _ref4.labelBgPadding,
labelBgBorderRadius = _ref4.labelBgBorderRadius,
style = _ref4.style,
markerEnd = _ref4.markerEnd,
markerStart = _ref4.markerStart,
curvature = _ref4.curvature;
var params = {
sourceX: sourceX,
sourceY: sourceY,
sourcePosition: sourcePosition,
targetX: targetX,
targetY: targetY,
targetPosition: targetPosition,
curvature: curvature
};
var path = getBezierPath(params);
var _getBezierCenter = getBezierCenter(params),
_getBezierCenter2 = _slicedToArray(_getBezierCenter, 2),
centerX = _getBezierCenter2[0],
centerY = _getBezierCenter2[1];
return /*#__PURE__*/React.createElement(BaseEdge, {
path: path,
centerX: centerX,
centerY: centerY,
label: label,
labelStyle: labelStyle,
labelShowBg: labelShowBg,
labelBgStyle: labelBgStyle,
labelBgPadding: labelBgPadding,
labelBgBorderRadius: labelBgBorderRadius,
style: style,
markerEnd: markerEnd,
markerStart: markerStart
});
});
var NodeIdContext = /*#__PURE__*/createContext(null);
var Provider = NodeIdContext.Provider;
NodeIdContext.Consumer;
function checkElementBelowIsValid(event, connectionMode, isTarget, nodeId, handleId, isValidConnection, doc) {
var elementBelow = doc.elementFromPoint(event.clientX, event.clientY);
var elementBelowIsTarget = (elementBelow === null || elementBelow === void 0 ? void 0 : elementBelow.classList.contains('target')) || false;
var elementBelowIsSource = (elementBelow === null || elementBelow === void 0 ? void 0 : elementBelow.classList.contains('source')) || false;
var result = {
elementBelow: elementBelow,
isValid: false,
connection: {
source: null,
target: null,
sourceHandle: null,
targetHandle: null
},
isHoveringHandle: false
};
if (elementBelow && (elementBelowIsTarget || elementBelowIsSource)) {
result.isHoveringHandle = true;
var elementBelowNodeId = elementBelow.getAttribute('data-nodeid');
var elementBelowHandleId = elementBelow.getAttribute('data-handleid');
var connection = isTarget ? {
source: elementBelowNodeId,
sourceHandle: elementBelowHandleId,
target: nodeId,
targetHandle: handleId
} : {
source: nodeId,
sourceHandle: handleId,
target: elementBelowNodeId,
targetHandle: elementBelowHandleId
};
result.connection = connection; // in strict mode we don't allow target to target or source to source connections
var isValid = connectionMode === ConnectionMode.Strict ? isTarget && elementBelowIsSource || !isTarget && elementBelowIsTarget : true;
if (isValid) {
result.isValid = isValidConnection(connection);
}
}
return result;
}
function resetRecentHandle(hoveredHandle) {
hoveredHandle === null || hoveredHandle === void 0 ? void 0 : hoveredHandle.classList.remove('react-flow__handle-valid');
hoveredHandle === null || hoveredHandle === void 0 ? void 0 : hoveredHandle.classList.remove('react-flow__handle-connecting');
}
function handleMouseDown(_ref) {
var event = _ref.event,
handleId = _ref.handleId,
nodeId = _ref.nodeId,
onConnect = _ref.onConnect,
isTarget = _ref.isTarget,
getState = _ref.getState,
setState = _ref.setState,
isValidConnection = _ref.isValidConnection,
elementEdgeUpdaterType = _ref.elementEdgeUpdaterType,
onEdgeUpdateEnd = _ref.onEdgeUpdateEnd;
var reactFlowNode = event.target.closest('.react-flow'); // when react-flow is used inside a shadow root we can't use document
var doc = getHostForElement(event.target);
if (!doc) {
return;
}
var elementBelow = doc.elementFromPoint(event.clientX, event.clientY);
var elementBelowIsTarget = elementBelow === null || elementBelow === void 0 ? void 0 : elementBelow.classList.contains('target');
var elementBelowIsSource = elementBelow === null || elementBelow === void 0 ? void 0 : elementBelow.classList.contains('source');
if (!reactFlowNode || !elementBelowIsTarget && !elementBelowIsSource && !elementEdgeUpdaterType) {
return;
}
var _getState = getState(),
onConnectStart = _getState.onConnectStart,
connectionMode = _getState.connectionMode;
var handleType = elementEdgeUpdaterType ? elementEdgeUpdaterType : elementBelowIsTarget ? 'target' : 'source';
var containerBounds = reactFlowNode.getBoundingClientRect();
var recentHoveredHandle;
setState({
connectionPosition: {
x: event.clientX - containerBounds.left,
y: event.clientY - containerBounds.top
},
connectionNodeId: nodeId,
connectionHandleId: handleId,
connectionHandleType: handleType
});
onConnectStart === null || onConnectStart === void 0 ? void 0 : onConnectStart(event, {
nodeId: nodeId,
handleId: handleId,
handleType: handleType
});
function onMouseMove(event) {
setState({
connectionPosition: {
x: event.clientX - containerBounds.left,
y: event.clientY - containerBounds.top
}
});
var _checkElementBelowIsV = checkElementBelowIsValid(event, connectionMode, isTarget, nodeId, handleId, isValidConnection, doc),
connection = _checkElementBelowIsV.connection,
elementBelow = _checkElementBelowIsV.elementBelow,
isValid = _checkElementBelowIsV.isValid,
isHoveringHandle = _checkElementBelowIsV.isHoveringHandle;
if (!isHoveringHandle) {
return resetRecentHandle(recentHoveredHandle);
}
if (connection.source !== connection.target && elementBelow) {
resetRecentHandle(recentHoveredHandle);
recentHoveredHandle = elementBelow;
elementBelow.classList.add('react-flow__handle-connecting');
elementBelow.classList.toggle('react-flow__handle-valid', isValid);
}
}
function onMouseUp(event) {
var _getState2 = getState(),
onConnectStop = _getState2.onConnectStop,
onConnectEnd = _getState2.onConnectEnd;
var _checkElementBelowIsV2 = checkElementBelowIsValid(event, connectionMode, isTarget, nodeId, handleId, isValidConnection, doc),
connection = _checkElementBelowIsV2.connection,
isValid = _checkElementBelowIsV2.isValid;
onConnectStop === null || onConnectStop === void 0 ? void 0 : onConnectStop(event);
if (isValid) {
onConnect === null || onConnect === void 0 ? void 0 : onConnect(connection);
}
onConnectEnd === null || onConnectEnd === void 0 ? void 0 : onConnectEnd(event);
if (elementEdgeUpdaterType && onEdgeUpdateEnd) {
onEdgeUpdateEnd(event);
}
resetRecentHandle(recentHoveredHandle);
setState({
connectionNodeId: null,
connectionHandleId: null,
connectionHandleType: null
});
doc.removeEventListener('mousemove', onMouseMove);
doc.removeEventListener('mouseup', onMouseUp);
}
doc.addEventListener('mousemove', onMouseMove);
doc.addEventListener('mouseup', onMouseUp);
}
var _excluded$1 = ["type", "position", "isValidConnection", "isConnectable", "id", "onConnect", "children", "className", "onMouseDown"];
function ownKeys$9(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
function _objectSpread$9(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys$9(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys$9(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
var alwaysValid = function alwaysValid() {
return true;
};
var selector$a = function selector(s) {
return {
connectionStartHandle: s.connectionStartHandle,
connectOnClick: s.connectOnClick
};
};
var Handle = /*#__PURE__*/forwardRef(function (_ref, ref) {
var _ref$type = _ref.type,
type = _ref$type === void 0 ? 'source' : _ref$type,
_ref$position = _ref.position,
position = _ref$position === void 0 ? Position.Top : _ref$position,
_ref$isValidConnectio = _ref.isValidConnection,
isValidConnection = _ref$isValidConnectio === void 0 ? alwaysValid : _ref$isValidConnectio,
_ref$isConnectable = _ref.isConnectable,
isConnectable = _ref$isConnectable === void 0 ? true : _ref$isConnectable,
id = _ref.id,
onConnect = _ref.onConnect,
children = _ref.children,
className = _ref.className,
onMouseDown = _ref.onMouseDown,
rest = _objectWithoutProperties(_ref, _excluded$1);
var store = useStoreApi();
var nodeId = useContext(NodeIdContext);
var _useStore = useStore(selector$a, shallow),
connectionStartHandle = _useStore.connectionStartHandle,
connectOnClick = _useStore.connectOnClick;
var handleId = id || null;
var isTarget = type === 'target';
var onConnectExtended = function onConnectExtended(params) {
var _store$getState = store.getState(),
defaultEdgeOptions = _store$getState.defaultEdgeOptions,
onConnectAction = _store$getState.onConnect,
hasDefaultEdges = _store$getState.hasDefaultEdges;
var edgeParams = _objectSpread$9(_objectSpread$9({}, defaultEdgeOptions), params);
if (hasDefaultEdges) {
var _store$getState2 = store.getState(),
edges = _store$getState2.edges;
store.setState({
edges: addEdge(edgeParams, edges)
});
}
onConnectAction === null || onConnectAction === void 0 ? void 0 : onConnectAction(edgeParams);
onConnect === null || onConnect === void 0 ? void 0 : onConnect(edgeParams);
};
var onMouseDownHandler = function onMouseDownHandler(event) {
if (event.button === 0) {
handleMouseDown({
event: event,
handleId: handleId,
nodeId: nodeId,
onConnect: onConnectExtended,
isTarget: isTarget,
getState: store.getState,
setState: store.setState,
isValidConnection: isValidConnection
});
}
onMouseDown === null || onMouseDown === void 0 ? void 0 : onMouseDown(event);
};
var onClick = function onClick(event) {
var _store$getState3 = store.getState(),
onClickConnectStart = _store$getState3.onClickConnectStart,
onClickConnectStop = _store$getState3.onClickConnectStop,
onClickConnectEnd = _store$getState3.onClickConnectEnd,
connectionMode = _store$getState3.connectionMode;
if (!connectionStartHandle) {
onClickConnectStart === null || onClickConnectStart === void 0 ? void 0 : onClickConnectStart(event, {
nodeId: nodeId,
handleId: handleId,
handleType: type
});
store.setState({
connectionStartHandle: {
nodeId: nodeId,
type: type,
handleId: handleId
}
});
return;
}
var doc = getHostForElement(event.target);
var _checkElementBelowIsV = checkElementBelowIsValid(event, connectionMode, connectionStartHandle.type === 'target', connectionStartHandle.nodeId, connectionStartHandle.handleId || null, isValidConnection, doc),
connection = _checkElementBelowIsV.connection,
isValid = _checkElementBelowIsV.isValid;
onClickConnectStop === null || onClickConnectStop === void 0 ? void 0 : onClickConnectStop(event);
if (isValid) {
onConnectExtended(connection);
}
onClickConnectEnd === null || onClickConnectEnd === void 0 ? void 0 : onClickConnectEnd(event);
store.setState({
connectionStartHandle: null
});
};
return /*#__PURE__*/React.createElement("div", _objectSpread$9({
"data-handleid": handleId,
"data-nodeid": nodeId,
"data-handlepos": position,
className: cc(['react-flow__handle', "react-flow__handle-".concat(position), 'nodrag', className, {
source: !isTarget,
target: isTarget,
connectable: isConnectable,
connecting: (connectionStartHandle === null || connectionStartHandle === void 0 ? void 0 : connectionStartHandle.nodeId) === nodeId && (connectionStartHandle === null || connectionStartHandle === void 0 ? void 0 : connectionStartHandle.handleId) === handleId && (connectionStartHandle === null || connectionStartHandle === void 0 ? void 0 : connectionStartHandle.type) === type
}]),
onMouseDown: onMouseDownHandler,
onClick: connectOnClick ? onClick : undefined,
ref: ref
}, rest), children);
});
Handle.displayName = 'Handle';
var Handle$1 = /*#__PURE__*/memo(Handle);
var DefaultNode = function DefaultNode(_ref) {
var data = _ref.data,
isConnectable = _ref.isConnectable,
_ref$targetPosition = _ref.targetPosition,
targetPosition = _ref$targetPosition === void 0 ? Position.Top : _ref$targetPosition,
_ref$sourcePosition = _ref.sourcePosition,
sourcePosition = _ref$sourcePosition === void 0 ? Position.Bottom : _ref$sourcePosition;
return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(Handle$1, {
type: "target",
position: targetPosition,
isConnectable: isConnectable
}), data === null || data === void 0 ? void 0 : data.label, /*#__PURE__*/React.createElement(Handle$1, {
type: "source",
position: sourcePosition,
isConnectable: isConnectable
}));
};
DefaultNode.displayName = 'DefaultNode';
var DefaultNode$1 = /*#__PURE__*/memo(DefaultNode);
var InputNode = function InputNode(_ref) {
var data = _ref.data,
isConnectable = _ref.isConnectable,
_ref$sourcePosition = _ref.sourcePosition,
sourcePosition = _ref$sourcePosition === void 0 ? Position.Bottom : _ref$sourcePosition;
return /*#__PURE__*/React.createElement(React.Fragment, null, data === null || data === void 0 ? void 0 : data.label, /*#__PURE__*/React.createElement(Handle$1, {
type: "source",
position: sourcePosition,
isConnectable: isConnectable
}));
};
InputNode.displayName = 'InputNode';
var InputNode$1 = /*#__PURE__*/memo(InputNode);
var OutputNode = function OutputNode(_ref) {
var data = _ref.data,
isConnectable = _ref.isConnectable,
_ref$targetPosition = _ref.targetPosition,
targetPosition = _ref$targetPosition === void 0 ? Position.Top : _ref$targetPosition;
return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(Handle$1, {
type: "target",
position: targetPosition,
isConnectable: isConnectable
}), data === null || data === void 0 ? void 0 : data.label);
};
OutputNode.displayName = 'OutputNode';
var OutputNode$1 = /*#__PURE__*/memo(OutputNode);
var selector$9 = function selector(s) {
return {
selectedNodes: Array.from(s.nodeInternals.values()).filter(function (n) {
return n.selected;
}),
selectedEdges: s.edges.filter(function (e) {
return e.selected;
})
};
};
var areEqual = function areEqual(objA, objB) {
var selectedNodeIdsA = objA.selectedNodes.map(function (n) {
return n.id;
});
var selectedNodeIdsB = objB.selectedNodes.map(function (n) {
return n.id;
});
var selectedEdgeIdsA = objA.selectedEdges.map(function (e) {
return e.id;
});
var selectedEdgeIdsB = objB.selectedEdges.map(function (e) {
return e.id;
});
return shallow(selectedNodeIdsA, selectedNodeIdsB) && shallow(selectedEdgeIdsA, selectedEdgeIdsB);
}; // This is just a helper component for calling the onSelectionChange listener.
// @TODO: Now that we have the onNodesChange and on EdgesChange listeners, do we still need this component?
function SelectionListener(_ref) {
var onSelectionChange = _ref.onSelectionChange;
var _useStore = useStore(selector$9, areEqual),
selectedNodes = _useStore.selectedNodes,
selectedEdges = _useStore.selectedEdges;
useEffect(function () {
onSelectionChange({
nodes: selectedNodes,
edges: selectedEdges
});
}, [selectedNodes, selectedEdges]);
return null;
}
var SelectionListener$1 = /*#__PURE__*/memo(SelectionListener);
var selector$8 = function selector(s) {
return {
setNodes: s.setNodes,
setEdges: s.setEdges,
setDefaultNodesAndEdges: s.setDefaultNodesAndEdges,
setMinZoom: s.setMinZoom,
setMaxZoom: s.setMaxZoom,
setTranslateExtent: s.setTranslateExtent,
setNodeExtent: s.setNodeExtent,
reset: s.reset
};
};
function useStoreUpdater(value, setStoreState) {
useEffect(function () {
if (typeof value !== 'undefined') {
setStoreState(value);
}
}, [value]);
}
function useDirectStoreUpdater(key, value, setState) {
useEffect(function () {
if (typeof value !== 'undefined') {
// @ts-ignore
setState(_defineProperty({}, key, value));
}
}, [value]);
}
var StoreUpdater = function StoreUpdater(_ref) {
var nodes = _ref.nodes,
edges = _ref.edges,
defaultNodes = _ref.defaultNodes,
defaultEdges = _ref.defaultEdges,
onConnect = _ref.onConnect,
onConnectStart = _ref.onConnectStart,
onConnectStop = _ref.onConnectStop,
onConnectEnd = _ref.onConnectEnd,
onClickConnectStart = _ref.onClickConnectStart,
onClickConnectStop = _ref.onClickConnectStop,
onClickConnectEnd = _ref.onClickConnectEnd,
nodesDraggable = _ref.nodesDraggable,
nodesConnectable = _ref.nodesConnectable,
minZoom = _ref.minZoom,
maxZoom = _ref.maxZoom,
nodeExtent = _ref.nodeExtent,
onNodesChange = _ref.onNodesChange,
onEdgesChange = _ref.onEdgesChange,
elementsSelectable = _ref.elementsSelectable,
connectionMode = _ref.connectionMode,
snapGrid = _ref.snapGrid,
snapToGrid = _ref.snapToGrid,
translateExtent = _ref.translateExtent,
connectOnClick = _ref.connectOnClick,
defaultEdgeOptions = _ref.defaultEdgeOptions,
fitView = _ref.fitView,
fitViewOptions = _ref.fitViewOptions,
onNodesDelete = _ref.onNodesDelete,
onEdgesDelete = _ref.onEdgesDelete,
onNodeDrag = _ref.onNodeDrag,
onNodeDragStart = _ref.onNodeDragStart,
onNodeDragStop = _ref.onNodeDragStop,
onSelectionDrag = _ref.onSelectionDrag,
onSelectionDragStart = _ref.onSelectionDragStart,
onSelectionDragStop = _ref.onSelectionDragStop;
var _useStore = useStore(selector$8, shallow),
setNodes = _useStore.setNodes,
setEdges = _useStore.setEdges,
setDefaultNodesAndEdges = _useStore.setDefaultNodesAndEdges,
setMinZoom = _useStore.setMinZoom,
setMaxZoom = _useStore.setMaxZoom,
setTranslateExtent = _useStore.setTranslateExtent,
setNodeExtent = _useStore.setNodeExtent,
reset = _useStore.reset;
var store = useStoreApi();
useEffect(function () {
setDefaultNodesAndEdges(defaultNodes, defaultEdges);
return function () {
reset();
};
}, []);
useDirectStoreUpdater('defaultEdgeOptions', defaultEdgeOptions, store.setState);
useDirectStoreUpdater('connectionMode', connectionMode, store.setState);
useDirectStoreUpdater('onConnect', onConnect, store.setState);
useDirectStoreUpdater('onConnectStart', onConnectStart, store.setState);
useDirectStoreUpdater('onConnectStop', onConnectStop, store.setState);
useDirectStoreUpdater('onConnectEnd', onConnectEnd, store.setState);
useDirectStoreUpdater('onClickConnectStart', onClickConnectStart, store.setState);
useDirectStoreUpdater('onClickConnectStop', onClickConnectStop, store.setState);
useDirectStoreUpdater('onClickConnectEnd', onClickConnectEnd, store.setState);
useDirectStoreUpdater('nodesDraggable', nodesDraggable, store.setState);
useDirectStoreUpdater('nodesConnectable', nodesConnectable, store.setState);
useDirectStoreUpdater('elementsSelectable', elementsSelectable, store.setState);
useDirectStoreUpdater('snapToGrid', snapToGrid, store.setState);
useDirectStoreUpdater('snapGrid', snapGrid, store.setState);
useDirectStoreUpdater('onNodesChange', onNodesChange, store.setState);
useDirectStoreUpdater('onEdgesChange', onEdgesChange, store.setState);
useDirectStoreUpdater('connectOnClick', connectOnClick, store.setState);
useDirectStoreUpdater('fitViewOnInit', fitView, store.setState);
useDirectStoreUpdater('fitViewOnInitOptions', fitViewOptions, store.setState);
useDirectStoreUpdater('onNodesDelete', onNodesDelete, store.setState);
useDirectStoreUpdater('onEdgesDelete', onEdgesDelete, store.setState);
useDirectStoreUpdater('onNodeDrag', onNodeDrag, store.setState);
useDirectStoreUpdater('onNodeDragStart', onNodeDragStart, store.setState);
useDirectStoreUpdater('onNodeDragStop', onNodeDragStop, store.setState);
useDirectStoreUpdater('onSelectionDrag', onSelectionDrag, store.setState);
useDirectStoreUpdater('onSelectionDragStart', onSelectionDragStart, store.setState);
useDirectStoreUpdater('onSelectionDragStop', onSelectionDragStop, store.setState);
useStoreUpdater(nodes, setNodes);
useStoreUpdater(edges, setEdges);
useStoreUpdater(defaultNodes, setNodes);
useStoreUpdater(defaultEdges, setEdges);
useStoreUpdater(minZoom, setMinZoom);
useStoreUpdater(maxZoom, setMaxZoom);
useStoreUpdater(translateExtent, setTranslateExtent);
useStoreUpdater(nodeExtent, setNodeExtent);
return null;
};
var css_248z$1 = ".react-flow{height:100%;overflow:hidden;position:relative;width:100%}.react-flow__container{height:100%;left:0;position:absolute;top:0;width:100%}.react-flow__pane{z-index:1}.react-flow__viewport{pointer-events:none;transform-origin:0 0;z-index:2}.react-flow__renderer{z-index:4}.react-flow__selectionpane{z-index:5}.react-flow .react-flow__edges{overflow:visible;pointer-events:none}.react-flow .react-flow__connectionline{z-index:1001}.react-flow__edge{pointer-events:visibleStroke}.react-flow__edge.inactive{pointer-events:none}@-webkit-keyframes dashdraw{0%{stroke-dashoffset:10}}@keyframes dashdraw{0%{stroke-dashoffset:10}}.react-flow__edge-path{fill:none}.react-flow__edge-textwrapper{pointer-events:all}.react-flow__edge-text{pointer-events:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.react-flow__connection{pointer-events:none}.react-flow__connection .animated{stroke-dasharray:5;-webkit-animation:dashdraw .5s linear infinite;animation:dashdraw .5s linear infinite}.react-flow__connection-path{fill:none}.react-flow__nodes{pointer-events:none;transform-origin:0 0}.react-flow__node{box-sizing:border-box;pointer-events:all;position:absolute;transform-origin:0 0;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.react-flow__nodesselection{pointer-events:none;transform-origin:left top;z-index:3}.react-flow__nodesselection-rect{cursor:-webkit-grab;cursor:grab;pointer-events:all;position:absolute}.react-flow__handle{pointer-events:none;position:absolute}.react-flow__handle.connectable{pointer-events:all}.react-flow__handle-bottom{bottom:-4px;left:50%;top:auto;transform:translate(-50%)}.react-flow__handle-top{left:50%;top:-4px;transform:translate(-50%)}.react-flow__handle-left{left:-4px;top:50%;transform:translateY(-50%)}.react-flow__handle-right{right:-4px;top:50%;transform:translateY(-50%)}.react-flow__edgeupdater{cursor:move;pointer-events:all}.react-flow__controls{bottom:20px;left:15px;position:absolute;z-index:5}.react-flow__controls-button{border:none;height:24px;width:24px}.react-flow__controls-button svg{width:100%}.react-flow__minimap{bottom:20px;position:absolute;right:15px;z-index:5}.react-flow__attribution{background:hsla(0,0%,100%,.5);color:#999;font-size:10px;padding:2px 3px;position:absolute;z-index:1000}.react-flow__attribution a{color:#555;text-decoration:none}.react-flow__attribution.top{top:0}.react-flow__attribution.bottom{bottom:0}.react-flow__attribution.left{left:0}.react-flow__attribution.right{right:0}.react-flow__attribution.center{left:50%;transform:translateX(-50%)}";
var css = css_248z$1;
var css_248z = ".react-flow__edge.selected .react-flow__edge-path{stroke:#555}.react-flow__edge.animated path{stroke-dasharray:5;-webkit-animation:dashdraw .5s linear infinite;animation:dashdraw .5s linear infinite}.react-flow__edge.updating .react-flow__edge-path{stroke:#777}.react-flow__edge-path{stroke:#b1b1b7;stroke-width:1}.react-flow__edge-text{font-size:10px}.react-flow__edge-textbg{fill:#fff}.react-flow__connection-path{stroke:#b1b1b7;stroke-width:1}.react-flow__node{cursor:-webkit-grab;cursor:grab}.react-flow__node-default,.react-flow__node-group,.react-flow__node-input,.react-flow__node-output{background:#fff;border:1px solid #1a192b;border-radius:3px;color:#222;font-size:12px;padding:10px;text-align:center;width:150px}.react-flow__node-default.selected,.react-flow__node-group.selected,.react-flow__node-input.selected,.react-flow__node-output.selected{box-shadow:0 0 0 .5px #1a192b}.react-flow__node-default .react-flow__handle,.react-flow__node-group .react-flow__handle,.react-flow__node-input .react-flow__handle,.react-flow__node-output .react-flow__handle{background:#1a192b}.react-flow__node-default.selectable:hover,.react-flow__node-group.selectable:hover,.react-flow__node-input.selectable:hover,.react-flow__node-output.selectable:hover{box-shadow:0 1px 4px 1px rgba(0,0,0,.08)}.react-flow__node-default.selectable.selected,.react-flow__node-group.selectable.selected,.react-flow__node-input.selectable.selected,.react-flow__node-output.selectable.selected{box-shadow:0 0 0 .5px #1a192b}.react-flow__node-group{background:hsla(0,0%,94%,.25);border-color:#1a192b}.react-flow__nodesselection-rect,.react-flow__selection{background:rgba(0,89,220,.08);border:1px dotted rgba(0,89,220,.8)}.react-flow__handle{background:#555;border:1px solid #fff;border-radius:100%;height:6px;width:6px}.react-flow__handle.connectable{cursor:crosshair}.react-flow__minimap{background-color:#fff}.react-flow__controls{box-shadow:0 0 2px 1px rgba(0,0,0,.08)}.react-flow__controls-button{align-items:center;background:#fefefe;border-bottom:1px solid #eee;box-sizing:content-box;cursor:pointer;display:flex;height:16px;justify-content:center;padding:5px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;width:16px}.react-flow__controls-button svg{max-height:12px;max-width:12px}.react-flow__controls-button:hover{background:#f4f4f4}";
var theme = css_248z;
var shiftX = function shiftX(x, shift, position) {
if (position === Position.Left) return x - shift;
if (position === Position.Right) return x + shift;
return x;
};
var shiftY = function shiftY(y, shift, position) {
if (position === Position.Top) return y - shift;
if (position === Position.Bottom) return y + shift;
return y;
};
var EdgeAnchor = function EdgeAnchor(_ref) {
var className = _ref.className,
position = _ref.position,
centerX = _ref.centerX,
centerY = _ref.centerY,
_ref$radius = _ref.radius,
radius = _ref$radius === void 0 ? 10 : _ref$radius;
return /*#__PURE__*/React.createElement("circle", {
className: cc(['react-flow__edgeupdater', className]),
cx: shiftX(centerX, radius, position),
cy: shiftY(centerY, radius, position),
r: radius,
stroke: "transparent",
fill: "transparent"
});
};
var wrapEdge = (function (EdgeComponent) {
var EdgeWrapper = function EdgeWrapper(_ref) {
var id = _ref.id,
className = _ref.className,
type = _ref.type,
data = _ref.data,
onClick = _ref.onClick,
onEdgeDoubleClick = _ref.onEdgeDoubleClick,
selected = _ref.selected,
animated = _ref.animated,
label = _ref.label,
labelStyle = _ref.labelStyle,
labelShowBg = _ref.labelShowBg,
labelBgStyle = _ref.labelBgStyle,
labelBgPadding = _ref.labelBgPadding,
labelBgBorderRadius = _ref.labelBgBorderRadius,
style = _ref.style,
source = _ref.source,
target = _ref.target,
sourceX = _ref.sourceX,
sourceY = _ref.sourceY,
targetX = _ref.targetX,
targetY = _ref.targetY,
sourcePosition = _ref.sourcePosition,
targetPosition = _ref.targetPosition,
elementsSelectable = _ref.elementsSelectable,
hidden = _ref.hidden,
sourceHandleId = _ref.sourceHandleId,
targetHandleId = _ref.targetHandleId,
onContextMenu = _ref.onContextMenu,
onMouseEnter = _ref.onMouseEnter,
onMouseMove = _ref.onMouseMove,
onMouseLeave = _ref.onMouseLeave,
edgeUpdaterRadius = _ref.edgeUpdaterRadius,
onEdgeUpdate = _ref.onEdgeUpdate,
onEdgeUpdateStart = _ref.onEdgeUpdateStart,
onEdgeUpdateEnd = _ref.onEdgeUpdateEnd,
markerEnd = _ref.markerEnd,
markerStart = _ref.markerStart,
rfId = _ref.rfId;
var _useState = useState(false),
_useState2 = _slicedToArray(_useState, 2),
updating = _useState2[0],
setUpdating = _useState2[1];
var store = useStoreApi();
var onEdgeClick = function onEdgeClick(event) {
var _store$getState = store.getState(),
edges = _store$getState.edges,
addSelectedEdges = _store$getState.addSelectedEdges;
var edge = edges.find(function (e) {
return e.id === id;
});
if (elementsSelectable) {
store.setState({
nodesSelectionActive: false
});
addSelectedEdges([id]);
}
onClick === null || onClick === void 0 ? void 0 : onClick(event, edge);
};
var onEdgeDoubleClickHandler = getMouseHandler(id, store.getState, onEdgeDoubleClick);
var onEdgeContextMenu = getMouseHandler(id, store.getState, onContextMenu);
var onEdgeMouseEnter = getMouseHandler(id, store.getState, onMouseEnter);
var onEdgeMouseMove = getMouseHandler(id, store.getState, onMouseMove);
var onEdgeMouseLeave = getMouseHandler(id, store.getState, onMouseLeave);
var handleEdgeUpdater = function handleEdgeUpdater(event, isSourceHandle) {
var nodeId = isSourceHandle ? target : source;
var handleId = (isSourceHandle ? targetHandleId : sourceHandleId) || null;
var handleType = isSourceHandle ? 'target' : 'source';
var isValidConnection = function isValidConnection() {
return true;
};
var isTarget = isSourceHandle;
var edge = store.getState().edges.find(function (e) {
return e.id === id;
});
onEdgeUpdateStart === null || onEdgeUpdateStart === void 0 ? void 0 : onEdgeUpdateStart(event, edge, handleType);
var _onEdgeUpdateEnd = onEdgeUpdateEnd ? function (evt) {
return onEdgeUpdateEnd(evt, edge, handleType);
} : undefined;
var onConnectEdge = function onConnectEdge(connection) {
return onEdgeUpdate === null || onEdgeUpdate === void 0 ? void 0 : onEdgeUpdate(edge, connection);
};
handleMouseDown({
event: event,
handleId: handleId,
nodeId: nodeId,
onConnect: onConnectEdge,
isTarget: isTarget,
getState: store.getState,
setState: store.setState,
isValidConnection: isValidConnection,
elementEdgeUpdaterType: handleType,
onEdgeUpdateEnd: _onEdgeUpdateEnd
});
};
var onEdgeUpdaterSourceMouseDown = function onEdgeUpdaterSourceMouseDown(event) {
return handleEdgeUpdater(event, true);
};
var onEdgeUpdaterTargetMouseDown = function onEdgeUpdaterTargetMouseDown(event) {
return handleEdgeUpdater(event, false);
};
var onEdgeUpdaterMouseEnter = function onEdgeUpdaterMouseEnter() {
return setUpdating(true);
};
var onEdgeUpdaterMouseOut = function onEdgeUpdaterMouseOut() {
return setUpdating(false);
};
var markerStartUrl = useMemo(function () {
return "url(#".concat(getMarkerId(markerStart, rfId), ")");
}, [markerStart, rfId]);
var markerEndUrl = useMemo(function () {
return "url(#".concat(getMarkerId(markerEnd, rfId), ")");
}, [markerEnd, rfId]);
if (hidden) {
return null;
}
var inactive = !elementsSelectable && !onClick;
var handleEdgeUpdate = typeof onEdgeUpdate !== 'undefined';
var edgeClasses = cc(['react-flow__edge', "react-flow__edge-".concat(type), className, {
selected: selected,
animated: animated,
inactive: inactive,
updating: updating
}]);
return /*#__PURE__*/React.createElement("g", {
className: edgeClasses,
onClick: onEdgeClick,
onDoubleClick: onEdgeDoubleClickHandler,
onContextMenu: onEdgeContextMenu,
onMouseEnter: onEdgeMouseEnter,
onMouseMove: onEdgeMouseMove,
onMouseLeave: onEdgeMouseLeave
}, /*#__PURE__*/React.createElement(EdgeComponent, {
id: id,
source: source,
target: target,
selected: selected,
animated: animated,
label: label,
labelStyle: labelStyle,
labelShowBg: labelShowBg,
labelBgStyle: labelBgStyle,
labelBgPadding: labelBgPadding,
labelBgBorderRadius: labelBgBorderRadius,
data: data,
style: style,
sourceX: sourceX,
sourceY: sourceY,
targetX: targetX,
targetY: targetY,
sourcePosition: sourcePosition,
targetPosition: targetPosition,
sourceHandleId: sourceHandleId,
targetHandleId: targetHandleId,
markerStart: markerStartUrl,
markerEnd: markerEndUrl,
"data-testid": "rf__edge-".concat(id)
}), handleEdgeUpdate && /*#__PURE__*/React.createElement("g", {
onMouseDown: onEdgeUpdaterSourceMouseDown,
onMouseEnter: onEdgeUpdaterMouseEnter,
onMouseOut: onEdgeUpdaterMouseOut
}, /*#__PURE__*/React.createElement(EdgeAnchor, {
position: sourcePosition,
centerX: sourceX,
centerY: sourceY,
radius: edgeUpdaterRadius
})), handleEdgeUpdate && /*#__PURE__*/React.createElement("g", {
onMouseDown: onEdgeUpdaterTargetMouseDown,
onMouseEnter: onEdgeUpdaterMouseEnter,
onMouseOut: onEdgeUpdaterMouseOut
}, /*#__PURE__*/React.createElement(EdgeAnchor, {
position: targetPosition,
centerX: targetX,
centerY: targetY,
radius: edgeUpdaterRadius
})));
};
EdgeWrapper.displayName = 'EdgeWrapper';
return /*#__PURE__*/memo(EdgeWrapper);
});
function ownKeys$8(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
function _objectSpread$8(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys$8(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys$8(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
function createEdgeTypes(edgeTypes) {
var standardTypes = {
"default": wrapEdge(edgeTypes["default"] || BezierEdge),
straight: wrapEdge(edgeTypes.bezier || StraightEdge),
step: wrapEdge(edgeTypes.step || StepEdge),
smoothstep: wrapEdge(edgeTypes.step || SmoothStepEdge),
simplebezier: wrapEdge(edgeTypes.simplebezier || SimpleBezierEdge)
};
var wrappedTypes = {};
var specialTypes = Object.keys(edgeTypes).filter(function (k) {
return !['default', 'bezier'].includes(k);
}).reduce(function (res, key) {
res[key] = wrapEdge(edgeTypes[key] || BezierEdge);
return res;
}, wrappedTypes);
return _objectSpread$8(_objectSpread$8({}, standardTypes), specialTypes);
}
function getHandlePosition(position, nodeRect) {
var handle = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;
var x = ((handle === null || handle === void 0 ? void 0 : handle.x) || 0) + nodeRect.x;
var y = ((handle === null || handle === void 0 ? void 0 : handle.y) || 0) + nodeRect.y;
var width = (handle === null || handle === void 0 ? void 0 : handle.width) || nodeRect.width;
var height = (handle === null || handle === void 0 ? void 0 : handle.height) || nodeRect.height;
switch (position) {
case Position.Top:
return {
x: x + width / 2,
y: y
};
case Position.Right:
return {
x: x + width,
y: y + height / 2
};
case Position.Bottom:
return {
x: x + width / 2,
y: y + height
};
case Position.Left:
return {
x: x,
y: y + height / 2
};
}
}
function getHandle(bounds, handleId) {
if (!bounds) {
return null;
} // there is no handleId when there are no multiple handles/ handles with ids
// so we just pick the first one
var handle = null;
if (bounds.length === 1 || !handleId) {
handle = bounds[0];
} else if (handleId) {
handle = bounds.find(function (d) {
return d.id === handleId;
});
}
return typeof handle === 'undefined' ? null : handle;
}
var getEdgePositions = function getEdgePositions(sourceNodeRect, sourceHandle, sourcePosition, targetNodeRect, targetHandle, targetPosition) {
var sourceHandlePos = getHandlePosition(sourcePosition, sourceNodeRect, sourceHandle);
var targetHandlePos = getHandlePosition(targetPosition, targetNodeRect, targetHandle);
return {
sourceX: sourceHandlePos.x,
sourceY: sourceHandlePos.y,
targetX: targetHandlePos.x,
targetY: targetHandlePos.y
};
};
function isEdgeVisible(_ref) {
var sourcePos = _ref.sourcePos,
targetPos = _ref.targetPos,
sourceWidth = _ref.sourceWidth,
sourceHeight = _ref.sourceHeight,
targetWidth = _ref.targetWidth,
targetHeight = _ref.targetHeight,
width = _ref.width,
height = _ref.height,
transform = _ref.transform;
var edgeBox = {
x: Math.min(sourcePos.x, targetPos.x),
y: Math.min(sourcePos.y, targetPos.y),
x2: Math.max(sourcePos.x + sourceWidth, targetPos.x + targetWidth),
y2: Math.max(sourcePos.y + sourceHeight, targetPos.y + targetHeight)
};
if (edgeBox.x === edgeBox.x2) {
edgeBox.x2 += 1;
}
if (edgeBox.y === edgeBox.y2) {
edgeBox.y2 += 1;
}
var viewBox = rectToBox({
x: (0 - transform[0]) / transform[2],
y: (0 - transform[1]) / transform[2],
width: width / transform[2],
height: height / transform[2]
});
var xOverlap = Math.max(0, Math.min(viewBox.x2, edgeBox.x2) - Math.max(viewBox.x, edgeBox.x));
var yOverlap = Math.max(0, Math.min(viewBox.y2, edgeBox.y2) - Math.max(viewBox.y, edgeBox.y));
var overlappingArea = Math.ceil(xOverlap * yOverlap);
return overlappingArea > 0;
}
function getNodeData(nodeInternals, nodeId) {
var _node$internalsSymbol, _node$positionAbsolut, _node$positionAbsolut2, _node$positionAbsolut3, _node$positionAbsolut4;
var node = nodeInternals.get(nodeId);
var handleBounds = (node === null || node === void 0 ? void 0 : (_node$internalsSymbol = node[internalsSymbol]) === null || _node$internalsSymbol === void 0 ? void 0 : _node$internalsSymbol.handleBounds) || null;
var isInvalid = !node || !handleBounds || !node.width || !node.height || typeof ((_node$positionAbsolut = node.positionAbsolute) === null || _node$positionAbsolut === void 0 ? void 0 : _node$positionAbsolut.x) === 'undefined' || typeof ((_node$positionAbsolut2 = node.positionAbsolute) === null || _node$positionAbsolut2 === void 0 ? void 0 : _node$positionAbsolut2.y) === 'undefined';
return [{
x: (node === null || node === void 0 ? void 0 : (_node$positionAbsolut3 = node.positionAbsolute) === null || _node$positionAbsolut3 === void 0 ? void 0 : _node$positionAbsolut3.x) || 0,
y: (node === null || node === void 0 ? void 0 : (_node$positionAbsolut4 = node.positionAbsolute) === null || _node$positionAbsolut4 === void 0 ? void 0 : _node$positionAbsolut4.y) || 0,
width: (node === null || node === void 0 ? void 0 : node.width) || 0,
height: (node === null || node === void 0 ? void 0 : node.height) || 0
}, handleBounds, !isInvalid];
}
var doc = typeof document !== 'undefined' ? document : null; // the keycode can be a string 'a' or an array of strings ['a', 'a+d']
// a string means a single key 'a' or a combination when '+' is used 'a+d'
// an array means different possibilites. Explainer: ['a', 'd+s'] here the
// user can use the single key 'a' or the combination 'd' + 's'
var useKeyPress = (function () {
var keyCode = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;
var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {
target: doc
};
var _useState = useState(false),
_useState2 = _slicedToArray(_useState, 2),
keyPressed = _useState2[0],
setKeyPressed = _useState2[1]; // we need to remember the pressed keys in order to support combinations
var pressedKeys = useRef(new Set([])); // keyCodes = array with single keys [['a']] or key combinations [['a', 's']]
// keysToWatch = array with all keys flattened ['a', 'd', 'ShiftLeft']
// used to check if we store event.code or event.key. When the code is in the list of keysToWatch
// we use the code otherwise the key. Explainer: When you press the left "command" key, the code is "MetaLeft"
// and the key is "Meta". We want users to be able to pass keys and codes so we assume that the key is meant when
// we can't find it in the list of keysToWatch.
var _useMemo = useMemo(function () {
if (keyCode !== null) {
var keyCodeArr = Array.isArray(keyCode) ? keyCode : [keyCode];
var keys = keyCodeArr.filter(function (kc) {
return typeof kc === 'string';
}).map(function (kc) {
return kc.split('+');
});
var keysFlat = keys.reduce(function (res, item) {
return res.concat.apply(res, _toConsumableArray(item));
}, []);
return [keys, keysFlat];
}
return [[], []];
}, [keyCode]),
_useMemo2 = _slicedToArray(_useMemo, 2),
keyCodes = _useMemo2[0],
keysToWatch = _useMemo2[1];
useEffect(function () {
if (keyCode !== null) {
var _options$target, _options$target2;
var downHandler = function downHandler(event) {
if (isInputDOMNode(event)) {
return false;
}
var keyOrCode = useKeyOrCode(event.code, keysToWatch);
pressedKeys.current.add(event[keyOrCode]);
if (isMatchingKey(keyCodes, pressedKeys.current, false)) {
event.preventDefault();
setKeyPressed(true);
}
};
var upHandler = function upHandler(event) {
if (isInputDOMNode(event)) {
return false;
}
var keyOrCode = useKeyOrCode(event.code, keysToWatch);
if (isMatchingKey(keyCodes, pressedKeys.current, true)) {
setKeyPressed(false);
pressedKeys.current.clear();
} else {
pressedKeys.current["delete"](event[keyOrCode]);
}
};
var resetHandler = function resetHandler() {
pressedKeys.current.clear();
setKeyPressed(false);
};
options === null || options === void 0 ? void 0 : (_options$target = options.target) === null || _options$target === void 0 ? void 0 : _options$target.addEventListener('keydown', downHandler);
options === null || options === void 0 ? void 0 : (_options$target2 = options.target) === null || _options$target2 === void 0 ? void 0 : _options$target2.addEventListener('keyup', upHandler);
window.addEventListener('blur', resetHandler);
return function () {
var _options$target3, _options$target4;
options === null || options === void 0 ? void 0 : (_options$target3 = options.target) === null || _options$target3 === void 0 ? void 0 : _options$target3.removeEventListener('keydown', downHandler);
options === null || options === void 0 ? void 0 : (_options$target4 = options.target) === null || _options$target4 === void 0 ? void 0 : _options$target4.removeEventListener('keyup', upHandler);
window.removeEventListener('blur', resetHandler);
};
}
}, [keyCode, setKeyPressed]);
return keyPressed;
}); // utils
function isMatchingKey(keyCodes, pressedKeys, isUp) {
return keyCodes // we only want to compare same sizes of keyCode definitions
// and pressed keys. When the user specified 'Meta' as a key somewhere
// this would also be truthy without this filter when user presses 'Meta' + 'r'
.filter(function (keys) {
return isUp || keys.length === pressedKeys.size;
}) // since we want to support multiple possibilities only one of the
// combinations need to be part of the pressed keys
.some(function (keys) {
return keys.every(function (k) {
return pressedKeys.has(k);
});
});
}
function useKeyOrCode(eventCode, keysToWatch) {
return keysToWatch.includes(eventCode) ? 'code' : 'key';
}
function isInputDOMNode(event) {
var _event$composedPath;
// using composed path for handling shadow dom
var target = ((_event$composedPath = event.composedPath) === null || _event$composedPath === void 0 ? void 0 : _event$composedPath.call(event)[0]) || event.target;
return ['INPUT', 'SELECT', 'TEXTAREA'].includes(target === null || target === void 0 ? void 0 : target.nodeName) || (target === null || target === void 0 ? void 0 : target.hasAttribute('contenteditable'));
}
var selector$7 = function selector(s) {
return {
onNodesChange: s.onNodesChange,
onEdgesChange: s.onEdgesChange
};
};
var useGlobalKeyHandler = (function (_ref) {
var deleteKeyCode = _ref.deleteKeyCode,
multiSelectionKeyCode = _ref.multiSelectionKeyCode;
var store = useStoreApi();
var _useStore = useStore(selector$7, shallow),
onNodesChange = _useStore.onNodesChange,
onEdgesChange = _useStore.onEdgesChange;
var deleteKeyPressed = useKeyPress(deleteKeyCode);
var multiSelectionKeyPressed = useKeyPress(multiSelectionKeyCode);
useEffect(function () {
var _store$getState = store.getState(),
nodeInternals = _store$getState.nodeInternals,
edges = _store$getState.edges,
hasDefaultNodes = _store$getState.hasDefaultNodes,
hasDefaultEdges = _store$getState.hasDefaultEdges,
onNodesDelete = _store$getState.onNodesDelete,
onEdgesDelete = _store$getState.onEdgesDelete;
var nodes = Array.from(nodeInternals.values());
var nodesToRemove = nodes.reduce(function (res, node) {
if (!node.selected && node.parentNode && res.find(function (n) {
return n.id === node.parentNode;
})) {
res.push(node);
} else if (node.selected) {
res.push(node);
}
return res;
}, []);
var selectedEdges = edges.filter(function (e) {
return e.selected;
});
if (deleteKeyPressed && (nodesToRemove || selectedEdges)) {
var connectedEdges = getConnectedEdges(nodesToRemove, edges);
var edgesToRemove = [].concat(_toConsumableArray(selectedEdges), _toConsumableArray(connectedEdges));
var edgeIdsToRemove = edgesToRemove.reduce(function (res, edge) {
if (!res.includes(edge.id)) {
res.push(edge.id);
}
return res;
}, []);
if (hasDefaultEdges || hasDefaultNodes) {
if (hasDefaultEdges) {
store.setState({
edges: edges.filter(function (e) {
return !edgeIdsToRemove.includes(e.id);
})
});
}
if (hasDefaultNodes) {
nodesToRemove.forEach(function (node) {
nodeInternals["delete"](node.id);
});
store.setState({
nodeInternals: new Map(nodeInternals)
});
}
}
if (edgeIdsToRemove.length > 0) {
onEdgesDelete === null || onEdgesDelete === void 0 ? void 0 : onEdgesDelete(edgesToRemove);
if (onEdgesChange) {
var edgeChanges = edgeIdsToRemove.map(function (id) {
return {
id: id,
type: 'remove'
};
});
onEdgesChange(edgeChanges);
}
}
if (nodesToRemove.length > 0) {
onNodesDelete === null || onNodesDelete === void 0 ? void 0 : onNodesDelete(nodesToRemove);
if (onNodesChange) {
var nodeChanges = nodesToRemove.map(function (n) {
return {
id: n.id,
type: 'remove'
};
});
onNodesChange(nodeChanges);
}
}
store.setState({
nodesSelectionActive: false
});
}
}, [deleteKeyPressed, onNodesChange, onEdgesChange]);
useEffect(function () {
store.setState({
multiSelectionActive: multiSelectionKeyPressed
});
}, [multiSelectionKeyPressed]);
});
function useResizeHandler(rendererNode) {
var store = useStoreApi();
useEffect(function () {
var resizeObserver;
var updateDimensions = function updateDimensions() {
if (!rendererNode.current) {
return;
}
var size = getDimensions(rendererNode.current); // @ts-ignore
if (process.env.NODE_ENV === 'development') {
if (size.height === 0 || size.width === 0) {
console.warn('[React Flow]: The React Flow parent container needs a width and a height to render the graph. Help: https://reactflow.dev/error#400');
}
}
store.setState({
width: size.width || 500,
height: size.height || 500
});
};
updateDimensions();
window.onresize = updateDimensions;
if (rendererNode.current) {
resizeObserver = new ResizeObserver(function () {
return updateDimensions();
});
resizeObserver.observe(rendererNode.current);
}
return function () {
window.onresize = null;
if (resizeObserver && rendererNode.current) {
resizeObserver.unobserve(rendererNode.current);
}
};
}, []);
}
var viewChanged = function viewChanged(prevViewport, eventViewport) {
return prevViewport.x !== eventViewport.x || prevViewport.y !== eventViewport.y || prevViewport.zoom !== eventViewport.k;
};
var eventToFlowTransform = function eventToFlowTransform(eventViewport) {
return {
x: eventViewport.x,
y: eventViewport.y,
zoom: eventViewport.k
};
};
var isWrappedWithClass = function isWrappedWithClass(event, className) {
return event.target.closest(".".concat(className));
};
var selector$6 = function selector(s) {
return {
d3Zoom: s.d3Zoom,
d3Selection: s.d3Selection,
d3ZoomHandler: s.d3ZoomHandler
};
};
var ZoomPane = function ZoomPane(_ref) {
var onMove = _ref.onMove,
onMoveStart = _ref.onMoveStart,
onMoveEnd = _ref.onMoveEnd,
_ref$zoomOnScroll = _ref.zoomOnScroll,
zoomOnScroll = _ref$zoomOnScroll === void 0 ? true : _ref$zoomOnScroll,
_ref$zoomOnPinch = _ref.zoomOnPinch,
zoomOnPinch = _ref$zoomOnPinch === void 0 ? true : _ref$zoomOnPinch,
_ref$panOnScroll = _ref.panOnScroll,
panOnScroll = _ref$panOnScroll === void 0 ? false : _ref$panOnScroll,
_ref$panOnScrollSpeed = _ref.panOnScrollSpeed,
panOnScrollSpeed = _ref$panOnScrollSpeed === void 0 ? 0.5 : _ref$panOnScrollSpeed,
_ref$panOnScrollMode = _ref.panOnScrollMode,
panOnScrollMode = _ref$panOnScrollMode === void 0 ? PanOnScrollMode.Free : _ref$panOnScrollMode,
_ref$zoomOnDoubleClic = _ref.zoomOnDoubleClick,
zoomOnDoubleClick = _ref$zoomOnDoubleClic === void 0 ? true : _ref$zoomOnDoubleClic,
selectionKeyPressed = _ref.selectionKeyPressed,
elementsSelectable = _ref.elementsSelectable,
_ref$panOnDrag = _ref.panOnDrag,
panOnDrag = _ref$panOnDrag === void 0 ? true : _ref$panOnDrag,
translateExtent = _ref.translateExtent,
minZoom = _ref.minZoom,
maxZoom = _ref.maxZoom,
_ref$defaultZoom = _ref.defaultZoom,
defaultZoom = _ref$defaultZoom === void 0 ? 1 : _ref$defaultZoom,
_ref$defaultPosition = _ref.defaultPosition,
defaultPosition = _ref$defaultPosition === void 0 ? [0, 0] : _ref$defaultPosition,
zoomActivationKeyCode = _ref.zoomActivationKeyCode,
_ref$preventScrolling = _ref.preventScrolling,
preventScrolling = _ref$preventScrolling === void 0 ? true : _ref$preventScrolling,
children = _ref.children,
noWheelClassName = _ref.noWheelClassName,
noPanClassName = _ref.noPanClassName;
var store = useStoreApi();
var isZoomingOrPanning = useRef(false);
var zoomPane = useRef(null);
var prevTransform = useRef({
x: 0,
y: 0,
zoom: 0
});
var _useStore = useStore(selector$6, shallow),
d3Zoom = _useStore.d3Zoom,
d3Selection = _useStore.d3Selection,
d3ZoomHandler = _useStore.d3ZoomHandler;
var zoomActivationKeyPressed = useKeyPress(zoomActivationKeyCode);
useResizeHandler(zoomPane);
useEffect(function () {
if (zoomPane.current) {
var _selection$node;
var d3ZoomInstance = zoom().scaleExtent([minZoom, maxZoom]).translateExtent(translateExtent);
var selection = select(zoomPane.current).call(d3ZoomInstance);
var clampedX = clamp(defaultPosition[0], translateExtent[0][0], translateExtent[1][0]);
var clampedY = clamp(defaultPosition[1], translateExtent[0][1], translateExtent[1][1]);
var clampedZoom = clamp(defaultZoom, minZoom, maxZoom);
var updatedTransform = zoomIdentity.translate(clampedX, clampedY).scale(clampedZoom);
d3ZoomInstance.transform(selection, updatedTransform);
store.setState({
d3Zoom: d3ZoomInstance,
d3Selection: selection,
d3ZoomHandler: selection.on('wheel.zoom'),
// we need to pass transform because zoom handler is not registered when we set the initial transform
transform: [clampedX, clampedY, clampedZoom],
domNode: (_selection$node = selection.node()) === null || _selection$node === void 0 ? void 0 : _selection$node.closest('.react-flow')
});
}
}, []);
useEffect(function () {
if (d3Selection && d3Zoom) {
if (panOnScroll && !zoomActivationKeyPressed) {
d3Selection.on('wheel', function (event) {
if (isWrappedWithClass(event, noWheelClassName)) {
return false;
}
event.preventDefault();
event.stopImmediatePropagation();
var currentZoom = d3Selection.property('__zoom').k || 1;
if (event.ctrlKey && zoomOnPinch) {
var point = pointer(event); // taken from https://github.com/d3/d3-zoom/blob/master/src/zoom.js
var pinchDelta = -event.deltaY * (event.deltaMode === 1 ? 0.05 : event.deltaMode ? 1 : 0.002) * 10;
var _zoom = currentZoom * Math.pow(2, pinchDelta);
d3Zoom.scaleTo(d3Selection, _zoom, point);
return;
} // increase scroll speed in firefox
// firefox: deltaMode === 1; chrome: deltaMode === 0
var deltaNormalize = event.deltaMode === 1 ? 20 : 1;
var deltaX = panOnScrollMode === PanOnScrollMode.Vertical ? 0 : event.deltaX * deltaNormalize;
var deltaY = panOnScrollMode === PanOnScrollMode.Horizontal ? 0 : event.deltaY * deltaNormalize;
d3Zoom.translateBy(d3Selection, -(deltaX / currentZoom) * panOnScrollSpeed, -(deltaY / currentZoom) * panOnScrollSpeed);
}).on('wheel.zoom', null);
} else if (typeof d3ZoomHandler !== 'undefined') {
d3Selection.on('wheel', function (event) {
if (!preventScrolling || isWrappedWithClass(event, noWheelClassName)) {
return null;
}
event.preventDefault();
}).on('wheel.zoom', d3ZoomHandler);
}
}
}, [panOnScroll, panOnScrollMode, d3Selection, d3Zoom, d3ZoomHandler, zoomActivationKeyPressed, zoomOnPinch, preventScrolling, noWheelClassName]);
useEffect(function () {
if (d3Zoom) {
if (selectionKeyPressed && !isZoomingOrPanning.current) {
d3Zoom.on('zoom', null);
} else if (!selectionKeyPressed) {
d3Zoom.on('zoom', function (event) {
store.setState({
transform: [event.transform.x, event.transform.y, event.transform.k]
});
if (onMove) {
var flowTransform = eventToFlowTransform(event.transform);
onMove(event.sourceEvent, flowTransform);
}
});
}
}
}, [selectionKeyPressed, d3Zoom, onMove]);
useEffect(function () {
if (d3Zoom) {
d3Zoom.on('start', function (event) {
isZoomingOrPanning.current = true;
if (onMoveStart) {
var flowTransform = eventToFlowTransform(event.transform);
prevTransform.current = flowTransform;
onMoveStart(event.sourceEvent, flowTransform);
}
});
}
}, [d3Zoom, onMoveStart]);
useEffect(function () {
if (d3Zoom) {
d3Zoom.on('end', function (event) {
isZoomingOrPanning.current = false;
if (onMoveEnd && viewChanged(prevTransform.current, event.transform)) {
var flowTransform = eventToFlowTransform(event.transform);
prevTransform.current = flowTransform;
onMoveEnd(event.sourceEvent, flowTransform);
}
});
}
}, [d3Zoom, onMoveEnd]);
useEffect(function () {
if (d3Zoom) {
d3Zoom.filter(function (event) {
var zoomScroll = zoomActivationKeyPressed || zoomOnScroll;
var pinchZoom = zoomOnPinch && event.ctrlKey; // if all interactions are disabled, we prevent all zoom events
if (!panOnDrag && !zoomScroll && !panOnScroll && !zoomOnDoubleClick && !zoomOnPinch) {
return false;
} // during a selection we prevent all other interactions
if (selectionKeyPressed) {
return false;
} // if zoom on double click is disabled, we prevent the double click event
if (!zoomOnDoubleClick && event.type === 'dblclick') {
return false;
} // if the target element is inside an element with the nowheel class, we prevent zooming
if (isWrappedWithClass(event, noWheelClassName) && event.type === 'wheel') {
return false;
} // if the target element is inside an element with the nopan class, we prevent panning
if (isWrappedWithClass(event, noPanClassName) && event.type !== 'wheel') {
return false;
}
if (!zoomOnPinch && event.ctrlKey && event.type === 'wheel') {
return false;
} // when there is no scroll handling enabled, we prevent all wheel events
if (!zoomScroll && !panOnScroll && !pinchZoom && event.type === 'wheel') {
return false;
} // if the pane is not movable, we prevent dragging it with mousestart or touchstart
if (!panOnDrag && (event.type === 'mousedown' || event.type === 'touchstart')) {
return false;
} // default filter for d3-zoom
return (!event.ctrlKey || event.type === 'wheel') && !event.button;
});
}
}, [d3Zoom, zoomOnScroll, zoomOnPinch, panOnScroll, zoomOnDoubleClick, panOnDrag, selectionKeyPressed, elementsSelectable, zoomActivationKeyPressed]);
return /*#__PURE__*/React.createElement("div", {
className: "react-flow__renderer react-flow__container",
ref: zoomPane
}, children);
};
function ownKeys$7(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
function _objectSpread$7(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys$7(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys$7(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
function getMousePosition(event, containerBounds) {
return {
x: event.clientX - containerBounds.left,
y: event.clientY - containerBounds.top
};
}
var selector$5 = function selector(s) {
return {
userSelectionActive: s.userSelectionActive,
elementsSelectable: s.elementsSelectable
};
};
var initialRect = {
startX: 0,
startY: 0,
x: 0,
y: 0,
width: 0,
height: 0,
draw: false
};
var UserSelection = /*#__PURE__*/memo(function (_ref) {
var selectionKeyPressed = _ref.selectionKeyPressed;
var store = useStoreApi();
var prevSelectedNodesCount = useRef(0);
var prevSelectedEdgesCount = useRef(0);
var containerBounds = useRef();
var _useState = useState(initialRect),
_useState2 = _slicedToArray(_useState, 2),
userSelectionRect = _useState2[0],
setUserSelectionRect = _useState2[1];
var _useStore = useStore(selector$5, shallow),
userSelectionActive = _useStore.userSelectionActive,
elementsSelectable = _useStore.elementsSelectable;
var renderUserSelectionPane = userSelectionActive || selectionKeyPressed;
if (!elementsSelectable || !renderUserSelectionPane) {
return null;
}
var resetUserSelection = function resetUserSelection() {
setUserSelectionRect(initialRect);
store.setState({
userSelectionActive: false
});
prevSelectedNodesCount.current = 0;
prevSelectedEdgesCount.current = 0;
};
var onMouseDown = function onMouseDown(event) {
var reactFlowNode = event.target.closest('.react-flow');
containerBounds.current = reactFlowNode.getBoundingClientRect();
var mousePos = getMousePosition(event, containerBounds.current);
setUserSelectionRect({
width: 0,
height: 0,
startX: mousePos.x,
startY: mousePos.y,
x: mousePos.x,
y: mousePos.y,
draw: true
});
store.setState({
userSelectionActive: true,
nodesSelectionActive: false
});
};
var onMouseMove = function onMouseMove(event) {
var _userSelectionRect$st, _userSelectionRect$st2;
if (!selectionKeyPressed || !userSelectionRect.draw || !containerBounds.current) {
return;
}
var mousePos = getMousePosition(event, containerBounds.current);
var startX = (_userSelectionRect$st = userSelectionRect.startX) !== null && _userSelectionRect$st !== void 0 ? _userSelectionRect$st : 0;
var startY = (_userSelectionRect$st2 = userSelectionRect.startY) !== null && _userSelectionRect$st2 !== void 0 ? _userSelectionRect$st2 : 0;
var nextUserSelectRect = _objectSpread$7(_objectSpread$7({}, userSelectionRect), {}, {
x: mousePos.x < startX ? mousePos.x : startX,
y: mousePos.y < startY ? mousePos.y : startY,
width: Math.abs(mousePos.x - startX),
height: Math.abs(mousePos.y - startY)
});
var _store$getState = store.getState(),
nodeInternals = _store$getState.nodeInternals,
edges = _store$getState.edges,
transform = _store$getState.transform,
onNodesChange = _store$getState.onNodesChange,
onEdgesChange = _store$getState.onEdgesChange;
var nodes = Array.from(nodeInternals.values());
var selectedNodes = getNodesInside(nodeInternals, nextUserSelectRect, transform, false, true);
var selectedEdgeIds = getConnectedEdges(selectedNodes, edges).map(function (e) {
return e.id;
});
var selectedNodeIds = selectedNodes.map(function (n) {
return n.id;
});
if (prevSelectedNodesCount.current !== selectedNodeIds.length) {
prevSelectedNodesCount.current = selectedNodeIds.length;
var changes = getSelectionChanges(nodes, selectedNodeIds);
if (changes.length) {
onNodesChange === null || onNodesChange === void 0 ? void 0 : onNodesChange(changes);
}
}
if (prevSelectedEdgesCount.current !== selectedEdgeIds.length) {
prevSelectedEdgesCount.current = selectedEdgeIds.length;
var _changes = getSelectionChanges(edges, selectedEdgeIds);
if (_changes.length) {
onEdgesChange === null || onEdgesChange === void 0 ? void 0 : onEdgesChange(_changes);
}
}
setUserSelectionRect(nextUserSelectRect);
};
var onMouseUp = function onMouseUp() {
store.setState({
nodesSelectionActive: prevSelectedNodesCount.current > 0
});
resetUserSelection();
};
var onMouseLeave = function onMouseLeave() {
store.setState({
nodesSelectionActive: false
});
resetUserSelection();
};
return /*#__PURE__*/React.createElement("div", {
className: "react-flow__selectionpane react-flow__container",
onMouseDown: onMouseDown,
onMouseMove: onMouseMove,
onMouseUp: onMouseUp,
onMouseLeave: onMouseLeave
}, userSelectionRect.draw && /*#__PURE__*/React.createElement("div", {
className: "react-flow__selection react-flow__container",
style: {
width: userSelectionRect.width,
height: userSelectionRect.height,
transform: "translate(".concat(userSelectionRect.x, "px, ").concat(userSelectionRect.y, "px)")
}
}));
});
function ownKeys$6(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
function _objectSpread$6(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys$6(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys$6(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
function isParentSelected(node, nodeInternals) {
if (!node.parentNode) {
return false;
}
var parentNode = nodeInternals.get(node.parentNode);
if (!parentNode) {
return false;
}
if (parentNode.selected) {
return true;
}
return isParentSelected(parentNode, nodeInternals);
}
function hasSelector(target, selector, nodeRef) {
var current = target;
do {
var _current;
if ((_current = current) !== null && _current !== void 0 && _current.matches(selector)) return true;
if (current === nodeRef.current) return false;
current = current.parentElement;
} while (current);
return false;
} // looks for all selected nodes and created a NodeDragItem for each of them
function getDragItems(nodeInternals, mousePos, nodeId) {
return Array.from(nodeInternals.values()).filter(function (n) {
return (n.selected || n.id === nodeId) && (!n.parentNode || !isParentSelected(n, nodeInternals));
}).map(function (n) {
var _n$positionAbsolute$x, _n$positionAbsolute, _n$positionAbsolute$y, _n$positionAbsolute2;
return {
id: n.id,
position: n.position || {
x: 0,
y: 0
},
positionAbsolute: n.positionAbsolute || {
x: 0,
y: 0
},
distance: {
x: mousePos.x - ((_n$positionAbsolute$x = (_n$positionAbsolute = n.positionAbsolute) === null || _n$positionAbsolute === void 0 ? void 0 : _n$positionAbsolute.x) !== null && _n$positionAbsolute$x !== void 0 ? _n$positionAbsolute$x : 0),
y: mousePos.y - ((_n$positionAbsolute$y = (_n$positionAbsolute2 = n.positionAbsolute) === null || _n$positionAbsolute2 === void 0 ? void 0 : _n$positionAbsolute2.y) !== null && _n$positionAbsolute$y !== void 0 ? _n$positionAbsolute$y : 0)
},
delta: {
x: 0,
y: 0
},
extent: n.extent,
parentNode: n.parentNode,
width: n.width,
height: n.height
};
});
}
function updatePosition(dragItem, mousePos, snapToGrid, _ref, nodeInternals, nodeExtent) {
var _ref2 = _slicedToArray(_ref, 2),
snapX = _ref2[0],
snapY = _ref2[1];
var currentExtent = dragItem.extent || nodeExtent;
var nextPosition = {
x: mousePos.x - dragItem.distance.x,
y: mousePos.y - dragItem.distance.y
};
if (snapToGrid) {
nextPosition.x = snapX * Math.round(nextPosition.x / snapX);
nextPosition.y = snapY * Math.round(nextPosition.y / snapY);
}
if (dragItem.extent === 'parent') {
if (dragItem.parentNode && dragItem.width && dragItem.height) {
var parent = nodeInternals.get(dragItem.parentNode);
currentExtent = parent !== null && parent !== void 0 && parent.positionAbsolute && parent !== null && parent !== void 0 && parent.width && parent !== null && parent !== void 0 && parent.height ? [[parent.positionAbsolute.x, parent.positionAbsolute.y], [parent.positionAbsolute.x + parent.width - dragItem.width, parent.positionAbsolute.y + parent.height - dragItem.height]] : currentExtent;
} else {
// @ts-ignore
if (process.env.NODE_ENV === 'development') {
console.warn('[React Flow]: Only child nodes can use a parent extent. Help: https://reactflow.dev/error#500');
}
currentExtent = nodeExtent;
}
} else if (dragItem.extent && dragItem.parentNode) {
var _parent$positionAbsol, _parent$positionAbsol2, _parent$positionAbsol3, _parent$positionAbsol4;
var _parent = nodeInternals.get(dragItem.parentNode);
var parentX = (_parent$positionAbsol = _parent === null || _parent === void 0 ? void 0 : (_parent$positionAbsol2 = _parent.positionAbsolute) === null || _parent$positionAbsol2 === void 0 ? void 0 : _parent$positionAbsol2.x) !== null && _parent$positionAbsol !== void 0 ? _parent$positionAbsol : 0;
var parentY = (_parent$positionAbsol3 = _parent === null || _parent === void 0 ? void 0 : (_parent$positionAbsol4 = _parent.positionAbsolute) === null || _parent$positionAbsol4 === void 0 ? void 0 : _parent$positionAbsol4.y) !== null && _parent$positionAbsol3 !== void 0 ? _parent$positionAbsol3 : 0;
currentExtent = [[dragItem.extent[0][0] + parentX, dragItem.extent[0][1] + parentY], [dragItem.extent[1][0] + parentX, dragItem.extent[1][1] + parentY]];
}
var parentPosition = {
x: 0,
y: 0
};
if (dragItem.parentNode) {
var _parentNode$positionA, _parentNode$positionA2, _parentNode$positionA3, _parentNode$positionA4;
var parentNode = nodeInternals.get(dragItem.parentNode);
parentPosition = {
x: (_parentNode$positionA = parentNode === null || parentNode === void 0 ? void 0 : (_parentNode$positionA2 = parentNode.positionAbsolute) === null || _parentNode$positionA2 === void 0 ? void 0 : _parentNode$positionA2.x) !== null && _parentNode$positionA !== void 0 ? _parentNode$positionA : 0,
y: (_parentNode$positionA3 = parentNode === null || parentNode === void 0 ? void 0 : (_parentNode$positionA4 = parentNode.positionAbsolute) === null || _parentNode$positionA4 === void 0 ? void 0 : _parentNode$positionA4.y) !== null && _parentNode$positionA3 !== void 0 ? _parentNode$positionA3 : 0
};
}
dragItem.positionAbsolute = currentExtent ? clampPosition(nextPosition, currentExtent) : nextPosition;
dragItem.position = {
x: dragItem.positionAbsolute.x - parentPosition.x,
y: dragItem.positionAbsolute.y - parentPosition.y
};
return dragItem;
} // returns two params:
// 1. the dragged node (or the first of the list, if we are dragging a node selection)
// 2. array of selected nodes (for multi selections)
function getEventHandlerParams(_ref3) {
var nodeId = _ref3.nodeId,
dragItems = _ref3.dragItems,
nodeInternals = _ref3.nodeInternals;
var extentedDragItems = dragItems.map(function (n) {
var node = nodeInternals.get(n.id);
return _objectSpread$6(_objectSpread$6({}, node), {}, {
position: n.position,
positionAbsolute: n.positionAbsolute
});
});
return [nodeId ? extentedDragItems.find(function (n) {
return n.id === nodeId;
}) : extentedDragItems[0], extentedDragItems];
}
function wrapSelectionDragFunc(selectionFunc) {
return function (event, _, nodes) {
return selectionFunc === null || selectionFunc === void 0 ? void 0 : selectionFunc(event, nodes);
};
}
function useDrag(_ref) {
var nodeRef = _ref.nodeRef,
_ref$disabled = _ref.disabled,
disabled = _ref$disabled === void 0 ? false : _ref$disabled,
noDragClassName = _ref.noDragClassName,
handleSelector = _ref.handleSelector,
nodeId = _ref.nodeId,
isSelectable = _ref.isSelectable,
selectNodesOnDrag = _ref.selectNodesOnDrag;
var _useState = useState(false),
_useState2 = _slicedToArray(_useState, 2),
dragging = _useState2[0],
setDragging = _useState2[1];
var store = useStoreApi();
var dragItems = useRef();
var lastPos = useRef({
x: null,
y: null
}); // returns the pointer position projected to the RF coordinate system
var getPointerPosition = useCallback(function (_ref2) {
var sourceEvent = _ref2.sourceEvent;
var _store$getState = store.getState(),
transform = _store$getState.transform,
snapGrid = _store$getState.snapGrid,
snapToGrid = _store$getState.snapToGrid;
var x = sourceEvent.touches ? sourceEvent.touches[0].clientX : sourceEvent.clientX;
var y = sourceEvent.touches ? sourceEvent.touches[0].clientY : sourceEvent.clientY;
var pointerPos = pointToRendererPoint({
x: x,
y: y
}, transform, snapToGrid, snapGrid);
return pointerPos;
}, []);
useEffect(function () {
if (nodeRef !== null && nodeRef !== void 0 && nodeRef.current) {
var selection = select(nodeRef.current);
if (disabled) {
selection.on('.drag', null);
} else {
var dragHandler = drag().on('start', function (event) {
var _store$getState2 = store.getState(),
nodeInternals = _store$getState2.nodeInternals,
multiSelectionActive = _store$getState2.multiSelectionActive,
unselectNodesAndEdges = _store$getState2.unselectNodesAndEdges,
onNodeDragStart = _store$getState2.onNodeDragStart,
onSelectionDragStart = _store$getState2.onSelectionDragStart;
var onStart = nodeId ? onNodeDragStart : wrapSelectionDragFunc(onSelectionDragStart);
if (!selectNodesOnDrag && !multiSelectionActive && nodeId) {
var _nodeInternals$get;
if (!((_nodeInternals$get = nodeInternals.get(nodeId)) !== null && _nodeInternals$get !== void 0 && _nodeInternals$get.selected)) {
// we need to reset selected nodes when selectNodesOnDrag=false
unselectNodesAndEdges();
}
}
if (nodeId && isSelectable && selectNodesOnDrag) {
handleNodeClick({
id: nodeId,
store: store
});
}
var pointerPos = getPointerPosition(event);
lastPos.current = pointerPos;
dragItems.current = getDragItems(nodeInternals, pointerPos, nodeId);
if (onStart && dragItems.current) {
var _getEventHandlerParam = getEventHandlerParams({
nodeId: nodeId,
dragItems: dragItems.current,
nodeInternals: nodeInternals
}),
_getEventHandlerParam2 = _slicedToArray(_getEventHandlerParam, 2),
currentNode = _getEventHandlerParam2[0],
nodes = _getEventHandlerParam2[1];
onStart(event.sourceEvent, currentNode, nodes);
}
}).on('drag', function (event) {
var _store$getState3 = store.getState(),
updateNodePositions = _store$getState3.updateNodePositions,
snapToGrid = _store$getState3.snapToGrid,
snapGrid = _store$getState3.snapGrid,
nodeInternals = _store$getState3.nodeInternals,
nodeExtent = _store$getState3.nodeExtent,
onNodeDrag = _store$getState3.onNodeDrag,
onSelectionDrag = _store$getState3.onSelectionDrag;
var pointerPos = getPointerPosition(event); // skip events without movement
if ((lastPos.current.x !== pointerPos.x || lastPos.current.y !== pointerPos.y) && dragItems.current) {
lastPos.current = pointerPos;
dragItems.current = dragItems.current.map(function (n) {
return updatePosition(n, pointerPos, snapToGrid, snapGrid, nodeInternals, nodeExtent);
});
var onDrag = nodeId ? onNodeDrag : wrapSelectionDragFunc(onSelectionDrag);
updateNodePositions(dragItems.current, true, true);
setDragging(true);
if (onDrag) {
var _getEventHandlerParam3 = getEventHandlerParams({
nodeId: nodeId,
dragItems: dragItems.current,
nodeInternals: nodeInternals
}),
_getEventHandlerParam4 = _slicedToArray(_getEventHandlerParam3, 2),
currentNode = _getEventHandlerParam4[0],
nodes = _getEventHandlerParam4[1];
onDrag(event.sourceEvent, currentNode, nodes);
}
}
event.on('end', function (event) {
setDragging(false);
if (dragItems.current) {
var _store$getState4 = store.getState(),
_updateNodePositions = _store$getState4.updateNodePositions,
_nodeInternals = _store$getState4.nodeInternals,
onNodeDragStop = _store$getState4.onNodeDragStop,
onSelectionDragStop = _store$getState4.onSelectionDragStop;
var onStop = nodeId ? onNodeDragStop : wrapSelectionDragFunc(onSelectionDragStop);
_updateNodePositions(dragItems.current, false, false);
if (onStop) {
var _getEventHandlerParam5 = getEventHandlerParams({
nodeId: nodeId,
dragItems: dragItems.current,
nodeInternals: _nodeInternals
}),
_getEventHandlerParam6 = _slicedToArray(_getEventHandlerParam5, 2),
_currentNode = _getEventHandlerParam6[0],
_nodes = _getEventHandlerParam6[1];
onStop(event.sourceEvent, _currentNode, _nodes);
}
}
});
}).filter(function (event) {
var target = event.target;
var isDraggable = !event.button && (!noDragClassName || !hasSelector(target, ".".concat(noDragClassName), nodeRef)) && (!handleSelector || hasSelector(target, handleSelector, nodeRef));
return isDraggable;
});
selection.call(dragHandler);
return function () {
selection.on('.drag', null);
};
}
}
}, [nodeRef, disabled, noDragClassName, handleSelector, isSelectable, store, nodeId, selectNodesOnDrag, getPointerPosition]);
return dragging;
}
function ownKeys$5(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
function _objectSpread$5(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys$5(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys$5(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
var selector$4 = function selector(s) {
return _objectSpread$5({
transformString: "translate(".concat(s.transform[0], "px,").concat(s.transform[1], "px) scale(").concat(s.transform[2], ")"),
userSelectionActive: s.userSelectionActive
}, getRectOfNodes(Array.from(s.nodeInternals.values()).filter(function (n) {
return n.selected;
})));
};
var bboxSelector = function bboxSelector(s) {
var selectedNodes = Array.from(s.nodeInternals.values()).filter(function (n) {
return n.selected;
});
return getRectOfNodes(selectedNodes);
};
function NodesSelection(_ref) {
var onSelectionContextMenu = _ref.onSelectionContextMenu,
noPanClassName = _ref.noPanClassName;
var store = useStoreApi();
var _useStore = useStore(selector$4, shallow),
transformString = _useStore.transformString,
userSelectionActive = _useStore.userSelectionActive;
var _useStore2 = useStore(bboxSelector, shallow),
width = _useStore2.width,
height = _useStore2.height,
left = _useStore2.x,
top = _useStore2.y;
var nodeRef = useRef(null);
useDrag({
nodeRef: nodeRef
});
if (userSelectionActive || !width || !height) {
return null;
}
var onContextMenu = onSelectionContextMenu ? function (event) {
var selectedNodes = Array.from(store.getState().nodeInternals.values()).filter(function (n) {
return n.selected;
});
onSelectionContextMenu(event, selectedNodes);
} : undefined;
return /*#__PURE__*/React.createElement("div", {
className: cc(['react-flow__nodesselection', 'react-flow__container', noPanClassName]),
style: {
transform: transformString
}
}, /*#__PURE__*/React.createElement("div", {
ref: nodeRef,
className: "react-flow__nodesselection-rect",
onContextMenu: onContextMenu,
style: {
width: width,
height: height,
top: top,
left: left
}
}));
}
var NodesSelection$1 = /*#__PURE__*/memo(NodesSelection);
var selector$3 = function selector(s) {
return s.nodesSelectionActive;
};
var FlowRenderer = function FlowRenderer(_ref) {
var children = _ref.children,
onPaneClick = _ref.onPaneClick,
onPaneContextMenu = _ref.onPaneContextMenu,
onPaneScroll = _ref.onPaneScroll,
deleteKeyCode = _ref.deleteKeyCode,
onMove = _ref.onMove,
onMoveStart = _ref.onMoveStart,
onMoveEnd = _ref.onMoveEnd,
selectionKeyCode = _ref.selectionKeyCode,
multiSelectionKeyCode = _ref.multiSelectionKeyCode,
zoomActivationKeyCode = _ref.zoomActivationKeyCode,
elementsSelectable = _ref.elementsSelectable,
zoomOnScroll = _ref.zoomOnScroll,
zoomOnPinch = _ref.zoomOnPinch,
panOnScroll = _ref.panOnScroll,
panOnScrollSpeed = _ref.panOnScrollSpeed,
panOnScrollMode = _ref.panOnScrollMode,
zoomOnDoubleClick = _ref.zoomOnDoubleClick,
panOnDrag = _ref.panOnDrag,
translateExtent = _ref.translateExtent,
minZoom = _ref.minZoom,
maxZoom = _ref.maxZoom,
defaultZoom = _ref.defaultZoom,
defaultPosition = _ref.defaultPosition,
preventScrolling = _ref.preventScrolling,
onSelectionContextMenu = _ref.onSelectionContextMenu,
noWheelClassName = _ref.noWheelClassName,
noPanClassName = _ref.noPanClassName;
var store = useStoreApi();
var nodesSelectionActive = useStore(selector$3);
var selectionKeyPressed = useKeyPress(selectionKeyCode);
useGlobalKeyHandler({
deleteKeyCode: deleteKeyCode,
multiSelectionKeyCode: multiSelectionKeyCode
});
var onClick = function onClick(event) {
onPaneClick === null || onPaneClick === void 0 ? void 0 : onPaneClick(event);
store.getState().resetSelectedElements();
store.setState({
nodesSelectionActive: false
});
};
var onContextMenu = onPaneContextMenu ? function (event) {
return onPaneContextMenu(event);
} : undefined;
var onWheel = onPaneScroll ? function (event) {
return onPaneScroll(event);
} : undefined;
return /*#__PURE__*/React.createElement(ZoomPane, {
onMove: onMove,
onMoveStart: onMoveStart,
onMoveEnd: onMoveEnd,
selectionKeyPressed: selectionKeyPressed,
elementsSelectable: elementsSelectable,
zoomOnScroll: zoomOnScroll,
zoomOnPinch: zoomOnPinch,
panOnScroll: panOnScroll,
panOnScrollSpeed: panOnScrollSpeed,
panOnScrollMode: panOnScrollMode,
zoomOnDoubleClick: zoomOnDoubleClick,
panOnDrag: panOnDrag,
translateExtent: translateExtent,
minZoom: minZoom,
maxZoom: maxZoom,
defaultZoom: defaultZoom,
defaultPosition: defaultPosition,
zoomActivationKeyCode: zoomActivationKeyCode,
preventScrolling: preventScrolling,
noWheelClassName: noWheelClassName,
noPanClassName: noPanClassName
}, children, /*#__PURE__*/React.createElement(UserSelection, {
selectionKeyPressed: selectionKeyPressed
}), nodesSelectionActive && /*#__PURE__*/React.createElement(NodesSelection$1, {
onSelectionContextMenu: onSelectionContextMenu,
noPanClassName: noPanClassName
}), /*#__PURE__*/React.createElement("div", {
className: "react-flow__pane react-flow__container",
onClick: onClick,
onContextMenu: onContextMenu,
onWheel: onWheel
}));
};
FlowRenderer.displayName = 'FlowRenderer';
var FlowRenderer$1 = /*#__PURE__*/memo(FlowRenderer);
function useVisibleNodes(onlyRenderVisible) {
var nodes = useStore(useCallback(function (s) {
return onlyRenderVisible ? getNodesInside(s.nodeInternals, {
x: 0,
y: 0,
width: s.width,
height: s.height
}, s.transform, true) : Array.from(s.nodeInternals.values());
}, [onlyRenderVisible]));
return nodes;
}
var selector$2 = function selector(s) {
return {
nodesDraggable: s.nodesDraggable,
nodesConnectable: s.nodesConnectable,
elementsSelectable: s.elementsSelectable,
updateNodeDimensions: s.updateNodeDimensions
};
};
var NodeRenderer = function NodeRenderer(props) {
var _useStore = useStore(selector$2, shallow),
nodesDraggable = _useStore.nodesDraggable,
nodesConnectable = _useStore.nodesConnectable,
elementsSelectable = _useStore.elementsSelectable,
updateNodeDimensions = _useStore.updateNodeDimensions;
var nodes = useVisibleNodes(props.onlyRenderVisibleElements);
var resizeObserverRef = useRef();
var resizeObserver = useMemo(function () {
if (typeof ResizeObserver === 'undefined') {
return null;
}
var observer = new ResizeObserver(function (entries) {
var updates = entries.map(function (entry) {
return {
id: entry.target.getAttribute('data-id'),
nodeElement: entry.target,
forceUpdate: true
};
});
updateNodeDimensions(updates);
});
resizeObserverRef.current = observer;
return observer;
}, []);
useEffect(function () {
return function () {
var _resizeObserverRef$cu;
resizeObserverRef === null || resizeObserverRef === void 0 ? void 0 : (_resizeObserverRef$cu = resizeObserverRef.current) === null || _resizeObserverRef$cu === void 0 ? void 0 : _resizeObserverRef$cu.disconnect();
};
}, []);
return /*#__PURE__*/React.createElement("div", {
className: "react-flow__nodes react-flow__container"
}, nodes.map(function (node) {
var _node$positionAbsolut, _node$positionAbsolut2, _node$positionAbsolut3, _node$positionAbsolut4, _node$internalsSymbol, _node$internalsSymbol2, _node$internalsSymbol3;
var nodeType = node.type || 'default';
if (!props.nodeTypes[nodeType]) {
// @ts-ignore
if (process.env.NODE_ENV === 'development') {
console.warn("[React Flow]: Node type \"".concat(nodeType, "\" not found. Using fallback type \"default\". Help: https://reactflow.dev/error#300"));
}
nodeType = 'default';
}
var NodeComponent = props.nodeTypes[nodeType] || props.nodeTypes["default"];
var isDraggable = !!(node.draggable || nodesDraggable && typeof node.draggable === 'undefined');
var isSelectable = !!(node.selectable || elementsSelectable && typeof node.selectable === 'undefined');
var isConnectable = !!(node.connectable || nodesConnectable && typeof node.connectable === 'undefined');
return /*#__PURE__*/React.createElement(NodeComponent, {
key: node.id,
id: node.id,
className: node.className,
style: node.style,
type: nodeType,
data: node.data,
sourcePosition: node.sourcePosition || Position.Bottom,
targetPosition: node.targetPosition || Position.Top,
hidden: node.hidden,
xPos: (_node$positionAbsolut = (_node$positionAbsolut2 = node.positionAbsolute) === null || _node$positionAbsolut2 === void 0 ? void 0 : _node$positionAbsolut2.x) !== null && _node$positionAbsolut !== void 0 ? _node$positionAbsolut : 0,
yPos: (_node$positionAbsolut3 = (_node$positionAbsolut4 = node.positionAbsolute) === null || _node$positionAbsolut4 === void 0 ? void 0 : _node$positionAbsolut4.y) !== null && _node$positionAbsolut3 !== void 0 ? _node$positionAbsolut3 : 0,
selectNodesOnDrag: props.selectNodesOnDrag,
onClick: props.onNodeClick,
onMouseEnter: props.onNodeMouseEnter,
onMouseMove: props.onNodeMouseMove,
onMouseLeave: props.onNodeMouseLeave,
onContextMenu: props.onNodeContextMenu,
onDoubleClick: props.onNodeDoubleClick,
selected: !!node.selected,
isDraggable: isDraggable,
isSelectable: isSelectable,
isConnectable: isConnectable,
resizeObserver: resizeObserver,
dragHandle: node.dragHandle,
zIndex: (_node$internalsSymbol = (_node$internalsSymbol2 = node[internalsSymbol]) === null || _node$internalsSymbol2 === void 0 ? void 0 : _node$internalsSymbol2.z) !== null && _node$internalsSymbol !== void 0 ? _node$internalsSymbol : 0,
isParent: !!((_node$internalsSymbol3 = node[internalsSymbol]) !== null && _node$internalsSymbol3 !== void 0 && _node$internalsSymbol3.isParent),
noDragClassName: props.noDragClassName,
noPanClassName: props.noPanClassName,
initialized: !!node.width && !!node.height
});
}));
};
NodeRenderer.displayName = 'NodeRenderer';
var NodeRenderer$1 = /*#__PURE__*/memo(NodeRenderer);
var _oppositePosition;
function ownKeys$4(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
function _objectSpread$4(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys$4(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys$4(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
var oppositePosition = (_oppositePosition = {}, _defineProperty(_oppositePosition, Position.Left, Position.Right), _defineProperty(_oppositePosition, Position.Right, Position.Left), _defineProperty(_oppositePosition, Position.Top, Position.Bottom), _defineProperty(_oppositePosition, Position.Bottom, Position.Top), _oppositePosition);
var ConnectionLine = (function (_ref) {
var _fromNode$internalsSy, _fromNode$width, _fromNode$height, _fromNode$positionAbs, _fromNode$positionAbs2;
var connectionNodeId = _ref.connectionNodeId,
connectionHandleType = _ref.connectionHandleType,
connectionLineStyle = _ref.connectionLineStyle,
_ref$connectionLineTy = _ref.connectionLineType,
connectionLineType = _ref$connectionLineTy === void 0 ? ConnectionLineType.Bezier : _ref$connectionLineTy,
isConnectable = _ref.isConnectable,
CustomConnectionLineComponent = _ref.CustomConnectionLineComponent;
var _useStore = useStore(useCallback(function (s) {
return {
fromNode: s.nodeInternals.get(connectionNodeId),
handleId: s.connectionHandleId,
toX: (s.connectionPosition.x - s.transform[0]) / s.transform[2],
toY: (s.connectionPosition.y - s.transform[1]) / s.transform[2]
};
}, [connectionNodeId]), shallow),
fromNode = _useStore.fromNode,
handleId = _useStore.handleId,
toX = _useStore.toX,
toY = _useStore.toY;
var fromHandleBounds = fromNode === null || fromNode === void 0 ? void 0 : (_fromNode$internalsSy = fromNode[internalsSymbol]) === null || _fromNode$internalsSy === void 0 ? void 0 : _fromNode$internalsSy.handleBounds;
if (!fromNode || !isConnectable || !(fromHandleBounds !== null && fromHandleBounds !== void 0 && fromHandleBounds[connectionHandleType])) {
return null;
}
var handleBound = fromHandleBounds[connectionHandleType];
var fromHandle = handleId ? handleBound.find(function (d) {
return d.id === handleId;
}) : handleBound[0];
var fromHandleX = fromHandle ? fromHandle.x + fromHandle.width / 2 : ((_fromNode$width = fromNode === null || fromNode === void 0 ? void 0 : fromNode.width) !== null && _fromNode$width !== void 0 ? _fromNode$width : 0) / 2;
var fromHandleY = fromHandle ? fromHandle.y + fromHandle.height / 2 : (_fromNode$height = fromNode === null || fromNode === void 0 ? void 0 : fromNode.height) !== null && _fromNode$height !== void 0 ? _fromNode$height : 0;
var fromX = ((fromNode === null || fromNode === void 0 ? void 0 : (_fromNode$positionAbs = fromNode.positionAbsolute) === null || _fromNode$positionAbs === void 0 ? void 0 : _fromNode$positionAbs.x) || 0) + fromHandleX;
var fromY = ((fromNode === null || fromNode === void 0 ? void 0 : (_fromNode$positionAbs2 = fromNode.positionAbsolute) === null || _fromNode$positionAbs2 === void 0 ? void 0 : _fromNode$positionAbs2.y) || 0) + fromHandleY;
var fromPosition = fromHandle === null || fromHandle === void 0 ? void 0 : fromHandle.position;
if (!fromPosition) {
return null;
}
var toPosition = oppositePosition[fromPosition];
var sourceX, sourceY, sourcePosition, targetX, targetY, targetPosition;
switch (connectionHandleType) {
case 'source':
{
sourceX = fromX;
sourceY = fromY;
sourcePosition = fromPosition;
targetX = toX;
targetY = toY;
targetPosition = toPosition;
}
break;
case 'target':
{
sourceX = toX;
sourceY = toY;
sourcePosition = toPosition;
targetX = fromX;
targetY = fromY;
targetPosition = fromPosition;
}
break;
}
if (CustomConnectionLineComponent) {
return /*#__PURE__*/React.createElement("g", {
className: "react-flow__connection"
}, /*#__PURE__*/React.createElement(CustomConnectionLineComponent, {
connectionLineType: connectionLineType,
connectionLineStyle: connectionLineStyle,
fromNode: fromNode,
fromHandle: fromHandle,
fromX: fromX,
fromY: fromY,
toX: toX,
toY: toY,
fromPosition: fromPosition,
toPosition: toPosition,
// remove in v11
sourcePosition: sourcePosition,
targetPosition: targetPosition,
sourceNode: fromNode,
sourceHandle: fromHandle,
targetX: targetX,
targetY: targetY,
sourceX: sourceX,
sourceY: sourceY
}));
}
var dAttr = '';
var pathParams = {
sourceX: sourceX,
sourceY: sourceY,
sourcePosition: sourcePosition,
targetX: targetX,
targetY: targetY,
targetPosition: targetPosition
};
if (connectionLineType === ConnectionLineType.Bezier) {
// we assume the destination position is opposite to the source position
dAttr = getBezierPath(pathParams);
} else if (connectionLineType === ConnectionLineType.Step) {
dAttr = getSmoothStepPath(_objectSpread$4(_objectSpread$4({}, pathParams), {}, {
borderRadius: 0
}));
} else if (connectionLineType === ConnectionLineType.SmoothStep) {
dAttr = getSmoothStepPath(pathParams);
} else if (connectionLineType === ConnectionLineType.SimpleBezier) {
dAttr = getSimpleBezierPath(pathParams);
} else {
dAttr = "M".concat(sourceX, ",").concat(sourceY, " ").concat(targetX, ",").concat(targetY);
}
return /*#__PURE__*/React.createElement("g", {
className: "react-flow__connection"
}, /*#__PURE__*/React.createElement("path", {
d: dAttr,
className: "react-flow__connection-path",
style: connectionLineStyle
}));
});
function _typeof(obj) {
"@babel/helpers - typeof";
return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) {
return typeof obj;
} : function (obj) {
return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj;
}, _typeof(obj);
}
var _MarkerSymbols;
var ArrowSymbol = function ArrowSymbol(_ref) {
var _ref$color = _ref.color,
color = _ref$color === void 0 ? 'none' : _ref$color,
_ref$strokeWidth = _ref.strokeWidth,
strokeWidth = _ref$strokeWidth === void 0 ? 1 : _ref$strokeWidth;
return /*#__PURE__*/React.createElement("polyline", {
stroke: color,
strokeLinecap: "round",
strokeLinejoin: "round",
strokeWidth: strokeWidth,
fill: "none",
points: "-5,-4 0,0 -5,4"
});
};
var ArrowClosedSymbol = function ArrowClosedSymbol(_ref2) {
var _ref2$color = _ref2.color,
color = _ref2$color === void 0 ? 'none' : _ref2$color,
_ref2$strokeWidth = _ref2.strokeWidth,
strokeWidth = _ref2$strokeWidth === void 0 ? 1 : _ref2$strokeWidth;
return /*#__PURE__*/React.createElement("polyline", {
stroke: color,
strokeLinecap: "round",
strokeLinejoin: "round",
strokeWidth: strokeWidth,
fill: color,
points: "-5,-4 0,0 -5,4 -5,-4"
});
};
var MarkerSymbols = (_MarkerSymbols = {}, _defineProperty(_MarkerSymbols, MarkerType.Arrow, ArrowSymbol), _defineProperty(_MarkerSymbols, MarkerType.ArrowClosed, ArrowClosedSymbol), _MarkerSymbols);
function useMarkerSymbol(type) {
var symbol = useMemo(function () {
var symbolExists = MarkerSymbols.hasOwnProperty(type);
if (!symbolExists) {
// @ts-ignore
if (process.env.NODE_ENV === 'development') {
console.warn("[React Flow]: Marker type \"".concat(type, "\" doesn't exist. Help: https://reactflow.dev/error#900"));
}
return function () {
return null;
};
}
return MarkerSymbols[type];
}, [type]);
return symbol;
}
function ownKeys$3(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
function _objectSpread$3(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys$3(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys$3(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
var Marker = function Marker(_ref) {
var id = _ref.id,
type = _ref.type,
color = _ref.color,
_ref$width = _ref.width,
width = _ref$width === void 0 ? 12.5 : _ref$width,
_ref$height = _ref.height,
height = _ref$height === void 0 ? 12.5 : _ref$height,
_ref$markerUnits = _ref.markerUnits,
markerUnits = _ref$markerUnits === void 0 ? 'strokeWidth' : _ref$markerUnits,
strokeWidth = _ref.strokeWidth,
_ref$orient = _ref.orient,
orient = _ref$orient === void 0 ? 'auto' : _ref$orient;
var _Symbol = useMarkerSymbol(type);
return /*#__PURE__*/React.createElement("marker", {
className: "react-flow__arrowhead",
id: id,
markerWidth: "".concat(width),
markerHeight: "".concat(height),
viewBox: "-10 -10 20 20",
markerUnits: markerUnits,
orient: orient,
refX: "0",
refY: "0"
}, /*#__PURE__*/React.createElement(_Symbol, {
color: color,
strokeWidth: strokeWidth
}));
};
var markerSelector = function markerSelector(_ref2) {
var defaultColor = _ref2.defaultColor,
rfId = _ref2.rfId;
return function (s) {
var ids = [];
return s.edges.reduce(function (markers, edge) {
[edge.markerStart, edge.markerEnd].forEach(function (marker) {
if (marker && _typeof(marker) === 'object') {
var markerId = getMarkerId(marker, rfId);
if (!ids.includes(markerId)) {
markers.push(_objectSpread$3({
id: markerId,
color: marker.color || defaultColor
}, marker));
ids.push(markerId);
}
}
});
return markers;
}, []).sort(function (a, b) {
return a.id.localeCompare(b.id);
});
};
}; // when you have multiple flows on a page and you hide the first one, the other ones have no markers anymore
// when they do have markers with the same ids. To prevent this the user can pass a unique id to the react flow wrapper
// that we can then use for creating our unique marker ids
var MarkerDefinitions = function MarkerDefinitions(_ref3) {
var defaultColor = _ref3.defaultColor,
rfId = _ref3.rfId;
var markers = useStore(useCallback(markerSelector({
defaultColor: defaultColor,
rfId: rfId
}), [defaultColor, rfId]), // the id includes all marker options, so we just need to look at that part of the marker
function (a, b) {
return !(a.length !== b.length || a.some(function (m, i) {
return m.id !== b[i].id;
}));
});
return /*#__PURE__*/React.createElement("defs", null, markers.map(function (marker) {
return /*#__PURE__*/React.createElement(Marker, {
id: marker.id,
key: marker.id,
type: marker.type,
color: marker.color,
width: marker.width,
height: marker.height,
markerUnits: marker.markerUnits,
strokeWidth: marker.strokeWidth,
orient: marker.orient
});
}));
};
MarkerDefinitions.displayName = 'MarkerDefinitions';
var MarkerDefinitions$1 = /*#__PURE__*/memo(MarkerDefinitions);
var defaultEdgeTree = [{
level: 0,
isMaxLevel: true,
edges: []
}];
function groupEdgesByZLevel(edges, nodeInternals) {
var elevateEdgesOnSelect = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
var maxLevel = -1;
var levelLookup = edges.reduce(function (tree, edge) {
var hasZIndex = isNumeric(edge.zIndex);
var z = hasZIndex ? edge.zIndex : 0;
if (elevateEdgesOnSelect) {
var _nodeInternals$get, _nodeInternals$get$in, _nodeInternals$get2, _nodeInternals$get2$i;
z = hasZIndex ? edge.zIndex : Math.max(((_nodeInternals$get = nodeInternals.get(edge.source)) === null || _nodeInternals$get === void 0 ? void 0 : (_nodeInternals$get$in = _nodeInternals$get[internalsSymbol]) === null || _nodeInternals$get$in === void 0 ? void 0 : _nodeInternals$get$in.z) || 0, ((_nodeInternals$get2 = nodeInternals.get(edge.target)) === null || _nodeInternals$get2 === void 0 ? void 0 : (_nodeInternals$get2$i = _nodeInternals$get2[internalsSymbol]) === null || _nodeInternals$get2$i === void 0 ? void 0 : _nodeInternals$get2$i.z) || 0);
}
if (tree[z]) {
tree[z].push(edge);
} else {
tree[z] = [edge];
}
maxLevel = z > maxLevel ? z : maxLevel;
return tree;
}, {});
var edgeTree = Object.entries(levelLookup).map(function (_ref) {
var _ref2 = _slicedToArray(_ref, 2),
key = _ref2[0],
edges = _ref2[1];
var level = +key;
return {
edges: edges,
level: level,
isMaxLevel: level === maxLevel
};
});
if (edgeTree.length === 0) {
return defaultEdgeTree;
}
return edgeTree;
}
function useVisibleEdges(onlyRenderVisible, nodeInternals, elevateEdgesOnSelect) {
var edges = useStore(useCallback(function (s) {
if (!onlyRenderVisible) {
return s.edges;
}
return s.edges.filter(function (e) {
var sourceNode = nodeInternals.get(e.source);
var targetNode = nodeInternals.get(e.target);
return (sourceNode === null || sourceNode === void 0 ? void 0 : sourceNode.width) && (sourceNode === null || sourceNode === void 0 ? void 0 : sourceNode.height) && (targetNode === null || targetNode === void 0 ? void 0 : targetNode.width) && (targetNode === null || targetNode === void 0 ? void 0 : targetNode.height) && isEdgeVisible({
sourcePos: sourceNode.positionAbsolute || {
x: 0,
y: 0
},
targetPos: targetNode.positionAbsolute || {
x: 0,
y: 0
},
sourceWidth: sourceNode.width,
sourceHeight: sourceNode.height,
targetWidth: targetNode.width,
targetHeight: targetNode.height,
width: s.width,
height: s.height,
transform: s.transform
});
});
}, [onlyRenderVisible, nodeInternals]));
return groupEdgesByZLevel(edges, nodeInternals, elevateEdgesOnSelect);
}
var selector$1 = function selector(s) {
return {
connectionNodeId: s.connectionNodeId,
connectionHandleType: s.connectionHandleType,
nodesConnectable: s.nodesConnectable,
elementsSelectable: s.elementsSelectable,
width: s.width,
height: s.height,
connectionMode: s.connectionMode,
nodeInternals: s.nodeInternals
};
};
var EdgeRenderer = function EdgeRenderer(props) {
var _useStore = useStore(selector$1, shallow),
connectionNodeId = _useStore.connectionNodeId,
connectionHandleType = _useStore.connectionHandleType,
nodesConnectable = _useStore.nodesConnectable,
elementsSelectable = _useStore.elementsSelectable,
width = _useStore.width,
height = _useStore.height,
connectionMode = _useStore.connectionMode,
nodeInternals = _useStore.nodeInternals;
var edgeTree = useVisibleEdges(props.onlyRenderVisibleElements, nodeInternals, props.elevateEdgesOnSelect);
if (!width) {
return null;
}
var connectionLineType = props.connectionLineType,
defaultMarkerColor = props.defaultMarkerColor,
connectionLineStyle = props.connectionLineStyle,
connectionLineComponent = props.connectionLineComponent,
connectionLineContainerStyle = props.connectionLineContainerStyle;
var renderConnectionLine = connectionNodeId && connectionHandleType;
return /*#__PURE__*/React.createElement(React.Fragment, null, edgeTree.map(function (_ref) {
var level = _ref.level,
edges = _ref.edges,
isMaxLevel = _ref.isMaxLevel;
return /*#__PURE__*/React.createElement("svg", {
key: level,
style: {
zIndex: level
},
width: width,
height: height,
className: "react-flow__edges react-flow__container"
}, isMaxLevel && /*#__PURE__*/React.createElement(MarkerDefinitions$1, {
defaultColor: defaultMarkerColor,
rfId: props.rfId
}), /*#__PURE__*/React.createElement("g", null, edges.map(function (edge) {
var _getNodeData = getNodeData(nodeInternals, edge.source),
_getNodeData2 = _slicedToArray(_getNodeData, 3),
sourceNodeRect = _getNodeData2[0],
sourceHandleBounds = _getNodeData2[1],
sourceIsValid = _getNodeData2[2];
var _getNodeData3 = getNodeData(nodeInternals, edge.target),
_getNodeData4 = _slicedToArray(_getNodeData3, 3),
targetNodeRect = _getNodeData4[0],
targetHandleBounds = _getNodeData4[1],
targetIsValid = _getNodeData4[2];
if (!sourceIsValid || !targetIsValid) {
return null;
}
var edgeType = edge.type || 'default';
if (!props.edgeTypes[edgeType]) {
console.warn("[React Flow]: Edge type \"".concat(edgeType, "\" not found. Using fallback type \"default\". Help: https://reactflow.dev/error#300"));
edgeType = 'default';
}
var EdgeComponent = props.edgeTypes[edgeType] || props.edgeTypes["default"]; // when connection type is loose we can define all handles as sources
var targetNodeHandles = connectionMode === ConnectionMode.Strict ? targetHandleBounds.target : targetHandleBounds.target || targetHandleBounds.source;
var sourceHandle = getHandle(sourceHandleBounds.source, edge.sourceHandle || null);
var targetHandle = getHandle(targetNodeHandles, edge.targetHandle || null);
var sourcePosition = (sourceHandle === null || sourceHandle === void 0 ? void 0 : sourceHandle.position) || Position.Bottom;
var targetPosition = (targetHandle === null || targetHandle === void 0 ? void 0 : targetHandle.position) || Position.Top;
if (!sourceHandle) {
// @ts-ignore
if (process.env.NODE_ENV === 'development') {
console.warn("[React Flow]: Couldn't create edge for source handle id: ".concat(edge.sourceHandle, "; edge id: ").concat(edge.id, ". Help: https://reactflow.dev/error#800"));
}
return null;
}
if (!targetHandle) {
// @ts-ignore
if (process.env.NODE_ENV === 'development') {
console.warn("[React Flow]: Couldn't create edge for target handle id: ".concat(edge.targetHandle, "; edge id: ").concat(edge.id, ". Help: https://reactflow.dev/error#800"));
}
return null;
}
var _getEdgePositions = getEdgePositions(sourceNodeRect, sourceHandle, sourcePosition, targetNodeRect, targetHandle, targetPosition),
sourceX = _getEdgePositions.sourceX,
sourceY = _getEdgePositions.sourceY,
targetX = _getEdgePositions.targetX,
targetY = _getEdgePositions.targetY;
return /*#__PURE__*/React.createElement(EdgeComponent, {
key: edge.id,
id: edge.id,
className: cc([edge.className, props.noPanClassName]),
type: edgeType,
data: edge.data,
selected: !!edge.selected,
animated: !!edge.animated,
hidden: !!edge.hidden,
label: edge.label,
labelStyle: edge.labelStyle,
labelShowBg: edge.labelShowBg,
labelBgStyle: edge.labelBgStyle,
labelBgPadding: edge.labelBgPadding,
labelBgBorderRadius: edge.labelBgBorderRadius,
style: edge.style,
source: edge.source,
target: edge.target,
sourceHandleId: edge.sourceHandle,
targetHandleId: edge.targetHandle,
markerEnd: edge.markerEnd,
markerStart: edge.markerStart,
sourceX: sourceX,
sourceY: sourceY,
targetX: targetX,
targetY: targetY,
sourcePosition: sourcePosition,
targetPosition: targetPosition,
elementsSelectable: elementsSelectable,
onEdgeUpdate: props.onEdgeUpdate,
onContextMenu: props.onEdgeContextMenu,
onMouseEnter: props.onEdgeMouseEnter,
onMouseMove: props.onEdgeMouseMove,
onMouseLeave: props.onEdgeMouseLeave,
onClick: props.onEdgeClick,
edgeUpdaterRadius: props.edgeUpdaterRadius,
onEdgeDoubleClick: props.onEdgeDoubleClick,
onEdgeUpdateStart: props.onEdgeUpdateStart,
onEdgeUpdateEnd: props.onEdgeUpdateEnd,
rfId: props.rfId
});
})));
}), renderConnectionLine && /*#__PURE__*/React.createElement("svg", {
style: connectionLineContainerStyle,
width: width,
height: height,
className: "react-flow__edges react-flow__connectionline react-flow__container"
}, /*#__PURE__*/React.createElement(ConnectionLine, {
connectionNodeId: connectionNodeId,
connectionHandleType: connectionHandleType,
connectionLineStyle: connectionLineStyle,
connectionLineType: connectionLineType,
isConnectable: nodesConnectable,
CustomConnectionLineComponent: connectionLineComponent
})));
};
EdgeRenderer.displayName = 'EdgeRenderer';
var EdgeRenderer$1 = /*#__PURE__*/memo(EdgeRenderer);
var selector = function selector(s) {
return "translate(".concat(s.transform[0], "px,").concat(s.transform[1], "px) scale(").concat(s.transform[2], ")");
};
function Viewport(_ref) {
var children = _ref.children;
var transform = useStore(selector);
return /*#__PURE__*/React.createElement("div", {
className: "react-flow__viewport react-flow__container",
style: {
transform: transform
}
}, children);
}
function useOnInitHandler(onInit) {
var ReactFlowInstance = useReactFlow();
var isInitialized = useRef(false);
useEffect(function () {
if (!isInitialized.current && ReactFlowInstance.viewportInitialized && onInit) {
setTimeout(function () {
return onInit(ReactFlowInstance);
}, 1);
isInitialized.current = true;
}
}, [onInit, ReactFlowInstance.viewportInitialized]);
}
var GraphView = function GraphView(_ref) {
var nodeTypes = _ref.nodeTypes,
edgeTypes = _ref.edgeTypes,
onMove = _ref.onMove,
onMoveStart = _ref.onMoveStart,
onMoveEnd = _ref.onMoveEnd,
onInit = _ref.onInit,
onNodeClick = _ref.onNodeClick,
onEdgeClick = _ref.onEdgeClick,
onNodeDoubleClick = _ref.onNodeDoubleClick,
onEdgeDoubleClick = _ref.onEdgeDoubleClick,
onNodeMouseEnter = _ref.onNodeMouseEnter,
onNodeMouseMove = _ref.onNodeMouseMove,
onNodeMouseLeave = _ref.onNodeMouseLeave,
onNodeContextMenu = _ref.onNodeContextMenu,
onSelectionContextMenu = _ref.onSelectionContextMenu,
connectionLineType = _ref.connectionLineType,
connectionLineStyle = _ref.connectionLineStyle,
connectionLineComponent = _ref.connectionLineComponent,
connectionLineContainerStyle = _ref.connectionLineContainerStyle,
selectionKeyCode = _ref.selectionKeyCode,
multiSelectionKeyCode = _ref.multiSelectionKeyCode,
zoomActivationKeyCode = _ref.zoomActivationKeyCode,
deleteKeyCode = _ref.deleteKeyCode,
onlyRenderVisibleElements = _ref.onlyRenderVisibleElements,
elementsSelectable = _ref.elementsSelectable,
selectNodesOnDrag = _ref.selectNodesOnDrag,
translateExtent = _ref.translateExtent,
minZoom = _ref.minZoom,
maxZoom = _ref.maxZoom,
defaultZoom = _ref.defaultZoom,
defaultPosition = _ref.defaultPosition,
preventScrolling = _ref.preventScrolling,
defaultMarkerColor = _ref.defaultMarkerColor,
zoomOnScroll = _ref.zoomOnScroll,
zoomOnPinch = _ref.zoomOnPinch,
panOnScroll = _ref.panOnScroll,
panOnScrollSpeed = _ref.panOnScrollSpeed,
panOnScrollMode = _ref.panOnScrollMode,
zoomOnDoubleClick = _ref.zoomOnDoubleClick,
panOnDrag = _ref.panOnDrag,
onPaneClick = _ref.onPaneClick,
onPaneScroll = _ref.onPaneScroll,
onPaneContextMenu = _ref.onPaneContextMenu,
onEdgeUpdate = _ref.onEdgeUpdate,
onEdgeContextMenu = _ref.onEdgeContextMenu,
onEdgeMouseEnter = _ref.onEdgeMouseEnter,
onEdgeMouseMove = _ref.onEdgeMouseMove,
onEdgeMouseLeave = _ref.onEdgeMouseLeave,
edgeUpdaterRadius = _ref.edgeUpdaterRadius,
onEdgeUpdateStart = _ref.onEdgeUpdateStart,
onEdgeUpdateEnd = _ref.onEdgeUpdateEnd,
noDragClassName = _ref.noDragClassName,
noWheelClassName = _ref.noWheelClassName,
noPanClassName = _ref.noPanClassName,
elevateEdgesOnSelect = _ref.elevateEdgesOnSelect,
id = _ref.id;
useOnInitHandler(onInit);
return /*#__PURE__*/React.createElement(FlowRenderer$1, {
onPaneClick: onPaneClick,
onPaneContextMenu: onPaneContextMenu,
onPaneScroll: onPaneScroll,
deleteKeyCode: deleteKeyCode,
selectionKeyCode: selectionKeyCode,
multiSelectionKeyCode: multiSelectionKeyCode,
zoomActivationKeyCode: zoomActivationKeyCode,
elementsSelectable: elementsSelectable,
onMove: onMove,
onMoveStart: onMoveStart,
onMoveEnd: onMoveEnd,
zoomOnScroll: zoomOnScroll,
zoomOnPinch: zoomOnPinch,
zoomOnDoubleClick: zoomOnDoubleClick,
panOnScroll: panOnScroll,
panOnScrollSpeed: panOnScrollSpeed,
panOnScrollMode: panOnScrollMode,
panOnDrag: panOnDrag,
translateExtent: translateExtent,
minZoom: minZoom,
maxZoom: maxZoom,
defaultZoom: defaultZoom,
defaultPosition: defaultPosition,
onSelectionContextMenu: onSelectionContextMenu,
preventScrolling: preventScrolling,
noDragClassName: noDragClassName,
noWheelClassName: noWheelClassName,
noPanClassName: noPanClassName
}, /*#__PURE__*/React.createElement(Viewport, null, /*#__PURE__*/React.createElement(EdgeRenderer$1, {
edgeTypes: edgeTypes,
onEdgeClick: onEdgeClick,
onEdgeDoubleClick: onEdgeDoubleClick,
connectionLineType: connectionLineType,
connectionLineStyle: connectionLineStyle,
connectionLineComponent: connectionLineComponent,
connectionLineContainerStyle: connectionLineContainerStyle,
onEdgeUpdate: onEdgeUpdate,
onlyRenderVisibleElements: onlyRenderVisibleElements,
onEdgeContextMenu: onEdgeContextMenu,
onEdgeMouseEnter: onEdgeMouseEnter,
onEdgeMouseMove: onEdgeMouseMove,
onEdgeMouseLeave: onEdgeMouseLeave,
onEdgeUpdateStart: onEdgeUpdateStart,
onEdgeUpdateEnd: onEdgeUpdateEnd,
edgeUpdaterRadius: edgeUpdaterRadius,
defaultMarkerColor: defaultMarkerColor,
noPanClassName: noPanClassName,
elevateEdgesOnSelect: !!elevateEdgesOnSelect,
rfId: id
}), /*#__PURE__*/React.createElement(NodeRenderer$1, {
nodeTypes: nodeTypes,
onNodeClick: onNodeClick,
onNodeDoubleClick: onNodeDoubleClick,
onNodeMouseEnter: onNodeMouseEnter,
onNodeMouseMove: onNodeMouseMove,
onNodeMouseLeave: onNodeMouseLeave,
onNodeContextMenu: onNodeContextMenu,
selectNodesOnDrag: selectNodesOnDrag,
onlyRenderVisibleElements: onlyRenderVisibleElements,
noPanClassName: noPanClassName,
noDragClassName: noDragClassName
})));
};
GraphView.displayName = 'GraphView';
var GraphView$1 = /*#__PURE__*/memo(GraphView);
var GroupNode = function GroupNode() {
return null;
};
GroupNode.displayName = 'GroupNode';
function ownKeys$2(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
function _objectSpread$2(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys$2(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys$2(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
var wrapNode = (function (NodeComponent) {
var NodeWrapper = function NodeWrapper(_ref) {
var id = _ref.id,
type = _ref.type,
data = _ref.data,
xPos = _ref.xPos,
yPos = _ref.yPos,
selected = _ref.selected,
onClick = _ref.onClick,
onMouseEnter = _ref.onMouseEnter,
onMouseMove = _ref.onMouseMove,
onMouseLeave = _ref.onMouseLeave,
onContextMenu = _ref.onContextMenu,
onDoubleClick = _ref.onDoubleClick,
style = _ref.style,
className = _ref.className,
isDraggable = _ref.isDraggable,
isSelectable = _ref.isSelectable,
isConnectable = _ref.isConnectable,
selectNodesOnDrag = _ref.selectNodesOnDrag,
sourcePosition = _ref.sourcePosition,
targetPosition = _ref.targetPosition,
hidden = _ref.hidden,
resizeObserver = _ref.resizeObserver,
dragHandle = _ref.dragHandle,
zIndex = _ref.zIndex,
isParent = _ref.isParent,
noPanClassName = _ref.noPanClassName,
noDragClassName = _ref.noDragClassName,
initialized = _ref.initialized;
var store = useStoreApi();
var nodeRef = useRef(null);
var prevSourcePosition = useRef(sourcePosition);
var prevTargetPosition = useRef(targetPosition);
var prevType = useRef(type);
var hasPointerEvents = isSelectable || isDraggable || onClick || onMouseEnter || onMouseMove || onMouseLeave;
var onMouseEnterHandler = getMouseHandler$1(id, store.getState, onMouseEnter);
var onMouseMoveHandler = getMouseHandler$1(id, store.getState, onMouseMove);
var onMouseLeaveHandler = getMouseHandler$1(id, store.getState, onMouseLeave);
var onContextMenuHandler = getMouseHandler$1(id, store.getState, onContextMenu);
var onDoubleClickHandler = getMouseHandler$1(id, store.getState, onDoubleClick);
var onSelectNodeHandler = function onSelectNodeHandler(event) {
if (isSelectable && (!selectNodesOnDrag || !isDraggable)) {
// this handler gets called within the drag start event when selectNodesOnDrag=true
handleNodeClick({
id: id,
store: store
});
}
if (onClick) {
var node = store.getState().nodeInternals.get(id);
onClick(event, _objectSpread$2({}, node));
}
};
useEffect(function () {
if (nodeRef.current && !hidden) {
var currNode = nodeRef.current;
resizeObserver === null || resizeObserver === void 0 ? void 0 : resizeObserver.observe(currNode);
return function () {
return resizeObserver === null || resizeObserver === void 0 ? void 0 : resizeObserver.unobserve(currNode);
};
}
}, [hidden]);
useEffect(function () {
// when the user programmatically changes the source or handle position, we re-initialize the node
var typeChanged = prevType.current !== type;
var sourcePosChanged = prevSourcePosition.current !== sourcePosition;
var targetPosChanged = prevTargetPosition.current !== targetPosition;
if (nodeRef.current && (typeChanged || sourcePosChanged || targetPosChanged)) {
if (typeChanged) {
prevType.current = type;
}
if (sourcePosChanged) {
prevSourcePosition.current = sourcePosition;
}
if (targetPosChanged) {
prevTargetPosition.current = targetPosition;
}
store.getState().updateNodeDimensions([{
id: id,
nodeElement: nodeRef.current,
forceUpdate: true
}]);
}
}, [id, type, sourcePosition, targetPosition]);
var dragging = useDrag({
nodeRef: nodeRef,
disabled: hidden || !isDraggable,
noDragClassName: noDragClassName,
handleSelector: dragHandle,
nodeId: id,
isSelectable: isSelectable,
selectNodesOnDrag: selectNodesOnDrag
});
if (hidden) {
return null;
}
return /*#__PURE__*/React.createElement("div", {
className: cc(['react-flow__node', "react-flow__node-".concat(type), noPanClassName, className, {
selected: selected,
selectable: isSelectable,
parent: isParent
}]),
ref: nodeRef,
style: _objectSpread$2({
zIndex: zIndex,
transform: "translate(".concat(xPos, "px,").concat(yPos, "px)"),
pointerEvents: hasPointerEvents ? 'all' : 'none',
visibility: initialized ? 'visible' : 'hidden'
}, style),
onMouseEnter: onMouseEnterHandler,
onMouseMove: onMouseMoveHandler,
onMouseLeave: onMouseLeaveHandler,
onContextMenu: onContextMenuHandler,
onClick: onSelectNodeHandler,
onDoubleClick: onDoubleClickHandler,
"data-testid": "rf__node-".concat(id),
"data-id": id
}, /*#__PURE__*/React.createElement(Provider, {
value: id
}, /*#__PURE__*/React.createElement(NodeComponent, {
id: id,
data: data,
type: type,
xPos: xPos,
yPos: yPos,
selected: selected,
isConnectable: isConnectable,
sourcePosition: sourcePosition,
targetPosition: targetPosition,
dragging: dragging,
dragHandle: dragHandle,
zIndex: zIndex
})));
};
NodeWrapper.displayName = 'NodeWrapper';
return /*#__PURE__*/memo(NodeWrapper);
});
function ownKeys$1(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
function _objectSpread$1(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys$1(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys$1(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
function createNodeTypes(nodeTypes) {
var standardTypes = {
input: wrapNode(nodeTypes.input || InputNode$1),
"default": wrapNode(nodeTypes["default"] || DefaultNode$1),
output: wrapNode(nodeTypes.output || OutputNode$1),
group: wrapNode(nodeTypes.group || GroupNode)
};
var wrappedTypes = {};
var specialTypes = Object.keys(nodeTypes).filter(function (k) {
return !['input', 'default', 'output', 'group'].includes(k);
}).reduce(function (res, key) {
res[key] = wrapNode(nodeTypes[key] || DefaultNode$1);
return res;
}, wrappedTypes);
return _objectSpread$1(_objectSpread$1({}, standardTypes), specialTypes);
}
function useNodeOrEdgeTypes(nodeOrEdgeTypes, createTypes) {
var typesKeysRef = useRef(null);
var typesParsed = useMemo(function () {
// @ts-ignore
if (process.env.NODE_ENV === 'development') {
var typeKeys = Object.keys(nodeOrEdgeTypes);
if (shallow(typesKeysRef.current, typeKeys)) {
console.warn("[React Flow]: It looks like you have created a new nodeTypes or edgeTypes object. If this wasn't on purpose please define the nodeTypes/edgeTypes outside of the component or memoize them. Help: https://reactflow.dev/error#200");
}
typesKeysRef.current = typeKeys;
}
return createTypes(nodeOrEdgeTypes);
}, [nodeOrEdgeTypes]);
return typesParsed;
}
function injectStyle(css) {
if (!css || typeof document === 'undefined') return;
var head = document.head || document.getElementsByTagName('head')[0];
var style = document.createElement('style');
head.appendChild(style);
style.appendChild(document.createTextNode(css));
}
var Wrapper = function Wrapper(_ref) {
var children = _ref.children;
var isWrapped = true;
try {
useStoreApi();
} catch (e) {
isWrapped = false;
}
if (isWrapped) {
// we need to wrap it with a fragment because it's not allowed for children to be a ReactNode
// https://github.com/DefinitelyTyped/DefinitelyTyped/issues/18051
return /*#__PURE__*/React.createElement(React.Fragment, null, children);
}
return /*#__PURE__*/React.createElement(Provider$1, {
createStore: createStore
}, children);
};
Wrapper.displayName = 'ReactFlowWrapper';
var _excluded = ["nodes", "edges", "defaultNodes", "defaultEdges", "className", "nodeTypes", "edgeTypes", "onNodeClick", "onEdgeClick", "onInit", "onMove", "onMoveStart", "onMoveEnd", "onConnect", "onConnectStart", "onConnectStop", "onConnectEnd", "onClickConnectStart", "onClickConnectStop", "onClickConnectEnd", "onNodeMouseEnter", "onNodeMouseMove", "onNodeMouseLeave", "onNodeContextMenu", "onNodeDoubleClick", "onNodeDragStart", "onNodeDrag", "onNodeDragStop", "onNodesDelete", "onEdgesDelete", "onSelectionChange", "onSelectionDragStart", "onSelectionDrag", "onSelectionDragStop", "onSelectionContextMenu", "connectionMode", "connectionLineType", "connectionLineStyle", "connectionLineComponent", "connectionLineContainerStyle", "deleteKeyCode", "selectionKeyCode", "multiSelectionKeyCode", "zoomActivationKeyCode", "snapToGrid", "snapGrid", "onlyRenderVisibleElements", "selectNodesOnDrag", "nodesDraggable", "nodesConnectable", "elementsSelectable", "minZoom", "maxZoom", "defaultZoom", "defaultPosition", "translateExtent", "preventScrolling", "nodeExtent", "defaultMarkerColor", "zoomOnScroll", "zoomOnPinch", "panOnScroll", "panOnScrollSpeed", "panOnScrollMode", "zoomOnDoubleClick", "panOnDrag", "onPaneClick", "onPaneScroll", "onPaneContextMenu", "children", "onEdgeUpdate", "onEdgeContextMenu", "onEdgeDoubleClick", "onEdgeMouseEnter", "onEdgeMouseMove", "onEdgeMouseLeave", "onEdgeUpdateStart", "onEdgeUpdateEnd", "edgeUpdaterRadius", "onNodesChange", "onEdgesChange", "noDragClassName", "noWheelClassName", "noPanClassName", "fitView", "fitViewOptions", "connectOnClick", "attributionPosition", "proOptions", "defaultEdgeOptions", "elevateEdgesOnSelect"];
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
{
injectStyle(css);
injectStyle(theme);
}
var defaultNodeTypes = {
input: InputNode$1,
"default": DefaultNode$1,
output: OutputNode$1
};
var defaultEdgeTypes = {
"default": BezierEdge,
straight: StraightEdge,
step: StepEdge,
smoothstep: SmoothStepEdge,
simplebezier: SimpleBezierEdge
};
var initSnapGrid = [15, 15];
var initDefaultPosition = [0, 0];
var ReactFlow = /*#__PURE__*/forwardRef(function (_ref, ref) {
var nodes = _ref.nodes,
edges = _ref.edges,
defaultNodes = _ref.defaultNodes,
defaultEdges = _ref.defaultEdges,
className = _ref.className,
_ref$nodeTypes = _ref.nodeTypes,
nodeTypes = _ref$nodeTypes === void 0 ? defaultNodeTypes : _ref$nodeTypes,
_ref$edgeTypes = _ref.edgeTypes,
edgeTypes = _ref$edgeTypes === void 0 ? defaultEdgeTypes : _ref$edgeTypes,
onNodeClick = _ref.onNodeClick,
onEdgeClick = _ref.onEdgeClick,
onInit = _ref.onInit,
onMove = _ref.onMove,
onMoveStart = _ref.onMoveStart,
onMoveEnd = _ref.onMoveEnd,
onConnect = _ref.onConnect,
onConnectStart = _ref.onConnectStart,
onConnectStop = _ref.onConnectStop,
onConnectEnd = _ref.onConnectEnd,
onClickConnectStart = _ref.onClickConnectStart,
onClickConnectStop = _ref.onClickConnectStop,
onClickConnectEnd = _ref.onClickConnectEnd,
onNodeMouseEnter = _ref.onNodeMouseEnter,
onNodeMouseMove = _ref.onNodeMouseMove,
onNodeMouseLeave = _ref.onNodeMouseLeave,
onNodeContextMenu = _ref.onNodeContextMenu,
onNodeDoubleClick = _ref.onNodeDoubleClick,
onNodeDragStart = _ref.onNodeDragStart,
onNodeDrag = _ref.onNodeDrag,
onNodeDragStop = _ref.onNodeDragStop,
onNodesDelete = _ref.onNodesDelete,
onEdgesDelete = _ref.onEdgesDelete,
onSelectionChange = _ref.onSelectionChange,
onSelectionDragStart = _ref.onSelectionDragStart,
onSelectionDrag = _ref.onSelectionDrag,
onSelectionDragStop = _ref.onSelectionDragStop,
onSelectionContextMenu = _ref.onSelectionContextMenu,
_ref$connectionMode = _ref.connectionMode,
connectionMode = _ref$connectionMode === void 0 ? ConnectionMode.Strict : _ref$connectionMode,
_ref$connectionLineTy = _ref.connectionLineType,
connectionLineType = _ref$connectionLineTy === void 0 ? ConnectionLineType.Bezier : _ref$connectionLineTy,
connectionLineStyle = _ref.connectionLineStyle,
connectionLineComponent = _ref.connectionLineComponent,
connectionLineContainerStyle = _ref.connectionLineContainerStyle,
_ref$deleteKeyCode = _ref.deleteKeyCode,
deleteKeyCode = _ref$deleteKeyCode === void 0 ? 'Backspace' : _ref$deleteKeyCode,
_ref$selectionKeyCode = _ref.selectionKeyCode,
selectionKeyCode = _ref$selectionKeyCode === void 0 ? 'Shift' : _ref$selectionKeyCode,
_ref$multiSelectionKe = _ref.multiSelectionKeyCode,
multiSelectionKeyCode = _ref$multiSelectionKe === void 0 ? 'Meta' : _ref$multiSelectionKe,
_ref$zoomActivationKe = _ref.zoomActivationKeyCode,
zoomActivationKeyCode = _ref$zoomActivationKe === void 0 ? 'Meta' : _ref$zoomActivationKe,
_ref$snapToGrid = _ref.snapToGrid,
snapToGrid = _ref$snapToGrid === void 0 ? false : _ref$snapToGrid,
_ref$snapGrid = _ref.snapGrid,
snapGrid = _ref$snapGrid === void 0 ? initSnapGrid : _ref$snapGrid,
_ref$onlyRenderVisibl = _ref.onlyRenderVisibleElements,
onlyRenderVisibleElements = _ref$onlyRenderVisibl === void 0 ? false : _ref$onlyRenderVisibl,
_ref$selectNodesOnDra = _ref.selectNodesOnDrag,
selectNodesOnDrag = _ref$selectNodesOnDra === void 0 ? true : _ref$selectNodesOnDra,
nodesDraggable = _ref.nodesDraggable,
nodesConnectable = _ref.nodesConnectable,
elementsSelectable = _ref.elementsSelectable,
_ref$minZoom = _ref.minZoom,
minZoom = _ref$minZoom === void 0 ? 0.5 : _ref$minZoom,
_ref$maxZoom = _ref.maxZoom,
maxZoom = _ref$maxZoom === void 0 ? 2 : _ref$maxZoom,
_ref$defaultZoom = _ref.defaultZoom,
defaultZoom = _ref$defaultZoom === void 0 ? 1 : _ref$defaultZoom,
_ref$defaultPosition = _ref.defaultPosition,
defaultPosition = _ref$defaultPosition === void 0 ? initDefaultPosition : _ref$defaultPosition,
_ref$translateExtent = _ref.translateExtent,
translateExtent = _ref$translateExtent === void 0 ? infiniteExtent : _ref$translateExtent,
_ref$preventScrolling = _ref.preventScrolling,
preventScrolling = _ref$preventScrolling === void 0 ? true : _ref$preventScrolling,
nodeExtent = _ref.nodeExtent,
_ref$defaultMarkerCol = _ref.defaultMarkerColor,
defaultMarkerColor = _ref$defaultMarkerCol === void 0 ? '#b1b1b7' : _ref$defaultMarkerCol,
_ref$zoomOnScroll = _ref.zoomOnScroll,
zoomOnScroll = _ref$zoomOnScroll === void 0 ? true : _ref$zoomOnScroll,
_ref$zoomOnPinch = _ref.zoomOnPinch,
zoomOnPinch = _ref$zoomOnPinch === void 0 ? true : _ref$zoomOnPinch,
_ref$panOnScroll = _ref.panOnScroll,
panOnScroll = _ref$panOnScroll === void 0 ? false : _ref$panOnScroll,
_ref$panOnScrollSpeed = _ref.panOnScrollSpeed,
panOnScrollSpeed = _ref$panOnScrollSpeed === void 0 ? 0.5 : _ref$panOnScrollSpeed,
_ref$panOnScrollMode = _ref.panOnScrollMode,
panOnScrollMode = _ref$panOnScrollMode === void 0 ? PanOnScrollMode.Free : _ref$panOnScrollMode,
_ref$zoomOnDoubleClic = _ref.zoomOnDoubleClick,
zoomOnDoubleClick = _ref$zoomOnDoubleClic === void 0 ? true : _ref$zoomOnDoubleClic,
_ref$panOnDrag = _ref.panOnDrag,
panOnDrag = _ref$panOnDrag === void 0 ? true : _ref$panOnDrag,
onPaneClick = _ref.onPaneClick,
onPaneScroll = _ref.onPaneScroll,
onPaneContextMenu = _ref.onPaneContextMenu,
children = _ref.children,
onEdgeUpdate = _ref.onEdgeUpdate,
onEdgeContextMenu = _ref.onEdgeContextMenu,
onEdgeDoubleClick = _ref.onEdgeDoubleClick,
onEdgeMouseEnter = _ref.onEdgeMouseEnter,
onEdgeMouseMove = _ref.onEdgeMouseMove,
onEdgeMouseLeave = _ref.onEdgeMouseLeave,
onEdgeUpdateStart = _ref.onEdgeUpdateStart,
onEdgeUpdateEnd = _ref.onEdgeUpdateEnd,
_ref$edgeUpdaterRadiu = _ref.edgeUpdaterRadius,
edgeUpdaterRadius = _ref$edgeUpdaterRadiu === void 0 ? 10 : _ref$edgeUpdaterRadiu,
onNodesChange = _ref.onNodesChange,
onEdgesChange = _ref.onEdgesChange,
_ref$noDragClassName = _ref.noDragClassName,
noDragClassName = _ref$noDragClassName === void 0 ? 'nodrag' : _ref$noDragClassName,
_ref$noWheelClassName = _ref.noWheelClassName,
noWheelClassName = _ref$noWheelClassName === void 0 ? 'nowheel' : _ref$noWheelClassName,
_ref$noPanClassName = _ref.noPanClassName,
noPanClassName = _ref$noPanClassName === void 0 ? 'nopan' : _ref$noPanClassName,
_ref$fitView = _ref.fitView,
fitView = _ref$fitView === void 0 ? false : _ref$fitView,
fitViewOptions = _ref.fitViewOptions,
_ref$connectOnClick = _ref.connectOnClick,
connectOnClick = _ref$connectOnClick === void 0 ? true : _ref$connectOnClick,
attributionPosition = _ref.attributionPosition,
proOptions = _ref.proOptions,
defaultEdgeOptions = _ref.defaultEdgeOptions,
_ref$elevateEdgesOnSe = _ref.elevateEdgesOnSelect,
elevateEdgesOnSelect = _ref$elevateEdgesOnSe === void 0 ? false : _ref$elevateEdgesOnSe,
rest = _objectWithoutProperties(_ref, _excluded);
var nodeTypesWrapped = useNodeOrEdgeTypes(nodeTypes, createNodeTypes);
var edgeTypesWrapped = useNodeOrEdgeTypes(edgeTypes, createEdgeTypes);
return /*#__PURE__*/React.createElement("div", _objectSpread(_objectSpread({}, rest), {}, {
ref: ref,
className: cc(['react-flow', className])
}), /*#__PURE__*/React.createElement(Wrapper, null, /*#__PURE__*/React.createElement(GraphView$1, {
onInit: onInit,
onMove: onMove,
onMoveStart: onMoveStart,
onMoveEnd: onMoveEnd,
onNodeClick: onNodeClick,
onEdgeClick: onEdgeClick,
onNodeMouseEnter: onNodeMouseEnter,
onNodeMouseMove: onNodeMouseMove,
onNodeMouseLeave: onNodeMouseLeave,
onNodeContextMenu: onNodeContextMenu,
onNodeDoubleClick: onNodeDoubleClick,
nodeTypes: nodeTypesWrapped,
edgeTypes: edgeTypesWrapped,
connectionLineType: connectionLineType,
connectionLineStyle: connectionLineStyle,
connectionLineComponent: connectionLineComponent,
connectionLineContainerStyle: connectionLineContainerStyle,
selectionKeyCode: selectionKeyCode,
deleteKeyCode: deleteKeyCode,
multiSelectionKeyCode: multiSelectionKeyCode,
zoomActivationKeyCode: zoomActivationKeyCode,
onlyRenderVisibleElements: onlyRenderVisibleElements,
selectNodesOnDrag: selectNodesOnDrag,
translateExtent: translateExtent,
minZoom: minZoom,
maxZoom: maxZoom,
defaultZoom: defaultZoom,
defaultPosition: defaultPosition,
preventScrolling: preventScrolling,
zoomOnScroll: zoomOnScroll,
zoomOnPinch: zoomOnPinch,
zoomOnDoubleClick: zoomOnDoubleClick,
panOnScroll: panOnScroll,
panOnScrollSpeed: panOnScrollSpeed,
panOnScrollMode: panOnScrollMode,
panOnDrag: panOnDrag,
onPaneClick: onPaneClick,
onPaneScroll: onPaneScroll,
onPaneContextMenu: onPaneContextMenu,
onSelectionContextMenu: onSelectionContextMenu,
onEdgeUpdate: onEdgeUpdate,
onEdgeContextMenu: onEdgeContextMenu,
onEdgeDoubleClick: onEdgeDoubleClick,
onEdgeMouseEnter: onEdgeMouseEnter,
onEdgeMouseMove: onEdgeMouseMove,
onEdgeMouseLeave: onEdgeMouseLeave,
onEdgeUpdateStart: onEdgeUpdateStart,
onEdgeUpdateEnd: onEdgeUpdateEnd,
edgeUpdaterRadius: edgeUpdaterRadius,
defaultMarkerColor: defaultMarkerColor,
noDragClassName: noDragClassName,
noWheelClassName: noWheelClassName,
noPanClassName: noPanClassName,
elevateEdgesOnSelect: elevateEdgesOnSelect,
id: rest === null || rest === void 0 ? void 0 : rest.id
}), /*#__PURE__*/React.createElement(StoreUpdater, {
nodes: nodes,
edges: edges,
defaultNodes: defaultNodes,
defaultEdges: defaultEdges,
onConnect: onConnect,
onConnectStart: onConnectStart,
onConnectStop: onConnectStop,
onConnectEnd: onConnectEnd,
onClickConnectStart: onClickConnectStart,
onClickConnectStop: onClickConnectStop,
onClickConnectEnd: onClickConnectEnd,
nodesDraggable: nodesDraggable,
nodesConnectable: nodesConnectable,
elementsSelectable: elementsSelectable,
minZoom: minZoom,
maxZoom: maxZoom,
nodeExtent: nodeExtent,
onNodesChange: onNodesChange,
onEdgesChange: onEdgesChange,
snapToGrid: snapToGrid,
snapGrid: snapGrid,
connectionMode: connectionMode,
translateExtent: translateExtent,
connectOnClick: connectOnClick,
defaultEdgeOptions: defaultEdgeOptions,
fitView: fitView,
fitViewOptions: fitViewOptions,
onNodesDelete: onNodesDelete,
onEdgesDelete: onEdgesDelete,
onNodeDragStart: onNodeDragStart,
onNodeDrag: onNodeDrag,
onNodeDragStop: onNodeDragStop,
onSelectionDrag: onSelectionDrag,
onSelectionDragStart: onSelectionDragStart,
onSelectionDragStop: onSelectionDragStop
}), onSelectionChange && /*#__PURE__*/React.createElement(SelectionListener$1, {
onSelectionChange: onSelectionChange
}), children, /*#__PURE__*/React.createElement(Attribution, {
proOptions: proOptions,
position: attributionPosition
})));
});
ReactFlow.displayName = 'ReactFlow';
var ReactFlowProvider = function ReactFlowProvider(_ref) {
var children = _ref.children;
return /*#__PURE__*/React.createElement(Provider$1, {
createStore: createStore
}, children);
};
ReactFlowProvider.displayName = 'ReactFlowProvider';
function createUseItemsState(applyChanges) {
return function (initialItems) {
var _useState = useState(initialItems),
_useState2 = _slicedToArray(_useState, 2),
items = _useState2[0],
setItems = _useState2[1];
var onItemsChange = useCallback(function (changes) {
return setItems(function (items) {
return applyChanges(changes, items);
});
}, []);
return [items, setItems, onItemsChange];
};
}
var useNodesState = createUseItemsState(applyNodeChanges);
var useEdgesState = createUseItemsState(applyEdgeChanges);
export { BezierEdge, EdgeText$1 as EdgeText, Handle$1 as Handle, ReactFlowProvider, SimpleBezierEdge, SmoothStepEdge, StepEdge, StraightEdge, ReactFlow as default, getBezierCenter as getBezierEdgeCenter, getBezierPath, getCenter as getEdgeCenter, getMarkerEnd, getSimpleBezierCenter as getSimpleBezierEdgeCenter, getSimpleBezierPath, getSmoothStepPath, useEdgesState, useKeyPress, useNodesState };
//# sourceMappingURL=index.js.map