{"version":3,"file":"60c6f2fb-34f75d913c07f2d269d1.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 * Determines 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 };\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, node) {\n var nodeBox = nodeToBox(node, params.nodeOrigin);\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 clamps the passed extend by the node's width and height.\n * This is needed to prevent the node from being dragged outside of its extent.\n *\n * @param node\n * @param extent\n * @returns\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 clampNodeExtent(node, extent) {\n var _node$measured$width, _node$measured, _node$measured$height, _node$measured2;\n\n if (!extent || extent === 'parent') {\n return extent;\n }\n\n return [extent[0], [extent[1][0] - ((_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 : 0), extent[1][1] - ((_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 : 0)]];\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 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 currentExtent = clampNodeExtent(node, node.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 nodeWidth = node.measured.width;\n var nodeHeight = node.measured.height;\n var parentWidth = parentNode.measured.width;\n var parentHeight = parentNode.measured.height;\n\n if (nodeWidth && nodeHeight && parentWidth && parentHeight) {\n currentExtent = [[parentX, parentY], [parentX + parentWidth - nodeWidth, parentY + parentHeight - nodeHeight]];\n }\n }\n } else if (parentNode && isCoordinateExtent(node.extent)) {\n currentExtent = [[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(currentExtent) ? clampPosition(nextPosition, currentExtent) : nextPosition;\n return {\n position: {\n // TODO: is there a better way to do this?\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 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 return {\n x: clamp(position.x, extent[0][0], extent[1][0]),\n y: clamp(position.y, extent[0][1], extent[1][1])\n };\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$width2, _node$measured3, _ref17, _ref18, _node$measured$height2, _node$measured4;\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$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 && _ref16 !== void 0 ? _ref16 : node.initialWidth) !== null && _ref15 !== void 0 ? _ref15 : 0,\n height: (_ref17 = (_ref18 = (_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 && _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$width3, _node$measured5, _ref22, _ref23, _node$measured$height3, _node$measured6;\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$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 && _ref21 !== void 0 ? _ref21 : node.initialWidth) !== null && _ref20 !== void 0 ? _ref20 : 0),\n y2: y + ((_ref22 = (_ref23 = (_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 && _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$width4, _node$measured7, _ref32, _ref33, _node$measured$height4, _node$measured8;\n\n return {\n width: (_ref30 = (_ref31 = (_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 && _ref31 !== void 0 ? _ref31 : node.initialWidth) !== null && _ref30 !== void 0 ? _ref30 : 0,\n height: (_ref32 = (_ref33 = (_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 && _ref33 !== void 0 ? _ref33 : node.initialHeight) !== null && _ref32 !== void 0 ? _ref32 : 0\n };\n}\n\nfunction nodeHasDimensions(node) {\n var _ref34, _node$measured$width5, _node$measured9, _ref35, _node$measured$height5, _node$measured10;\n\n return ((_ref34 = (_node$measured$width5 = (_node$measured9 = node.measured) === null || _node$measured9 === void 0 ? void 0 : _node$measured9.width) !== null && _node$measured$width5 !== void 0 ? _node$measured$width5 : node.width) !== null && _ref34 !== void 0 ? _ref34 : node.initialWidth) !== undefined && ((_ref35 = (_node$measured$height5 = (_node$measured10 = node.measured) === null || _node$measured10 === void 0 ? void 0 : _node$measured10.height) !== null && _node$measured$height5 !== void 0 ? _node$measured$height5 : 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$width, _dimensions$height;\n\n var origin = parent.origin || nodeOrigin;\n positionAbsolute.x += parent.internals.positionAbsolute.x - ((_dimensions$width = dimensions.width) !== null && _dimensions$width !== void 0 ? _dimensions$width : 0) * origin[0];\n positionAbsolute.y += parent.internals.positionAbsolute.y - ((_dimensions$height = dimensions.height) !== null && _dimensions$height !== void 0 ? _dimensions$height : 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 elevateNodesOnSelect: true,\n defaults: {}\n};\n\nvar adoptUserNodesDefaultOptions = _objectSpread(_objectSpread({}, defaultOptions), {}, {\n checkEquality: true\n});\n\nfunction updateAbsolutePositions(nodeLookup, parentLookup, options) {\n var _options = _objectSpread(_objectSpread({}, 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 updateChildPosition(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 = _objectSpread(_objectSpread({}, adoptUserNodesDefaultOptions), options);\n\n var tmpLookup = new Map(nodeLookup);\n nodeLookup.clear();\n parentLookup.clear();\n var selectedNodeZ = options !== null && options !== void 0 && options.elevateNodesOnSelect ? 1000 : 0;\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 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: getNodePositionWithOrigin(userNode, _options.nodeOrigin),\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 updateChildPosition(internalNode, nodeLookup, parentLookup, options);\n }\n }\n } catch (err) {\n _iterator5.e(err);\n } finally {\n _iterator5.f();\n }\n}\n\nfunction updateChildPosition(node, nodeLookup, parentLookup, options) {\n var _options = _objectSpread(_objectSpread({}, defaultOptions), options);\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 } // update the parentLookup\n\n\n var childNodes = parentLookup.get(parentId);\n\n if (childNodes) {\n childNodes.set(node.id, node);\n } else {\n parentLookup.set(parentId, new Map([[node.id, node]]));\n }\n\n var selectedNodeZ = options !== null && options !== void 0 && options.elevateNodesOnSelect ? 1000 : 0;\n\n var _calculateChildXYZ = calculateChildXYZ(node, parentNode, _options.nodeOrigin, selectedNodeZ),\n x = _calculateChildXYZ.x,\n y = _calculateChildXYZ.y,\n z = _calculateChildXYZ.z;\n\n var currPosition = node.internals.positionAbsolute;\n var positionChanged = x !== currPosition.x || y !== currPosition.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 } : currPosition,\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, selectedNodeZ) {\n var _parentNode$internals;\n\n var position = getNodePositionWithOrigin(childNode, nodeOrigin);\n var childZ = calculateZ(childNode, selectedNodeZ);\n var parentZ = (_parentNode$internals = parentNode.internals.z) !== null && _parentNode$internals !== void 0 ? _parentNode$internals : 0;\n return {\n x: parentNode.internals.positionAbsolute.x + position.x,\n y: parentNode.internals.positionAbsolute.y + position.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) {\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 node.measured = dimensions;\n node.internals = _objectSpread(_objectSpread({}, node.internals), {}, {\n positionAbsolute: getNodePositionWithOrigin(node, nodeOrigin),\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 updateChildPosition(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) {\n var _node$internals$handl5, _ref57;\n\n var withAbsolutePosition = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : false;\n var node = nodeLookup.get(nodeId);\n\n if (!node) {\n return null;\n }\n\n var handles = (_node$internals$handl5 = node.internals.handleBounds) === null || _node$internals$handl5 === void 0 ? void 0 : _node$internals$handl5[handleType];\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);\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, 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 onTransformChange = _ref69.onTransformChange,\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\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$width6, _node$measured$height6, _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$width6 = node.measured.width) !== null && _node$measured$width6 !== void 0 ? _node$measured$width6 : 0,\n height: (_node$measured$height6 = node.measured.height) !== null && _node$measured$height6 !== void 0 ? _node$measured$height6 : 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, 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","getInternalNodesBounds","nodeLookup","params","size","box","Infinity","x2","y2","nodeBox","nodeToBox","getBoundsOfBoxes","boxToRect","getNodesInside","nodes","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","get","parentNode","parentId","_ref10","positionAbsolute","parentX","parentY","currentExtent","extent","_node$measured$width","_node$measured","_node$measured$height","_node$measured2","clampNodeExtent","expandParent","isCoordinateExtent","nodeWidth","nodeHeight","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","calcAutoPanVelocity","abs","calcAutoPan","pos","speed","distance","xMovement","yMovement","box1","box2","rectToBox","_ref12","_ref13","_ref15","_ref16","_node$measured$width2","_node$measured3","_ref17","_ref18","_node$measured$height2","_node$measured4","_ref14","_ref20","_ref21","_node$measured$width3","_node$measured5","_ref22","_ref23","_node$measured$height3","_node$measured6","_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$width4","_node$measured7","_ref32","_ref33","_node$measured$height4","_node$measured8","nodeHasDimensions","_ref34","_node$measured$width5","_node$measured9","_ref35","_node$measured$height5","_node$measured10","evaluateAbsolutePosition","dimensions","nextParentId","parent","_dimensions$width","_dimensions$height","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","reduce","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","updateAbsolutePositions","parentLookup","_step4","_options","_iterator4","updateChildPosition","adoptUserNodes","tmpLookup","clear","_step5","selectedNodeZ","_iterator5","_internalNode","_userNode$measured","_userNode$measured2","_internalNode2","userNode","internalNode","calculateZ","childNodes","_calculateChildXYZ","childNode","_parentNode$internals","childZ","parentZ","calculateChildXYZ","currPosition","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","currentNode","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","_ref57","withAbsolutePosition","h","getHandleType","edgeUpdaterType","handleDomNode","classList","contains","alwaysValid","isValidHandle","_ref59","fromNodeId","fromHandleId","fromType","doc","flowId","_ref59$isValidConnect","isValidConnection","isTarget","_getEventPosition3","handleBelow","elementFromPoint","handleToCheck","result","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","onTransformChange","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","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$width6","_node$measured$height6","_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":""}