 85bf1341f3
			
		
	
	85bf1341f3
	
	
	
		
			
			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>
		
			
				
	
	
		
			4128 lines
		
	
	
		
			170 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			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
 |