{"version":3,"file":"60c6f2fb-bf59fdd47c0a423412ce.js","mappings":"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","sources":["webpack://gatsby-starter-typescript-plus/./node_modules/@xyflow/system/dist/esm/index.mjs"],"sourcesContent":["import _toConsumableArray from \"/home/vsts/work/1/s/node_modules/babel-preset-gatsby/node_modules/@babel/runtime/helpers/esm/toConsumableArray\";\nimport _objectWithoutProperties from \"/home/vsts/work/1/s/node_modules/babel-preset-gatsby/node_modules/@babel/runtime/helpers/esm/objectWithoutProperties\";\nimport _asyncToGenerator from \"/home/vsts/work/1/s/node_modules/babel-preset-gatsby/node_modules/@babel/runtime/helpers/esm/asyncToGenerator\";\nimport _slicedToArray from \"/home/vsts/work/1/s/node_modules/babel-preset-gatsby/node_modules/@babel/runtime/helpers/esm/slicedToArray\";\nimport _defineProperty from \"/home/vsts/work/1/s/node_modules/babel-preset-gatsby/node_modules/@babel/runtime/helpers/esm/defineProperty\";\nvar _excluded = [\"id\"],\n _excluded2 = [\"inProgress\"];\n\nvar _oppositePosition, _handleDirections;\n\nimport _regeneratorRuntime from \"/home/vsts/work/1/s/node_modules/babel-preset-gatsby/node_modules/@babel/runtime/regenerator\";\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== \"undefined\" && o[Symbol.iterator] || o[\"@@iterator\"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === \"number\") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; }\n\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nimport { drag } from 'd3-drag';\nimport { select, pointer } from 'd3-selection';\nimport { zoom, zoomIdentity, zoomTransform } from 'd3-zoom';\nvar errorMessages = {\n error001: function error001() {\n return '[React Flow]: Seems like you have not used zustand provider as an ancestor. Help: https://reactflow.dev/error#001';\n },\n error002: function error002() {\n return \"It looks like you've 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.\";\n },\n error003: function error003(nodeType) {\n return \"Node type \\\"\".concat(nodeType, \"\\\" not found. Using fallback type \\\"default\\\".\");\n },\n error004: function error004() {\n return 'The React Flow parent container needs a width and a height to render the graph.';\n },\n error005: function error005() {\n return 'Only child nodes can use a parent extent.';\n },\n error006: function error006() {\n return \"Can't create edge. An edge needs a source and a target.\";\n },\n error007: function error007(id) {\n return \"The old edge with id=\".concat(id, \" does not exist.\");\n },\n error009: function error009(type) {\n return \"Marker type \\\"\".concat(type, \"\\\" doesn't exist.\");\n },\n error008: function error008(handleType, _ref) {\n var id = _ref.id,\n sourceHandle = _ref.sourceHandle,\n targetHandle = _ref.targetHandle;\n return \"Couldn't create edge for \".concat(handleType, \" handle id: \\\"\").concat(handleType === 'source' ? sourceHandle : targetHandle, \"\\\", edge id: \").concat(id, \".\");\n },\n error010: function error010() {\n return 'Handle: No node id found. Make sure to only use a Handle inside a custom Node.';\n },\n error011: function error011(edgeType) {\n return \"Edge type \\\"\".concat(edgeType, \"\\\" not found. Using fallback type \\\"default\\\".\");\n },\n error012: function error012(id) {\n return \"Node with id \\\"\".concat(id, \"\\\" does not exist, it may have been removed. This can happen when a node is deleted before the \\\"onNodeClick\\\" handler is called.\");\n },\n error013: function error013() {\n var lib = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'react';\n return \"It seems that you haven't loaded the styles. Please import '@xyflow/\".concat(lib, \"/dist/style.css' or base.css to make sure everything is working properly.\");\n }\n};\nvar infiniteExtent = [[Number.NEGATIVE_INFINITY, Number.NEGATIVE_INFINITY], [Number.POSITIVE_INFINITY, Number.POSITIVE_INFINITY]];\nvar elementSelectionKeys = ['Enter', ' ', 'Escape'];\nvar ConnectionMode;\n\n(function (ConnectionMode) {\n ConnectionMode[\"Strict\"] = \"strict\";\n ConnectionMode[\"Loose\"] = \"loose\";\n})(ConnectionMode || (ConnectionMode = {}));\n\nvar PanOnScrollMode;\n\n(function (PanOnScrollMode) {\n PanOnScrollMode[\"Free\"] = \"free\";\n PanOnScrollMode[\"Vertical\"] = \"vertical\";\n PanOnScrollMode[\"Horizontal\"] = \"horizontal\";\n})(PanOnScrollMode || (PanOnScrollMode = {}));\n\nvar SelectionMode;\n\n(function (SelectionMode) {\n SelectionMode[\"Partial\"] = \"partial\";\n SelectionMode[\"Full\"] = \"full\";\n})(SelectionMode || (SelectionMode = {}));\n\nvar initialConnection = {\n inProgress: false,\n isValid: null,\n from: null,\n fromHandle: null,\n fromPosition: null,\n fromNode: null,\n to: null,\n toHandle: null,\n toPosition: null,\n toNode: null\n};\nvar ConnectionLineType;\n\n(function (ConnectionLineType) {\n ConnectionLineType[\"Bezier\"] = \"default\";\n ConnectionLineType[\"Straight\"] = \"straight\";\n ConnectionLineType[\"Step\"] = \"step\";\n ConnectionLineType[\"SmoothStep\"] = \"smoothstep\";\n ConnectionLineType[\"SimpleBezier\"] = \"simplebezier\";\n})(ConnectionLineType || (ConnectionLineType = {}));\n\nvar MarkerType;\n\n(function (MarkerType) {\n MarkerType[\"Arrow\"] = \"arrow\";\n MarkerType[\"ArrowClosed\"] = \"arrowclosed\";\n})(MarkerType || (MarkerType = {}));\n\nvar Position;\n\n(function (Position) {\n Position[\"Left\"] = \"left\";\n Position[\"Top\"] = \"top\";\n Position[\"Right\"] = \"right\";\n Position[\"Bottom\"] = \"bottom\";\n})(Position || (Position = {}));\n\nvar 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);\n/**\n * @internal\n */\n\nfunction areConnectionMapsEqual(a, b) {\n if (!a && !b) {\n return true;\n }\n\n if (!a || !b || a.size !== b.size) {\n return false;\n }\n\n if (!a.size && !b.size) {\n return true;\n }\n\n var _iterator = _createForOfIteratorHelper(a.keys()),\n _step;\n\n try {\n for (_iterator.s(); !(_step = _iterator.n()).done;) {\n var key = _step.value;\n\n if (!b.has(key)) {\n return false;\n }\n }\n } catch (err) {\n _iterator.e(err);\n } finally {\n _iterator.f();\n }\n\n return true;\n}\n/**\n * We call the callback for all connections in a that are not in b\n *\n * @internal\n */\n\n\nfunction handleConnectionChange(a, b, cb) {\n if (!cb) {\n return;\n }\n\n var diff = [];\n a.forEach(function (connection, key) {\n if (!(b !== null && b !== void 0 && b.has(key))) {\n diff.push(connection);\n }\n });\n\n if (diff.length) {\n cb(diff);\n }\n}\n\nfunction getConnectionStatus(isValid) {\n return isValid === null ? null : isValid ? 'valid' : 'invalid';\n}\n/* eslint-disable @typescript-eslint/no-explicit-any */\n\n/**\n * Test whether an object is useable as an Edge\n * @public\n * @remarks In TypeScript this is a type guard that will narrow the type of whatever you pass in to Edge if it returns true\n * @param element - The element to test\n * @returns A boolean indicating whether the element is an Edge\n */\n\n\nvar isEdgeBase = function isEdgeBase(element) {\n return 'id' in element && 'source' in element && 'target' in element;\n};\n/**\n * Test whether an object is useable as a Node\n * @public\n * @remarks In TypeScript this is a type guard that will narrow the type of whatever you pass in to Node if it returns true\n * @param element - The element to test\n * @returns A boolean indicating whether the element is an Node\n */\n\n\nvar isNodeBase = function isNodeBase(element) {\n return 'id' in element && 'position' in element && !('source' in element) && !('target' in element);\n};\n\nvar isInternalNodeBase = function isInternalNodeBase(element) {\n return 'id' in element && 'internals' in element && !('source' in element) && !('target' in element);\n};\n/**\n * Pass in a node, and get connected nodes where edge.source === node.id\n * @public\n * @param node - The node to get the connected nodes from\n * @param nodes - The array of all nodes\n * @param edges - The array of all edges\n * @returns An array of nodes that are connected over eges where the source is the given node\n */\n\n\nvar getOutgoers = function getOutgoers(node, nodes, edges) {\n if (!node.id) {\n return [];\n }\n\n var outgoerIds = new Set();\n edges.forEach(function (edge) {\n if (edge.source === node.id) {\n outgoerIds.add(edge.target);\n }\n });\n return nodes.filter(function (n) {\n return outgoerIds.has(n.id);\n });\n};\n/**\n * Pass in a node, and get connected nodes where edge.target === node.id\n * @public\n * @param node - The node to get the connected nodes from\n * @param nodes - The array of all nodes\n * @param edges - The array of all edges\n * @returns An array of nodes that are connected over eges where the target is the given node\n */\n\n\nvar getIncomers = function getIncomers(node, nodes, edges) {\n if (!node.id) {\n return [];\n }\n\n var incomersIds = new Set();\n edges.forEach(function (edge) {\n if (edge.target === node.id) {\n incomersIds.add(edge.source);\n }\n });\n return nodes.filter(function (n) {\n return incomersIds.has(n.id);\n });\n};\n\nvar getNodePositionWithOrigin = function getNodePositionWithOrigin(node) {\n var _node$origin;\n\n var nodeOrigin = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [0, 0];\n\n var _getNodeDimensions = getNodeDimensions(node),\n width = _getNodeDimensions.width,\n height = _getNodeDimensions.height;\n\n var origin = (_node$origin = node.origin) !== null && _node$origin !== void 0 ? _node$origin : nodeOrigin;\n var offsetX = width * origin[0];\n var offsetY = height * origin[1];\n return {\n x: node.position.x - offsetX,\n y: node.position.y - offsetY\n };\n};\n/**\n * Internal function for determining a bounding box that contains all given nodes in an array.\n * @public\n * @remarks Useful when combined with {@link getViewportForBounds} to calculate the correct transform to fit the given nodes in a viewport.\n * @param nodes - Nodes to calculate the bounds for\n * @param params.nodeOrigin - Origin of the nodes: [0, 0] - top left, [0.5, 0.5] - center\n * @returns Bounding box enclosing all nodes\n */\n\n\nvar getNodesBounds = function getNodesBounds(nodes) {\n var params = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {\n nodeOrigin: [0, 0],\n nodeLookup: undefined\n };\n\n if (process.env.NODE_ENV === 'development' && !params.nodeLookup) {\n console.warn('Please use `getNodesBounds` from `useReactFlow`/`useSvelteFlow` hook to ensure correct values for sub flows. If not possible, you have to provide a nodeLookup to support sub flows.');\n }\n\n if (nodes.length === 0) {\n return {\n x: 0,\n y: 0,\n width: 0,\n height: 0\n };\n }\n\n var box = nodes.reduce(function (currBox, nodeOrId) {\n var isId = typeof nodeOrId === 'string';\n var currentNode = !params.nodeLookup && !isId ? nodeOrId : undefined;\n\n if (params.nodeLookup) {\n currentNode = isId ? params.nodeLookup.get(nodeOrId) : !isInternalNodeBase(nodeOrId) ? params.nodeLookup.get(nodeOrId.id) : nodeOrId;\n }\n\n var nodeBox = currentNode ? nodeToBox(currentNode, params.nodeOrigin) : {\n x: 0,\n y: 0,\n x2: 0,\n y2: 0\n };\n return getBoundsOfBoxes(currBox, nodeBox);\n }, {\n x: Infinity,\n y: Infinity,\n x2: -Infinity,\n y2: -Infinity\n });\n return boxToRect(box);\n};\n/**\n * Determines a bounding box that contains all given nodes in an array\n * @internal\n */\n\n\nvar getInternalNodesBounds = function getInternalNodesBounds(nodeLookup) {\n var params = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n if (nodeLookup.size === 0) {\n return {\n x: 0,\n y: 0,\n width: 0,\n height: 0\n };\n }\n\n var box = {\n x: Infinity,\n y: Infinity,\n x2: -Infinity,\n y2: -Infinity\n };\n nodeLookup.forEach(function (node) {\n if (params.filter === undefined || params.filter(node)) {\n var nodeBox = nodeToBox(node);\n box = getBoundsOfBoxes(box, nodeBox);\n }\n });\n return boxToRect(box);\n};\n\nvar getNodesInside = function getNodesInside(nodes, rect) {\n var _ref2 = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : [0, 0, 1],\n _ref3 = _slicedToArray(_ref2, 3),\n tx = _ref3[0],\n ty = _ref3[1],\n tScale = _ref3[2];\n\n var partially = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;\n var excludeNonSelectableNodes = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : false;\n\n var paneRect = _objectSpread(_objectSpread({}, pointToRendererPoint(rect, [tx, ty, tScale])), {}, {\n width: rect.width / tScale,\n height: rect.height / tScale\n });\n\n var visibleNodes = [];\n\n var _iterator2 = _createForOfIteratorHelper(nodes.values()),\n _step2;\n\n try {\n for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {\n var _ref4, _ref5, _measured$width, _ref6, _ref7, _measured$height;\n\n var node = _step2.value;\n var measured = node.measured,\n _node$selectable = node.selectable,\n selectable = _node$selectable === void 0 ? true : _node$selectable,\n _node$hidden = node.hidden,\n hidden = _node$hidden === void 0 ? false : _node$hidden;\n\n if (excludeNonSelectableNodes && !selectable || hidden) {\n continue;\n }\n\n var width = (_ref4 = (_ref5 = (_measured$width = measured.width) !== null && _measured$width !== void 0 ? _measured$width : node.width) !== null && _ref5 !== void 0 ? _ref5 : node.initialWidth) !== null && _ref4 !== void 0 ? _ref4 : null;\n var height = (_ref6 = (_ref7 = (_measured$height = measured.height) !== null && _measured$height !== void 0 ? _measured$height : node.height) !== null && _ref7 !== void 0 ? _ref7 : node.initialHeight) !== null && _ref6 !== void 0 ? _ref6 : null;\n var overlappingArea = getOverlappingArea(paneRect, nodeToRect(node));\n var area = (width !== null && width !== void 0 ? width : 0) * (height !== null && height !== void 0 ? height : 0);\n var partiallyVisible = partially && overlappingArea > 0;\n var forceInitialRender = !node.internals.handleBounds;\n var isVisible = forceInitialRender || partiallyVisible || overlappingArea >= area;\n\n if (isVisible || node.dragging) {\n visibleNodes.push(node);\n }\n }\n } catch (err) {\n _iterator2.e(err);\n } finally {\n _iterator2.f();\n }\n\n return visibleNodes;\n};\n/**\n * Get all connecting edges for a given set of nodes\n * @param nodes - Nodes you want to get the connected edges for\n * @param edges - All edges\n * @returns Array of edges that connect any of the given nodes with each other\n */\n\n\nvar getConnectedEdges = function getConnectedEdges(nodes, edges) {\n var nodeIds = new Set();\n nodes.forEach(function (node) {\n nodeIds.add(node.id);\n });\n return edges.filter(function (edge) {\n return nodeIds.has(edge.source) || nodeIds.has(edge.target);\n });\n};\n\nfunction getFitViewNodes(nodeLookup, options) {\n var fitViewNodes = new Map();\n var optionNodeIds = options !== null && options !== void 0 && options.nodes ? new Set(options.nodes.map(function (node) {\n return node.id;\n })) : null;\n nodeLookup.forEach(function (n) {\n var isVisible = n.measured.width && n.measured.height && ((options === null || options === void 0 ? void 0 : options.includeHiddenNodes) || !n.hidden);\n\n if (isVisible && (!optionNodeIds || optionNodeIds.has(n.id))) {\n fitViewNodes.set(n.id, n);\n }\n });\n return fitViewNodes;\n}\n\nfunction fitView(_x, _x2) {\n return _fitView.apply(this, arguments);\n}\n/**\n * This function calculates the next position of a node, taking into account the node's extent, parent node, and origin.\n *\n * @internal\n * @returns position, positionAbsolute\n */\n\n\nfunction _fitView() {\n _fitView = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee4(_ref8, options) {\n var _options$minZoom, _options$maxZoom, _options$padding;\n\n var nodes, width, height, panZoom, minZoom, maxZoom, bounds, viewport;\n return _regeneratorRuntime.wrap(function _callee4$(_context4) {\n while (1) {\n switch (_context4.prev = _context4.next) {\n case 0:\n nodes = _ref8.nodes, width = _ref8.width, height = _ref8.height, panZoom = _ref8.panZoom, minZoom = _ref8.minZoom, maxZoom = _ref8.maxZoom;\n\n if (!(nodes.size === 0)) {\n _context4.next = 3;\n break;\n }\n\n return _context4.abrupt(\"return\", Promise.resolve(false));\n\n case 3:\n bounds = getInternalNodesBounds(nodes);\n viewport = getViewportForBounds(bounds, width, height, (_options$minZoom = options === null || options === void 0 ? void 0 : options.minZoom) !== null && _options$minZoom !== void 0 ? _options$minZoom : minZoom, (_options$maxZoom = options === null || options === void 0 ? void 0 : options.maxZoom) !== null && _options$maxZoom !== void 0 ? _options$maxZoom : maxZoom, (_options$padding = options === null || options === void 0 ? void 0 : options.padding) !== null && _options$padding !== void 0 ? _options$padding : 0.1);\n _context4.next = 7;\n return panZoom.setViewport(viewport, {\n duration: options === null || options === void 0 ? void 0 : options.duration\n });\n\n case 7:\n return _context4.abrupt(\"return\", Promise.resolve(true));\n\n case 8:\n case \"end\":\n return _context4.stop();\n }\n }\n }, _callee4);\n }));\n return _fitView.apply(this, arguments);\n}\n\nfunction calculateNodePosition(_ref9) {\n var _node$origin2;\n\n var nodeId = _ref9.nodeId,\n nextPosition = _ref9.nextPosition,\n nodeLookup = _ref9.nodeLookup,\n _ref9$nodeOrigin = _ref9.nodeOrigin,\n nodeOrigin = _ref9$nodeOrigin === void 0 ? [0, 0] : _ref9$nodeOrigin,\n nodeExtent = _ref9.nodeExtent,\n onError = _ref9.onError;\n var node = nodeLookup.get(nodeId);\n var parentNode = node.parentId ? nodeLookup.get(node.parentId) : undefined;\n\n var _ref10 = parentNode ? parentNode.internals.positionAbsolute : {\n x: 0,\n y: 0\n },\n parentX = _ref10.x,\n parentY = _ref10.y;\n\n var origin = (_node$origin2 = node.origin) !== null && _node$origin2 !== void 0 ? _node$origin2 : nodeOrigin;\n var extent = nodeExtent;\n\n if (node.extent === 'parent' && !node.expandParent) {\n if (!parentNode) {\n onError === null || onError === void 0 ? void 0 : onError('005', errorMessages['error005']());\n } else {\n var parentWidth = parentNode.measured.width;\n var parentHeight = parentNode.measured.height;\n\n if (parentWidth && parentHeight) {\n extent = [[parentX, parentY], [parentX + parentWidth, parentY + parentHeight]];\n }\n }\n } else if (parentNode && isCoordinateExtent(node.extent)) {\n extent = [[node.extent[0][0] + parentX, node.extent[0][1] + parentY], [node.extent[1][0] + parentX, node.extent[1][1] + parentY]];\n }\n\n var positionAbsolute = isCoordinateExtent(extent) ? clampPosition(nextPosition, extent, node.measured) : nextPosition;\n return {\n position: {\n x: positionAbsolute.x - parentX + node.measured.width * origin[0],\n y: positionAbsolute.y - parentY + node.measured.height * origin[1]\n },\n positionAbsolute: positionAbsolute\n };\n}\n/**\n * Pass in nodes & edges to delete, get arrays of nodes and edges that actually can be deleted\n * @internal\n * @param param.nodesToRemove - The nodes to remove\n * @param param.edgesToRemove - The edges to remove\n * @param param.nodes - All nodes\n * @param param.edges - All edges\n * @param param.onBeforeDelete - Callback to check which nodes and edges can be deleted\n * @returns nodes: nodes that can be deleted, edges: edges that can be deleted\n */\n\n\nfunction getElementsToRemove(_x3) {\n return _getElementsToRemove.apply(this, arguments);\n}\n\nfunction _getElementsToRemove() {\n _getElementsToRemove = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee5(_ref11) {\n var _ref11$nodesToRemove, nodesToRemove, _ref11$edgesToRemove, edgesToRemove, nodes, edges, onBeforeDelete, nodeIds, matchingNodes, _iterator17, _step17, _loop, _ret, edgeIds, deletableEdges, connectedEdges, matchingEdges, _iterator18, _step18, _loop2, onBeforeDeleteResult;\n\n return _regeneratorRuntime.wrap(function _callee5$(_context5) {\n while (1) {\n switch (_context5.prev = _context5.next) {\n case 0:\n _ref11$nodesToRemove = _ref11.nodesToRemove, nodesToRemove = _ref11$nodesToRemove === void 0 ? [] : _ref11$nodesToRemove, _ref11$edgesToRemove = _ref11.edgesToRemove, edgesToRemove = _ref11$edgesToRemove === void 0 ? [] : _ref11$edgesToRemove, nodes = _ref11.nodes, edges = _ref11.edges, onBeforeDelete = _ref11.onBeforeDelete;\n nodeIds = new Set(nodesToRemove.map(function (node) {\n return node.id;\n }));\n matchingNodes = [];\n _iterator17 = _createForOfIteratorHelper(nodes);\n _context5.prev = 4;\n\n _loop = function _loop() {\n var node = _step17.value;\n\n if (node.deletable === false) {\n return \"continue\";\n }\n\n var isIncluded = nodeIds.has(node.id);\n var parentHit = !isIncluded && node.parentId && matchingNodes.find(function (n) {\n return n.id === node.parentId;\n });\n\n if (isIncluded || parentHit) {\n matchingNodes.push(node);\n }\n };\n\n _iterator17.s();\n\n case 7:\n if ((_step17 = _iterator17.n()).done) {\n _context5.next = 13;\n break;\n }\n\n _ret = _loop();\n\n if (!(_ret === \"continue\")) {\n _context5.next = 11;\n break;\n }\n\n return _context5.abrupt(\"continue\", 11);\n\n case 11:\n _context5.next = 7;\n break;\n\n case 13:\n _context5.next = 18;\n break;\n\n case 15:\n _context5.prev = 15;\n _context5.t0 = _context5[\"catch\"](4);\n\n _iterator17.e(_context5.t0);\n\n case 18:\n _context5.prev = 18;\n\n _iterator17.f();\n\n return _context5.finish(18);\n\n case 21:\n edgeIds = new Set(edgesToRemove.map(function (edge) {\n return edge.id;\n }));\n deletableEdges = edges.filter(function (edge) {\n return edge.deletable !== false;\n });\n connectedEdges = getConnectedEdges(matchingNodes, deletableEdges);\n matchingEdges = connectedEdges;\n _iterator18 = _createForOfIteratorHelper(deletableEdges);\n\n try {\n _loop2 = function _loop2() {\n var edge = _step18.value;\n var isIncluded = edgeIds.has(edge.id);\n\n if (isIncluded && !matchingEdges.find(function (e) {\n return e.id === edge.id;\n })) {\n matchingEdges.push(edge);\n }\n };\n\n for (_iterator18.s(); !(_step18 = _iterator18.n()).done;) {\n _loop2();\n }\n } catch (err) {\n _iterator18.e(err);\n } finally {\n _iterator18.f();\n }\n\n if (onBeforeDelete) {\n _context5.next = 29;\n break;\n }\n\n return _context5.abrupt(\"return\", {\n edges: matchingEdges,\n nodes: matchingNodes\n });\n\n case 29:\n _context5.next = 31;\n return onBeforeDelete({\n nodes: matchingNodes,\n edges: matchingEdges\n });\n\n case 31:\n onBeforeDeleteResult = _context5.sent;\n\n if (!(typeof onBeforeDeleteResult === 'boolean')) {\n _context5.next = 34;\n break;\n }\n\n return _context5.abrupt(\"return\", onBeforeDeleteResult ? {\n edges: matchingEdges,\n nodes: matchingNodes\n } : {\n edges: [],\n nodes: []\n });\n\n case 34:\n return _context5.abrupt(\"return\", onBeforeDeleteResult);\n\n case 35:\n case \"end\":\n return _context5.stop();\n }\n }\n }, _callee5, null, [[4, 15, 18, 21]]);\n }));\n return _getElementsToRemove.apply(this, arguments);\n}\n\nvar clamp = function clamp(val) {\n var min = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n var max = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 1;\n return Math.min(Math.max(val, min), max);\n};\n\nvar clampPosition = function clampPosition() {\n var _dimensions$width, _dimensions$height;\n\n var position = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {\n x: 0,\n y: 0\n };\n var extent = arguments.length > 1 ? arguments[1] : undefined;\n var dimensions = arguments.length > 2 ? arguments[2] : undefined;\n return {\n x: clamp(position.x, extent[0][0], extent[1][0] - ((_dimensions$width = dimensions === null || dimensions === void 0 ? void 0 : dimensions.width) !== null && _dimensions$width !== void 0 ? _dimensions$width : 0)),\n y: clamp(position.y, extent[0][1], extent[1][1] - ((_dimensions$height = dimensions === null || dimensions === void 0 ? void 0 : dimensions.height) !== null && _dimensions$height !== void 0 ? _dimensions$height : 0))\n };\n};\n\nfunction clampPositionToParent(childPosition, childDimensions, parent) {\n var _getNodeDimensions2 = getNodeDimensions(parent),\n parentWidth = _getNodeDimensions2.width,\n parentHeight = _getNodeDimensions2.height;\n\n var _parent$internals$pos = parent.internals.positionAbsolute,\n parentX = _parent$internals$pos.x,\n parentY = _parent$internals$pos.y;\n return clampPosition(childPosition, [[parentX, parentY], [parentX + parentWidth, parentY + parentHeight]], childDimensions);\n}\n/**\n * Calculates the velocity of panning when the mouse is close to the edge of the canvas\n * @internal\n * @param value - One dimensional poition of the mouse (x or y)\n * @param min - Minimal position on canvas before panning starts\n * @param max - Maximal position on canvas before panning starts\n * @returns - A number between 0 and 1 that represents the velocity of panning\n */\n\n\nvar calcAutoPanVelocity = function calcAutoPanVelocity(value, min, max) {\n if (value < min) {\n return clamp(Math.abs(value - min), 1, min) / min;\n } else if (value > max) {\n return -clamp(Math.abs(value - max), 1, min) / min;\n }\n\n return 0;\n};\n\nvar calcAutoPan = function calcAutoPan(pos, bounds) {\n var speed = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 15;\n var distance = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 40;\n var xMovement = calcAutoPanVelocity(pos.x, distance, bounds.width - distance) * speed;\n var yMovement = calcAutoPanVelocity(pos.y, distance, bounds.height - distance) * speed;\n return [xMovement, yMovement];\n};\n\nvar getBoundsOfBoxes = function getBoundsOfBoxes(box1, box2) {\n return {\n x: Math.min(box1.x, box2.x),\n y: Math.min(box1.y, box2.y),\n x2: Math.max(box1.x2, box2.x2),\n y2: Math.max(box1.y2, box2.y2)\n };\n};\n\nvar rectToBox = function rectToBox(_ref12) {\n var x = _ref12.x,\n y = _ref12.y,\n width = _ref12.width,\n height = _ref12.height;\n return {\n x: x,\n y: y,\n x2: x + width,\n y2: y + height\n };\n};\n\nvar boxToRect = function boxToRect(_ref13) {\n var x = _ref13.x,\n y = _ref13.y,\n x2 = _ref13.x2,\n y2 = _ref13.y2;\n return {\n x: x,\n y: y,\n width: x2 - x,\n height: y2 - y\n };\n};\n\nvar nodeToRect = function nodeToRect(node) {\n var _ref15, _ref16, _node$measured$width, _node$measured, _ref17, _ref18, _node$measured$height, _node$measured2;\n\n var nodeOrigin = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [0, 0];\n\n var _ref14 = isInternalNodeBase(node) ? node.internals.positionAbsolute : getNodePositionWithOrigin(node, nodeOrigin),\n x = _ref14.x,\n y = _ref14.y;\n\n return {\n x: x,\n y: y,\n width: (_ref15 = (_ref16 = (_node$measured$width = (_node$measured = node.measured) === null || _node$measured === void 0 ? void 0 : _node$measured.width) !== null && _node$measured$width !== void 0 ? _node$measured$width : node.width) !== null && _ref16 !== void 0 ? _ref16 : node.initialWidth) !== null && _ref15 !== void 0 ? _ref15 : 0,\n height: (_ref17 = (_ref18 = (_node$measured$height = (_node$measured2 = node.measured) === null || _node$measured2 === void 0 ? void 0 : _node$measured2.height) !== null && _node$measured$height !== void 0 ? _node$measured$height : node.height) !== null && _ref18 !== void 0 ? _ref18 : node.initialHeight) !== null && _ref17 !== void 0 ? _ref17 : 0\n };\n};\n\nvar nodeToBox = function nodeToBox(node) {\n var _ref20, _ref21, _node$measured$width2, _node$measured3, _ref22, _ref23, _node$measured$height2, _node$measured4;\n\n var nodeOrigin = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [0, 0];\n\n var _ref19 = isInternalNodeBase(node) ? node.internals.positionAbsolute : getNodePositionWithOrigin(node, nodeOrigin),\n x = _ref19.x,\n y = _ref19.y;\n\n return {\n x: x,\n y: y,\n x2: x + ((_ref20 = (_ref21 = (_node$measured$width2 = (_node$measured3 = node.measured) === null || _node$measured3 === void 0 ? void 0 : _node$measured3.width) !== null && _node$measured$width2 !== void 0 ? _node$measured$width2 : node.width) !== null && _ref21 !== void 0 ? _ref21 : node.initialWidth) !== null && _ref20 !== void 0 ? _ref20 : 0),\n y2: y + ((_ref22 = (_ref23 = (_node$measured$height2 = (_node$measured4 = node.measured) === null || _node$measured4 === void 0 ? void 0 : _node$measured4.height) !== null && _node$measured$height2 !== void 0 ? _node$measured$height2 : node.height) !== null && _ref23 !== void 0 ? _ref23 : node.initialHeight) !== null && _ref22 !== void 0 ? _ref22 : 0)\n };\n};\n\nvar getBoundsOfRects = function getBoundsOfRects(rect1, rect2) {\n return boxToRect(getBoundsOfBoxes(rectToBox(rect1), rectToBox(rect2)));\n};\n\nvar getOverlappingArea = function getOverlappingArea(rectA, rectB) {\n var xOverlap = Math.max(0, Math.min(rectA.x + rectA.width, rectB.x + rectB.width) - Math.max(rectA.x, rectB.x));\n var yOverlap = Math.max(0, Math.min(rectA.y + rectA.height, rectB.y + rectB.height) - Math.max(rectA.y, rectB.y));\n return Math.ceil(xOverlap * yOverlap);\n}; // eslint-disable-next-line @typescript-eslint/no-explicit-any\n\n\nvar isRectObject = function isRectObject(obj) {\n return isNumeric(obj.width) && isNumeric(obj.height) && isNumeric(obj.x) && isNumeric(obj.y);\n};\n/* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n\n\nvar isNumeric = function isNumeric(n) {\n return !isNaN(n) && isFinite(n);\n}; // used for a11y key board controls for nodes and edges\n\n\nvar devWarn = function devWarn(id, message) {\n if (process.env.NODE_ENV === 'development') {\n console.warn(\"[React Flow]: \".concat(message, \" Help: https://reactflow.dev/error#\").concat(id));\n }\n};\n\nvar snapPosition = function snapPosition(position) {\n var snapGrid = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [1, 1];\n return {\n x: snapGrid[0] * Math.round(position.x / snapGrid[0]),\n y: snapGrid[1] * Math.round(position.y / snapGrid[1])\n };\n};\n\nvar pointToRendererPoint = function pointToRendererPoint(_ref24, _ref25) {\n var x = _ref24.x,\n y = _ref24.y;\n\n var _ref26 = _slicedToArray(_ref25, 3),\n tx = _ref26[0],\n ty = _ref26[1],\n tScale = _ref26[2];\n\n var snapToGrid = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n var snapGrid = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : [1, 1];\n var position = {\n x: (x - tx) / tScale,\n y: (y - ty) / tScale\n };\n return snapToGrid ? snapPosition(position, snapGrid) : position;\n};\n\nvar rendererPointToPoint = function rendererPointToPoint(_ref27, _ref28) {\n var x = _ref27.x,\n y = _ref27.y;\n\n var _ref29 = _slicedToArray(_ref28, 3),\n tx = _ref29[0],\n ty = _ref29[1],\n tScale = _ref29[2];\n\n return {\n x: x * tScale + tx,\n y: y * tScale + ty\n };\n};\n/**\n * Returns a viewport that encloses the given bounds with optional padding.\n * @public\n * @remarks You can determine bounds of nodes with {@link getNodesBounds} and {@link getBoundsOfRects}\n * @param bounds - Bounds to fit inside viewport\n * @param width - Width of the viewport\n * @param height - Height of the viewport\n * @param minZoom - Minimum zoom level of the resulting viewport\n * @param maxZoom - Maximum zoom level of the resulting viewport\n * @param padding - Optional padding around the bounds\n * @returns A transforned {@link Viewport} that encloses the given bounds which you can pass to e.g. {@link setViewport}\n * @example\n * const { x, y, zoom } = getViewportForBounds(\n { x: 0, y: 0, width: 100, height: 100},\n 1200, 800, 0.5, 2);\n */\n\n\nvar getViewportForBounds = function getViewportForBounds(bounds, width, height, minZoom, maxZoom, padding) {\n var xZoom = width / (bounds.width * (1 + padding));\n var yZoom = height / (bounds.height * (1 + padding));\n var zoom = Math.min(xZoom, yZoom);\n var clampedZoom = clamp(zoom, minZoom, maxZoom);\n var boundsCenterX = bounds.x + bounds.width / 2;\n var boundsCenterY = bounds.y + bounds.height / 2;\n var x = width / 2 - boundsCenterX * clampedZoom;\n var y = height / 2 - boundsCenterY * clampedZoom;\n return {\n x: x,\n y: y,\n zoom: clampedZoom\n };\n};\n\nvar isMacOs = function isMacOs() {\n var _navigator, _navigator$userAgent;\n\n return typeof navigator !== 'undefined' && ((_navigator = navigator) === null || _navigator === void 0 ? void 0 : (_navigator$userAgent = _navigator.userAgent) === null || _navigator$userAgent === void 0 ? void 0 : _navigator$userAgent.indexOf('Mac')) >= 0;\n};\n\nfunction isCoordinateExtent(extent) {\n return extent !== undefined && extent !== 'parent';\n}\n\nfunction getNodeDimensions(node) {\n var _ref30, _ref31, _node$measured$width3, _node$measured5, _ref32, _ref33, _node$measured$height3, _node$measured6;\n\n return {\n width: (_ref30 = (_ref31 = (_node$measured$width3 = (_node$measured5 = node.measured) === null || _node$measured5 === void 0 ? void 0 : _node$measured5.width) !== null && _node$measured$width3 !== void 0 ? _node$measured$width3 : node.width) !== null && _ref31 !== void 0 ? _ref31 : node.initialWidth) !== null && _ref30 !== void 0 ? _ref30 : 0,\n height: (_ref32 = (_ref33 = (_node$measured$height3 = (_node$measured6 = node.measured) === null || _node$measured6 === void 0 ? void 0 : _node$measured6.height) !== null && _node$measured$height3 !== void 0 ? _node$measured$height3 : node.height) !== null && _ref33 !== void 0 ? _ref33 : node.initialHeight) !== null && _ref32 !== void 0 ? _ref32 : 0\n };\n}\n\nfunction nodeHasDimensions(node) {\n var _ref34, _node$measured$width4, _node$measured7, _ref35, _node$measured$height4, _node$measured8;\n\n return ((_ref34 = (_node$measured$width4 = (_node$measured7 = node.measured) === null || _node$measured7 === void 0 ? void 0 : _node$measured7.width) !== null && _node$measured$width4 !== void 0 ? _node$measured$width4 : node.width) !== null && _ref34 !== void 0 ? _ref34 : node.initialWidth) !== undefined && ((_ref35 = (_node$measured$height4 = (_node$measured8 = node.measured) === null || _node$measured8 === void 0 ? void 0 : _node$measured8.height) !== null && _node$measured$height4 !== void 0 ? _node$measured$height4 : node.height) !== null && _ref35 !== void 0 ? _ref35 : node.initialHeight) !== undefined;\n}\n/**\n * Convert child position to aboslute position\n *\n * @internal\n * @param position\n * @param parentId\n * @param nodeLookup\n * @param nodeOrigin\n * @returns an internal node with an absolute position\n */\n\n\nfunction evaluateAbsolutePosition(position) {\n var dimensions = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {\n width: 0,\n height: 0\n };\n var parentId = arguments.length > 2 ? arguments[2] : undefined;\n var nodeLookup = arguments.length > 3 ? arguments[3] : undefined;\n var nodeOrigin = arguments.length > 4 ? arguments[4] : undefined;\n var nextParentId = parentId;\n\n var positionAbsolute = _objectSpread({}, position);\n\n while (nextParentId) {\n var parent = nodeLookup.get(nextParentId);\n nextParentId = parent === null || parent === void 0 ? void 0 : parent.parentId;\n\n if (parent) {\n var _dimensions$width2, _dimensions$height2;\n\n var origin = parent.origin || nodeOrigin;\n positionAbsolute.x += parent.internals.positionAbsolute.x - ((_dimensions$width2 = dimensions.width) !== null && _dimensions$width2 !== void 0 ? _dimensions$width2 : 0) * origin[0];\n positionAbsolute.y += parent.internals.positionAbsolute.y - ((_dimensions$height2 = dimensions.height) !== null && _dimensions$height2 !== void 0 ? _dimensions$height2 : 0) * origin[1];\n }\n }\n\n return positionAbsolute;\n}\n\nfunction getPointerPosition(event, _ref36) {\n var _ref36$snapGrid = _ref36.snapGrid,\n snapGrid = _ref36$snapGrid === void 0 ? [0, 0] : _ref36$snapGrid,\n _ref36$snapToGrid = _ref36.snapToGrid,\n snapToGrid = _ref36$snapToGrid === void 0 ? false : _ref36$snapToGrid,\n transform = _ref36.transform;\n\n var _getEventPosition = getEventPosition(event),\n x = _getEventPosition.x,\n y = _getEventPosition.y;\n\n var pointerPos = pointToRendererPoint({\n x: x,\n y: y\n }, transform);\n\n var _ref37 = snapToGrid ? snapPosition(pointerPos, snapGrid) : pointerPos,\n xSnapped = _ref37.x,\n ySnapped = _ref37.y; // we need the snapped position in order to be able to skip unnecessary drag events\n\n\n return _objectSpread({\n xSnapped: xSnapped,\n ySnapped: ySnapped\n }, pointerPos);\n}\n\nvar getDimensions = function getDimensions(node) {\n return {\n width: node.offsetWidth,\n height: node.offsetHeight\n };\n};\n\nvar getHostForElement = function getHostForElement(element) {\n var _element$getRootNode, _window;\n\n return ((_element$getRootNode = element.getRootNode) === null || _element$getRootNode === void 0 ? void 0 : _element$getRootNode.call(element)) || ((_window = window) === null || _window === void 0 ? void 0 : _window.document);\n};\n\nvar inputTags = ['INPUT', 'SELECT', 'TEXTAREA'];\n\nfunction isInputDOMNode(event) {\n var _event$composedPath, _event$composedPath$c;\n\n // using composed path for handling shadow dom\n var target = ((_event$composedPath = event.composedPath) === null || _event$composedPath === void 0 ? void 0 : (_event$composedPath$c = _event$composedPath.call(event)) === null || _event$composedPath$c === void 0 ? void 0 : _event$composedPath$c[0]) || event.target;\n var isInput = inputTags.includes(target === null || target === void 0 ? void 0 : target.nodeName) || (target === null || target === void 0 ? void 0 : target.hasAttribute('contenteditable')); // when an input field is focused we don't want to trigger deletion or movement of nodes\n\n return isInput || !!(target !== null && target !== void 0 && target.closest('.nokey'));\n}\n\nvar isMouseEvent = function isMouseEvent(event) {\n return 'clientX' in event;\n};\n\nvar getEventPosition = function getEventPosition(event, bounds) {\n var _event$touches, _event$touches2, _bounds$left, _bounds$top;\n\n var isMouse = isMouseEvent(event);\n var evtX = isMouse ? event.clientX : (_event$touches = event.touches) === null || _event$touches === void 0 ? void 0 : _event$touches[0].clientX;\n var evtY = isMouse ? event.clientY : (_event$touches2 = event.touches) === null || _event$touches2 === void 0 ? void 0 : _event$touches2[0].clientY;\n return {\n x: evtX - ((_bounds$left = bounds === null || bounds === void 0 ? void 0 : bounds.left) !== null && _bounds$left !== void 0 ? _bounds$left : 0),\n y: evtY - ((_bounds$top = bounds === null || bounds === void 0 ? void 0 : bounds.top) !== null && _bounds$top !== void 0 ? _bounds$top : 0)\n };\n}; // The handle bounds are calculated relative to the node element.\n// We store them in the internals object of the node in order to avoid\n// unnecessary recalculations.\n\n\nvar getHandleBounds = function getHandleBounds(type, nodeElement, nodeBounds, zoom, nodeId) {\n var handles = nodeElement.querySelectorAll(\".\".concat(type));\n\n if (!handles || !handles.length) {\n return null;\n }\n\n return Array.from(handles).map(function (handle) {\n var handleBounds = handle.getBoundingClientRect();\n return _objectSpread({\n id: handle.getAttribute('data-handleid'),\n type: type,\n nodeId: nodeId,\n position: handle.getAttribute('data-handlepos'),\n x: (handleBounds.left - nodeBounds.left) / zoom,\n y: (handleBounds.top - nodeBounds.top) / zoom\n }, getDimensions(handle));\n });\n};\n\nfunction getBezierEdgeCenter(_ref38) {\n var sourceX = _ref38.sourceX,\n sourceY = _ref38.sourceY,\n targetX = _ref38.targetX,\n targetY = _ref38.targetY,\n sourceControlX = _ref38.sourceControlX,\n sourceControlY = _ref38.sourceControlY,\n targetControlX = _ref38.targetControlX,\n targetControlY = _ref38.targetControlY;\n // cubic bezier t=0.5 mid point, not the actual mid point, but easy to calculate\n // https://stackoverflow.com/questions/67516101/how-to-find-distance-mid-point-of-bezier-curve\n var centerX = sourceX * 0.125 + sourceControlX * 0.375 + targetControlX * 0.375 + targetX * 0.125;\n var centerY = sourceY * 0.125 + sourceControlY * 0.375 + targetControlY * 0.375 + targetY * 0.125;\n var offsetX = Math.abs(centerX - sourceX);\n var offsetY = Math.abs(centerY - sourceY);\n return [centerX, centerY, offsetX, offsetY];\n}\n\nfunction calculateControlOffset(distance, curvature) {\n if (distance >= 0) {\n return 0.5 * distance;\n }\n\n return curvature * 25 * Math.sqrt(-distance);\n}\n\nfunction getControlWithCurvature(_ref39) {\n var pos = _ref39.pos,\n x1 = _ref39.x1,\n y1 = _ref39.y1,\n x2 = _ref39.x2,\n y2 = _ref39.y2,\n c = _ref39.c;\n\n switch (pos) {\n case Position.Left:\n return [x1 - calculateControlOffset(x1 - x2, c), y1];\n\n case Position.Right:\n return [x1 + calculateControlOffset(x2 - x1, c), y1];\n\n case Position.Top:\n return [x1, y1 - calculateControlOffset(y1 - y2, c)];\n\n case Position.Bottom:\n return [x1, y1 + calculateControlOffset(y2 - y1, c)];\n }\n}\n/**\n * Get a bezier path from source to target handle\n * @param params.sourceX - The x position of the source handle\n * @param params.sourceY - The y position of the source handle\n * @param params.sourcePosition - The position of the source handle (default: Position.Bottom)\n * @param params.targetX - The x position of the target handle\n * @param params.targetY - The y position of the target handle\n * @param params.targetPosition - The position of the target handle (default: Position.Top)\n * @param params.curvature - The curvature of the bezier edge\n * @returns A path string you can use in an SVG, the labelX and labelY position (center of path) and offsetX, offsetY between source handle and label\n * @example\n * const source = { x: 0, y: 20 };\n const target = { x: 150, y: 100 };\n \n const [path, labelX, labelY, offsetX, offsetY] = getBezierPath({\n sourceX: source.x,\n sourceY: source.y,\n sourcePosition: Position.Right,\n targetX: target.x,\n targetY: target.y,\n targetPosition: Position.Left,\n});\n */\n\n\nfunction getBezierPath(_ref40) {\n var sourceX = _ref40.sourceX,\n sourceY = _ref40.sourceY,\n _ref40$sourcePosition = _ref40.sourcePosition,\n sourcePosition = _ref40$sourcePosition === void 0 ? Position.Bottom : _ref40$sourcePosition,\n targetX = _ref40.targetX,\n targetY = _ref40.targetY,\n _ref40$targetPosition = _ref40.targetPosition,\n targetPosition = _ref40$targetPosition === void 0 ? Position.Top : _ref40$targetPosition,\n _ref40$curvature = _ref40.curvature,\n curvature = _ref40$curvature === void 0 ? 0.25 : _ref40$curvature;\n\n var _getControlWithCurvat = getControlWithCurvature({\n pos: sourcePosition,\n x1: sourceX,\n y1: sourceY,\n x2: targetX,\n y2: targetY,\n c: curvature\n }),\n _getControlWithCurvat2 = _slicedToArray(_getControlWithCurvat, 2),\n sourceControlX = _getControlWithCurvat2[0],\n sourceControlY = _getControlWithCurvat2[1];\n\n var _getControlWithCurvat3 = getControlWithCurvature({\n pos: targetPosition,\n x1: targetX,\n y1: targetY,\n x2: sourceX,\n y2: sourceY,\n c: curvature\n }),\n _getControlWithCurvat4 = _slicedToArray(_getControlWithCurvat3, 2),\n targetControlX = _getControlWithCurvat4[0],\n targetControlY = _getControlWithCurvat4[1];\n\n var _getBezierEdgeCenter = getBezierEdgeCenter({\n sourceX: sourceX,\n sourceY: sourceY,\n targetX: targetX,\n targetY: targetY,\n sourceControlX: sourceControlX,\n sourceControlY: sourceControlY,\n targetControlX: targetControlX,\n targetControlY: targetControlY\n }),\n _getBezierEdgeCenter2 = _slicedToArray(_getBezierEdgeCenter, 4),\n labelX = _getBezierEdgeCenter2[0],\n labelY = _getBezierEdgeCenter2[1],\n offsetX = _getBezierEdgeCenter2[2],\n offsetY = _getBezierEdgeCenter2[3];\n\n return [\"M\".concat(sourceX, \",\").concat(sourceY, \" C\").concat(sourceControlX, \",\").concat(sourceControlY, \" \").concat(targetControlX, \",\").concat(targetControlY, \" \").concat(targetX, \",\").concat(targetY), labelX, labelY, offsetX, offsetY];\n} // this is used for straight edges and simple smoothstep edges (LTR, RTL, BTT, TTB)\n\n\nfunction getEdgeCenter(_ref41) {\n var sourceX = _ref41.sourceX,\n sourceY = _ref41.sourceY,\n targetX = _ref41.targetX,\n targetY = _ref41.targetY;\n var xOffset = Math.abs(targetX - sourceX) / 2;\n var centerX = targetX < sourceX ? targetX + xOffset : targetX - xOffset;\n var yOffset = Math.abs(targetY - sourceY) / 2;\n var centerY = targetY < sourceY ? targetY + yOffset : targetY - yOffset;\n return [centerX, centerY, xOffset, yOffset];\n}\n\nfunction getElevatedEdgeZIndex(_ref42) {\n var sourceNode = _ref42.sourceNode,\n targetNode = _ref42.targetNode,\n _ref42$selected = _ref42.selected,\n selected = _ref42$selected === void 0 ? false : _ref42$selected,\n _ref42$zIndex = _ref42.zIndex,\n zIndex = _ref42$zIndex === void 0 ? 0 : _ref42$zIndex,\n _ref42$elevateOnSelec = _ref42.elevateOnSelect,\n elevateOnSelect = _ref42$elevateOnSelec === void 0 ? false : _ref42$elevateOnSelec;\n\n if (!elevateOnSelect) {\n return zIndex;\n }\n\n var edgeOrConnectedNodeSelected = selected || targetNode.selected || sourceNode.selected;\n var selectedZIndex = Math.max(sourceNode.internals.z || 0, targetNode.internals.z || 0, 1000);\n return zIndex + (edgeOrConnectedNodeSelected ? selectedZIndex : 0);\n}\n\nfunction isEdgeVisible(_ref43) {\n var sourceNode = _ref43.sourceNode,\n targetNode = _ref43.targetNode,\n width = _ref43.width,\n height = _ref43.height,\n transform = _ref43.transform;\n var edgeBox = getBoundsOfBoxes(nodeToBox(sourceNode), nodeToBox(targetNode));\n\n if (edgeBox.x === edgeBox.x2) {\n edgeBox.x2 += 1;\n }\n\n if (edgeBox.y === edgeBox.y2) {\n edgeBox.y2 += 1;\n }\n\n var viewRect = {\n x: -transform[0] / transform[2],\n y: -transform[1] / transform[2],\n width: width / transform[2],\n height: height / transform[2]\n };\n return getOverlappingArea(viewRect, boxToRect(edgeBox)) > 0;\n}\n\nvar getEdgeId = function getEdgeId(_ref44) {\n var source = _ref44.source,\n sourceHandle = _ref44.sourceHandle,\n target = _ref44.target,\n targetHandle = _ref44.targetHandle;\n return \"xy-edge__\".concat(source).concat(sourceHandle || '', \"-\").concat(target).concat(targetHandle || '');\n};\n\nvar connectionExists = function connectionExists(edge, edges) {\n return edges.some(function (el) {\n return el.source === edge.source && el.target === edge.target && (el.sourceHandle === edge.sourceHandle || !el.sourceHandle && !edge.sourceHandle) && (el.targetHandle === edge.targetHandle || !el.targetHandle && !edge.targetHandle);\n });\n};\n/**\n * This util is a convenience function to add a new Edge to an array of edges\n * @remarks It also performs some validation to make sure you don't add an invalid edge or duplicate an existing one.\n * @public\n * @param edgeParams - Either an Edge or a Connection you want to add\n * @param edges - The array of all current edges\n * @returns A new array of edges with the new edge added\n */\n\n\nvar addEdge = function addEdge(edgeParams, edges) {\n if (!edgeParams.source || !edgeParams.target) {\n devWarn('006', errorMessages['error006']());\n return edges;\n }\n\n var edge;\n\n if (isEdgeBase(edgeParams)) {\n edge = _objectSpread({}, edgeParams);\n } else {\n edge = _objectSpread(_objectSpread({}, edgeParams), {}, {\n id: getEdgeId(edgeParams)\n });\n }\n\n if (connectionExists(edge, edges)) {\n return edges;\n }\n\n if (edge.sourceHandle === null) {\n delete edge.sourceHandle;\n }\n\n if (edge.targetHandle === null) {\n delete edge.targetHandle;\n }\n\n return edges.concat(edge);\n};\n/**\n * A handy utility to reconnect an existing edge with new properties\n * @param oldEdge - The edge you want to update\n * @param newConnection - The new connection you want to update the edge with\n * @param edges - The array of all current edges\n * @param options.shouldReplaceId - should the id of the old edge be replaced with the new connection id\n * @returns the updated edges array\n */\n\n\nvar reconnectEdge = function reconnectEdge(oldEdge, newConnection, edges) {\n var options = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {\n shouldReplaceId: true\n };\n\n var oldEdgeId = oldEdge.id,\n rest = _objectWithoutProperties(oldEdge, _excluded);\n\n if (!newConnection.source || !newConnection.target) {\n devWarn('006', errorMessages['error006']());\n return edges;\n }\n\n var foundEdge = edges.find(function (e) {\n return e.id === oldEdge.id;\n });\n\n if (!foundEdge) {\n devWarn('007', errorMessages['error007'](oldEdgeId));\n return edges;\n } // Remove old edge and create the new edge with parameters of old edge.\n\n\n var edge = _objectSpread(_objectSpread({}, rest), {}, {\n id: options.shouldReplaceId ? getEdgeId(newConnection) : oldEdgeId,\n source: newConnection.source,\n target: newConnection.target,\n sourceHandle: newConnection.sourceHandle,\n targetHandle: newConnection.targetHandle\n });\n\n return edges.filter(function (e) {\n return e.id !== oldEdgeId;\n }).concat(edge);\n};\n/**\n * Get a straight path from source to target handle\n * @param params.sourceX - The x position of the source handle\n * @param params.sourceY - The y position of the source handle\n * @param params.targetX - The x position of the target handle\n * @param params.targetY - The y position of the target handle\n * @returns A path string you can use in an SVG, the labelX and labelY position (center of path) and offsetX, offsetY between source handle and label\n * @example\n * const source = { x: 0, y: 20 };\n const target = { x: 150, y: 100 };\n \n const [path, labelX, labelY, offsetX, offsetY] = getStraightPath({\n sourceX: source.x,\n sourceY: source.y,\n sourcePosition: Position.Right,\n targetX: target.x,\n targetY: target.y,\n targetPosition: Position.Left,\n });\n */\n\n\nfunction getStraightPath(_ref45) {\n var sourceX = _ref45.sourceX,\n sourceY = _ref45.sourceY,\n targetX = _ref45.targetX,\n targetY = _ref45.targetY;\n\n var _getEdgeCenter = getEdgeCenter({\n sourceX: sourceX,\n sourceY: sourceY,\n targetX: targetX,\n targetY: targetY\n }),\n _getEdgeCenter2 = _slicedToArray(_getEdgeCenter, 4),\n labelX = _getEdgeCenter2[0],\n labelY = _getEdgeCenter2[1],\n offsetX = _getEdgeCenter2[2],\n offsetY = _getEdgeCenter2[3];\n\n return [\"M \".concat(sourceX, \",\").concat(sourceY, \"L \").concat(targetX, \",\").concat(targetY), labelX, labelY, offsetX, offsetY];\n}\n\nvar handleDirections = (_handleDirections = {}, _defineProperty(_handleDirections, Position.Left, {\n x: -1,\n y: 0\n}), _defineProperty(_handleDirections, Position.Right, {\n x: 1,\n y: 0\n}), _defineProperty(_handleDirections, Position.Top, {\n x: 0,\n y: -1\n}), _defineProperty(_handleDirections, Position.Bottom, {\n x: 0,\n y: 1\n}), _handleDirections);\n\nvar getDirection = function getDirection(_ref46) {\n var source = _ref46.source,\n _ref46$sourcePosition = _ref46.sourcePosition,\n sourcePosition = _ref46$sourcePosition === void 0 ? Position.Bottom : _ref46$sourcePosition,\n target = _ref46.target;\n\n if (sourcePosition === Position.Left || sourcePosition === Position.Right) {\n return source.x < target.x ? {\n x: 1,\n y: 0\n } : {\n x: -1,\n y: 0\n };\n }\n\n return source.y < target.y ? {\n x: 0,\n y: 1\n } : {\n x: 0,\n y: -1\n };\n};\n\nvar distance = function distance(a, b) {\n return Math.sqrt(Math.pow(b.x - a.x, 2) + Math.pow(b.y - a.y, 2));\n}; // ith this function we try to mimic a orthogonal edge routing behaviour\n// It's not as good as a real orthogonal edge routing but it's faster and good enough as a default for step and smooth step edges\n\n\nfunction getPoints(_ref47) {\n var source = _ref47.source,\n _ref47$sourcePosition = _ref47.sourcePosition,\n sourcePosition = _ref47$sourcePosition === void 0 ? Position.Bottom : _ref47$sourcePosition,\n target = _ref47.target,\n _ref47$targetPosition = _ref47.targetPosition,\n targetPosition = _ref47$targetPosition === void 0 ? Position.Top : _ref47$targetPosition,\n center = _ref47.center,\n offset = _ref47.offset;\n var sourceDir = handleDirections[sourcePosition];\n var targetDir = handleDirections[targetPosition];\n var sourceGapped = {\n x: source.x + sourceDir.x * offset,\n y: source.y + sourceDir.y * offset\n };\n var targetGapped = {\n x: target.x + targetDir.x * offset,\n y: target.y + targetDir.y * offset\n };\n var dir = getDirection({\n source: sourceGapped,\n sourcePosition: sourcePosition,\n target: targetGapped\n });\n var dirAccessor = dir.x !== 0 ? 'x' : 'y';\n var currDir = dir[dirAccessor];\n var points = [];\n var centerX, centerY;\n var sourceGapOffset = {\n x: 0,\n y: 0\n };\n var targetGapOffset = {\n x: 0,\n y: 0\n };\n\n var _getEdgeCenter3 = getEdgeCenter({\n sourceX: source.x,\n sourceY: source.y,\n targetX: target.x,\n targetY: target.y\n }),\n _getEdgeCenter4 = _slicedToArray(_getEdgeCenter3, 4),\n defaultCenterX = _getEdgeCenter4[0],\n defaultCenterY = _getEdgeCenter4[1],\n defaultOffsetX = _getEdgeCenter4[2],\n defaultOffsetY = _getEdgeCenter4[3]; // opposite handle positions, default case\n\n\n if (sourceDir[dirAccessor] * targetDir[dirAccessor] === -1) {\n var _center$x, _center$y;\n\n centerX = (_center$x = center.x) !== null && _center$x !== void 0 ? _center$x : defaultCenterX;\n centerY = (_center$y = center.y) !== null && _center$y !== void 0 ? _center$y : defaultCenterY; // --->\n // |\n // >---\n\n var verticalSplit = [{\n x: centerX,\n y: sourceGapped.y\n }, {\n x: centerX,\n y: targetGapped.y\n }]; // |\n // ---\n // |\n\n var horizontalSplit = [{\n x: sourceGapped.x,\n y: centerY\n }, {\n x: targetGapped.x,\n y: centerY\n }];\n\n if (sourceDir[dirAccessor] === currDir) {\n points = dirAccessor === 'x' ? verticalSplit : horizontalSplit;\n } else {\n points = dirAccessor === 'x' ? horizontalSplit : verticalSplit;\n }\n } else {\n // sourceTarget means we take x from source and y from target, targetSource is the opposite\n var sourceTarget = [{\n x: sourceGapped.x,\n y: targetGapped.y\n }];\n var targetSource = [{\n x: targetGapped.x,\n y: sourceGapped.y\n }]; // this handles edges with same handle positions\n\n if (dirAccessor === 'x') {\n points = sourceDir.x === currDir ? targetSource : sourceTarget;\n } else {\n points = sourceDir.y === currDir ? sourceTarget : targetSource;\n }\n\n if (sourcePosition === targetPosition) {\n var diff = Math.abs(source[dirAccessor] - target[dirAccessor]); // if an edge goes from right to right for example (sourcePosition === targetPosition) and the distance between source.x and target.x is less than the offset, the added point and the gapped source/target will overlap. This leads to a weird edge path. To avoid this we add a gapOffset to the source/target\n\n if (diff <= offset) {\n var gapOffset = Math.min(offset - 1, offset - diff);\n\n if (sourceDir[dirAccessor] === currDir) {\n sourceGapOffset[dirAccessor] = (sourceGapped[dirAccessor] > source[dirAccessor] ? -1 : 1) * gapOffset;\n } else {\n targetGapOffset[dirAccessor] = (targetGapped[dirAccessor] > target[dirAccessor] ? -1 : 1) * gapOffset;\n }\n }\n } // these are conditions for handling mixed handle positions like Right -> Bottom for example\n\n\n if (sourcePosition !== targetPosition) {\n var dirAccessorOpposite = dirAccessor === 'x' ? 'y' : 'x';\n var isSameDir = sourceDir[dirAccessor] === targetDir[dirAccessorOpposite];\n var sourceGtTargetOppo = sourceGapped[dirAccessorOpposite] > targetGapped[dirAccessorOpposite];\n var sourceLtTargetOppo = sourceGapped[dirAccessorOpposite] < targetGapped[dirAccessorOpposite];\n var flipSourceTarget = sourceDir[dirAccessor] === 1 && (!isSameDir && sourceGtTargetOppo || isSameDir && sourceLtTargetOppo) || sourceDir[dirAccessor] !== 1 && (!isSameDir && sourceLtTargetOppo || isSameDir && sourceGtTargetOppo);\n\n if (flipSourceTarget) {\n points = dirAccessor === 'x' ? sourceTarget : targetSource;\n }\n }\n\n var sourceGapPoint = {\n x: sourceGapped.x + sourceGapOffset.x,\n y: sourceGapped.y + sourceGapOffset.y\n };\n var targetGapPoint = {\n x: targetGapped.x + targetGapOffset.x,\n y: targetGapped.y + targetGapOffset.y\n };\n var maxXDistance = Math.max(Math.abs(sourceGapPoint.x - points[0].x), Math.abs(targetGapPoint.x - points[0].x));\n var maxYDistance = Math.max(Math.abs(sourceGapPoint.y - points[0].y), Math.abs(targetGapPoint.y - points[0].y)); // we want to place the label on the longest segment of the edge\n\n if (maxXDistance >= maxYDistance) {\n centerX = (sourceGapPoint.x + targetGapPoint.x) / 2;\n centerY = points[0].y;\n } else {\n centerX = points[0].x;\n centerY = (sourceGapPoint.y + targetGapPoint.y) / 2;\n }\n }\n\n var pathPoints = [source, {\n x: sourceGapped.x + sourceGapOffset.x,\n y: sourceGapped.y + sourceGapOffset.y\n }].concat(_toConsumableArray(points), [{\n x: targetGapped.x + targetGapOffset.x,\n y: targetGapped.y + targetGapOffset.y\n }, target]);\n return [pathPoints, centerX, centerY, defaultOffsetX, defaultOffsetY];\n}\n\nfunction getBend(a, b, c, size) {\n var bendSize = Math.min(distance(a, b) / 2, distance(b, c) / 2, size);\n var x = b.x,\n y = b.y; // no bend\n\n if (a.x === x && x === c.x || a.y === y && y === c.y) {\n return \"L\".concat(x, \" \").concat(y);\n } // first segment is horizontal\n\n\n if (a.y === y) {\n var _xDir = a.x < c.x ? -1 : 1;\n\n var _yDir = a.y < c.y ? 1 : -1;\n\n return \"L \".concat(x + bendSize * _xDir, \",\").concat(y, \"Q \").concat(x, \",\").concat(y, \" \").concat(x, \",\").concat(y + bendSize * _yDir);\n }\n\n var xDir = a.x < c.x ? 1 : -1;\n var yDir = a.y < c.y ? -1 : 1;\n return \"L \".concat(x, \",\").concat(y + bendSize * yDir, \"Q \").concat(x, \",\").concat(y, \" \").concat(x + bendSize * xDir, \",\").concat(y);\n}\n/**\n * Get a smooth step path from source to target handle\n * @param params.sourceX - The x position of the source handle\n * @param params.sourceY - The y position of the source handle\n * @param params.sourcePosition - The position of the source handle (default: Position.Bottom)\n * @param params.targetX - The x position of the target handle\n * @param params.targetY - The y position of the target handle\n * @param params.targetPosition - The position of the target handle (default: Position.Top)\n * @returns A path string you can use in an SVG, the labelX and labelY position (center of path) and offsetX, offsetY between source handle and label\n * @example\n * const source = { x: 0, y: 20 };\n const target = { x: 150, y: 100 };\n \n const [path, labelX, labelY, offsetX, offsetY] = getSmoothStepPath({\n sourceX: source.x,\n sourceY: source.y,\n sourcePosition: Position.Right,\n targetX: target.x,\n targetY: target.y,\n targetPosition: Position.Left,\n });\n */\n\n\nfunction getSmoothStepPath(_ref48) {\n var sourceX = _ref48.sourceX,\n sourceY = _ref48.sourceY,\n _ref48$sourcePosition = _ref48.sourcePosition,\n sourcePosition = _ref48$sourcePosition === void 0 ? Position.Bottom : _ref48$sourcePosition,\n targetX = _ref48.targetX,\n targetY = _ref48.targetY,\n _ref48$targetPosition = _ref48.targetPosition,\n targetPosition = _ref48$targetPosition === void 0 ? Position.Top : _ref48$targetPosition,\n _ref48$borderRadius = _ref48.borderRadius,\n borderRadius = _ref48$borderRadius === void 0 ? 5 : _ref48$borderRadius,\n centerX = _ref48.centerX,\n centerY = _ref48.centerY,\n _ref48$offset = _ref48.offset,\n offset = _ref48$offset === void 0 ? 20 : _ref48$offset;\n\n var _getPoints = getPoints({\n source: {\n x: sourceX,\n y: sourceY\n },\n sourcePosition: sourcePosition,\n target: {\n x: targetX,\n y: targetY\n },\n targetPosition: targetPosition,\n center: {\n x: centerX,\n y: centerY\n },\n offset: offset\n }),\n _getPoints2 = _slicedToArray(_getPoints, 5),\n points = _getPoints2[0],\n labelX = _getPoints2[1],\n labelY = _getPoints2[2],\n offsetX = _getPoints2[3],\n offsetY = _getPoints2[4];\n\n var path = points.reduce(function (res, p, i) {\n var segment = '';\n\n if (i > 0 && i < points.length - 1) {\n segment = getBend(points[i - 1], p, points[i + 1], borderRadius);\n } else {\n segment = \"\".concat(i === 0 ? 'M' : 'L').concat(p.x, \" \").concat(p.y);\n }\n\n res += segment;\n return res;\n }, '');\n return [path, labelX, labelY, offsetX, offsetY];\n}\n\nfunction isNodeInitialized(node) {\n var _node$handles;\n\n return node && !!(node.internals.handleBounds || (_node$handles = node.handles) !== null && _node$handles !== void 0 && _node$handles.length) && !!(node.measured.width || node.width || node.initialWidth);\n}\n\nfunction getEdgePosition(params) {\n var _sourceHandleBounds$s, _targetHandleBounds$t, _targetHandleBounds$t2, _targetHandleBounds$s;\n\n var sourceNode = params.sourceNode,\n targetNode = params.targetNode;\n\n if (!isNodeInitialized(sourceNode) || !isNodeInitialized(targetNode)) {\n return null;\n }\n\n var sourceHandleBounds = sourceNode.internals.handleBounds || toHandleBounds(sourceNode.handles);\n var targetHandleBounds = targetNode.internals.handleBounds || toHandleBounds(targetNode.handles);\n var sourceHandle = getHandle$1((_sourceHandleBounds$s = sourceHandleBounds === null || sourceHandleBounds === void 0 ? void 0 : sourceHandleBounds.source) !== null && _sourceHandleBounds$s !== void 0 ? _sourceHandleBounds$s : [], params.sourceHandle);\n var targetHandle = getHandle$1( // when connection type is loose we can define all handles as sources and connect source -> source\n params.connectionMode === ConnectionMode.Strict ? (_targetHandleBounds$t = targetHandleBounds === null || targetHandleBounds === void 0 ? void 0 : targetHandleBounds.target) !== null && _targetHandleBounds$t !== void 0 ? _targetHandleBounds$t : [] : ((_targetHandleBounds$t2 = targetHandleBounds === null || targetHandleBounds === void 0 ? void 0 : targetHandleBounds.target) !== null && _targetHandleBounds$t2 !== void 0 ? _targetHandleBounds$t2 : []).concat((_targetHandleBounds$s = targetHandleBounds === null || targetHandleBounds === void 0 ? void 0 : targetHandleBounds.source) !== null && _targetHandleBounds$s !== void 0 ? _targetHandleBounds$s : []), params.targetHandle);\n\n if (!sourceHandle || !targetHandle) {\n var _params$onError;\n\n (_params$onError = params.onError) === null || _params$onError === void 0 ? void 0 : _params$onError.call(params, '008', errorMessages['error008'](!sourceHandle ? 'source' : 'target', {\n id: params.id,\n sourceHandle: params.sourceHandle,\n targetHandle: params.targetHandle\n }));\n return null;\n }\n\n var sourcePosition = (sourceHandle === null || sourceHandle === void 0 ? void 0 : sourceHandle.position) || Position.Bottom;\n var targetPosition = (targetHandle === null || targetHandle === void 0 ? void 0 : targetHandle.position) || Position.Top;\n var source = getHandlePosition(sourceNode, sourceHandle, sourcePosition);\n var target = getHandlePosition(targetNode, targetHandle, targetPosition);\n return {\n sourceX: source.x,\n sourceY: source.y,\n targetX: target.x,\n targetY: target.y,\n sourcePosition: sourcePosition,\n targetPosition: targetPosition\n };\n}\n\nfunction toHandleBounds(handles) {\n if (!handles) {\n return null;\n }\n\n var source = [];\n var target = [];\n\n var _iterator3 = _createForOfIteratorHelper(handles),\n _step3;\n\n try {\n for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {\n var _handle$width, _handle$height;\n\n var handle = _step3.value;\n handle.width = (_handle$width = handle.width) !== null && _handle$width !== void 0 ? _handle$width : 1;\n handle.height = (_handle$height = handle.height) !== null && _handle$height !== void 0 ? _handle$height : 1;\n\n if (handle.type === 'source') {\n source.push(handle);\n } else if (handle.type === 'target') {\n target.push(handle);\n }\n }\n } catch (err) {\n _iterator3.e(err);\n } finally {\n _iterator3.f();\n }\n\n return {\n source: source,\n target: target\n };\n}\n\nfunction getHandlePosition(node, handle) {\n var _handle$x, _handle$y, _handle$position;\n\n var fallbackPosition = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : Position.Left;\n var center = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;\n var x = ((_handle$x = handle === null || handle === void 0 ? void 0 : handle.x) !== null && _handle$x !== void 0 ? _handle$x : 0) + node.internals.positionAbsolute.x;\n var y = ((_handle$y = handle === null || handle === void 0 ? void 0 : handle.y) !== null && _handle$y !== void 0 ? _handle$y : 0) + node.internals.positionAbsolute.y;\n\n var _ref49 = handle !== null && handle !== void 0 ? handle : getNodeDimensions(node),\n width = _ref49.width,\n height = _ref49.height;\n\n if (center) {\n return {\n x: x + width / 2,\n y: y + height / 2\n };\n }\n\n var position = (_handle$position = handle === null || handle === void 0 ? void 0 : handle.position) !== null && _handle$position !== void 0 ? _handle$position : fallbackPosition;\n\n switch (position) {\n case Position.Top:\n return {\n x: x + width / 2,\n y: y\n };\n\n case Position.Right:\n return {\n x: x + width,\n y: y + height / 2\n };\n\n case Position.Bottom:\n return {\n x: x + width / 2,\n y: y + height\n };\n\n case Position.Left:\n return {\n x: x,\n y: y + height / 2\n };\n }\n}\n\nfunction getHandle$1(bounds, handleId) {\n if (!bounds) {\n return null;\n } // if no handleId is given, we use the first handle, otherwise we check for the id\n\n\n return (!handleId ? bounds[0] : bounds.find(function (d) {\n return d.id === handleId;\n })) || null;\n}\n\nfunction getMarkerId(marker, id) {\n if (!marker) {\n return '';\n }\n\n if (typeof marker === 'string') {\n return marker;\n }\n\n var idPrefix = id ? \"\".concat(id, \"__\") : '';\n return \"\".concat(idPrefix).concat(Object.keys(marker).sort().map(function (key) {\n return \"\".concat(key, \"=\").concat(marker[key]);\n }).join('&'));\n}\n\nfunction createMarkerIds(edges, _ref50) {\n var id = _ref50.id,\n defaultColor = _ref50.defaultColor,\n defaultMarkerStart = _ref50.defaultMarkerStart,\n defaultMarkerEnd = _ref50.defaultMarkerEnd;\n var ids = new Set();\n return edges.reduce(function (markers, edge) {\n [edge.markerStart || defaultMarkerStart, edge.markerEnd || defaultMarkerEnd].forEach(function (marker) {\n if (marker && typeof marker === 'object') {\n var markerId = getMarkerId(marker, id);\n\n if (!ids.has(markerId)) {\n markers.push(_objectSpread({\n id: markerId,\n color: marker.color || defaultColor\n }, marker));\n ids.add(markerId);\n }\n }\n });\n return markers;\n }, []).sort(function (a, b) {\n return a.id.localeCompare(b.id);\n });\n}\n\nfunction getNodeToolbarTransform(nodeRect, viewport, position, offset, align) {\n var alignmentOffset = 0.5;\n\n if (align === 'start') {\n alignmentOffset = 0;\n } else if (align === 'end') {\n alignmentOffset = 1;\n } // position === Position.Top\n // we set the x any y position of the toolbar based on the nodes position\n\n\n var pos = [(nodeRect.x + nodeRect.width * alignmentOffset) * viewport.zoom + viewport.x, nodeRect.y * viewport.zoom + viewport.y - offset]; // and than shift it based on the alignment. The shift values are in %.\n\n var shift = [-100 * alignmentOffset, -100];\n\n switch (position) {\n case Position.Right:\n pos = [(nodeRect.x + nodeRect.width) * viewport.zoom + viewport.x + offset, (nodeRect.y + nodeRect.height * alignmentOffset) * viewport.zoom + viewport.y];\n shift = [0, -100 * alignmentOffset];\n break;\n\n case Position.Bottom:\n pos[1] = (nodeRect.y + nodeRect.height) * viewport.zoom + viewport.y + offset;\n shift[1] = 0;\n break;\n\n case Position.Left:\n pos = [nodeRect.x * viewport.zoom + viewport.x - offset, (nodeRect.y + nodeRect.height * alignmentOffset) * viewport.zoom + viewport.y];\n shift = [-100, -100 * alignmentOffset];\n break;\n }\n\n return \"translate(\".concat(pos[0], \"px, \").concat(pos[1], \"px) translate(\").concat(shift[0], \"%, \").concat(shift[1], \"%)\");\n}\n\nvar defaultOptions = {\n nodeOrigin: [0, 0],\n nodeExtent: infiniteExtent,\n elevateNodesOnSelect: true,\n defaults: {}\n};\n\nvar adoptUserNodesDefaultOptions = _objectSpread(_objectSpread({}, defaultOptions), {}, {\n checkEquality: true\n});\n\nfunction mergeObjects(base, incoming) {\n var result = _objectSpread({}, base);\n\n for (var key in incoming) {\n if (incoming[key] !== undefined) {\n // typecast is safe here, because we check for undefined\n result[key] = incoming[key];\n }\n }\n\n return result;\n}\n\nfunction updateAbsolutePositions(nodeLookup, parentLookup, options) {\n var _options = mergeObjects(defaultOptions, options);\n\n var _iterator4 = _createForOfIteratorHelper(nodeLookup.values()),\n _step4;\n\n try {\n for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) {\n var node = _step4.value;\n\n if (!node.parentId) {\n continue;\n }\n\n updateChildNode(node, nodeLookup, parentLookup, _options);\n }\n } catch (err) {\n _iterator4.e(err);\n } finally {\n _iterator4.f();\n }\n}\n\nfunction adoptUserNodes(nodes, nodeLookup, parentLookup, options) {\n var _options = mergeObjects(adoptUserNodesDefaultOptions, options);\n\n var tmpLookup = new Map(nodeLookup);\n var selectedNodeZ = _options !== null && _options !== void 0 && _options.elevateNodesOnSelect ? 1000 : 0;\n nodeLookup.clear();\n parentLookup.clear();\n\n var _iterator5 = _createForOfIteratorHelper(nodes),\n _step5;\n\n try {\n for (_iterator5.s(); !(_step5 = _iterator5.n()).done;) {\n var _internalNode;\n\n var userNode = _step5.value;\n var internalNode = tmpLookup.get(userNode.id);\n\n if (_options.checkEquality && userNode === ((_internalNode = internalNode) === null || _internalNode === void 0 ? void 0 : _internalNode.internals.userNode)) {\n nodeLookup.set(userNode.id, internalNode);\n } else {\n var _userNode$measured, _userNode$measured2, _internalNode2;\n\n var positionWithOrigin = getNodePositionWithOrigin(userNode, _options.nodeOrigin);\n var extent = isCoordinateExtent(userNode.extent) ? userNode.extent : _options.nodeExtent;\n var clampedPosition = clampPosition(positionWithOrigin, extent, getNodeDimensions(userNode));\n internalNode = _objectSpread(_objectSpread(_objectSpread({}, _options.defaults), userNode), {}, {\n measured: {\n width: (_userNode$measured = userNode.measured) === null || _userNode$measured === void 0 ? void 0 : _userNode$measured.width,\n height: (_userNode$measured2 = userNode.measured) === null || _userNode$measured2 === void 0 ? void 0 : _userNode$measured2.height\n },\n internals: {\n positionAbsolute: clampedPosition,\n // if user re-initializes the node or removes `measured` for whatever reason, we reset the handleBounds so that the node gets re-measured\n handleBounds: !userNode.measured ? undefined : (_internalNode2 = internalNode) === null || _internalNode2 === void 0 ? void 0 : _internalNode2.internals.handleBounds,\n z: calculateZ(userNode, selectedNodeZ),\n userNode: userNode\n }\n });\n nodeLookup.set(userNode.id, internalNode);\n }\n\n if (userNode.parentId) {\n updateChildNode(internalNode, nodeLookup, parentLookup, options);\n }\n }\n } catch (err) {\n _iterator5.e(err);\n } finally {\n _iterator5.f();\n }\n}\n\nfunction updateParentLookup(node, parentLookup) {\n if (!node.parentId) {\n return;\n }\n\n var childNodes = parentLookup.get(node.parentId);\n\n if (childNodes) {\n childNodes.set(node.id, node);\n } else {\n parentLookup.set(node.parentId, new Map([[node.id, node]]));\n }\n}\n/**\n * Updates positionAbsolute and zIndex of a child node and the parentLookup.\n */\n\n\nfunction updateChildNode(node, nodeLookup, parentLookup, options) {\n var _mergeObjects = mergeObjects(defaultOptions, options),\n elevateNodesOnSelect = _mergeObjects.elevateNodesOnSelect,\n nodeOrigin = _mergeObjects.nodeOrigin,\n nodeExtent = _mergeObjects.nodeExtent;\n\n var parentId = node.parentId;\n var parentNode = nodeLookup.get(parentId);\n\n if (!parentNode) {\n console.warn(\"Parent node \".concat(parentId, \" not found. Please make sure that parent nodes are in front of their child nodes in the nodes array.\"));\n return;\n }\n\n updateParentLookup(node, parentLookup);\n var selectedNodeZ = elevateNodesOnSelect ? 1000 : 0;\n\n var _calculateChildXYZ = calculateChildXYZ(node, parentNode, nodeOrigin, nodeExtent, selectedNodeZ),\n x = _calculateChildXYZ.x,\n y = _calculateChildXYZ.y,\n z = _calculateChildXYZ.z;\n\n var positionAbsolute = node.internals.positionAbsolute;\n var positionChanged = x !== positionAbsolute.x || y !== positionAbsolute.y;\n\n if (positionChanged || z !== node.internals.z) {\n node.internals = _objectSpread(_objectSpread({}, node.internals), {}, {\n positionAbsolute: positionChanged ? {\n x: x,\n y: y\n } : positionAbsolute,\n z: z\n });\n }\n}\n\nfunction calculateZ(node, selectedNodeZ) {\n return (isNumeric(node.zIndex) ? node.zIndex : 0) + (node.selected ? selectedNodeZ : 0);\n}\n\nfunction calculateChildXYZ(childNode, parentNode, nodeOrigin, nodeExtent, selectedNodeZ) {\n var _parentNode$internals2;\n\n var _parentNode$internals = parentNode.internals.positionAbsolute,\n parentX = _parentNode$internals.x,\n parentY = _parentNode$internals.y;\n var childDimensions = getNodeDimensions(childNode);\n var positionWithOrigin = getNodePositionWithOrigin(childNode, nodeOrigin);\n var clampedPosition = isCoordinateExtent(childNode.extent) ? clampPosition(positionWithOrigin, childNode.extent, childDimensions) : positionWithOrigin;\n var absolutePosition = clampPosition({\n x: parentX + clampedPosition.x,\n y: parentY + clampedPosition.y\n }, nodeExtent, childDimensions);\n\n if (childNode.extent === 'parent') {\n absolutePosition = clampPositionToParent(absolutePosition, childDimensions, parentNode);\n }\n\n var childZ = calculateZ(childNode, selectedNodeZ);\n var parentZ = (_parentNode$internals2 = parentNode.internals.z) !== null && _parentNode$internals2 !== void 0 ? _parentNode$internals2 : 0;\n return {\n x: absolutePosition.x,\n y: absolutePosition.y,\n z: parentZ > childZ ? parentZ : childZ\n };\n}\n\nfunction handleExpandParent(children, nodeLookup, parentLookup) {\n var nodeOrigin = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : [0, 0];\n var changes = [];\n var parentExpansions = new Map(); // determine the expanded rectangle the child nodes would take for each parent\n\n var _iterator6 = _createForOfIteratorHelper(children),\n _step6;\n\n try {\n for (_iterator6.s(); !(_step6 = _iterator6.n()).done;) {\n var _parentExpansions$get, _parentExpansions$get2;\n\n var child = _step6.value;\n var parent = nodeLookup.get(child.parentId);\n\n if (!parent) {\n continue;\n }\n\n var parentRect = (_parentExpansions$get = (_parentExpansions$get2 = parentExpansions.get(child.parentId)) === null || _parentExpansions$get2 === void 0 ? void 0 : _parentExpansions$get2.expandedRect) !== null && _parentExpansions$get !== void 0 ? _parentExpansions$get : nodeToRect(parent);\n var expandedRect = getBoundsOfRects(parentRect, child.rect);\n parentExpansions.set(child.parentId, {\n expandedRect: expandedRect,\n parent: parent\n });\n }\n } catch (err) {\n _iterator6.e(err);\n } finally {\n _iterator6.f();\n }\n\n if (parentExpansions.size > 0) {\n parentExpansions.forEach(function (_ref51, parentId) {\n var _parent$origin;\n\n var expandedRect = _ref51.expandedRect,\n parent = _ref51.parent;\n // determine the position & dimensions of the parent\n var positionAbsolute = parent.internals.positionAbsolute;\n var dimensions = getNodeDimensions(parent);\n var origin = (_parent$origin = parent.origin) !== null && _parent$origin !== void 0 ? _parent$origin : nodeOrigin; // determine how much the parent expands in width and position\n\n var xChange = expandedRect.x < positionAbsolute.x ? Math.round(Math.abs(positionAbsolute.x - expandedRect.x)) : 0;\n var yChange = expandedRect.y < positionAbsolute.y ? Math.round(Math.abs(positionAbsolute.y - expandedRect.y)) : 0;\n var newWidth = Math.max(dimensions.width, Math.round(expandedRect.width));\n var newHeight = Math.max(dimensions.height, Math.round(expandedRect.height));\n var widthChange = (newWidth - dimensions.width) * origin[0];\n var heightChange = (newHeight - dimensions.height) * origin[1]; // We need to correct the position of the parent node if the origin is not [0,0]\n\n if (xChange > 0 || yChange > 0 || widthChange || heightChange) {\n var _parentLookup$get;\n\n changes.push({\n id: parentId,\n type: 'position',\n position: {\n x: parent.position.x - xChange + widthChange,\n y: parent.position.y - yChange + heightChange\n }\n }); // We move all child nodes in the oppsite direction\n // so the x,y changes of the parent do not move the children\n\n (_parentLookup$get = parentLookup.get(parentId)) === null || _parentLookup$get === void 0 ? void 0 : _parentLookup$get.forEach(function (childNode) {\n if (!children.some(function (child) {\n return child.id === childNode.id;\n })) {\n changes.push({\n id: childNode.id,\n type: 'position',\n position: {\n x: childNode.position.x + xChange,\n y: childNode.position.y + yChange\n }\n });\n }\n });\n } // We need to correct the dimensions of the parent node if the origin is not [0,0]\n\n\n if (dimensions.width < expandedRect.width || dimensions.height < expandedRect.height || xChange || yChange) {\n changes.push({\n id: parentId,\n type: 'dimensions',\n setAttributes: true,\n dimensions: {\n width: newWidth + (xChange ? origin[0] * xChange - widthChange : 0),\n height: newHeight + (yChange ? origin[1] * yChange - heightChange : 0)\n }\n });\n }\n });\n }\n\n return changes;\n}\n\nfunction updateNodeInternals(updates, nodeLookup, parentLookup, domNode, nodeOrigin, nodeExtent) {\n var viewportNode = domNode === null || domNode === void 0 ? void 0 : domNode.querySelector('.xyflow__viewport');\n var updatedInternals = false;\n\n if (!viewportNode) {\n return {\n changes: [],\n updatedInternals: updatedInternals\n };\n }\n\n var changes = [];\n var style = window.getComputedStyle(viewportNode);\n\n var _window$DOMMatrixRead = new window.DOMMatrixReadOnly(style.transform),\n zoom = _window$DOMMatrixRead.m22; // in this array we collect nodes, that might trigger changes (like expanding parent)\n\n\n var parentExpandChildren = [];\n\n var _iterator7 = _createForOfIteratorHelper(updates.values()),\n _step7;\n\n try {\n for (_iterator7.s(); !(_step7 = _iterator7.n()).done;) {\n var update = _step7.value;\n var node = nodeLookup.get(update.id);\n\n if (!node) {\n continue;\n }\n\n if (node.hidden) {\n node.internals = _objectSpread(_objectSpread({}, node.internals), {}, {\n handleBounds: undefined\n });\n updatedInternals = true;\n } else {\n var dimensions = getDimensions(update.nodeElement);\n var dimensionChanged = node.measured.width !== dimensions.width || node.measured.height !== dimensions.height;\n var doUpdate = !!(dimensions.width && dimensions.height && (dimensionChanged || !node.internals.handleBounds || update.force));\n\n if (doUpdate) {\n var nodeBounds = update.nodeElement.getBoundingClientRect();\n var extent = isCoordinateExtent(node.extent) ? node.extent : nodeExtent;\n var positionAbsolute = node.internals.positionAbsolute;\n\n if (node.parentId && node.extent === 'parent') {\n positionAbsolute = clampPositionToParent(positionAbsolute, dimensions, nodeLookup.get(node.parentId));\n } else if (extent) {\n positionAbsolute = clampPosition(positionAbsolute, extent, dimensions);\n }\n\n node.measured = dimensions;\n node.internals = _objectSpread(_objectSpread({}, node.internals), {}, {\n positionAbsolute: positionAbsolute,\n handleBounds: {\n source: getHandleBounds('source', update.nodeElement, nodeBounds, zoom, node.id),\n target: getHandleBounds('target', update.nodeElement, nodeBounds, zoom, node.id)\n }\n });\n\n if (node.parentId) {\n updateChildNode(node, nodeLookup, parentLookup, {\n nodeOrigin: nodeOrigin\n });\n }\n\n updatedInternals = true;\n\n if (dimensionChanged) {\n changes.push({\n id: node.id,\n type: 'dimensions',\n dimensions: dimensions\n });\n\n if (node.expandParent && node.parentId) {\n parentExpandChildren.push({\n id: node.id,\n parentId: node.parentId,\n rect: nodeToRect(node, nodeOrigin)\n });\n }\n }\n }\n }\n }\n } catch (err) {\n _iterator7.e(err);\n } finally {\n _iterator7.f();\n }\n\n if (parentExpandChildren.length > 0) {\n var parentExpandChanges = handleExpandParent(parentExpandChildren, nodeLookup, parentLookup, nodeOrigin);\n changes.push.apply(changes, _toConsumableArray(parentExpandChanges));\n }\n\n return {\n changes: changes,\n updatedInternals: updatedInternals\n };\n}\n\nfunction panBy(_x4) {\n return _panBy.apply(this, arguments);\n}\n\nfunction _panBy() {\n _panBy = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee6(_ref52) {\n var delta, panZoom, transform, translateExtent, width, height, nextViewport, transformChanged;\n return _regeneratorRuntime.wrap(function _callee6$(_context6) {\n while (1) {\n switch (_context6.prev = _context6.next) {\n case 0:\n delta = _ref52.delta, panZoom = _ref52.panZoom, transform = _ref52.transform, translateExtent = _ref52.translateExtent, width = _ref52.width, height = _ref52.height;\n\n if (!(!panZoom || !delta.x && !delta.y)) {\n _context6.next = 3;\n break;\n }\n\n return _context6.abrupt(\"return\", Promise.resolve(false));\n\n case 3:\n _context6.next = 5;\n return panZoom.setViewportConstrained({\n x: transform[0] + delta.x,\n y: transform[1] + delta.y,\n zoom: transform[2]\n }, [[0, 0], [width, height]], translateExtent);\n\n case 5:\n nextViewport = _context6.sent;\n transformChanged = !!nextViewport && (nextViewport.x !== transform[0] || nextViewport.y !== transform[1] || nextViewport.k !== transform[2]);\n return _context6.abrupt(\"return\", Promise.resolve(transformChanged));\n\n case 8:\n case \"end\":\n return _context6.stop();\n }\n }\n }, _callee6);\n }));\n return _panBy.apply(this, arguments);\n}\n\nfunction updateConnectionLookup(connectionLookup, edgeLookup, edges) {\n connectionLookup.clear();\n edgeLookup.clear();\n\n var _iterator8 = _createForOfIteratorHelper(edges),\n _step8;\n\n try {\n for (_iterator8.s(); !(_step8 = _iterator8.n()).done;) {\n var edge = _step8.value;\n var source = edge.source,\n target = edge.target,\n _edge$sourceHandle = edge.sourceHandle,\n sourceHandle = _edge$sourceHandle === void 0 ? null : _edge$sourceHandle,\n _edge$targetHandle = edge.targetHandle,\n targetHandle = _edge$targetHandle === void 0 ? null : _edge$targetHandle;\n var sourceKey = \"\".concat(source, \"-source-\").concat(sourceHandle);\n var targetKey = \"\".concat(target, \"-target-\").concat(targetHandle);\n var prevSource = connectionLookup.get(sourceKey) || new Map();\n var prevTarget = connectionLookup.get(targetKey) || new Map();\n var connection = {\n edgeId: edge.id,\n source: source,\n target: target,\n sourceHandle: sourceHandle,\n targetHandle: targetHandle\n };\n edgeLookup.set(edge.id, edge);\n connectionLookup.set(sourceKey, prevSource.set(\"\".concat(target, \"-\").concat(targetHandle), connection));\n connectionLookup.set(targetKey, prevTarget.set(\"\".concat(source, \"-\").concat(sourceHandle), connection));\n }\n } catch (err) {\n _iterator8.e(err);\n } finally {\n _iterator8.f();\n }\n}\n\nfunction shallowNodeData(a, b) {\n if (a === null || b === null) {\n return false;\n }\n\n var _a = Array.isArray(a) ? a : [a];\n\n var _b = Array.isArray(b) ? b : [b];\n\n if (_a.length !== _b.length) {\n return false;\n }\n\n for (var i = 0; i < _a.length; i++) {\n if (_a[i].id !== _b[i].id || _a[i].type !== _b[i].type || !Object.is(_a[i].data, _b[i].data)) {\n return false;\n }\n }\n\n return true;\n}\n\nfunction isParentSelected(node, nodeLookup) {\n if (!node.parentId) {\n return false;\n }\n\n var parentNode = nodeLookup.get(node.parentId);\n\n if (!parentNode) {\n return false;\n }\n\n if (parentNode.selected) {\n return true;\n }\n\n return isParentSelected(parentNode, nodeLookup);\n}\n\nfunction hasSelector(target, selector, domNode) {\n var current = target;\n\n do {\n var _current;\n\n if ((_current = current) !== null && _current !== void 0 && _current.matches(selector)) return true;\n if (current === domNode) return false;\n current = current.parentElement;\n } while (current);\n\n return false;\n} // looks for all selected nodes and created a NodeDragItem for each of them\n\n\nfunction getDragItems(nodeLookup, nodesDraggable, mousePos, nodeId) {\n var dragItems = new Map();\n\n var _iterator9 = _createForOfIteratorHelper(nodeLookup),\n _step9;\n\n try {\n for (_iterator9.s(); !(_step9 = _iterator9.n()).done;) {\n var _step9$value = _slicedToArray(_step9.value, 2),\n id = _step9$value[0],\n node = _step9$value[1];\n\n if ((node.selected || node.id === nodeId) && (!node.parentId || !isParentSelected(node, nodeLookup)) && (node.draggable || nodesDraggable && typeof node.draggable === 'undefined')) {\n var internalNode = nodeLookup.get(id);\n\n if (internalNode) {\n var _internalNode$measure, _internalNode$measure2;\n\n dragItems.set(id, {\n id: id,\n position: internalNode.position || {\n x: 0,\n y: 0\n },\n distance: {\n x: mousePos.x - internalNode.internals.positionAbsolute.x,\n y: mousePos.y - internalNode.internals.positionAbsolute.y\n },\n extent: internalNode.extent,\n parentId: internalNode.parentId,\n origin: internalNode.origin,\n expandParent: internalNode.expandParent,\n internals: {\n positionAbsolute: internalNode.internals.positionAbsolute || {\n x: 0,\n y: 0\n }\n },\n measured: {\n width: (_internalNode$measure = internalNode.measured.width) !== null && _internalNode$measure !== void 0 ? _internalNode$measure : 0,\n height: (_internalNode$measure2 = internalNode.measured.height) !== null && _internalNode$measure2 !== void 0 ? _internalNode$measure2 : 0\n }\n });\n }\n }\n }\n } catch (err) {\n _iterator9.e(err);\n } finally {\n _iterator9.f();\n }\n\n return dragItems;\n} // returns two params:\n// 1. the dragged node (or the first of the list, if we are dragging a node selection)\n// 2. array of selected nodes (for multi selections)\n\n\nfunction getEventHandlerParams(_ref53) {\n var _dragItems$get;\n\n var nodeId = _ref53.nodeId,\n dragItems = _ref53.dragItems,\n nodeLookup = _ref53.nodeLookup,\n _ref53$dragging = _ref53.dragging,\n dragging = _ref53$dragging === void 0 ? true : _ref53$dragging;\n var nodesFromDragItems = [];\n\n var _iterator10 = _createForOfIteratorHelper(dragItems),\n _step10;\n\n try {\n for (_iterator10.s(); !(_step10 = _iterator10.n()).done;) {\n var _nodeLookup$get;\n\n var _step10$value = _slicedToArray(_step10.value, 2),\n id = _step10$value[0],\n dragItem = _step10$value[1];\n\n var _node = (_nodeLookup$get = nodeLookup.get(id)) === null || _nodeLookup$get === void 0 ? void 0 : _nodeLookup$get.internals.userNode;\n\n if (_node) {\n nodesFromDragItems.push(_objectSpread(_objectSpread({}, _node), {}, {\n position: dragItem.position,\n dragging: dragging\n }));\n }\n }\n } catch (err) {\n _iterator10.e(err);\n } finally {\n _iterator10.f();\n }\n\n if (!nodeId) {\n return [nodesFromDragItems[0], nodesFromDragItems];\n }\n\n var node = nodeLookup.get(nodeId).internals.userNode;\n return [_objectSpread(_objectSpread({}, node), {}, {\n position: ((_dragItems$get = dragItems.get(nodeId)) === null || _dragItems$get === void 0 ? void 0 : _dragItems$get.position) || node.position,\n dragging: dragging\n }), nodesFromDragItems];\n} // eslint-disable-next-line @typescript-eslint/no-explicit-any\n\n\nfunction XYDrag(_ref54) {\n var onNodeMouseDown = _ref54.onNodeMouseDown,\n getStoreItems = _ref54.getStoreItems,\n onDragStart = _ref54.onDragStart,\n onDrag = _ref54.onDrag,\n onDragStop = _ref54.onDragStop;\n var lastPos = {\n x: null,\n y: null\n };\n var autoPanId = 0;\n var dragItems = new Map();\n var autoPanStarted = false;\n var mousePosition = {\n x: 0,\n y: 0\n };\n var containerBounds = null;\n var dragStarted = false;\n var d3Selection = null;\n var abortDrag = false; // prevents unintentional dragging on multitouch\n // public functions\n\n function update(_ref55) {\n var noDragClassName = _ref55.noDragClassName,\n handleSelector = _ref55.handleSelector,\n domNode = _ref55.domNode,\n isSelectable = _ref55.isSelectable,\n nodeId = _ref55.nodeId,\n _ref55$nodeClickDista = _ref55.nodeClickDistance,\n nodeClickDistance = _ref55$nodeClickDista === void 0 ? 0 : _ref55$nodeClickDista;\n d3Selection = select(domNode);\n\n function updateNodes(_ref56, dragEvent) {\n var x = _ref56.x,\n y = _ref56.y;\n\n var _getStoreItems = getStoreItems(),\n nodeLookup = _getStoreItems.nodeLookup,\n nodeExtent = _getStoreItems.nodeExtent,\n snapGrid = _getStoreItems.snapGrid,\n snapToGrid = _getStoreItems.snapToGrid,\n nodeOrigin = _getStoreItems.nodeOrigin,\n onNodeDrag = _getStoreItems.onNodeDrag,\n onSelectionDrag = _getStoreItems.onSelectionDrag,\n onError = _getStoreItems.onError,\n updateNodePositions = _getStoreItems.updateNodePositions;\n\n lastPos = {\n x: x,\n y: y\n };\n var hasChange = false;\n var nodesBox = {\n x: 0,\n y: 0,\n x2: 0,\n y2: 0\n };\n\n if (dragItems.size > 1 && nodeExtent) {\n var rect = getInternalNodesBounds(dragItems);\n nodesBox = rectToBox(rect);\n }\n\n var _iterator11 = _createForOfIteratorHelper(dragItems),\n _step11;\n\n try {\n for (_iterator11.s(); !(_step11 = _iterator11.n()).done;) {\n var _step11$value = _slicedToArray(_step11.value, 2),\n id = _step11$value[0],\n dragItem = _step11$value[1];\n\n var nextPosition = {\n x: x - dragItem.distance.x,\n y: y - dragItem.distance.y\n };\n\n if (snapToGrid) {\n nextPosition = snapPosition(nextPosition, snapGrid);\n } // if there is selection with multiple nodes and a node extent is set, we need to adjust the node extent for each node\n // based on its position so that the node stays at it's position relative to the selection.\n\n\n var adjustedNodeExtent = [[nodeExtent[0][0], nodeExtent[0][1]], [nodeExtent[1][0], nodeExtent[1][1]]];\n\n if (dragItems.size > 1 && nodeExtent && !dragItem.extent) {\n var _positionAbsolute = dragItem.internals.positionAbsolute;\n var x1 = _positionAbsolute.x - nodesBox.x + nodeExtent[0][0];\n var x2 = _positionAbsolute.x + dragItem.measured.width - nodesBox.x2 + nodeExtent[1][0];\n var y1 = _positionAbsolute.y - nodesBox.y + nodeExtent[0][1];\n var y2 = _positionAbsolute.y + dragItem.measured.height - nodesBox.y2 + nodeExtent[1][1];\n adjustedNodeExtent = [[x1, y1], [x2, y2]];\n }\n\n var _calculateNodePositio = calculateNodePosition({\n nodeId: id,\n nextPosition: nextPosition,\n nodeLookup: nodeLookup,\n nodeExtent: adjustedNodeExtent,\n nodeOrigin: nodeOrigin,\n onError: onError\n }),\n position = _calculateNodePositio.position,\n positionAbsolute = _calculateNodePositio.positionAbsolute; // we want to make sure that we only fire a change event when there is a change\n\n\n hasChange = hasChange || dragItem.position.x !== position.x || dragItem.position.y !== position.y;\n dragItem.position = position;\n dragItem.internals.positionAbsolute = positionAbsolute;\n }\n } catch (err) {\n _iterator11.e(err);\n } finally {\n _iterator11.f();\n }\n\n if (!hasChange) {\n return;\n }\n\n updateNodePositions(dragItems, true);\n\n if (dragEvent && (onDrag || onNodeDrag || !nodeId && onSelectionDrag)) {\n var _getEventHandlerParam = getEventHandlerParams({\n nodeId: nodeId,\n dragItems: dragItems,\n nodeLookup: nodeLookup\n }),\n _getEventHandlerParam2 = _slicedToArray(_getEventHandlerParam, 2),\n currentNode = _getEventHandlerParam2[0],\n currentNodes = _getEventHandlerParam2[1];\n\n onDrag === null || onDrag === void 0 ? void 0 : onDrag(dragEvent, dragItems, currentNode, currentNodes);\n onNodeDrag === null || onNodeDrag === void 0 ? void 0 : onNodeDrag(dragEvent, currentNode, currentNodes);\n\n if (!nodeId) {\n onSelectionDrag === null || onSelectionDrag === void 0 ? void 0 : onSelectionDrag(dragEvent, currentNodes);\n }\n }\n }\n\n function autoPan() {\n return _autoPan.apply(this, arguments);\n }\n\n function _autoPan() {\n _autoPan = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee() {\n var _getStoreItems6, transform, panBy, autoPanSpeed, _calcAutoPan, _calcAutoPan2, xMovement, yMovement, _lastPos$x2, _lastPos$y2;\n\n return _regeneratorRuntime.wrap(function _callee$(_context) {\n while (1) {\n switch (_context.prev = _context.next) {\n case 0:\n if (containerBounds) {\n _context.next = 2;\n break;\n }\n\n return _context.abrupt(\"return\");\n\n case 2:\n _getStoreItems6 = getStoreItems(), transform = _getStoreItems6.transform, panBy = _getStoreItems6.panBy, autoPanSpeed = _getStoreItems6.autoPanSpeed;\n _calcAutoPan = calcAutoPan(mousePosition, containerBounds, autoPanSpeed), _calcAutoPan2 = _slicedToArray(_calcAutoPan, 2), xMovement = _calcAutoPan2[0], yMovement = _calcAutoPan2[1];\n\n if (!(xMovement !== 0 || yMovement !== 0)) {\n _context.next = 11;\n break;\n }\n\n lastPos.x = ((_lastPos$x2 = lastPos.x) !== null && _lastPos$x2 !== void 0 ? _lastPos$x2 : 0) - xMovement / transform[2];\n lastPos.y = ((_lastPos$y2 = lastPos.y) !== null && _lastPos$y2 !== void 0 ? _lastPos$y2 : 0) - yMovement / transform[2];\n _context.next = 9;\n return panBy({\n x: xMovement,\n y: yMovement\n });\n\n case 9:\n if (!_context.sent) {\n _context.next = 11;\n break;\n }\n\n updateNodes(lastPos, null);\n\n case 11:\n autoPanId = requestAnimationFrame(autoPan);\n\n case 12:\n case \"end\":\n return _context.stop();\n }\n }\n }, _callee);\n }));\n return _autoPan.apply(this, arguments);\n }\n\n function startDrag(event) {\n var _getStoreItems2 = getStoreItems(),\n nodeLookup = _getStoreItems2.nodeLookup,\n multiSelectionActive = _getStoreItems2.multiSelectionActive,\n nodesDraggable = _getStoreItems2.nodesDraggable,\n transform = _getStoreItems2.transform,\n snapGrid = _getStoreItems2.snapGrid,\n snapToGrid = _getStoreItems2.snapToGrid,\n selectNodesOnDrag = _getStoreItems2.selectNodesOnDrag,\n onNodeDragStart = _getStoreItems2.onNodeDragStart,\n onSelectionDragStart = _getStoreItems2.onSelectionDragStart,\n unselectNodesAndEdges = _getStoreItems2.unselectNodesAndEdges;\n\n dragStarted = true;\n\n if ((!selectNodesOnDrag || !isSelectable) && !multiSelectionActive && nodeId) {\n var _nodeLookup$get2;\n\n if (!((_nodeLookup$get2 = nodeLookup.get(nodeId)) !== null && _nodeLookup$get2 !== void 0 && _nodeLookup$get2.selected)) {\n // we need to reset selected nodes when selectNodesOnDrag=false\n unselectNodesAndEdges();\n }\n }\n\n if (isSelectable && selectNodesOnDrag && nodeId) {\n onNodeMouseDown === null || onNodeMouseDown === void 0 ? void 0 : onNodeMouseDown(nodeId);\n }\n\n var pointerPos = getPointerPosition(event.sourceEvent, {\n transform: transform,\n snapGrid: snapGrid,\n snapToGrid: snapToGrid\n });\n lastPos = pointerPos;\n dragItems = getDragItems(nodeLookup, nodesDraggable, pointerPos, nodeId);\n\n if (dragItems.size > 0 && (onDragStart || onNodeDragStart || !nodeId && onSelectionDragStart)) {\n var _getEventHandlerParam3 = getEventHandlerParams({\n nodeId: nodeId,\n dragItems: dragItems,\n nodeLookup: nodeLookup\n }),\n _getEventHandlerParam4 = _slicedToArray(_getEventHandlerParam3, 2),\n currentNode = _getEventHandlerParam4[0],\n currentNodes = _getEventHandlerParam4[1];\n\n onDragStart === null || onDragStart === void 0 ? void 0 : onDragStart(event.sourceEvent, dragItems, currentNode, currentNodes);\n onNodeDragStart === null || onNodeDragStart === void 0 ? void 0 : onNodeDragStart(event.sourceEvent, currentNode, currentNodes);\n\n if (!nodeId) {\n onSelectionDragStart === null || onSelectionDragStart === void 0 ? void 0 : onSelectionDragStart(event.sourceEvent, currentNodes);\n }\n }\n }\n\n var d3DragInstance = drag().clickDistance(nodeClickDistance).on('start', function (event) {\n var _getStoreItems3 = getStoreItems(),\n domNode = _getStoreItems3.domNode,\n nodeDragThreshold = _getStoreItems3.nodeDragThreshold,\n transform = _getStoreItems3.transform,\n snapGrid = _getStoreItems3.snapGrid,\n snapToGrid = _getStoreItems3.snapToGrid;\n\n abortDrag = false;\n\n if (nodeDragThreshold === 0) {\n startDrag(event);\n }\n\n var pointerPos = getPointerPosition(event.sourceEvent, {\n transform: transform,\n snapGrid: snapGrid,\n snapToGrid: snapToGrid\n });\n lastPos = pointerPos;\n containerBounds = (domNode === null || domNode === void 0 ? void 0 : domNode.getBoundingClientRect()) || null;\n mousePosition = getEventPosition(event.sourceEvent, containerBounds);\n }).on('drag', function (event) {\n var _getStoreItems4 = getStoreItems(),\n autoPanOnNodeDrag = _getStoreItems4.autoPanOnNodeDrag,\n transform = _getStoreItems4.transform,\n snapGrid = _getStoreItems4.snapGrid,\n snapToGrid = _getStoreItems4.snapToGrid,\n nodeDragThreshold = _getStoreItems4.nodeDragThreshold;\n\n var pointerPos = getPointerPosition(event.sourceEvent, {\n transform: transform,\n snapGrid: snapGrid,\n snapToGrid: snapToGrid\n });\n\n if (event.sourceEvent.type === 'touchmove' && event.sourceEvent.touches.length > 1) {\n abortDrag = true;\n }\n\n if (abortDrag) {\n return;\n }\n\n if (!autoPanStarted && autoPanOnNodeDrag && dragStarted) {\n autoPanStarted = true;\n autoPan();\n }\n\n if (!dragStarted) {\n var _lastPos$x, _lastPos$y;\n\n var x = pointerPos.xSnapped - ((_lastPos$x = lastPos.x) !== null && _lastPos$x !== void 0 ? _lastPos$x : 0);\n var y = pointerPos.ySnapped - ((_lastPos$y = lastPos.y) !== null && _lastPos$y !== void 0 ? _lastPos$y : 0);\n\n var _distance = Math.sqrt(x * x + y * y);\n\n if (_distance > nodeDragThreshold) {\n startDrag(event);\n }\n } // skip events without movement\n\n\n if ((lastPos.x !== pointerPos.xSnapped || lastPos.y !== pointerPos.ySnapped) && dragItems && dragStarted) {\n // dragEvent = event.sourceEvent as MouseEvent;\n mousePosition = getEventPosition(event.sourceEvent, containerBounds);\n updateNodes(pointerPos, event.sourceEvent);\n }\n }).on('end', function (event) {\n if (!dragStarted || abortDrag) {\n return;\n }\n\n autoPanStarted = false;\n dragStarted = false;\n cancelAnimationFrame(autoPanId);\n\n if (dragItems.size > 0) {\n var _getStoreItems5 = getStoreItems(),\n nodeLookup = _getStoreItems5.nodeLookup,\n updateNodePositions = _getStoreItems5.updateNodePositions,\n onNodeDragStop = _getStoreItems5.onNodeDragStop,\n onSelectionDragStop = _getStoreItems5.onSelectionDragStop;\n\n updateNodePositions(dragItems, false);\n\n if (onDragStop || onNodeDragStop || !nodeId && onSelectionDragStop) {\n var _getEventHandlerParam5 = getEventHandlerParams({\n nodeId: nodeId,\n dragItems: dragItems,\n nodeLookup: nodeLookup,\n dragging: false\n }),\n _getEventHandlerParam6 = _slicedToArray(_getEventHandlerParam5, 2),\n currentNode = _getEventHandlerParam6[0],\n currentNodes = _getEventHandlerParam6[1];\n\n onDragStop === null || onDragStop === void 0 ? void 0 : onDragStop(event.sourceEvent, dragItems, currentNode, currentNodes);\n onNodeDragStop === null || onNodeDragStop === void 0 ? void 0 : onNodeDragStop(event.sourceEvent, currentNode, currentNodes);\n\n if (!nodeId) {\n onSelectionDragStop === null || onSelectionDragStop === void 0 ? void 0 : onSelectionDragStop(event.sourceEvent, currentNodes);\n }\n }\n }\n }).filter(function (event) {\n var target = event.target;\n var isDraggable = !event.button && (!noDragClassName || !hasSelector(target, \".\".concat(noDragClassName), domNode)) && (!handleSelector || hasSelector(target, handleSelector, domNode));\n return isDraggable;\n });\n d3Selection.call(d3DragInstance);\n }\n\n function destroy() {\n var _d3Selection;\n\n (_d3Selection = d3Selection) === null || _d3Selection === void 0 ? void 0 : _d3Selection.on('.drag', null);\n }\n\n return {\n update: update,\n destroy: destroy\n };\n}\n\nfunction getNodesWithinDistance(position, nodeLookup, distance) {\n var nodes = [];\n var rect = {\n x: position.x - distance,\n y: position.y - distance,\n width: distance * 2,\n height: distance * 2\n };\n\n var _iterator12 = _createForOfIteratorHelper(nodeLookup.values()),\n _step12;\n\n try {\n for (_iterator12.s(); !(_step12 = _iterator12.n()).done;) {\n var node = _step12.value;\n\n if (getOverlappingArea(rect, nodeToRect(node)) > 0) {\n nodes.push(node);\n }\n }\n } catch (err) {\n _iterator12.e(err);\n } finally {\n _iterator12.f();\n }\n\n return nodes;\n} // this distance is used for the area around the user pointer\n// while doing a connection for finding the closest nodes\n\n\nvar ADDITIONAL_DISTANCE = 250;\n\nfunction getClosestHandle(position, connectionRadius, nodeLookup, fromHandle) {\n var closestHandles = [];\n var minDistance = Infinity;\n var closeNodes = getNodesWithinDistance(position, nodeLookup, connectionRadius + ADDITIONAL_DISTANCE);\n\n var _iterator13 = _createForOfIteratorHelper(closeNodes),\n _step13;\n\n try {\n for (_iterator13.s(); !(_step13 = _iterator13.n()).done;) {\n var _node$internals$handl, _node$internals$handl2, _node$internals$handl3, _node$internals$handl4;\n\n var node = _step13.value;\n var allHandles = [].concat(_toConsumableArray((_node$internals$handl = (_node$internals$handl2 = node.internals.handleBounds) === null || _node$internals$handl2 === void 0 ? void 0 : _node$internals$handl2.source) !== null && _node$internals$handl !== void 0 ? _node$internals$handl : []), _toConsumableArray((_node$internals$handl3 = (_node$internals$handl4 = node.internals.handleBounds) === null || _node$internals$handl4 === void 0 ? void 0 : _node$internals$handl4.target) !== null && _node$internals$handl3 !== void 0 ? _node$internals$handl3 : []));\n\n var _iterator14 = _createForOfIteratorHelper(allHandles),\n _step14;\n\n try {\n for (_iterator14.s(); !(_step14 = _iterator14.n()).done;) {\n var handle = _step14.value;\n\n // if the handle is the same as the fromHandle we skip it\n if (fromHandle.nodeId === handle.nodeId && fromHandle.type === handle.type && fromHandle.id === handle.id) {\n continue;\n } // determine absolute position of the handle\n\n\n var _getHandlePosition = getHandlePosition(node, handle, handle.position, true),\n x = _getHandlePosition.x,\n y = _getHandlePosition.y;\n\n var _distance2 = Math.sqrt(Math.pow(x - position.x, 2) + Math.pow(y - position.y, 2));\n\n if (_distance2 > connectionRadius) {\n continue;\n }\n\n if (_distance2 < minDistance) {\n closestHandles = [_objectSpread(_objectSpread({}, handle), {}, {\n x: x,\n y: y\n })];\n minDistance = _distance2;\n } else if (_distance2 === minDistance) {\n // when multiple handles are on the same distance we collect all of them\n closestHandles.push(_objectSpread(_objectSpread({}, handle), {}, {\n x: x,\n y: y\n }));\n }\n }\n } catch (err) {\n _iterator14.e(err);\n } finally {\n _iterator14.f();\n }\n }\n } catch (err) {\n _iterator13.e(err);\n } finally {\n _iterator13.f();\n }\n\n if (!closestHandles.length) {\n return null;\n } // when multiple handles overlay each other we prefer the opposite handle\n\n\n if (closestHandles.length > 1) {\n var _closestHandles$find;\n\n var oppositeHandleType = fromHandle.type === 'source' ? 'target' : 'source';\n return (_closestHandles$find = closestHandles.find(function (handle) {\n return handle.type === oppositeHandleType;\n })) !== null && _closestHandles$find !== void 0 ? _closestHandles$find : closestHandles[0];\n }\n\n return closestHandles[0];\n}\n\nfunction getHandle(nodeId, handleType, handleId, nodeLookup, connectionMode) {\n var _node$internals$handl5, _node$internals$handl6, _node$internals$handl7, _node$internals$handl8, _node$internals$handl9, _ref57;\n\n var withAbsolutePosition = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : false;\n var node = nodeLookup.get(nodeId);\n\n if (!node) {\n return null;\n }\n\n var handles = connectionMode === 'strict' ? (_node$internals$handl5 = node.internals.handleBounds) === null || _node$internals$handl5 === void 0 ? void 0 : _node$internals$handl5[handleType] : [].concat(_toConsumableArray((_node$internals$handl6 = (_node$internals$handl7 = node.internals.handleBounds) === null || _node$internals$handl7 === void 0 ? void 0 : _node$internals$handl7.source) !== null && _node$internals$handl6 !== void 0 ? _node$internals$handl6 : []), _toConsumableArray((_node$internals$handl8 = (_node$internals$handl9 = node.internals.handleBounds) === null || _node$internals$handl9 === void 0 ? void 0 : _node$internals$handl9.target) !== null && _node$internals$handl8 !== void 0 ? _node$internals$handl8 : []));\n var handle = (_ref57 = handleId ? handles === null || handles === void 0 ? void 0 : handles.find(function (h) {\n return h.id === handleId;\n }) : handles === null || handles === void 0 ? void 0 : handles[0]) !== null && _ref57 !== void 0 ? _ref57 : null;\n return handle && withAbsolutePosition ? _objectSpread(_objectSpread({}, handle), getHandlePosition(node, handle, handle.position, true)) : handle;\n}\n\nfunction getHandleType(edgeUpdaterType, handleDomNode) {\n if (edgeUpdaterType) {\n return edgeUpdaterType;\n } else if (handleDomNode !== null && handleDomNode !== void 0 && handleDomNode.classList.contains('target')) {\n return 'target';\n } else if (handleDomNode !== null && handleDomNode !== void 0 && handleDomNode.classList.contains('source')) {\n return 'source';\n }\n\n return null;\n}\n\nfunction isConnectionValid(isInsideConnectionRadius, isHandleValid) {\n var isValid = null;\n\n if (isHandleValid) {\n isValid = true;\n } else if (isInsideConnectionRadius && !isHandleValid) {\n isValid = false;\n }\n\n return isValid;\n}\n\nvar alwaysValid = function alwaysValid() {\n return true;\n};\n\nfunction onPointerDown(event, _ref58) {\n var connectionMode = _ref58.connectionMode,\n connectionRadius = _ref58.connectionRadius,\n handleId = _ref58.handleId,\n nodeId = _ref58.nodeId,\n edgeUpdaterType = _ref58.edgeUpdaterType,\n isTarget = _ref58.isTarget,\n domNode = _ref58.domNode,\n nodeLookup = _ref58.nodeLookup,\n lib = _ref58.lib,\n autoPanOnConnect = _ref58.autoPanOnConnect,\n flowId = _ref58.flowId,\n panBy = _ref58.panBy,\n cancelConnection = _ref58.cancelConnection,\n onConnectStart = _ref58.onConnectStart,\n onConnect = _ref58.onConnect,\n onConnectEnd = _ref58.onConnectEnd,\n _ref58$isValidConnect = _ref58.isValidConnection,\n isValidConnection = _ref58$isValidConnect === void 0 ? alwaysValid : _ref58$isValidConnect,\n onReconnectEnd = _ref58.onReconnectEnd,\n updateConnection = _ref58.updateConnection,\n getTransform = _ref58.getTransform,\n getFromHandle = _ref58.getFromHandle,\n autoPanSpeed = _ref58.autoPanSpeed;\n // when xyflow is used inside a shadow root we can't use document\n var doc = getHostForElement(event.target);\n var autoPanId = 0;\n var closestHandle;\n\n var _getEventPosition2 = getEventPosition(event),\n x = _getEventPosition2.x,\n y = _getEventPosition2.y;\n\n var clickedHandle = doc === null || doc === void 0 ? void 0 : doc.elementFromPoint(x, y);\n var handleType = getHandleType(edgeUpdaterType, clickedHandle);\n var containerBounds = domNode === null || domNode === void 0 ? void 0 : domNode.getBoundingClientRect();\n\n if (!containerBounds || !handleType) {\n return;\n }\n\n var fromHandleInternal = getHandle(nodeId, handleType, handleId, nodeLookup, connectionMode);\n\n if (!fromHandleInternal) {\n return;\n }\n\n var position = getEventPosition(event, containerBounds);\n var autoPanStarted = false;\n var connection = null;\n var isValid = false;\n var handleDomNode = null; // when the user is moving the mouse close to the edge of the canvas while connecting we move the canvas\n\n function autoPan() {\n if (!autoPanOnConnect || !containerBounds) {\n return;\n }\n\n var _calcAutoPan3 = calcAutoPan(position, containerBounds, autoPanSpeed),\n _calcAutoPan4 = _slicedToArray(_calcAutoPan3, 2),\n x = _calcAutoPan4[0],\n y = _calcAutoPan4[1];\n\n panBy({\n x: x,\n y: y\n });\n autoPanId = requestAnimationFrame(autoPan);\n } // Stays the same for all consecutive pointermove events\n\n\n var fromHandle = _objectSpread(_objectSpread({}, fromHandleInternal), {}, {\n nodeId: nodeId,\n type: handleType,\n position: fromHandleInternal.position\n });\n\n var fromNodeInternal = nodeLookup.get(nodeId);\n var from = getHandlePosition(fromNodeInternal, fromHandle, Position.Left, true);\n var newConnection = {\n inProgress: true,\n isValid: null,\n from: from,\n fromHandle: fromHandle,\n fromPosition: fromHandle.position,\n fromNode: fromNodeInternal,\n to: position,\n toHandle: null,\n toPosition: oppositePosition[fromHandle.position],\n toNode: null\n };\n updateConnection(newConnection);\n var previousConnection = newConnection;\n onConnectStart === null || onConnectStart === void 0 ? void 0 : onConnectStart(event, {\n nodeId: nodeId,\n handleId: handleId,\n handleType: handleType\n });\n\n function onPointerMove(event) {\n if (!getFromHandle() || !fromHandle) {\n onPointerUp(event);\n return;\n }\n\n var transform = getTransform();\n position = getEventPosition(event, containerBounds);\n closestHandle = getClosestHandle(pointToRendererPoint(position, transform, false, [1, 1]), connectionRadius, nodeLookup, fromHandle);\n\n if (!autoPanStarted) {\n autoPan();\n autoPanStarted = true;\n }\n\n var result = isValidHandle(event, {\n handle: closestHandle,\n connectionMode: connectionMode,\n fromNodeId: nodeId,\n fromHandleId: handleId,\n fromType: isTarget ? 'target' : 'source',\n isValidConnection: isValidConnection,\n doc: doc,\n lib: lib,\n flowId: flowId,\n nodeLookup: nodeLookup\n });\n handleDomNode = result.handleDomNode;\n connection = result.connection;\n isValid = isConnectionValid(!!closestHandle, result.isValid);\n\n var newConnection = _objectSpread(_objectSpread({}, previousConnection), {}, {\n isValid: isValid,\n to: closestHandle && isValid ? rendererPointToPoint({\n x: closestHandle.x,\n y: closestHandle.y\n }, transform) : position,\n toHandle: result.toHandle,\n toPosition: isValid && result.toHandle ? result.toHandle.position : oppositePosition[fromHandle.position],\n toNode: result.toHandle ? nodeLookup.get(result.toHandle.nodeId) : null\n }); // we don't want to trigger an update when the connection\n // is snapped to the same handle as before\n\n\n if (isValid && closestHandle && previousConnection.toHandle && newConnection.toHandle && previousConnection.toHandle.type === newConnection.toHandle.type && previousConnection.toHandle.nodeId === newConnection.toHandle.nodeId && previousConnection.toHandle.id === newConnection.toHandle.id && previousConnection.to.x === newConnection.to.x && previousConnection.to.y === newConnection.to.y) {\n return;\n }\n\n updateConnection(newConnection);\n previousConnection = newConnection;\n }\n\n function onPointerUp(event) {\n if ((closestHandle || handleDomNode) && connection && isValid) {\n onConnect === null || onConnect === void 0 ? void 0 : onConnect(connection);\n } // it's important to get a fresh reference from the store here\n // in order to get the latest state of onConnectEnd\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n\n\n var _previousConnection = previousConnection,\n inProgress = _previousConnection.inProgress,\n connectionState = _objectWithoutProperties(_previousConnection, _excluded2);\n\n var finalConnectionState = _objectSpread(_objectSpread({}, connectionState), {}, {\n toPosition: previousConnection.toHandle ? previousConnection.toPosition : null\n });\n\n onConnectEnd === null || onConnectEnd === void 0 ? void 0 : onConnectEnd(event, finalConnectionState);\n\n if (edgeUpdaterType) {\n onReconnectEnd === null || onReconnectEnd === void 0 ? void 0 : onReconnectEnd(event, finalConnectionState);\n }\n\n cancelConnection();\n cancelAnimationFrame(autoPanId);\n autoPanStarted = false;\n isValid = false;\n connection = null;\n handleDomNode = null;\n doc.removeEventListener('mousemove', onPointerMove);\n doc.removeEventListener('mouseup', onPointerUp);\n doc.removeEventListener('touchmove', onPointerMove);\n doc.removeEventListener('touchend', onPointerUp);\n }\n\n doc.addEventListener('mousemove', onPointerMove);\n doc.addEventListener('mouseup', onPointerUp);\n doc.addEventListener('touchmove', onPointerMove);\n doc.addEventListener('touchend', onPointerUp);\n} // checks if and returns connection in fom of an object { source: 123, target: 312 }\n\n\nfunction isValidHandle(event, _ref59) {\n var handle = _ref59.handle,\n connectionMode = _ref59.connectionMode,\n fromNodeId = _ref59.fromNodeId,\n fromHandleId = _ref59.fromHandleId,\n fromType = _ref59.fromType,\n doc = _ref59.doc,\n lib = _ref59.lib,\n flowId = _ref59.flowId,\n _ref59$isValidConnect = _ref59.isValidConnection,\n isValidConnection = _ref59$isValidConnect === void 0 ? alwaysValid : _ref59$isValidConnect,\n nodeLookup = _ref59.nodeLookup;\n var isTarget = fromType === 'target';\n var handleDomNode = handle ? doc.querySelector(\".\".concat(lib, \"-flow__handle[data-id=\\\"\").concat(flowId, \"-\").concat(handle === null || handle === void 0 ? void 0 : handle.nodeId, \"-\").concat(handle === null || handle === void 0 ? void 0 : handle.id, \"-\").concat(handle === null || handle === void 0 ? void 0 : handle.type, \"\\\"]\")) : null;\n\n var _getEventPosition3 = getEventPosition(event),\n x = _getEventPosition3.x,\n y = _getEventPosition3.y;\n\n var handleBelow = doc.elementFromPoint(x, y); // we always want to prioritize the handle below the mouse cursor over the closest distance handle,\n // because it could be that the center of another handle is closer to the mouse pointer than the handle below the cursor\n\n var handleToCheck = handleBelow !== null && handleBelow !== void 0 && handleBelow.classList.contains(\"\".concat(lib, \"-flow__handle\")) ? handleBelow : handleDomNode;\n var result = {\n handleDomNode: handleToCheck,\n isValid: false,\n connection: null,\n toHandle: null\n };\n\n if (handleToCheck) {\n var handleType = getHandleType(undefined, handleToCheck);\n var handleNodeId = handleToCheck.getAttribute('data-nodeid');\n var handleId = handleToCheck.getAttribute('data-handleid');\n var connectable = handleToCheck.classList.contains('connectable');\n var connectableEnd = handleToCheck.classList.contains('connectableend');\n\n if (!handleNodeId || !handleType) {\n return result;\n }\n\n var connection = {\n source: isTarget ? handleNodeId : fromNodeId,\n sourceHandle: isTarget ? handleId : fromHandleId,\n target: isTarget ? fromNodeId : handleNodeId,\n targetHandle: isTarget ? fromHandleId : handleId\n };\n result.connection = connection;\n var isConnectable = connectable && connectableEnd; // in strict mode we don't allow target to target or source to source connections\n\n var isValid = isConnectable && (connectionMode === ConnectionMode.Strict ? isTarget && handleType === 'source' || !isTarget && handleType === 'target' : handleNodeId !== fromNodeId || handleId !== fromHandleId);\n result.isValid = isValid && isValidConnection(connection);\n result.toHandle = getHandle(handleNodeId, handleType, handleId, nodeLookup, connectionMode, false);\n }\n\n return result;\n}\n\nvar XYHandle = {\n onPointerDown: onPointerDown,\n isValid: isValidHandle\n};\n\nfunction XYMinimap(_ref60) {\n var domNode = _ref60.domNode,\n panZoom = _ref60.panZoom,\n getTransform = _ref60.getTransform,\n getViewScale = _ref60.getViewScale;\n var selection = select(domNode);\n\n function update(_ref61) {\n var translateExtent = _ref61.translateExtent,\n width = _ref61.width,\n height = _ref61.height,\n _ref61$zoomStep = _ref61.zoomStep,\n zoomStep = _ref61$zoomStep === void 0 ? 10 : _ref61$zoomStep,\n _ref61$pannable = _ref61.pannable,\n pannable = _ref61$pannable === void 0 ? true : _ref61$pannable,\n _ref61$zoomable = _ref61.zoomable,\n zoomable = _ref61$zoomable === void 0 ? true : _ref61$zoomable,\n _ref61$inversePan = _ref61.inversePan,\n inversePan = _ref61$inversePan === void 0 ? false : _ref61$inversePan;\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var zoomHandler = function zoomHandler(event) {\n var transform = getTransform();\n\n if (event.sourceEvent.type !== 'wheel' || !panZoom) {\n return;\n }\n\n var pinchDelta = -event.sourceEvent.deltaY * (event.sourceEvent.deltaMode === 1 ? 0.05 : event.sourceEvent.deltaMode ? 1 : 0.002) * zoomStep;\n var nextZoom = transform[2] * Math.pow(2, pinchDelta);\n panZoom.scaleTo(nextZoom);\n };\n\n var panStart = [0, 0]; // eslint-disable-next-line @typescript-eslint/no-explicit-any\n\n var panStartHandler = function panStartHandler(event) {\n if (event.sourceEvent.type === 'mousedown' || event.sourceEvent.type === 'touchstart') {\n var _event$sourceEvent$cl, _event$sourceEvent$cl2;\n\n panStart = [(_event$sourceEvent$cl = event.sourceEvent.clientX) !== null && _event$sourceEvent$cl !== void 0 ? _event$sourceEvent$cl : event.sourceEvent.touches[0].clientX, (_event$sourceEvent$cl2 = event.sourceEvent.clientY) !== null && _event$sourceEvent$cl2 !== void 0 ? _event$sourceEvent$cl2 : event.sourceEvent.touches[0].clientY];\n }\n }; // eslint-disable-next-line @typescript-eslint/no-explicit-any\n\n\n var panHandler = function panHandler(event) {\n var _event$sourceEvent$cl3, _event$sourceEvent$cl4;\n\n var transform = getTransform();\n\n if (event.sourceEvent.type !== 'mousemove' && event.sourceEvent.type !== 'touchmove' || !panZoom) {\n return;\n }\n\n var panCurrent = [(_event$sourceEvent$cl3 = event.sourceEvent.clientX) !== null && _event$sourceEvent$cl3 !== void 0 ? _event$sourceEvent$cl3 : event.sourceEvent.touches[0].clientX, (_event$sourceEvent$cl4 = event.sourceEvent.clientY) !== null && _event$sourceEvent$cl4 !== void 0 ? _event$sourceEvent$cl4 : event.sourceEvent.touches[0].clientY];\n var panDelta = [panCurrent[0] - panStart[0], panCurrent[1] - panStart[1]];\n panStart = panCurrent;\n var moveScale = getViewScale() * Math.max(transform[2], Math.log(transform[2])) * (inversePan ? -1 : 1);\n var position = {\n x: transform[0] - panDelta[0] * moveScale,\n y: transform[1] - panDelta[1] * moveScale\n };\n var extent = [[0, 0], [width, height]];\n panZoom.setViewportConstrained({\n x: position.x,\n y: position.y,\n zoom: transform[2]\n }, extent, translateExtent);\n };\n\n var zoomAndPanHandler = zoom().on('start', panStartHandler) // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n .on('zoom', pannable ? panHandler : null) // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n .on('zoom.wheel', zoomable ? zoomHandler : null);\n selection.call(zoomAndPanHandler, {});\n }\n\n function destroy() {\n selection.on('zoom', null);\n }\n\n return {\n update: update,\n destroy: destroy,\n pointer: pointer\n };\n}\n/* eslint-disable @typescript-eslint/no-explicit-any */\n\n\nvar viewChanged = function viewChanged(prevViewport, eventViewport) {\n return prevViewport.x !== eventViewport.x || prevViewport.y !== eventViewport.y || prevViewport.zoom !== eventViewport.k;\n};\n\nvar transformToViewport = function transformToViewport(transform) {\n return {\n x: transform.x,\n y: transform.y,\n zoom: transform.k\n };\n};\n\nvar viewportToTransform = function viewportToTransform(_ref62) {\n var x = _ref62.x,\n y = _ref62.y,\n zoom = _ref62.zoom;\n return zoomIdentity.translate(x, y).scale(zoom);\n};\n\nvar isWrappedWithClass = function isWrappedWithClass(event, className) {\n return event.target.closest(\".\".concat(className));\n};\n\nvar isRightClickPan = function isRightClickPan(panOnDrag, usedButton) {\n return usedButton === 2 && Array.isArray(panOnDrag) && panOnDrag.includes(2);\n};\n\nvar getD3Transition = function getD3Transition(selection) {\n var duration = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n var onEnd = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : function () {};\n var hasDuration = typeof duration === 'number' && duration > 0;\n\n if (!hasDuration) {\n onEnd();\n }\n\n return hasDuration ? selection.transition().duration(duration).on('end', onEnd) : selection;\n};\n\nvar wheelDelta = function wheelDelta(event) {\n var factor = event.ctrlKey && isMacOs() ? 10 : 1;\n return -event.deltaY * (event.deltaMode === 1 ? 0.05 : event.deltaMode ? 1 : 0.002) * factor;\n};\n\nfunction createPanOnScrollHandler(_ref63) {\n var zoomPanValues = _ref63.zoomPanValues,\n noWheelClassName = _ref63.noWheelClassName,\n d3Selection = _ref63.d3Selection,\n d3Zoom = _ref63.d3Zoom,\n panOnScrollMode = _ref63.panOnScrollMode,\n panOnScrollSpeed = _ref63.panOnScrollSpeed,\n zoomOnPinch = _ref63.zoomOnPinch,\n onPanZoomStart = _ref63.onPanZoomStart,\n onPanZoom = _ref63.onPanZoom,\n onPanZoomEnd = _ref63.onPanZoomEnd;\n return function (event) {\n if (isWrappedWithClass(event, noWheelClassName)) {\n return false;\n }\n\n event.preventDefault();\n event.stopImmediatePropagation();\n var currentZoom = d3Selection.property('__zoom').k || 1; // macos sets ctrlKey=true for pinch gesture on a trackpad\n\n if (event.ctrlKey && zoomOnPinch) {\n var point = pointer(event);\n var pinchDelta = wheelDelta(event);\n\n var _zoom = currentZoom * Math.pow(2, pinchDelta); // @ts-ignore\n\n\n d3Zoom.scaleTo(d3Selection, _zoom, point, event);\n return;\n } // increase scroll speed in firefox\n // firefox: deltaMode === 1; chrome: deltaMode === 0\n\n\n var deltaNormalize = event.deltaMode === 1 ? 20 : 1;\n var deltaX = panOnScrollMode === PanOnScrollMode.Vertical ? 0 : event.deltaX * deltaNormalize;\n var deltaY = panOnScrollMode === PanOnScrollMode.Horizontal ? 0 : event.deltaY * deltaNormalize; // this enables vertical scrolling with shift + scroll on windows\n\n if (!isMacOs() && event.shiftKey && panOnScrollMode !== PanOnScrollMode.Vertical) {\n deltaX = event.deltaY * deltaNormalize;\n deltaY = 0;\n }\n\n d3Zoom.translateBy(d3Selection, -(deltaX / currentZoom) * panOnScrollSpeed, -(deltaY / currentZoom) * panOnScrollSpeed, // @ts-ignore\n {\n internal: true\n });\n var nextViewport = transformToViewport(d3Selection.property('__zoom'));\n clearTimeout(zoomPanValues.panScrollTimeout); // for pan on scroll we need to handle the event calls on our own\n // we can't use the start, zoom and end events from d3-zoom\n // because start and move gets called on every scroll event and not once at the beginning\n\n if (!zoomPanValues.isPanScrolling) {\n zoomPanValues.isPanScrolling = true;\n onPanZoomStart === null || onPanZoomStart === void 0 ? void 0 : onPanZoomStart(event, nextViewport);\n }\n\n if (zoomPanValues.isPanScrolling) {\n onPanZoom === null || onPanZoom === void 0 ? void 0 : onPanZoom(event, nextViewport);\n zoomPanValues.panScrollTimeout = setTimeout(function () {\n onPanZoomEnd === null || onPanZoomEnd === void 0 ? void 0 : onPanZoomEnd(event, nextViewport);\n zoomPanValues.isPanScrolling = false;\n }, 150);\n }\n };\n}\n\nfunction createZoomOnScrollHandler(_ref64) {\n var noWheelClassName = _ref64.noWheelClassName,\n preventScrolling = _ref64.preventScrolling,\n d3ZoomHandler = _ref64.d3ZoomHandler;\n return function (event, d) {\n // we still want to enable pinch zooming even if preventScrolling is set to false\n var preventZoom = !preventScrolling && event.type === 'wheel' && !event.ctrlKey;\n\n if (preventZoom || isWrappedWithClass(event, noWheelClassName)) {\n return null;\n }\n\n event.preventDefault();\n d3ZoomHandler.call(this, event, d);\n };\n}\n\nfunction createPanZoomStartHandler(_ref65) {\n var zoomPanValues = _ref65.zoomPanValues,\n onDraggingChange = _ref65.onDraggingChange,\n onPanZoomStart = _ref65.onPanZoomStart;\n return function (event) {\n var _event$sourceEvent, _event$sourceEvent2, _event$sourceEvent3;\n\n if ((_event$sourceEvent = event.sourceEvent) !== null && _event$sourceEvent !== void 0 && _event$sourceEvent.internal) {\n return;\n }\n\n var viewport = transformToViewport(event.transform); // we need to remember it here, because it's always 0 in the \"zoom\" event\n\n zoomPanValues.mouseButton = ((_event$sourceEvent2 = event.sourceEvent) === null || _event$sourceEvent2 === void 0 ? void 0 : _event$sourceEvent2.button) || 0;\n zoomPanValues.isZoomingOrPanning = true;\n zoomPanValues.prevViewport = viewport;\n\n if (((_event$sourceEvent3 = event.sourceEvent) === null || _event$sourceEvent3 === void 0 ? void 0 : _event$sourceEvent3.type) === 'mousedown') {\n onDraggingChange(true);\n }\n\n if (onPanZoomStart) {\n onPanZoomStart === null || onPanZoomStart === void 0 ? void 0 : onPanZoomStart(event.sourceEvent, viewport);\n }\n };\n}\n\nfunction createPanZoomHandler(_ref66) {\n var zoomPanValues = _ref66.zoomPanValues,\n panOnDrag = _ref66.panOnDrag,\n onPaneContextMenu = _ref66.onPaneContextMenu,\n onTransformChange = _ref66.onTransformChange,\n onPanZoom = _ref66.onPanZoom;\n return function (event) {\n var _zoomPanValues$mouseB, _event$sourceEvent4, _event$sourceEvent5;\n\n zoomPanValues.usedRightMouseButton = !!(onPaneContextMenu && isRightClickPan(panOnDrag, (_zoomPanValues$mouseB = zoomPanValues.mouseButton) !== null && _zoomPanValues$mouseB !== void 0 ? _zoomPanValues$mouseB : 0));\n\n if (!((_event$sourceEvent4 = event.sourceEvent) !== null && _event$sourceEvent4 !== void 0 && _event$sourceEvent4.sync)) {\n onTransformChange([event.transform.x, event.transform.y, event.transform.k]);\n }\n\n if (onPanZoom && !((_event$sourceEvent5 = event.sourceEvent) !== null && _event$sourceEvent5 !== void 0 && _event$sourceEvent5.internal)) {\n onPanZoom === null || onPanZoom === void 0 ? void 0 : onPanZoom(event.sourceEvent, transformToViewport(event.transform));\n }\n };\n}\n\nfunction createPanZoomEndHandler(_ref67) {\n var zoomPanValues = _ref67.zoomPanValues,\n panOnDrag = _ref67.panOnDrag,\n panOnScroll = _ref67.panOnScroll,\n onDraggingChange = _ref67.onDraggingChange,\n onPanZoomEnd = _ref67.onPanZoomEnd,\n onPaneContextMenu = _ref67.onPaneContextMenu;\n return function (event) {\n var _event$sourceEvent6, _zoomPanValues$mouseB2;\n\n if ((_event$sourceEvent6 = event.sourceEvent) !== null && _event$sourceEvent6 !== void 0 && _event$sourceEvent6.internal) {\n return;\n }\n\n zoomPanValues.isZoomingOrPanning = false;\n\n if (onPaneContextMenu && isRightClickPan(panOnDrag, (_zoomPanValues$mouseB2 = zoomPanValues.mouseButton) !== null && _zoomPanValues$mouseB2 !== void 0 ? _zoomPanValues$mouseB2 : 0) && !zoomPanValues.usedRightMouseButton && event.sourceEvent) {\n onPaneContextMenu(event.sourceEvent);\n }\n\n zoomPanValues.usedRightMouseButton = false;\n onDraggingChange(false);\n\n if (onPanZoomEnd && viewChanged(zoomPanValues.prevViewport, event.transform)) {\n var viewport = transformToViewport(event.transform);\n zoomPanValues.prevViewport = viewport;\n clearTimeout(zoomPanValues.timerId);\n zoomPanValues.timerId = setTimeout(function () {\n onPanZoomEnd === null || onPanZoomEnd === void 0 ? void 0 : onPanZoomEnd(event.sourceEvent, viewport);\n }, // we need a setTimeout for panOnScroll to supress multiple end events fired during scroll\n panOnScroll ? 150 : 0);\n }\n };\n}\n/* eslint-disable @typescript-eslint/no-explicit-any */\n\n\nfunction createFilter(_ref68) {\n var zoomActivationKeyPressed = _ref68.zoomActivationKeyPressed,\n zoomOnScroll = _ref68.zoomOnScroll,\n zoomOnPinch = _ref68.zoomOnPinch,\n panOnDrag = _ref68.panOnDrag,\n panOnScroll = _ref68.panOnScroll,\n zoomOnDoubleClick = _ref68.zoomOnDoubleClick,\n userSelectionActive = _ref68.userSelectionActive,\n noWheelClassName = _ref68.noWheelClassName,\n noPanClassName = _ref68.noPanClassName,\n lib = _ref68.lib;\n return function (event) {\n var _event$touches3;\n\n var zoomScroll = zoomActivationKeyPressed || zoomOnScroll;\n var pinchZoom = zoomOnPinch && event.ctrlKey;\n\n if (event.button === 1 && event.type === 'mousedown' && (isWrappedWithClass(event, \"\".concat(lib, \"-flow__node\")) || isWrappedWithClass(event, \"\".concat(lib, \"-flow__edge\")))) {\n return true;\n } // if all interactions are disabled, we prevent all zoom events\n\n\n if (!panOnDrag && !zoomScroll && !panOnScroll && !zoomOnDoubleClick && !zoomOnPinch) {\n return false;\n } // during a selection we prevent all other interactions\n\n\n if (userSelectionActive) {\n return false;\n } // if the target element is inside an element with the nowheel class, we prevent zooming\n\n\n if (isWrappedWithClass(event, noWheelClassName) && event.type === 'wheel') {\n return false;\n } // if the target element is inside an element with the nopan class, we prevent panning\n\n\n if (isWrappedWithClass(event, noPanClassName) && (event.type !== 'wheel' || panOnScroll && event.type === 'wheel' && !zoomActivationKeyPressed)) {\n return false;\n }\n\n if (!zoomOnPinch && event.ctrlKey && event.type === 'wheel') {\n return false;\n }\n\n if (!zoomOnPinch && event.type === 'touchstart' && ((_event$touches3 = event.touches) === null || _event$touches3 === void 0 ? void 0 : _event$touches3.length) > 1) {\n event.preventDefault(); // if you manage to start with 2 touches, we prevent native zoom\n\n return false;\n } // when there is no scroll handling enabled, we prevent all wheel events\n\n\n if (!zoomScroll && !panOnScroll && !pinchZoom && event.type === 'wheel') {\n return false;\n } // if the pane is not movable, we prevent dragging it with mousestart or touchstart\n\n\n if (!panOnDrag && (event.type === 'mousedown' || event.type === 'touchstart')) {\n return false;\n } // if the pane is only movable using allowed clicks\n\n\n if (Array.isArray(panOnDrag) && !panOnDrag.includes(event.button) && event.type === 'mousedown') {\n return false;\n } // We only allow right clicks if pan on drag is set to right click\n\n\n var buttonAllowed = Array.isArray(panOnDrag) && panOnDrag.includes(event.button) || !event.button || event.button <= 1; // default filter for d3-zoom\n\n return (!event.ctrlKey || event.type === 'wheel') && buttonAllowed;\n };\n}\n\nfunction XYPanZoom(_ref69) {\n var domNode = _ref69.domNode,\n minZoom = _ref69.minZoom,\n maxZoom = _ref69.maxZoom,\n paneClickDistance = _ref69.paneClickDistance,\n translateExtent = _ref69.translateExtent,\n viewport = _ref69.viewport,\n onPanZoom = _ref69.onPanZoom,\n onPanZoomStart = _ref69.onPanZoomStart,\n onPanZoomEnd = _ref69.onPanZoomEnd,\n onDraggingChange = _ref69.onDraggingChange;\n var zoomPanValues = {\n isZoomingOrPanning: false,\n usedRightMouseButton: false,\n prevViewport: {\n x: 0,\n y: 0,\n zoom: 0\n },\n mouseButton: 0,\n timerId: undefined,\n panScrollTimeout: undefined,\n isPanScrolling: false\n };\n var bbox = domNode.getBoundingClientRect();\n var d3ZoomInstance = zoom().clickDistance(!isNumeric(paneClickDistance) || paneClickDistance < 0 ? 0 : paneClickDistance).scaleExtent([minZoom, maxZoom]).translateExtent(translateExtent);\n var d3Selection = select(domNode).call(d3ZoomInstance);\n setViewportConstrained({\n x: viewport.x,\n y: viewport.y,\n zoom: clamp(viewport.zoom, minZoom, maxZoom)\n }, [[0, 0], [bbox.width, bbox.height]], translateExtent);\n var d3ZoomHandler = d3Selection.on('wheel.zoom');\n var d3DblClickZoomHandler = d3Selection.on('dblclick.zoom');\n d3ZoomInstance.wheelDelta(wheelDelta);\n\n function setTransform(transform, options) {\n if (d3Selection) {\n return new Promise(function (resolve) {\n d3ZoomInstance === null || d3ZoomInstance === void 0 ? void 0 : d3ZoomInstance.transform(getD3Transition(d3Selection, options === null || options === void 0 ? void 0 : options.duration, function () {\n return resolve(true);\n }), transform);\n });\n }\n\n return Promise.resolve(false);\n } // public functions\n\n\n function update(_ref70) {\n var noWheelClassName = _ref70.noWheelClassName,\n noPanClassName = _ref70.noPanClassName,\n onPaneContextMenu = _ref70.onPaneContextMenu,\n userSelectionActive = _ref70.userSelectionActive,\n panOnScroll = _ref70.panOnScroll,\n panOnDrag = _ref70.panOnDrag,\n panOnScrollMode = _ref70.panOnScrollMode,\n panOnScrollSpeed = _ref70.panOnScrollSpeed,\n preventScrolling = _ref70.preventScrolling,\n zoomOnPinch = _ref70.zoomOnPinch,\n zoomOnScroll = _ref70.zoomOnScroll,\n zoomOnDoubleClick = _ref70.zoomOnDoubleClick,\n zoomActivationKeyPressed = _ref70.zoomActivationKeyPressed,\n lib = _ref70.lib,\n onTransformChange = _ref70.onTransformChange;\n\n if (userSelectionActive && !zoomPanValues.isZoomingOrPanning) {\n destroy();\n }\n\n var isPanOnScroll = panOnScroll && !zoomActivationKeyPressed && !userSelectionActive;\n var wheelHandler = isPanOnScroll ? createPanOnScrollHandler({\n zoomPanValues: zoomPanValues,\n noWheelClassName: noWheelClassName,\n d3Selection: d3Selection,\n d3Zoom: d3ZoomInstance,\n panOnScrollMode: panOnScrollMode,\n panOnScrollSpeed: panOnScrollSpeed,\n zoomOnPinch: zoomOnPinch,\n onPanZoomStart: onPanZoomStart,\n onPanZoom: onPanZoom,\n onPanZoomEnd: onPanZoomEnd\n }) : createZoomOnScrollHandler({\n noWheelClassName: noWheelClassName,\n preventScrolling: preventScrolling,\n d3ZoomHandler: d3ZoomHandler\n });\n d3Selection.on('wheel.zoom', wheelHandler, {\n passive: false\n });\n\n if (!userSelectionActive) {\n // pan zoom start\n var startHandler = createPanZoomStartHandler({\n zoomPanValues: zoomPanValues,\n onDraggingChange: onDraggingChange,\n onPanZoomStart: onPanZoomStart\n });\n d3ZoomInstance.on('start', startHandler); // pan zoom\n\n var panZoomHandler = createPanZoomHandler({\n zoomPanValues: zoomPanValues,\n panOnDrag: panOnDrag,\n onPaneContextMenu: !!onPaneContextMenu,\n onPanZoom: onPanZoom,\n onTransformChange: onTransformChange\n });\n d3ZoomInstance.on('zoom', panZoomHandler); // pan zoom end\n\n var panZoomEndHandler = createPanZoomEndHandler({\n zoomPanValues: zoomPanValues,\n panOnDrag: panOnDrag,\n panOnScroll: panOnScroll,\n onPaneContextMenu: onPaneContextMenu,\n onPanZoomEnd: onPanZoomEnd,\n onDraggingChange: onDraggingChange\n });\n d3ZoomInstance.on('end', panZoomEndHandler);\n }\n\n var filter = createFilter({\n zoomActivationKeyPressed: zoomActivationKeyPressed,\n panOnDrag: panOnDrag,\n zoomOnScroll: zoomOnScroll,\n panOnScroll: panOnScroll,\n zoomOnDoubleClick: zoomOnDoubleClick,\n zoomOnPinch: zoomOnPinch,\n userSelectionActive: userSelectionActive,\n noPanClassName: noPanClassName,\n noWheelClassName: noWheelClassName,\n lib: lib\n });\n d3ZoomInstance.filter(filter); // We cannot add zoomOnDoubleClick to the filter above because\n // double tapping on touch screens circumvents the filter and\n // dblclick.zoom is fired on the selection directly\n\n if (zoomOnDoubleClick) {\n d3Selection.on('dblclick.zoom', d3DblClickZoomHandler);\n } else {\n d3Selection.on('dblclick.zoom', null);\n }\n }\n\n function destroy() {\n d3ZoomInstance.on('zoom', null);\n }\n\n function setViewportConstrained(_x5, _x6, _x7) {\n return _setViewportConstrained.apply(this, arguments);\n }\n\n function _setViewportConstrained() {\n _setViewportConstrained = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee2(viewport, extent, translateExtent) {\n var nextTransform, contrainedTransform;\n return _regeneratorRuntime.wrap(function _callee2$(_context2) {\n while (1) {\n switch (_context2.prev = _context2.next) {\n case 0:\n nextTransform = viewportToTransform(viewport);\n contrainedTransform = d3ZoomInstance === null || d3ZoomInstance === void 0 ? void 0 : d3ZoomInstance.constrain()(nextTransform, extent, translateExtent);\n\n if (!contrainedTransform) {\n _context2.next = 5;\n break;\n }\n\n _context2.next = 5;\n return setTransform(contrainedTransform);\n\n case 5:\n return _context2.abrupt(\"return\", new Promise(function (resolve) {\n return resolve(contrainedTransform);\n }));\n\n case 6:\n case \"end\":\n return _context2.stop();\n }\n }\n }, _callee2);\n }));\n return _setViewportConstrained.apply(this, arguments);\n }\n\n function setViewport(_x8, _x9) {\n return _setViewport.apply(this, arguments);\n }\n\n function _setViewport() {\n _setViewport = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee3(viewport, options) {\n var nextTransform;\n return _regeneratorRuntime.wrap(function _callee3$(_context3) {\n while (1) {\n switch (_context3.prev = _context3.next) {\n case 0:\n nextTransform = viewportToTransform(viewport);\n _context3.next = 3;\n return setTransform(nextTransform, options);\n\n case 3:\n return _context3.abrupt(\"return\", new Promise(function (resolve) {\n return resolve(nextTransform);\n }));\n\n case 4:\n case \"end\":\n return _context3.stop();\n }\n }\n }, _callee3);\n }));\n return _setViewport.apply(this, arguments);\n }\n\n function syncViewport(viewport) {\n if (d3Selection) {\n var nextTransform = viewportToTransform(viewport);\n var currentTransform = d3Selection.property('__zoom');\n\n if (currentTransform.k !== viewport.zoom || currentTransform.x !== viewport.x || currentTransform.y !== viewport.y) {\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n d3ZoomInstance === null || d3ZoomInstance === void 0 ? void 0 : d3ZoomInstance.transform(d3Selection, nextTransform, null, {\n sync: true\n });\n }\n }\n }\n\n function getViewport() {\n var transform = d3Selection ? zoomTransform(d3Selection.node()) : {\n x: 0,\n y: 0,\n k: 1\n };\n return {\n x: transform.x,\n y: transform.y,\n zoom: transform.k\n };\n }\n\n function scaleTo(zoom, options) {\n if (d3Selection) {\n return new Promise(function (resolve) {\n d3ZoomInstance === null || d3ZoomInstance === void 0 ? void 0 : d3ZoomInstance.scaleTo(getD3Transition(d3Selection, options === null || options === void 0 ? void 0 : options.duration, function () {\n return resolve(true);\n }), zoom);\n });\n }\n\n return Promise.resolve(false);\n }\n\n function scaleBy(factor, options) {\n if (d3Selection) {\n return new Promise(function (resolve) {\n d3ZoomInstance === null || d3ZoomInstance === void 0 ? void 0 : d3ZoomInstance.scaleBy(getD3Transition(d3Selection, options === null || options === void 0 ? void 0 : options.duration, function () {\n return resolve(true);\n }), factor);\n });\n }\n\n return Promise.resolve(false);\n }\n\n function setScaleExtent(scaleExtent) {\n d3ZoomInstance === null || d3ZoomInstance === void 0 ? void 0 : d3ZoomInstance.scaleExtent(scaleExtent);\n }\n\n function setTranslateExtent(translateExtent) {\n d3ZoomInstance === null || d3ZoomInstance === void 0 ? void 0 : d3ZoomInstance.translateExtent(translateExtent);\n }\n\n function setClickDistance(distance) {\n var validDistance = !isNumeric(distance) || distance < 0 ? 0 : distance;\n d3ZoomInstance === null || d3ZoomInstance === void 0 ? void 0 : d3ZoomInstance.clickDistance(validDistance);\n }\n\n return {\n update: update,\n destroy: destroy,\n setViewport: setViewport,\n setViewportConstrained: setViewportConstrained,\n getViewport: getViewport,\n scaleTo: scaleTo,\n scaleBy: scaleBy,\n setScaleExtent: setScaleExtent,\n setTranslateExtent: setTranslateExtent,\n syncViewport: syncViewport,\n setClickDistance: setClickDistance\n };\n}\n\nvar ResizeControlVariant;\n\n(function (ResizeControlVariant) {\n ResizeControlVariant[\"Line\"] = \"line\";\n ResizeControlVariant[\"Handle\"] = \"handle\";\n})(ResizeControlVariant || (ResizeControlVariant = {}));\n\nvar XY_RESIZER_HANDLE_POSITIONS = ['top-left', 'top-right', 'bottom-left', 'bottom-right'];\nvar XY_RESIZER_LINE_POSITIONS = ['top', 'right', 'bottom', 'left'];\n/**\n * Get all connecting edges for a given set of nodes\n * @param width - new width of the node\n * @param prevWidth - previous width of the node\n * @param height - new height of the node\n * @param prevHeight - previous height of the node\n * @param affectsX - whether to invert the resize direction for the x axis\n * @param affectsY - whether to invert the resize direction for the y axis\n * @returns array of two numbers representing the direction of the resize for each axis, 0 = no change, 1 = increase, -1 = decrease\n */\n\nfunction getResizeDirection(_ref71) {\n var width = _ref71.width,\n prevWidth = _ref71.prevWidth,\n height = _ref71.height,\n prevHeight = _ref71.prevHeight,\n affectsX = _ref71.affectsX,\n affectsY = _ref71.affectsY;\n var deltaWidth = width - prevWidth;\n var deltaHeight = height - prevHeight;\n var direction = [deltaWidth > 0 ? 1 : deltaWidth < 0 ? -1 : 0, deltaHeight > 0 ? 1 : deltaHeight < 0 ? -1 : 0];\n\n if (deltaWidth && affectsX) {\n direction[0] = direction[0] * -1;\n }\n\n if (deltaHeight && affectsY) {\n direction[1] = direction[1] * -1;\n }\n\n return direction;\n}\n/**\n * Parses the control position that is being dragged to dimensions that are being resized\n * @param controlPosition - position of the control that is being dragged\n * @returns isHorizontal, isVertical, affectsX, affectsY,\n */\n\n\nfunction getControlDirection(controlPosition) {\n var isHorizontal = controlPosition.includes('right') || controlPosition.includes('left');\n var isVertical = controlPosition.includes('bottom') || controlPosition.includes('top');\n var affectsX = controlPosition.includes('left');\n var affectsY = controlPosition.includes('top');\n return {\n isHorizontal: isHorizontal,\n isVertical: isVertical,\n affectsX: affectsX,\n affectsY: affectsY\n };\n}\n\nfunction getLowerExtentClamp(lowerExtent, lowerBound) {\n return Math.max(0, lowerBound - lowerExtent);\n}\n\nfunction getUpperExtentClamp(upperExtent, upperBound) {\n return Math.max(0, upperExtent - upperBound);\n}\n\nfunction getSizeClamp(size, minSize, maxSize) {\n return Math.max(0, minSize - size, size - maxSize);\n}\n\nfunction xor(a, b) {\n return a ? !b : b;\n}\n/**\n * Calculates new width & height and x & y of node after resize based on pointer position\n * @description - Buckle up, this is a chunky one... If you want to determine the new dimensions of a node after a resize,\n * you have to account for all possible restrictions: min/max width/height of the node, the maximum extent the node is allowed\n * to move in (in this case: resize into) determined by the parent node, the minimal extent determined by child nodes\n * with expandParent or extent: 'parent' set and oh yeah, these things also have to work with keepAspectRatio!\n * The way this is done is by determining how much each of these restricting actually restricts the resize and then applying the\n * strongest restriction. Because the resize affects x, y and width, height and width, height of a opposing side with keepAspectRatio,\n * the resize amount is always kept in distX & distY amount (the distance in mouse movement)\n * Instead of clamping each value, we first calculate the biggest 'clamp' (for the lack of a better name) and then apply it to all values.\n * To complicate things nodeOrigin has to be taken into account as well. This is done by offsetting the nodes as if their origin is [0, 0],\n * then calculating the restrictions as usual\n * @param startValues - starting values of resize\n * @param controlDirection - dimensions affected by the resize\n * @param pointerPosition - the current pointer position corrected for snapping\n * @param boundaries - minimum and maximum dimensions of the node\n * @param keepAspectRatio - prevent changes of asprect ratio\n * @returns x, y, width and height of the node after resize\n */\n\n\nfunction getDimensionsAfterResize(startValues, controlDirection, pointerPosition, boundaries, keepAspectRatio, nodeOrigin, extent, childExtent) {\n var affectsX = controlDirection.affectsX,\n affectsY = controlDirection.affectsY;\n var isHorizontal = controlDirection.isHorizontal,\n isVertical = controlDirection.isVertical;\n var isDiagonal = isHorizontal && isVertical;\n var xSnapped = pointerPosition.xSnapped,\n ySnapped = pointerPosition.ySnapped;\n var minWidth = boundaries.minWidth,\n maxWidth = boundaries.maxWidth,\n minHeight = boundaries.minHeight,\n maxHeight = boundaries.maxHeight;\n var startX = startValues.x,\n startY = startValues.y,\n startWidth = startValues.width,\n startHeight = startValues.height,\n aspectRatio = startValues.aspectRatio;\n var distX = Math.floor(isHorizontal ? xSnapped - startValues.pointerX : 0);\n var distY = Math.floor(isVertical ? ySnapped - startValues.pointerY : 0);\n var newWidth = startWidth + (affectsX ? -distX : distX);\n var newHeight = startHeight + (affectsY ? -distY : distY);\n var originOffsetX = -nodeOrigin[0] * startWidth;\n var originOffsetY = -nodeOrigin[1] * startHeight; // Check if maxWidth, minWWidth, maxHeight, minHeight are restricting the resize\n\n var clampX = getSizeClamp(newWidth, minWidth, maxWidth);\n var clampY = getSizeClamp(newHeight, minHeight, maxHeight); // Check if extent is restricting the resize\n\n if (extent) {\n var xExtentClamp = 0;\n var yExtentClamp = 0;\n\n if (affectsX && distX < 0) {\n xExtentClamp = getLowerExtentClamp(startX + distX + originOffsetX, extent[0][0]);\n } else if (!affectsX && distX > 0) {\n xExtentClamp = getUpperExtentClamp(startX + newWidth + originOffsetX, extent[1][0]);\n }\n\n if (affectsY && distY < 0) {\n yExtentClamp = getLowerExtentClamp(startY + distY + originOffsetY, extent[0][1]);\n } else if (!affectsY && distY > 0) {\n yExtentClamp = getUpperExtentClamp(startY + newHeight + originOffsetY, extent[1][1]);\n }\n\n clampX = Math.max(clampX, xExtentClamp);\n clampY = Math.max(clampY, yExtentClamp);\n } // Check if the child extent is restricting the resize\n\n\n if (childExtent) {\n var _xExtentClamp = 0;\n var _yExtentClamp = 0;\n\n if (affectsX && distX > 0) {\n _xExtentClamp = getUpperExtentClamp(startX + distX, childExtent[0][0]);\n } else if (!affectsX && distX < 0) {\n _xExtentClamp = getLowerExtentClamp(startX + newWidth, childExtent[1][0]);\n }\n\n if (affectsY && distY > 0) {\n _yExtentClamp = getUpperExtentClamp(startY + distY, childExtent[0][1]);\n } else if (!affectsY && distY < 0) {\n _yExtentClamp = getLowerExtentClamp(startY + newHeight, childExtent[1][1]);\n }\n\n clampX = Math.max(clampX, _xExtentClamp);\n clampY = Math.max(clampY, _yExtentClamp);\n } // Check if the aspect ratio resizing of the other side is restricting the resize\n\n\n if (keepAspectRatio) {\n if (isHorizontal) {\n // Check if the max dimensions might be restricting the resize\n var aspectHeightClamp = getSizeClamp(newWidth / aspectRatio, minHeight, maxHeight) * aspectRatio;\n clampX = Math.max(clampX, aspectHeightClamp); // Check if the extent is restricting the resize\n\n if (extent) {\n var aspectExtentClamp = 0;\n\n if (!affectsX && !affectsY || affectsX && !affectsY && isDiagonal) {\n aspectExtentClamp = getUpperExtentClamp(startY + originOffsetY + newWidth / aspectRatio, extent[1][1]) * aspectRatio;\n } else {\n aspectExtentClamp = getLowerExtentClamp(startY + originOffsetY + (affectsX ? distX : -distX) / aspectRatio, extent[0][1]) * aspectRatio;\n }\n\n clampX = Math.max(clampX, aspectExtentClamp);\n } // Check if the child extent is restricting the resize\n\n\n if (childExtent) {\n var _aspectExtentClamp = 0;\n\n if (!affectsX && !affectsY || affectsX && !affectsY && isDiagonal) {\n _aspectExtentClamp = getLowerExtentClamp(startY + newWidth / aspectRatio, childExtent[1][1]) * aspectRatio;\n } else {\n _aspectExtentClamp = getUpperExtentClamp(startY + (affectsX ? distX : -distX) / aspectRatio, childExtent[0][1]) * aspectRatio;\n }\n\n clampX = Math.max(clampX, _aspectExtentClamp);\n }\n } // Do the same thing for vertical resizing\n\n\n if (isVertical) {\n var aspectWidthClamp = getSizeClamp(newHeight * aspectRatio, minWidth, maxWidth) / aspectRatio;\n clampY = Math.max(clampY, aspectWidthClamp);\n\n if (extent) {\n var _aspectExtentClamp2 = 0;\n\n if (!affectsX && !affectsY || affectsY && !affectsX && isDiagonal) {\n _aspectExtentClamp2 = getUpperExtentClamp(startX + newHeight * aspectRatio + originOffsetX, extent[1][0]) / aspectRatio;\n } else {\n _aspectExtentClamp2 = getLowerExtentClamp(startX + (affectsY ? distY : -distY) * aspectRatio + originOffsetX, extent[0][0]) / aspectRatio;\n }\n\n clampY = Math.max(clampY, _aspectExtentClamp2);\n }\n\n if (childExtent) {\n var _aspectExtentClamp3 = 0;\n\n if (!affectsX && !affectsY || affectsY && !affectsX && isDiagonal) {\n _aspectExtentClamp3 = getLowerExtentClamp(startX + newHeight * aspectRatio, childExtent[1][0]) / aspectRatio;\n } else {\n _aspectExtentClamp3 = getUpperExtentClamp(startX + (affectsY ? distY : -distY) * aspectRatio, childExtent[0][0]) / aspectRatio;\n }\n\n clampY = Math.max(clampY, _aspectExtentClamp3);\n }\n }\n }\n\n distY = distY + (distY < 0 ? clampY : -clampY);\n distX = distX + (distX < 0 ? clampX : -clampX);\n\n if (keepAspectRatio) {\n if (isDiagonal) {\n if (newWidth > newHeight * aspectRatio) {\n distY = (xor(affectsX, affectsY) ? -distX : distX) / aspectRatio;\n } else {\n distX = (xor(affectsX, affectsY) ? -distY : distY) * aspectRatio;\n }\n } else {\n if (isHorizontal) {\n distY = distX / aspectRatio;\n affectsY = affectsX;\n } else {\n distX = distY * aspectRatio;\n affectsX = affectsY;\n }\n }\n }\n\n var x = affectsX ? startX + distX : startX;\n var y = affectsY ? startY + distY : startY;\n return {\n width: startWidth + (affectsX ? -distX : distX),\n height: startHeight + (affectsY ? -distY : distY),\n x: nodeOrigin[0] * distX * (!affectsX ? 1 : -1) + x,\n y: nodeOrigin[1] * distY * (!affectsY ? 1 : -1) + y\n };\n}\n\nvar initPrevValues = {\n width: 0,\n height: 0,\n x: 0,\n y: 0\n};\n\nvar initStartValues = _objectSpread(_objectSpread({}, initPrevValues), {}, {\n pointerX: 0,\n pointerY: 0,\n aspectRatio: 1\n});\n\nfunction nodeToParentExtent(node) {\n return [[0, 0], [node.measured.width, node.measured.height]];\n}\n\nfunction nodeToChildExtent(child, parent, nodeOrigin) {\n var _child$measured$width, _child$measured$heigh;\n\n var x = parent.position.x + child.position.x;\n var y = parent.position.y + child.position.y;\n var width = (_child$measured$width = child.measured.width) !== null && _child$measured$width !== void 0 ? _child$measured$width : 0;\n var height = (_child$measured$heigh = child.measured.height) !== null && _child$measured$heigh !== void 0 ? _child$measured$heigh : 0;\n var originOffsetX = nodeOrigin[0] * width;\n var originOffsetY = nodeOrigin[1] * height;\n return [[x - originOffsetX, y - originOffsetY], [x + width - originOffsetX, y + height - originOffsetY]];\n}\n\nfunction XYResizer(_ref72) {\n var domNode = _ref72.domNode,\n nodeId = _ref72.nodeId,\n getStoreItems = _ref72.getStoreItems,\n onChange = _ref72.onChange,\n onEnd = _ref72.onEnd;\n var selection = select(domNode);\n\n function update(_ref73) {\n var controlPosition = _ref73.controlPosition,\n boundaries = _ref73.boundaries,\n keepAspectRatio = _ref73.keepAspectRatio,\n onResizeStart = _ref73.onResizeStart,\n onResize = _ref73.onResize,\n onResizeEnd = _ref73.onResizeEnd,\n shouldResize = _ref73.shouldResize;\n\n var prevValues = _objectSpread({}, initPrevValues);\n\n var startValues = _objectSpread({}, initStartValues);\n\n var controlDirection = getControlDirection(controlPosition);\n var node = undefined;\n var childNodes = [];\n var parentNode = undefined; // Needed to fix expandParent\n\n var parentExtent = undefined;\n var childExtent = undefined;\n var dragHandler = drag().on('start', function (event) {\n var _node$measured$width5, _node$measured$height5, _node$position$x, _node$position$y;\n\n var _getStoreItems7 = getStoreItems(),\n nodeLookup = _getStoreItems7.nodeLookup,\n transform = _getStoreItems7.transform,\n snapGrid = _getStoreItems7.snapGrid,\n snapToGrid = _getStoreItems7.snapToGrid,\n nodeOrigin = _getStoreItems7.nodeOrigin;\n\n node = nodeLookup.get(nodeId);\n\n if (!node) {\n return;\n }\n\n var _getPointerPosition = getPointerPosition(event.sourceEvent, {\n transform: transform,\n snapGrid: snapGrid,\n snapToGrid: snapToGrid\n }),\n xSnapped = _getPointerPosition.xSnapped,\n ySnapped = _getPointerPosition.ySnapped;\n\n prevValues = {\n width: (_node$measured$width5 = node.measured.width) !== null && _node$measured$width5 !== void 0 ? _node$measured$width5 : 0,\n height: (_node$measured$height5 = node.measured.height) !== null && _node$measured$height5 !== void 0 ? _node$measured$height5 : 0,\n x: (_node$position$x = node.position.x) !== null && _node$position$x !== void 0 ? _node$position$x : 0,\n y: (_node$position$y = node.position.y) !== null && _node$position$y !== void 0 ? _node$position$y : 0\n };\n startValues = _objectSpread(_objectSpread({}, prevValues), {}, {\n pointerX: xSnapped,\n pointerY: ySnapped,\n aspectRatio: prevValues.width / prevValues.height\n });\n parentNode = undefined;\n\n if (node.parentId && (node.extent === 'parent' || node.expandParent)) {\n parentNode = nodeLookup.get(node.parentId);\n parentExtent = parentNode && node.extent === 'parent' ? nodeToParentExtent(parentNode) : undefined;\n } // Collect all child nodes to correct their relative positions when top/left changes\n // Determine largest minimal extent the parent node is allowed to resize to\n\n\n childNodes = [];\n childExtent = undefined;\n\n var _iterator15 = _createForOfIteratorHelper(nodeLookup),\n _step15;\n\n try {\n for (_iterator15.s(); !(_step15 = _iterator15.n()).done;) {\n var _step15$value = _slicedToArray(_step15.value, 2),\n childId = _step15$value[0],\n child = _step15$value[1];\n\n if (child.parentId === nodeId) {\n childNodes.push({\n id: childId,\n position: _objectSpread({}, child.position),\n extent: child.extent\n });\n\n if (child.extent === 'parent' || child.expandParent) {\n var _child$origin;\n\n var extent = nodeToChildExtent(child, node, (_child$origin = child.origin) !== null && _child$origin !== void 0 ? _child$origin : nodeOrigin);\n\n if (childExtent) {\n childExtent = [[Math.min(extent[0][0], childExtent[0][0]), Math.min(extent[0][1], childExtent[0][1])], [Math.max(extent[1][0], childExtent[1][0]), Math.max(extent[1][1], childExtent[1][1])]];\n } else {\n childExtent = extent;\n }\n }\n }\n }\n } catch (err) {\n _iterator15.e(err);\n } finally {\n _iterator15.f();\n }\n\n onResizeStart === null || onResizeStart === void 0 ? void 0 : onResizeStart(event, _objectSpread({}, prevValues));\n }).on('drag', function (event) {\n var _node$origin3;\n\n var _getStoreItems8 = getStoreItems(),\n transform = _getStoreItems8.transform,\n snapGrid = _getStoreItems8.snapGrid,\n snapToGrid = _getStoreItems8.snapToGrid,\n storeNodeOrigin = _getStoreItems8.nodeOrigin;\n\n var pointerPosition = getPointerPosition(event.sourceEvent, {\n transform: transform,\n snapGrid: snapGrid,\n snapToGrid: snapToGrid\n });\n var childChanges = [];\n\n if (!node) {\n return;\n }\n\n var _prevValues = prevValues,\n prevX = _prevValues.x,\n prevY = _prevValues.y,\n prevWidth = _prevValues.width,\n prevHeight = _prevValues.height;\n var change = {};\n var nodeOrigin = (_node$origin3 = node.origin) !== null && _node$origin3 !== void 0 ? _node$origin3 : storeNodeOrigin;\n\n var _getDimensionsAfterRe = getDimensionsAfterResize(startValues, controlDirection, pointerPosition, boundaries, keepAspectRatio, nodeOrigin, parentExtent, childExtent),\n width = _getDimensionsAfterRe.width,\n height = _getDimensionsAfterRe.height,\n x = _getDimensionsAfterRe.x,\n y = _getDimensionsAfterRe.y;\n\n var isWidthChange = width !== prevWidth;\n var isHeightChange = height !== prevHeight;\n var isXPosChange = x !== prevX && isWidthChange;\n var isYPosChange = y !== prevY && isHeightChange;\n\n if (!isXPosChange && !isYPosChange && !isWidthChange && !isHeightChange) {\n return;\n }\n\n if (isXPosChange || isYPosChange || nodeOrigin[0] === 1 || nodeOrigin[1] === 1) {\n change.x = isXPosChange ? x : prevValues.x;\n change.y = isYPosChange ? y : prevValues.y;\n prevValues.x = change.x;\n prevValues.y = change.y; // when top/left changes, correct the relative positions of child nodes\n // so that they stay in the same position\n\n if (childNodes.length > 0) {\n var xChange = x - prevX;\n var yChange = y - prevY;\n\n var _iterator16 = _createForOfIteratorHelper(childNodes),\n _step16;\n\n try {\n for (_iterator16.s(); !(_step16 = _iterator16.n()).done;) {\n var childNode = _step16.value;\n childNode.position = {\n x: childNode.position.x - xChange + nodeOrigin[0] * (width - prevWidth),\n y: childNode.position.y - yChange + nodeOrigin[1] * (height - prevHeight)\n };\n childChanges.push(childNode);\n }\n } catch (err) {\n _iterator16.e(err);\n } finally {\n _iterator16.f();\n }\n }\n }\n\n if (isWidthChange || isHeightChange) {\n change.width = isWidthChange ? width : prevValues.width;\n change.height = isHeightChange ? height : prevValues.height;\n prevValues.width = change.width;\n prevValues.height = change.height;\n } // Fix expandParent when resizing from top/left\n\n\n if (parentNode && node.expandParent) {\n var _change$width, _change$height;\n\n var xLimit = nodeOrigin[0] * ((_change$width = change.width) !== null && _change$width !== void 0 ? _change$width : 0);\n\n if (change.x && change.x < xLimit) {\n prevValues.x = xLimit;\n startValues.x = startValues.x - (change.x - xLimit);\n }\n\n var yLimit = nodeOrigin[1] * ((_change$height = change.height) !== null && _change$height !== void 0 ? _change$height : 0);\n\n if (change.y && change.y < yLimit) {\n prevValues.y = yLimit;\n startValues.y = startValues.y - (change.y - yLimit);\n }\n }\n\n var direction = getResizeDirection({\n width: prevValues.width,\n prevWidth: prevWidth,\n height: prevValues.height,\n prevHeight: prevHeight,\n affectsX: controlDirection.affectsX,\n affectsY: controlDirection.affectsY\n });\n\n var nextValues = _objectSpread(_objectSpread({}, prevValues), {}, {\n direction: direction\n });\n\n var callResize = shouldResize === null || shouldResize === void 0 ? void 0 : shouldResize(event, nextValues);\n\n if (callResize === false) {\n return;\n }\n\n onResize === null || onResize === void 0 ? void 0 : onResize(event, nextValues);\n onChange(change, childChanges);\n }).on('end', function (event) {\n onResizeEnd === null || onResizeEnd === void 0 ? void 0 : onResizeEnd(event, _objectSpread({}, prevValues));\n onEnd === null || onEnd === void 0 ? void 0 : onEnd();\n });\n selection.call(dragHandler);\n }\n\n function destroy() {\n selection.on('.drag', null);\n }\n\n return {\n update: update,\n destroy: destroy\n };\n}\n\nexport { ConnectionLineType, ConnectionMode, MarkerType, PanOnScrollMode, Position, ResizeControlVariant, SelectionMode, XYDrag, XYHandle, XYMinimap, XYPanZoom, XYResizer, XY_RESIZER_HANDLE_POSITIONS, XY_RESIZER_LINE_POSITIONS, addEdge, adoptUserNodes, areConnectionMapsEqual, boxToRect, calcAutoPan, calculateNodePosition, clamp, clampPosition, clampPositionToParent, createMarkerIds, devWarn, elementSelectionKeys, errorMessages, evaluateAbsolutePosition, fitView, getBezierEdgeCenter, getBezierPath, getBoundsOfBoxes, getBoundsOfRects, getConnectedEdges, getConnectionStatus, getDimensions, getEdgeCenter, getEdgePosition, getElementsToRemove, getElevatedEdgeZIndex, getEventPosition, getFitViewNodes, getHandleBounds, getHandlePosition, getHostForElement, getIncomers, getInternalNodesBounds, getMarkerId, getNodeDimensions, getNodePositionWithOrigin, getNodeToolbarTransform, getNodesBounds, getNodesInside, getOutgoers, getOverlappingArea, getPointerPosition, getSmoothStepPath, getStraightPath, getViewportForBounds, handleConnectionChange, handleExpandParent, infiniteExtent, initialConnection, isCoordinateExtent, isEdgeBase, isEdgeVisible, isInputDOMNode, isInternalNodeBase, isMacOs, isMouseEvent, isNodeBase, isNumeric, isRectObject, nodeHasDimensions, nodeToBox, nodeToRect, oppositePosition, panBy, pointToRendererPoint, reconnectEdge, rectToBox, rendererPointToPoint, shallowNodeData, snapPosition, updateAbsolutePositions, updateConnectionLookup, updateNodeInternals };"],"names":["_oppositePosition","_handleDirections","_excluded2","ownKeys","object","enumerableOnly","keys","Object","getOwnPropertySymbols","symbols","filter","sym","getOwnPropertyDescriptor","enumerable","push","apply","_objectSpread","target","i","arguments","length","source","forEach","key","getOwnPropertyDescriptors","defineProperties","defineProperty","_createForOfIteratorHelper","o","allowArrayLike","it","Symbol","iterator","Array","isArray","minLen","_arrayLikeToArray","n","prototype","toString","call","slice","constructor","name","from","test","_unsupportedIterableToArray","F","s","done","value","e","_e","f","TypeError","err","normalCompletion","didErr","step","next","_e2","return","arr","len","arr2","ConnectionMode","PanOnScrollMode","SelectionMode","errorMessages","error001","error002","error003","nodeType","concat","error004","error005","error006","error007","id","error009","type","error008","handleType","_ref","sourceHandle","targetHandle","error010","error011","edgeType","error012","error013","lib","undefined","infiniteExtent","Number","NEGATIVE_INFINITY","POSITIVE_INFINITY","elementSelectionKeys","ConnectionLineType","MarkerType","Position","initialConnection","inProgress","isValid","fromHandle","fromPosition","fromNode","to","toHandle","toPosition","toNode","oppositePosition","Left","Right","Top","Bottom","getConnectionStatus","isEdgeBase","element","isNodeBase","isInternalNodeBase","getNodePositionWithOrigin","node","_node$origin","nodeOrigin","_getNodeDimensions","getNodeDimensions","width","height","origin","offsetX","offsetY","x","position","y","getNodesBounds","nodes","params","nodeLookup","box","reduce","currBox","nodeOrId","isId","currentNode","get","nodeBox","nodeToBox","x2","y2","getBoundsOfBoxes","Infinity","boxToRect","getInternalNodesBounds","size","getNodesInside","rect","_step2","_ref2","_ref3","tx","ty","tScale","partially","excludeNonSelectableNodes","paneRect","pointToRendererPoint","visibleNodes","_iterator2","values","_ref4","_ref5","_measured$width","_ref6","_ref7","_measured$height","measured","_node$selectable","selectable","_node$hidden","hidden","initialWidth","initialHeight","overlappingArea","getOverlappingArea","nodeToRect","area","partiallyVisible","forceInitialRender","internals","handleBounds","isVisible","dragging","getConnectedEdges","edges","nodeIds","Set","add","edge","has","getFitViewNodes","options","fitViewNodes","Map","optionNodeIds","map","includeHiddenNodes","set","fitView","_x","_x2","_fitView","this","_callee4","_ref8","_options$minZoom","_options$maxZoom","_options$padding","panZoom","minZoom","maxZoom","bounds","viewport","_context4","prev","abrupt","Promise","resolve","getViewportForBounds","padding","setViewport","duration","stop","calculateNodePosition","_ref9","_node$origin2","nodeId","nextPosition","_ref9$nodeOrigin","nodeExtent","onError","parentNode","parentId","_ref10","positionAbsolute","parentX","parentY","extent","expandParent","isCoordinateExtent","parentWidth","parentHeight","clampPosition","getElementsToRemove","_x3","_getElementsToRemove","_callee5","_ref11","_ref11$nodesToRemove","nodesToRemove","_ref11$edgesToRemove","edgesToRemove","onBeforeDelete","matchingNodes","_iterator17","_step17","_loop","edgeIds","deletableEdges","connectedEdges","matchingEdges","_iterator18","_step18","_loop2","onBeforeDeleteResult","_context5","deletable","isIncluded","parentHit","find","t0","finish","sent","clamp","val","min","max","Math","_dimensions$width","_dimensions$height","dimensions","clampPositionToParent","childPosition","childDimensions","parent","_getNodeDimensions2","_parent$internals$pos","calcAutoPanVelocity","abs","calcAutoPan","pos","speed","distance","xMovement","yMovement","box1","box2","rectToBox","_ref12","_ref13","_ref15","_ref16","_node$measured$width","_node$measured","_ref17","_ref18","_node$measured$height","_node$measured2","_ref14","_ref20","_ref21","_node$measured$width2","_node$measured3","_ref22","_ref23","_node$measured$height2","_node$measured4","_ref19","getBoundsOfRects","rect1","rect2","rectA","rectB","xOverlap","yOverlap","ceil","isRectObject","obj","isNumeric","isNaN","isFinite","devWarn","message","snapPosition","snapGrid","round","_ref24","_ref25","_ref26","snapToGrid","rendererPointToPoint","_ref27","_ref28","_ref29","xZoom","yZoom","zoom","clampedZoom","isMacOs","_navigator","_navigator$userAgent","navigator","userAgent","indexOf","_ref30","_ref31","_node$measured$width3","_node$measured5","_ref32","_ref33","_node$measured$height3","_node$measured6","nodeHasDimensions","_ref34","_node$measured$width4","_node$measured7","_ref35","_node$measured$height4","_node$measured8","evaluateAbsolutePosition","nextParentId","_dimensions$width2","_dimensions$height2","getPointerPosition","event","_ref36","_ref36$snapGrid","_ref36$snapToGrid","transform","_getEventPosition","getEventPosition","pointerPos","_ref37","xSnapped","ySnapped","getDimensions","offsetWidth","offsetHeight","getHostForElement","_element$getRootNode","_window","getRootNode","window","document","inputTags","isInputDOMNode","_event$composedPath","_event$composedPath$c","composedPath","includes","nodeName","hasAttribute","closest","isMouseEvent","_event$touches","_event$touches2","_bounds$left","_bounds$top","isMouse","evtX","clientX","touches","evtY","clientY","left","top","getHandleBounds","nodeElement","nodeBounds","handles","querySelectorAll","handle","getBoundingClientRect","getAttribute","getBezierEdgeCenter","_ref38","sourceX","sourceY","targetX","targetY","sourceControlX","sourceControlY","centerX","targetControlX","centerY","targetControlY","calculateControlOffset","curvature","sqrt","getControlWithCurvature","_ref39","x1","y1","c","getBezierPath","_ref40","_ref40$sourcePosition","sourcePosition","_ref40$targetPosition","targetPosition","_ref40$curvature","_getControlWithCurvat","_getControlWithCurvat2","_getControlWithCurvat3","_getControlWithCurvat4","_getBezierEdgeCenter","_getBezierEdgeCenter2","labelX","labelY","getEdgeCenter","_ref41","xOffset","yOffset","getElevatedEdgeZIndex","_ref42","sourceNode","targetNode","_ref42$selected","selected","_ref42$zIndex","zIndex","_ref42$elevateOnSelec","elevateOnSelect","edgeOrConnectedNodeSelected","selectedZIndex","z","isEdgeVisible","_ref43","edgeBox","viewRect","getEdgeId","_ref44","addEdge","edgeParams","some","el","connectionExists","getStraightPath","_ref45","_getEdgeCenter","_getEdgeCenter2","handleDirections","a","b","pow","getPoints","_ref47","_ref47$sourcePosition","_ref47$targetPosition","center","offset","sourceDir","targetDir","sourceGapped","targetGapped","dir","_ref46","_ref46$sourcePosition","getDirection","dirAccessor","currDir","points","sourceGapOffset","targetGapOffset","_getEdgeCenter3","_getEdgeCenter4","defaultCenterX","defaultCenterY","defaultOffsetX","defaultOffsetY","_center$x","_center$y","verticalSplit","horizontalSplit","sourceTarget","targetSource","diff","gapOffset","dirAccessorOpposite","isSameDir","sourceGtTargetOppo","sourceLtTargetOppo","sourceGapPoint","targetGapPoint","getSmoothStepPath","_ref48","_ref48$sourcePosition","_ref48$targetPosition","_ref48$borderRadius","borderRadius","_ref48$offset","_getPoints","_getPoints2","res","p","bendSize","_xDir","_yDir","xDir","yDir","getBend","isNodeInitialized","_node$handles","getEdgePosition","_sourceHandleBounds$s","_targetHandleBounds$t","_targetHandleBounds$t2","_targetHandleBounds$s","_params$onError","sourceHandleBounds","toHandleBounds","targetHandleBounds","getHandle$1","connectionMode","Strict","getHandlePosition","_step3","_iterator3","_handle$width","_handle$height","_handle$x","_handle$y","_handle$position","fallbackPosition","_ref49","handleId","d","getMarkerId","marker","idPrefix","sort","join","createMarkerIds","_ref50","defaultColor","defaultMarkerStart","defaultMarkerEnd","ids","markers","markerStart","markerEnd","markerId","color","localeCompare","getNodeToolbarTransform","nodeRect","align","alignmentOffset","shift","defaultOptions","elevateNodesOnSelect","defaults","adoptUserNodesDefaultOptions","checkEquality","mergeObjects","base","incoming","result","updateAbsolutePositions","parentLookup","_step4","_options","_iterator4","updateChildNode","adoptUserNodes","tmpLookup","selectedNodeZ","clear","_step5","_iterator5","_internalNode","userNode","internalNode","_userNode$measured","_userNode$measured2","_internalNode2","positionWithOrigin","clampedPosition","calculateZ","_mergeObjects","childNodes","updateParentLookup","_calculateChildXYZ","childNode","_parentNode$internals2","_parentNode$internals","absolutePosition","childZ","parentZ","calculateChildXYZ","positionChanged","console","warn","handleExpandParent","children","_step6","changes","parentExpansions","_iterator6","_parentExpansions$get","_parentExpansions$get2","child","parentRect","expandedRect","_ref51","_parent$origin","_parentLookup$get","xChange","yChange","newWidth","newHeight","widthChange","heightChange","setAttributes","updateNodeInternals","updates","domNode","viewportNode","querySelector","updatedInternals","_step7","style","getComputedStyle","DOMMatrixReadOnly","m22","parentExpandChildren","_iterator7","update","dimensionChanged","force","parentExpandChanges","panBy","_x4","_panBy","_callee6","_ref52","delta","translateExtent","nextViewport","transformChanged","_context6","setViewportConstrained","k","updateConnectionLookup","connectionLookup","edgeLookup","_step8","_iterator8","_edge$sourceHandle","_edge$targetHandle","sourceKey","targetKey","prevSource","prevTarget","connection","edgeId","isParentSelected","hasSelector","selector","current","_current","matches","parentElement","getEventHandlerParams","_ref53","_dragItems$get","_step10","dragItems","_ref53$dragging","nodesFromDragItems","_iterator10","_nodeLookup$get","_step10$value","dragItem","_node","XYDrag","_ref54","onNodeMouseDown","getStoreItems","onDragStart","onDrag","onDragStop","lastPos","autoPanId","autoPanStarted","mousePosition","containerBounds","dragStarted","d3Selection","abortDrag","_ref55","noDragClassName","handleSelector","isSelectable","_ref55$nodeClickDista","nodeClickDistance","updateNodes","_ref56","dragEvent","_getStoreItems","onNodeDrag","onSelectionDrag","updateNodePositions","hasChange","nodesBox","_step11","_iterator11","_step11$value","adjustedNodeExtent","_positionAbsolute","_calculateNodePositio","_getEventHandlerParam","_getEventHandlerParam2","currentNodes","autoPan","_autoPan","_callee","_getStoreItems6","autoPanSpeed","_calcAutoPan","_calcAutoPan2","_lastPos$x2","_lastPos$y2","_context","requestAnimationFrame","startDrag","_nodeLookup$get2","_getStoreItems2","multiSelectionActive","nodesDraggable","selectNodesOnDrag","onNodeDragStart","onSelectionDragStart","unselectNodesAndEdges","sourceEvent","mousePos","_step9","_iterator9","_step9$value","draggable","_internalNode$measure","_internalNode$measure2","getDragItems","_getEventHandlerParam3","_getEventHandlerParam4","d3DragInstance","clickDistance","on","_getStoreItems3","nodeDragThreshold","_getStoreItems4","autoPanOnNodeDrag","_lastPos$x","_lastPos$y","cancelAnimationFrame","_getStoreItems5","onNodeDragStop","onSelectionDragStop","_getEventHandlerParam5","_getEventHandlerParam6","button","destroy","_d3Selection","getClosestHandle","connectionRadius","_step13","closestHandles","minDistance","closeNodes","_step12","_iterator12","getNodesWithinDistance","_iterator13","_node$internals$handl","_node$internals$handl2","_node$internals$handl3","_node$internals$handl4","_step14","_iterator14","_getHandlePosition","_distance2","_closestHandles$find","oppositeHandleType","getHandle","_node$internals$handl5","_node$internals$handl6","_node$internals$handl7","_node$internals$handl8","_node$internals$handl9","_ref57","withAbsolutePosition","h","getHandleType","edgeUpdaterType","handleDomNode","classList","contains","alwaysValid","isValidHandle","_ref59","fromNodeId","fromHandleId","fromType","doc","flowId","_ref59$isValidConnect","isValidConnection","isTarget","_getEventPosition3","handleBelow","elementFromPoint","handleToCheck","handleNodeId","connectable","connectableEnd","XYHandle","onPointerDown","_ref58","closestHandle","autoPanOnConnect","cancelConnection","onConnectStart","onConnect","onConnectEnd","_ref58$isValidConnect","onReconnectEnd","updateConnection","getTransform","getFromHandle","_getEventPosition2","clickedHandle","fromHandleInternal","fromNodeInternal","newConnection","previousConnection","addEventListener","onPointerMove","onPointerUp","_calcAutoPan3","_calcAutoPan4","isInsideConnectionRadius","isHandleValid","isConnectionValid","_previousConnection","finalConnectionState","removeEventListener","XYMinimap","_ref60","getViewScale","selection","_ref61","_ref61$zoomStep","zoomStep","_ref61$pannable","pannable","_ref61$zoomable","zoomable","_ref61$inversePan","inversePan","panStart","zoomAndPanHandler","_event$sourceEvent$cl","_event$sourceEvent$cl2","_event$sourceEvent$cl3","_event$sourceEvent$cl4","panCurrent","panDelta","moveScale","log","pinchDelta","deltaY","deltaMode","nextZoom","scaleTo","pointer","ResizeControlVariant","transformToViewport","viewportToTransform","_ref62","scale","isWrappedWithClass","className","isRightClickPan","panOnDrag","usedButton","getD3Transition","onEnd","hasDuration","transition","wheelDelta","factor","ctrlKey","XYPanZoom","_ref69","paneClickDistance","onPanZoom","onPanZoomStart","onPanZoomEnd","onDraggingChange","zoomPanValues","isZoomingOrPanning","usedRightMouseButton","prevViewport","mouseButton","timerId","panScrollTimeout","isPanScrolling","bbox","d3ZoomInstance","scaleExtent","d3ZoomHandler","d3DblClickZoomHandler","setTransform","_x5","_x6","_x7","_setViewportConstrained","_callee2","nextTransform","contrainedTransform","_context2","constrain","_setViewport","_callee3","_context3","_ref70","noWheelClassName","noPanClassName","onPaneContextMenu","userSelectionActive","panOnScroll","panOnScrollMode","panOnScrollSpeed","preventScrolling","zoomOnPinch","zoomOnScroll","zoomOnDoubleClick","zoomActivationKeyPressed","onTransformChange","wheelHandler","_ref63","d3Zoom","preventDefault","stopImmediatePropagation","currentZoom","property","point","_zoom","deltaNormalize","deltaX","Vertical","Horizontal","shiftKey","translateBy","internal","clearTimeout","setTimeout","createPanOnScrollHandler","_ref64","createZoomOnScrollHandler","passive","startHandler","_ref65","_event$sourceEvent","_event$sourceEvent2","_event$sourceEvent3","createPanZoomStartHandler","panZoomHandler","_ref66","_zoomPanValues$mouseB","_event$sourceEvent4","_event$sourceEvent5","sync","createPanZoomHandler","panZoomEndHandler","_ref67","_event$sourceEvent6","_zoomPanValues$mouseB2","eventViewport","createPanZoomEndHandler","_ref68","_event$touches3","zoomScroll","pinchZoom","buttonAllowed","createFilter","_x8","_x9","getViewport","scaleBy","setScaleExtent","setTranslateExtent","syncViewport","currentTransform","setClickDistance","validDistance","getLowerExtentClamp","lowerExtent","lowerBound","getUpperExtentClamp","upperExtent","upperBound","getSizeClamp","minSize","maxSize","xor","initPrevValues","initStartValues","pointerX","pointerY","aspectRatio","nodeToChildExtent","_child$measured$width","_child$measured$heigh","originOffsetX","originOffsetY","XYResizer","_ref72","onChange","_ref73","controlPosition","boundaries","keepAspectRatio","onResizeStart","onResize","onResizeEnd","shouldResize","prevValues","startValues","controlDirection","isHorizontal","isVertical","affectsX","affectsY","getControlDirection","parentExtent","childExtent","dragHandler","_node$measured$width5","_node$measured$height5","_node$position$x","_node$position$y","_getStoreItems7","_getPointerPosition","nodeToParentExtent","_step15","_iterator15","_step15$value","childId","_child$origin","_node$origin3","_getStoreItems8","storeNodeOrigin","pointerPosition","childChanges","_prevValues","prevX","prevY","prevWidth","prevHeight","change","_getDimensionsAfterRe","isDiagonal","minWidth","maxWidth","minHeight","maxHeight","startX","startY","startWidth","startHeight","distX","floor","distY","clampX","clampY","xExtentClamp","yExtentClamp","_xExtentClamp","_yExtentClamp","aspectHeightClamp","aspectExtentClamp","_aspectExtentClamp","aspectWidthClamp","_aspectExtentClamp2","_aspectExtentClamp3","getDimensionsAfterResize","isWidthChange","isHeightChange","isXPosChange","isYPosChange","_step16","_iterator16","_change$width","_change$height","xLimit","yLimit","direction","_ref71","deltaWidth","deltaHeight","getResizeDirection","nextValues"],"sourceRoot":""}