(window["webpackJsonp"] = window["webpackJsonp"] || []).push([[0],{
/***/ "./node_modules/@ant-design/colors/dist/index.esm.js":
/*!***********************************************************!*\
!*** ./node_modules/@ant-design/colors/dist/index.esm.js ***!
\***********************************************************/
/*! exports provided: blue, cyan, geekblue, generate, gold, green, grey, lime, magenta, orange, presetDarkPalettes, presetPalettes, presetPrimaryColors, purple, red, volcano, yellow */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"blue\", function() { return blue; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"cyan\", function() { return cyan; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"geekblue\", function() { return geekblue; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"generate\", function() { return generate; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"gold\", function() { return gold; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"green\", function() { return green; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"grey\", function() { return grey; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"lime\", function() { return lime; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"magenta\", function() { return magenta; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"orange\", function() { return orange; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"presetDarkPalettes\", function() { return presetDarkPalettes; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"presetPalettes\", function() { return presetPalettes; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"presetPrimaryColors\", function() { return presetPrimaryColors; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"purple\", function() { return purple; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"red\", function() { return red; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"volcano\", function() { return volcano; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"yellow\", function() { return yellow; });\n/* harmony import */ var tinycolor2__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tinycolor2 */ \"./node_modules/tinycolor2/cjs/tinycolor.js\");\n/* harmony import */ var tinycolor2__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(tinycolor2__WEBPACK_IMPORTED_MODULE_0__);\n\n\nvar hueStep = 2; // 色相阶梯\n\nvar saturationStep = 0.16; // 饱和度阶梯,浅色部分\n\nvar saturationStep2 = 0.05; // 饱和度阶梯,深色部分\n\nvar brightnessStep1 = 0.05; // 亮度阶梯,浅色部分\n\nvar brightnessStep2 = 0.15; // 亮度阶梯,深色部分\n\nvar lightColorCount = 5; // 浅色数量,主色上\n\nvar darkColorCount = 4; // 深色数量,主色下\n// 暗色主题颜色映射关系表\n\nvar darkColorMap = [{\n index: 7,\n opacity: 0.15\n}, {\n index: 6,\n opacity: 0.25\n}, {\n index: 5,\n opacity: 0.3\n}, {\n index: 5,\n opacity: 0.45\n}, {\n index: 5,\n opacity: 0.65\n}, {\n index: 5,\n opacity: 0.85\n}, {\n index: 4,\n opacity: 0.9\n}, {\n index: 3,\n opacity: 0.95\n}, {\n index: 2,\n opacity: 0.97\n}, {\n index: 1,\n opacity: 0.98\n}];\n\nfunction getHue(hsv, i, light) {\n var hue; // 根据色相不同,色相转向不同\n\n if (Math.round(hsv.h) >= 60 && Math.round(hsv.h) <= 240) {\n hue = light ? Math.round(hsv.h) - hueStep * i : Math.round(hsv.h) + hueStep * i;\n } else {\n hue = light ? Math.round(hsv.h) + hueStep * i : Math.round(hsv.h) - hueStep * i;\n }\n\n if (hue < 0) {\n hue += 360;\n } else if (hue >= 360) {\n hue -= 360;\n }\n\n return hue;\n}\n\nfunction getSaturation(hsv, i, light) {\n // grey color don't change saturation\n if (hsv.h === 0 && hsv.s === 0) {\n return hsv.s;\n }\n\n var saturation;\n\n if (light) {\n saturation = hsv.s - saturationStep * i;\n } else if (i === darkColorCount) {\n saturation = hsv.s + saturationStep;\n } else {\n saturation = hsv.s + saturationStep2 * i;\n } // 边界值修正\n\n\n if (saturation > 1) {\n saturation = 1;\n } // 第一格的 s 限制在 0.06-0.1 之间\n\n\n if (light && i === lightColorCount && saturation > 0.1) {\n saturation = 0.1;\n }\n\n if (saturation < 0.06) {\n saturation = 0.06;\n }\n\n return Number(saturation.toFixed(2));\n}\n\nfunction getValue(hsv, i, light) {\n var value;\n\n if (light) {\n value = hsv.v + brightnessStep1 * i;\n } else {\n value = hsv.v - brightnessStep2 * i;\n }\n\n if (value > 1) {\n value = 1;\n }\n\n return Number(value.toFixed(2));\n}\n\nfunction generate(color) {\n var opts = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n var patterns = [];\n var pColor = tinycolor2__WEBPACK_IMPORTED_MODULE_0___default()(color);\n\n for (var i = lightColorCount; i > 0; i -= 1) {\n var hsv = pColor.toHsv();\n var colorString = tinycolor2__WEBPACK_IMPORTED_MODULE_0___default()({\n h: getHue(hsv, i, true),\n s: getSaturation(hsv, i, true),\n v: getValue(hsv, i, true)\n }).toHexString();\n patterns.push(colorString);\n }\n\n patterns.push(pColor.toHexString());\n\n for (var _i = 1; _i <= darkColorCount; _i += 1) {\n var _hsv = pColor.toHsv();\n\n var _colorString = tinycolor2__WEBPACK_IMPORTED_MODULE_0___default()({\n h: getHue(_hsv, _i),\n s: getSaturation(_hsv, _i),\n v: getValue(_hsv, _i)\n }).toHexString();\n\n patterns.push(_colorString);\n } // dark theme patterns\n\n\n if (opts.theme === 'dark') {\n return darkColorMap.map(function (_ref) {\n var index = _ref.index,\n opacity = _ref.opacity;\n var darkColorString = tinycolor2__WEBPACK_IMPORTED_MODULE_0___default.a.mix(opts.backgroundColor || '#141414', patterns[index], opacity * 100).toHexString();\n return darkColorString;\n });\n }\n\n return patterns;\n}\n\nvar presetPrimaryColors = {\n red: '#F5222D',\n volcano: '#FA541C',\n orange: '#FA8C16',\n gold: '#FAAD14',\n yellow: '#FADB14',\n lime: '#A0D911',\n green: '#52C41A',\n cyan: '#13C2C2',\n blue: '#1890FF',\n geekblue: '#2F54EB',\n purple: '#722ED1',\n magenta: '#EB2F96',\n grey: '#666666'\n};\nvar presetPalettes = {};\nvar presetDarkPalettes = {};\nObject.keys(presetPrimaryColors).forEach(function (key) {\n presetPalettes[key] = generate(presetPrimaryColors[key]);\n presetPalettes[key].primary = presetPalettes[key][5]; // dark presetPalettes\n\n presetDarkPalettes[key] = generate(presetPrimaryColors[key], {\n theme: 'dark',\n backgroundColor: '#141414'\n });\n presetDarkPalettes[key].primary = presetDarkPalettes[key][5];\n});\nvar red = presetPalettes.red;\nvar volcano = presetPalettes.volcano;\nvar gold = presetPalettes.gold;\nvar orange = presetPalettes.orange;\nvar yellow = presetPalettes.yellow;\nvar lime = presetPalettes.lime;\nvar green = presetPalettes.green;\nvar cyan = presetPalettes.cyan;\nvar blue = presetPalettes.blue;\nvar geekblue = presetPalettes.geekblue;\nvar purple = presetPalettes.purple;\nvar magenta = presetPalettes.magenta;\nvar grey = presetPalettes.grey;\n\n\n\n\n//# sourceURL=webpack:///./node_modules/@ant-design/colors/dist/index.esm.js?");
/***/ }),
/***/ "./node_modules/@antv/algorithm/es/adjacent-matrix.js":
/*!************************************************************!*\
!*** ./node_modules/@antv/algorithm/es/adjacent-matrix.js ***!
\************************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\nvar adjMatrix = function adjMatrix(graphData, directed) {\n var nodes = graphData.nodes,\n edges = graphData.edges;\n var matrix = [];\n // map node with index in data.nodes\n var nodeMap = {};\n if (!nodes) {\n throw new Error(\"invalid nodes data!\");\n }\n if (nodes) {\n nodes.forEach(function (node, i) {\n nodeMap[node.id] = i;\n var row = [];\n matrix.push(row);\n });\n }\n if (edges) {\n edges.forEach(function (edge) {\n var source = edge.source,\n target = edge.target;\n var sIndex = nodeMap[source];\n var tIndex = nodeMap[target];\n if (!sIndex && sIndex !== 0 || !tIndex && tIndex !== 0) return;\n matrix[sIndex][tIndex] = 1;\n if (!directed) {\n matrix[tIndex][sIndex] = 1;\n }\n });\n }\n return matrix;\n};\n/* harmony default export */ __webpack_exports__[\"default\"] = (adjMatrix);\n\n//# sourceURL=webpack:///./node_modules/@antv/algorithm/es/adjacent-matrix.js?");
/***/ }),
/***/ "./node_modules/@antv/algorithm/es/bfs.js":
/*!************************************************!*\
!*** ./node_modules/@antv/algorithm/es/bfs.js ***!
\************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _structs_queue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./structs/queue */ \"./node_modules/@antv/algorithm/es/structs/queue.js\");\n/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./util */ \"./node_modules/@antv/algorithm/es/util.js\");\n\n\n/**\n *\n * @param callbacks\n * allowTraversal: 确定 BFS 是否从顶点沿着边遍历到其邻居,默认情况下,同一个节点只能遍历一次\n * enterNode: 当 BFS 访问某个节点时调用\n * leaveNode: 当 BFS 访问访问结束某个节点时调用\n */\nfunction initCallbacks(callbacks) {\n if (callbacks === void 0) {\n callbacks = {};\n }\n var initiatedCallback = callbacks;\n var stubCallback = function stubCallback() {};\n var allowTraversalCallback = function () {\n var seen = {};\n return function (_a) {\n var next = _a.next;\n var id = next;\n if (!seen[id]) {\n seen[id] = true;\n return true;\n }\n return false;\n };\n }();\n initiatedCallback.allowTraversal = callbacks.allowTraversal || allowTraversalCallback;\n initiatedCallback.enter = callbacks.enter || stubCallback;\n initiatedCallback.leave = callbacks.leave || stubCallback;\n return initiatedCallback;\n}\n/**\n * 广度优先遍历图\n * @param graph Graph 图实例\n * @param startNode 开始遍历的节点\n * @param originalCallbacks 回调\n */\nvar breadthFirstSearch = function breadthFirstSearch(graphData, startNodeId, originalCallbacks, directed) {\n if (directed === void 0) {\n directed = true;\n }\n var callbacks = initCallbacks(originalCallbacks);\n var nodeQueue = new _structs_queue__WEBPACK_IMPORTED_MODULE_0__[\"default\"]();\n var _a = graphData.edges,\n edges = _a === void 0 ? [] : _a;\n // 初始化队列元素\n nodeQueue.enqueue(startNodeId);\n var previousNode = '';\n var _loop_1 = function _loop_1() {\n var currentNode = nodeQueue.dequeue();\n callbacks.enter({\n current: currentNode,\n previous: previousNode\n });\n // 将所有邻居添加到队列中以便遍历\n Object(_util__WEBPACK_IMPORTED_MODULE_1__[\"getNeighbors\"])(currentNode, edges, directed ? 'target' : undefined).forEach(function (nextNode) {\n if (callbacks.allowTraversal({\n previous: previousNode,\n current: currentNode,\n next: nextNode\n })) {\n nodeQueue.enqueue(nextNode);\n }\n });\n callbacks.leave({\n current: currentNode,\n previous: previousNode\n });\n // 下一次循环之前存储当前顶点\n previousNode = currentNode;\n };\n // 遍历队列中的所有顶点\n while (!nodeQueue.isEmpty()) {\n _loop_1();\n }\n};\n/* harmony default export */ __webpack_exports__[\"default\"] = (breadthFirstSearch);\n\n//# sourceURL=webpack:///./node_modules/@antv/algorithm/es/bfs.js?");
/***/ }),
/***/ "./node_modules/@antv/algorithm/es/connected-component.js":
/*!****************************************************************!*\
!*** ./node_modules/@antv/algorithm/es/connected-component.js ***!
\****************************************************************/
/*! exports provided: detectConnectedComponents, detectStrongConnectComponents, default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"detectConnectedComponents\", function() { return detectConnectedComponents; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"detectStrongConnectComponents\", function() { return detectStrongConnectComponents; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return getConnectedComponents; });\n/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./util */ \"./node_modules/@antv/algorithm/es/util.js\");\n\n/**\n * Generate all connected components for an undirected graph\n * @param graph\n */\nvar detectConnectedComponents = function detectConnectedComponents(graphData) {\n var _a = graphData.nodes,\n nodes = _a === void 0 ? [] : _a,\n _b = graphData.edges,\n edges = _b === void 0 ? [] : _b;\n var allComponents = [];\n var visited = {};\n var nodeStack = [];\n var getComponent = function getComponent(node) {\n nodeStack.push(node);\n visited[node.id] = true;\n var neighbors = Object(_util__WEBPACK_IMPORTED_MODULE_0__[\"getNeighbors\"])(node.id, edges);\n var _loop_1 = function _loop_1(i) {\n var neighbor = neighbors[i];\n if (!visited[neighbor]) {\n var targetNode = nodes.filter(function (node) {\n return node.id === neighbor;\n });\n if (targetNode.length > 0) {\n getComponent(targetNode[0]);\n }\n }\n };\n for (var i = 0; i < neighbors.length; ++i) {\n _loop_1(i);\n }\n };\n for (var i = 0; i < nodes.length; i++) {\n var node = nodes[i];\n if (!visited[node.id]) {\n // 对于无向图进行dfs遍历,每一次调用后都得到一个连通分量\n getComponent(node);\n var component = [];\n while (nodeStack.length > 0) {\n component.push(nodeStack.pop());\n }\n allComponents.push(component);\n }\n }\n return allComponents;\n};\n/**\n * Tarjan's Algorithm 复杂度 O(|V|+|E|)\n * For directed graph only\n * a directed graph is said to be strongly connected if \"every vertex is reachable from every other vertex\".\n * refer: http://en.wikipedia.org/wiki/Tarjan%27s_strongly_connected_components_algorithm\n * @param graph\n * @return a list of strongly connected components\n */\nvar detectStrongConnectComponents = function detectStrongConnectComponents(graphData) {\n var _a = graphData.nodes,\n nodes = _a === void 0 ? [] : _a,\n _b = graphData.edges,\n edges = _b === void 0 ? [] : _b;\n var nodeStack = [];\n var inStack = {}; // 辅助判断是否已经在stack中,减少查找开销\n var indices = {};\n var lowLink = {};\n var allComponents = [];\n var index = 0;\n var getComponent = function getComponent(node) {\n // Set the depth index for v to the smallest unused index\n indices[node.id] = index;\n lowLink[node.id] = index;\n index += 1;\n nodeStack.push(node);\n inStack[node.id] = true;\n // 考虑每个邻接点\n var neighbors = Object(_util__WEBPACK_IMPORTED_MODULE_0__[\"getNeighbors\"])(node.id, edges, 'target').filter(function (n) {\n return nodes.map(function (node) {\n return node.id;\n }).indexOf(n) > -1;\n });\n var _loop_2 = function _loop_2(i) {\n var targetNodeID = neighbors[i];\n if (!indices[targetNodeID] && indices[targetNodeID] !== 0) {\n var targetNode = nodes.filter(function (node) {\n return node.id === targetNodeID;\n });\n if (targetNode.length > 0) {\n getComponent(targetNode[0]);\n }\n // tree edge\n lowLink[node.id] = Math.min(lowLink[node.id], lowLink[targetNodeID]);\n } else if (inStack[targetNodeID]) {\n // back edge, target node is in the current SCC\n lowLink[node.id] = Math.min(lowLink[node.id], indices[targetNodeID]);\n }\n };\n for (var i = 0; i < neighbors.length; i++) {\n _loop_2(i);\n }\n // If node is a root node, generate an SCC\n if (lowLink[node.id] === indices[node.id]) {\n var component = [];\n while (nodeStack.length > 0) {\n var tmpNode = nodeStack.pop();\n inStack[tmpNode.id] = false;\n component.push(tmpNode);\n if (tmpNode === node) break;\n }\n if (component.length > 0) {\n allComponents.push(component);\n }\n }\n };\n for (var _i = 0, nodes_1 = nodes; _i < nodes_1.length; _i++) {\n var node = nodes_1[_i];\n if (!indices[node.id] && indices[node.id] !== 0) {\n getComponent(node);\n }\n }\n return allComponents;\n};\nfunction getConnectedComponents(graphData, directed) {\n if (directed) return detectStrongConnectComponents(graphData);\n return detectConnectedComponents(graphData);\n}\n\n//# sourceURL=webpack:///./node_modules/@antv/algorithm/es/connected-component.js?");
/***/ }),
/***/ "./node_modules/@antv/algorithm/es/constants/time.js":
/*!***********************************************************!*\
!*** ./node_modules/@antv/algorithm/es/constants/time.js ***!
\***********************************************************/
/*! exports provided: secondReg, dateReg */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"secondReg\", function() { return secondReg; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"dateReg\", function() { return dateReg; });\nvar secondReg = /^(\\d{1,4})(-|\\/)(\\d{1,2})\\2(\\d{1,2})$/;\nvar dateReg = /^(\\d{1,4})(-|\\/)(\\d{1,2})\\2(\\d{1,2}) (\\d{1,2}):(\\d{1,2}):(\\d{1,2})$/;\n\n//# sourceURL=webpack:///./node_modules/@antv/algorithm/es/constants/time.js?");
/***/ }),
/***/ "./node_modules/@antv/algorithm/es/cosine-similarity.js":
/*!**************************************************************!*\
!*** ./node_modules/@antv/algorithm/es/cosine-similarity.js ***!
\**************************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _utils_vector__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./utils/vector */ \"./node_modules/@antv/algorithm/es/utils/vector.js\");\n\n/**\n * cosine-similarity算法 计算余弦相似度\n * @param item 元素\n * @param targetItem 目标元素\n */\nvar cosineSimilarity = function cosineSimilarity(item, targetItem) {\n // 目标元素向量\n var targetItemVector = new _utils_vector__WEBPACK_IMPORTED_MODULE_0__[\"default\"](targetItem);\n // 目标元素向量的模长\n var targetNodeNorm2 = targetItemVector.norm2();\n // 元素向量\n var itemVector = new _utils_vector__WEBPACK_IMPORTED_MODULE_0__[\"default\"](item);\n // 元素向量的模长\n var itemNorm2 = itemVector.norm2();\n // 计算元素向量和目标元素向量的点积\n var dot = targetItemVector.dot(itemVector);\n var norm2Product = targetNodeNorm2 * itemNorm2;\n // 计算元素向量和目标元素向量的余弦相似度\n var cosineSimilarity = norm2Product ? dot / norm2Product : 0;\n return cosineSimilarity;\n};\n/* harmony default export */ __webpack_exports__[\"default\"] = (cosineSimilarity);\n\n//# sourceURL=webpack:///./node_modules/@antv/algorithm/es/cosine-similarity.js?");
/***/ }),
/***/ "./node_modules/@antv/algorithm/es/degree.js":
/*!***************************************************!*\
!*** ./node_modules/@antv/algorithm/es/degree.js ***!
\***************************************************/
/*! exports provided: default, getInDegree, getOutDegree */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"getInDegree\", function() { return getInDegree; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"getOutDegree\", function() { return getOutDegree; });\nvar degree = function degree(graphData) {\n var degrees = {};\n var _a = graphData.nodes,\n nodes = _a === void 0 ? [] : _a,\n _b = graphData.edges,\n edges = _b === void 0 ? [] : _b;\n nodes.forEach(function (node) {\n degrees[node.id] = {\n degree: 0,\n inDegree: 0,\n outDegree: 0\n };\n });\n edges.forEach(function (edge) {\n degrees[edge.source].degree++;\n degrees[edge.source].outDegree++;\n degrees[edge.target].degree++;\n degrees[edge.target].inDegree++;\n });\n return degrees;\n};\n/* harmony default export */ __webpack_exports__[\"default\"] = (degree);\n/**\n * 获取指定节点的入度\n * @param graphData 图数据\n * @param nodeId 节点ID\n */\nvar getInDegree = function getInDegree(graphData, nodeId) {\n var nodeDegree = degree(graphData);\n if (nodeDegree[nodeId]) {\n return degree(graphData)[nodeId].inDegree;\n }\n return 0;\n};\n/**\n * 获取指定节点的出度\n * @param graphData 图数据\n * @param nodeId 节点ID\n */\nvar getOutDegree = function getOutDegree(graphData, nodeId) {\n var nodeDegree = degree(graphData);\n if (nodeDegree[nodeId]) {\n return degree(graphData)[nodeId].outDegree;\n }\n return 0;\n};\n\n//# sourceURL=webpack:///./node_modules/@antv/algorithm/es/degree.js?");
/***/ }),
/***/ "./node_modules/@antv/algorithm/es/detect-cycle.js":
/*!*********************************************************!*\
!*** ./node_modules/@antv/algorithm/es/detect-cycle.js ***!
\*********************************************************/
/*! exports provided: detectAllUndirectedCycle, detectAllDirectedCycle, detectAllCycles, default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"detectAllUndirectedCycle\", function() { return detectAllUndirectedCycle; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"detectAllDirectedCycle\", function() { return detectAllDirectedCycle; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"detectAllCycles\", function() { return detectAllCycles; });\n/* harmony import */ var _dfs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./dfs */ \"./node_modules/@antv/algorithm/es/dfs.js\");\n/* harmony import */ var _connected_component__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./connected-component */ \"./node_modules/@antv/algorithm/es/connected-component.js\");\n/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./util */ \"./node_modules/@antv/algorithm/es/util.js\");\n\n\n\nvar detectDirectedCycle = function detectDirectedCycle(graphData) {\n var cycle = null;\n var _a = graphData.nodes,\n nodes = _a === void 0 ? [] : _a;\n var dfsParentMap = {};\n // 所有没有被访问的节点集合\n var unvisitedSet = {};\n // 正在被访问的节点集合\n var visitingSet = {};\n // 所有已经被访问过的节点集合\n var visitedSet = {};\n // 初始化 unvisitedSet\n nodes.forEach(function (node) {\n unvisitedSet[node.id] = node;\n });\n var callbacks = {\n enter: function enter(_a) {\n var currentNode = _a.current,\n previousNode = _a.previous;\n if (visitingSet[currentNode]) {\n // 如果当前节点正在访问中,则说明检测到环路了\n cycle = {};\n var currentCycleNode = currentNode;\n var previousCycleNode = previousNode;\n while (previousCycleNode !== currentNode) {\n cycle[currentCycleNode] = previousCycleNode;\n currentCycleNode = previousCycleNode;\n previousCycleNode = dfsParentMap[previousCycleNode];\n }\n cycle[currentCycleNode] = previousCycleNode;\n } else {\n // 如果不存在正在访问集合中,则将其放入正在访问集合,并从未访问集合中删除\n visitingSet[currentNode] = currentNode;\n delete unvisitedSet[currentNode];\n // 更新 DSF parents 列表\n dfsParentMap[currentNode] = previousNode;\n }\n },\n leave: function leave(_a) {\n var currentNode = _a.current;\n // 如果所有的节点的子节点都已经访问过了,则从正在访问集合中删除掉,并将其移入到已访问集合中,\n // 同时也意味着当前节点的所有邻居节点都被访问过了\n visitedSet[currentNode] = currentNode;\n delete visitingSet[currentNode];\n },\n allowTraversal: function allowTraversal(_a) {\n var nextNode = _a.next;\n // 如果检测到环路则需要终止所有进一步的遍历,否则会导致无限循环遍历\n if (cycle) {\n return false;\n }\n // 仅允许遍历没有访问的节点,visitedSet 中的都已经访问过了\n return !visitedSet[nextNode];\n }\n };\n // 开始遍历节点\n while (Object.keys(unvisitedSet).length) {\n // 从第一个节点开始进行 DFS 遍历\n var firsetUnVisitedKey = Object.keys(unvisitedSet)[0];\n Object(_dfs__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(graphData, firsetUnVisitedKey, callbacks);\n }\n return cycle;\n};\n/**\n * 检测无向图中的所有Base cycles\n * refer: https://www.codeproject.com/Articles/1158232/Enumerating-All-Cycles-in-an-Undirected-Graph\n * @param graph\n * @param nodeIds 节点 ID 的数组\n * @param include 包含或排除指定的节点\n * @return [{[key: string]: INode}] 返回一组base cycles\n */\nvar detectAllUndirectedCycle = function detectAllUndirectedCycle(graphData, nodeIds, include) {\n var _a, _b;\n if (include === void 0) {\n include = true;\n }\n var allCycles = [];\n var components = Object(_connected_component__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(graphData, false);\n // loop through all connected components\n for (var _i = 0, components_1 = components; _i < components_1.length; _i++) {\n var component = components_1[_i];\n if (!component.length) continue;\n var root = component[0];\n var rootId = root.id;\n var stack = [root];\n var parent_1 = (_a = {}, _a[rootId] = root, _a);\n var used = (_b = {}, _b[rootId] = new Set(), _b);\n // walk a spanning tree to find cycles\n while (stack.length > 0) {\n var curNode = stack.pop();\n var curNodeId = curNode.id;\n var neighbors = Object(_util__WEBPACK_IMPORTED_MODULE_2__[\"getNeighbors\"])(curNodeId, graphData.edges);\n var _loop_1 = function _loop_1(i) {\n var _c;\n var neighborId = neighbors[i];\n var neighbor = graphData.nodes.find(function (node) {\n return node.id === neighborId;\n });\n // const neighborId = neighbor.get('id');\n if (neighborId === curNodeId) {\n // 自环\n allCycles.push((_c = {}, _c[neighborId] = curNode, _c));\n } else if (!(neighborId in used)) {\n // visit a new node\n parent_1[neighborId] = curNode;\n stack.push(neighbor);\n used[neighborId] = new Set([curNode]);\n } else if (!used[curNodeId].has(neighbor)) {\n // a cycle found\n var cycleValid = true;\n var cyclePath = [neighbor, curNode];\n var p = parent_1[curNodeId];\n while (used[neighborId].size && !used[neighborId].has(p)) {\n cyclePath.push(p);\n if (p === parent_1[p.id]) break;else p = parent_1[p.id];\n }\n cyclePath.push(p);\n if (nodeIds && include) {\n // 如果有指定包含的节点\n cycleValid = false;\n if (cyclePath.findIndex(function (node) {\n return nodeIds.indexOf(node.id) > -1;\n }) > -1) {\n cycleValid = true;\n }\n } else if (nodeIds && !include) {\n // 如果有指定不包含的节点\n if (cyclePath.findIndex(function (node) {\n return nodeIds.indexOf(node.id) > -1;\n }) > -1) {\n cycleValid = false;\n }\n }\n // 把 node list 形式转换为 cycle 的格式\n if (cycleValid) {\n var cycle = {};\n for (var index = 1; index < cyclePath.length; index += 1) {\n cycle[cyclePath[index - 1].id] = cyclePath[index];\n }\n if (cyclePath.length) {\n cycle[cyclePath[cyclePath.length - 1].id] = cyclePath[0];\n }\n allCycles.push(cycle);\n }\n used[neighborId].add(curNode);\n }\n };\n for (var i = 0; i < neighbors.length; i += 1) {\n _loop_1(i);\n }\n }\n }\n return allCycles;\n};\n/**\n * Johnson's algorithm, 时间复杂度 O((V + E)(C + 1))$ and space bounded by O(V + E)\n * refer: https://www.cs.tufts.edu/comp/150GA/homeworks/hw1/Johnson%2075.PDF\n * refer: https://networkx.github.io/documentation/stable/_modules/networkx/algorithms/cycles.html#simple_cycles\n * @param graph\n * @param nodeIds 节点 ID 的数组\n * @param include 包含或排除指定的节点\n * @return [{[key: string]: INode}] 返回所有的 simple cycles\n */\nvar detectAllDirectedCycle = function detectAllDirectedCycle(graphData, nodeIds, include) {\n if (include === void 0) {\n include = true;\n }\n var path = []; // stack of nodes in current path\n var blocked = new Set();\n var B = []; // remember portions of the graph that yield no elementary circuit\n var allCycles = [];\n var idx2Node = {};\n var node2Idx = {};\n // 辅助函数: unblock all blocked nodes\n var unblock = function unblock(thisNode) {\n var stack = [thisNode];\n while (stack.length > 0) {\n var node = stack.pop();\n if (blocked.has(node)) {\n blocked.delete(node);\n B[node.id].forEach(function (n) {\n stack.push(n);\n });\n B[node.id].clear();\n }\n }\n };\n var circuit = function circuit(node, start, adjList) {\n var closed = false; // whether a path is closed\n if (nodeIds && include === false && nodeIds.indexOf(node.id) > -1) return closed;\n path.push(node);\n blocked.add(node);\n var neighbors = adjList[node.id];\n for (var i = 0; i < neighbors.length; i += 1) {\n var neighbor = idx2Node[neighbors[i]];\n if (neighbor === start) {\n var cycle = {};\n for (var index = 1; index < path.length; index += 1) {\n cycle[path[index - 1].id] = path[index];\n }\n if (path.length) {\n cycle[path[path.length - 1].id] = path[0];\n }\n allCycles.push(cycle);\n closed = true;\n } else if (!blocked.has(neighbor)) {\n if (circuit(neighbor, start, adjList)) {\n closed = true;\n }\n }\n }\n if (closed) {\n unblock(node);\n } else {\n for (var i = 0; i < neighbors.length; i += 1) {\n var neighbor = idx2Node[neighbors[i]];\n if (!B[neighbor.id].has(node)) {\n B[neighbor.id].add(node);\n }\n }\n }\n path.pop();\n return closed;\n };\n var _a = graphData.nodes,\n nodes = _a === void 0 ? [] : _a;\n // Johnson's algorithm 要求给节点赋顺序,先按节点在数组中的顺序\n for (var i = 0; i < nodes.length; i += 1) {\n var node = nodes[i];\n var nodeId = node.id;\n node2Idx[nodeId] = i;\n idx2Node[i] = node;\n }\n // 如果有指定包含的节点,则把指定节点排序在前,以便提早结束搜索\n if (nodeIds && include) {\n var _loop_2 = function _loop_2(i) {\n var nodeId = nodeIds[i];\n node2Idx[nodes[i].id] = node2Idx[nodeId];\n node2Idx[nodeId] = 0;\n idx2Node[0] = nodes.find(function (node) {\n return node.id === nodeId;\n });\n idx2Node[node2Idx[nodes[i].id]] = nodes[i];\n };\n for (var i = 0; i < nodeIds.length; i++) {\n _loop_2(i);\n }\n }\n // 返回 节点顺序 >= nodeOrder 的强连通分量的adjList\n var getMinComponentAdj = function getMinComponentAdj(components) {\n var _a;\n var minCompIdx;\n var minIdx = Infinity;\n // Find least component and the lowest node\n for (var i = 0; i < components.length; i += 1) {\n var comp = components[i];\n for (var j = 0; j < comp.length; j++) {\n var nodeIdx_1 = node2Idx[comp[j].id];\n if (nodeIdx_1 < minIdx) {\n minIdx = nodeIdx_1;\n minCompIdx = i;\n }\n }\n }\n var component = components[minCompIdx];\n var adjList = [];\n for (var i = 0; i < component.length; i += 1) {\n var node = component[i];\n adjList[node.id] = [];\n for (var _i = 0, _b = Object(_util__WEBPACK_IMPORTED_MODULE_2__[\"getNeighbors\"])(node.id, graphData.edges, 'target').filter(function (n) {\n return component.map(function (c) {\n return c.id;\n }).indexOf(n) > -1;\n }); _i < _b.length; _i++) {\n var neighbor = _b[_i];\n // 对自环情况 (点连向自身) 特殊处理:记录自环,但不加入adjList\n if (neighbor === node.id && !(include === false && nodeIds.indexOf(node.id) > -1)) {\n allCycles.push((_a = {}, _a[node.id] = node, _a));\n } else {\n adjList[node.id].push(node2Idx[neighbor]);\n }\n }\n }\n return {\n component: component,\n adjList: adjList,\n minIdx: minIdx\n };\n };\n var nodeIdx = 0;\n while (nodeIdx < nodes.length) {\n var subgraphNodes = nodes.filter(function (n) {\n return node2Idx[n.id] >= nodeIdx;\n });\n var sccs = Object(_connected_component__WEBPACK_IMPORTED_MODULE_1__[\"detectStrongConnectComponents\"])({\n nodes: subgraphNodes,\n edges: graphData.edges\n }).filter(function (component) {\n return component.length > 1;\n });\n if (sccs.length === 0) break;\n var scc = getMinComponentAdj(sccs);\n var minIdx = scc.minIdx,\n adjList = scc.adjList,\n component = scc.component;\n if (component.length > 1) {\n component.forEach(function (node) {\n B[node.id] = new Set();\n });\n var startNode = idx2Node[minIdx];\n // startNode 不在指定要包含的节点中,提前结束搜索\n if (nodeIds && include && nodeIds.indexOf(startNode.id) === -1) return allCycles;\n circuit(startNode, startNode, adjList);\n nodeIdx = minIdx + 1;\n } else {\n break;\n }\n }\n return allCycles;\n};\n/**\n * 查找图中所有满足要求的圈\n * @param graph\n * @param directed 是否为有向图\n * @param nodeIds 节点 ID 的数组,若不指定,则返回图中所有的圈\n * @param include 包含或排除指定的节点\n * @return [{[key: string]: Node}] 包含所有环的数组,每个环用一个Object表示,其中key为节点id,value为该节点在环中指向的下一个节点\n */\nvar detectAllCycles = function detectAllCycles(graphData, directed, nodeIds, include) {\n if (include === void 0) {\n include = true;\n }\n if (directed) return detectAllDirectedCycle(graphData, nodeIds, include);\n return detectAllUndirectedCycle(graphData, nodeIds, include);\n};\n/* harmony default export */ __webpack_exports__[\"default\"] = (detectDirectedCycle);\n\n//# sourceURL=webpack:///./node_modules/@antv/algorithm/es/detect-cycle.js?");
/***/ }),
/***/ "./node_modules/@antv/algorithm/es/dfs.js":
/*!************************************************!*\
!*** ./node_modules/@antv/algorithm/es/dfs.js ***!
\************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return depthFirstSearch; });\n/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./util */ \"./node_modules/@antv/algorithm/es/util.js\");\n\nfunction initCallbacks(callbacks) {\n if (callbacks === void 0) {\n callbacks = {};\n }\n var initiatedCallback = callbacks;\n var stubCallback = function stubCallback() {};\n var allowTraversalCallback = function () {\n var seen = {};\n return function (_a) {\n var next = _a.next;\n if (!seen[next]) {\n seen[next] = true;\n return true;\n }\n return false;\n };\n }();\n initiatedCallback.allowTraversal = callbacks.allowTraversal || allowTraversalCallback;\n initiatedCallback.enter = callbacks.enter || stubCallback;\n initiatedCallback.leave = callbacks.leave || stubCallback;\n return initiatedCallback;\n}\n/**\n * @param {Graph} graph\n * @param {GraphNode} currentNode\n * @param {GraphNode} previousNode\n * @param {Callbacks} callbacks\n */\nfunction depthFirstSearchRecursive(graphData, currentNode, previousNode, callbacks, directed) {\n if (directed === void 0) {\n directed = true;\n }\n callbacks.enter({\n current: currentNode,\n previous: previousNode\n });\n var _a = graphData.edges,\n edges = _a === void 0 ? [] : _a;\n Object(_util__WEBPACK_IMPORTED_MODULE_0__[\"getNeighbors\"])(currentNode, edges, directed ? 'target' : undefined).forEach(function (nextNode) {\n if (callbacks.allowTraversal({\n previous: previousNode,\n current: currentNode,\n next: nextNode\n })) {\n depthFirstSearchRecursive(graphData, nextNode, currentNode, callbacks, directed);\n }\n });\n callbacks.leave({\n current: currentNode,\n previous: previousNode\n });\n}\n/**\n * 深度优先遍历图\n * @param data GraphData 图数据\n * @param startNodeId 开始遍历的节点的 ID\n * @param originalCallbacks 回调\n */\nfunction depthFirstSearch(graphData, startNodeId, callbacks, directed) {\n if (directed === void 0) {\n directed = true;\n }\n depthFirstSearchRecursive(graphData, startNodeId, '', initCallbacks(callbacks), directed);\n}\n\n//# sourceURL=webpack:///./node_modules/@antv/algorithm/es/dfs.js?");
/***/ }),
/***/ "./node_modules/@antv/algorithm/es/dijkstra.js":
/*!*****************************************************!*\
!*** ./node_modules/@antv/algorithm/es/dijkstra.js ***!
\*****************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tslib */ \"./node_modules/tslib/tslib.es6.js\");\n/* harmony import */ var _antv_util__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @antv/util */ \"./node_modules/@antv/util/esm/index.js\");\n/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./util */ \"./node_modules/@antv/algorithm/es/util.js\");\n\n\n\nvar minVertex = function minVertex(D, nodes, marks) {\n // 找出最小的点\n var minDis = Infinity;\n var minNode;\n for (var i = 0; i < nodes.length; i++) {\n var nodeId = nodes[i].id;\n if (!marks[nodeId] && D[nodeId] <= minDis) {\n minDis = D[nodeId];\n minNode = nodes[i];\n }\n }\n return minNode;\n};\nvar dijkstra = function dijkstra(graphData, source, directed, weightPropertyName) {\n var _a = graphData.nodes,\n nodes = _a === void 0 ? [] : _a,\n _b = graphData.edges,\n edges = _b === void 0 ? [] : _b;\n var nodeIds = [];\n var marks = {};\n var D = {};\n var prevs = {}; // key: 顶点, value: 顶点的前驱点数组(可能有多条等长的最短路径)\n nodes.forEach(function (node, i) {\n var id = node.id;\n nodeIds.push(id);\n D[id] = Infinity;\n if (id === source) D[id] = 0;\n });\n var nodeNum = nodes.length;\n var _loop_1 = function _loop_1(i) {\n // Process the vertices\n var minNode = minVertex(D, nodes, marks);\n var minNodeId = minNode.id;\n marks[minNodeId] = true;\n if (D[minNodeId] === Infinity) return \"continue\"; // Unreachable vertices cannot be the intermediate point\n var relatedEdges = [];\n if (directed) relatedEdges = Object(_util__WEBPACK_IMPORTED_MODULE_2__[\"getOutEdgesNodeId\"])(minNodeId, edges);else relatedEdges = Object(_util__WEBPACK_IMPORTED_MODULE_2__[\"getEdgesByNodeId\"])(minNodeId, edges);\n relatedEdges.forEach(function (edge) {\n var edgeTarget = edge.target;\n var edgeSource = edge.source;\n var w = edgeTarget === minNodeId ? edgeSource : edgeTarget;\n var weight = weightPropertyName && edge[weightPropertyName] ? edge[weightPropertyName] : 1;\n if (D[w] > D[minNode.id] + weight) {\n D[w] = D[minNode.id] + weight;\n prevs[w] = [minNode.id];\n } else if (D[w] === D[minNode.id] + weight) {\n prevs[w].push(minNode.id);\n }\n });\n };\n for (var i = 0; i < nodeNum; i++) {\n _loop_1(i);\n }\n prevs[source] = [source];\n // 每个节点存可能存在多条最短路径\n var paths = {};\n for (var target in D) {\n if (D[target] !== Infinity) {\n findAllPaths(source, target, prevs, paths);\n }\n }\n // 兼容之前单路径\n var path = {};\n for (var target in paths) {\n path[target] = paths[target][0];\n }\n return {\n length: D,\n path: path,\n allPath: paths\n };\n};\n/* harmony default export */ __webpack_exports__[\"default\"] = (dijkstra);\nfunction findAllPaths(source, target, prevs, foundPaths) {\n if (source === target) {\n return [source];\n }\n if (foundPaths[target]) {\n return foundPaths[target];\n }\n var paths = [];\n for (var _i = 0, _a = prevs[target]; _i < _a.length; _i++) {\n var prev = _a[_i];\n var prevPaths = findAllPaths(source, prev, prevs, foundPaths);\n if (!prevPaths) return;\n for (var _b = 0, prevPaths_1 = prevPaths; _b < prevPaths_1.length; _b++) {\n var prePath = prevPaths_1[_b];\n if (Object(_antv_util__WEBPACK_IMPORTED_MODULE_1__[\"isArray\"])(prePath)) paths.push(Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__spreadArray\"])(Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__spreadArray\"])([], prePath, true), [target], false));else paths.push([prePath, target]);\n }\n }\n foundPaths[target] = paths;\n return foundPaths[target];\n}\n\n//# sourceURL=webpack:///./node_modules/@antv/algorithm/es/dijkstra.js?");
/***/ }),
/***/ "./node_modules/@antv/algorithm/es/find-path.js":
/*!******************************************************!*\
!*** ./node_modules/@antv/algorithm/es/find-path.js ***!
\******************************************************/
/*! exports provided: findShortestPath, findAllPath */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"findShortestPath\", function() { return findShortestPath; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"findAllPath\", function() { return findAllPath; });\n/* harmony import */ var _dijkstra__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./dijkstra */ \"./node_modules/@antv/algorithm/es/dijkstra.js\");\n/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./util */ \"./node_modules/@antv/algorithm/es/util.js\");\n\n\nvar findShortestPath = function findShortestPath(graphData, start, end, directed, weightPropertyName) {\n var _a = Object(_dijkstra__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(graphData, start, directed, weightPropertyName),\n length = _a.length,\n path = _a.path,\n allPath = _a.allPath;\n return {\n length: length[end],\n path: path[end],\n allPath: allPath[end]\n };\n};\nvar findAllPath = function findAllPath(graphData, start, end, directed) {\n var _a;\n if (start === end) return [[start]];\n var _b = graphData.edges,\n edges = _b === void 0 ? [] : _b;\n var visited = [start];\n var isVisited = (_a = {}, _a[start] = true, _a);\n var stack = []; // 辅助栈,用于存储访问过的节点的邻居节点\n var allPath = [];\n var neighbors = directed ? Object(_util__WEBPACK_IMPORTED_MODULE_1__[\"getNeighbors\"])(start, edges, 'target') : Object(_util__WEBPACK_IMPORTED_MODULE_1__[\"getNeighbors\"])(start, edges);\n stack.push(neighbors);\n while (visited.length > 0 && stack.length > 0) {\n var children = stack[stack.length - 1];\n if (children.length) {\n var child = children.shift();\n if (child) {\n visited.push(child);\n isVisited[child] = true;\n neighbors = directed ? Object(_util__WEBPACK_IMPORTED_MODULE_1__[\"getNeighbors\"])(child, edges, 'target') : Object(_util__WEBPACK_IMPORTED_MODULE_1__[\"getNeighbors\"])(child, edges);\n stack.push(neighbors.filter(function (neighbor) {\n return !isVisited[neighbor];\n }));\n }\n } else {\n var node = visited.pop();\n isVisited[node] = false;\n stack.pop();\n continue;\n }\n if (visited[visited.length - 1] === end) {\n var path = visited.map(function (node) {\n return node;\n });\n allPath.push(path);\n var node = visited.pop();\n isVisited[node] = false;\n stack.pop();\n }\n }\n return allPath;\n};\n\n//# sourceURL=webpack:///./node_modules/@antv/algorithm/es/find-path.js?");
/***/ }),
/***/ "./node_modules/@antv/algorithm/es/floydWarshall.js":
/*!**********************************************************!*\
!*** ./node_modules/@antv/algorithm/es/floydWarshall.js ***!
\**********************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _adjacent_matrix__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./adjacent-matrix */ \"./node_modules/@antv/algorithm/es/adjacent-matrix.js\");\n\nvar floydWarshall = function floydWarshall(graphData, directed) {\n var adjacentMatrix = Object(_adjacent_matrix__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(graphData, directed);\n var dist = [];\n var size = adjacentMatrix.length;\n for (var i = 0; i < size; i += 1) {\n dist[i] = [];\n for (var j = 0; j < size; j += 1) {\n if (i === j) {\n dist[i][j] = 0;\n } else if (adjacentMatrix[i][j] === 0 || !adjacentMatrix[i][j]) {\n dist[i][j] = Infinity;\n } else {\n dist[i][j] = adjacentMatrix[i][j];\n }\n }\n }\n // floyd\n for (var k = 0; k < size; k += 1) {\n for (var i = 0; i < size; i += 1) {\n for (var j = 0; j < size; j += 1) {\n if (dist[i][j] > dist[i][k] + dist[k][j]) {\n dist[i][j] = dist[i][k] + dist[k][j];\n }\n }\n }\n }\n return dist;\n};\n/* harmony default export */ __webpack_exports__[\"default\"] = (floydWarshall);\n\n//# sourceURL=webpack:///./node_modules/@antv/algorithm/es/floydWarshall.js?");
/***/ }),
/***/ "./node_modules/@antv/algorithm/es/gSpan/gSpan.js":
/*!********************************************************!*\
!*** ./node_modules/@antv/algorithm/es/gSpan/gSpan.js ***!
\********************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _antv_util__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @antv/util */ \"./node_modules/@antv/util/esm/index.js\");\n/* harmony import */ var _struct__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./struct */ \"./node_modules/@antv/algorithm/es/gSpan/struct.js\");\n\n\nvar DFSedge = /** @class */function () {\n function DFSedge(fromNode, toNode, fromNodeLabel, edgeLabel, toNodeLabel) {\n this.fromNode = fromNode;\n this.toNode = toNode;\n this.nodeEdgeNodeLabel = {\n nodeLabel1: fromNodeLabel || _struct__WEBPACK_IMPORTED_MODULE_1__[\"VACANT_NODE_LABEL\"],\n edgeLabel: edgeLabel || _struct__WEBPACK_IMPORTED_MODULE_1__[\"VACANT_EDGE_LABEL\"],\n nodeLabel2: toNodeLabel || _struct__WEBPACK_IMPORTED_MODULE_1__[\"VACANT_NODE_LABEL\"]\n };\n }\n DFSedge.prototype.equalTo = function (other) {\n return this.fromNode === other.formNode && this.toNode === other.toNode && this.nodeEdgeNodeLabel === other.nodeEdgeNodeLabel;\n };\n DFSedge.prototype.notEqualTo = function (other) {\n return !this.equalTo(other);\n };\n return DFSedge;\n}();\n// DFScode 是 DESedge 的数组\nvar DFScode = /** @class */function () {\n function DFScode() {\n this.rmpath = [];\n this.dfsEdgeList = [];\n }\n DFScode.prototype.equalTo = function (other) {\n var aLength = this.dfsEdgeList.length;\n var bLength = other.length;\n if (aLength !== bLength) return false;\n for (var i = 0; i < aLength; i++) {\n if (this.dfsEdgeList[i] !== other[i]) return false;\n }\n return true;\n };\n DFScode.prototype.notEqualTo = function (other) {\n return !this.equalTo(other);\n };\n /** 增加一条 edge 到 DFScode */\n DFScode.prototype.pushBack = function (fromNode, toNode, fromNodeLabel, edgeLabel, toNodeLabel) {\n this.dfsEdgeList.push(new DFSedge(fromNode, toNode, fromNodeLabel, edgeLabel, toNodeLabel));\n return this.dfsEdgeList;\n };\n /** 根据 dfs 构建图 */\n DFScode.prototype.toGraph = function (graphId, directed) {\n if (graphId === void 0) {\n graphId = _struct__WEBPACK_IMPORTED_MODULE_1__[\"VACANT_GRAPH_ID\"];\n }\n if (directed === void 0) {\n directed = false;\n }\n var graph = new _struct__WEBPACK_IMPORTED_MODULE_1__[\"Graph\"](graphId, true, directed);\n this.dfsEdgeList.forEach(function (dfsEdge) {\n var fromNodeId = dfsEdge.fromNode;\n var toNodeId = dfsEdge.toNode;\n var _a = dfsEdge.nodeEdgeNodeLabel,\n nodeLabel1 = _a.nodeLabel1,\n edgeLabel = _a.edgeLabel,\n nodeLabel2 = _a.nodeLabel2;\n if (nodeLabel1 !== _struct__WEBPACK_IMPORTED_MODULE_1__[\"VACANT_NODE_LABEL\"]) graph.addNode(fromNodeId, nodeLabel1);\n if (nodeLabel2 !== _struct__WEBPACK_IMPORTED_MODULE_1__[\"VACANT_NODE_LABEL\"]) graph.addNode(toNodeId, nodeLabel2);\n if (nodeLabel1 !== _struct__WEBPACK_IMPORTED_MODULE_1__[\"VACANT_NODE_LABEL\"] && nodeLabel2 !== nodeLabel1) graph.addEdge(undefined, fromNodeId, toNodeId, edgeLabel);\n });\n return graph;\n };\n // 建立 rightmost path\n DFScode.prototype.buildRmpath = function () {\n this.rmpath = [];\n var oldFrom = undefined;\n var selfLength = this.dfsEdgeList.length;\n for (var i = selfLength - 1; i >= 0; i--) {\n var dfsEdge = this.dfsEdgeList[i];\n var fromNodeIdx = dfsEdge.fromNode;\n var toNodeIdx = dfsEdge.toNode;\n if (fromNodeIdx < toNodeIdx && (oldFrom === undefined || toNodeIdx === oldFrom)) {\n this.rmpath.push(i);\n oldFrom = fromNodeIdx;\n }\n }\n return this.rmpath;\n };\n DFScode.prototype.getNodeNum = function () {\n var nodeMap = {};\n this.dfsEdgeList.forEach(function (dfsEdge) {\n if (!nodeMap[dfsEdge.fromNode]) nodeMap[dfsEdge.fromNode] = true;\n if (!nodeMap[dfsEdge.toNode]) nodeMap[dfsEdge.toNode] = true;\n });\n return Object.keys(nodeMap).length;\n };\n return DFScode;\n}();\nvar History = /** @class */function () {\n function History(pdfs) {\n this.his = {};\n this.nodesUsed = {};\n this.edgesUsed = {};\n this.edges = [];\n if (!pdfs) return;\n while (pdfs) {\n var e = pdfs.edge;\n this.edges.push(e);\n this.nodesUsed[e.from] = 1;\n this.nodesUsed[e.to] = 1;\n this.edgesUsed[e.id] = 1;\n pdfs = pdfs.preNode;\n }\n // 倒序\n this.edges = this.edges.reverse();\n }\n History.prototype.hasNode = function (node) {\n return this.nodesUsed[node.id] === 1;\n };\n History.prototype.hasEdge = function (edge) {\n return this.edgesUsed[edge.id] === 1;\n };\n return History;\n}();\nvar GSpan = /** @class */function () {\n function GSpan(_a) {\n var graphs = _a.graphs,\n _b = _a.minSupport,\n minSupport = _b === void 0 ? 2 : _b,\n _c = _a.minNodeNum,\n minNodeNum = _c === void 0 ? 1 : _c,\n _d = _a.maxNodeNum,\n maxNodeNum = _d === void 0 ? 4 : _d,\n _e = _a.top,\n top = _e === void 0 ? 10 : _e,\n _f = _a.directed,\n directed = _f === void 0 ? false : _f,\n _g = _a.verbose,\n verbose = _g === void 0 ? false : _g;\n // -------- 第零步,初始化-------\n this.graphs = graphs;\n this.dfsCode = new DFScode();\n this.support = 0;\n this.frequentSize1Subgraphs = [];\n this.frequentSubgraphs = [];\n this.minSupport = minSupport;\n this.top = top;\n this.directed = directed;\n this.counter = 0;\n // TODO? timestamp = {}\n this.maxNodeNum = maxNodeNum;\n this.minNodeNum = minNodeNum;\n this.verbose = verbose;\n if (this.maxNodeNum < this.minNodeNum) this.maxNodeNum = this.minNodeNum;\n this.reportDF = []; // matrix\n }\n // Line 352\n GSpan.prototype.findForwardRootEdges = function (graph, fromNode) {\n var _this = this;\n var result = [];\n var nodeMap = graph.nodeMap;\n fromNode.edges.forEach(function (edge) {\n if (_this.directed || fromNode.label <= nodeMap[edge.to].label) result.push(edge);\n });\n return result;\n };\n GSpan.prototype.findBackwardEdge = function (graph, edge1, edge2, history) {\n if (!this.directed && edge1 === edge2) return null;\n var nodeMap = graph.nodeMap;\n var edge2To = nodeMap[edge2.to];\n var edge2ToEdges = edge2To.edges;\n var edgeLength = edge2ToEdges.length;\n for (var i = 0; i < edgeLength; i++) {\n var edge = edge2ToEdges[i];\n if (history.hasEdge(edge) || edge.to !== edge1.from) continue;\n if (!this.directed) {\n if (edge1.label < edge.label || edge1.label === edge.label && nodeMap[edge1.to].label <= nodeMap[edge2.to].label) {\n return edge;\n }\n } else {\n if (nodeMap[edge1.from].label < nodeMap[edge2.to].label || nodeMap[edge1.from].label === nodeMap[edge2.to].label && edge1.label <= edge.label) {\n return edge;\n }\n }\n }\n return null;\n };\n GSpan.prototype.findForwardPureEdges = function (graph, rightmostEdge, minNodeLabel, history) {\n var result = [];\n var rightmostEdgeToId = rightmostEdge.to;\n var edges = graph.nodeMap[rightmostEdgeToId].edges;\n var edgeLength = edges.length;\n for (var i = 0; i < edgeLength; i++) {\n var edge = edges[i];\n var toNode = graph.nodeMap[edge.to];\n if (minNodeLabel <= toNode.label && !history.hasNode(toNode)) {\n result.push(edge);\n }\n }\n return result;\n };\n GSpan.prototype.findForwardRmpathEdges = function (graph, rightmostEdge, minNodeLabel, history) {\n var result = [];\n var nodeMap = graph.nodeMap;\n var toNodeLabel = nodeMap[rightmostEdge.to].label;\n var fromNode = nodeMap[rightmostEdge.from];\n var edges = fromNode.edges;\n var edgeLength = edges.length;\n for (var i = 0; i < edgeLength; i++) {\n var edge = edges[i];\n var newToNodeLabel = nodeMap[edge.to].label;\n if (rightmostEdge.to === edge.to || minNodeLabel > newToNodeLabel || history.hasNode(nodeMap[edge.to])) {\n continue;\n }\n if (rightmostEdge.label < edge.label || rightmostEdge.label === edge.label && toNodeLabel <= newToNodeLabel) {\n result.push(edge);\n }\n }\n return result;\n };\n GSpan.prototype.getSupport = function (projected) {\n var graphMap = {};\n projected.forEach(function (pro) {\n if (!graphMap[pro.graphId]) graphMap[pro.graphId] = true;\n });\n return Object.keys(graphMap).length;\n };\n GSpan.prototype.findMinLabel = function (obj) {\n var minLabel = undefined;\n Object.keys(obj).forEach(function (nodeEdgeNodeLabel) {\n var _a = obj[nodeEdgeNodeLabel],\n nodeLabel1 = _a.nodeLabel1,\n edgeLabel = _a.edgeLabel,\n nodeLabel2 = _a.nodeLabel2;\n if (!minLabel) {\n minLabel = {\n nodeLabel1: nodeLabel1,\n edgeLabel: edgeLabel,\n nodeLabel2: nodeLabel2\n };\n return;\n }\n if (nodeLabel1 < minLabel.nodeLabel1 || nodeLabel1 === minLabel.nodeLabel1 && edgeLabel < minLabel.edgeLabel || nodeLabel1 === minLabel.nodeLabel1 && edgeLabel === minLabel.edgeLabel && nodeLabel2 < minLabel.nodeLabel2) {\n minLabel = {\n nodeLabel1: nodeLabel1,\n edgeLabel: edgeLabel,\n nodeLabel2: nodeLabel2\n };\n }\n });\n return minLabel;\n };\n GSpan.prototype.isMin = function () {\n var _this = this;\n var dfsCode = this.dfsCode;\n if (this.verbose) console.log(\"isMin checking\", dfsCode);\n if (dfsCode.dfsEdgeList.length === 1) return true;\n var directed = this.directed;\n var graph = dfsCode.toGraph(_struct__WEBPACK_IMPORTED_MODULE_1__[\"VACANT_GRAPH_ID\"], directed);\n var nodeMap = graph.nodeMap;\n var dfsCodeMin = new DFScode();\n var root = {};\n graph.nodes.forEach(function (node) {\n var forwardEdges = _this.findForwardRootEdges(graph, node);\n forwardEdges.forEach(function (edge) {\n var otherNode = nodeMap[edge.to];\n var nodeEdgeNodeLabel = \"\".concat(node.label, \"-\").concat(edge.label, \"-\").concat(otherNode.label);\n if (!root[nodeEdgeNodeLabel]) root[nodeEdgeNodeLabel] = {\n projected: [],\n nodeLabel1: node.label,\n edgeLabel: edge.label,\n nodeLabel2: otherNode.label\n };\n var pdfs = {\n graphId: graph.id,\n edge: edge,\n preNode: null\n };\n root[nodeEdgeNodeLabel].projected.push(pdfs);\n });\n });\n // 比较 root 中每一项的 nodeEdgeNodeLabel 大小,按照 nodeLabel1、edgeLabe、nodeLabel2 的顺序比较\n var minLabel = this.findMinLabel(root); // line 419\n if (!minLabel) return;\n dfsCodeMin.dfsEdgeList.push(new DFSedge(0, 1, minLabel.nodeLabel1, minLabel.edgeLabel, minLabel.nodeLabel2));\n // line 423\n var projectIsMin = function projectIsMin(projected) {\n // right most path\n var rmpath = dfsCodeMin.buildRmpath();\n var minNodeLabel = dfsCodeMin.dfsEdgeList[0].nodeEdgeNodeLabel.nodeLabel1;\n var maxToC = dfsCodeMin.dfsEdgeList[rmpath[0]].toNode; // node id\n var backwardRoot = {};\n var flag = false,\n newTo = 0;\n var end = directed ? -1 : 0; // 遍历到 1 还是到 0\n var _loop_1 = function _loop_1(i) {\n if (flag) return \"break\";\n // line 435\n projected.forEach(function (p) {\n var history = new History(p);\n var backwardEdge = _this.findBackwardEdge(graph, history.edges[rmpath[i]], history.edges[rmpath[0]], history);\n if (backwardEdge) {\n // Line 441\n if (!backwardRoot[backwardEdge.label]) {\n backwardRoot[backwardEdge.label] = {\n projected: [],\n edgeLabel: backwardEdge.label\n };\n }\n backwardRoot[backwardEdge.label].projected.push({\n graphId: graph.id,\n edge: backwardRoot,\n preNode: p\n });\n newTo = dfsCodeMin.dfsEdgeList[rmpath[i]].fromNode;\n flag = true;\n }\n });\n };\n for (var i = rmpath.length - 1; i > end; i--) {\n var state_1 = _loop_1(i);\n if (state_1 === \"break\") break;\n }\n if (flag) {\n var minBackwardEdgeLabel = _this.findMinLabel(backwardRoot);\n dfsCodeMin.dfsEdgeList.push(new DFSedge(maxToC, newTo, _struct__WEBPACK_IMPORTED_MODULE_1__[\"VACANT_NODE_LABEL\"], minBackwardEdgeLabel.edgeLabel, _struct__WEBPACK_IMPORTED_MODULE_1__[\"VACANT_NODE_LABEL\"]));\n var idx_1 = dfsCodeMin.dfsEdgeList.length - 1;\n if (_this.dfsCode.dfsEdgeList[idx_1] !== dfsCodeMin.dfsEdgeList[idx_1]) return false;\n return projectIsMin(backwardRoot[minBackwardEdgeLabel.edgeLabel].projected);\n }\n var forwardRoot = {};\n flag = false;\n var newFrom = 0;\n projected.forEach(function (p) {\n var history = new History(p);\n var forwardPureEdges = _this.findForwardPureEdges(graph, history.edges[rmpath[0]], minNodeLabel, history);\n if (forwardPureEdges.length > 0) {\n flag = true;\n newFrom = maxToC;\n forwardPureEdges.forEach(function (edge) {\n var key = \"\".concat(edge.label, \"-\").concat(nodeMap[edge.to].label);\n if (!forwardRoot[key]) forwardRoot[key] = {\n projected: [],\n edgeLabel: edge.label,\n nodeLabel2: nodeMap[edge.to].label\n };\n forwardRoot[key].projected.push({\n graphId: graph.id,\n edge: edge,\n preNode: p\n });\n });\n }\n });\n var pathLength = rmpath.length;\n var _loop_2 = function _loop_2(i) {\n if (flag) return \"break\";\n var value = rmpath[i];\n projected.forEach(function (p) {\n var history = new History(p);\n var forwardRmpathEdges = _this.findForwardRmpathEdges(graph, history.edges[value], minNodeLabel, history);\n if (forwardRmpathEdges.length > 0) {\n flag = true;\n newFrom = dfsCodeMin.dfsEdgeList[value].fromNode;\n forwardRmpathEdges.forEach(function (edge) {\n var key = \"\".concat(edge.label, \"-\").concat(nodeMap[edge.to].label);\n if (!forwardRoot[key]) forwardRoot[key] = {\n projected: [],\n edgeLabel: edge.label,\n nodeLabel2: nodeMap[edge.to].label\n };\n forwardRoot[key].projected.push({\n graphId: graph.id,\n edge: edge,\n preNode: p\n });\n });\n }\n });\n };\n for (var i = 0; i < pathLength; i++) {\n var state_2 = _loop_2(i);\n if (state_2 === \"break\") break;\n }\n if (!flag) return true;\n var forwardMinEdgeNodeLabel = _this.findMinLabel(forwardRoot);\n dfsCodeMin.dfsEdgeList.push(new DFSedge(newFrom, maxToC + 1, _struct__WEBPACK_IMPORTED_MODULE_1__[\"VACANT_NODE_LABEL\"], forwardMinEdgeNodeLabel.edgeLabel, forwardMinEdgeNodeLabel.nodeLabel2));\n var idx = dfsCodeMin.dfsEdgeList.length - 1;\n if (dfsCode.dfsEdgeList[idx] !== dfsCodeMin.dfsEdgeList[idx]) return false;\n return projectIsMin(forwardRoot[\"\".concat(forwardMinEdgeNodeLabel.edgeLabel, \"-\").concat(forwardMinEdgeNodeLabel.nodeLabel2)].projected);\n };\n var key = \"\".concat(minLabel.nodeLabel1, \"-\").concat(minLabel.edgeLabel, \"-\").concat(minLabel.nodeLabel2);\n return projectIsMin(root[key].projected);\n };\n GSpan.prototype.report = function () {\n if (this.dfsCode.getNodeNum() < this.minNodeNum) return;\n this.counter++;\n var graph = this.dfsCode.toGraph(this.counter, this.directed);\n this.frequentSubgraphs.push(Object(_antv_util__WEBPACK_IMPORTED_MODULE_0__[\"clone\"])(graph));\n };\n GSpan.prototype.subGraphMining = function (projected) {\n var _this = this;\n var support = this.getSupport(projected);\n if (support < this.minSupport) return;\n if (!this.isMin()) return;\n this.report();\n var nodeNum = this.dfsCode.getNodeNum();\n var rmpath = this.dfsCode.buildRmpath();\n var maxToC = this.dfsCode.dfsEdgeList[rmpath[0]].toNode;\n var minNodeLabel = this.dfsCode.dfsEdgeList[0].nodeEdgeNodeLabel.nodeLabel1;\n var forwardRoot = {};\n var backwardRoot = {};\n projected.forEach(function (p) {\n var graph = _this.graphs[p.graphId];\n var nodeMap = graph.nodeMap;\n var history = new History(p);\n // backward Line 526\n for (var i = rmpath.length - 1; i >= 0; i--) {\n var backwardEdge = _this.findBackwardEdge(graph, history.edges[rmpath[i]], history.edges[rmpath[0]], history);\n if (backwardEdge) {\n var key = \"\".concat(_this.dfsCode.dfsEdgeList[rmpath[i]].fromNode, \"-\").concat(backwardEdge.label);\n if (!backwardRoot[key]) backwardRoot[key] = {\n projected: [],\n toNodeId: _this.dfsCode.dfsEdgeList[rmpath[i]].fromNode,\n edgeLabel: backwardEdge.label\n };\n backwardRoot[key].projected.push({\n graphId: p.graphId,\n edge: backwardEdge,\n preNode: p\n });\n }\n }\n // pure forward\n if (nodeNum >= _this.maxNodeNum) return;\n var forwardPureEdges = _this.findForwardPureEdges(graph, history.edges[rmpath[0]], minNodeLabel, history);\n forwardPureEdges.forEach(function (edge) {\n var key = \"\".concat(maxToC, \"-\").concat(edge.label, \"-\").concat(nodeMap[edge.to].label);\n if (!forwardRoot[key]) forwardRoot[key] = {\n projected: [],\n fromNodeId: maxToC,\n edgeLabel: edge.label,\n nodeLabel2: nodeMap[edge.to].label\n };\n forwardRoot[key].projected.push({\n graphId: p.graphId,\n edge: edge,\n preNode: p\n });\n });\n var _loop_3 = function _loop_3(i) {\n var forwardRmpathEdges = _this.findForwardRmpathEdges(graph, history.edges[rmpath[i]], minNodeLabel, history);\n forwardRmpathEdges.forEach(function (edge) {\n var key = \"\".concat(_this.dfsCode.dfsEdgeList[rmpath[i]].fromNode, \"-\").concat(edge.label, \"-\").concat(nodeMap[edge.to].label);\n if (!forwardRoot[key]) forwardRoot[key] = {\n projected: [],\n fromNodeId: _this.dfsCode.dfsEdgeList[rmpath[i]].fromNode,\n edgeLabel: edge.label,\n nodeLabel2: nodeMap[edge.to].label\n };\n forwardRoot[key].projected.push({\n graphId: p.graphId,\n edge: edge,\n preNode: p\n });\n });\n };\n // rmpath forward\n for (var i = 0; i < rmpath.length; i++) {\n _loop_3(i);\n }\n });\n // backward\n Object.keys(backwardRoot).forEach(function (key) {\n var _a = backwardRoot[key],\n toNodeId = _a.toNodeId,\n edgeLabel = _a.edgeLabel;\n _this.dfsCode.dfsEdgeList.push(new DFSedge(maxToC, toNodeId, \"-1\", edgeLabel, \"-1\"));\n _this.subGraphMining(backwardRoot[key].projected);\n _this.dfsCode.dfsEdgeList.pop();\n });\n // forward\n Object.keys(forwardRoot).forEach(function (key) {\n var _a = forwardRoot[key],\n fromNodeId = _a.fromNodeId,\n edgeLabel = _a.edgeLabel,\n nodeLabel2 = _a.nodeLabel2;\n _this.dfsCode.dfsEdgeList.push(new DFSedge(fromNodeId, maxToC + 1, _struct__WEBPACK_IMPORTED_MODULE_1__[\"VACANT_NODE_LABEL\"], edgeLabel, nodeLabel2));\n _this.subGraphMining(forwardRoot[key].projected);\n _this.dfsCode.dfsEdgeList.pop();\n });\n };\n GSpan.prototype.generate1EdgeFrequentSubGraphs = function () {\n var graphs = this.graphs;\n var directed = this.directed;\n var minSupport = this.minSupport;\n var frequentSize1Subgraphs = this.frequentSize1Subgraphs;\n var nodeLabelCounter = {},\n nodeEdgeNodeCounter = {};\n // 保存各个图和各自节点的关系 map,key 格式为 graphKey-node类型\n var nodeLableCounted = {};\n // 保存各个图和各自边的关系 map,key 格式为 graphKey-fromNode类型-edge类型-toNode类型\n var nodeEdgeNodeLabelCounted = {};\n Object.keys(graphs).forEach(function (key) {\n // Line 271\n var graph = graphs[key];\n var nodeMap = graph.nodeMap;\n // 遍历节点,记录对应图 与 每个节点的 label 到 nodeLableCounted\n graph.nodes.forEach(function (node, i) {\n // Line 272\n var nodeLabel = node.label;\n var graphNodeKey = \"\".concat(key, \"-\").concat(nodeLabel);\n if (!nodeLableCounted[graphNodeKey]) {\n var counter = nodeLabelCounter[nodeLabel] || 0;\n counter++;\n nodeLabelCounter[nodeLabel] = counter;\n }\n nodeLableCounted[graphNodeKey] = {\n graphKey: key,\n label: nodeLabel\n };\n // 遍历该节点的所有边,记录各个图和各自边的关系到 nodeEdgeNodeLabelCounted. Line 276\n node.edges.forEach(function (edge) {\n var nodeLabel1 = nodeLabel;\n var nodeLabel2 = nodeMap[edge.to].label;\n if (!directed && nodeLabel1 > nodeLabel2) {\n var tmp = nodeLabel2;\n nodeLabel2 = nodeLabel1;\n nodeLabel1 = tmp;\n }\n var edgeLabel = edge.label;\n var graphNodeEdgeNodeKey = \"\".concat(key, \"-\").concat(nodeLabel1, \"-\").concat(edgeLabel, \"-\").concat(nodeLabel2);\n var nodeEdgeNodeKey = \"\".concat(nodeLabel1, \"-\").concat(edgeLabel, \"-\").concat(nodeLabel2);\n if (!nodeEdgeNodeCounter[nodeEdgeNodeKey]) {\n var counter = nodeEdgeNodeCounter[nodeEdgeNodeKey] || 0;\n counter++;\n nodeEdgeNodeCounter[nodeEdgeNodeKey] = counter; // Line281\n }\n\n nodeEdgeNodeLabelCounted[graphNodeEdgeNodeKey] = {\n graphId: key,\n nodeLabel1: nodeLabel1,\n edgeLabel: edgeLabel,\n nodeLabel2: nodeLabel2\n };\n });\n });\n });\n // 计算频繁的节点\n Object.keys(nodeLabelCounter).forEach(function (label) {\n var count = nodeLabelCounter[label];\n if (count < minSupport) return;\n var g = {\n nodes: [],\n edges: []\n };\n g.nodes.push({\n id: \"0\",\n label: label\n });\n frequentSize1Subgraphs.push(g);\n // if (minNodeNum <= 1) reportSize1 TODO\n });\n\n return frequentSize1Subgraphs;\n };\n GSpan.prototype.run = function () {\n var _this = this;\n // -------- 第一步, _generate_1edge_frequent_subgraphs:频繁的单个节点-------\n this.frequentSize1Subgraphs = this.generate1EdgeFrequentSubGraphs();\n if (this.maxNodeNum < 2) return;\n var graphs = this.graphs;\n var directed = this.directed;\n // PDFS 数组的 map Line 304\n var root = {};\n Object.keys(graphs).forEach(function (graphId) {\n var graph = graphs[graphId];\n var nodeMap = graph.nodeMap;\n // Line 306\n graph.nodes.forEach(function (node) {\n var forwardRootEdges = _this.findForwardRootEdges(graph, node);\n // Line 308\n forwardRootEdges.forEach(function (edge) {\n var toNode = nodeMap[edge.to];\n var nodeEdgeNodeLabel = \"\".concat(node.label, \"-\").concat(edge.label, \"-\").concat(toNode.label);\n if (!root[nodeEdgeNodeLabel]) root[nodeEdgeNodeLabel] = {\n projected: [],\n nodeLabel1: node.label,\n edgeLabel: edge.label,\n nodeLabel2: toNode.label\n };\n var pdfs = {\n graphId: graphId,\n edge: edge,\n preNode: null\n };\n root[nodeEdgeNodeLabel].projected.push(pdfs);\n });\n });\n });\n // Line 313\n Object.keys(root).forEach(function (nodeEdgeNodeLabel) {\n var _a = root[nodeEdgeNodeLabel],\n projected = _a.projected,\n nodeLabel1 = _a.nodeLabel1,\n edgeLabel = _a.edgeLabel,\n nodeLabel2 = _a.nodeLabel2;\n _this.dfsCode.dfsEdgeList.push(new DFSedge(0, 1, nodeLabel1, edgeLabel, nodeLabel2));\n _this.subGraphMining(projected);\n _this.dfsCode.dfsEdgeList.pop();\n });\n };\n return GSpan;\n}();\nvar formatGraphs = function formatGraphs(graphs, directed, nodeLabelProp, edgeLabelProp) {\n var result = {};\n Object.keys(graphs).forEach(function (key, i) {\n var graph = graphs[key];\n var fGraph = new _struct__WEBPACK_IMPORTED_MODULE_1__[\"Graph\"](i, true, directed);\n var nodeIdxMap = {};\n graph.nodes.forEach(function (node, j) {\n fGraph.addNode(j, node[nodeLabelProp]);\n nodeIdxMap[node.id] = j;\n });\n graph.edges.forEach(function (edge, k) {\n var sourceIdx = nodeIdxMap[edge.source];\n var targetIdx = nodeIdxMap[edge.target];\n fGraph.addEdge(-1, sourceIdx, targetIdx, edge[edgeLabelProp]);\n });\n if (fGraph && fGraph.getNodeNum()) result[fGraph.id] = fGraph;\n });\n return result;\n};\nvar toGraphDatas = function toGraphDatas(graphs, nodeLabelProp, edgeLabelProp) {\n var result = [];\n graphs.forEach(function (graph) {\n var graphData = {\n nodes: [],\n edges: []\n };\n graph.nodes.forEach(function (node) {\n var _a;\n graphData.nodes.push((_a = {\n id: \"\".concat(node.id)\n }, _a[nodeLabelProp] = node.label, _a));\n });\n graph.edges.forEach(function (edge) {\n var _a;\n graphData.edges.push((_a = {\n source: \"\".concat(edge.from),\n target: \"\".concat(edge.to)\n }, _a[edgeLabelProp] = edge.label, _a));\n });\n result.push(graphData);\n });\n return result;\n};\nvar DEFAULT_LABEL_NAME = \"cluster\";\n/**\n * gSpan 频繁子图计算算法(frequent graph mining)\n * @param params 参数\n */\nvar gSpan = function gSpan(params) {\n // ------- 将图数据 GraphData 的 map 转换为格式 -------\n var graphs = params.graphs,\n _a = params.directed,\n directed = _a === void 0 ? false : _a,\n _b = params.nodeLabelProp,\n nodeLabelProp = _b === void 0 ? DEFAULT_LABEL_NAME : _b,\n _c = params.edgeLabelProp,\n edgeLabelProp = _c === void 0 ? DEFAULT_LABEL_NAME : _c;\n var formattedGraphs = formatGraphs(graphs, directed, nodeLabelProp, edgeLabelProp);\n var minSupport = params.minSupport,\n maxNodeNum = params.maxNodeNum,\n minNodeNum = params.minNodeNum,\n verbose = params.verbose,\n top = params.top;\n // ------- 初始化与执行算法 -------\n var algoParams = {\n graphs: formattedGraphs,\n minSupport: minSupport,\n maxNodeNum: maxNodeNum,\n minNodeNum: minNodeNum,\n top: top,\n verbose: verbose,\n directed: directed\n };\n var calculator = new GSpan(algoParams);\n calculator.run();\n var result = toGraphDatas(calculator.frequentSubgraphs, nodeLabelProp, edgeLabelProp);\n return result;\n};\n/* harmony default export */ __webpack_exports__[\"default\"] = (gSpan);\n\n//# sourceURL=webpack:///./node_modules/@antv/algorithm/es/gSpan/gSpan.js?");
/***/ }),
/***/ "./node_modules/@antv/algorithm/es/gSpan/struct.js":
/*!*********************************************************!*\
!*** ./node_modules/@antv/algorithm/es/gSpan/struct.js ***!
\*********************************************************/
/*! exports provided: VACANT_EDGE_ID, VACANT_NODE_ID, VACANT_EDGE_LABEL, VACANT_NODE_LABEL, VACANT_GRAPH_ID, AUTO_EDGE_ID, Edge, Node, Graph */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"VACANT_EDGE_ID\", function() { return VACANT_EDGE_ID; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"VACANT_NODE_ID\", function() { return VACANT_NODE_ID; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"VACANT_EDGE_LABEL\", function() { return VACANT_EDGE_LABEL; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"VACANT_NODE_LABEL\", function() { return VACANT_NODE_LABEL; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"VACANT_GRAPH_ID\", function() { return VACANT_GRAPH_ID; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"AUTO_EDGE_ID\", function() { return AUTO_EDGE_ID; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"Edge\", function() { return Edge; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"Node\", function() { return Node; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"Graph\", function() { return Graph; });\nvar VACANT_EDGE_ID = -1;\nvar VACANT_NODE_ID = -1;\nvar VACANT_EDGE_LABEL = \"-1\";\nvar VACANT_NODE_LABEL = \"-1\";\nvar VACANT_GRAPH_ID = -1;\nvar AUTO_EDGE_ID = \"-1\";\nvar Edge = /** @class */function () {\n function Edge(id, from, to, label) {\n if (id === void 0) {\n id = VACANT_EDGE_ID;\n }\n if (from === void 0) {\n from = VACANT_NODE_ID;\n }\n if (to === void 0) {\n to = VACANT_NODE_ID;\n }\n if (label === void 0) {\n label = VACANT_EDGE_LABEL;\n }\n this.id = id;\n this.from = from;\n this.to = to;\n this.label = label;\n }\n return Edge;\n}();\n\nvar Node = /** @class */function () {\n function Node(id, label) {\n if (id === void 0) {\n id = VACANT_NODE_ID;\n }\n if (label === void 0) {\n label = VACANT_NODE_LABEL;\n }\n this.id = id;\n this.label = label;\n this.edges = [];\n this.edgeMap = {};\n }\n Node.prototype.addEdge = function (edge) {\n this.edges.push(edge);\n this.edgeMap[edge.id] = edge;\n };\n return Node;\n}();\n\nvar Graph = /** @class */function () {\n function Graph(id, edgeIdAutoIncrease, directed) {\n if (id === void 0) {\n id = VACANT_NODE_ID;\n }\n if (edgeIdAutoIncrease === void 0) {\n edgeIdAutoIncrease = true;\n }\n if (directed === void 0) {\n directed = false;\n }\n this.id = id;\n this.edgeIdAutoIncrease = edgeIdAutoIncrease;\n this.edges = [];\n this.nodes = [];\n this.nodeMap = {};\n this.edgeMap = {};\n this.nodeLabelMap = {};\n this.edgeLabelMap = {};\n this.counter = 0;\n this.directed = directed;\n }\n Graph.prototype.getNodeNum = function () {\n return this.nodes.length;\n };\n Graph.prototype.addNode = function (id, label) {\n if (this.nodeMap[id]) return;\n var node = new Node(id, label);\n this.nodes.push(node);\n this.nodeMap[id] = node;\n if (!this.nodeLabelMap[label]) this.nodeLabelMap[label] = [];\n this.nodeLabelMap[label].push(id);\n };\n Graph.prototype.addEdge = function (id, from, to, label) {\n if (this.edgeIdAutoIncrease || id === undefined) id = this.counter++;\n if (this.nodeMap[from] && this.nodeMap[to] && this.nodeMap[to].edgeMap[id]) return;\n var edge = new Edge(id, from, to, label);\n this.edges.push(edge);\n this.edgeMap[id] = edge;\n this.nodeMap[from].addEdge(edge);\n if (!this.edgeLabelMap[label]) this.edgeLabelMap[label] = [];\n this.edgeLabelMap[label].push(edge);\n if (!this.directed) {\n var rEdge = new Edge(id, to, from, label);\n this.nodeMap[to].addEdge(rEdge);\n this.edgeLabelMap[label].push(rEdge);\n }\n };\n return Graph;\n}();\n\n\n//# sourceURL=webpack:///./node_modules/@antv/algorithm/es/gSpan/struct.js?");
/***/ }),
/***/ "./node_modules/@antv/algorithm/es/gaddi.js":
/*!**************************************************!*\
!*** ./node_modules/@antv/algorithm/es/gaddi.js ***!
\**************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tslib */ \"./node_modules/tslib/tslib.es6.js\");\n/* harmony import */ var _floydWarshall__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./floydWarshall */ \"./node_modules/@antv/algorithm/es/floydWarshall.js\");\n/* harmony import */ var _gSpan_gSpan__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./gSpan/gSpan */ \"./node_modules/@antv/algorithm/es/gSpan/gSpan.js\");\n/* harmony import */ var _dijkstra__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./dijkstra */ \"./node_modules/@antv/algorithm/es/dijkstra.js\");\n/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./util */ \"./node_modules/@antv/algorithm/es/util.js\");\n\n\n\n\n\n/**\n * 为 graphData 中每个节点生成邻居单元数组\n * @param graphData\n * @param spm\n * @param nodeLabelProp\n * @param k k-近邻\n */\nvar findKNeighborUnits = function findKNeighborUnits(graphData, spm, nodeLabelProp, k) {\n if (nodeLabelProp === void 0) {\n nodeLabelProp = 'cluster';\n }\n if (k === void 0) {\n k = 2;\n }\n var units = [];\n var nodes = graphData.nodes;\n spm.forEach(function (row, i) {\n units.push(findKNeighborUnit(nodes, row, i, nodeLabelProp, k));\n });\n return units;\n};\nvar findKNeighborUnit = function findKNeighborUnit(nodes, row, i, nodeLabelProp, k) {\n var unitNodeIdxs = [i];\n var neighbors = [];\n var labelCountMap = {};\n row.forEach(function (v, j) {\n if (v <= k && i !== j) {\n unitNodeIdxs.push(j);\n neighbors.push(nodes[j]);\n var label = nodes[j][nodeLabelProp];\n if (!labelCountMap[label]) labelCountMap[label] = {\n count: 1,\n dists: [v]\n };else {\n labelCountMap[label].count++;\n labelCountMap[label].dists.push(v);\n }\n }\n });\n // 将 labelCountMap 中的 dists 按照从小到大排序,方便后面使用\n Object.keys(labelCountMap).forEach(function (label) {\n labelCountMap[label].dists = labelCountMap[label].dists.sort(function (a, b) {\n return a - b;\n });\n });\n return {\n nodeIdx: i,\n nodeId: nodes[i].id,\n nodeIdxs: unitNodeIdxs,\n neighbors: neighbors,\n neighborNum: unitNodeIdxs.length - 1,\n nodeLabelCountMap: labelCountMap\n };\n};\n/**\n * 随机寻找点对,满足距离小于 k\n * @param k 参数 k,表示 k-近邻\n * @param nodeNum 参数 length\n * @param maxNodePairNum 寻找点对的数量不超过 maxNodePairNum\n * @param spm 最短路径矩阵\n */\nvar findNodePairsRandomly = function findNodePairsRandomly(k, nodeNum, maxNodePairNum, kNeighborUnits, spm) {\n // 每个节点需要随机找出的点对数\n var nodePairNumEachNode = Math.ceil(maxNodePairNum / nodeNum);\n var nodePairMap = {};\n var foundNodePairCount = 0;\n // 遍历节点,为每个节点随机找出 nodePairNumEachNode 个点对,满足距离小于 k。找到的点对数量超过 maxNodePairNum 或所有节点遍历结束时终止\n kNeighborUnits.forEach(function (unit, i) {\n // 若未达到 nodePairNumEachNode,或循环次数小于最大循环次数(2 * nodeNum),继续循环\n var nodePairForICount = 0;\n var outerLoopCount = 0;\n var neighbors = unit.nodeIdxs; // the first one is the center node\n var neighborNum = unit.neighborNum - 1;\n while (nodePairForICount < nodePairNumEachNode) {\n // 另一端节点在节点数组中的的 index\n var oidx = neighbors[1 + Math.floor(Math.random() * neighborNum)];\n var innerLoopCount = 0;\n // 若随机得到的另一端 idx 不符合条件,则继续 random。条件是不是同一个节点、这个点对没有被记录过、距离小于 k\n while (nodePairMap[\"\".concat(i, \"-\").concat(oidx)] || nodePairMap[\"\".concat(oidx, \"-\").concat(i)]) {\n oidx = Math.floor(Math.random() * nodeNum);\n innerLoopCount++;\n if (innerLoopCount > 2 * nodeNum) break; // 循环次数大于最大循环次数(2 * nodeNum)跳出循环,避免死循环\n }\n\n if (innerLoopCount < 2 * nodeNum) {\n // 未达到最大循环次数,说明找到了合适的另一端\n nodePairMap[\"\".concat(i, \"-\").concat(oidx)] = {\n start: i,\n end: oidx,\n distance: spm[i][oidx]\n };\n nodePairForICount++;\n foundNodePairCount++;\n // 如果当前找到的点对数量达到了上限,返回结果\n if (foundNodePairCount >= maxNodePairNum) return nodePairMap;\n }\n outerLoopCount++;\n if (outerLoopCount > 2 * nodeNum) break; // 循环次数大于最大循环次数(2 * nodeNum)跳出循环,避免死循环\n }\n // 这个节点没有找到足够 nodePairNumEachNode 的点对。更新 nodePairNumEachNode,让后续节点找更多的点对\n if (nodePairForICount < nodePairNumEachNode) {\n var gap = nodePairNumEachNode - nodePairForICount;\n nodePairNumEachNode = (nodePairNumEachNode + gap) / (nodeNum - i - 1);\n }\n });\n return nodePairMap;\n};\n/**\n * 计算所有 nodePairMap 中节点对的相交邻居诱导子图\n * @param nodePairMap 节点对 map,key 为 node1.id-node2.id,value 为 { startNodeIdx, endNodeIdx, distance }\n * @param neighborUnits 每个节点的邻居元数组\n * @param graphData 原图数据\n * @param edgeMap 边的 map,方便检索\n * @param cachedInducedGraphMap 缓存的结果,下次进入该函数将继续更新该缓存,若 key 在缓存中存在则不需要重复计算\n */\nvar getIntersectNeighborInducedGraph = function getIntersectNeighborInducedGraph(nodePairMap, neighborUnits, graphData, cachedInducedGraphMap) {\n var nodes = graphData.nodes;\n if (!cachedInducedGraphMap) cachedInducedGraphMap = {};\n Object.keys(nodePairMap).forEach(function (key) {\n var _a, _b;\n if (cachedInducedGraphMap && cachedInducedGraphMap[key]) return;\n cachedInducedGraphMap[key] = {\n nodes: [],\n edges: []\n };\n var pair = nodePairMap[key];\n var startUnitNodeIds = (_a = neighborUnits[pair.start]) === null || _a === void 0 ? void 0 : _a.nodeIdxs;\n var endUnitNodeIds = (_b = neighborUnits[pair.end]) === null || _b === void 0 ? void 0 : _b.nodeIdxs;\n if (!startUnitNodeIds || !endUnitNodeIds) return; // 不存在邻元,返回空图\n var endSet = new Set(endUnitNodeIds);\n var intersect = startUnitNodeIds.filter(function (x) {\n return endSet.has(x);\n }); // 可能会爆栈(在 1580 + 6 nodes full-connected 时出现)\n if (!intersect || !intersect.length) return; // 没有交集,返回空图\n var intersectIdMap = {};\n var intersectLength = intersect.length;\n for (var i = 0; i < intersectLength; i++) {\n var node = nodes[intersect[i]];\n cachedInducedGraphMap[key].nodes.push(node); // 将交集中的点加入诱导子图\n intersectIdMap[node.id] = true;\n }\n // 遍历所有边数据,如果边的两端都在交集中,将该边加入诱导子图\n graphData.edges.forEach(function (edge) {\n if (intersectIdMap[edge.source] && intersectIdMap[edge.target]) cachedInducedGraphMap[key].edges.push(edge);\n });\n });\n return cachedInducedGraphMap;\n};\n/**\n * 计算 strcutre 在 graph 上的匹配数量\n * @param graph 图数据\n * @param structure 目前支持只有两个节点一条边的最简单结构\n * @param nodeLabelProp 节点类型字段名\n * @param edgeLabelProp 边类型字段名\n */\nvar getMatchedCount = function getMatchedCount(graph, structure, nodeLabelProp, edgeLabelProp) {\n var _a, _b;\n var nodeMap = {};\n graph.nodes.forEach(function (node) {\n nodeMap[node.id] = node;\n });\n var count = 0;\n if (!((_a = structure === null || structure === void 0 ? void 0 : structure.edges) === null || _a === void 0 ? void 0 : _a.length) || ((_b = structure === null || structure === void 0 ? void 0 : structure.nodes) === null || _b === void 0 ? void 0 : _b.length) < 2) return 0;\n graph.edges.forEach(function (e) {\n var sourceLabel = nodeMap[e.source][nodeLabelProp];\n var targetLabel = nodeMap[e.target][nodeLabelProp];\n var strNodeLabel1 = structure === null || structure === void 0 ? void 0 : structure.nodes[0][nodeLabelProp];\n var strNodeLabel2 = structure === null || structure === void 0 ? void 0 : structure.nodes[1][nodeLabelProp];\n var strEdgeLabel = structure === null || structure === void 0 ? void 0 : structure.edges[0][edgeLabelProp];\n if (e[edgeLabelProp] !== strEdgeLabel) return;\n if (sourceLabel === strNodeLabel1 && targetLabel === strNodeLabel2 || sourceLabel === strNodeLabel2 && targetLabel === strNodeLabel1) {\n count++;\n }\n });\n return count;\n};\n/**\n * structures 中寻找最具有代表性的一个。这个结构是使得 matchedCountMap 的分组方式类内间距最小,类间间距最大\n * @param matchedCountMap 每个 structure 分类后的各图匹配数量,格式 { [strcture.idx]: { [interInducedGraphKey]: count } }\n * @param structureNum strcuture 个数,与 matchedCountMap.length 对应\n * @param structures\n */\nvar findRepresentStructure = function findRepresentStructure(matchedCountMap, structureNum, structures) {\n var maxOffset = Infinity,\n representClusterType = 0;\n var _loop_1 = function _loop_1(i) {\n // 一种分组的 map,key 是 intGraph 的 key,value 是 structures[i] 的匹配个数\n var countMapI = matchedCountMap[i];\n // 按照 value 为该组排序,生成 keys 的数组:\n var sortedGraphKeys = Object.keys(countMapI).sort(function (a, b) {\n return countMapI[a] - countMapI[b];\n });\n // 共 100 个 graphKeys,将 graphKeys 按顺序分为 groupNum 组\n var groupNum = 10;\n var clusters = []; // 总共有 groupNum 个项\n sortedGraphKeys.forEach(function (key, j) {\n if (!clusters[j % groupNum]) clusters[j % groupNum] = {\n graphs: [],\n totalCount: 0,\n aveCount: 0\n };\n clusters[j % groupNum].graphs.push(key);\n clusters[j % groupNum].totalCount += countMapI[key];\n });\n // 计算 cluster 与 cluster 之间的距离 innerDist,每个 cluster 内部的距离 intraDist\n var aveIntraDist = 0; // 该类的类内平均值\n var aveCounts = []; // 类内平均匹配数量,将用于计算类间距离\n clusters.forEach(function (graphsInCluster) {\n // 类内均值\n var aveCount = graphsInCluster.totalCount / graphsInCluster.graphs.length;\n graphsInCluster.aveCount = aveCount;\n aveCounts.push(aveCount);\n // 对于每类,计算类内间距平均值\n var aveIntraPerCluster = 0;\n var graphsNum = graphsInCluster.length;\n graphsInCluster.graphs.forEach(function (graphKey1, j) {\n var graph1Count = countMapI[graphKey1];\n graphsInCluster.graphs.forEach(function (graphKey2, k) {\n if (j === k) return;\n aveIntraPerCluster += Math.abs(graph1Count - countMapI[graphKey2]);\n });\n });\n aveIntraPerCluster /= graphsNum * (graphsNum - 1) / 2;\n aveIntraDist += aveIntraPerCluster;\n });\n aveIntraDist /= clusters.length;\n // 用类内均值计算类间距\n var aveInterDist = 0; // 类间间距平均值\n aveCounts.forEach(function (aveCount1, j) {\n aveCounts.forEach(function (aveCount2, k) {\n if (j === k) return;\n aveInterDist += Math.abs(aveCount1 - aveCount2);\n });\n aveInterDist /= aveCounts.length * (aveCounts.length - 1) / 2;\n });\n // 寻找 (类间间距均值-类内间距均值) 最大的一种分组方式(对应的 structure 就是最终要找的唯一 DS(G))\n var offset = aveInterDist - aveIntraDist;\n if (maxOffset < offset) {\n maxOffset = offset;\n representClusterType = i;\n }\n };\n for (var i = 0; i < structureNum; i++) {\n _loop_1(i);\n }\n return {\n structure: structures[representClusterType],\n structureCountMap: matchedCountMap[representClusterType]\n };\n};\nvar getNodeMaps = function getNodeMaps(nodes, nodeLabelProp) {\n var nodeMap = {},\n nodeLabelMap = {};\n nodes.forEach(function (node, i) {\n nodeMap[node.id] = {\n idx: i,\n node: node,\n degree: 0,\n inDegree: 0,\n outDegree: 0\n };\n var label = node[nodeLabelProp];\n if (!nodeLabelMap[label]) nodeLabelMap[label] = [];\n nodeLabelMap[label].push(node);\n });\n return {\n nodeMap: nodeMap,\n nodeLabelMap: nodeLabelMap\n };\n};\nvar getEdgeMaps = function getEdgeMaps(edges, edgeLabelProp, nodeMap) {\n var edgeMap = {},\n edgeLabelMap = {};\n edges.forEach(function (edge, i) {\n edgeMap[\"\".concat(_util__WEBPACK_IMPORTED_MODULE_4__[\"uniqueId\"])] = {\n idx: i,\n edge: edge\n };\n var label = edge[edgeLabelProp];\n if (!edgeLabelMap[label]) edgeLabelMap[label] = [];\n edgeLabelMap[label].push(edge);\n var sourceNode = nodeMap[edge.source];\n if (sourceNode) {\n sourceNode.degree++;\n sourceNode.outDegree++;\n }\n var targetNode = nodeMap[edge.target];\n if (targetNode) {\n targetNode.degree++;\n targetNode.inDegree++;\n }\n });\n return {\n edgeMap: edgeMap,\n edgeLabelMap: edgeLabelMap\n };\n};\n/**\n * 输出最短路径的 map,key 为 sourceNode.id-targetNode.id,value 为这两个节点的最短路径长度\n * @param nodes\n * @param spm\n * @param directed\n */\nvar getSpmMap = function getSpmMap(nodes, spm, directed) {\n var length = spm.length;\n var map = {};\n spm.forEach(function (row, i) {\n var start = directed ? 0 : i + 1;\n var iId = nodes[i].id;\n for (var j = start; j < length; j++) {\n if (i === j) continue;\n var jId = nodes[j].id;\n var dist = row[j];\n map[\"\".concat(iId, \"-\").concat(jId)] = dist;\n if (!directed) map[\"\".concat(jId, \"-\").concat(iId)] = dist;\n }\n });\n return map;\n};\n/**\n * 计算一对节点(node1,node2)的 NDS 距离\n * @param graph 原图数据\n * @param node1\n * @param node2\n */\nvar getNDSDist = function getNDSDist(graph, node1, node2, nodeMap, spDist, kNeighborUnits, structure, nodeLabelProp, edgeLabelProp, cachedNDSMap, cachedInterInducedGraph) {\n var _a;\n var key = \"\".concat(node1.id, \"-\").concat(node2.id);\n if (cachedNDSMap && cachedNDSMap[key]) return cachedNDSMap[key];\n var interInducedGraph = cachedInterInducedGraph ? cachedInterInducedGraph[key] : undefined;\n // 若没有缓存相交邻居诱导子图,计算\n if (!interInducedGraph) {\n var pairMap = (_a = {}, _a[key] = {\n start: nodeMap[node1.id].idx,\n end: nodeMap[node2.id].idx,\n distance: spDist\n }, _a);\n cachedInterInducedGraph = getIntersectNeighborInducedGraph(pairMap, kNeighborUnits, graph, cachedInterInducedGraph);\n interInducedGraph = cachedInterInducedGraph[key];\n }\n return getMatchedCount(interInducedGraph, structure, nodeLabelProp, edgeLabelProp);\n};\n/**\n * 计算 pattern 上绩点的度数并存储到 minPatternNodeLabelDegreeMap\n */\nvar stashPatternNodeLabelDegreeMap = function stashPatternNodeLabelDegreeMap(minPatternNodeLabelDegreeMap, neighborLabel, patternNodeMap, patternNodeLabelMap) {\n var _a, _b, _c;\n var minPatternNodeLabelDegree = (_a = minPatternNodeLabelDegreeMap[neighborLabel]) === null || _a === void 0 ? void 0 : _a.degree;\n var minPatternNodeLabelInDegree = (_b = minPatternNodeLabelDegreeMap[neighborLabel]) === null || _b === void 0 ? void 0 : _b.inDegree;\n var minPatternNodeLabelOutDegree = (_c = minPatternNodeLabelDegreeMap[neighborLabel]) === null || _c === void 0 ? void 0 : _c.outDegree;\n if (minPatternNodeLabelDegreeMap[neighborLabel] === undefined) {\n minPatternNodeLabelDegree = Infinity;\n minPatternNodeLabelInDegree = Infinity;\n minPatternNodeLabelOutDegree = Infinity;\n patternNodeLabelMap[neighborLabel].forEach(function (patternNodeWithLabel) {\n var patternNodeDegree = patternNodeMap[patternNodeWithLabel.id].degree;\n if (minPatternNodeLabelDegree > patternNodeDegree) minPatternNodeLabelDegree = patternNodeDegree;\n var patternNodeInDegree = patternNodeMap[patternNodeWithLabel.id].inDegree;\n if (minPatternNodeLabelInDegree > patternNodeInDegree) minPatternNodeLabelInDegree = patternNodeInDegree;\n var patternNodeOutDegree = patternNodeMap[patternNodeWithLabel.id].outDegree;\n if (minPatternNodeLabelOutDegree > patternNodeOutDegree) minPatternNodeLabelOutDegree = patternNodeOutDegree;\n });\n minPatternNodeLabelDegreeMap[neighborLabel] = {\n degree: minPatternNodeLabelDegree,\n inDegree: minPatternNodeLabelInDegree,\n outDegree: minPatternNodeLabelOutDegree\n };\n }\n return {\n minPatternNodeLabelDegree: minPatternNodeLabelDegree,\n minPatternNodeLabelInDegree: minPatternNodeLabelInDegree,\n minPatternNodeLabelOutDegree: minPatternNodeLabelOutDegree\n };\n};\n/**\n * GADDI 模式匹配\n * @param graphData 原图数据\n * @param pattern 搜索图(需要在原图上搜索的模式)数据\n * @param directed 是否计算有向图,默认 false\n * @param k 参数 k,表示 k-近邻\n * @param length 参数 length\n * @param nodeLabelProp 节点数据中代表节点标签(分类信息)的属性名。默认为 cluster\n * @param edgeLabelProp 边数据中代表边标签(分类信息)的属性名。默认为 cluster\n */\nvar GADDI = function GADDI(graphData, pattern, directed, k, length, nodeLabelProp, edgeLabelProp) {\n var _a;\n if (directed === void 0) {\n directed = false;\n }\n if (nodeLabelProp === void 0) {\n nodeLabelProp = 'cluster';\n }\n if (edgeLabelProp === void 0) {\n edgeLabelProp = 'cluster';\n }\n if (!graphData || !graphData.nodes) return;\n // 分为三步:\n // 0. 预计算:节点/边数,邻接矩阵、最短路径矩阵\n // 1. 处理原图 graphData。再分为 1~5 小步\n // 2. 匹配\n // console.log(\"----- stage-pre: preprocessing -------\");\n // -------- 第零步,预计算:节点/边数,邻接矩阵、最短路径矩阵-------\n var nodeNum = graphData.nodes.length;\n if (!nodeNum) return;\n // console.log(\"----- stage-pre.1: calc shortest path matrix for graph -------\");\n var spm = Object(_floydWarshall__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(graphData, directed);\n // console.log(\n // \"----- stage-pre.2: calc shortest path matrix for pattern -------\"\n // );\n var patternSpm = Object(_floydWarshall__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(pattern, directed);\n // console.log(\n // \"----- stage-pre.3: calc shortest path matrix map for graph -------\"\n // );\n var spmMap = getSpmMap(graphData.nodes, spm, directed);\n // console.log(\n // \"----- stage-pre.4: calc shortest path matrix map for pattern -------\"\n // );\n var patternSpmMap = getSpmMap(pattern.nodes, patternSpm, directed);\n // console.log(\"----- stage-pre.5: establish maps -------\");\n // 节点的 map,以 id 为 id 映射,方便后续快速检索\n var _b = getNodeMaps(graphData.nodes, nodeLabelProp),\n nodeMap = _b.nodeMap,\n nodeLabelMap = _b.nodeLabelMap;\n var _c = getNodeMaps(pattern.nodes, nodeLabelProp),\n patternNodeMap = _c.nodeMap,\n patternNodeLabelMap = _c.nodeLabelMap;\n // 计算节点度数\n getEdgeMaps(graphData.edges, edgeLabelProp, nodeMap);\n var patternEdgeLabelMap = getEdgeMaps(pattern.edges, edgeLabelProp, patternNodeMap).edgeLabelMap;\n // 若未指定 length,自动计算 pattern 半径(最短路径最大值)\n var patternSpmSpread = [];\n patternSpm === null || patternSpm === void 0 ? void 0 : patternSpm.forEach(function (row) {\n patternSpmSpread = patternSpmSpread.concat(row);\n });\n if (!length) length = Math.max.apply(Math, Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__spreadArray\"])(Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__spreadArray\"])([], patternSpmSpread, false), [2], false));\n if (!k) k = length;\n // console.log(\"params\", directed, length, k);\n // console.log(\"----- stage-pre.6: calc k neighbor units -------\");\n // 计算每个节点的 k 邻元集合\n var kNeighborUnits = findKNeighborUnits(graphData, spm, nodeLabelProp, k);\n var patternKNeighborUnits = findKNeighborUnits(pattern, patternSpm, nodeLabelProp, k);\n // console.log(\n // \"----- stage0: going to processing graph and find intersect neighbor induced graphs -------\"\n // );\n // console.log(\"----- stage0.1: going to select random node pairs -------\");\n // -------- 第一步,处理原图 graphData-------\n // 1.1. 随机选择最多 100 个点对,满足距离小于 Length 和 k\n // 当 graphData 少于 20 个节点,则不能找出 100 个点对,只找出不多于 n(n-1)/2 个点对\n var maxNodePairNum = Math.min(100, nodeNum * (nodeNum - 1) / 2);\n var nodePairsMap = findNodePairsRandomly(k, nodeNum, maxNodePairNum, kNeighborUnits, spm);\n // console.log(\n // \"----- stage0.2: going to calculate intersect neighbor induced graphs -------\"\n // );\n // 1.2. 生成上面节点对的相应相交邻居诱导子图。格式为 {'beginNodeIdx-endNodeIdx': {nodes: [], edges: []}}\n var intGMap = getIntersectNeighborInducedGraph(nodePairsMap, kNeighborUnits, graphData);\n // 1.3. 使用 gSpan 算法(frequent graph mining)计算 ISIntG 的前 10 个频率最高的子结构(3-4条边)\n var top = 10,\n minSupport = 1,\n minNodeNum = 1,\n maxNodeNum = 4;\n var params = {\n graphs: intGMap,\n nodeLabelProp: nodeLabelProp,\n edgeLabelProp: edgeLabelProp,\n minSupport: minSupport,\n minNodeNum: minNodeNum,\n maxNodeNum: maxNodeNum,\n directed: directed\n };\n // console.log(\n // \"----- stage1: (gSpan) going to find frequent structure dsG -------\"\n // );\n // console.log(\"----- stage1.1: going to run gSpan -------\");\n // 暂时假设生成的 sub structure 都只有一条边\n var freStructures = Object(_gSpan_gSpan__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(params).slice(0, top);\n // structureNum 可能小于 top\n var structureNum = freStructures.length;\n // 1.4. 计算上述 10 个子结构在 intGMap 中每个诱导子图的匹配个数\n var matchedCountMap = [];\n freStructures.forEach(function (structure, i) {\n matchedCountMap[i] = {};\n Object.keys(intGMap).forEach(function (key) {\n var graph = intGMap[key];\n var subStructureCount = getMatchedCount(graph, structure, nodeLabelProp, edgeLabelProp);\n matchedCountMap[i][key] = subStructureCount;\n });\n });\n // console.log(\n // \"----- stage1.1: going to find the most represent strucutre -------\"\n // );\n // 1.5. 对于每个子结构,根据匹配个数为 intGMap 中的诱导子图分组,生成 structureNum 种分组\n // 计算每种分组的类间距和类内间距,找到类间距最大、类内间距最小的一种分组,这种分组对应的子结构被选为唯一代表性子结构 DS(G)\n var _d = findRepresentStructure(matchedCountMap, structureNum, freStructures),\n dsG = _d.structure,\n ndsDist = _d.structureCountMap;\n // -------- 第二步,匹配-------\n // 2.1 找到从 Q 中的一个节点作为起始节点,寻找 G 中的匹配。这个其实节点的标签可以在 G 中找到最多的节点\n var beginPNode = pattern.nodes[0],\n candidates = [],\n label = (_a = pattern.nodes[0]) === null || _a === void 0 ? void 0 : _a[nodeLabelProp],\n maxNodeNumWithSameLabel = -Infinity;\n pattern.nodes.forEach(function (node) {\n var pLabel = node[nodeLabelProp];\n var nodesWithSameLabel = nodeLabelMap[pLabel];\n if ((nodesWithSameLabel === null || nodesWithSameLabel === void 0 ? void 0 : nodesWithSameLabel.length) > maxNodeNumWithSameLabel) {\n maxNodeNumWithSameLabel = nodesWithSameLabel.length;\n candidates = nodesWithSameLabel;\n label = pLabel;\n beginPNode = node;\n }\n });\n // console.log(\"----- stage2: going to find candidates -------\");\n // 全局缓存,避免重复计算\n var minPatternNodeLabelDegreeMap = {}; // key 是 label,value 是该 label 节点的最小度数\n var patternIntGraphMap = {},\n patternNDSDist = {},\n // key 为 node.id-node.id\n patternNDSDistMap = {}; // key 为 node.id-label2,value nds距离值数组(按从大到小排序,无需关心具体对应哪个 node2)\n // 2.2.2 对于 Q 中的另一个标签的 k 个节点,计算它们到 node 的最短路径以及 NDS 距离\n var patternSpDist = {};\n var patternSpDistBack = {};\n Object.keys(patternNodeLabelMap).forEach(function (label2, j) {\n patternSpDist[label2] = [];\n if (directed) {\n patternSpDistBack[label2] = [];\n }\n var maxDist = -Infinity;\n var patternNodesWithLabel2 = patternNodeLabelMap[label2];\n var patternNodePairMap = {};\n patternNodesWithLabel2.forEach(function (nodeWithLabel2) {\n var dist = patternSpmMap[\"\".concat(beginPNode.id, \"-\").concat(nodeWithLabel2.id)];\n dist && patternSpDist[label2].push(dist);\n if (maxDist < dist) maxDist = dist;\n patternNodePairMap[\"\".concat(beginPNode.id, \"-\").concat(nodeWithLabel2.id)] = {\n start: 0,\n end: patternNodeMap[nodeWithLabel2.id].idx,\n distance: dist\n };\n if (directed) {\n var distBack = patternSpmMap[\"\".concat(nodeWithLabel2.id, \"-\").concat(beginPNode.id)];\n distBack && patternSpDistBack[label2].push(distBack);\n }\n });\n // spDist[label2] 按照从小到大排序\n patternSpDist[label2] = patternSpDist[label2].sort(function (a, b) {\n return a - b;\n });\n if (directed) patternSpDistBack[label2] = patternSpDistBack[label2].sort(function (a, b) {\n return a - b;\n });\n // 计算 Q 中所有 label2 节点到 beginPNode 的 NDS 距离\n // 所有 label2 节点到 beginPNode 的邻居相交诱导子图:\n // key: node1.id-node2.id\n patternIntGraphMap = getIntersectNeighborInducedGraph(patternNodePairMap, patternKNeighborUnits, pattern, patternIntGraphMap);\n // pattern 中 beginNode 到当前 label2 节点 的 NDS 距离(数组,无需关心具体对应到哪个节点)\n var currentPatternNDSDistArray = [];\n Object.keys(patternNodePairMap).forEach(function (key) {\n if (patternNDSDist[key]) {\n currentPatternNDSDistArray.push(patternNDSDist[key]);\n return; // 缓存过则不需要再次计算\n }\n\n var patternIntGraph = patternIntGraphMap[key];\n patternNDSDist[key] = getMatchedCount(patternIntGraph, dsG, nodeLabelProp, edgeLabelProp);\n currentPatternNDSDistArray.push(patternNDSDist[key]);\n });\n // 根据值为 currentPatternNDSDist 从大到小排序\n currentPatternNDSDistArray = currentPatternNDSDistArray.sort(function (a, b) {\n return b - a;\n });\n patternNDSDistMap[\"\".concat(beginPNode.id, \"-\").concat(label2)] = currentPatternNDSDistArray;\n if (label2 === label) return;\n var candidatesNum = (candidates === null || candidates === void 0 ? void 0 : candidates.length) || 0;\n var _loop_4 = function _loop_4(m) {\n var cNode = candidates[m];\n // prune1:若 candidates 中节点 cNode 的 kNeighborUnits 中标签为 label2 的节点个数少于 pattern 中 label2 个数,删去它\n var graphNeighborUnit = kNeighborUnits[nodeMap[cNode.id].idx];\n var graphNeighborUnitCountMap = graphNeighborUnit.nodeLabelCountMap[label2];\n var patternLabel2Num = patternNodeLabelMap[label2].length;\n if (!graphNeighborUnitCountMap || graphNeighborUnitCountMap.count < patternLabel2Num) {\n candidates.splice(m, 1);\n return \"continue\";\n }\n // prune2:若 candidates 中节点 cNode 到 kNeighborUnits 中标签为 label2 的节点最短路径大于 patternSpDist[label2],删去它\n // (prune2 规则即:candidate 相关的最短路径的最大 spDist[label2].length 个,按照大小顺序依次和 patternSpDist[label2] 中的值比较,只要遇到一个是 G > Q 的,就删去这个 candidate)\n var prune2Invalid = false;\n for (var n = 0; n < patternLabel2Num; n++) {\n if (graphNeighborUnitCountMap.dists[n] > patternSpDist[label2][n]) {\n prune2Invalid = true;\n break;\n }\n }\n if (prune2Invalid) {\n candidates.splice(m, 1);\n return \"continue\";\n }\n // prune3:若 candidates 中节点 cNode 到 kNeighborUnits 中标签为 label2 的节点 NDS 距离小于 patternNDSDist[beginNode.id-label2],删去它\n // TODO:prune3,currentPatternNDSDistArray 与 currentNDSDist 的比较\n // 计算 G 中所有 label2 节点到 cNode 的 NDS 距离\n // 所有 label2 节点到 cNode 的邻居相交诱导子图:\n var cNodePairMap = {};\n graphNeighborUnit.neighbors.forEach(function (neighborNode) {\n var dist = spmMap[\"\".concat(cNode.id, \"-\").concat(neighborNode.id)];\n cNodePairMap[\"\".concat(cNode.id, \"-\").concat(neighborNode.id)] = {\n start: nodeMap[cNode.id].idx,\n end: nodeMap[neighborNode.id].idx,\n distance: dist\n };\n });\n // 更新 intGMap\n intGMap = getIntersectNeighborInducedGraph(cNodePairMap, kNeighborUnits, graphData, intGMap);\n // candidate 到它周围 label2 节点的 NDS 距离, key 是 node.id-node.id\n var currentNDSDistArray = [];\n Object.keys(cNodePairMap).forEach(function (key) {\n if (ndsDist[key]) {\n currentNDSDistArray.push(ndsDist[key]);\n return; // 缓存过则不需要再次计算\n }\n\n var intGraph = intGMap[key];\n ndsDist[key] = getMatchedCount(intGraph, dsG, nodeLabelProp, edgeLabelProp);\n currentNDSDistArray.push(ndsDist[key]);\n });\n // 根据值为 currentNDSDistArray 从大到小排序\n currentNDSDistArray = currentNDSDistArray.sort(function (a, b) {\n return b - a;\n });\n var prune3Invalid = false;\n for (var n = 0; n < patternLabel2Num; n++) {\n if (currentNDSDistArray[n] < currentPatternNDSDistArray[n]) {\n prune3Invalid = true;\n break;\n }\n }\n if (prune3Invalid) {\n candidates.splice(m, 1);\n return \"continue\";\n }\n };\n for (var m = candidatesNum - 1; m >= 0; m--) {\n _loop_4(m);\n }\n });\n var candidateGraphs = [];\n // console.log(\n // \"----- stage3: going to splice neighbors for each candidate graph -------\"\n // );\n // candidates 经过筛选后,以每个 candidate 为中心,生成 Length-neighbor 的邻居诱导子图\n // 并在诱导子图中去除不可能在 Q 上找到匹配的点:在 Q 上不存在的 label,其他 label 到 candidate 的最大最短距离符合 Q、NDS 距离符合 Q\n candidates === null || candidates === void 0 ? void 0 : candidates.forEach(function (candidate) {\n var nodeIdx = nodeMap[candidate.id].idx;\n var lengthNeighborUnit = findKNeighborUnit(graphData.nodes, spm[nodeIdx], nodeIdx, nodeLabelProp, length);\n var neighborNodes = lengthNeighborUnit.neighbors;\n // 删除不可能找到匹配的邻居点\n var neighborNum = neighborNodes.length;\n var unmatched = false;\n for (var i = neighborNum - 1; i >= 0; i--) {\n // 如果通过裁剪,符合条件的节点数量已过少,说明不能匹配这个 candidate 相关的图\n if (neighborNodes.length + 1 < pattern.nodes.length) {\n unmatched = true;\n return;\n }\n var neighborNode = neighborNodes[i];\n var neighborLabel = neighborNode[nodeLabelProp];\n // prune1: 若该邻居点的 label 不存在于 pattern 中,移除这个点\n if (!patternNodeLabelMap[neighborLabel] || !patternNodeLabelMap[neighborLabel].length) {\n neighborNodes.splice(i, 1);\n continue;\n }\n // prune2: 若该邻居点到 candidate 的最短路径比和它有相同 label 的节点到 beginPNode 的最大最短路径长度长,移除这个点\n // prune2.1: 如果没有这个标签到 beginPNode 的距离记录,说明 pattern 上(可能 beginPNode 是这个 label)没有其他这个 label 的节点\n if (!patternSpDist[neighborLabel] || !patternSpDist[neighborLabel].length) {\n neighborNodes.splice(i, 1);\n continue;\n }\n var key = \"\".concat(candidate.id, \"-\").concat(neighborNode.id);\n // prune2.2\n var distToCandidate = spmMap[key];\n var idx = patternSpDist[neighborLabel].length - 1;\n var maxDistWithLabelInPattern = patternSpDist[neighborLabel][idx]; // patternSpDist[neighborLabel] 已经按照从小到大排序\n if (distToCandidate > maxDistWithLabelInPattern) {\n neighborNodes.splice(i, 1);\n continue;\n }\n if (directed) {\n var keyBack = \"\".concat(neighborNode.id, \"-\").concat(candidate.id);\n var distFromCandidate = spmMap[keyBack];\n idx = patternSpDistBack[neighborLabel].length - 1;\n var maxBackDistWithLabelInPattern = patternSpDistBack[neighborLabel][idx];\n if (distFromCandidate > maxBackDistWithLabelInPattern) {\n neighborNodes.splice(i, 1);\n continue;\n }\n }\n // prune3: 若该邻居点到 candidate 的 NDS 距离比和它有相同 label 的节点到 beginPNode 的最小 NDS 距离小,移除这个点\n var ndsToCandidate = ndsDist[key] ? ndsDist[key] : getNDSDist(graphData, candidate, neighborNode, nodeMap, distToCandidate, kNeighborUnits, dsG, nodeLabelProp, edgeLabelProp, ndsDist, intGMap);\n var patternKey = \"\".concat(beginPNode.id, \"-\").concat(neighborLabel);\n var minNdsWithLabelInPattern = patternNDSDistMap[patternKey][patternNDSDistMap[patternKey].length - 1]; // patternNDSDist[key] 一定存在\n if (ndsToCandidate < minNdsWithLabelInPattern) {\n neighborNodes.splice(i, 1);\n continue;\n }\n // prune4: 若该邻居点的度数小于 pattern 同 label 节点最小度数,删去该点\n var _a = stashPatternNodeLabelDegreeMap(minPatternNodeLabelDegreeMap, neighborLabel, patternNodeMap, patternNodeLabelMap),\n minPatternNodeLabelDegree = _a.minPatternNodeLabelDegree,\n minPatternNodeLabelInDegree = _a.minPatternNodeLabelInDegree,\n minPatternNodeLabelOutDegree = _a.minPatternNodeLabelOutDegree;\n if (nodeMap[neighborNode.id].degree < minPatternNodeLabelDegree) {\n neighborNodes.splice(i, 1);\n continue;\n }\n }\n // 节点在个数上符合匹配(不少于 pattern 的节点个数),现在筛选相关边\n if (!unmatched) {\n candidateGraphs.push({\n nodes: [candidate].concat(neighborNodes)\n });\n }\n });\n // console.log(\n // \"----- stage4: going to splice edges and neighbors for each candidate graph -------\"\n // );\n var undirectedLengthsToBeginPNode = Object(_dijkstra__WEBPACK_IMPORTED_MODULE_3__[\"default\"])(pattern, beginPNode.id, false).length;\n var undirectedLengthsToBeginPNodeLabelMap = {};\n if (directed) {\n Object.keys(undirectedLengthsToBeginPNode).forEach(function (nodeId) {\n var nodeLabel = patternNodeMap[nodeId].node[nodeLabelProp];\n if (!undirectedLengthsToBeginPNodeLabelMap[nodeLabel]) undirectedLengthsToBeginPNodeLabelMap[nodeLabel] = [undirectedLengthsToBeginPNode[nodeId]];else undirectedLengthsToBeginPNodeLabelMap[nodeLabel].push(undirectedLengthsToBeginPNode[nodeId]);\n });\n Object.keys(undirectedLengthsToBeginPNodeLabelMap).forEach(function (pLabel) {\n undirectedLengthsToBeginPNodeLabelMap[pLabel].sort(function (a, b) {\n return a - b;\n });\n });\n } else {\n undirectedLengthsToBeginPNodeLabelMap = patternSpDist;\n }\n // 现在 candidateGraphs 里面只有节点,进行边的筛选\n var candidateGraphNum = candidateGraphs.length;\n var _loop_2 = function _loop_2(i) {\n var candidateGraph = candidateGraphs[i];\n var candidate = candidateGraph.nodes[0];\n var candidateNodeLabelCountMap = {};\n var candidateNodeMap = {};\n candidateGraph.nodes.forEach(function (node, q) {\n candidateNodeMap[node.id] = {\n idx: q,\n node: node,\n degree: 0,\n inDegree: 0,\n outDegree: 0\n };\n var cNodeLabel = node[nodeLabelProp];\n if (!candidateNodeLabelCountMap[cNodeLabel]) candidateNodeLabelCountMap[cNodeLabel] = 1;else candidateNodeLabelCountMap[cNodeLabel]++;\n });\n // 根据 candidate 和 neighborNodes 中的节点生成 G 的诱导子图\n // 即,将 graphData 上两端都在 candidateGraph.nodes 中的边放入 candidateEdges\n var candidateEdges = [];\n var edgeLabelCountMap = {};\n graphData.edges.forEach(function (edge) {\n if (candidateNodeMap[edge.source] && candidateNodeMap[edge.target]) {\n candidateEdges.push(edge);\n if (!edgeLabelCountMap[edge[edgeLabelProp]]) edgeLabelCountMap[edge[edgeLabelProp]] = 1;else edgeLabelCountMap[edge[edgeLabelProp]]++;\n candidateNodeMap[edge.source].degree++;\n candidateNodeMap[edge.target].degree++;\n candidateNodeMap[edge.source].outDegree++;\n candidateNodeMap[edge.target].inDegree++;\n }\n });\n // prune:若有一个 edgeLabel 在 candidateGraph 上的个数少于 pattern,去除该图\n var pattenrEdgeLabelNum = Object.keys(patternEdgeLabelMap).length;\n var prunedByEdgeLabel = false;\n for (var e = 0; e < pattenrEdgeLabelNum; e++) {\n var label_1 = Object.keys(patternEdgeLabelMap)[e];\n if (!edgeLabelCountMap[label_1] || edgeLabelCountMap[label_1] < patternEdgeLabelMap[label_1].length) {\n prunedByEdgeLabel = true;\n break;\n }\n }\n if (prunedByEdgeLabel) {\n candidateGraphs.splice(i, 1);\n return \"continue\";\n }\n // 遍历 candidateEdges,进行边的筛选\n var candidateEdgeNum = candidateEdges.length;\n // prune:若边数过少,去除该图\n if (candidateEdgeNum < pattern.edges.length) {\n candidateGraphs.splice(i, 1);\n return \"break\";\n }\n var candidateGraphInvalid = false;\n var _loop_5 = function _loop_5(e) {\n var edge = candidateEdges[e];\n var edgeLabel = edge[edgeLabelProp];\n var patternEdgesWithLabel = patternEdgeLabelMap[edgeLabel];\n // prune 1: 若边的 label 不存在于 pattern 边 label 中,去除该边\n if (!patternEdgesWithLabel || !patternEdgesWithLabel.length) {\n edgeLabelCountMap[edgeLabel]--;\n // 若这个 label 的 count 减少之后,该 label 的边数不足,去除该图\n if (patternEdgesWithLabel && edgeLabelCountMap[edgeLabel] < patternEdgesWithLabel.length) {\n candidateGraphInvalid = true;\n return \"break\";\n }\n candidateEdges.splice(e, 1);\n candidateNodeMap[edge.source].degree--;\n candidateNodeMap[edge.target].degree--;\n candidateNodeMap[edge.source].outDegree--;\n candidateNodeMap[edge.target].inDegree--;\n return \"continue\";\n }\n // prune 2: 若边的 label +两端 label 的三元组关系不能在 pattern 中找到,去除该边\n var sourceLabel = candidateNodeMap[edge.source].node[nodeLabelProp];\n var targetLabel = candidateNodeMap[edge.target].node[nodeLabelProp];\n var edgeMatched = false;\n patternEdgesWithLabel.forEach(function (patternEdge) {\n var patternSource = patternNodeMap[patternEdge.source].node;\n var patternTarget = patternNodeMap[patternEdge.target].node;\n if (patternSource[nodeLabelProp] === sourceLabel && patternTarget[nodeLabelProp] === targetLabel) edgeMatched = true;\n if (!directed && patternSource[nodeLabelProp] === targetLabel && patternTarget[nodeLabelProp] === sourceLabel) edgeMatched = true;\n });\n if (!edgeMatched) {\n edgeLabelCountMap[edgeLabel]--;\n // 若这个 label 的 count 减少之后,该 label 的边数不足,去除该图\n if (patternEdgesWithLabel && edgeLabelCountMap[edgeLabel] < patternEdgesWithLabel.length) {\n candidateGraphInvalid = true;\n return \"break\";\n }\n candidateEdges.splice(e, 1);\n candidateNodeMap[edge.source].degree--;\n candidateNodeMap[edge.target].degree--;\n candidateNodeMap[edge.source].outDegree--;\n candidateNodeMap[edge.target].inDegree--;\n return \"continue\";\n }\n };\n for (var e = candidateEdgeNum - 1; e >= 0; e--) {\n var state_2 = _loop_5(e);\n if (state_2 === \"break\") break;\n }\n // prune2: 删除边的过程中,发现边数过少/边 label 数过少时,去除该图\n if (candidateGraphInvalid) {\n candidateGraphs.splice(i, 1);\n return \"continue\";\n }\n candidateGraph.edges = candidateEdges;\n var lengthsToCandidate = Object(_dijkstra__WEBPACK_IMPORTED_MODULE_3__[\"default\"])(candidateGraph, candidateGraph.nodes[0].id, false).length;\n Object.keys(lengthsToCandidate).reverse().forEach(function (targetId) {\n if (targetId === candidateGraph.nodes[0].id || candidateGraphInvalid) return;\n // prune4: 通过上述裁剪,可能导致该邻居子图变为不连通。裁剪掉目前在这个邻居子图中和 candidate(第一个节点)不连通的节点\n if (lengthsToCandidate[targetId] === Infinity) {\n var targetNodeLabel = candidateNodeMap[targetId].node[nodeLabelProp];\n candidateNodeLabelCountMap[targetNodeLabel]--;\n if (candidateNodeLabelCountMap[targetNodeLabel] < patternNodeLabelMap[targetNodeLabel].length) {\n candidateGraphInvalid = true;\n return;\n }\n var idx = candidateGraph.nodes.indexOf(candidateNodeMap[targetId].node);\n candidateGraph.nodes.splice(idx, 1);\n candidateNodeMap[targetId] = undefined;\n return;\n }\n // prune5: 经过边裁剪后,可能又出现了最短路径过长的节点 (比 pattern 中同 label 的节点到 beginNode 最大最短距离远),删去这些节点\n var nLabel = nodeMap[targetId].node[nodeLabelProp];\n if (!undirectedLengthsToBeginPNodeLabelMap[nLabel] || !undirectedLengthsToBeginPNodeLabelMap[nLabel].length || lengthsToCandidate[targetId] > undirectedLengthsToBeginPNodeLabelMap[nLabel][undirectedLengthsToBeginPNodeLabelMap[nLabel].length - 1]) {\n var targetNodeLabel = candidateNodeMap[targetId].node[nodeLabelProp];\n candidateNodeLabelCountMap[targetNodeLabel]--;\n if (candidateNodeLabelCountMap[targetNodeLabel] < patternNodeLabelMap[targetNodeLabel].length) {\n candidateGraphInvalid = true;\n return;\n }\n var idx = candidateGraph.nodes.indexOf(candidateNodeMap[targetId].node);\n candidateGraph.nodes.splice(idx, 1);\n candidateNodeMap[targetId] = undefined;\n }\n });\n if (candidateGraphInvalid) {\n candidateGraphs.splice(i, 1);\n return \"continue\";\n }\n var degreeChanged = true;\n var loopCount = 0;\n while (degreeChanged && !candidateGraphInvalid) {\n degreeChanged = false;\n // candidate 度数不足,删去该图\n var condition = directed ? candidateNodeMap[candidate.id].degree < patternNodeMap[beginPNode.id].degree || candidateNodeMap[candidate.id].inDegree < patternNodeMap[beginPNode.id].inDegree || candidateNodeMap[candidate.id].outDegree < patternNodeMap[beginPNode.id].outDegree : candidateNodeMap[candidate.id].degree < patternNodeMap[beginPNode.id].degree;\n if (condition) {\n candidateGraphInvalid = true;\n break;\n }\n // candidate label 个数不足,删去该图\n if (candidateNodeLabelCountMap[candidate[nodeLabelProp]] < patternNodeLabelMap[candidate[nodeLabelProp]].length) {\n candidateGraphInvalid = true;\n break;\n }\n // prune6:去除度数过小的节点\n var currentCandidateNodeNum = candidateGraph.nodes.length;\n for (var o = currentCandidateNodeNum - 1; o >= 0; o--) {\n var cgNode = candidateGraph.nodes[o];\n var nodeDegree = candidateNodeMap[cgNode.id].degree;\n var nodeInDegree = candidateNodeMap[cgNode.id].inDegree;\n var nodeOutDegree = candidateNodeMap[cgNode.id].outDegree;\n var cNodeLabel = cgNode[nodeLabelProp];\n var _e = stashPatternNodeLabelDegreeMap(minPatternNodeLabelDegreeMap, cNodeLabel, patternNodeMap, patternNodeLabelMap),\n minPatternNodeLabelDegree = _e.minPatternNodeLabelDegree,\n minPatternNodeLabelInDegree = _e.minPatternNodeLabelInDegree,\n minPatternNodeLabelOutDegree = _e.minPatternNodeLabelOutDegree;\n var deleteCondition = directed ? nodeDegree < minPatternNodeLabelDegree || nodeInDegree < minPatternNodeLabelInDegree || nodeOutDegree < minPatternNodeLabelOutDegree : nodeDegree < minPatternNodeLabelDegree;\n if (deleteCondition) {\n candidateNodeLabelCountMap[cgNode[nodeLabelProp]]--;\n // 节点 label 个数不足\n if (candidateNodeLabelCountMap[cgNode[nodeLabelProp]] < patternNodeLabelMap[cgNode[nodeLabelProp]].length) {\n candidateGraphInvalid = true;\n break;\n }\n candidateGraph.nodes.splice(o, 1);\n candidateNodeMap[cgNode.id] = undefined;\n degreeChanged = true;\n }\n }\n if (candidateGraphInvalid || !degreeChanged && loopCount !== 0) break;\n // 经过 prune5 节点裁剪,删去端点已经不在 candidateGraph 中的边\n candidateEdgeNum = candidateEdges.length;\n for (var y = candidateEdgeNum - 1; y >= 0; y--) {\n var cedge = candidateEdges[y];\n if (!candidateNodeMap[cedge.source] || !candidateNodeMap[cedge.target]) {\n candidateEdges.splice(y, 1);\n var edgeLabel = cedge[edgeLabelProp];\n edgeLabelCountMap[edgeLabel]--;\n if (candidateNodeMap[cedge.source]) {\n candidateNodeMap[cedge.source].degree--;\n candidateNodeMap[cedge.source].outDegree--;\n }\n if (candidateNodeMap[cedge.target]) {\n candidateNodeMap[cedge.target].degree--;\n candidateNodeMap[cedge.target].inDegree--;\n }\n // 边 label 数量不足\n if (patternEdgeLabelMap[edgeLabel] && edgeLabelCountMap[edgeLabel] < patternEdgeLabelMap[edgeLabel].length) {\n candidateGraphInvalid = true;\n break;\n }\n degreeChanged = true;\n }\n }\n loopCount++;\n }\n if (candidateGraphInvalid) {\n candidateGraphs.splice(i, 1);\n return \"continue\";\n }\n // prune: 若节点/边数过少,节点/边 label 过少,去掉这个图\n if (candidateGraphInvalid || candidateGraph.nodes.length < pattern.nodes.length || candidateEdges.length < pattern.edges.length) {\n candidateGraphs.splice(i, 1);\n return \"continue\";\n }\n };\n for (var i = candidateGraphNum - 1; i >= 0; i--) {\n var state_1 = _loop_2(i);\n if (state_1 === \"break\") break;\n }\n // 此时已经生成的多个 candidateGraphs,可能有重复\n // console.log(\n // \"----- stage5: going to splice dulplicated candidate graphs -------\"\n // );\n // 删去 candidateGraphs 中一模一样的子图,通过边的 node-node-edgeLabel 作为 key,这类边个数作为 value,进行匹配\n var currentLength = candidateGraphs.length;\n var _loop_3 = function _loop_3(i) {\n var cg1 = candidateGraphs[i];\n var cg1EdgeMap = {}; // [node1.id-node2.id-edge.label]: count\n cg1.edges.forEach(function (edge) {\n var key = \"\".concat(edge.source, \"-\").concat(edge.target, \"-\").concat(edge.label);\n if (!cg1EdgeMap[key]) cg1EdgeMap[key] = 1;else cg1EdgeMap[key]++;\n });\n var _loop_6 = function _loop_6(j) {\n var cg2 = candidateGraphs[j];\n var cg2EdgeMap = {}; // [node1.id-node2.id-edge.label]: count\n cg2.edges.forEach(function (edge) {\n var key = \"\".concat(edge.source, \"-\").concat(edge.target, \"-\").concat(edge.label);\n if (!cg2EdgeMap[key]) cg2EdgeMap[key] = 1;else cg2EdgeMap[key]++;\n });\n var same = true;\n if (Object.keys(cg2EdgeMap).length !== Object.keys(cg1EdgeMap).length) {\n same = false;\n } else {\n Object.keys(cg1EdgeMap).forEach(function (key) {\n if (cg2EdgeMap[key] !== cg1EdgeMap[key]) same = false;\n });\n }\n if (same) {\n candidateGraphs.splice(j, 1);\n }\n };\n for (var j = currentLength - 1; j > i; j--) {\n _loop_6(j);\n }\n currentLength = candidateGraphs.length;\n };\n for (var i = 0; i <= currentLength - 1; i++) {\n _loop_3(i);\n }\n return candidateGraphs;\n};\n/* harmony default export */ __webpack_exports__[\"default\"] = (GADDI);\n\n//# sourceURL=webpack:///./node_modules/@antv/algorithm/es/gaddi.js?");
/***/ }),
/***/ "./node_modules/@antv/algorithm/es/i-louvain.js":
/*!******************************************************!*\
!*** ./node_modules/@antv/algorithm/es/i-louvain.js ***!
\******************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _louvain__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./louvain */ \"./node_modules/@antv/algorithm/es/louvain.js\");\n\n/**\n * 社区发现 i-louvain 算法:模块度 + 惯性模块度(即节点属性相似性)\n * @param graphData 图数据\n * @param directed 是否有向图,默认为 false\n * @param weightPropertyName 权重的属性字段\n * @param threshold 差值阈值\n * @param propertyKey 属性的字段名\n * @param involvedKeys 参与计算的key集合\n * @param uninvolvedKeys 不参与计算的key集合\n * @param inertialWeight 惯性模块度权重\n */\nvar iLouvain = function iLouvain(graphData, directed, weightPropertyName, threshold, propertyKey, involvedKeys, uninvolvedKeys, inertialWeight) {\n if (directed === void 0) {\n directed = false;\n }\n if (weightPropertyName === void 0) {\n weightPropertyName = 'weight';\n }\n if (threshold === void 0) {\n threshold = 0.0001;\n }\n if (propertyKey === void 0) {\n propertyKey = undefined;\n }\n if (involvedKeys === void 0) {\n involvedKeys = [];\n }\n if (uninvolvedKeys === void 0) {\n uninvolvedKeys = ['id'];\n }\n if (inertialWeight === void 0) {\n inertialWeight = 1;\n }\n return Object(_louvain__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(graphData, directed, weightPropertyName, threshold, true, propertyKey, involvedKeys, uninvolvedKeys, inertialWeight);\n};\n/* harmony default export */ __webpack_exports__[\"default\"] = (iLouvain);\n\n//# sourceURL=webpack:///./node_modules/@antv/algorithm/es/i-louvain.js?");
/***/ }),
/***/ "./node_modules/@antv/algorithm/es/index.js":
/*!**************************************************!*\
!*** ./node_modules/@antv/algorithm/es/index.js ***!
\**************************************************/
/*! exports provided: getAdjMatrix, breadthFirstSearch, connectedComponent, getDegree, getInDegree, getOutDegree, detectCycle, detectDirectedCycle, detectAllCycles, detectAllDirectedCycle, detectAllUndirectedCycle, depthFirstSearch, dijkstra, findAllPath, findShortestPath, floydWarshall, labelPropagation, louvain, iLouvain, kCore, kMeans, cosineSimilarity, nodesCosineSimilarity, minimumSpanningTree, pageRank, getNeighbors, Stack, GADDI, default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"detectDirectedCycle\", function() { return detectDirectedCycle; });\n/* harmony import */ var _adjacent_matrix__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./adjacent-matrix */ \"./node_modules/@antv/algorithm/es/adjacent-matrix.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"getAdjMatrix\", function() { return _adjacent_matrix__WEBPACK_IMPORTED_MODULE_0__[\"default\"]; });\n\n/* harmony import */ var _bfs__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./bfs */ \"./node_modules/@antv/algorithm/es/bfs.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"breadthFirstSearch\", function() { return _bfs__WEBPACK_IMPORTED_MODULE_1__[\"default\"]; });\n\n/* harmony import */ var _connected_component__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./connected-component */ \"./node_modules/@antv/algorithm/es/connected-component.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"connectedComponent\", function() { return _connected_component__WEBPACK_IMPORTED_MODULE_2__[\"default\"]; });\n\n/* harmony import */ var _degree__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./degree */ \"./node_modules/@antv/algorithm/es/degree.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"getDegree\", function() { return _degree__WEBPACK_IMPORTED_MODULE_3__[\"default\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"getInDegree\", function() { return _degree__WEBPACK_IMPORTED_MODULE_3__[\"getInDegree\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"getOutDegree\", function() { return _degree__WEBPACK_IMPORTED_MODULE_3__[\"getOutDegree\"]; });\n\n/* harmony import */ var _detect_cycle__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./detect-cycle */ \"./node_modules/@antv/algorithm/es/detect-cycle.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"detectCycle\", function() { return _detect_cycle__WEBPACK_IMPORTED_MODULE_4__[\"default\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"detectAllCycles\", function() { return _detect_cycle__WEBPACK_IMPORTED_MODULE_4__[\"detectAllCycles\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"detectAllDirectedCycle\", function() { return _detect_cycle__WEBPACK_IMPORTED_MODULE_4__[\"detectAllDirectedCycle\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"detectAllUndirectedCycle\", function() { return _detect_cycle__WEBPACK_IMPORTED_MODULE_4__[\"detectAllUndirectedCycle\"]; });\n\n/* harmony import */ var _dfs__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./dfs */ \"./node_modules/@antv/algorithm/es/dfs.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"depthFirstSearch\", function() { return _dfs__WEBPACK_IMPORTED_MODULE_5__[\"default\"]; });\n\n/* harmony import */ var _dijkstra__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./dijkstra */ \"./node_modules/@antv/algorithm/es/dijkstra.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"dijkstra\", function() { return _dijkstra__WEBPACK_IMPORTED_MODULE_6__[\"default\"]; });\n\n/* harmony import */ var _find_path__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./find-path */ \"./node_modules/@antv/algorithm/es/find-path.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"findAllPath\", function() { return _find_path__WEBPACK_IMPORTED_MODULE_7__[\"findAllPath\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"findShortestPath\", function() { return _find_path__WEBPACK_IMPORTED_MODULE_7__[\"findShortestPath\"]; });\n\n/* harmony import */ var _floydWarshall__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./floydWarshall */ \"./node_modules/@antv/algorithm/es/floydWarshall.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"floydWarshall\", function() { return _floydWarshall__WEBPACK_IMPORTED_MODULE_8__[\"default\"]; });\n\n/* harmony import */ var _label_propagation__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./label-propagation */ \"./node_modules/@antv/algorithm/es/label-propagation.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"labelPropagation\", function() { return _label_propagation__WEBPACK_IMPORTED_MODULE_9__[\"default\"]; });\n\n/* harmony import */ var _louvain__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./louvain */ \"./node_modules/@antv/algorithm/es/louvain.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"louvain\", function() { return _louvain__WEBPACK_IMPORTED_MODULE_10__[\"default\"]; });\n\n/* harmony import */ var _i_louvain__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./i-louvain */ \"./node_modules/@antv/algorithm/es/i-louvain.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"iLouvain\", function() { return _i_louvain__WEBPACK_IMPORTED_MODULE_11__[\"default\"]; });\n\n/* harmony import */ var _k_core__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./k-core */ \"./node_modules/@antv/algorithm/es/k-core.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"kCore\", function() { return _k_core__WEBPACK_IMPORTED_MODULE_12__[\"default\"]; });\n\n/* harmony import */ var _k_means__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./k-means */ \"./node_modules/@antv/algorithm/es/k-means.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"kMeans\", function() { return _k_means__WEBPACK_IMPORTED_MODULE_13__[\"default\"]; });\n\n/* harmony import */ var _cosine_similarity__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ./cosine-similarity */ \"./node_modules/@antv/algorithm/es/cosine-similarity.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"cosineSimilarity\", function() { return _cosine_similarity__WEBPACK_IMPORTED_MODULE_14__[\"default\"]; });\n\n/* harmony import */ var _nodes_cosine_similarity__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ./nodes-cosine-similarity */ \"./node_modules/@antv/algorithm/es/nodes-cosine-similarity.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"nodesCosineSimilarity\", function() { return _nodes_cosine_similarity__WEBPACK_IMPORTED_MODULE_15__[\"default\"]; });\n\n/* harmony import */ var _mts__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ./mts */ \"./node_modules/@antv/algorithm/es/mts.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"minimumSpanningTree\", function() { return _mts__WEBPACK_IMPORTED_MODULE_16__[\"default\"]; });\n\n/* harmony import */ var _pageRank__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! ./pageRank */ \"./node_modules/@antv/algorithm/es/pageRank.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"pageRank\", function() { return _pageRank__WEBPACK_IMPORTED_MODULE_17__[\"default\"]; });\n\n/* harmony import */ var _gaddi__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! ./gaddi */ \"./node_modules/@antv/algorithm/es/gaddi.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"GADDI\", function() { return _gaddi__WEBPACK_IMPORTED_MODULE_18__[\"default\"]; });\n\n/* harmony import */ var _structs_stack__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! ./structs/stack */ \"./node_modules/@antv/algorithm/es/structs/stack.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Stack\", function() { return _structs_stack__WEBPACK_IMPORTED_MODULE_19__[\"default\"]; });\n\n/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! ./util */ \"./node_modules/@antv/algorithm/es/util.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"getNeighbors\", function() { return _util__WEBPACK_IMPORTED_MODULE_20__[\"getNeighbors\"]; });\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar detectDirectedCycle = _detect_cycle__WEBPACK_IMPORTED_MODULE_4__[\"default\"];\n\n/* harmony default export */ __webpack_exports__[\"default\"] = ({\n getAdjMatrix: _adjacent_matrix__WEBPACK_IMPORTED_MODULE_0__[\"default\"],\n breadthFirstSearch: _bfs__WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n connectedComponent: _connected_component__WEBPACK_IMPORTED_MODULE_2__[\"default\"],\n getDegree: _degree__WEBPACK_IMPORTED_MODULE_3__[\"default\"],\n getInDegree: _degree__WEBPACK_IMPORTED_MODULE_3__[\"getInDegree\"],\n getOutDegree: _degree__WEBPACK_IMPORTED_MODULE_3__[\"getOutDegree\"],\n detectCycle: _detect_cycle__WEBPACK_IMPORTED_MODULE_4__[\"default\"],\n detectDirectedCycle: detectDirectedCycle,\n detectAllCycles: _detect_cycle__WEBPACK_IMPORTED_MODULE_4__[\"detectAllCycles\"],\n detectAllDirectedCycle: _detect_cycle__WEBPACK_IMPORTED_MODULE_4__[\"detectAllDirectedCycle\"],\n detectAllUndirectedCycle: _detect_cycle__WEBPACK_IMPORTED_MODULE_4__[\"detectAllUndirectedCycle\"],\n depthFirstSearch: _dfs__WEBPACK_IMPORTED_MODULE_5__[\"default\"],\n dijkstra: _dijkstra__WEBPACK_IMPORTED_MODULE_6__[\"default\"],\n findAllPath: _find_path__WEBPACK_IMPORTED_MODULE_7__[\"findAllPath\"],\n findShortestPath: _find_path__WEBPACK_IMPORTED_MODULE_7__[\"findShortestPath\"],\n floydWarshall: _floydWarshall__WEBPACK_IMPORTED_MODULE_8__[\"default\"],\n labelPropagation: _label_propagation__WEBPACK_IMPORTED_MODULE_9__[\"default\"],\n louvain: _louvain__WEBPACK_IMPORTED_MODULE_10__[\"default\"],\n iLouvain: _i_louvain__WEBPACK_IMPORTED_MODULE_11__[\"default\"],\n kCore: _k_core__WEBPACK_IMPORTED_MODULE_12__[\"default\"],\n kMeans: _k_means__WEBPACK_IMPORTED_MODULE_13__[\"default\"],\n cosineSimilarity: _cosine_similarity__WEBPACK_IMPORTED_MODULE_14__[\"default\"],\n nodesCosineSimilarity: _nodes_cosine_similarity__WEBPACK_IMPORTED_MODULE_15__[\"default\"],\n minimumSpanningTree: _mts__WEBPACK_IMPORTED_MODULE_16__[\"default\"],\n pageRank: _pageRank__WEBPACK_IMPORTED_MODULE_17__[\"default\"],\n getNeighbors: _util__WEBPACK_IMPORTED_MODULE_20__[\"getNeighbors\"],\n Stack: _structs_stack__WEBPACK_IMPORTED_MODULE_19__[\"default\"],\n GADDI: _gaddi__WEBPACK_IMPORTED_MODULE_18__[\"default\"]\n});\n\n//# sourceURL=webpack:///./node_modules/@antv/algorithm/es/index.js?");
/***/ }),
/***/ "./node_modules/@antv/algorithm/es/k-core.js":
/*!***************************************************!*\
!*** ./node_modules/@antv/algorithm/es/k-core.js ***!
\***************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _antv_util__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @antv/util */ \"./node_modules/@antv/util/esm/index.js\");\n/* harmony import */ var _degree__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./degree */ \"./node_modules/@antv/algorithm/es/degree.js\");\n\n\n/**\n * k-core算法 找出符合指定核心度的紧密关联的子图结构\n * @param graphData 图数据\n * @param k 核心度数\n */\nvar kCore = function kCore(graphData, k) {\n var _a;\n if (k === void 0) {\n k = 1;\n }\n var data = Object(_antv_util__WEBPACK_IMPORTED_MODULE_0__[\"clone\"])(graphData);\n var _b = data.nodes,\n nodes = _b === void 0 ? [] : _b;\n var _c = data.edges,\n edges = _c === void 0 ? [] : _c;\n var _loop_1 = function _loop_1() {\n // 获取图中节点的度数\n var degrees = Object(_degree__WEBPACK_IMPORTED_MODULE_1__[\"default\"])({\n nodes: nodes,\n edges: edges\n });\n var nodeIds = Object.keys(degrees);\n // 按照度数进行排序\n nodeIds.sort(function (a, b) {\n var _a, _b;\n return ((_a = degrees[a]) === null || _a === void 0 ? void 0 : _a.degree) - ((_b = degrees[b]) === null || _b === void 0 ? void 0 : _b.degree);\n });\n var minIndexId = nodeIds[0];\n if (!nodes.length || ((_a = degrees[minIndexId]) === null || _a === void 0 ? void 0 : _a.degree) >= k) {\n return \"break\";\n }\n var originIndex = nodes.findIndex(function (node) {\n return node.id === minIndexId;\n });\n // 移除度数小于k的节点\n nodes.splice(originIndex, 1);\n // 移除度数小于k的节点相关的边\n edges = edges.filter(function (edge) {\n return !(edge.source === minIndexId || edge.target === minIndexId);\n });\n };\n while (true) {\n var state_1 = _loop_1();\n if (state_1 === \"break\") break;\n }\n return {\n nodes: nodes,\n edges: edges\n };\n};\n/* harmony default export */ __webpack_exports__[\"default\"] = (kCore);\n\n//# sourceURL=webpack:///./node_modules/@antv/algorithm/es/k-core.js?");
/***/ }),
/***/ "./node_modules/@antv/algorithm/es/k-means.js":
/*!****************************************************!*\
!*** ./node_modules/@antv/algorithm/es/k-means.js ***!
\****************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _antv_util__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @antv/util */ \"./node_modules/@antv/util/esm/index.js\");\n/* harmony import */ var _utils_node_properties__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./utils/node-properties */ \"./node_modules/@antv/algorithm/es/utils/node-properties.js\");\n/* harmony import */ var _utils_data_preprocessing__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./utils/data-preprocessing */ \"./node_modules/@antv/algorithm/es/utils/data-preprocessing.js\");\n/* harmony import */ var _utils_vector__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./utils/vector */ \"./node_modules/@antv/algorithm/es/utils/vector.js\");\n/* harmony import */ var _types__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./types */ \"./node_modules/@antv/algorithm/es/types.js\");\n\n\n\n\n\n// 获取质心\nvar getCentroid = function getCentroid(distanceType, allPropertiesWeight, index) {\n var centroid = [];\n switch (distanceType) {\n case _types__WEBPACK_IMPORTED_MODULE_4__[\"DistanceType\"].EuclideanDistance:\n centroid = allPropertiesWeight[index];\n break;\n default:\n centroid = [];\n break;\n }\n return centroid;\n};\n/**\n * k-means算法 根据节点之间的距离将节点聚类为K个簇\n * @param data 图数据\n * @param k 质心(聚类中心)个数\n * @param propertyKey 属性的字段名\n * @param involvedKeys 参与计算的key集合\n * @param uninvolvedKeys 不参与计算的key集合\n * @param distanceType 距离类型 默认节点属性的欧式距离\n */\nvar kMeans = function kMeans(data, k, propertyKey, involvedKeys, uninvolvedKeys, distanceType) {\n if (k === void 0) {\n k = 3;\n }\n if (propertyKey === void 0) {\n propertyKey = undefined;\n }\n if (involvedKeys === void 0) {\n involvedKeys = [];\n }\n if (uninvolvedKeys === void 0) {\n uninvolvedKeys = ['id'];\n }\n if (distanceType === void 0) {\n distanceType = _types__WEBPACK_IMPORTED_MODULE_4__[\"DistanceType\"].EuclideanDistance;\n }\n var _a = data.nodes,\n nodes = _a === void 0 ? [] : _a,\n _b = data.edges,\n edges = _b === void 0 ? [] : _b;\n var defaultClusterInfo = {\n clusters: [{\n id: \"0\",\n nodes: nodes\n }],\n clusterEdges: []\n };\n // 距离类型为欧式距离且没有属性时,直接return\n if (distanceType === _types__WEBPACK_IMPORTED_MODULE_4__[\"DistanceType\"].EuclideanDistance && !nodes.every(function (node) {\n return node.hasOwnProperty(propertyKey);\n })) {\n return defaultClusterInfo;\n }\n // 所有节点属性集合\n var properties = [];\n // 所有节点属性one-hot特征向量集合\n var allPropertiesWeight = [];\n if (distanceType === _types__WEBPACK_IMPORTED_MODULE_4__[\"DistanceType\"].EuclideanDistance) {\n properties = Object(_utils_node_properties__WEBPACK_IMPORTED_MODULE_1__[\"getAllProperties\"])(nodes, propertyKey);\n allPropertiesWeight = Object(_utils_data_preprocessing__WEBPACK_IMPORTED_MODULE_2__[\"oneHot\"])(properties, involvedKeys, uninvolvedKeys);\n }\n if (!allPropertiesWeight.length) {\n return defaultClusterInfo;\n }\n var allPropertiesWeightUniq = Object(_antv_util__WEBPACK_IMPORTED_MODULE_0__[\"uniq\"])(allPropertiesWeight.map(function (item) {\n return item.join('');\n }));\n // 当输入节点数量或者属性集合的长度小于k时,k调整为其中最小的值\n var finalK = Math.min(k, nodes.length, allPropertiesWeightUniq.length);\n // 记录节点的原始index,与allPropertiesWeight对应\n for (var i = 0; i < nodes.length; i++) {\n nodes[i].originIndex = i;\n }\n // 初始化质心(聚类中心)\n var centroids = [];\n var centroidIndexList = [];\n var clusters = [];\n for (var i = 0; i < finalK; i++) {\n if (i === 0) {\n // 随机选取质心(聚类中心)\n var randomIndex = Math.floor(Math.random() * nodes.length);\n switch (distanceType) {\n case _types__WEBPACK_IMPORTED_MODULE_4__[\"DistanceType\"].EuclideanDistance:\n centroids[i] = allPropertiesWeight[randomIndex];\n break;\n default:\n centroids[i] = [];\n break;\n }\n centroidIndexList.push(randomIndex);\n clusters[i] = [nodes[randomIndex]];\n nodes[randomIndex].clusterId = String(i);\n } else {\n var maxDistance = -Infinity;\n var maxDistanceNodeIndex = 0;\n var _loop_1 = function _loop_1(m) {\n if (!centroidIndexList.includes(m)) {\n var totalDistance = 0;\n for (var j = 0; j < centroids.length; j++) {\n // 求节点到质心的距离(默认节点属性的欧式距离)\n var distance = 0;\n switch (distanceType) {\n case _types__WEBPACK_IMPORTED_MODULE_4__[\"DistanceType\"].EuclideanDistance:\n distance = Object(_utils_data_preprocessing__WEBPACK_IMPORTED_MODULE_2__[\"getDistance\"])(allPropertiesWeight[nodes[m].originIndex], centroids[j], distanceType);\n break;\n default:\n break;\n }\n totalDistance += distance;\n }\n // 节点到各质心的平均距离(默认欧式距离)\n var avgDistance = totalDistance / centroids.length;\n // 记录到已有质心最远的的距离和节点索引\n if (avgDistance > maxDistance && !centroids.find(function (centroid) {\n return Object(_antv_util__WEBPACK_IMPORTED_MODULE_0__[\"isEqual\"])(centroid, getCentroid(distanceType, allPropertiesWeight, nodes[m].originIndex));\n })) {\n maxDistance = avgDistance;\n maxDistanceNodeIndex = m;\n }\n }\n };\n // 选取与已有质心平均距离最远的点做为新的质心\n for (var m = 0; m < nodes.length; m++) {\n _loop_1(m);\n }\n centroids[i] = getCentroid(distanceType, allPropertiesWeight, maxDistanceNodeIndex);\n centroidIndexList.push(maxDistanceNodeIndex);\n clusters[i] = [nodes[maxDistanceNodeIndex]];\n nodes[maxDistanceNodeIndex].clusterId = String(i);\n }\n }\n var iterations = 0;\n while (true) {\n for (var i = 0; i < nodes.length; i++) {\n var minDistanceIndex = 0;\n var minDistance = Infinity;\n if (!(iterations === 0 && centroidIndexList.includes(i))) {\n for (var j = 0; j < centroids.length; j++) {\n // 求节点到质心的距离(默认节点属性的欧式距离)\n var distance = 0;\n switch (distanceType) {\n case _types__WEBPACK_IMPORTED_MODULE_4__[\"DistanceType\"].EuclideanDistance:\n distance = Object(_utils_data_preprocessing__WEBPACK_IMPORTED_MODULE_2__[\"getDistance\"])(allPropertiesWeight[i], centroids[j], distanceType);\n break;\n default:\n break;\n }\n // 记录节点最近的质心的索引\n if (distance < minDistance) {\n minDistance = distance;\n minDistanceIndex = j;\n }\n }\n // 从原来的类别删除节点\n if (nodes[i].clusterId !== undefined) {\n for (var n = clusters[Number(nodes[i].clusterId)].length - 1; n >= 0; n--) {\n if (clusters[Number(nodes[i].clusterId)][n].id === nodes[i].id) {\n clusters[Number(nodes[i].clusterId)].splice(n, 1);\n }\n }\n }\n // 将节点划分到距离最小的质心(聚类中心)所对应的类中\n nodes[i].clusterId = String(minDistanceIndex);\n clusters[minDistanceIndex].push(nodes[i]);\n }\n }\n // 是否存在质心(聚类中心)移动\n var centroidsEqualAvg = false;\n for (var i = 0; i < clusters.length; i++) {\n var clusterNodes = clusters[i];\n var totalVector = new _utils_vector__WEBPACK_IMPORTED_MODULE_3__[\"default\"]([]);\n for (var j = 0; j < clusterNodes.length; j++) {\n totalVector = totalVector.add(new _utils_vector__WEBPACK_IMPORTED_MODULE_3__[\"default\"](allPropertiesWeight[clusterNodes[j].originIndex]));\n }\n // 计算每个类别的均值向量\n var avgVector = totalVector.avg(clusterNodes.length);\n // 如果均值向量不等于质心向量\n if (!avgVector.equal(new _utils_vector__WEBPACK_IMPORTED_MODULE_3__[\"default\"](centroids[i]))) {\n centroidsEqualAvg = true;\n // 移动/更新每个类别的质心(聚类中心)到该均值向量\n centroids[i] = avgVector.getArr();\n }\n }\n iterations++;\n // 如果每个节点都归属了类别,且不存在质心(聚类中心)移动或者迭代次数超过1000,则停止\n if (nodes.every(function (node) {\n return node.clusterId !== undefined;\n }) && centroidsEqualAvg || iterations >= 1000) {\n break;\n }\n }\n // get the cluster edges\n var clusterEdges = [];\n var clusterEdgeMap = {};\n edges.forEach(function (edge) {\n var _a, _b;\n var source = edge.source,\n target = edge.target;\n var sourceClusterId = (_a = nodes.find(function (node) {\n return node.id === source;\n })) === null || _a === void 0 ? void 0 : _a.clusterId;\n var targetClusterId = (_b = nodes.find(function (node) {\n return node.id === target;\n })) === null || _b === void 0 ? void 0 : _b.clusterId;\n var newEdgeId = \"\".concat(sourceClusterId, \"---\").concat(targetClusterId);\n if (clusterEdgeMap[newEdgeId]) {\n clusterEdgeMap[newEdgeId].count++;\n } else {\n var newEdge = {\n source: sourceClusterId,\n target: targetClusterId,\n count: 1\n };\n clusterEdgeMap[newEdgeId] = newEdge;\n clusterEdges.push(newEdge);\n }\n });\n return {\n clusters: clusters,\n clusterEdges: clusterEdges\n };\n};\n/* harmony default export */ __webpack_exports__[\"default\"] = (kMeans);\n\n//# sourceURL=webpack:///./node_modules/@antv/algorithm/es/k-means.js?");
/***/ }),
/***/ "./node_modules/@antv/algorithm/es/label-propagation.js":
/*!**************************************************************!*\
!*** ./node_modules/@antv/algorithm/es/label-propagation.js ***!
\**************************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _adjacent_matrix__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./adjacent-matrix */ \"./node_modules/@antv/algorithm/es/adjacent-matrix.js\");\n/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./util */ \"./node_modules/@antv/algorithm/es/util.js\");\n\n\n/**\n * 标签传播算法\n * @param graphData 图数据\n * @param directed 是否有向图,默认为 false\n * @param weightPropertyName 权重的属性字段\n * @param maxIteration 最大迭代次数\n */\nvar labelPropagation = function labelPropagation(graphData, directed, weightPropertyName, maxIteration) {\n if (directed === void 0) {\n directed = false;\n }\n if (weightPropertyName === void 0) {\n weightPropertyName = 'weight';\n }\n if (maxIteration === void 0) {\n maxIteration = 1000;\n }\n // the origin data\n var _a = graphData.nodes,\n nodes = _a === void 0 ? [] : _a,\n _b = graphData.edges,\n edges = _b === void 0 ? [] : _b;\n var clusters = {};\n var nodeMap = {};\n // init the clusters and nodeMap\n nodes.forEach(function (node, i) {\n var cid = Object(_util__WEBPACK_IMPORTED_MODULE_1__[\"uniqueId\"])();\n node.clusterId = cid;\n clusters[cid] = {\n id: cid,\n nodes: [node]\n };\n nodeMap[node.id] = {\n node: node,\n idx: i\n };\n });\n // the adjacent matrix of calNodes inside clusters\n var adjMatrix = Object(_adjacent_matrix__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(graphData, directed);\n // the sum of each row in adjacent matrix\n var ks = [];\n /**\n * neighbor nodes (id for key and weight for value) for each node\n * neighbors = {\n * id(node_id): { id(neighbor_1_id): weight(weight of the edge), id(neighbor_2_id): weight(weight of the edge), ... },\n * ...\n * }\n */\n var neighbors = {};\n adjMatrix.forEach(function (row, i) {\n var k = 0;\n var iid = nodes[i].id;\n neighbors[iid] = {};\n row.forEach(function (entry, j) {\n if (!entry) return;\n k += entry;\n var jid = nodes[j].id;\n neighbors[iid][jid] = entry;\n });\n ks.push(k);\n });\n var iter = 0;\n var _loop_1 = function _loop_1() {\n var changed = false;\n nodes.forEach(function (node) {\n var neighborClusters = {};\n Object.keys(neighbors[node.id]).forEach(function (neighborId) {\n var neighborWeight = neighbors[node.id][neighborId];\n var neighborNode = nodeMap[neighborId].node;\n var neighborClusterId = neighborNode.clusterId;\n if (!neighborClusters[neighborClusterId]) neighborClusters[neighborClusterId] = 0;\n neighborClusters[neighborClusterId] += neighborWeight;\n });\n // find the cluster with max weight\n var maxWeight = -Infinity;\n var bestClusterIds = [];\n Object.keys(neighborClusters).forEach(function (clusterId) {\n if (maxWeight < neighborClusters[clusterId]) {\n maxWeight = neighborClusters[clusterId];\n bestClusterIds = [clusterId];\n } else if (maxWeight === neighborClusters[clusterId]) {\n bestClusterIds.push(clusterId);\n }\n });\n if (bestClusterIds.length === 1 && bestClusterIds[0] === node.clusterId) return;\n var selfClusterIdx = bestClusterIds.indexOf(node.clusterId);\n if (selfClusterIdx >= 0) bestClusterIds.splice(selfClusterIdx, 1);\n if (bestClusterIds && bestClusterIds.length) {\n changed = true;\n // remove from origin cluster\n var selfCluster = clusters[node.clusterId];\n var nodeInSelfClusterIdx = selfCluster.nodes.indexOf(node);\n selfCluster.nodes.splice(nodeInSelfClusterIdx, 1);\n // move the node to the best cluster\n var randomIdx = Math.floor(Math.random() * bestClusterIds.length);\n var bestCluster = clusters[bestClusterIds[randomIdx]];\n bestCluster.nodes.push(node);\n node.clusterId = bestCluster.id;\n }\n });\n if (!changed) return \"break\";\n iter++;\n };\n while (iter < maxIteration) {\n var state_1 = _loop_1();\n if (state_1 === \"break\") break;\n }\n // delete the empty clusters\n Object.keys(clusters).forEach(function (clusterId) {\n var cluster = clusters[clusterId];\n if (!cluster.nodes || !cluster.nodes.length) {\n delete clusters[clusterId];\n }\n });\n // get the cluster edges\n var clusterEdges = [];\n var clusterEdgeMap = {};\n edges.forEach(function (edge) {\n var source = edge.source,\n target = edge.target;\n var weight = edge[weightPropertyName] || 1;\n var sourceClusterId = nodeMap[source].node.clusterId;\n var targetClusterId = nodeMap[target].node.clusterId;\n var newEdgeId = \"\".concat(sourceClusterId, \"---\").concat(targetClusterId);\n if (clusterEdgeMap[newEdgeId]) {\n clusterEdgeMap[newEdgeId].weight += weight;\n clusterEdgeMap[newEdgeId].count++;\n } else {\n var newEdge = {\n source: sourceClusterId,\n target: targetClusterId,\n weight: weight,\n count: 1\n };\n clusterEdgeMap[newEdgeId] = newEdge;\n clusterEdges.push(newEdge);\n }\n });\n var clustersArray = [];\n Object.keys(clusters).forEach(function (clusterId) {\n clustersArray.push(clusters[clusterId]);\n });\n return {\n clusters: clustersArray,\n clusterEdges: clusterEdges\n };\n};\n/* harmony default export */ __webpack_exports__[\"default\"] = (labelPropagation);\n\n//# sourceURL=webpack:///./node_modules/@antv/algorithm/es/label-propagation.js?");
/***/ }),
/***/ "./node_modules/@antv/algorithm/es/louvain.js":
/*!****************************************************!*\
!*** ./node_modules/@antv/algorithm/es/louvain.js ***!
\****************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _antv_util__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @antv/util */ \"./node_modules/@antv/util/esm/index.js\");\n/* harmony import */ var _adjacent_matrix__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./adjacent-matrix */ \"./node_modules/@antv/algorithm/es/adjacent-matrix.js\");\n/* harmony import */ var _utils_vector__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./utils/vector */ \"./node_modules/@antv/algorithm/es/utils/vector.js\");\n/* harmony import */ var _utils_node_properties__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./utils/node-properties */ \"./node_modules/@antv/algorithm/es/utils/node-properties.js\");\n/* harmony import */ var _utils_data_preprocessing__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./utils/data-preprocessing */ \"./node_modules/@antv/algorithm/es/utils/data-preprocessing.js\");\n\n\n\n\n\nvar getModularity = function getModularity(nodes, adjMatrix, ks, m) {\n var length = adjMatrix.length;\n var param = 2 * m;\n var modularity = 0;\n for (var i = 0; i < length; i++) {\n var clusteri = nodes[i].clusterId;\n for (var j = 0; j < length; j++) {\n var clusterj = nodes[j].clusterId;\n if (clusteri !== clusterj) continue;\n var entry = adjMatrix[i][j] || 0;\n var ki = ks[i] || 0;\n var kj = ks[j] || 0;\n modularity += entry - ki * kj / param;\n }\n }\n modularity *= 1 / param;\n return modularity;\n};\n// 模块惯性度,衡量属性相似度\nvar getInertialModularity = function getInertialModularity(nodes, allPropertiesWeight) {\n if (nodes === void 0) {\n nodes = [];\n }\n var length = nodes.length;\n var totalProperties = new _utils_vector__WEBPACK_IMPORTED_MODULE_2__[\"default\"]([]);\n for (var i = 0; i < length; i++) {\n totalProperties = totalProperties.add(new _utils_vector__WEBPACK_IMPORTED_MODULE_2__[\"default\"](allPropertiesWeight[i]));\n }\n // 均值向量\n var avgProperties = totalProperties.avg(length);\n avgProperties.normalize();\n // 节点集合的方差: 节点v与均值向量的平方欧式距离之和\n var variance = 0;\n for (var i = 0; i < length; i++) {\n var propertiesi = new _utils_vector__WEBPACK_IMPORTED_MODULE_2__[\"default\"](allPropertiesWeight[i]);\n var squareEuclideanDistance = propertiesi.squareEuclideanDistance(avgProperties);\n variance += squareEuclideanDistance;\n }\n // 任意两点间的欧式平方距离\n var squareEuclideanDistanceInfo = [];\n nodes.forEach(function () {\n squareEuclideanDistanceInfo.push([]);\n });\n for (var i = 0; i < length; i++) {\n var propertiesi = new _utils_vector__WEBPACK_IMPORTED_MODULE_2__[\"default\"](allPropertiesWeight[i]);\n nodes[i]['clusterInertial'] = 0;\n for (var j = 0; j < length; j++) {\n if (i === j) {\n squareEuclideanDistanceInfo[i][j] = 0;\n continue;\n }\n var propertiesj = new _utils_vector__WEBPACK_IMPORTED_MODULE_2__[\"default\"](allPropertiesWeight[j]);\n squareEuclideanDistanceInfo[i][j] = propertiesi.squareEuclideanDistance(propertiesj);\n nodes[i]['clusterInertial'] += squareEuclideanDistanceInfo[i][j];\n }\n }\n // 计算模块惯性度\n var inertialModularity = 0;\n var param = 2 * length * variance;\n for (var i = 0; i < length; i++) {\n var clusteri = nodes[i].clusterId;\n for (var j = 0; j < length; j++) {\n var clusterj = nodes[j].clusterId;\n if (i === j || clusteri !== clusterj) continue;\n var inertial = nodes[i].clusterInertial * nodes[j].clusterInertial / Math.pow(param, 2) - squareEuclideanDistanceInfo[i][j] / param;\n inertialModularity += inertial;\n }\n }\n return Number(inertialModularity.toFixed(4));\n};\n/**\n * 社区发现 louvain 算法\n * @param graphData 图数据\n * @param directed 是否有向图,默认为 false\n * @param weightPropertyName 权重的属性字段\n * @param threshold 差值阈值\n * @param inertialModularity 是否使用惯性模块度(即节点属性相似性)\n * @param propertyKey 属性的字段名\n * @param involvedKeys 参与计算的key集合\n * @param uninvolvedKeys 不参与计算的key集合\n * @param inertialWeight 惯性模块度权重\n */\nvar louvain = function louvain(graphData, directed, weightPropertyName, threshold, inertialModularity, propertyKey, involvedKeys, uninvolvedKeys, inertialWeight) {\n if (directed === void 0) {\n directed = false;\n }\n if (weightPropertyName === void 0) {\n weightPropertyName = 'weight';\n }\n if (threshold === void 0) {\n threshold = 0.0001;\n }\n if (inertialModularity === void 0) {\n inertialModularity = false;\n }\n if (propertyKey === void 0) {\n propertyKey = undefined;\n }\n if (involvedKeys === void 0) {\n involvedKeys = [];\n }\n if (uninvolvedKeys === void 0) {\n uninvolvedKeys = ['id'];\n }\n if (inertialWeight === void 0) {\n inertialWeight = 1;\n }\n // the origin data\n var _a = graphData.nodes,\n nodes = _a === void 0 ? [] : _a,\n _b = graphData.edges,\n edges = _b === void 0 ? [] : _b;\n var allPropertiesWeight = [];\n if (inertialModularity) {\n nodes.forEach(function (node, index) {\n node.properties = node.properties || {};\n node.originIndex = index;\n });\n var nodeTypeInfo_1 = [];\n if (nodes.every(function (node) {\n return node.hasOwnProperty('nodeType');\n })) {\n nodeTypeInfo_1 = Array.from(new Set(nodes.map(function (node) {\n return node.nodeType;\n })));\n nodes.forEach(function (node) {\n node.properties.nodeType = nodeTypeInfo_1.findIndex(function (nodeType) {\n return nodeType === node.nodeType;\n });\n });\n }\n // 所有节点属性集合\n var properties = Object(_utils_node_properties__WEBPACK_IMPORTED_MODULE_3__[\"getAllProperties\"])(nodes, propertyKey);\n // 所有节点属性one-hot特征向量集合\n allPropertiesWeight = Object(_utils_data_preprocessing__WEBPACK_IMPORTED_MODULE_4__[\"oneHot\"])(properties, involvedKeys, uninvolvedKeys);\n }\n var uniqueId = 1;\n var clusters = {};\n var nodeMap = {};\n // init the clusters and nodeMap\n nodes.forEach(function (node, i) {\n var cid = String(uniqueId++);\n node.clusterId = cid;\n clusters[cid] = {\n id: cid,\n nodes: [node]\n };\n nodeMap[node.id] = {\n node: node,\n idx: i\n };\n });\n // the adjacent matrix of calNodes inside clusters\n var adjMatrix = Object(_adjacent_matrix__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(graphData, directed);\n // the sum of each row in adjacent matrix\n var ks = [];\n /**\n * neighbor nodes (id for key and weight for value) for each node\n * neighbors = {\n * id(node_id): { id(neighbor_1_id): weight(weight of the edge), id(neighbor_2_id): weight(weight of the edge), ... },\n * ...\n * }\n */\n var neighbors = {};\n // the sum of the weights of all edges in the graph\n var m = 0;\n adjMatrix.forEach(function (row, i) {\n var k = 0;\n var iid = nodes[i].id;\n neighbors[iid] = {};\n row.forEach(function (entry, j) {\n if (!entry) return;\n k += entry;\n var jid = nodes[j].id;\n neighbors[iid][jid] = entry;\n m += entry;\n });\n ks.push(k);\n });\n m /= 2;\n var totalModularity = Infinity;\n var previousModularity = Infinity;\n var iter = 0;\n var finalNodes = [];\n var finalClusters = {};\n while (true) {\n if (inertialModularity && nodes.every(function (node) {\n return node.hasOwnProperty('properties');\n })) {\n totalModularity = getModularity(nodes, adjMatrix, ks, m) + getInertialModularity(nodes, allPropertiesWeight) * inertialWeight;\n } else {\n totalModularity = getModularity(nodes, adjMatrix, ks, m);\n }\n // 第一次迭代previousModularity直接赋值\n if (iter === 0) {\n previousModularity = totalModularity;\n finalNodes = nodes;\n finalClusters = clusters;\n }\n var increaseWithinThreshold = totalModularity > 0 && totalModularity > previousModularity && totalModularity - previousModularity < threshold;\n // 总模块度增加才更新最优解\n if (totalModularity > previousModularity) {\n finalNodes = nodes.map(function (node) {\n return {\n node: node,\n clusterId: node.clusterId\n };\n });\n finalClusters = Object(_antv_util__WEBPACK_IMPORTED_MODULE_0__[\"clone\"])(clusters);\n previousModularity = totalModularity;\n }\n // whether to terminate the iterations\n if (increaseWithinThreshold || iter > 100) {\n break;\n }\n ;\n iter++;\n // pre compute some values for current clusters\n Object.keys(clusters).forEach(function (clusterId) {\n // sum of weights of edges to nodes in cluster\n var sumTot = 0;\n edges.forEach(function (edge) {\n var source = edge.source,\n target = edge.target;\n var sourceClusterId = nodeMap[source].node.clusterId;\n var targetClusterId = nodeMap[target].node.clusterId;\n if (sourceClusterId === clusterId && targetClusterId !== clusterId || targetClusterId === clusterId && sourceClusterId !== clusterId) {\n sumTot = sumTot + (edge[weightPropertyName] || 1);\n }\n });\n clusters[clusterId].sumTot = sumTot;\n });\n // move the nodes to increase the delta modularity\n nodes.forEach(function (node, i) {\n var selfCluster = clusters[node.clusterId];\n var bestIncrease = 0;\n var bestCluster;\n var commonParam = ks[i] / (2 * m);\n // sum of weights of edges from node to nodes in cluster\n var kiin = 0;\n var selfClusterNodes = selfCluster.nodes;\n selfClusterNodes.forEach(function (scNode) {\n var scNodeIdx = nodeMap[scNode.id].idx;\n kiin += adjMatrix[i][scNodeIdx] || 0;\n });\n // the modurarity for **removing** the node i from the origin cluster of node i\n var removeModurarity = kiin - selfCluster.sumTot * commonParam;\n // nodes for **removing** node i into this neighbor cluster\n var selfClusterNodesAfterRemove = selfClusterNodes.filter(function (scNode) {\n return scNode.id !== node.id;\n });\n var propertiesWeightRemove = [];\n selfClusterNodesAfterRemove.forEach(function (nodeRemove, index) {\n propertiesWeightRemove[index] = allPropertiesWeight[nodeRemove.originIndex];\n });\n // the inertialModularity for **removing** the node i from the origin cluster of node i\n var removeInertialModularity = getInertialModularity(selfClusterNodesAfterRemove, allPropertiesWeight) * inertialWeight;\n // the neightbors of the node\n var nodeNeighborIds = neighbors[node.id];\n Object.keys(nodeNeighborIds).forEach(function (neighborNodeId) {\n var neighborNode = nodeMap[neighborNodeId].node;\n var neighborClusterId = neighborNode.clusterId;\n // if the node and the neighbor of node are in the same cluster, reutrn\n if (neighborClusterId === node.clusterId) return;\n var neighborCluster = clusters[neighborClusterId];\n var clusterNodes = neighborCluster.nodes;\n // if the cluster is empty, remove the cluster and return\n if (!clusterNodes || !clusterNodes.length) return;\n // sum of weights of edges from node to nodes in cluster\n var neighborClusterKiin = 0;\n clusterNodes.forEach(function (cNode) {\n var cNodeIdx = nodeMap[cNode.id].idx;\n neighborClusterKiin += adjMatrix[i][cNodeIdx] || 0;\n });\n // the modurarity for **adding** node i into this neighbor cluster\n var addModurarity = neighborClusterKiin - neighborCluster.sumTot * commonParam;\n // nodes for **adding** node i into this neighbor cluster\n var clusterNodesAfterAdd = clusterNodes.concat([node]);\n var propertiesWeightAdd = [];\n clusterNodesAfterAdd.forEach(function (nodeAdd, index) {\n propertiesWeightAdd[index] = allPropertiesWeight[nodeAdd.originIndex];\n });\n // the inertialModularity for **adding** node i into this neighbor cluster\n var addInertialModularity = getInertialModularity(clusterNodesAfterAdd, allPropertiesWeight) * inertialWeight;\n // the increase modurarity is the difference between addModurarity and removeModurarity\n var increase = addModurarity - removeModurarity;\n if (inertialModularity) {\n increase = addModurarity + addInertialModularity - (removeModurarity + removeInertialModularity);\n }\n // find the best cluster to move node i into\n if (increase > bestIncrease) {\n bestIncrease = increase;\n bestCluster = neighborCluster;\n }\n });\n // if found a best cluster to move into\n if (bestIncrease > 0) {\n bestCluster.nodes.push(node);\n var previousClusterId_1 = node.clusterId;\n node.clusterId = bestCluster.id;\n // move the node to the best cluster\n var nodeInSelfClusterIdx = selfCluster.nodes.indexOf(node);\n // remove from origin cluster\n selfCluster.nodes.splice(nodeInSelfClusterIdx, 1);\n // update sumTot for clusters\n // sum of weights of edges to nodes in cluster\n var neighborClusterSumTot_1 = 0;\n var selfClusterSumTot_1 = 0;\n edges.forEach(function (edge) {\n var source = edge.source,\n target = edge.target;\n var sourceClusterId = nodeMap[source].node.clusterId;\n var targetClusterId = nodeMap[target].node.clusterId;\n if (sourceClusterId === bestCluster.id && targetClusterId !== bestCluster.id || targetClusterId === bestCluster.id && sourceClusterId !== bestCluster.id) {\n neighborClusterSumTot_1 = neighborClusterSumTot_1 + (edge[weightPropertyName] || 1);\n }\n if (sourceClusterId === previousClusterId_1 && targetClusterId !== previousClusterId_1 || targetClusterId === previousClusterId_1 && sourceClusterId !== previousClusterId_1) {\n selfClusterSumTot_1 = selfClusterSumTot_1 + (edge[weightPropertyName] || 1);\n }\n });\n // the nodes of the clusters to move into and remove are changed, update their sumTot\n bestCluster.sumTot = neighborClusterSumTot_1;\n selfCluster.sumTot = selfClusterSumTot_1;\n }\n });\n }\n // delete the empty clusters, assign increasing clusterId\n var newClusterIdMap = {};\n var clusterIdx = 0;\n Object.keys(finalClusters).forEach(function (clusterId) {\n var cluster = finalClusters[clusterId];\n if (!cluster.nodes || !cluster.nodes.length) {\n delete finalClusters[clusterId];\n return;\n }\n var newId = String(clusterIdx + 1);\n if (newId === clusterId) {\n return;\n }\n cluster.id = newId;\n cluster.nodes = cluster.nodes.map(function (item) {\n return {\n id: item.id,\n clusterId: newId\n };\n });\n finalClusters[newId] = cluster;\n newClusterIdMap[clusterId] = newId;\n delete finalClusters[clusterId];\n clusterIdx++;\n });\n // restore node clusterId\n finalNodes.forEach(function (nodeInfo) {\n var node = nodeInfo.node,\n clusterId = nodeInfo.clusterId;\n if (!node) return;\n node.clusterId = clusterId;\n if (node.clusterId && newClusterIdMap[node.clusterId]) node.clusterId = newClusterIdMap[node.clusterId];\n });\n // get the cluster edges\n var clusterEdges = [];\n var clusterEdgeMap = {};\n edges.forEach(function (edge) {\n var source = edge.source,\n target = edge.target;\n var weight = edge[weightPropertyName] || 1;\n var sourceClusterId = nodeMap[source].node.clusterId;\n var targetClusterId = nodeMap[target].node.clusterId;\n if (!sourceClusterId || !targetClusterId) return;\n var newEdgeId = \"\".concat(sourceClusterId, \"---\").concat(targetClusterId);\n if (clusterEdgeMap[newEdgeId]) {\n clusterEdgeMap[newEdgeId].weight += weight;\n clusterEdgeMap[newEdgeId].count++;\n } else {\n var newEdge = {\n source: sourceClusterId,\n target: targetClusterId,\n weight: weight,\n count: 1\n };\n clusterEdgeMap[newEdgeId] = newEdge;\n clusterEdges.push(newEdge);\n }\n });\n var clustersArray = [];\n Object.keys(finalClusters).forEach(function (clusterId) {\n clustersArray.push(finalClusters[clusterId]);\n });\n return {\n clusters: clustersArray,\n clusterEdges: clusterEdges\n };\n};\n/* harmony default export */ __webpack_exports__[\"default\"] = (louvain);\n\n//# sourceURL=webpack:///./node_modules/@antv/algorithm/es/louvain.js?");
/***/ }),
/***/ "./node_modules/@antv/algorithm/es/mts.js":
/*!************************************************!*\
!*** ./node_modules/@antv/algorithm/es/mts.js ***!
\************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _structs_union_find__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./structs/union-find */ \"./node_modules/@antv/algorithm/es/structs/union-find.js\");\n/* harmony import */ var _structs_binary_heap__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./structs/binary-heap */ \"./node_modules/@antv/algorithm/es/structs/binary-heap.js\");\n/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./util */ \"./node_modules/@antv/algorithm/es/util.js\");\n\n\n\n/**\n * Prim algorithm,use priority queue,复杂度 O(E+V*logV), V: 节点数量,E: 边的数量\n * refer: https://en.wikipedia.org/wiki/Prim%27s_algorithm\n * @param graph\n * @param weight 指定用于作为边权重的属性,若不指定,则认为所有边权重一致\n */\nvar primMST = function primMST(graphData, weight) {\n var selectedEdges = [];\n var _a = graphData.nodes,\n nodes = _a === void 0 ? [] : _a,\n _b = graphData.edges,\n edges = _b === void 0 ? [] : _b;\n if (nodes.length === 0) {\n return selectedEdges;\n }\n // 从nodes[0]开始\n var currNode = nodes[0];\n var visited = new Set();\n visited.add(currNode);\n // 用二叉堆维护距已加入节点的其他节点的边的权值\n var compareWeight = function compareWeight(a, b) {\n if (weight) {\n return a.weight - b.weight;\n }\n return 0;\n };\n var edgeQueue = new _structs_binary_heap__WEBPACK_IMPORTED_MODULE_1__[\"default\"](compareWeight);\n Object(_util__WEBPACK_IMPORTED_MODULE_2__[\"getEdgesByNodeId\"])(currNode.id, edges).forEach(function (edge) {\n edgeQueue.insert(edge);\n });\n while (!edgeQueue.isEmpty()) {\n // 选取与已加入的结点之间边权最小的结点\n var currEdge = edgeQueue.delMin();\n var source = currEdge.source;\n var target = currEdge.target;\n if (visited.has(source) && visited.has(target)) continue;\n selectedEdges.push(currEdge);\n if (!visited.has(source)) {\n visited.add(source);\n Object(_util__WEBPACK_IMPORTED_MODULE_2__[\"getEdgesByNodeId\"])(source, edges).forEach(function (edge) {\n edgeQueue.insert(edge);\n });\n }\n if (!visited.has(target)) {\n visited.add(target);\n Object(_util__WEBPACK_IMPORTED_MODULE_2__[\"getEdgesByNodeId\"])(target, edges).forEach(function (edge) {\n edgeQueue.insert(edge);\n });\n }\n }\n return selectedEdges;\n};\n/**\n * Kruskal algorithm,复杂度 O(E*logE), E: 边的数量\n * refer: https://en.wikipedia.org/wiki/Kruskal%27s_algorithm\n * @param graph\n * @param weight 指定用于作为边权重的属性,若不指定,则认为所有边权重一致\n * @return IEdge[] 返回构成MST的边的数组\n */\nvar kruskalMST = function kruskalMST(graphData, weight) {\n var selectedEdges = [];\n var _a = graphData.nodes,\n nodes = _a === void 0 ? [] : _a,\n _b = graphData.edges,\n edges = _b === void 0 ? [] : _b;\n if (nodes.length === 0) {\n return selectedEdges;\n }\n // 若指定weight,则将所有的边按权值从小到大排序\n var weightEdges = edges.map(function (edge) {\n return edge;\n });\n if (weight) {\n weightEdges.sort(function (a, b) {\n return a.weight - b.weight;\n });\n }\n var disjointSet = new _structs_union_find__WEBPACK_IMPORTED_MODULE_0__[\"default\"](nodes.map(function (n) {\n return n.id;\n }));\n // 从权值最小的边开始,如果这条边连接的两个节点于图G中不在同一个连通分量中,则添加这条边\n // 直到遍历完所有点或边\n while (weightEdges.length > 0) {\n var curEdge = weightEdges.shift();\n var source = curEdge.source;\n var target = curEdge.target;\n if (!disjointSet.connected(source, target)) {\n selectedEdges.push(curEdge);\n disjointSet.union(source, target);\n }\n }\n return selectedEdges;\n};\n/**\n * 最小生成树\n * refer: https://en.wikipedia.org/wiki/Kruskal%27s_algorithm\n * @param graph\n * @param weight 指定用于作为边权重的属性,若不指定,则认为所有边权重一致\n * @param algo 'prim' | 'kruskal' 算法类型\n * @return EdgeConfig[] 返回构成MST的边的数组\n */\nvar minimumSpanningTree = function minimumSpanningTree(graphData, weight, algo) {\n var algos = {\n prim: primMST,\n kruskal: kruskalMST\n };\n if (!algo) return kruskalMST(graphData, weight);\n return algos[algo](graphData, weight);\n};\n/* harmony default export */ __webpack_exports__[\"default\"] = (minimumSpanningTree);\n\n//# sourceURL=webpack:///./node_modules/@antv/algorithm/es/mts.js?");
/***/ }),
/***/ "./node_modules/@antv/algorithm/es/nodes-cosine-similarity.js":
/*!********************************************************************!*\
!*** ./node_modules/@antv/algorithm/es/nodes-cosine-similarity.js ***!
\********************************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _antv_util__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @antv/util */ \"./node_modules/@antv/util/esm/index.js\");\n/* harmony import */ var _utils_node_properties__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./utils/node-properties */ \"./node_modules/@antv/algorithm/es/utils/node-properties.js\");\n/* harmony import */ var _utils_data_preprocessing__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./utils/data-preprocessing */ \"./node_modules/@antv/algorithm/es/utils/data-preprocessing.js\");\n/* harmony import */ var _cosine_similarity__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./cosine-similarity */ \"./node_modules/@antv/algorithm/es/cosine-similarity.js\");\n\n\n\n\n/**\n * nodes-cosine-similarity算法 基于节点属性计算余弦相似度(基于种子节点寻找相似节点)\n * @param nodes 图节点数据\n * @param seedNode 种子节点\n * @param propertyKey 属性的字段名\n * @param involvedKeys 参与计算的key集合\n * @param uninvolvedKeys 不参与计算的key集合\n */\nvar nodesCosineSimilarity = function nodesCosineSimilarity(nodes, seedNode, propertyKey, involvedKeys, uninvolvedKeys) {\n if (nodes === void 0) {\n nodes = [];\n }\n if (propertyKey === void 0) {\n propertyKey = undefined;\n }\n if (involvedKeys === void 0) {\n involvedKeys = [];\n }\n if (uninvolvedKeys === void 0) {\n uninvolvedKeys = [];\n }\n var similarNodes = Object(_antv_util__WEBPACK_IMPORTED_MODULE_0__[\"clone\"])(nodes.filter(function (node) {\n return node.id !== seedNode.id;\n }));\n var seedNodeIndex = nodes.findIndex(function (node) {\n return node.id === seedNode.id;\n });\n // 所有节点属性集合\n var properties = Object(_utils_node_properties__WEBPACK_IMPORTED_MODULE_1__[\"getAllProperties\"])(nodes, propertyKey);\n // 所有节点属性one-hot特征向量集合\n var allPropertiesWeight = Object(_utils_data_preprocessing__WEBPACK_IMPORTED_MODULE_2__[\"oneHot\"])(properties, involvedKeys, uninvolvedKeys);\n // 种子节点属性\n var seedNodeProperties = allPropertiesWeight[seedNodeIndex];\n var allCosineSimilarity = [];\n similarNodes.forEach(function (node, index) {\n if (node.id !== seedNode.id) {\n // 节点属性\n var nodeProperties = allPropertiesWeight[index];\n // 计算节点向量和种子节点向量的余弦相似度\n var cosineSimilarityValue = Object(_cosine_similarity__WEBPACK_IMPORTED_MODULE_3__[\"default\"])(nodeProperties, seedNodeProperties);\n allCosineSimilarity.push(cosineSimilarityValue);\n node.cosineSimilarity = cosineSimilarityValue;\n }\n });\n // 将返回的节点按照余弦相似度大小排序\n similarNodes.sort(function (a, b) {\n return b.cosineSimilarity - a.cosineSimilarity;\n });\n return {\n allCosineSimilarity: allCosineSimilarity,\n similarNodes: similarNodes\n };\n};\n/* harmony default export */ __webpack_exports__[\"default\"] = (nodesCosineSimilarity);\n\n//# sourceURL=webpack:///./node_modules/@antv/algorithm/es/nodes-cosine-similarity.js?");
/***/ }),
/***/ "./node_modules/@antv/algorithm/es/pageRank.js":
/*!*****************************************************!*\
!*** ./node_modules/@antv/algorithm/es/pageRank.js ***!
\*****************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _degree__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./degree */ \"./node_modules/@antv/algorithm/es/degree.js\");\n/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./util */ \"./node_modules/@antv/algorithm/es/util.js\");\n\n\n/**\n * PageRank https://en.wikipedia.org/wiki/PageRank\n * refer: https://github.com/anvaka/ngraph.pagerank\n * @param graph\n * @param epsilon 判断是否收敛的精度值,默认 0.000001\n * @param linkProb 阻尼系数(dumping factor),指任意时刻,用户访问到某节点后继续访问该节点链接的下一个节点的概率,经验值 0.85\n */\nvar pageRank = function pageRank(graphData, epsilon, linkProb) {\n if (typeof epsilon !== 'number') epsilon = 0.000001;\n if (typeof linkProb !== 'number') linkProb = 0.85;\n var distance = 1;\n var leakedRank = 0;\n var maxIterations = 1000;\n var _a = graphData.nodes,\n nodes = _a === void 0 ? [] : _a,\n _b = graphData.edges,\n edges = _b === void 0 ? [] : _b;\n var nodesCount = nodes.length;\n var currentRank;\n var curRanks = {};\n var prevRanks = {};\n // Initialize pageranks 初始化\n for (var j = 0; j < nodesCount; ++j) {\n var node = nodes[j];\n var nodeId = node.id;\n curRanks[nodeId] = 1 / nodesCount;\n prevRanks[nodeId] = 1 / nodesCount;\n }\n var nodeDegree = Object(_degree__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(graphData);\n while (maxIterations > 0 && distance > epsilon) {\n leakedRank = 0;\n for (var j = 0; j < nodesCount; ++j) {\n var node = nodes[j];\n var nodeId = node.id;\n currentRank = 0;\n if (nodeDegree[node.id].inDegree === 0) {\n curRanks[nodeId] = 0;\n } else {\n var neighbors = Object(_util__WEBPACK_IMPORTED_MODULE_1__[\"getNeighbors\"])(nodeId, edges, 'source');\n for (var i = 0; i < neighbors.length; ++i) {\n var neighbor = neighbors[i];\n var outDegree = nodeDegree[neighbor].outDegree;\n if (outDegree > 0) currentRank += prevRanks[neighbor] / outDegree;\n }\n curRanks[nodeId] = linkProb * currentRank;\n leakedRank += curRanks[nodeId];\n }\n }\n leakedRank = (1 - leakedRank) / nodesCount;\n distance = 0;\n for (var j = 0; j < nodesCount; ++j) {\n var node = nodes[j];\n var nodeId = node.id;\n currentRank = curRanks[nodeId] + leakedRank;\n distance += Math.abs(currentRank - prevRanks[nodeId]);\n prevRanks[nodeId] = currentRank;\n }\n maxIterations -= 1;\n }\n return prevRanks;\n};\n/* harmony default export */ __webpack_exports__[\"default\"] = (pageRank);\n\n//# sourceURL=webpack:///./node_modules/@antv/algorithm/es/pageRank.js?");
/***/ }),
/***/ "./node_modules/@antv/algorithm/es/structs/binary-heap.js":
/*!****************************************************************!*\
!*** ./node_modules/@antv/algorithm/es/structs/binary-heap.js ***!
\****************************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\nvar defaultCompare = function defaultCompare(a, b) {\n return a - b;\n};\nvar MinBinaryHeap = /** @class */function () {\n function MinBinaryHeap(compareFn) {\n if (compareFn === void 0) {\n compareFn = defaultCompare;\n }\n this.compareFn = compareFn;\n this.list = [];\n }\n MinBinaryHeap.prototype.getLeft = function (index) {\n return 2 * index + 1;\n };\n MinBinaryHeap.prototype.getRight = function (index) {\n return 2 * index + 2;\n };\n MinBinaryHeap.prototype.getParent = function (index) {\n if (index === 0) {\n return null;\n }\n return Math.floor((index - 1) / 2);\n };\n MinBinaryHeap.prototype.isEmpty = function () {\n return this.list.length <= 0;\n };\n MinBinaryHeap.prototype.top = function () {\n return this.isEmpty() ? undefined : this.list[0];\n };\n MinBinaryHeap.prototype.delMin = function () {\n var top = this.top();\n var bottom = this.list.pop();\n if (this.list.length > 0) {\n this.list[0] = bottom;\n this.moveDown(0);\n }\n return top;\n };\n MinBinaryHeap.prototype.insert = function (value) {\n if (value !== null) {\n this.list.push(value);\n var index = this.list.length - 1;\n this.moveUp(index);\n return true;\n }\n return false;\n };\n MinBinaryHeap.prototype.moveUp = function (index) {\n var parent = this.getParent(index);\n while (index && index > 0 && this.compareFn(this.list[parent], this.list[index]) > 0) {\n // swap\n var tmp = this.list[parent];\n this.list[parent] = this.list[index];\n this.list[index] = tmp;\n // [this.list[index], this.list[parent]] = [this.list[parent], this.list[index]]\n index = parent;\n parent = this.getParent(index);\n }\n };\n MinBinaryHeap.prototype.moveDown = function (index) {\n var _a;\n var element = index;\n var left = this.getLeft(index);\n var right = this.getRight(index);\n var size = this.list.length;\n if (left !== null && left < size && this.compareFn(this.list[element], this.list[left]) > 0) {\n element = left;\n } else if (right !== null && right < size && this.compareFn(this.list[element], this.list[right]) > 0) {\n element = right;\n }\n if (index !== element) {\n _a = [this.list[element], this.list[index]], this.list[index] = _a[0], this.list[element] = _a[1];\n this.moveDown(element);\n }\n };\n return MinBinaryHeap;\n}();\n/* harmony default export */ __webpack_exports__[\"default\"] = (MinBinaryHeap);\n\n//# sourceURL=webpack:///./node_modules/@antv/algorithm/es/structs/binary-heap.js?");
/***/ }),
/***/ "./node_modules/@antv/algorithm/es/structs/linked-list.js":
/*!****************************************************************!*\
!*** ./node_modules/@antv/algorithm/es/structs/linked-list.js ***!
\****************************************************************/
/*! exports provided: LinkedListNode, default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"LinkedListNode\", function() { return LinkedListNode; });\nvar defaultComparator = function defaultComparator(a, b) {\n if (a === b) {\n return true;\n }\n return false;\n};\n/**\n * 链表中单个元素节点\n */\nvar LinkedListNode = /** @class */function () {\n function LinkedListNode(value, next) {\n if (next === void 0) {\n next = null;\n }\n this.value = value;\n this.next = next;\n }\n LinkedListNode.prototype.toString = function (callback) {\n return callback ? callback(this.value) : \"\".concat(this.value);\n };\n return LinkedListNode;\n}();\n\nvar LinkedList = /** @class */function () {\n function LinkedList(comparator) {\n if (comparator === void 0) {\n comparator = defaultComparator;\n }\n this.head = null;\n this.tail = null;\n this.compare = comparator;\n }\n /**\n * 将指定元素添加到链表头部\n * @param value\n */\n LinkedList.prototype.prepend = function (value) {\n // 在头部添加一个节点\n var newNode = new LinkedListNode(value, this.head);\n this.head = newNode;\n if (!this.tail) {\n this.tail = newNode;\n }\n return this;\n };\n /**\n * 将指定元素添加到链表中\n * @param value\n */\n LinkedList.prototype.append = function (value) {\n var newNode = new LinkedListNode(value);\n // 如果不存在头节点,则将创建的新节点作为头节点\n if (!this.head) {\n this.head = newNode;\n this.tail = newNode;\n return this;\n }\n // 将新节点附加到链表末尾\n this.tail.next = newNode;\n this.tail = newNode;\n return this;\n };\n /**\n * 删除指定元素\n * @param value 要删除的元素\n */\n LinkedList.prototype.delete = function (value) {\n if (!this.head) {\n return null;\n }\n var deleteNode = null;\n // 如果删除的是头部元素,则将next作为头元素\n while (this.head && this.compare(this.head.value, value)) {\n deleteNode = this.head;\n this.head = this.head.next;\n }\n var currentNode = this.head;\n if (currentNode !== null) {\n // 如果删除了节点以后,将next节点前移\n while (currentNode.next) {\n if (this.compare(currentNode.next.value, value)) {\n deleteNode = currentNode.next;\n currentNode.next = currentNode.next.next;\n } else {\n currentNode = currentNode.next;\n }\n }\n }\n // 检查尾部节点是否被删除\n if (this.compare(this.tail.value, value)) {\n this.tail = currentNode;\n }\n return deleteNode;\n };\n /**\n * 查找指定的元素\n * @param param0\n */\n LinkedList.prototype.find = function (_a) {\n var _b = _a.value,\n value = _b === void 0 ? undefined : _b,\n _c = _a.callback,\n callback = _c === void 0 ? undefined : _c;\n if (!this.head) {\n return null;\n }\n var currentNode = this.head;\n while (currentNode) {\n // 如果指定了 callback,则按指定的 callback 查找\n if (callback && callback(currentNode.value)) {\n return currentNode;\n }\n // 如果指定了 value,则按 value 查找\n if (value !== undefined && this.compare(currentNode.value, value)) {\n return currentNode;\n }\n currentNode = currentNode.next;\n }\n return null;\n };\n /**\n * 删除尾部节点\n */\n LinkedList.prototype.deleteTail = function () {\n var deletedTail = this.tail;\n if (this.head === this.tail) {\n // 链表中只有一个元素\n this.head = null;\n this.tail = null;\n return deletedTail;\n }\n var currentNode = this.head;\n while (currentNode.next) {\n if (!currentNode.next.next) {\n currentNode.next = null;\n } else {\n currentNode = currentNode.next;\n }\n }\n this.tail = currentNode;\n return deletedTail;\n };\n /**\n * 删除头部节点\n */\n LinkedList.prototype.deleteHead = function () {\n if (!this.head) {\n return null;\n }\n var deletedHead = this.head;\n if (this.head.next) {\n this.head = this.head.next;\n } else {\n this.head = null;\n this.tail = null;\n }\n return deletedHead;\n };\n /**\n * 将一组元素转成链表中的节点\n * @param values 链表中的元素\n */\n LinkedList.prototype.fromArray = function (values) {\n var _this = this;\n values.forEach(function (value) {\n return _this.append(value);\n });\n return this;\n };\n /**\n * 将链表中的节点转成数组元素\n */\n LinkedList.prototype.toArray = function () {\n var nodes = [];\n var currentNode = this.head;\n while (currentNode) {\n nodes.push(currentNode);\n currentNode = currentNode.next;\n }\n return nodes;\n };\n /**\n * 反转链表中的元素节点\n */\n LinkedList.prototype.reverse = function () {\n var currentNode = this.head;\n var prevNode = null;\n var nextNode = null;\n while (currentNode) {\n // 存储下一个元素节点\n nextNode = currentNode.next;\n // 更改当前节点的下一个节点,以便将它连接到上一个节点上\n currentNode.next = prevNode;\n // 将 prevNode 和 currentNode 向前移动一步\n prevNode = currentNode;\n currentNode = nextNode;\n }\n this.tail = this.head;\n this.head = prevNode;\n };\n LinkedList.prototype.toString = function (callback) {\n if (callback === void 0) {\n callback = undefined;\n }\n return this.toArray().map(function (node) {\n return node.toString(callback);\n }).toString();\n };\n return LinkedList;\n}();\n/* harmony default export */ __webpack_exports__[\"default\"] = (LinkedList);\n\n//# sourceURL=webpack:///./node_modules/@antv/algorithm/es/structs/linked-list.js?");
/***/ }),
/***/ "./node_modules/@antv/algorithm/es/structs/queue.js":
/*!**********************************************************!*\
!*** ./node_modules/@antv/algorithm/es/structs/queue.js ***!
\**********************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _linked_list__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./linked-list */ \"./node_modules/@antv/algorithm/es/structs/linked-list.js\");\n\nvar Queue = /** @class */function () {\n function Queue() {\n this.linkedList = new _linked_list__WEBPACK_IMPORTED_MODULE_0__[\"default\"]();\n }\n /**\n * 队列是否为空\n */\n Queue.prototype.isEmpty = function () {\n return !this.linkedList.head;\n };\n /**\n * 读取队列头部的元素, 不删除队列中的元素\n */\n Queue.prototype.peek = function () {\n if (!this.linkedList.head) {\n return null;\n }\n return this.linkedList.head.value;\n };\n /**\n * 在队列的尾部新增一个元素\n * @param value\n */\n Queue.prototype.enqueue = function (value) {\n this.linkedList.append(value);\n };\n /**\n * 删除队列中的头部元素,如果队列为空,则返回 null\n */\n Queue.prototype.dequeue = function () {\n var removeHead = this.linkedList.deleteHead();\n return removeHead ? removeHead.value : null;\n };\n Queue.prototype.toString = function (callback) {\n return this.linkedList.toString(callback);\n };\n return Queue;\n}();\n/* harmony default export */ __webpack_exports__[\"default\"] = (Queue);\n\n//# sourceURL=webpack:///./node_modules/@antv/algorithm/es/structs/queue.js?");
/***/ }),
/***/ "./node_modules/@antv/algorithm/es/structs/stack.js":
/*!**********************************************************!*\
!*** ./node_modules/@antv/algorithm/es/structs/stack.js ***!
\**********************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _linked_list__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./linked-list */ \"./node_modules/@antv/algorithm/es/structs/linked-list.js\");\n\nvar Stack = /** @class */function () {\n function Stack(maxStep) {\n if (maxStep === void 0) {\n maxStep = 10;\n }\n this.linkedList = new _linked_list__WEBPACK_IMPORTED_MODULE_0__[\"default\"]();\n this.maxStep = maxStep;\n }\n Object.defineProperty(Stack.prototype, \"length\", {\n get: function get() {\n return this.linkedList.toArray().length;\n },\n enumerable: false,\n configurable: true\n });\n /**\n * 判断栈是否为空,如果链表中没有头部元素,则栈为空\n */\n Stack.prototype.isEmpty = function () {\n return !this.linkedList.head;\n };\n /**\n * 是否到定义的栈的最大长度,如果达到最大长度后,不再允许入栈\n */\n Stack.prototype.isMaxStack = function () {\n return this.toArray().length >= this.maxStep;\n };\n /**\n * 访问顶端元素\n */\n Stack.prototype.peek = function () {\n if (this.isEmpty()) {\n return null;\n }\n // 返回头部元素,不删除元素\n return this.linkedList.head.value;\n };\n Stack.prototype.push = function (value) {\n this.linkedList.prepend(value);\n if (this.length > this.maxStep) {\n this.linkedList.deleteTail();\n }\n };\n Stack.prototype.pop = function () {\n var removeHead = this.linkedList.deleteHead();\n return removeHead ? removeHead.value : null;\n };\n Stack.prototype.toArray = function () {\n return this.linkedList.toArray().map(function (node) {\n return node.value;\n });\n };\n Stack.prototype.clear = function () {\n while (!this.isEmpty()) {\n this.pop();\n }\n };\n return Stack;\n}();\n/* harmony default export */ __webpack_exports__[\"default\"] = (Stack);\n\n//# sourceURL=webpack:///./node_modules/@antv/algorithm/es/structs/stack.js?");
/***/ }),
/***/ "./node_modules/@antv/algorithm/es/structs/union-find.js":
/*!***************************************************************!*\
!*** ./node_modules/@antv/algorithm/es/structs/union-find.js ***!
\***************************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/**\n * 并查集 Disjoint set to support quick union\n */\nvar UnionFind = /** @class */function () {\n function UnionFind(items) {\n this.count = items.length;\n this.parent = {};\n for (var _i = 0, items_1 = items; _i < items_1.length; _i++) {\n var i = items_1[_i];\n this.parent[i] = i;\n }\n }\n // find the root of the item\n UnionFind.prototype.find = function (item) {\n while (this.parent[item] !== item) {\n item = this.parent[item];\n }\n return item;\n };\n UnionFind.prototype.union = function (a, b) {\n var rootA = this.find(a);\n var rootB = this.find(b);\n if (rootA === rootB) return;\n // make the element with smaller root the parent\n if (rootA < rootB) {\n if (this.parent[b] !== b) this.union(this.parent[b], a);\n this.parent[b] = this.parent[a];\n } else {\n if (this.parent[a] !== a) this.union(this.parent[a], b);\n this.parent[a] = this.parent[b];\n }\n };\n // whether a and b are connected, i.e. a and b have the same root\n UnionFind.prototype.connected = function (a, b) {\n return this.find(a) === this.find(b);\n };\n return UnionFind;\n}();\n/* harmony default export */ __webpack_exports__[\"default\"] = (UnionFind);\n\n//# sourceURL=webpack:///./node_modules/@antv/algorithm/es/structs/union-find.js?");
/***/ }),
/***/ "./node_modules/@antv/algorithm/es/types.js":
/*!**************************************************!*\
!*** ./node_modules/@antv/algorithm/es/types.js ***!
\**************************************************/
/*! exports provided: DistanceType */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"DistanceType\", function() { return DistanceType; });\nvar DistanceType;\n(function (DistanceType) {\n DistanceType[\"EuclideanDistance\"] = \"euclideanDistance\";\n})(DistanceType || (DistanceType = {}));\n\n//# sourceURL=webpack:///./node_modules/@antv/algorithm/es/types.js?");
/***/ }),
/***/ "./node_modules/@antv/algorithm/es/util.js":
/*!*************************************************!*\
!*** ./node_modules/@antv/algorithm/es/util.js ***!
\*************************************************/
/*! exports provided: getNeighbors, getOutEdgesNodeId, getEdgesByNodeId, uniqueId */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"getNeighbors\", function() { return getNeighbors; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"getOutEdgesNodeId\", function() { return getOutEdgesNodeId; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"getEdgesByNodeId\", function() { return getEdgesByNodeId; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"uniqueId\", function() { return uniqueId; });\n/**\n * 获取指定节点的所有邻居\n * @param nodeId 节点 ID\n * @param edges 图中的所有边数据\n * @param type 邻居类型\n */\nvar getNeighbors = function getNeighbors(nodeId, edges, type) {\n if (edges === void 0) {\n edges = [];\n }\n var currentEdges = edges.filter(function (edge) {\n return edge.source === nodeId || edge.target === nodeId;\n });\n if (type === 'target') {\n // 当前节点为 source,它所指向的目标节点\n var neighhborsConverter_1 = function neighhborsConverter_1(edge) {\n return edge.source === nodeId;\n };\n return currentEdges.filter(neighhborsConverter_1).map(function (edge) {\n return edge.target;\n });\n }\n if (type === 'source') {\n // 当前节点为 target,它所指向的源节点\n var neighhborsConverter_2 = function neighhborsConverter_2(edge) {\n return edge.target === nodeId;\n };\n return currentEdges.filter(neighhborsConverter_2).map(function (edge) {\n return edge.source;\n });\n }\n // 若未指定 type ,则返回所有邻居\n var neighhborsConverter = function neighhborsConverter(edge) {\n return edge.source === nodeId ? edge.target : edge.source;\n };\n return currentEdges.map(neighhborsConverter);\n};\n/**\n * 获取指定节点的出边\n * @param nodeId 节点 ID\n * @param edges 图中的所有边数据\n */\nvar getOutEdgesNodeId = function getOutEdgesNodeId(nodeId, edges) {\n return edges.filter(function (edge) {\n return edge.source === nodeId;\n });\n};\n/**\n * 获取指定节点的边,包括出边和入边\n * @param nodeId 节点 ID\n * @param edges 图中的所有边数据\n */\nvar getEdgesByNodeId = function getEdgesByNodeId(nodeId, edges) {\n return edges.filter(function (edge) {\n return edge.source === nodeId || edge.target === nodeId;\n });\n};\n/**\n * 生成唯一的 ID,规则是序号 + 时间戳\n * @param index 序号\n */\nvar uniqueId = function uniqueId(index) {\n if (index === void 0) {\n index = 0;\n }\n var random1 = \"\".concat(Math.random()).split('.')[1].substr(0, 5);\n var random2 = \"\".concat(Math.random()).split('.')[1].substr(0, 5);\n return \"\".concat(index, \"-\").concat(random1).concat(random2);\n};\n\n//# sourceURL=webpack:///./node_modules/@antv/algorithm/es/util.js?");
/***/ }),
/***/ "./node_modules/@antv/algorithm/es/utils/data-preprocessing.js":
/*!*********************************************************************!*\
!*** ./node_modules/@antv/algorithm/es/utils/data-preprocessing.js ***!
\*********************************************************************/
/*! exports provided: getAllKeyValueMap, oneHot, getDistance, default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"getAllKeyValueMap\", function() { return getAllKeyValueMap; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"oneHot\", function() { return oneHot; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"getDistance\", function() { return getDistance; });\n/* harmony import */ var _antv_util__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @antv/util */ \"./node_modules/@antv/util/esm/index.js\");\n/* harmony import */ var _types__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../types */ \"./node_modules/@antv/algorithm/es/types.js\");\n/* harmony import */ var _vector__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./vector */ \"./node_modules/@antv/algorithm/es/utils/vector.js\");\n\n\n\n/**\n * 获取数据中所有的属性及其对应的值\n * @param dataList 数据集\n * @param involvedKeys 参与计算的key集合\n * @param uninvolvedKeys 不参与计算的key集合\n */\nvar getAllKeyValueMap = function getAllKeyValueMap(dataList, involvedKeys, uninvolvedKeys) {\n var keys = [];\n // 指定了参与计算的keys时,使用指定的keys\n if (involvedKeys === null || involvedKeys === void 0 ? void 0 : involvedKeys.length) {\n keys = involvedKeys;\n } else {\n // 未指定抽取的keys时,提取数据中所有的key\n dataList.forEach(function (data) {\n keys = keys.concat(Object.keys(data));\n });\n keys = Object(_antv_util__WEBPACK_IMPORTED_MODULE_0__[\"uniq\"])(keys);\n }\n // 获取所有值非空的key的value数组\n var allKeyValueMap = {};\n keys.forEach(function (key) {\n var value = [];\n dataList.forEach(function (data) {\n if (data[key] !== undefined && data[key] !== '') {\n value.push(data[key]);\n }\n });\n if (value.length && !(uninvolvedKeys === null || uninvolvedKeys === void 0 ? void 0 : uninvolvedKeys.includes(key))) {\n allKeyValueMap[key] = Object(_antv_util__WEBPACK_IMPORTED_MODULE_0__[\"uniq\"])(value);\n }\n });\n return allKeyValueMap;\n};\n/**\n * one-hot编码:数据特征提取\n * @param dataList 数据集\n * @param involvedKeys 参与计算的的key集合\n * @param uninvolvedKeys 不参与计算的key集合\n */\nvar oneHot = function oneHot(dataList, involvedKeys, uninvolvedKeys) {\n // 获取数据中所有的属性/特征及其对应的值\n var allKeyValueMap = getAllKeyValueMap(dataList, involvedKeys, uninvolvedKeys);\n var oneHotCode = [];\n if (!Object.keys(allKeyValueMap).length) {\n return oneHotCode;\n }\n // 获取所有的属性/特征值\n var allValue = Object.values(allKeyValueMap);\n // 是否所有属性/特征的值都是数值型\n var isAllNumber = allValue.every(function (value) {\n return value.every(function (item) {\n return typeof item === 'number';\n });\n });\n // 对数据进行one-hot编码\n dataList.forEach(function (data, index) {\n var code = [];\n Object.keys(allKeyValueMap).forEach(function (key) {\n var keyValue = data[key];\n var allKeyValue = allKeyValueMap[key];\n var valueIndex = allKeyValue.findIndex(function (value) {\n return keyValue === value;\n });\n var subCode = [];\n // 如果属性/特征所有的值都能转成数值型,不满足分箱,则直接用值(todo: 为了收敛更快,需做归一化处理)\n if (isAllNumber) {\n subCode.push(keyValue);\n } else {\n // 进行one-hot编码\n for (var i = 0; i < allKeyValue.length; i++) {\n if (i === valueIndex) {\n subCode.push(1);\n } else {\n subCode.push(0);\n }\n }\n }\n code = code.concat(subCode);\n });\n oneHotCode[index] = code;\n });\n return oneHotCode;\n};\n/**\n * getDistance:获取两个元素之间的距离\n * @param item\n * @param otherItem\n * @param distanceType 距离类型\n * @param graphData 图数据\n */\nvar getDistance = function getDistance(item, otherItem, distanceType, graphData) {\n if (distanceType === void 0) {\n distanceType = _types__WEBPACK_IMPORTED_MODULE_1__[\"DistanceType\"].EuclideanDistance;\n }\n var distance = 0;\n switch (distanceType) {\n case _types__WEBPACK_IMPORTED_MODULE_1__[\"DistanceType\"].EuclideanDistance:\n distance = new _vector__WEBPACK_IMPORTED_MODULE_2__[\"default\"](item).euclideanDistance(new _vector__WEBPACK_IMPORTED_MODULE_2__[\"default\"](otherItem));\n break;\n default:\n break;\n }\n return distance;\n};\n/* harmony default export */ __webpack_exports__[\"default\"] = ({\n getAllKeyValueMap: getAllKeyValueMap,\n oneHot: oneHot,\n getDistance: getDistance\n});\n\n//# sourceURL=webpack:///./node_modules/@antv/algorithm/es/utils/data-preprocessing.js?");
/***/ }),
/***/ "./node_modules/@antv/algorithm/es/utils/node-properties.js":
/*!******************************************************************!*\
!*** ./node_modules/@antv/algorithm/es/utils/node-properties.js ***!
\******************************************************************/
/*! exports provided: getAllSortProperties, getPropertyWeight, getAllProperties, default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"getAllSortProperties\", function() { return getAllSortProperties; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"getPropertyWeight\", function() { return getPropertyWeight; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"getAllProperties\", function() { return getAllProperties; });\n/* harmony import */ var _constants_time__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../constants/time */ \"./node_modules/@antv/algorithm/es/constants/time.js\");\n\n// 获取所有属性并排序\nvar getAllSortProperties = function getAllSortProperties(nodes, n) {\n if (nodes === void 0) {\n nodes = [];\n }\n if (n === void 0) {\n n = 100;\n }\n var propertyKeyInfo = {};\n nodes.forEach(function (node) {\n if (!node.properties) {\n return;\n }\n Object.keys(node.properties).forEach(function (propertyKey) {\n // 目前过滤只保留可以转成数值型的或日期型的, todo: 统一转成one-hot特征向量或者embedding\n if (propertyKey === 'id' || !\"\".concat(node.properties[propertyKey]).match(_constants_time__WEBPACK_IMPORTED_MODULE_0__[\"secondReg\"]) && !\"\".concat(node.properties[propertyKey]).match(_constants_time__WEBPACK_IMPORTED_MODULE_0__[\"dateReg\"]) && isNaN(Number(node.properties[propertyKey]))) {\n if (propertyKeyInfo.hasOwnProperty(propertyKey)) {\n delete propertyKeyInfo[propertyKey];\n }\n return;\n }\n if (propertyKeyInfo.hasOwnProperty(propertyKey)) {\n propertyKeyInfo[propertyKey] += 1;\n } else {\n propertyKeyInfo[propertyKey] = 1;\n }\n });\n });\n // 取top50的属性\n var sortKeys = Object.keys(propertyKeyInfo).sort(function (a, b) {\n return propertyKeyInfo[b] - propertyKeyInfo[a];\n });\n return sortKeys.length < n ? sortKeys : sortKeys.slice(0, n);\n};\nvar processProperty = function processProperty(properties, propertyKeys) {\n return propertyKeys.map(function (key) {\n if (properties.hasOwnProperty(key)) {\n // // 可以转成数值的直接转成数值\n // if (!isNaN(Number(properties[key]))) {\n // return Number(properties[key]);\n // }\n // // 时间型的转成时间戳\n // if (properties[key].match(secondReg) || properties[key].match(dateReg)) {\n // // @ts-ignore\n // return Number(Date.parse(new Date(properties[key]))) / 1000;\n // }\n return properties[key];\n }\n return 0;\n });\n};\n// 获取属性特征权重\nvar getPropertyWeight = function getPropertyWeight(nodes) {\n var propertyKeys = getAllSortProperties(nodes);\n var allPropertiesWeight = [];\n for (var i = 0; i < nodes.length; i++) {\n allPropertiesWeight[i] = processProperty(nodes[i].properties, propertyKeys);\n }\n return allPropertiesWeight;\n};\n// 获取所有节点的属性集合\nvar getAllProperties = function getAllProperties(nodes, key) {\n if (key === void 0) {\n key = undefined;\n }\n var allProperties = [];\n nodes.forEach(function (node) {\n if (key === undefined) {\n allProperties.push(node);\n }\n if (node[key] !== undefined) {\n allProperties.push(node[key]);\n }\n });\n return allProperties;\n};\n/* harmony default export */ __webpack_exports__[\"default\"] = ({\n getAllSortProperties: getAllSortProperties,\n getPropertyWeight: getPropertyWeight,\n getAllProperties: getAllProperties\n});\n\n//# sourceURL=webpack:///./node_modules/@antv/algorithm/es/utils/node-properties.js?");
/***/ }),
/***/ "./node_modules/@antv/algorithm/es/utils/vector.js":
/*!*********************************************************!*\
!*** ./node_modules/@antv/algorithm/es/utils/vector.js ***!
\*********************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _antv_util__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @antv/util */ \"./node_modules/@antv/util/esm/index.js\");\n/**\n * 向量运算\n */\n\nvar Vector = /** @class */function () {\n function Vector(arr) {\n this.arr = arr;\n }\n Vector.prototype.getArr = function () {\n return this.arr || [];\n };\n Vector.prototype.add = function (otherVector) {\n var _a;\n var otherArr = otherVector.arr;\n if (!((_a = this.arr) === null || _a === void 0 ? void 0 : _a.length)) {\n return new Vector(otherArr);\n }\n if (!(otherArr === null || otherArr === void 0 ? void 0 : otherArr.length)) {\n return new Vector(this.arr);\n }\n if (this.arr.length === otherArr.length) {\n var res = [];\n for (var index in this.arr) {\n res[index] = this.arr[index] + otherArr[index];\n }\n return new Vector(res);\n }\n };\n Vector.prototype.subtract = function (otherVector) {\n var _a;\n var otherArr = otherVector.arr;\n if (!((_a = this.arr) === null || _a === void 0 ? void 0 : _a.length)) {\n return new Vector(otherArr);\n }\n if (!(otherArr === null || otherArr === void 0 ? void 0 : otherArr.length)) {\n return new Vector(this.arr);\n }\n if (this.arr.length === otherArr.length) {\n var res = [];\n for (var index in this.arr) {\n res[index] = this.arr[index] - otherArr[index];\n }\n return new Vector(res);\n }\n };\n Vector.prototype.avg = function (length) {\n var res = [];\n if (length !== 0) {\n for (var index in this.arr) {\n res[index] = this.arr[index] / length;\n }\n }\n return new Vector(res);\n };\n Vector.prototype.negate = function () {\n var res = [];\n for (var index in this.arr) {\n res[index] = -this.arr[index];\n }\n return new Vector(res);\n };\n // 平方欧式距离\n Vector.prototype.squareEuclideanDistance = function (otherVector) {\n var _a;\n var otherArr = otherVector.arr;\n if (!((_a = this.arr) === null || _a === void 0 ? void 0 : _a.length) || !(otherArr === null || otherArr === void 0 ? void 0 : otherArr.length)) {\n return 0;\n }\n if (this.arr.length === otherArr.length) {\n var res = 0;\n for (var index in this.arr) {\n res += Math.pow(this.arr[index] - otherVector.arr[index], 2);\n }\n return res;\n }\n };\n // 欧式距离\n Vector.prototype.euclideanDistance = function (otherVector) {\n var _a;\n var otherArr = otherVector.arr;\n if (!((_a = this.arr) === null || _a === void 0 ? void 0 : _a.length) || !(otherArr === null || otherArr === void 0 ? void 0 : otherArr.length)) {\n return 0;\n }\n if (this.arr.length === otherArr.length) {\n var res = 0;\n for (var index in this.arr) {\n res += Math.pow(this.arr[index] - otherVector.arr[index], 2);\n }\n return Math.sqrt(res);\n } else {\n console.error('The two vectors are unequal in length.');\n }\n };\n // 归一化处理\n Vector.prototype.normalize = function () {\n var res = [];\n var cloneArr = Object(_antv_util__WEBPACK_IMPORTED_MODULE_0__[\"clone\"])(this.arr);\n cloneArr.sort(function (a, b) {\n return a - b;\n });\n var max = cloneArr[cloneArr.length - 1];\n var min = cloneArr[0];\n for (var index in this.arr) {\n res[index] = (this.arr[index] - min) / (max - min);\n }\n return new Vector(res);\n };\n // 2范数 or 模长\n Vector.prototype.norm2 = function () {\n var _a;\n if (!((_a = this.arr) === null || _a === void 0 ? void 0 : _a.length)) {\n return 0;\n }\n var res = 0;\n for (var index in this.arr) {\n res += Math.pow(this.arr[index], 2);\n }\n return Math.sqrt(res);\n };\n // 两个向量的点积\n Vector.prototype.dot = function (otherVector) {\n var _a;\n var otherArr = otherVector.arr;\n if (!((_a = this.arr) === null || _a === void 0 ? void 0 : _a.length) || !(otherArr === null || otherArr === void 0 ? void 0 : otherArr.length)) {\n return 0;\n }\n if (this.arr.length === otherArr.length) {\n var res = 0;\n for (var index in this.arr) {\n res += this.arr[index] * otherVector.arr[index];\n }\n return res;\n } else {\n console.error('The two vectors are unequal in length.');\n }\n };\n // 两个向量比较\n Vector.prototype.equal = function (otherVector) {\n var _a;\n var otherArr = otherVector.arr;\n if (((_a = this.arr) === null || _a === void 0 ? void 0 : _a.length) !== (otherArr === null || otherArr === void 0 ? void 0 : otherArr.length)) {\n return false;\n }\n for (var index in this.arr) {\n if (this.arr[index] !== otherArr[index]) {\n return false;\n }\n }\n return true;\n };\n return Vector;\n}();\n/* harmony default export */ __webpack_exports__[\"default\"] = (Vector);\n\n//# sourceURL=webpack:///./node_modules/@antv/algorithm/es/utils/vector.js?");
/***/ }),
/***/ "./node_modules/@antv/algorithm/lib/adjacent-matrix.js":
/*!*************************************************************!*\
!*** ./node_modules/@antv/algorithm/lib/adjacent-matrix.js ***!
\*************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
eval("\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\nvar adjMatrix = function adjMatrix(graphData, directed) {\n var nodes = graphData.nodes,\n edges = graphData.edges;\n var matrix = [];\n // map node with index in data.nodes\n var nodeMap = {};\n if (!nodes) {\n throw new Error(\"invalid nodes data!\");\n }\n if (nodes) {\n nodes.forEach(function (node, i) {\n nodeMap[node.id] = i;\n var row = [];\n matrix.push(row);\n });\n }\n if (edges) {\n edges.forEach(function (edge) {\n var source = edge.source,\n target = edge.target;\n var sIndex = nodeMap[source];\n var tIndex = nodeMap[target];\n if (!sIndex && sIndex !== 0 || !tIndex && tIndex !== 0) return;\n matrix[sIndex][tIndex] = 1;\n if (!directed) {\n matrix[tIndex][sIndex] = 1;\n }\n });\n }\n return matrix;\n};\nvar _default = adjMatrix;\nexports.default = _default;\n\n//# sourceURL=webpack:///./node_modules/@antv/algorithm/lib/adjacent-matrix.js?");
/***/ }),
/***/ "./node_modules/@antv/algorithm/lib/asyncIndex.js":
/*!********************************************************!*\
!*** ./node_modules/@antv/algorithm/lib/asyncIndex.js ***!
\********************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
eval("\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nObject.defineProperty(exports, \"GADDIAsync\", {\n enumerable: true,\n get: function get() {\n return _index.GADDIAsync;\n }\n});\nObject.defineProperty(exports, \"connectedComponentAsync\", {\n enumerable: true,\n get: function get() {\n return _index.connectedComponentAsync;\n }\n});\nexports.default = void 0;\nObject.defineProperty(exports, \"detectAllCyclesAsync\", {\n enumerable: true,\n get: function get() {\n return _index.detectAllCyclesAsync;\n }\n});\nObject.defineProperty(exports, \"detectAllDirectedCycleAsync\", {\n enumerable: true,\n get: function get() {\n return _index.detectAllDirectedCycleAsync;\n }\n});\nObject.defineProperty(exports, \"detectAllUndirectedCycleAsync\", {\n enumerable: true,\n get: function get() {\n return _index.detectAllUndirectedCycleAsync;\n }\n});\nObject.defineProperty(exports, \"detectCycleAsync\", {\n enumerable: true,\n get: function get() {\n return _index.detectCycleAsync;\n }\n});\nexports.detectDirectedCycleAsync = void 0;\nObject.defineProperty(exports, \"dijkstraAsync\", {\n enumerable: true,\n get: function get() {\n return _index.dijkstraAsync;\n }\n});\nObject.defineProperty(exports, \"findAllPathAsync\", {\n enumerable: true,\n get: function get() {\n return _index.findAllPathAsync;\n }\n});\nObject.defineProperty(exports, \"findShortestPathAsync\", {\n enumerable: true,\n get: function get() {\n return _index.findShortestPathAsync;\n }\n});\nObject.defineProperty(exports, \"floydWarshallAsync\", {\n enumerable: true,\n get: function get() {\n return _index.floydWarshallAsync;\n }\n});\nObject.defineProperty(exports, \"getAdjMatrixAsync\", {\n enumerable: true,\n get: function get() {\n return _index.getAdjMatrixAsync;\n }\n});\nObject.defineProperty(exports, \"getDegreeAsync\", {\n enumerable: true,\n get: function get() {\n return _index.getDegreeAsync;\n }\n});\nObject.defineProperty(exports, \"getInDegreeAsync\", {\n enumerable: true,\n get: function get() {\n return _index.getInDegreeAsync;\n }\n});\nObject.defineProperty(exports, \"getNeighborsAsync\", {\n enumerable: true,\n get: function get() {\n return _index.getNeighborsAsync;\n }\n});\nObject.defineProperty(exports, \"getOutDegreeAsync\", {\n enumerable: true,\n get: function get() {\n return _index.getOutDegreeAsync;\n }\n});\nObject.defineProperty(exports, \"labelPropagationAsync\", {\n enumerable: true,\n get: function get() {\n return _index.labelPropagationAsync;\n }\n});\nObject.defineProperty(exports, \"louvainAsync\", {\n enumerable: true,\n get: function get() {\n return _index.louvainAsync;\n }\n});\nObject.defineProperty(exports, \"minimumSpanningTreeAsync\", {\n enumerable: true,\n get: function get() {\n return _index.minimumSpanningTreeAsync;\n }\n});\nObject.defineProperty(exports, \"pageRankAsync\", {\n enumerable: true,\n get: function get() {\n return _index.pageRankAsync;\n }\n});\nvar _index = __webpack_require__(/*! ./workers/index */ \"./node_modules/@antv/algorithm/lib/workers/index.js\");\nvar detectDirectedCycleAsync = _index.detectCycleAsync;\nexports.detectDirectedCycleAsync = detectDirectedCycleAsync;\nvar _default = {\n getAdjMatrixAsync: _index.getAdjMatrixAsync,\n connectedComponentAsync: _index.connectedComponentAsync,\n getDegreeAsync: _index.getDegreeAsync,\n getInDegreeAsync: _index.getInDegreeAsync,\n getOutDegreeAsync: _index.getOutDegreeAsync,\n detectCycleAsync: _index.detectCycleAsync,\n detectDirectedCycleAsync: detectDirectedCycleAsync,\n detectAllCyclesAsync: _index.detectAllCyclesAsync,\n detectAllDirectedCycleAsync: _index.detectAllDirectedCycleAsync,\n detectAllUndirectedCycleAsync: _index.detectAllUndirectedCycleAsync,\n dijkstraAsync: _index.dijkstraAsync,\n findAllPathAsync: _index.findAllPathAsync,\n findShortestPathAsync: _index.findShortestPathAsync,\n floydWarshallAsync: _index.floydWarshallAsync,\n labelPropagationAsync: _index.labelPropagationAsync,\n louvainAsync: _index.louvainAsync,\n minimumSpanningTreeAsync: _index.minimumSpanningTreeAsync,\n pageRankAsync: _index.pageRankAsync,\n getNeighborsAsync: _index.getNeighborsAsync,\n GADDIAsync: _index.GADDIAsync\n};\nexports.default = _default;\n\n//# sourceURL=webpack:///./node_modules/@antv/algorithm/lib/asyncIndex.js?");
/***/ }),
/***/ "./node_modules/@antv/algorithm/lib/bfs.js":
/*!*************************************************!*\
!*** ./node_modules/@antv/algorithm/lib/bfs.js ***!
\*************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
eval("\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\nvar _queue = _interopRequireDefault(__webpack_require__(/*! ./structs/queue */ \"./node_modules/@antv/algorithm/lib/structs/queue.js\"));\nvar _util = __webpack_require__(/*! ./util */ \"./node_modules/@antv/algorithm/lib/util.js\");\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n/**\n *\n * @param callbacks\n * allowTraversal: 确定 BFS 是否从顶点沿着边遍历到其邻居,默认情况下,同一个节点只能遍历一次\n * enterNode: 当 BFS 访问某个节点时调用\n * leaveNode: 当 BFS 访问访问结束某个节点时调用\n */\nfunction initCallbacks(callbacks) {\n if (callbacks === void 0) {\n callbacks = {};\n }\n var initiatedCallback = callbacks;\n var stubCallback = function stubCallback() {};\n var allowTraversalCallback = function () {\n var seen = {};\n return function (_a) {\n var next = _a.next;\n var id = next;\n if (!seen[id]) {\n seen[id] = true;\n return true;\n }\n return false;\n };\n }();\n initiatedCallback.allowTraversal = callbacks.allowTraversal || allowTraversalCallback;\n initiatedCallback.enter = callbacks.enter || stubCallback;\n initiatedCallback.leave = callbacks.leave || stubCallback;\n return initiatedCallback;\n}\n/**\n * 广度优先遍历图\n * @param graph Graph 图实例\n * @param startNode 开始遍历的节点\n * @param originalCallbacks 回调\n */\nvar breadthFirstSearch = function breadthFirstSearch(graphData, startNodeId, originalCallbacks, directed) {\n if (directed === void 0) {\n directed = true;\n }\n var callbacks = initCallbacks(originalCallbacks);\n var nodeQueue = new _queue.default();\n var _a = graphData.edges,\n edges = _a === void 0 ? [] : _a;\n // 初始化队列元素\n nodeQueue.enqueue(startNodeId);\n var previousNode = '';\n var _loop_1 = function _loop_1() {\n var currentNode = nodeQueue.dequeue();\n callbacks.enter({\n current: currentNode,\n previous: previousNode\n });\n // 将所有邻居添加到队列中以便遍历\n (0, _util.getNeighbors)(currentNode, edges, directed ? 'target' : undefined).forEach(function (nextNode) {\n if (callbacks.allowTraversal({\n previous: previousNode,\n current: currentNode,\n next: nextNode\n })) {\n nodeQueue.enqueue(nextNode);\n }\n });\n callbacks.leave({\n current: currentNode,\n previous: previousNode\n });\n // 下一次循环之前存储当前顶点\n previousNode = currentNode;\n };\n // 遍历队列中的所有顶点\n while (!nodeQueue.isEmpty()) {\n _loop_1();\n }\n};\nvar _default = breadthFirstSearch;\nexports.default = _default;\n\n//# sourceURL=webpack:///./node_modules/@antv/algorithm/lib/bfs.js?");
/***/ }),
/***/ "./node_modules/@antv/algorithm/lib/connected-component.js":
/*!*****************************************************************!*\
!*** ./node_modules/@antv/algorithm/lib/connected-component.js ***!
\*****************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
eval("\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = getConnectedComponents;\nexports.detectStrongConnectComponents = exports.detectConnectedComponents = void 0;\nvar _util = __webpack_require__(/*! ./util */ \"./node_modules/@antv/algorithm/lib/util.js\");\n/**\n * Generate all connected components for an undirected graph\n * @param graph\n */\nvar detectConnectedComponents = function detectConnectedComponents(graphData) {\n var _a = graphData.nodes,\n nodes = _a === void 0 ? [] : _a,\n _b = graphData.edges,\n edges = _b === void 0 ? [] : _b;\n var allComponents = [];\n var visited = {};\n var nodeStack = [];\n var getComponent = function getComponent(node) {\n nodeStack.push(node);\n visited[node.id] = true;\n var neighbors = (0, _util.getNeighbors)(node.id, edges);\n var _loop_1 = function _loop_1(i) {\n var neighbor = neighbors[i];\n if (!visited[neighbor]) {\n var targetNode = nodes.filter(function (node) {\n return node.id === neighbor;\n });\n if (targetNode.length > 0) {\n getComponent(targetNode[0]);\n }\n }\n };\n for (var i = 0; i < neighbors.length; ++i) {\n _loop_1(i);\n }\n };\n for (var i = 0; i < nodes.length; i++) {\n var node = nodes[i];\n if (!visited[node.id]) {\n // 对于无向图进行dfs遍历,每一次调用后都得到一个连通分量\n getComponent(node);\n var component = [];\n while (nodeStack.length > 0) {\n component.push(nodeStack.pop());\n }\n allComponents.push(component);\n }\n }\n return allComponents;\n};\n/**\n * Tarjan's Algorithm 复杂度 O(|V|+|E|)\n * For directed graph only\n * a directed graph is said to be strongly connected if \"every vertex is reachable from every other vertex\".\n * refer: http://en.wikipedia.org/wiki/Tarjan%27s_strongly_connected_components_algorithm\n * @param graph\n * @return a list of strongly connected components\n */\nexports.detectConnectedComponents = detectConnectedComponents;\nvar detectStrongConnectComponents = function detectStrongConnectComponents(graphData) {\n var _a = graphData.nodes,\n nodes = _a === void 0 ? [] : _a,\n _b = graphData.edges,\n edges = _b === void 0 ? [] : _b;\n var nodeStack = [];\n var inStack = {}; // 辅助判断是否已经在stack中,减少查找开销\n var indices = {};\n var lowLink = {};\n var allComponents = [];\n var index = 0;\n var getComponent = function getComponent(node) {\n // Set the depth index for v to the smallest unused index\n indices[node.id] = index;\n lowLink[node.id] = index;\n index += 1;\n nodeStack.push(node);\n inStack[node.id] = true;\n // 考虑每个邻接点\n var neighbors = (0, _util.getNeighbors)(node.id, edges, 'target').filter(function (n) {\n return nodes.map(function (node) {\n return node.id;\n }).indexOf(n) > -1;\n });\n var _loop_2 = function _loop_2(i) {\n var targetNodeID = neighbors[i];\n if (!indices[targetNodeID] && indices[targetNodeID] !== 0) {\n var targetNode = nodes.filter(function (node) {\n return node.id === targetNodeID;\n });\n if (targetNode.length > 0) {\n getComponent(targetNode[0]);\n }\n // tree edge\n lowLink[node.id] = Math.min(lowLink[node.id], lowLink[targetNodeID]);\n } else if (inStack[targetNodeID]) {\n // back edge, target node is in the current SCC\n lowLink[node.id] = Math.min(lowLink[node.id], indices[targetNodeID]);\n }\n };\n for (var i = 0; i < neighbors.length; i++) {\n _loop_2(i);\n }\n // If node is a root node, generate an SCC\n if (lowLink[node.id] === indices[node.id]) {\n var component = [];\n while (nodeStack.length > 0) {\n var tmpNode = nodeStack.pop();\n inStack[tmpNode.id] = false;\n component.push(tmpNode);\n if (tmpNode === node) break;\n }\n if (component.length > 0) {\n allComponents.push(component);\n }\n }\n };\n for (var _i = 0, nodes_1 = nodes; _i < nodes_1.length; _i++) {\n var node = nodes_1[_i];\n if (!indices[node.id] && indices[node.id] !== 0) {\n getComponent(node);\n }\n }\n return allComponents;\n};\nexports.detectStrongConnectComponents = detectStrongConnectComponents;\nfunction getConnectedComponents(graphData, directed) {\n if (directed) return detectStrongConnectComponents(graphData);\n return detectConnectedComponents(graphData);\n}\n\n//# sourceURL=webpack:///./node_modules/@antv/algorithm/lib/connected-component.js?");
/***/ }),
/***/ "./node_modules/@antv/algorithm/lib/constants/time.js":
/*!************************************************************!*\
!*** ./node_modules/@antv/algorithm/lib/constants/time.js ***!
\************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
eval("\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.secondReg = exports.dateReg = void 0;\nvar secondReg = /^(\\d{1,4})(-|\\/)(\\d{1,2})\\2(\\d{1,2})$/;\nexports.secondReg = secondReg;\nvar dateReg = /^(\\d{1,4})(-|\\/)(\\d{1,2})\\2(\\d{1,2}) (\\d{1,2}):(\\d{1,2}):(\\d{1,2})$/;\nexports.dateReg = dateReg;\n\n//# sourceURL=webpack:///./node_modules/@antv/algorithm/lib/constants/time.js?");
/***/ }),
/***/ "./node_modules/@antv/algorithm/lib/degree.js":
/*!****************************************************!*\
!*** ./node_modules/@antv/algorithm/lib/degree.js ***!
\****************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
eval("\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.getOutDegree = exports.getInDegree = exports.default = void 0;\nvar degree = function degree(graphData) {\n var degrees = {};\n var _a = graphData.nodes,\n nodes = _a === void 0 ? [] : _a,\n _b = graphData.edges,\n edges = _b === void 0 ? [] : _b;\n nodes.forEach(function (node) {\n degrees[node.id] = {\n degree: 0,\n inDegree: 0,\n outDegree: 0\n };\n });\n edges.forEach(function (edge) {\n degrees[edge.source].degree++;\n degrees[edge.source].outDegree++;\n degrees[edge.target].degree++;\n degrees[edge.target].inDegree++;\n });\n return degrees;\n};\nvar _default = degree;\n/**\n * 获取指定节点的入度\n * @param graphData 图数据\n * @param nodeId 节点ID\n */\nexports.default = _default;\nvar getInDegree = function getInDegree(graphData, nodeId) {\n var nodeDegree = degree(graphData);\n if (nodeDegree[nodeId]) {\n return degree(graphData)[nodeId].inDegree;\n }\n return 0;\n};\n/**\n * 获取指定节点的出度\n * @param graphData 图数据\n * @param nodeId 节点ID\n */\nexports.getInDegree = getInDegree;\nvar getOutDegree = function getOutDegree(graphData, nodeId) {\n var nodeDegree = degree(graphData);\n if (nodeDegree[nodeId]) {\n return degree(graphData)[nodeId].outDegree;\n }\n return 0;\n};\nexports.getOutDegree = getOutDegree;\n\n//# sourceURL=webpack:///./node_modules/@antv/algorithm/lib/degree.js?");
/***/ }),
/***/ "./node_modules/@antv/algorithm/lib/detect-cycle.js":
/*!**********************************************************!*\
!*** ./node_modules/@antv/algorithm/lib/detect-cycle.js ***!
\**********************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
eval("\n\nfunction _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.detectAllUndirectedCycle = exports.detectAllDirectedCycle = exports.detectAllCycles = exports.default = void 0;\nvar _dfs = _interopRequireDefault(__webpack_require__(/*! ./dfs */ \"./node_modules/@antv/algorithm/lib/dfs.js\"));\nvar _connectedComponent = _interopRequireWildcard(__webpack_require__(/*! ./connected-component */ \"./node_modules/@antv/algorithm/lib/connected-component.js\"));\nvar _util = __webpack_require__(/*! ./util */ \"./node_modules/@antv/algorithm/lib/util.js\");\nfunction _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== \"function\") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }\nfunction _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== \"object\" && typeof obj !== \"function\") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== \"default\" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\nvar detectDirectedCycle = function detectDirectedCycle(graphData) {\n var cycle = null;\n var _a = graphData.nodes,\n nodes = _a === void 0 ? [] : _a;\n var dfsParentMap = {};\n // 所有没有被访问的节点集合\n var unvisitedSet = {};\n // 正在被访问的节点集合\n var visitingSet = {};\n // 所有已经被访问过的节点集合\n var visitedSet = {};\n // 初始化 unvisitedSet\n nodes.forEach(function (node) {\n unvisitedSet[node.id] = node;\n });\n var callbacks = {\n enter: function enter(_a) {\n var currentNode = _a.current,\n previousNode = _a.previous;\n if (visitingSet[currentNode]) {\n // 如果当前节点正在访问中,则说明检测到环路了\n cycle = {};\n var currentCycleNode = currentNode;\n var previousCycleNode = previousNode;\n while (previousCycleNode !== currentNode) {\n cycle[currentCycleNode] = previousCycleNode;\n currentCycleNode = previousCycleNode;\n previousCycleNode = dfsParentMap[previousCycleNode];\n }\n cycle[currentCycleNode] = previousCycleNode;\n } else {\n // 如果不存在正在访问集合中,则将其放入正在访问集合,并从未访问集合中删除\n visitingSet[currentNode] = currentNode;\n delete unvisitedSet[currentNode];\n // 更新 DSF parents 列表\n dfsParentMap[currentNode] = previousNode;\n }\n },\n leave: function leave(_a) {\n var currentNode = _a.current;\n // 如果所有的节点的子节点都已经访问过了,则从正在访问集合中删除掉,并将其移入到已访问集合中,\n // 同时也意味着当前节点的所有邻居节点都被访问过了\n visitedSet[currentNode] = currentNode;\n delete visitingSet[currentNode];\n },\n allowTraversal: function allowTraversal(_a) {\n var nextNode = _a.next;\n // 如果检测到环路则需要终止所有进一步的遍历,否则会导致无限循环遍历\n if (cycle) {\n return false;\n }\n // 仅允许遍历没有访问的节点,visitedSet 中的都已经访问过了\n return !visitedSet[nextNode];\n }\n };\n // 开始遍历节点\n while (Object.keys(unvisitedSet).length) {\n // 从第一个节点开始进行 DFS 遍历\n var firsetUnVisitedKey = Object.keys(unvisitedSet)[0];\n (0, _dfs.default)(graphData, firsetUnVisitedKey, callbacks);\n }\n return cycle;\n};\n/**\n * 检测无向图中的所有Base cycles\n * refer: https://www.codeproject.com/Articles/1158232/Enumerating-All-Cycles-in-an-Undirected-Graph\n * @param graph\n * @param nodeIds 节点 ID 的数组\n * @param include 包含或排除指定的节点\n * @return [{[key: string]: INode}] 返回一组base cycles\n */\nvar detectAllUndirectedCycle = function detectAllUndirectedCycle(graphData, nodeIds, include) {\n var _a, _b;\n if (include === void 0) {\n include = true;\n }\n var allCycles = [];\n var components = (0, _connectedComponent.default)(graphData, false);\n // loop through all connected components\n for (var _i = 0, components_1 = components; _i < components_1.length; _i++) {\n var component = components_1[_i];\n if (!component.length) continue;\n var root = component[0];\n var rootId = root.id;\n var stack = [root];\n var parent_1 = (_a = {}, _a[rootId] = root, _a);\n var used = (_b = {}, _b[rootId] = new Set(), _b);\n // walk a spanning tree to find cycles\n while (stack.length > 0) {\n var curNode = stack.pop();\n var curNodeId = curNode.id;\n var neighbors = (0, _util.getNeighbors)(curNodeId, graphData.edges);\n var _loop_1 = function _loop_1(i) {\n var _c;\n var neighborId = neighbors[i];\n var neighbor = graphData.nodes.find(function (node) {\n return node.id === neighborId;\n });\n // const neighborId = neighbor.get('id');\n if (neighborId === curNodeId) {\n // 自环\n allCycles.push((_c = {}, _c[neighborId] = curNode, _c));\n } else if (!(neighborId in used)) {\n // visit a new node\n parent_1[neighborId] = curNode;\n stack.push(neighbor);\n used[neighborId] = new Set([curNode]);\n } else if (!used[curNodeId].has(neighbor)) {\n // a cycle found\n var cycleValid = true;\n var cyclePath = [neighbor, curNode];\n var p = parent_1[curNodeId];\n while (used[neighborId].size && !used[neighborId].has(p)) {\n cyclePath.push(p);\n if (p === parent_1[p.id]) break;else p = parent_1[p.id];\n }\n cyclePath.push(p);\n if (nodeIds && include) {\n // 如果有指定包含的节点\n cycleValid = false;\n if (cyclePath.findIndex(function (node) {\n return nodeIds.indexOf(node.id) > -1;\n }) > -1) {\n cycleValid = true;\n }\n } else if (nodeIds && !include) {\n // 如果有指定不包含的节点\n if (cyclePath.findIndex(function (node) {\n return nodeIds.indexOf(node.id) > -1;\n }) > -1) {\n cycleValid = false;\n }\n }\n // 把 node list 形式转换为 cycle 的格式\n if (cycleValid) {\n var cycle = {};\n for (var index = 1; index < cyclePath.length; index += 1) {\n cycle[cyclePath[index - 1].id] = cyclePath[index];\n }\n if (cyclePath.length) {\n cycle[cyclePath[cyclePath.length - 1].id] = cyclePath[0];\n }\n allCycles.push(cycle);\n }\n used[neighborId].add(curNode);\n }\n };\n for (var i = 0; i < neighbors.length; i += 1) {\n _loop_1(i);\n }\n }\n }\n return allCycles;\n};\n/**\n * Johnson's algorithm, 时间复杂度 O((V + E)(C + 1))$ and space bounded by O(V + E)\n * refer: https://www.cs.tufts.edu/comp/150GA/homeworks/hw1/Johnson%2075.PDF\n * refer: https://networkx.github.io/documentation/stable/_modules/networkx/algorithms/cycles.html#simple_cycles\n * @param graph\n * @param nodeIds 节点 ID 的数组\n * @param include 包含或排除指定的节点\n * @return [{[key: string]: INode}] 返回所有的 simple cycles\n */\nexports.detectAllUndirectedCycle = detectAllUndirectedCycle;\nvar detectAllDirectedCycle = function detectAllDirectedCycle(graphData, nodeIds, include) {\n if (include === void 0) {\n include = true;\n }\n var path = []; // stack of nodes in current path\n var blocked = new Set();\n var B = []; // remember portions of the graph that yield no elementary circuit\n var allCycles = [];\n var idx2Node = {};\n var node2Idx = {};\n // 辅助函数: unblock all blocked nodes\n var unblock = function unblock(thisNode) {\n var stack = [thisNode];\n while (stack.length > 0) {\n var node = stack.pop();\n if (blocked.has(node)) {\n blocked.delete(node);\n B[node.id].forEach(function (n) {\n stack.push(n);\n });\n B[node.id].clear();\n }\n }\n };\n var circuit = function circuit(node, start, adjList) {\n var closed = false; // whether a path is closed\n if (nodeIds && include === false && nodeIds.indexOf(node.id) > -1) return closed;\n path.push(node);\n blocked.add(node);\n var neighbors = adjList[node.id];\n for (var i = 0; i < neighbors.length; i += 1) {\n var neighbor = idx2Node[neighbors[i]];\n if (neighbor === start) {\n var cycle = {};\n for (var index = 1; index < path.length; index += 1) {\n cycle[path[index - 1].id] = path[index];\n }\n if (path.length) {\n cycle[path[path.length - 1].id] = path[0];\n }\n allCycles.push(cycle);\n closed = true;\n } else if (!blocked.has(neighbor)) {\n if (circuit(neighbor, start, adjList)) {\n closed = true;\n }\n }\n }\n if (closed) {\n unblock(node);\n } else {\n for (var i = 0; i < neighbors.length; i += 1) {\n var neighbor = idx2Node[neighbors[i]];\n if (!B[neighbor.id].has(node)) {\n B[neighbor.id].add(node);\n }\n }\n }\n path.pop();\n return closed;\n };\n var _a = graphData.nodes,\n nodes = _a === void 0 ? [] : _a;\n // Johnson's algorithm 要求给节点赋顺序,先按节点在数组中的顺序\n for (var i = 0; i < nodes.length; i += 1) {\n var node = nodes[i];\n var nodeId = node.id;\n node2Idx[nodeId] = i;\n idx2Node[i] = node;\n }\n // 如果有指定包含的节点,则把指定节点排序在前,以便提早结束搜索\n if (nodeIds && include) {\n var _loop_2 = function _loop_2(i) {\n var nodeId = nodeIds[i];\n node2Idx[nodes[i].id] = node2Idx[nodeId];\n node2Idx[nodeId] = 0;\n idx2Node[0] = nodes.find(function (node) {\n return node.id === nodeId;\n });\n idx2Node[node2Idx[nodes[i].id]] = nodes[i];\n };\n for (var i = 0; i < nodeIds.length; i++) {\n _loop_2(i);\n }\n }\n // 返回 节点顺序 >= nodeOrder 的强连通分量的adjList\n var getMinComponentAdj = function getMinComponentAdj(components) {\n var _a;\n var minCompIdx;\n var minIdx = Infinity;\n // Find least component and the lowest node\n for (var i = 0; i < components.length; i += 1) {\n var comp = components[i];\n for (var j = 0; j < comp.length; j++) {\n var nodeIdx_1 = node2Idx[comp[j].id];\n if (nodeIdx_1 < minIdx) {\n minIdx = nodeIdx_1;\n minCompIdx = i;\n }\n }\n }\n var component = components[minCompIdx];\n var adjList = [];\n for (var i = 0; i < component.length; i += 1) {\n var node = component[i];\n adjList[node.id] = [];\n for (var _i = 0, _b = (0, _util.getNeighbors)(node.id, graphData.edges, 'target').filter(function (n) {\n return component.map(function (c) {\n return c.id;\n }).indexOf(n) > -1;\n }); _i < _b.length; _i++) {\n var neighbor = _b[_i];\n // 对自环情况 (点连向自身) 特殊处理:记录自环,但不加入adjList\n if (neighbor === node.id && !(include === false && nodeIds.indexOf(node.id) > -1)) {\n allCycles.push((_a = {}, _a[node.id] = node, _a));\n } else {\n adjList[node.id].push(node2Idx[neighbor]);\n }\n }\n }\n return {\n component: component,\n adjList: adjList,\n minIdx: minIdx\n };\n };\n var nodeIdx = 0;\n while (nodeIdx < nodes.length) {\n var subgraphNodes = nodes.filter(function (n) {\n return node2Idx[n.id] >= nodeIdx;\n });\n var sccs = (0, _connectedComponent.detectStrongConnectComponents)({\n nodes: subgraphNodes,\n edges: graphData.edges\n }).filter(function (component) {\n return component.length > 1;\n });\n if (sccs.length === 0) break;\n var scc = getMinComponentAdj(sccs);\n var minIdx = scc.minIdx,\n adjList = scc.adjList,\n component = scc.component;\n if (component.length > 1) {\n component.forEach(function (node) {\n B[node.id] = new Set();\n });\n var startNode = idx2Node[minIdx];\n // startNode 不在指定要包含的节点中,提前结束搜索\n if (nodeIds && include && nodeIds.indexOf(startNode.id) === -1) return allCycles;\n circuit(startNode, startNode, adjList);\n nodeIdx = minIdx + 1;\n } else {\n break;\n }\n }\n return allCycles;\n};\n/**\n * 查找图中所有满足要求的圈\n * @param graph\n * @param directed 是否为有向图\n * @param nodeIds 节点 ID 的数组,若不指定,则返回图中所有的圈\n * @param include 包含或排除指定的节点\n * @return [{[key: string]: Node}] 包含所有环的数组,每个环用一个Object表示,其中key为节点id,value为该节点在环中指向的下一个节点\n */\nexports.detectAllDirectedCycle = detectAllDirectedCycle;\nvar detectAllCycles = function detectAllCycles(graphData, directed, nodeIds, include) {\n if (include === void 0) {\n include = true;\n }\n if (directed) return detectAllDirectedCycle(graphData, nodeIds, include);\n return detectAllUndirectedCycle(graphData, nodeIds, include);\n};\nexports.detectAllCycles = detectAllCycles;\nvar _default = detectDirectedCycle;\nexports.default = _default;\n\n//# sourceURL=webpack:///./node_modules/@antv/algorithm/lib/detect-cycle.js?");
/***/ }),
/***/ "./node_modules/@antv/algorithm/lib/dfs.js":
/*!*************************************************!*\
!*** ./node_modules/@antv/algorithm/lib/dfs.js ***!
\*************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
eval("\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = depthFirstSearch;\nvar _util = __webpack_require__(/*! ./util */ \"./node_modules/@antv/algorithm/lib/util.js\");\nfunction initCallbacks(callbacks) {\n if (callbacks === void 0) {\n callbacks = {};\n }\n var initiatedCallback = callbacks;\n var stubCallback = function stubCallback() {};\n var allowTraversalCallback = function () {\n var seen = {};\n return function (_a) {\n var next = _a.next;\n if (!seen[next]) {\n seen[next] = true;\n return true;\n }\n return false;\n };\n }();\n initiatedCallback.allowTraversal = callbacks.allowTraversal || allowTraversalCallback;\n initiatedCallback.enter = callbacks.enter || stubCallback;\n initiatedCallback.leave = callbacks.leave || stubCallback;\n return initiatedCallback;\n}\n/**\n * @param {Graph} graph\n * @param {GraphNode} currentNode\n * @param {GraphNode} previousNode\n * @param {Callbacks} callbacks\n */\nfunction depthFirstSearchRecursive(graphData, currentNode, previousNode, callbacks, directed) {\n if (directed === void 0) {\n directed = true;\n }\n callbacks.enter({\n current: currentNode,\n previous: previousNode\n });\n var _a = graphData.edges,\n edges = _a === void 0 ? [] : _a;\n (0, _util.getNeighbors)(currentNode, edges, directed ? 'target' : undefined).forEach(function (nextNode) {\n if (callbacks.allowTraversal({\n previous: previousNode,\n current: currentNode,\n next: nextNode\n })) {\n depthFirstSearchRecursive(graphData, nextNode, currentNode, callbacks, directed);\n }\n });\n callbacks.leave({\n current: currentNode,\n previous: previousNode\n });\n}\n/**\n * 深度优先遍历图\n * @param data GraphData 图数据\n * @param startNodeId 开始遍历的节点的 ID\n * @param originalCallbacks 回调\n */\nfunction depthFirstSearch(graphData, startNodeId, callbacks, directed) {\n if (directed === void 0) {\n directed = true;\n }\n depthFirstSearchRecursive(graphData, startNodeId, '', initCallbacks(callbacks), directed);\n}\n\n//# sourceURL=webpack:///./node_modules/@antv/algorithm/lib/dfs.js?");
/***/ }),
/***/ "./node_modules/@antv/algorithm/lib/dijkstra.js":
/*!******************************************************!*\
!*** ./node_modules/@antv/algorithm/lib/dijkstra.js ***!
\******************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
eval("\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\nvar _tslib = __webpack_require__(/*! tslib */ \"./node_modules/tslib/tslib.es6.js\");\nvar _util = __webpack_require__(/*! @antv/util */ \"./node_modules/@antv/util/esm/index.js\");\nvar _util2 = __webpack_require__(/*! ./util */ \"./node_modules/@antv/algorithm/lib/util.js\");\nvar minVertex = function minVertex(D, nodes, marks) {\n // 找出最小的点\n var minDis = Infinity;\n var minNode;\n for (var i = 0; i < nodes.length; i++) {\n var nodeId = nodes[i].id;\n if (!marks[nodeId] && D[nodeId] <= minDis) {\n minDis = D[nodeId];\n minNode = nodes[i];\n }\n }\n return minNode;\n};\nvar dijkstra = function dijkstra(graphData, source, directed, weightPropertyName) {\n var _a = graphData.nodes,\n nodes = _a === void 0 ? [] : _a,\n _b = graphData.edges,\n edges = _b === void 0 ? [] : _b;\n var nodeIds = [];\n var marks = {};\n var D = {};\n var prevs = {}; // key: 顶点, value: 顶点的前驱点数组(可能有多条等长的最短路径)\n nodes.forEach(function (node, i) {\n var id = node.id;\n nodeIds.push(id);\n D[id] = Infinity;\n if (id === source) D[id] = 0;\n });\n var nodeNum = nodes.length;\n var _loop_1 = function _loop_1(i) {\n // Process the vertices\n var minNode = minVertex(D, nodes, marks);\n var minNodeId = minNode.id;\n marks[minNodeId] = true;\n if (D[minNodeId] === Infinity) return \"continue\"; // Unreachable vertices cannot be the intermediate point\n var relatedEdges = [];\n if (directed) relatedEdges = (0, _util2.getOutEdgesNodeId)(minNodeId, edges);else relatedEdges = (0, _util2.getEdgesByNodeId)(minNodeId, edges);\n relatedEdges.forEach(function (edge) {\n var edgeTarget = edge.target;\n var edgeSource = edge.source;\n var w = edgeTarget === minNodeId ? edgeSource : edgeTarget;\n var weight = weightPropertyName && edge[weightPropertyName] ? edge[weightPropertyName] : 1;\n if (D[w] > D[minNode.id] + weight) {\n D[w] = D[minNode.id] + weight;\n prevs[w] = [minNode.id];\n } else if (D[w] === D[minNode.id] + weight) {\n prevs[w].push(minNode.id);\n }\n });\n };\n for (var i = 0; i < nodeNum; i++) {\n _loop_1(i);\n }\n prevs[source] = [source];\n // 每个节点存可能存在多条最短路径\n var paths = {};\n for (var target in D) {\n if (D[target] !== Infinity) {\n findAllPaths(source, target, prevs, paths);\n }\n }\n // 兼容之前单路径\n var path = {};\n for (var target in paths) {\n path[target] = paths[target][0];\n }\n return {\n length: D,\n path: path,\n allPath: paths\n };\n};\nvar _default = dijkstra;\nexports.default = _default;\nfunction findAllPaths(source, target, prevs, foundPaths) {\n if (source === target) {\n return [source];\n }\n if (foundPaths[target]) {\n return foundPaths[target];\n }\n var paths = [];\n for (var _i = 0, _a = prevs[target]; _i < _a.length; _i++) {\n var prev = _a[_i];\n var prevPaths = findAllPaths(source, prev, prevs, foundPaths);\n if (!prevPaths) return;\n for (var _b = 0, prevPaths_1 = prevPaths; _b < prevPaths_1.length; _b++) {\n var prePath = prevPaths_1[_b];\n if ((0, _util.isArray)(prePath)) paths.push((0, _tslib.__spreadArray)((0, _tslib.__spreadArray)([], prePath, true), [target], false));else paths.push([prePath, target]);\n }\n }\n foundPaths[target] = paths;\n return foundPaths[target];\n}\n\n//# sourceURL=webpack:///./node_modules/@antv/algorithm/lib/dijkstra.js?");
/***/ }),
/***/ "./node_modules/@antv/algorithm/lib/find-path.js":
/*!*******************************************************!*\
!*** ./node_modules/@antv/algorithm/lib/find-path.js ***!
\*******************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
eval("\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.findShortestPath = exports.findAllPath = void 0;\nvar _dijkstra = _interopRequireDefault(__webpack_require__(/*! ./dijkstra */ \"./node_modules/@antv/algorithm/lib/dijkstra.js\"));\nvar _util = __webpack_require__(/*! ./util */ \"./node_modules/@antv/algorithm/lib/util.js\");\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\nvar findShortestPath = function findShortestPath(graphData, start, end, directed, weightPropertyName) {\n var _a = (0, _dijkstra.default)(graphData, start, directed, weightPropertyName),\n length = _a.length,\n path = _a.path,\n allPath = _a.allPath;\n return {\n length: length[end],\n path: path[end],\n allPath: allPath[end]\n };\n};\nexports.findShortestPath = findShortestPath;\nvar findAllPath = function findAllPath(graphData, start, end, directed) {\n var _a;\n if (start === end) return [[start]];\n var _b = graphData.edges,\n edges = _b === void 0 ? [] : _b;\n var visited = [start];\n var isVisited = (_a = {}, _a[start] = true, _a);\n var stack = []; // 辅助栈,用于存储访问过的节点的邻居节点\n var allPath = [];\n var neighbors = directed ? (0, _util.getNeighbors)(start, edges, 'target') : (0, _util.getNeighbors)(start, edges);\n stack.push(neighbors);\n while (visited.length > 0 && stack.length > 0) {\n var children = stack[stack.length - 1];\n if (children.length) {\n var child = children.shift();\n if (child) {\n visited.push(child);\n isVisited[child] = true;\n neighbors = directed ? (0, _util.getNeighbors)(child, edges, 'target') : (0, _util.getNeighbors)(child, edges);\n stack.push(neighbors.filter(function (neighbor) {\n return !isVisited[neighbor];\n }));\n }\n } else {\n var node = visited.pop();\n isVisited[node] = false;\n stack.pop();\n continue;\n }\n if (visited[visited.length - 1] === end) {\n var path = visited.map(function (node) {\n return node;\n });\n allPath.push(path);\n var node = visited.pop();\n isVisited[node] = false;\n stack.pop();\n }\n }\n return allPath;\n};\nexports.findAllPath = findAllPath;\n\n//# sourceURL=webpack:///./node_modules/@antv/algorithm/lib/find-path.js?");
/***/ }),
/***/ "./node_modules/@antv/algorithm/lib/floydWarshall.js":
/*!***********************************************************!*\
!*** ./node_modules/@antv/algorithm/lib/floydWarshall.js ***!
\***********************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
eval("\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\nvar _adjacentMatrix = _interopRequireDefault(__webpack_require__(/*! ./adjacent-matrix */ \"./node_modules/@antv/algorithm/lib/adjacent-matrix.js\"));\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\nvar floydWarshall = function floydWarshall(graphData, directed) {\n var adjacentMatrix = (0, _adjacentMatrix.default)(graphData, directed);\n var dist = [];\n var size = adjacentMatrix.length;\n for (var i = 0; i < size; i += 1) {\n dist[i] = [];\n for (var j = 0; j < size; j += 1) {\n if (i === j) {\n dist[i][j] = 0;\n } else if (adjacentMatrix[i][j] === 0 || !adjacentMatrix[i][j]) {\n dist[i][j] = Infinity;\n } else {\n dist[i][j] = adjacentMatrix[i][j];\n }\n }\n }\n // floyd\n for (var k = 0; k < size; k += 1) {\n for (var i = 0; i < size; i += 1) {\n for (var j = 0; j < size; j += 1) {\n if (dist[i][j] > dist[i][k] + dist[k][j]) {\n dist[i][j] = dist[i][k] + dist[k][j];\n }\n }\n }\n }\n return dist;\n};\nvar _default = floydWarshall;\nexports.default = _default;\n\n//# sourceURL=webpack:///./node_modules/@antv/algorithm/lib/floydWarshall.js?");
/***/ }),
/***/ "./node_modules/@antv/algorithm/lib/gSpan/gSpan.js":
/*!*********************************************************!*\
!*** ./node_modules/@antv/algorithm/lib/gSpan/gSpan.js ***!
\*********************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
eval("\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\nvar _util = __webpack_require__(/*! @antv/util */ \"./node_modules/@antv/util/esm/index.js\");\nvar _struct = __webpack_require__(/*! ./struct */ \"./node_modules/@antv/algorithm/lib/gSpan/struct.js\");\nvar DFSedge = /** @class */function () {\n function DFSedge(fromNode, toNode, fromNodeLabel, edgeLabel, toNodeLabel) {\n this.fromNode = fromNode;\n this.toNode = toNode;\n this.nodeEdgeNodeLabel = {\n nodeLabel1: fromNodeLabel || _struct.VACANT_NODE_LABEL,\n edgeLabel: edgeLabel || _struct.VACANT_EDGE_LABEL,\n nodeLabel2: toNodeLabel || _struct.VACANT_NODE_LABEL\n };\n }\n DFSedge.prototype.equalTo = function (other) {\n return this.fromNode === other.formNode && this.toNode === other.toNode && this.nodeEdgeNodeLabel === other.nodeEdgeNodeLabel;\n };\n DFSedge.prototype.notEqualTo = function (other) {\n return !this.equalTo(other);\n };\n return DFSedge;\n}();\n// DFScode 是 DESedge 的数组\nvar DFScode = /** @class */function () {\n function DFScode() {\n this.rmpath = [];\n this.dfsEdgeList = [];\n }\n DFScode.prototype.equalTo = function (other) {\n var aLength = this.dfsEdgeList.length;\n var bLength = other.length;\n if (aLength !== bLength) return false;\n for (var i = 0; i < aLength; i++) {\n if (this.dfsEdgeList[i] !== other[i]) return false;\n }\n return true;\n };\n DFScode.prototype.notEqualTo = function (other) {\n return !this.equalTo(other);\n };\n /** 增加一条 edge 到 DFScode */\n DFScode.prototype.pushBack = function (fromNode, toNode, fromNodeLabel, edgeLabel, toNodeLabel) {\n this.dfsEdgeList.push(new DFSedge(fromNode, toNode, fromNodeLabel, edgeLabel, toNodeLabel));\n return this.dfsEdgeList;\n };\n /** 根据 dfs 构建图 */\n DFScode.prototype.toGraph = function (graphId, directed) {\n if (graphId === void 0) {\n graphId = _struct.VACANT_GRAPH_ID;\n }\n if (directed === void 0) {\n directed = false;\n }\n var graph = new _struct.Graph(graphId, true, directed);\n this.dfsEdgeList.forEach(function (dfsEdge) {\n var fromNodeId = dfsEdge.fromNode;\n var toNodeId = dfsEdge.toNode;\n var _a = dfsEdge.nodeEdgeNodeLabel,\n nodeLabel1 = _a.nodeLabel1,\n edgeLabel = _a.edgeLabel,\n nodeLabel2 = _a.nodeLabel2;\n if (nodeLabel1 !== _struct.VACANT_NODE_LABEL) graph.addNode(fromNodeId, nodeLabel1);\n if (nodeLabel2 !== _struct.VACANT_NODE_LABEL) graph.addNode(toNodeId, nodeLabel2);\n if (nodeLabel1 !== _struct.VACANT_NODE_LABEL && nodeLabel2 !== nodeLabel1) graph.addEdge(undefined, fromNodeId, toNodeId, edgeLabel);\n });\n return graph;\n };\n // 建立 rightmost path\n DFScode.prototype.buildRmpath = function () {\n this.rmpath = [];\n var oldFrom = undefined;\n var selfLength = this.dfsEdgeList.length;\n for (var i = selfLength - 1; i >= 0; i--) {\n var dfsEdge = this.dfsEdgeList[i];\n var fromNodeIdx = dfsEdge.fromNode;\n var toNodeIdx = dfsEdge.toNode;\n if (fromNodeIdx < toNodeIdx && (oldFrom === undefined || toNodeIdx === oldFrom)) {\n this.rmpath.push(i);\n oldFrom = fromNodeIdx;\n }\n }\n return this.rmpath;\n };\n DFScode.prototype.getNodeNum = function () {\n var nodeMap = {};\n this.dfsEdgeList.forEach(function (dfsEdge) {\n if (!nodeMap[dfsEdge.fromNode]) nodeMap[dfsEdge.fromNode] = true;\n if (!nodeMap[dfsEdge.toNode]) nodeMap[dfsEdge.toNode] = true;\n });\n return Object.keys(nodeMap).length;\n };\n return DFScode;\n}();\nvar History = /** @class */function () {\n function History(pdfs) {\n this.his = {};\n this.nodesUsed = {};\n this.edgesUsed = {};\n this.edges = [];\n if (!pdfs) return;\n while (pdfs) {\n var e = pdfs.edge;\n this.edges.push(e);\n this.nodesUsed[e.from] = 1;\n this.nodesUsed[e.to] = 1;\n this.edgesUsed[e.id] = 1;\n pdfs = pdfs.preNode;\n }\n // 倒序\n this.edges = this.edges.reverse();\n }\n History.prototype.hasNode = function (node) {\n return this.nodesUsed[node.id] === 1;\n };\n History.prototype.hasEdge = function (edge) {\n return this.edgesUsed[edge.id] === 1;\n };\n return History;\n}();\nvar GSpan = /** @class */function () {\n function GSpan(_a) {\n var graphs = _a.graphs,\n _b = _a.minSupport,\n minSupport = _b === void 0 ? 2 : _b,\n _c = _a.minNodeNum,\n minNodeNum = _c === void 0 ? 1 : _c,\n _d = _a.maxNodeNum,\n maxNodeNum = _d === void 0 ? 4 : _d,\n _e = _a.top,\n top = _e === void 0 ? 10 : _e,\n _f = _a.directed,\n directed = _f === void 0 ? false : _f,\n _g = _a.verbose,\n verbose = _g === void 0 ? false : _g;\n // -------- 第零步,初始化-------\n this.graphs = graphs;\n this.dfsCode = new DFScode();\n this.support = 0;\n this.frequentSize1Subgraphs = [];\n this.frequentSubgraphs = [];\n this.minSupport = minSupport;\n this.top = top;\n this.directed = directed;\n this.counter = 0;\n // TODO? timestamp = {}\n this.maxNodeNum = maxNodeNum;\n this.minNodeNum = minNodeNum;\n this.verbose = verbose;\n if (this.maxNodeNum < this.minNodeNum) this.maxNodeNum = this.minNodeNum;\n this.reportDF = []; // matrix\n }\n // Line 352\n GSpan.prototype.findForwardRootEdges = function (graph, fromNode) {\n var _this = this;\n var result = [];\n var nodeMap = graph.nodeMap;\n fromNode.edges.forEach(function (edge) {\n if (_this.directed || fromNode.label <= nodeMap[edge.to].label) result.push(edge);\n });\n return result;\n };\n GSpan.prototype.findBackwardEdge = function (graph, edge1, edge2, history) {\n if (!this.directed && edge1 === edge2) return null;\n var nodeMap = graph.nodeMap;\n var edge2To = nodeMap[edge2.to];\n var edge2ToEdges = edge2To.edges;\n var edgeLength = edge2ToEdges.length;\n for (var i = 0; i < edgeLength; i++) {\n var edge = edge2ToEdges[i];\n if (history.hasEdge(edge) || edge.to !== edge1.from) continue;\n if (!this.directed) {\n if (edge1.label < edge.label || edge1.label === edge.label && nodeMap[edge1.to].label <= nodeMap[edge2.to].label) {\n return edge;\n }\n } else {\n if (nodeMap[edge1.from].label < nodeMap[edge2.to].label || nodeMap[edge1.from].label === nodeMap[edge2.to].label && edge1.label <= edge.label) {\n return edge;\n }\n }\n }\n return null;\n };\n GSpan.prototype.findForwardPureEdges = function (graph, rightmostEdge, minNodeLabel, history) {\n var result = [];\n var rightmostEdgeToId = rightmostEdge.to;\n var edges = graph.nodeMap[rightmostEdgeToId].edges;\n var edgeLength = edges.length;\n for (var i = 0; i < edgeLength; i++) {\n var edge = edges[i];\n var toNode = graph.nodeMap[edge.to];\n if (minNodeLabel <= toNode.label && !history.hasNode(toNode)) {\n result.push(edge);\n }\n }\n return result;\n };\n GSpan.prototype.findForwardRmpathEdges = function (graph, rightmostEdge, minNodeLabel, history) {\n var result = [];\n var nodeMap = graph.nodeMap;\n var toNodeLabel = nodeMap[rightmostEdge.to].label;\n var fromNode = nodeMap[rightmostEdge.from];\n var edges = fromNode.edges;\n var edgeLength = edges.length;\n for (var i = 0; i < edgeLength; i++) {\n var edge = edges[i];\n var newToNodeLabel = nodeMap[edge.to].label;\n if (rightmostEdge.to === edge.to || minNodeLabel > newToNodeLabel || history.hasNode(nodeMap[edge.to])) {\n continue;\n }\n if (rightmostEdge.label < edge.label || rightmostEdge.label === edge.label && toNodeLabel <= newToNodeLabel) {\n result.push(edge);\n }\n }\n return result;\n };\n GSpan.prototype.getSupport = function (projected) {\n var graphMap = {};\n projected.forEach(function (pro) {\n if (!graphMap[pro.graphId]) graphMap[pro.graphId] = true;\n });\n return Object.keys(graphMap).length;\n };\n GSpan.prototype.findMinLabel = function (obj) {\n var minLabel = undefined;\n Object.keys(obj).forEach(function (nodeEdgeNodeLabel) {\n var _a = obj[nodeEdgeNodeLabel],\n nodeLabel1 = _a.nodeLabel1,\n edgeLabel = _a.edgeLabel,\n nodeLabel2 = _a.nodeLabel2;\n if (!minLabel) {\n minLabel = {\n nodeLabel1: nodeLabel1,\n edgeLabel: edgeLabel,\n nodeLabel2: nodeLabel2\n };\n return;\n }\n if (nodeLabel1 < minLabel.nodeLabel1 || nodeLabel1 === minLabel.nodeLabel1 && edgeLabel < minLabel.edgeLabel || nodeLabel1 === minLabel.nodeLabel1 && edgeLabel === minLabel.edgeLabel && nodeLabel2 < minLabel.nodeLabel2) {\n minLabel = {\n nodeLabel1: nodeLabel1,\n edgeLabel: edgeLabel,\n nodeLabel2: nodeLabel2\n };\n }\n });\n return minLabel;\n };\n GSpan.prototype.isMin = function () {\n var _this = this;\n var dfsCode = this.dfsCode;\n if (this.verbose) console.log(\"isMin checking\", dfsCode);\n if (dfsCode.dfsEdgeList.length === 1) return true;\n var directed = this.directed;\n var graph = dfsCode.toGraph(_struct.VACANT_GRAPH_ID, directed);\n var nodeMap = graph.nodeMap;\n var dfsCodeMin = new DFScode();\n var root = {};\n graph.nodes.forEach(function (node) {\n var forwardEdges = _this.findForwardRootEdges(graph, node);\n forwardEdges.forEach(function (edge) {\n var otherNode = nodeMap[edge.to];\n var nodeEdgeNodeLabel = \"\".concat(node.label, \"-\").concat(edge.label, \"-\").concat(otherNode.label);\n if (!root[nodeEdgeNodeLabel]) root[nodeEdgeNodeLabel] = {\n projected: [],\n nodeLabel1: node.label,\n edgeLabel: edge.label,\n nodeLabel2: otherNode.label\n };\n var pdfs = {\n graphId: graph.id,\n edge: edge,\n preNode: null\n };\n root[nodeEdgeNodeLabel].projected.push(pdfs);\n });\n });\n // 比较 root 中每一项的 nodeEdgeNodeLabel 大小,按照 nodeLabel1、edgeLabe、nodeLabel2 的顺序比较\n var minLabel = this.findMinLabel(root); // line 419\n if (!minLabel) return;\n dfsCodeMin.dfsEdgeList.push(new DFSedge(0, 1, minLabel.nodeLabel1, minLabel.edgeLabel, minLabel.nodeLabel2));\n // line 423\n var projectIsMin = function projectIsMin(projected) {\n // right most path\n var rmpath = dfsCodeMin.buildRmpath();\n var minNodeLabel = dfsCodeMin.dfsEdgeList[0].nodeEdgeNodeLabel.nodeLabel1;\n var maxToC = dfsCodeMin.dfsEdgeList[rmpath[0]].toNode; // node id\n var backwardRoot = {};\n var flag = false,\n newTo = 0;\n var end = directed ? -1 : 0; // 遍历到 1 还是到 0\n var _loop_1 = function _loop_1(i) {\n if (flag) return \"break\";\n // line 435\n projected.forEach(function (p) {\n var history = new History(p);\n var backwardEdge = _this.findBackwardEdge(graph, history.edges[rmpath[i]], history.edges[rmpath[0]], history);\n if (backwardEdge) {\n // Line 441\n if (!backwardRoot[backwardEdge.label]) {\n backwardRoot[backwardEdge.label] = {\n projected: [],\n edgeLabel: backwardEdge.label\n };\n }\n backwardRoot[backwardEdge.label].projected.push({\n graphId: graph.id,\n edge: backwardRoot,\n preNode: p\n });\n newTo = dfsCodeMin.dfsEdgeList[rmpath[i]].fromNode;\n flag = true;\n }\n });\n };\n for (var i = rmpath.length - 1; i > end; i--) {\n var state_1 = _loop_1(i);\n if (state_1 === \"break\") break;\n }\n if (flag) {\n var minBackwardEdgeLabel = _this.findMinLabel(backwardRoot);\n dfsCodeMin.dfsEdgeList.push(new DFSedge(maxToC, newTo, _struct.VACANT_NODE_LABEL, minBackwardEdgeLabel.edgeLabel, _struct.VACANT_NODE_LABEL));\n var idx_1 = dfsCodeMin.dfsEdgeList.length - 1;\n if (_this.dfsCode.dfsEdgeList[idx_1] !== dfsCodeMin.dfsEdgeList[idx_1]) return false;\n return projectIsMin(backwardRoot[minBackwardEdgeLabel.edgeLabel].projected);\n }\n var forwardRoot = {};\n flag = false;\n var newFrom = 0;\n projected.forEach(function (p) {\n var history = new History(p);\n var forwardPureEdges = _this.findForwardPureEdges(graph, history.edges[rmpath[0]], minNodeLabel, history);\n if (forwardPureEdges.length > 0) {\n flag = true;\n newFrom = maxToC;\n forwardPureEdges.forEach(function (edge) {\n var key = \"\".concat(edge.label, \"-\").concat(nodeMap[edge.to].label);\n if (!forwardRoot[key]) forwardRoot[key] = {\n projected: [],\n edgeLabel: edge.label,\n nodeLabel2: nodeMap[edge.to].label\n };\n forwardRoot[key].projected.push({\n graphId: graph.id,\n edge: edge,\n preNode: p\n });\n });\n }\n });\n var pathLength = rmpath.length;\n var _loop_2 = function _loop_2(i) {\n if (flag) return \"break\";\n var value = rmpath[i];\n projected.forEach(function (p) {\n var history = new History(p);\n var forwardRmpathEdges = _this.findForwardRmpathEdges(graph, history.edges[value], minNodeLabel, history);\n if (forwardRmpathEdges.length > 0) {\n flag = true;\n newFrom = dfsCodeMin.dfsEdgeList[value].fromNode;\n forwardRmpathEdges.forEach(function (edge) {\n var key = \"\".concat(edge.label, \"-\").concat(nodeMap[edge.to].label);\n if (!forwardRoot[key]) forwardRoot[key] = {\n projected: [],\n edgeLabel: edge.label,\n nodeLabel2: nodeMap[edge.to].label\n };\n forwardRoot[key].projected.push({\n graphId: graph.id,\n edge: edge,\n preNode: p\n });\n });\n }\n });\n };\n for (var i = 0; i < pathLength; i++) {\n var state_2 = _loop_2(i);\n if (state_2 === \"break\") break;\n }\n if (!flag) return true;\n var forwardMinEdgeNodeLabel = _this.findMinLabel(forwardRoot);\n dfsCodeMin.dfsEdgeList.push(new DFSedge(newFrom, maxToC + 1, _struct.VACANT_NODE_LABEL, forwardMinEdgeNodeLabel.edgeLabel, forwardMinEdgeNodeLabel.nodeLabel2));\n var idx = dfsCodeMin.dfsEdgeList.length - 1;\n if (dfsCode.dfsEdgeList[idx] !== dfsCodeMin.dfsEdgeList[idx]) return false;\n return projectIsMin(forwardRoot[\"\".concat(forwardMinEdgeNodeLabel.edgeLabel, \"-\").concat(forwardMinEdgeNodeLabel.nodeLabel2)].projected);\n };\n var key = \"\".concat(minLabel.nodeLabel1, \"-\").concat(minLabel.edgeLabel, \"-\").concat(minLabel.nodeLabel2);\n return projectIsMin(root[key].projected);\n };\n GSpan.prototype.report = function () {\n if (this.dfsCode.getNodeNum() < this.minNodeNum) return;\n this.counter++;\n var graph = this.dfsCode.toGraph(this.counter, this.directed);\n this.frequentSubgraphs.push((0, _util.clone)(graph));\n };\n GSpan.prototype.subGraphMining = function (projected) {\n var _this = this;\n var support = this.getSupport(projected);\n if (support < this.minSupport) return;\n if (!this.isMin()) return;\n this.report();\n var nodeNum = this.dfsCode.getNodeNum();\n var rmpath = this.dfsCode.buildRmpath();\n var maxToC = this.dfsCode.dfsEdgeList[rmpath[0]].toNode;\n var minNodeLabel = this.dfsCode.dfsEdgeList[0].nodeEdgeNodeLabel.nodeLabel1;\n var forwardRoot = {};\n var backwardRoot = {};\n projected.forEach(function (p) {\n var graph = _this.graphs[p.graphId];\n var nodeMap = graph.nodeMap;\n var history = new History(p);\n // backward Line 526\n for (var i = rmpath.length - 1; i >= 0; i--) {\n var backwardEdge = _this.findBackwardEdge(graph, history.edges[rmpath[i]], history.edges[rmpath[0]], history);\n if (backwardEdge) {\n var key = \"\".concat(_this.dfsCode.dfsEdgeList[rmpath[i]].fromNode, \"-\").concat(backwardEdge.label);\n if (!backwardRoot[key]) backwardRoot[key] = {\n projected: [],\n toNodeId: _this.dfsCode.dfsEdgeList[rmpath[i]].fromNode,\n edgeLabel: backwardEdge.label\n };\n backwardRoot[key].projected.push({\n graphId: p.graphId,\n edge: backwardEdge,\n preNode: p\n });\n }\n }\n // pure forward\n if (nodeNum >= _this.maxNodeNum) return;\n var forwardPureEdges = _this.findForwardPureEdges(graph, history.edges[rmpath[0]], minNodeLabel, history);\n forwardPureEdges.forEach(function (edge) {\n var key = \"\".concat(maxToC, \"-\").concat(edge.label, \"-\").concat(nodeMap[edge.to].label);\n if (!forwardRoot[key]) forwardRoot[key] = {\n projected: [],\n fromNodeId: maxToC,\n edgeLabel: edge.label,\n nodeLabel2: nodeMap[edge.to].label\n };\n forwardRoot[key].projected.push({\n graphId: p.graphId,\n edge: edge,\n preNode: p\n });\n });\n var _loop_3 = function _loop_3(i) {\n var forwardRmpathEdges = _this.findForwardRmpathEdges(graph, history.edges[rmpath[i]], minNodeLabel, history);\n forwardRmpathEdges.forEach(function (edge) {\n var key = \"\".concat(_this.dfsCode.dfsEdgeList[rmpath[i]].fromNode, \"-\").concat(edge.label, \"-\").concat(nodeMap[edge.to].label);\n if (!forwardRoot[key]) forwardRoot[key] = {\n projected: [],\n fromNodeId: _this.dfsCode.dfsEdgeList[rmpath[i]].fromNode,\n edgeLabel: edge.label,\n nodeLabel2: nodeMap[edge.to].label\n };\n forwardRoot[key].projected.push({\n graphId: p.graphId,\n edge: edge,\n preNode: p\n });\n });\n };\n // rmpath forward\n for (var i = 0; i < rmpath.length; i++) {\n _loop_3(i);\n }\n });\n // backward\n Object.keys(backwardRoot).forEach(function (key) {\n var _a = backwardRoot[key],\n toNodeId = _a.toNodeId,\n edgeLabel = _a.edgeLabel;\n _this.dfsCode.dfsEdgeList.push(new DFSedge(maxToC, toNodeId, \"-1\", edgeLabel, \"-1\"));\n _this.subGraphMining(backwardRoot[key].projected);\n _this.dfsCode.dfsEdgeList.pop();\n });\n // forward\n Object.keys(forwardRoot).forEach(function (key) {\n var _a = forwardRoot[key],\n fromNodeId = _a.fromNodeId,\n edgeLabel = _a.edgeLabel,\n nodeLabel2 = _a.nodeLabel2;\n _this.dfsCode.dfsEdgeList.push(new DFSedge(fromNodeId, maxToC + 1, _struct.VACANT_NODE_LABEL, edgeLabel, nodeLabel2));\n _this.subGraphMining(forwardRoot[key].projected);\n _this.dfsCode.dfsEdgeList.pop();\n });\n };\n GSpan.prototype.generate1EdgeFrequentSubGraphs = function () {\n var graphs = this.graphs;\n var directed = this.directed;\n var minSupport = this.minSupport;\n var frequentSize1Subgraphs = this.frequentSize1Subgraphs;\n var nodeLabelCounter = {},\n nodeEdgeNodeCounter = {};\n // 保存各个图和各自节点的关系 map,key 格式为 graphKey-node类型\n var nodeLableCounted = {};\n // 保存各个图和各自边的关系 map,key 格式为 graphKey-fromNode类型-edge类型-toNode类型\n var nodeEdgeNodeLabelCounted = {};\n Object.keys(graphs).forEach(function (key) {\n // Line 271\n var graph = graphs[key];\n var nodeMap = graph.nodeMap;\n // 遍历节点,记录对应图 与 每个节点的 label 到 nodeLableCounted\n graph.nodes.forEach(function (node, i) {\n // Line 272\n var nodeLabel = node.label;\n var graphNodeKey = \"\".concat(key, \"-\").concat(nodeLabel);\n if (!nodeLableCounted[graphNodeKey]) {\n var counter = nodeLabelCounter[nodeLabel] || 0;\n counter++;\n nodeLabelCounter[nodeLabel] = counter;\n }\n nodeLableCounted[graphNodeKey] = {\n graphKey: key,\n label: nodeLabel\n };\n // 遍历该节点的所有边,记录各个图和各自边的关系到 nodeEdgeNodeLabelCounted. Line 276\n node.edges.forEach(function (edge) {\n var nodeLabel1 = nodeLabel;\n var nodeLabel2 = nodeMap[edge.to].label;\n if (!directed && nodeLabel1 > nodeLabel2) {\n var tmp = nodeLabel2;\n nodeLabel2 = nodeLabel1;\n nodeLabel1 = tmp;\n }\n var edgeLabel = edge.label;\n var graphNodeEdgeNodeKey = \"\".concat(key, \"-\").concat(nodeLabel1, \"-\").concat(edgeLabel, \"-\").concat(nodeLabel2);\n var nodeEdgeNodeKey = \"\".concat(nodeLabel1, \"-\").concat(edgeLabel, \"-\").concat(nodeLabel2);\n if (!nodeEdgeNodeCounter[nodeEdgeNodeKey]) {\n var counter = nodeEdgeNodeCounter[nodeEdgeNodeKey] || 0;\n counter++;\n nodeEdgeNodeCounter[nodeEdgeNodeKey] = counter; // Line281\n }\n\n nodeEdgeNodeLabelCounted[graphNodeEdgeNodeKey] = {\n graphId: key,\n nodeLabel1: nodeLabel1,\n edgeLabel: edgeLabel,\n nodeLabel2: nodeLabel2\n };\n });\n });\n });\n // 计算频繁的节点\n Object.keys(nodeLabelCounter).forEach(function (label) {\n var count = nodeLabelCounter[label];\n if (count < minSupport) return;\n var g = {\n nodes: [],\n edges: []\n };\n g.nodes.push({\n id: \"0\",\n label: label\n });\n frequentSize1Subgraphs.push(g);\n // if (minNodeNum <= 1) reportSize1 TODO\n });\n\n return frequentSize1Subgraphs;\n };\n GSpan.prototype.run = function () {\n var _this = this;\n // -------- 第一步, _generate_1edge_frequent_subgraphs:频繁的单个节点-------\n this.frequentSize1Subgraphs = this.generate1EdgeFrequentSubGraphs();\n if (this.maxNodeNum < 2) return;\n var graphs = this.graphs;\n var directed = this.directed;\n // PDFS 数组的 map Line 304\n var root = {};\n Object.keys(graphs).forEach(function (graphId) {\n var graph = graphs[graphId];\n var nodeMap = graph.nodeMap;\n // Line 306\n graph.nodes.forEach(function (node) {\n var forwardRootEdges = _this.findForwardRootEdges(graph, node);\n // Line 308\n forwardRootEdges.forEach(function (edge) {\n var toNode = nodeMap[edge.to];\n var nodeEdgeNodeLabel = \"\".concat(node.label, \"-\").concat(edge.label, \"-\").concat(toNode.label);\n if (!root[nodeEdgeNodeLabel]) root[nodeEdgeNodeLabel] = {\n projected: [],\n nodeLabel1: node.label,\n edgeLabel: edge.label,\n nodeLabel2: toNode.label\n };\n var pdfs = {\n graphId: graphId,\n edge: edge,\n preNode: null\n };\n root[nodeEdgeNodeLabel].projected.push(pdfs);\n });\n });\n });\n // Line 313\n Object.keys(root).forEach(function (nodeEdgeNodeLabel) {\n var _a = root[nodeEdgeNodeLabel],\n projected = _a.projected,\n nodeLabel1 = _a.nodeLabel1,\n edgeLabel = _a.edgeLabel,\n nodeLabel2 = _a.nodeLabel2;\n _this.dfsCode.dfsEdgeList.push(new DFSedge(0, 1, nodeLabel1, edgeLabel, nodeLabel2));\n _this.subGraphMining(projected);\n _this.dfsCode.dfsEdgeList.pop();\n });\n };\n return GSpan;\n}();\nvar formatGraphs = function formatGraphs(graphs, directed, nodeLabelProp, edgeLabelProp) {\n var result = {};\n Object.keys(graphs).forEach(function (key, i) {\n var graph = graphs[key];\n var fGraph = new _struct.Graph(i, true, directed);\n var nodeIdxMap = {};\n graph.nodes.forEach(function (node, j) {\n fGraph.addNode(j, node[nodeLabelProp]);\n nodeIdxMap[node.id] = j;\n });\n graph.edges.forEach(function (edge, k) {\n var sourceIdx = nodeIdxMap[edge.source];\n var targetIdx = nodeIdxMap[edge.target];\n fGraph.addEdge(-1, sourceIdx, targetIdx, edge[edgeLabelProp]);\n });\n if (fGraph && fGraph.getNodeNum()) result[fGraph.id] = fGraph;\n });\n return result;\n};\nvar toGraphDatas = function toGraphDatas(graphs, nodeLabelProp, edgeLabelProp) {\n var result = [];\n graphs.forEach(function (graph) {\n var graphData = {\n nodes: [],\n edges: []\n };\n graph.nodes.forEach(function (node) {\n var _a;\n graphData.nodes.push((_a = {\n id: \"\".concat(node.id)\n }, _a[nodeLabelProp] = node.label, _a));\n });\n graph.edges.forEach(function (edge) {\n var _a;\n graphData.edges.push((_a = {\n source: \"\".concat(edge.from),\n target: \"\".concat(edge.to)\n }, _a[edgeLabelProp] = edge.label, _a));\n });\n result.push(graphData);\n });\n return result;\n};\nvar DEFAULT_LABEL_NAME = \"cluster\";\n/**\n * gSpan 频繁子图计算算法(frequent graph mining)\n * @param params 参数\n */\nvar gSpan = function gSpan(params) {\n // ------- 将图数据 GraphData 的 map 转换为格式 -------\n var graphs = params.graphs,\n _a = params.directed,\n directed = _a === void 0 ? false : _a,\n _b = params.nodeLabelProp,\n nodeLabelProp = _b === void 0 ? DEFAULT_LABEL_NAME : _b,\n _c = params.edgeLabelProp,\n edgeLabelProp = _c === void 0 ? DEFAULT_LABEL_NAME : _c;\n var formattedGraphs = formatGraphs(graphs, directed, nodeLabelProp, edgeLabelProp);\n var minSupport = params.minSupport,\n maxNodeNum = params.maxNodeNum,\n minNodeNum = params.minNodeNum,\n verbose = params.verbose,\n top = params.top;\n // ------- 初始化与执行算法 -------\n var algoParams = {\n graphs: formattedGraphs,\n minSupport: minSupport,\n maxNodeNum: maxNodeNum,\n minNodeNum: minNodeNum,\n top: top,\n verbose: verbose,\n directed: directed\n };\n var calculator = new GSpan(algoParams);\n calculator.run();\n var result = toGraphDatas(calculator.frequentSubgraphs, nodeLabelProp, edgeLabelProp);\n return result;\n};\nvar _default = gSpan;\nexports.default = _default;\n\n//# sourceURL=webpack:///./node_modules/@antv/algorithm/lib/gSpan/gSpan.js?");
/***/ }),
/***/ "./node_modules/@antv/algorithm/lib/gSpan/struct.js":
/*!**********************************************************!*\
!*** ./node_modules/@antv/algorithm/lib/gSpan/struct.js ***!
\**********************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
eval("\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.VACANT_NODE_LABEL = exports.VACANT_NODE_ID = exports.VACANT_GRAPH_ID = exports.VACANT_EDGE_LABEL = exports.VACANT_EDGE_ID = exports.Node = exports.Graph = exports.Edge = exports.AUTO_EDGE_ID = void 0;\nvar VACANT_EDGE_ID = -1;\nexports.VACANT_EDGE_ID = VACANT_EDGE_ID;\nvar VACANT_NODE_ID = -1;\nexports.VACANT_NODE_ID = VACANT_NODE_ID;\nvar VACANT_EDGE_LABEL = \"-1\";\nexports.VACANT_EDGE_LABEL = VACANT_EDGE_LABEL;\nvar VACANT_NODE_LABEL = \"-1\";\nexports.VACANT_NODE_LABEL = VACANT_NODE_LABEL;\nvar VACANT_GRAPH_ID = -1;\nexports.VACANT_GRAPH_ID = VACANT_GRAPH_ID;\nvar AUTO_EDGE_ID = \"-1\";\nexports.AUTO_EDGE_ID = AUTO_EDGE_ID;\nvar Edge = /** @class */function () {\n function Edge(id, from, to, label) {\n if (id === void 0) {\n id = VACANT_EDGE_ID;\n }\n if (from === void 0) {\n from = VACANT_NODE_ID;\n }\n if (to === void 0) {\n to = VACANT_NODE_ID;\n }\n if (label === void 0) {\n label = VACANT_EDGE_LABEL;\n }\n this.id = id;\n this.from = from;\n this.to = to;\n this.label = label;\n }\n return Edge;\n}();\nexports.Edge = Edge;\nvar Node = /** @class */function () {\n function Node(id, label) {\n if (id === void 0) {\n id = VACANT_NODE_ID;\n }\n if (label === void 0) {\n label = VACANT_NODE_LABEL;\n }\n this.id = id;\n this.label = label;\n this.edges = [];\n this.edgeMap = {};\n }\n Node.prototype.addEdge = function (edge) {\n this.edges.push(edge);\n this.edgeMap[edge.id] = edge;\n };\n return Node;\n}();\nexports.Node = Node;\nvar Graph = /** @class */function () {\n function Graph(id, edgeIdAutoIncrease, directed) {\n if (id === void 0) {\n id = VACANT_NODE_ID;\n }\n if (edgeIdAutoIncrease === void 0) {\n edgeIdAutoIncrease = true;\n }\n if (directed === void 0) {\n directed = false;\n }\n this.id = id;\n this.edgeIdAutoIncrease = edgeIdAutoIncrease;\n this.edges = [];\n this.nodes = [];\n this.nodeMap = {};\n this.edgeMap = {};\n this.nodeLabelMap = {};\n this.edgeLabelMap = {};\n this.counter = 0;\n this.directed = directed;\n }\n Graph.prototype.getNodeNum = function () {\n return this.nodes.length;\n };\n Graph.prototype.addNode = function (id, label) {\n if (this.nodeMap[id]) return;\n var node = new Node(id, label);\n this.nodes.push(node);\n this.nodeMap[id] = node;\n if (!this.nodeLabelMap[label]) this.nodeLabelMap[label] = [];\n this.nodeLabelMap[label].push(id);\n };\n Graph.prototype.addEdge = function (id, from, to, label) {\n if (this.edgeIdAutoIncrease || id === undefined) id = this.counter++;\n if (this.nodeMap[from] && this.nodeMap[to] && this.nodeMap[to].edgeMap[id]) return;\n var edge = new Edge(id, from, to, label);\n this.edges.push(edge);\n this.edgeMap[id] = edge;\n this.nodeMap[from].addEdge(edge);\n if (!this.edgeLabelMap[label]) this.edgeLabelMap[label] = [];\n this.edgeLabelMap[label].push(edge);\n if (!this.directed) {\n var rEdge = new Edge(id, to, from, label);\n this.nodeMap[to].addEdge(rEdge);\n this.edgeLabelMap[label].push(rEdge);\n }\n };\n return Graph;\n}();\nexports.Graph = Graph;\n\n//# sourceURL=webpack:///./node_modules/@antv/algorithm/lib/gSpan/struct.js?");
/***/ }),
/***/ "./node_modules/@antv/algorithm/lib/gaddi.js":
/*!***************************************************!*\
!*** ./node_modules/@antv/algorithm/lib/gaddi.js ***!
\***************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
eval("\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\nvar _tslib = __webpack_require__(/*! tslib */ \"./node_modules/tslib/tslib.es6.js\");\nvar _floydWarshall = _interopRequireDefault(__webpack_require__(/*! ./floydWarshall */ \"./node_modules/@antv/algorithm/lib/floydWarshall.js\"));\nvar _gSpan = _interopRequireDefault(__webpack_require__(/*! ./gSpan/gSpan */ \"./node_modules/@antv/algorithm/lib/gSpan/gSpan.js\"));\nvar _dijkstra = _interopRequireDefault(__webpack_require__(/*! ./dijkstra */ \"./node_modules/@antv/algorithm/lib/dijkstra.js\"));\nvar _util = __webpack_require__(/*! ./util */ \"./node_modules/@antv/algorithm/lib/util.js\");\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n/**\n * 为 graphData 中每个节点生成邻居单元数组\n * @param graphData\n * @param spm\n * @param nodeLabelProp\n * @param k k-近邻\n */\nvar findKNeighborUnits = function findKNeighborUnits(graphData, spm, nodeLabelProp, k) {\n if (nodeLabelProp === void 0) {\n nodeLabelProp = 'cluster';\n }\n if (k === void 0) {\n k = 2;\n }\n var units = [];\n var nodes = graphData.nodes;\n spm.forEach(function (row, i) {\n units.push(findKNeighborUnit(nodes, row, i, nodeLabelProp, k));\n });\n return units;\n};\nvar findKNeighborUnit = function findKNeighborUnit(nodes, row, i, nodeLabelProp, k) {\n var unitNodeIdxs = [i];\n var neighbors = [];\n var labelCountMap = {};\n row.forEach(function (v, j) {\n if (v <= k && i !== j) {\n unitNodeIdxs.push(j);\n neighbors.push(nodes[j]);\n var label = nodes[j][nodeLabelProp];\n if (!labelCountMap[label]) labelCountMap[label] = {\n count: 1,\n dists: [v]\n };else {\n labelCountMap[label].count++;\n labelCountMap[label].dists.push(v);\n }\n }\n });\n // 将 labelCountMap 中的 dists 按照从小到大排序,方便后面使用\n Object.keys(labelCountMap).forEach(function (label) {\n labelCountMap[label].dists = labelCountMap[label].dists.sort(function (a, b) {\n return a - b;\n });\n });\n return {\n nodeIdx: i,\n nodeId: nodes[i].id,\n nodeIdxs: unitNodeIdxs,\n neighbors: neighbors,\n neighborNum: unitNodeIdxs.length - 1,\n nodeLabelCountMap: labelCountMap\n };\n};\n/**\n * 随机寻找点对,满足距离小于 k\n * @param k 参数 k,表示 k-近邻\n * @param nodeNum 参数 length\n * @param maxNodePairNum 寻找点对的数量不超过 maxNodePairNum\n * @param spm 最短路径矩阵\n */\nvar findNodePairsRandomly = function findNodePairsRandomly(k, nodeNum, maxNodePairNum, kNeighborUnits, spm) {\n // 每个节点需要随机找出的点对数\n var nodePairNumEachNode = Math.ceil(maxNodePairNum / nodeNum);\n var nodePairMap = {};\n var foundNodePairCount = 0;\n // 遍历节点,为每个节点随机找出 nodePairNumEachNode 个点对,满足距离小于 k。找到的点对数量超过 maxNodePairNum 或所有节点遍历结束时终止\n kNeighborUnits.forEach(function (unit, i) {\n // 若未达到 nodePairNumEachNode,或循环次数小于最大循环次数(2 * nodeNum),继续循环\n var nodePairForICount = 0;\n var outerLoopCount = 0;\n var neighbors = unit.nodeIdxs; // the first one is the center node\n var neighborNum = unit.neighborNum - 1;\n while (nodePairForICount < nodePairNumEachNode) {\n // 另一端节点在节点数组中的的 index\n var oidx = neighbors[1 + Math.floor(Math.random() * neighborNum)];\n var innerLoopCount = 0;\n // 若随机得到的另一端 idx 不符合条件,则继续 random。条件是不是同一个节点、这个点对没有被记录过、距离小于 k\n while (nodePairMap[\"\".concat(i, \"-\").concat(oidx)] || nodePairMap[\"\".concat(oidx, \"-\").concat(i)]) {\n oidx = Math.floor(Math.random() * nodeNum);\n innerLoopCount++;\n if (innerLoopCount > 2 * nodeNum) break; // 循环次数大于最大循环次数(2 * nodeNum)跳出循环,避免死循环\n }\n\n if (innerLoopCount < 2 * nodeNum) {\n // 未达到最大循环次数,说明找到了合适的另一端\n nodePairMap[\"\".concat(i, \"-\").concat(oidx)] = {\n start: i,\n end: oidx,\n distance: spm[i][oidx]\n };\n nodePairForICount++;\n foundNodePairCount++;\n // 如果当前找到的点对数量达到了上限,返回结果\n if (foundNodePairCount >= maxNodePairNum) return nodePairMap;\n }\n outerLoopCount++;\n if (outerLoopCount > 2 * nodeNum) break; // 循环次数大于最大循环次数(2 * nodeNum)跳出循环,避免死循环\n }\n // 这个节点没有找到足够 nodePairNumEachNode 的点对。更新 nodePairNumEachNode,让后续节点找更多的点对\n if (nodePairForICount < nodePairNumEachNode) {\n var gap = nodePairNumEachNode - nodePairForICount;\n nodePairNumEachNode = (nodePairNumEachNode + gap) / (nodeNum - i - 1);\n }\n });\n return nodePairMap;\n};\n/**\n * 计算所有 nodePairMap 中节点对的相交邻居诱导子图\n * @param nodePairMap 节点对 map,key 为 node1.id-node2.id,value 为 { startNodeIdx, endNodeIdx, distance }\n * @param neighborUnits 每个节点的邻居元数组\n * @param graphData 原图数据\n * @param edgeMap 边的 map,方便检索\n * @param cachedInducedGraphMap 缓存的结果,下次进入该函数将继续更新该缓存,若 key 在缓存中存在则不需要重复计算\n */\nvar getIntersectNeighborInducedGraph = function getIntersectNeighborInducedGraph(nodePairMap, neighborUnits, graphData, cachedInducedGraphMap) {\n var nodes = graphData.nodes;\n if (!cachedInducedGraphMap) cachedInducedGraphMap = {};\n Object.keys(nodePairMap).forEach(function (key) {\n var _a, _b;\n if (cachedInducedGraphMap && cachedInducedGraphMap[key]) return;\n cachedInducedGraphMap[key] = {\n nodes: [],\n edges: []\n };\n var pair = nodePairMap[key];\n var startUnitNodeIds = (_a = neighborUnits[pair.start]) === null || _a === void 0 ? void 0 : _a.nodeIdxs;\n var endUnitNodeIds = (_b = neighborUnits[pair.end]) === null || _b === void 0 ? void 0 : _b.nodeIdxs;\n if (!startUnitNodeIds || !endUnitNodeIds) return; // 不存在邻元,返回空图\n var endSet = new Set(endUnitNodeIds);\n var intersect = startUnitNodeIds.filter(function (x) {\n return endSet.has(x);\n }); // 可能会爆栈(在 1580 + 6 nodes full-connected 时出现)\n if (!intersect || !intersect.length) return; // 没有交集,返回空图\n var intersectIdMap = {};\n var intersectLength = intersect.length;\n for (var i = 0; i < intersectLength; i++) {\n var node = nodes[intersect[i]];\n cachedInducedGraphMap[key].nodes.push(node); // 将交集中的点加入诱导子图\n intersectIdMap[node.id] = true;\n }\n // 遍历所有边数据,如果边的两端都在交集中,将该边加入诱导子图\n graphData.edges.forEach(function (edge) {\n if (intersectIdMap[edge.source] && intersectIdMap[edge.target]) cachedInducedGraphMap[key].edges.push(edge);\n });\n });\n return cachedInducedGraphMap;\n};\n/**\n * 计算 strcutre 在 graph 上的匹配数量\n * @param graph 图数据\n * @param structure 目前支持只有两个节点一条边的最简单结构\n * @param nodeLabelProp 节点类型字段名\n * @param edgeLabelProp 边类型字段名\n */\nvar getMatchedCount = function getMatchedCount(graph, structure, nodeLabelProp, edgeLabelProp) {\n var _a, _b;\n var nodeMap = {};\n graph.nodes.forEach(function (node) {\n nodeMap[node.id] = node;\n });\n var count = 0;\n if (!((_a = structure === null || structure === void 0 ? void 0 : structure.edges) === null || _a === void 0 ? void 0 : _a.length) || ((_b = structure === null || structure === void 0 ? void 0 : structure.nodes) === null || _b === void 0 ? void 0 : _b.length) < 2) return 0;\n graph.edges.forEach(function (e) {\n var sourceLabel = nodeMap[e.source][nodeLabelProp];\n var targetLabel = nodeMap[e.target][nodeLabelProp];\n var strNodeLabel1 = structure === null || structure === void 0 ? void 0 : structure.nodes[0][nodeLabelProp];\n var strNodeLabel2 = structure === null || structure === void 0 ? void 0 : structure.nodes[1][nodeLabelProp];\n var strEdgeLabel = structure === null || structure === void 0 ? void 0 : structure.edges[0][edgeLabelProp];\n if (e[edgeLabelProp] !== strEdgeLabel) return;\n if (sourceLabel === strNodeLabel1 && targetLabel === strNodeLabel2 || sourceLabel === strNodeLabel2 && targetLabel === strNodeLabel1) {\n count++;\n }\n });\n return count;\n};\n/**\n * structures 中寻找最具有代表性的一个。这个结构是使得 matchedCountMap 的分组方式类内间距最小,类间间距最大\n * @param matchedCountMap 每个 structure 分类后的各图匹配数量,格式 { [strcture.idx]: { [interInducedGraphKey]: count } }\n * @param structureNum strcuture 个数,与 matchedCountMap.length 对应\n * @param structures\n */\nvar findRepresentStructure = function findRepresentStructure(matchedCountMap, structureNum, structures) {\n var maxOffset = Infinity,\n representClusterType = 0;\n var _loop_1 = function _loop_1(i) {\n // 一种分组的 map,key 是 intGraph 的 key,value 是 structures[i] 的匹配个数\n var countMapI = matchedCountMap[i];\n // 按照 value 为该组排序,生成 keys 的数组:\n var sortedGraphKeys = Object.keys(countMapI).sort(function (a, b) {\n return countMapI[a] - countMapI[b];\n });\n // 共 100 个 graphKeys,将 graphKeys 按顺序分为 groupNum 组\n var groupNum = 10;\n var clusters = []; // 总共有 groupNum 个项\n sortedGraphKeys.forEach(function (key, j) {\n if (!clusters[j % groupNum]) clusters[j % groupNum] = {\n graphs: [],\n totalCount: 0,\n aveCount: 0\n };\n clusters[j % groupNum].graphs.push(key);\n clusters[j % groupNum].totalCount += countMapI[key];\n });\n // 计算 cluster 与 cluster 之间的距离 innerDist,每个 cluster 内部的距离 intraDist\n var aveIntraDist = 0; // 该类的类内平均值\n var aveCounts = []; // 类内平均匹配数量,将用于计算类间距离\n clusters.forEach(function (graphsInCluster) {\n // 类内均值\n var aveCount = graphsInCluster.totalCount / graphsInCluster.graphs.length;\n graphsInCluster.aveCount = aveCount;\n aveCounts.push(aveCount);\n // 对于每类,计算类内间距平均值\n var aveIntraPerCluster = 0;\n var graphsNum = graphsInCluster.length;\n graphsInCluster.graphs.forEach(function (graphKey1, j) {\n var graph1Count = countMapI[graphKey1];\n graphsInCluster.graphs.forEach(function (graphKey2, k) {\n if (j === k) return;\n aveIntraPerCluster += Math.abs(graph1Count - countMapI[graphKey2]);\n });\n });\n aveIntraPerCluster /= graphsNum * (graphsNum - 1) / 2;\n aveIntraDist += aveIntraPerCluster;\n });\n aveIntraDist /= clusters.length;\n // 用类内均值计算类间距\n var aveInterDist = 0; // 类间间距平均值\n aveCounts.forEach(function (aveCount1, j) {\n aveCounts.forEach(function (aveCount2, k) {\n if (j === k) return;\n aveInterDist += Math.abs(aveCount1 - aveCount2);\n });\n aveInterDist /= aveCounts.length * (aveCounts.length - 1) / 2;\n });\n // 寻找 (类间间距均值-类内间距均值) 最大的一种分组方式(对应的 structure 就是最终要找的唯一 DS(G))\n var offset = aveInterDist - aveIntraDist;\n if (maxOffset < offset) {\n maxOffset = offset;\n representClusterType = i;\n }\n };\n for (var i = 0; i < structureNum; i++) {\n _loop_1(i);\n }\n return {\n structure: structures[representClusterType],\n structureCountMap: matchedCountMap[representClusterType]\n };\n};\nvar getNodeMaps = function getNodeMaps(nodes, nodeLabelProp) {\n var nodeMap = {},\n nodeLabelMap = {};\n nodes.forEach(function (node, i) {\n nodeMap[node.id] = {\n idx: i,\n node: node,\n degree: 0,\n inDegree: 0,\n outDegree: 0\n };\n var label = node[nodeLabelProp];\n if (!nodeLabelMap[label]) nodeLabelMap[label] = [];\n nodeLabelMap[label].push(node);\n });\n return {\n nodeMap: nodeMap,\n nodeLabelMap: nodeLabelMap\n };\n};\nvar getEdgeMaps = function getEdgeMaps(edges, edgeLabelProp, nodeMap) {\n var edgeMap = {},\n edgeLabelMap = {};\n edges.forEach(function (edge, i) {\n edgeMap[\"\".concat(_util.uniqueId)] = {\n idx: i,\n edge: edge\n };\n var label = edge[edgeLabelProp];\n if (!edgeLabelMap[label]) edgeLabelMap[label] = [];\n edgeLabelMap[label].push(edge);\n var sourceNode = nodeMap[edge.source];\n if (sourceNode) {\n sourceNode.degree++;\n sourceNode.outDegree++;\n }\n var targetNode = nodeMap[edge.target];\n if (targetNode) {\n targetNode.degree++;\n targetNode.inDegree++;\n }\n });\n return {\n edgeMap: edgeMap,\n edgeLabelMap: edgeLabelMap\n };\n};\n/**\n * 输出最短路径的 map,key 为 sourceNode.id-targetNode.id,value 为这两个节点的最短路径长度\n * @param nodes\n * @param spm\n * @param directed\n */\nvar getSpmMap = function getSpmMap(nodes, spm, directed) {\n var length = spm.length;\n var map = {};\n spm.forEach(function (row, i) {\n var start = directed ? 0 : i + 1;\n var iId = nodes[i].id;\n for (var j = start; j < length; j++) {\n if (i === j) continue;\n var jId = nodes[j].id;\n var dist = row[j];\n map[\"\".concat(iId, \"-\").concat(jId)] = dist;\n if (!directed) map[\"\".concat(jId, \"-\").concat(iId)] = dist;\n }\n });\n return map;\n};\n/**\n * 计算一对节点(node1,node2)的 NDS 距离\n * @param graph 原图数据\n * @param node1\n * @param node2\n */\nvar getNDSDist = function getNDSDist(graph, node1, node2, nodeMap, spDist, kNeighborUnits, structure, nodeLabelProp, edgeLabelProp, cachedNDSMap, cachedInterInducedGraph) {\n var _a;\n var key = \"\".concat(node1.id, \"-\").concat(node2.id);\n if (cachedNDSMap && cachedNDSMap[key]) return cachedNDSMap[key];\n var interInducedGraph = cachedInterInducedGraph ? cachedInterInducedGraph[key] : undefined;\n // 若没有缓存相交邻居诱导子图,计算\n if (!interInducedGraph) {\n var pairMap = (_a = {}, _a[key] = {\n start: nodeMap[node1.id].idx,\n end: nodeMap[node2.id].idx,\n distance: spDist\n }, _a);\n cachedInterInducedGraph = getIntersectNeighborInducedGraph(pairMap, kNeighborUnits, graph, cachedInterInducedGraph);\n interInducedGraph = cachedInterInducedGraph[key];\n }\n return getMatchedCount(interInducedGraph, structure, nodeLabelProp, edgeLabelProp);\n};\n/**\n * 计算 pattern 上绩点的度数并存储到 minPatternNodeLabelDegreeMap\n */\nvar stashPatternNodeLabelDegreeMap = function stashPatternNodeLabelDegreeMap(minPatternNodeLabelDegreeMap, neighborLabel, patternNodeMap, patternNodeLabelMap) {\n var _a, _b, _c;\n var minPatternNodeLabelDegree = (_a = minPatternNodeLabelDegreeMap[neighborLabel]) === null || _a === void 0 ? void 0 : _a.degree;\n var minPatternNodeLabelInDegree = (_b = minPatternNodeLabelDegreeMap[neighborLabel]) === null || _b === void 0 ? void 0 : _b.inDegree;\n var minPatternNodeLabelOutDegree = (_c = minPatternNodeLabelDegreeMap[neighborLabel]) === null || _c === void 0 ? void 0 : _c.outDegree;\n if (minPatternNodeLabelDegreeMap[neighborLabel] === undefined) {\n minPatternNodeLabelDegree = Infinity;\n minPatternNodeLabelInDegree = Infinity;\n minPatternNodeLabelOutDegree = Infinity;\n patternNodeLabelMap[neighborLabel].forEach(function (patternNodeWithLabel) {\n var patternNodeDegree = patternNodeMap[patternNodeWithLabel.id].degree;\n if (minPatternNodeLabelDegree > patternNodeDegree) minPatternNodeLabelDegree = patternNodeDegree;\n var patternNodeInDegree = patternNodeMap[patternNodeWithLabel.id].inDegree;\n if (minPatternNodeLabelInDegree > patternNodeInDegree) minPatternNodeLabelInDegree = patternNodeInDegree;\n var patternNodeOutDegree = patternNodeMap[patternNodeWithLabel.id].outDegree;\n if (minPatternNodeLabelOutDegree > patternNodeOutDegree) minPatternNodeLabelOutDegree = patternNodeOutDegree;\n });\n minPatternNodeLabelDegreeMap[neighborLabel] = {\n degree: minPatternNodeLabelDegree,\n inDegree: minPatternNodeLabelInDegree,\n outDegree: minPatternNodeLabelOutDegree\n };\n }\n return {\n minPatternNodeLabelDegree: minPatternNodeLabelDegree,\n minPatternNodeLabelInDegree: minPatternNodeLabelInDegree,\n minPatternNodeLabelOutDegree: minPatternNodeLabelOutDegree\n };\n};\n/**\n * GADDI 模式匹配\n * @param graphData 原图数据\n * @param pattern 搜索图(需要在原图上搜索的模式)数据\n * @param directed 是否计算有向图,默认 false\n * @param k 参数 k,表示 k-近邻\n * @param length 参数 length\n * @param nodeLabelProp 节点数据中代表节点标签(分类信息)的属性名。默认为 cluster\n * @param edgeLabelProp 边数据中代表边标签(分类信息)的属性名。默认为 cluster\n */\nvar GADDI = function GADDI(graphData, pattern, directed, k, length, nodeLabelProp, edgeLabelProp) {\n var _a;\n if (directed === void 0) {\n directed = false;\n }\n if (nodeLabelProp === void 0) {\n nodeLabelProp = 'cluster';\n }\n if (edgeLabelProp === void 0) {\n edgeLabelProp = 'cluster';\n }\n if (!graphData || !graphData.nodes) return;\n // 分为三步:\n // 0. 预计算:节点/边数,邻接矩阵、最短路径矩阵\n // 1. 处理原图 graphData。再分为 1~5 小步\n // 2. 匹配\n // console.log(\"----- stage-pre: preprocessing -------\");\n // -------- 第零步,预计算:节点/边数,邻接矩阵、最短路径矩阵-------\n var nodeNum = graphData.nodes.length;\n if (!nodeNum) return;\n // console.log(\"----- stage-pre.1: calc shortest path matrix for graph -------\");\n var spm = (0, _floydWarshall.default)(graphData, directed);\n // console.log(\n // \"----- stage-pre.2: calc shortest path matrix for pattern -------\"\n // );\n var patternSpm = (0, _floydWarshall.default)(pattern, directed);\n // console.log(\n // \"----- stage-pre.3: calc shortest path matrix map for graph -------\"\n // );\n var spmMap = getSpmMap(graphData.nodes, spm, directed);\n // console.log(\n // \"----- stage-pre.4: calc shortest path matrix map for pattern -------\"\n // );\n var patternSpmMap = getSpmMap(pattern.nodes, patternSpm, directed);\n // console.log(\"----- stage-pre.5: establish maps -------\");\n // 节点的 map,以 id 为 id 映射,方便后续快速检索\n var _b = getNodeMaps(graphData.nodes, nodeLabelProp),\n nodeMap = _b.nodeMap,\n nodeLabelMap = _b.nodeLabelMap;\n var _c = getNodeMaps(pattern.nodes, nodeLabelProp),\n patternNodeMap = _c.nodeMap,\n patternNodeLabelMap = _c.nodeLabelMap;\n // 计算节点度数\n getEdgeMaps(graphData.edges, edgeLabelProp, nodeMap);\n var patternEdgeLabelMap = getEdgeMaps(pattern.edges, edgeLabelProp, patternNodeMap).edgeLabelMap;\n // 若未指定 length,自动计算 pattern 半径(最短路径最大值)\n var patternSpmSpread = [];\n patternSpm === null || patternSpm === void 0 ? void 0 : patternSpm.forEach(function (row) {\n patternSpmSpread = patternSpmSpread.concat(row);\n });\n if (!length) length = Math.max.apply(Math, (0, _tslib.__spreadArray)((0, _tslib.__spreadArray)([], patternSpmSpread, false), [2], false));\n if (!k) k = length;\n // console.log(\"params\", directed, length, k);\n // console.log(\"----- stage-pre.6: calc k neighbor units -------\");\n // 计算每个节点的 k 邻元集合\n var kNeighborUnits = findKNeighborUnits(graphData, spm, nodeLabelProp, k);\n var patternKNeighborUnits = findKNeighborUnits(pattern, patternSpm, nodeLabelProp, k);\n // console.log(\n // \"----- stage0: going to processing graph and find intersect neighbor induced graphs -------\"\n // );\n // console.log(\"----- stage0.1: going to select random node pairs -------\");\n // -------- 第一步,处理原图 graphData-------\n // 1.1. 随机选择最多 100 个点对,满足距离小于 Length 和 k\n // 当 graphData 少于 20 个节点,则不能找出 100 个点对,只找出不多于 n(n-1)/2 个点对\n var maxNodePairNum = Math.min(100, nodeNum * (nodeNum - 1) / 2);\n var nodePairsMap = findNodePairsRandomly(k, nodeNum, maxNodePairNum, kNeighborUnits, spm);\n // console.log(\n // \"----- stage0.2: going to calculate intersect neighbor induced graphs -------\"\n // );\n // 1.2. 生成上面节点对的相应相交邻居诱导子图。格式为 {'beginNodeIdx-endNodeIdx': {nodes: [], edges: []}}\n var intGMap = getIntersectNeighborInducedGraph(nodePairsMap, kNeighborUnits, graphData);\n // 1.3. 使用 gSpan 算法(frequent graph mining)计算 ISIntG 的前 10 个频率最高的子结构(3-4条边)\n var top = 10,\n minSupport = 1,\n minNodeNum = 1,\n maxNodeNum = 4;\n var params = {\n graphs: intGMap,\n nodeLabelProp: nodeLabelProp,\n edgeLabelProp: edgeLabelProp,\n minSupport: minSupport,\n minNodeNum: minNodeNum,\n maxNodeNum: maxNodeNum,\n directed: directed\n };\n // console.log(\n // \"----- stage1: (gSpan) going to find frequent structure dsG -------\"\n // );\n // console.log(\"----- stage1.1: going to run gSpan -------\");\n // 暂时假设生成的 sub structure 都只有一条边\n var freStructures = (0, _gSpan.default)(params).slice(0, top);\n // structureNum 可能小于 top\n var structureNum = freStructures.length;\n // 1.4. 计算上述 10 个子结构在 intGMap 中每个诱导子图的匹配个数\n var matchedCountMap = [];\n freStructures.forEach(function (structure, i) {\n matchedCountMap[i] = {};\n Object.keys(intGMap).forEach(function (key) {\n var graph = intGMap[key];\n var subStructureCount = getMatchedCount(graph, structure, nodeLabelProp, edgeLabelProp);\n matchedCountMap[i][key] = subStructureCount;\n });\n });\n // console.log(\n // \"----- stage1.1: going to find the most represent strucutre -------\"\n // );\n // 1.5. 对于每个子结构,根据匹配个数为 intGMap 中的诱导子图分组,生成 structureNum 种分组\n // 计算每种分组的类间距和类内间距,找到类间距最大、类内间距最小的一种分组,这种分组对应的子结构被选为唯一代表性子结构 DS(G)\n var _d = findRepresentStructure(matchedCountMap, structureNum, freStructures),\n dsG = _d.structure,\n ndsDist = _d.structureCountMap;\n // -------- 第二步,匹配-------\n // 2.1 找到从 Q 中的一个节点作为起始节点,寻找 G 中的匹配。这个其实节点的标签可以在 G 中找到最多的节点\n var beginPNode = pattern.nodes[0],\n candidates = [],\n label = (_a = pattern.nodes[0]) === null || _a === void 0 ? void 0 : _a[nodeLabelProp],\n maxNodeNumWithSameLabel = -Infinity;\n pattern.nodes.forEach(function (node) {\n var pLabel = node[nodeLabelProp];\n var nodesWithSameLabel = nodeLabelMap[pLabel];\n if ((nodesWithSameLabel === null || nodesWithSameLabel === void 0 ? void 0 : nodesWithSameLabel.length) > maxNodeNumWithSameLabel) {\n maxNodeNumWithSameLabel = nodesWithSameLabel.length;\n candidates = nodesWithSameLabel;\n label = pLabel;\n beginPNode = node;\n }\n });\n // console.log(\"----- stage2: going to find candidates -------\");\n // 全局缓存,避免重复计算\n var minPatternNodeLabelDegreeMap = {}; // key 是 label,value 是该 label 节点的最小度数\n var patternIntGraphMap = {},\n patternNDSDist = {},\n // key 为 node.id-node.id\n patternNDSDistMap = {}; // key 为 node.id-label2,value nds距离值数组(按从大到小排序,无需关心具体对应哪个 node2)\n // 2.2.2 对于 Q 中的另一个标签的 k 个节点,计算它们到 node 的最短路径以及 NDS 距离\n var patternSpDist = {};\n var patternSpDistBack = {};\n Object.keys(patternNodeLabelMap).forEach(function (label2, j) {\n patternSpDist[label2] = [];\n if (directed) {\n patternSpDistBack[label2] = [];\n }\n var maxDist = -Infinity;\n var patternNodesWithLabel2 = patternNodeLabelMap[label2];\n var patternNodePairMap = {};\n patternNodesWithLabel2.forEach(function (nodeWithLabel2) {\n var dist = patternSpmMap[\"\".concat(beginPNode.id, \"-\").concat(nodeWithLabel2.id)];\n dist && patternSpDist[label2].push(dist);\n if (maxDist < dist) maxDist = dist;\n patternNodePairMap[\"\".concat(beginPNode.id, \"-\").concat(nodeWithLabel2.id)] = {\n start: 0,\n end: patternNodeMap[nodeWithLabel2.id].idx,\n distance: dist\n };\n if (directed) {\n var distBack = patternSpmMap[\"\".concat(nodeWithLabel2.id, \"-\").concat(beginPNode.id)];\n distBack && patternSpDistBack[label2].push(distBack);\n }\n });\n // spDist[label2] 按照从小到大排序\n patternSpDist[label2] = patternSpDist[label2].sort(function (a, b) {\n return a - b;\n });\n if (directed) patternSpDistBack[label2] = patternSpDistBack[label2].sort(function (a, b) {\n return a - b;\n });\n // 计算 Q 中所有 label2 节点到 beginPNode 的 NDS 距离\n // 所有 label2 节点到 beginPNode 的邻居相交诱导子图:\n // key: node1.id-node2.id\n patternIntGraphMap = getIntersectNeighborInducedGraph(patternNodePairMap, patternKNeighborUnits, pattern, patternIntGraphMap);\n // pattern 中 beginNode 到当前 label2 节点 的 NDS 距离(数组,无需关心具体对应到哪个节点)\n var currentPatternNDSDistArray = [];\n Object.keys(patternNodePairMap).forEach(function (key) {\n if (patternNDSDist[key]) {\n currentPatternNDSDistArray.push(patternNDSDist[key]);\n return; // 缓存过则不需要再次计算\n }\n\n var patternIntGraph = patternIntGraphMap[key];\n patternNDSDist[key] = getMatchedCount(patternIntGraph, dsG, nodeLabelProp, edgeLabelProp);\n currentPatternNDSDistArray.push(patternNDSDist[key]);\n });\n // 根据值为 currentPatternNDSDist 从大到小排序\n currentPatternNDSDistArray = currentPatternNDSDistArray.sort(function (a, b) {\n return b - a;\n });\n patternNDSDistMap[\"\".concat(beginPNode.id, \"-\").concat(label2)] = currentPatternNDSDistArray;\n if (label2 === label) return;\n var candidatesNum = (candidates === null || candidates === void 0 ? void 0 : candidates.length) || 0;\n var _loop_4 = function _loop_4(m) {\n var cNode = candidates[m];\n // prune1:若 candidates 中节点 cNode 的 kNeighborUnits 中标签为 label2 的节点个数少于 pattern 中 label2 个数,删去它\n var graphNeighborUnit = kNeighborUnits[nodeMap[cNode.id].idx];\n var graphNeighborUnitCountMap = graphNeighborUnit.nodeLabelCountMap[label2];\n var patternLabel2Num = patternNodeLabelMap[label2].length;\n if (!graphNeighborUnitCountMap || graphNeighborUnitCountMap.count < patternLabel2Num) {\n candidates.splice(m, 1);\n return \"continue\";\n }\n // prune2:若 candidates 中节点 cNode 到 kNeighborUnits 中标签为 label2 的节点最短路径大于 patternSpDist[label2],删去它\n // (prune2 规则即:candidate 相关的最短路径的最大 spDist[label2].length 个,按照大小顺序依次和 patternSpDist[label2] 中的值比较,只要遇到一个是 G > Q 的,就删去这个 candidate)\n var prune2Invalid = false;\n for (var n = 0; n < patternLabel2Num; n++) {\n if (graphNeighborUnitCountMap.dists[n] > patternSpDist[label2][n]) {\n prune2Invalid = true;\n break;\n }\n }\n if (prune2Invalid) {\n candidates.splice(m, 1);\n return \"continue\";\n }\n // prune3:若 candidates 中节点 cNode 到 kNeighborUnits 中标签为 label2 的节点 NDS 距离小于 patternNDSDist[beginNode.id-label2],删去它\n // TODO:prune3,currentPatternNDSDistArray 与 currentNDSDist 的比较\n // 计算 G 中所有 label2 节点到 cNode 的 NDS 距离\n // 所有 label2 节点到 cNode 的邻居相交诱导子图:\n var cNodePairMap = {};\n graphNeighborUnit.neighbors.forEach(function (neighborNode) {\n var dist = spmMap[\"\".concat(cNode.id, \"-\").concat(neighborNode.id)];\n cNodePairMap[\"\".concat(cNode.id, \"-\").concat(neighborNode.id)] = {\n start: nodeMap[cNode.id].idx,\n end: nodeMap[neighborNode.id].idx,\n distance: dist\n };\n });\n // 更新 intGMap\n intGMap = getIntersectNeighborInducedGraph(cNodePairMap, kNeighborUnits, graphData, intGMap);\n // candidate 到它周围 label2 节点的 NDS 距离, key 是 node.id-node.id\n var currentNDSDistArray = [];\n Object.keys(cNodePairMap).forEach(function (key) {\n if (ndsDist[key]) {\n currentNDSDistArray.push(ndsDist[key]);\n return; // 缓存过则不需要再次计算\n }\n\n var intGraph = intGMap[key];\n ndsDist[key] = getMatchedCount(intGraph, dsG, nodeLabelProp, edgeLabelProp);\n currentNDSDistArray.push(ndsDist[key]);\n });\n // 根据值为 currentNDSDistArray 从大到小排序\n currentNDSDistArray = currentNDSDistArray.sort(function (a, b) {\n return b - a;\n });\n var prune3Invalid = false;\n for (var n = 0; n < patternLabel2Num; n++) {\n if (currentNDSDistArray[n] < currentPatternNDSDistArray[n]) {\n prune3Invalid = true;\n break;\n }\n }\n if (prune3Invalid) {\n candidates.splice(m, 1);\n return \"continue\";\n }\n };\n for (var m = candidatesNum - 1; m >= 0; m--) {\n _loop_4(m);\n }\n });\n var candidateGraphs = [];\n // console.log(\n // \"----- stage3: going to splice neighbors for each candidate graph -------\"\n // );\n // candidates 经过筛选后,以每个 candidate 为中心,生成 Length-neighbor 的邻居诱导子图\n // 并在诱导子图中去除不可能在 Q 上找到匹配的点:在 Q 上不存在的 label,其他 label 到 candidate 的最大最短距离符合 Q、NDS 距离符合 Q\n candidates === null || candidates === void 0 ? void 0 : candidates.forEach(function (candidate) {\n var nodeIdx = nodeMap[candidate.id].idx;\n var lengthNeighborUnit = findKNeighborUnit(graphData.nodes, spm[nodeIdx], nodeIdx, nodeLabelProp, length);\n var neighborNodes = lengthNeighborUnit.neighbors;\n // 删除不可能找到匹配的邻居点\n var neighborNum = neighborNodes.length;\n var unmatched = false;\n for (var i = neighborNum - 1; i >= 0; i--) {\n // 如果通过裁剪,符合条件的节点数量已过少,说明不能匹配这个 candidate 相关的图\n if (neighborNodes.length + 1 < pattern.nodes.length) {\n unmatched = true;\n return;\n }\n var neighborNode = neighborNodes[i];\n var neighborLabel = neighborNode[nodeLabelProp];\n // prune1: 若该邻居点的 label 不存在于 pattern 中,移除这个点\n if (!patternNodeLabelMap[neighborLabel] || !patternNodeLabelMap[neighborLabel].length) {\n neighborNodes.splice(i, 1);\n continue;\n }\n // prune2: 若该邻居点到 candidate 的最短路径比和它有相同 label 的节点到 beginPNode 的最大最短路径长度长,移除这个点\n // prune2.1: 如果没有这个标签到 beginPNode 的距离记录,说明 pattern 上(可能 beginPNode 是这个 label)没有其他这个 label 的节点\n if (!patternSpDist[neighborLabel] || !patternSpDist[neighborLabel].length) {\n neighborNodes.splice(i, 1);\n continue;\n }\n var key = \"\".concat(candidate.id, \"-\").concat(neighborNode.id);\n // prune2.2\n var distToCandidate = spmMap[key];\n var idx = patternSpDist[neighborLabel].length - 1;\n var maxDistWithLabelInPattern = patternSpDist[neighborLabel][idx]; // patternSpDist[neighborLabel] 已经按照从小到大排序\n if (distToCandidate > maxDistWithLabelInPattern) {\n neighborNodes.splice(i, 1);\n continue;\n }\n if (directed) {\n var keyBack = \"\".concat(neighborNode.id, \"-\").concat(candidate.id);\n var distFromCandidate = spmMap[keyBack];\n idx = patternSpDistBack[neighborLabel].length - 1;\n var maxBackDistWithLabelInPattern = patternSpDistBack[neighborLabel][idx];\n if (distFromCandidate > maxBackDistWithLabelInPattern) {\n neighborNodes.splice(i, 1);\n continue;\n }\n }\n // prune3: 若该邻居点到 candidate 的 NDS 距离比和它有相同 label 的节点到 beginPNode 的最小 NDS 距离小,移除这个点\n var ndsToCandidate = ndsDist[key] ? ndsDist[key] : getNDSDist(graphData, candidate, neighborNode, nodeMap, distToCandidate, kNeighborUnits, dsG, nodeLabelProp, edgeLabelProp, ndsDist, intGMap);\n var patternKey = \"\".concat(beginPNode.id, \"-\").concat(neighborLabel);\n var minNdsWithLabelInPattern = patternNDSDistMap[patternKey][patternNDSDistMap[patternKey].length - 1]; // patternNDSDist[key] 一定存在\n if (ndsToCandidate < minNdsWithLabelInPattern) {\n neighborNodes.splice(i, 1);\n continue;\n }\n // prune4: 若该邻居点的度数小于 pattern 同 label 节点最小度数,删去该点\n var _a = stashPatternNodeLabelDegreeMap(minPatternNodeLabelDegreeMap, neighborLabel, patternNodeMap, patternNodeLabelMap),\n minPatternNodeLabelDegree = _a.minPatternNodeLabelDegree,\n minPatternNodeLabelInDegree = _a.minPatternNodeLabelInDegree,\n minPatternNodeLabelOutDegree = _a.minPatternNodeLabelOutDegree;\n if (nodeMap[neighborNode.id].degree < minPatternNodeLabelDegree) {\n neighborNodes.splice(i, 1);\n continue;\n }\n }\n // 节点在个数上符合匹配(不少于 pattern 的节点个数),现在筛选相关边\n if (!unmatched) {\n candidateGraphs.push({\n nodes: [candidate].concat(neighborNodes)\n });\n }\n });\n // console.log(\n // \"----- stage4: going to splice edges and neighbors for each candidate graph -------\"\n // );\n var undirectedLengthsToBeginPNode = (0, _dijkstra.default)(pattern, beginPNode.id, false).length;\n var undirectedLengthsToBeginPNodeLabelMap = {};\n if (directed) {\n Object.keys(undirectedLengthsToBeginPNode).forEach(function (nodeId) {\n var nodeLabel = patternNodeMap[nodeId].node[nodeLabelProp];\n if (!undirectedLengthsToBeginPNodeLabelMap[nodeLabel]) undirectedLengthsToBeginPNodeLabelMap[nodeLabel] = [undirectedLengthsToBeginPNode[nodeId]];else undirectedLengthsToBeginPNodeLabelMap[nodeLabel].push(undirectedLengthsToBeginPNode[nodeId]);\n });\n Object.keys(undirectedLengthsToBeginPNodeLabelMap).forEach(function (pLabel) {\n undirectedLengthsToBeginPNodeLabelMap[pLabel].sort(function (a, b) {\n return a - b;\n });\n });\n } else {\n undirectedLengthsToBeginPNodeLabelMap = patternSpDist;\n }\n // 现在 candidateGraphs 里面只有节点,进行边的筛选\n var candidateGraphNum = candidateGraphs.length;\n var _loop_2 = function _loop_2(i) {\n var candidateGraph = candidateGraphs[i];\n var candidate = candidateGraph.nodes[0];\n var candidateNodeLabelCountMap = {};\n var candidateNodeMap = {};\n candidateGraph.nodes.forEach(function (node, q) {\n candidateNodeMap[node.id] = {\n idx: q,\n node: node,\n degree: 0,\n inDegree: 0,\n outDegree: 0\n };\n var cNodeLabel = node[nodeLabelProp];\n if (!candidateNodeLabelCountMap[cNodeLabel]) candidateNodeLabelCountMap[cNodeLabel] = 1;else candidateNodeLabelCountMap[cNodeLabel]++;\n });\n // 根据 candidate 和 neighborNodes 中的节点生成 G 的诱导子图\n // 即,将 graphData 上两端都在 candidateGraph.nodes 中的边放入 candidateEdges\n var candidateEdges = [];\n var edgeLabelCountMap = {};\n graphData.edges.forEach(function (edge) {\n if (candidateNodeMap[edge.source] && candidateNodeMap[edge.target]) {\n candidateEdges.push(edge);\n if (!edgeLabelCountMap[edge[edgeLabelProp]]) edgeLabelCountMap[edge[edgeLabelProp]] = 1;else edgeLabelCountMap[edge[edgeLabelProp]]++;\n candidateNodeMap[edge.source].degree++;\n candidateNodeMap[edge.target].degree++;\n candidateNodeMap[edge.source].outDegree++;\n candidateNodeMap[edge.target].inDegree++;\n }\n });\n // prune:若有一个 edgeLabel 在 candidateGraph 上的个数少于 pattern,去除该图\n var pattenrEdgeLabelNum = Object.keys(patternEdgeLabelMap).length;\n var prunedByEdgeLabel = false;\n for (var e = 0; e < pattenrEdgeLabelNum; e++) {\n var label_1 = Object.keys(patternEdgeLabelMap)[e];\n if (!edgeLabelCountMap[label_1] || edgeLabelCountMap[label_1] < patternEdgeLabelMap[label_1].length) {\n prunedByEdgeLabel = true;\n break;\n }\n }\n if (prunedByEdgeLabel) {\n candidateGraphs.splice(i, 1);\n return \"continue\";\n }\n // 遍历 candidateEdges,进行边的筛选\n var candidateEdgeNum = candidateEdges.length;\n // prune:若边数过少,去除该图\n if (candidateEdgeNum < pattern.edges.length) {\n candidateGraphs.splice(i, 1);\n return \"break\";\n }\n var candidateGraphInvalid = false;\n var _loop_5 = function _loop_5(e) {\n var edge = candidateEdges[e];\n var edgeLabel = edge[edgeLabelProp];\n var patternEdgesWithLabel = patternEdgeLabelMap[edgeLabel];\n // prune 1: 若边的 label 不存在于 pattern 边 label 中,去除该边\n if (!patternEdgesWithLabel || !patternEdgesWithLabel.length) {\n edgeLabelCountMap[edgeLabel]--;\n // 若这个 label 的 count 减少之后,该 label 的边数不足,去除该图\n if (patternEdgesWithLabel && edgeLabelCountMap[edgeLabel] < patternEdgesWithLabel.length) {\n candidateGraphInvalid = true;\n return \"break\";\n }\n candidateEdges.splice(e, 1);\n candidateNodeMap[edge.source].degree--;\n candidateNodeMap[edge.target].degree--;\n candidateNodeMap[edge.source].outDegree--;\n candidateNodeMap[edge.target].inDegree--;\n return \"continue\";\n }\n // prune 2: 若边的 label +两端 label 的三元组关系不能在 pattern 中找到,去除该边\n var sourceLabel = candidateNodeMap[edge.source].node[nodeLabelProp];\n var targetLabel = candidateNodeMap[edge.target].node[nodeLabelProp];\n var edgeMatched = false;\n patternEdgesWithLabel.forEach(function (patternEdge) {\n var patternSource = patternNodeMap[patternEdge.source].node;\n var patternTarget = patternNodeMap[patternEdge.target].node;\n if (patternSource[nodeLabelProp] === sourceLabel && patternTarget[nodeLabelProp] === targetLabel) edgeMatched = true;\n if (!directed && patternSource[nodeLabelProp] === targetLabel && patternTarget[nodeLabelProp] === sourceLabel) edgeMatched = true;\n });\n if (!edgeMatched) {\n edgeLabelCountMap[edgeLabel]--;\n // 若这个 label 的 count 减少之后,该 label 的边数不足,去除该图\n if (patternEdgesWithLabel && edgeLabelCountMap[edgeLabel] < patternEdgesWithLabel.length) {\n candidateGraphInvalid = true;\n return \"break\";\n }\n candidateEdges.splice(e, 1);\n candidateNodeMap[edge.source].degree--;\n candidateNodeMap[edge.target].degree--;\n candidateNodeMap[edge.source].outDegree--;\n candidateNodeMap[edge.target].inDegree--;\n return \"continue\";\n }\n };\n for (var e = candidateEdgeNum - 1; e >= 0; e--) {\n var state_2 = _loop_5(e);\n if (state_2 === \"break\") break;\n }\n // prune2: 删除边的过程中,发现边数过少/边 label 数过少时,去除该图\n if (candidateGraphInvalid) {\n candidateGraphs.splice(i, 1);\n return \"continue\";\n }\n candidateGraph.edges = candidateEdges;\n var lengthsToCandidate = (0, _dijkstra.default)(candidateGraph, candidateGraph.nodes[0].id, false).length;\n Object.keys(lengthsToCandidate).reverse().forEach(function (targetId) {\n if (targetId === candidateGraph.nodes[0].id || candidateGraphInvalid) return;\n // prune4: 通过上述裁剪,可能导致该邻居子图变为不连通。裁剪掉目前在这个邻居子图中和 candidate(第一个节点)不连通的节点\n if (lengthsToCandidate[targetId] === Infinity) {\n var targetNodeLabel = candidateNodeMap[targetId].node[nodeLabelProp];\n candidateNodeLabelCountMap[targetNodeLabel]--;\n if (candidateNodeLabelCountMap[targetNodeLabel] < patternNodeLabelMap[targetNodeLabel].length) {\n candidateGraphInvalid = true;\n return;\n }\n var idx = candidateGraph.nodes.indexOf(candidateNodeMap[targetId].node);\n candidateGraph.nodes.splice(idx, 1);\n candidateNodeMap[targetId] = undefined;\n return;\n }\n // prune5: 经过边裁剪后,可能又出现了最短路径过长的节点 (比 pattern 中同 label 的节点到 beginNode 最大最短距离远),删去这些节点\n var nLabel = nodeMap[targetId].node[nodeLabelProp];\n if (!undirectedLengthsToBeginPNodeLabelMap[nLabel] || !undirectedLengthsToBeginPNodeLabelMap[nLabel].length || lengthsToCandidate[targetId] > undirectedLengthsToBeginPNodeLabelMap[nLabel][undirectedLengthsToBeginPNodeLabelMap[nLabel].length - 1]) {\n var targetNodeLabel = candidateNodeMap[targetId].node[nodeLabelProp];\n candidateNodeLabelCountMap[targetNodeLabel]--;\n if (candidateNodeLabelCountMap[targetNodeLabel] < patternNodeLabelMap[targetNodeLabel].length) {\n candidateGraphInvalid = true;\n return;\n }\n var idx = candidateGraph.nodes.indexOf(candidateNodeMap[targetId].node);\n candidateGraph.nodes.splice(idx, 1);\n candidateNodeMap[targetId] = undefined;\n }\n });\n if (candidateGraphInvalid) {\n candidateGraphs.splice(i, 1);\n return \"continue\";\n }\n var degreeChanged = true;\n var loopCount = 0;\n while (degreeChanged && !candidateGraphInvalid) {\n degreeChanged = false;\n // candidate 度数不足,删去该图\n var condition = directed ? candidateNodeMap[candidate.id].degree < patternNodeMap[beginPNode.id].degree || candidateNodeMap[candidate.id].inDegree < patternNodeMap[beginPNode.id].inDegree || candidateNodeMap[candidate.id].outDegree < patternNodeMap[beginPNode.id].outDegree : candidateNodeMap[candidate.id].degree < patternNodeMap[beginPNode.id].degree;\n if (condition) {\n candidateGraphInvalid = true;\n break;\n }\n // candidate label 个数不足,删去该图\n if (candidateNodeLabelCountMap[candidate[nodeLabelProp]] < patternNodeLabelMap[candidate[nodeLabelProp]].length) {\n candidateGraphInvalid = true;\n break;\n }\n // prune6:去除度数过小的节点\n var currentCandidateNodeNum = candidateGraph.nodes.length;\n for (var o = currentCandidateNodeNum - 1; o >= 0; o--) {\n var cgNode = candidateGraph.nodes[o];\n var nodeDegree = candidateNodeMap[cgNode.id].degree;\n var nodeInDegree = candidateNodeMap[cgNode.id].inDegree;\n var nodeOutDegree = candidateNodeMap[cgNode.id].outDegree;\n var cNodeLabel = cgNode[nodeLabelProp];\n var _e = stashPatternNodeLabelDegreeMap(minPatternNodeLabelDegreeMap, cNodeLabel, patternNodeMap, patternNodeLabelMap),\n minPatternNodeLabelDegree = _e.minPatternNodeLabelDegree,\n minPatternNodeLabelInDegree = _e.minPatternNodeLabelInDegree,\n minPatternNodeLabelOutDegree = _e.minPatternNodeLabelOutDegree;\n var deleteCondition = directed ? nodeDegree < minPatternNodeLabelDegree || nodeInDegree < minPatternNodeLabelInDegree || nodeOutDegree < minPatternNodeLabelOutDegree : nodeDegree < minPatternNodeLabelDegree;\n if (deleteCondition) {\n candidateNodeLabelCountMap[cgNode[nodeLabelProp]]--;\n // 节点 label 个数不足\n if (candidateNodeLabelCountMap[cgNode[nodeLabelProp]] < patternNodeLabelMap[cgNode[nodeLabelProp]].length) {\n candidateGraphInvalid = true;\n break;\n }\n candidateGraph.nodes.splice(o, 1);\n candidateNodeMap[cgNode.id] = undefined;\n degreeChanged = true;\n }\n }\n if (candidateGraphInvalid || !degreeChanged && loopCount !== 0) break;\n // 经过 prune5 节点裁剪,删去端点已经不在 candidateGraph 中的边\n candidateEdgeNum = candidateEdges.length;\n for (var y = candidateEdgeNum - 1; y >= 0; y--) {\n var cedge = candidateEdges[y];\n if (!candidateNodeMap[cedge.source] || !candidateNodeMap[cedge.target]) {\n candidateEdges.splice(y, 1);\n var edgeLabel = cedge[edgeLabelProp];\n edgeLabelCountMap[edgeLabel]--;\n if (candidateNodeMap[cedge.source]) {\n candidateNodeMap[cedge.source].degree--;\n candidateNodeMap[cedge.source].outDegree--;\n }\n if (candidateNodeMap[cedge.target]) {\n candidateNodeMap[cedge.target].degree--;\n candidateNodeMap[cedge.target].inDegree--;\n }\n // 边 label 数量不足\n if (patternEdgeLabelMap[edgeLabel] && edgeLabelCountMap[edgeLabel] < patternEdgeLabelMap[edgeLabel].length) {\n candidateGraphInvalid = true;\n break;\n }\n degreeChanged = true;\n }\n }\n loopCount++;\n }\n if (candidateGraphInvalid) {\n candidateGraphs.splice(i, 1);\n return \"continue\";\n }\n // prune: 若节点/边数过少,节点/边 label 过少,去掉这个图\n if (candidateGraphInvalid || candidateGraph.nodes.length < pattern.nodes.length || candidateEdges.length < pattern.edges.length) {\n candidateGraphs.splice(i, 1);\n return \"continue\";\n }\n };\n for (var i = candidateGraphNum - 1; i >= 0; i--) {\n var state_1 = _loop_2(i);\n if (state_1 === \"break\") break;\n }\n // 此时已经生成的多个 candidateGraphs,可能有重复\n // console.log(\n // \"----- stage5: going to splice dulplicated candidate graphs -------\"\n // );\n // 删去 candidateGraphs 中一模一样的子图,通过边的 node-node-edgeLabel 作为 key,这类边个数作为 value,进行匹配\n var currentLength = candidateGraphs.length;\n var _loop_3 = function _loop_3(i) {\n var cg1 = candidateGraphs[i];\n var cg1EdgeMap = {}; // [node1.id-node2.id-edge.label]: count\n cg1.edges.forEach(function (edge) {\n var key = \"\".concat(edge.source, \"-\").concat(edge.target, \"-\").concat(edge.label);\n if (!cg1EdgeMap[key]) cg1EdgeMap[key] = 1;else cg1EdgeMap[key]++;\n });\n var _loop_6 = function _loop_6(j) {\n var cg2 = candidateGraphs[j];\n var cg2EdgeMap = {}; // [node1.id-node2.id-edge.label]: count\n cg2.edges.forEach(function (edge) {\n var key = \"\".concat(edge.source, \"-\").concat(edge.target, \"-\").concat(edge.label);\n if (!cg2EdgeMap[key]) cg2EdgeMap[key] = 1;else cg2EdgeMap[key]++;\n });\n var same = true;\n if (Object.keys(cg2EdgeMap).length !== Object.keys(cg1EdgeMap).length) {\n same = false;\n } else {\n Object.keys(cg1EdgeMap).forEach(function (key) {\n if (cg2EdgeMap[key] !== cg1EdgeMap[key]) same = false;\n });\n }\n if (same) {\n candidateGraphs.splice(j, 1);\n }\n };\n for (var j = currentLength - 1; j > i; j--) {\n _loop_6(j);\n }\n currentLength = candidateGraphs.length;\n };\n for (var i = 0; i <= currentLength - 1; i++) {\n _loop_3(i);\n }\n return candidateGraphs;\n};\nvar _default = GADDI;\nexports.default = _default;\n\n//# sourceURL=webpack:///./node_modules/@antv/algorithm/lib/gaddi.js?");
/***/ }),
/***/ "./node_modules/@antv/algorithm/lib/label-propagation.js":
/*!***************************************************************!*\
!*** ./node_modules/@antv/algorithm/lib/label-propagation.js ***!
\***************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
eval("\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\nvar _adjacentMatrix = _interopRequireDefault(__webpack_require__(/*! ./adjacent-matrix */ \"./node_modules/@antv/algorithm/lib/adjacent-matrix.js\"));\nvar _util = __webpack_require__(/*! ./util */ \"./node_modules/@antv/algorithm/lib/util.js\");\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n/**\n * 标签传播算法\n * @param graphData 图数据\n * @param directed 是否有向图,默认为 false\n * @param weightPropertyName 权重的属性字段\n * @param maxIteration 最大迭代次数\n */\nvar labelPropagation = function labelPropagation(graphData, directed, weightPropertyName, maxIteration) {\n if (directed === void 0) {\n directed = false;\n }\n if (weightPropertyName === void 0) {\n weightPropertyName = 'weight';\n }\n if (maxIteration === void 0) {\n maxIteration = 1000;\n }\n // the origin data\n var _a = graphData.nodes,\n nodes = _a === void 0 ? [] : _a,\n _b = graphData.edges,\n edges = _b === void 0 ? [] : _b;\n var clusters = {};\n var nodeMap = {};\n // init the clusters and nodeMap\n nodes.forEach(function (node, i) {\n var cid = (0, _util.uniqueId)();\n node.clusterId = cid;\n clusters[cid] = {\n id: cid,\n nodes: [node]\n };\n nodeMap[node.id] = {\n node: node,\n idx: i\n };\n });\n // the adjacent matrix of calNodes inside clusters\n var adjMatrix = (0, _adjacentMatrix.default)(graphData, directed);\n // the sum of each row in adjacent matrix\n var ks = [];\n /**\n * neighbor nodes (id for key and weight for value) for each node\n * neighbors = {\n * id(node_id): { id(neighbor_1_id): weight(weight of the edge), id(neighbor_2_id): weight(weight of the edge), ... },\n * ...\n * }\n */\n var neighbors = {};\n adjMatrix.forEach(function (row, i) {\n var k = 0;\n var iid = nodes[i].id;\n neighbors[iid] = {};\n row.forEach(function (entry, j) {\n if (!entry) return;\n k += entry;\n var jid = nodes[j].id;\n neighbors[iid][jid] = entry;\n });\n ks.push(k);\n });\n var iter = 0;\n var _loop_1 = function _loop_1() {\n var changed = false;\n nodes.forEach(function (node) {\n var neighborClusters = {};\n Object.keys(neighbors[node.id]).forEach(function (neighborId) {\n var neighborWeight = neighbors[node.id][neighborId];\n var neighborNode = nodeMap[neighborId].node;\n var neighborClusterId = neighborNode.clusterId;\n if (!neighborClusters[neighborClusterId]) neighborClusters[neighborClusterId] = 0;\n neighborClusters[neighborClusterId] += neighborWeight;\n });\n // find the cluster with max weight\n var maxWeight = -Infinity;\n var bestClusterIds = [];\n Object.keys(neighborClusters).forEach(function (clusterId) {\n if (maxWeight < neighborClusters[clusterId]) {\n maxWeight = neighborClusters[clusterId];\n bestClusterIds = [clusterId];\n } else if (maxWeight === neighborClusters[clusterId]) {\n bestClusterIds.push(clusterId);\n }\n });\n if (bestClusterIds.length === 1 && bestClusterIds[0] === node.clusterId) return;\n var selfClusterIdx = bestClusterIds.indexOf(node.clusterId);\n if (selfClusterIdx >= 0) bestClusterIds.splice(selfClusterIdx, 1);\n if (bestClusterIds && bestClusterIds.length) {\n changed = true;\n // remove from origin cluster\n var selfCluster = clusters[node.clusterId];\n var nodeInSelfClusterIdx = selfCluster.nodes.indexOf(node);\n selfCluster.nodes.splice(nodeInSelfClusterIdx, 1);\n // move the node to the best cluster\n var randomIdx = Math.floor(Math.random() * bestClusterIds.length);\n var bestCluster = clusters[bestClusterIds[randomIdx]];\n bestCluster.nodes.push(node);\n node.clusterId = bestCluster.id;\n }\n });\n if (!changed) return \"break\";\n iter++;\n };\n while (iter < maxIteration) {\n var state_1 = _loop_1();\n if (state_1 === \"break\") break;\n }\n // delete the empty clusters\n Object.keys(clusters).forEach(function (clusterId) {\n var cluster = clusters[clusterId];\n if (!cluster.nodes || !cluster.nodes.length) {\n delete clusters[clusterId];\n }\n });\n // get the cluster edges\n var clusterEdges = [];\n var clusterEdgeMap = {};\n edges.forEach(function (edge) {\n var source = edge.source,\n target = edge.target;\n var weight = edge[weightPropertyName] || 1;\n var sourceClusterId = nodeMap[source].node.clusterId;\n var targetClusterId = nodeMap[target].node.clusterId;\n var newEdgeId = \"\".concat(sourceClusterId, \"---\").concat(targetClusterId);\n if (clusterEdgeMap[newEdgeId]) {\n clusterEdgeMap[newEdgeId].weight += weight;\n clusterEdgeMap[newEdgeId].count++;\n } else {\n var newEdge = {\n source: sourceClusterId,\n target: targetClusterId,\n weight: weight,\n count: 1\n };\n clusterEdgeMap[newEdgeId] = newEdge;\n clusterEdges.push(newEdge);\n }\n });\n var clustersArray = [];\n Object.keys(clusters).forEach(function (clusterId) {\n clustersArray.push(clusters[clusterId]);\n });\n return {\n clusters: clustersArray,\n clusterEdges: clusterEdges\n };\n};\nvar _default = labelPropagation;\nexports.default = _default;\n\n//# sourceURL=webpack:///./node_modules/@antv/algorithm/lib/label-propagation.js?");
/***/ }),
/***/ "./node_modules/@antv/algorithm/lib/louvain.js":
/*!*****************************************************!*\
!*** ./node_modules/@antv/algorithm/lib/louvain.js ***!
\*****************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
eval("\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\nvar _util = __webpack_require__(/*! @antv/util */ \"./node_modules/@antv/util/esm/index.js\");\nvar _adjacentMatrix = _interopRequireDefault(__webpack_require__(/*! ./adjacent-matrix */ \"./node_modules/@antv/algorithm/lib/adjacent-matrix.js\"));\nvar _vector = _interopRequireDefault(__webpack_require__(/*! ./utils/vector */ \"./node_modules/@antv/algorithm/lib/utils/vector.js\"));\nvar _nodeProperties = __webpack_require__(/*! ./utils/node-properties */ \"./node_modules/@antv/algorithm/lib/utils/node-properties.js\");\nvar _dataPreprocessing = __webpack_require__(/*! ./utils/data-preprocessing */ \"./node_modules/@antv/algorithm/lib/utils/data-preprocessing.js\");\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\nvar getModularity = function getModularity(nodes, adjMatrix, ks, m) {\n var length = adjMatrix.length;\n var param = 2 * m;\n var modularity = 0;\n for (var i = 0; i < length; i++) {\n var clusteri = nodes[i].clusterId;\n for (var j = 0; j < length; j++) {\n var clusterj = nodes[j].clusterId;\n if (clusteri !== clusterj) continue;\n var entry = adjMatrix[i][j] || 0;\n var ki = ks[i] || 0;\n var kj = ks[j] || 0;\n modularity += entry - ki * kj / param;\n }\n }\n modularity *= 1 / param;\n return modularity;\n};\n// 模块惯性度,衡量属性相似度\nvar getInertialModularity = function getInertialModularity(nodes, allPropertiesWeight) {\n if (nodes === void 0) {\n nodes = [];\n }\n var length = nodes.length;\n var totalProperties = new _vector.default([]);\n for (var i = 0; i < length; i++) {\n totalProperties = totalProperties.add(new _vector.default(allPropertiesWeight[i]));\n }\n // 均值向量\n var avgProperties = totalProperties.avg(length);\n avgProperties.normalize();\n // 节点集合的方差: 节点v与均值向量的平方欧式距离之和\n var variance = 0;\n for (var i = 0; i < length; i++) {\n var propertiesi = new _vector.default(allPropertiesWeight[i]);\n var squareEuclideanDistance = propertiesi.squareEuclideanDistance(avgProperties);\n variance += squareEuclideanDistance;\n }\n // 任意两点间的欧式平方距离\n var squareEuclideanDistanceInfo = [];\n nodes.forEach(function () {\n squareEuclideanDistanceInfo.push([]);\n });\n for (var i = 0; i < length; i++) {\n var propertiesi = new _vector.default(allPropertiesWeight[i]);\n nodes[i]['clusterInertial'] = 0;\n for (var j = 0; j < length; j++) {\n if (i === j) {\n squareEuclideanDistanceInfo[i][j] = 0;\n continue;\n }\n var propertiesj = new _vector.default(allPropertiesWeight[j]);\n squareEuclideanDistanceInfo[i][j] = propertiesi.squareEuclideanDistance(propertiesj);\n nodes[i]['clusterInertial'] += squareEuclideanDistanceInfo[i][j];\n }\n }\n // 计算模块惯性度\n var inertialModularity = 0;\n var param = 2 * length * variance;\n for (var i = 0; i < length; i++) {\n var clusteri = nodes[i].clusterId;\n for (var j = 0; j < length; j++) {\n var clusterj = nodes[j].clusterId;\n if (i === j || clusteri !== clusterj) continue;\n var inertial = nodes[i].clusterInertial * nodes[j].clusterInertial / Math.pow(param, 2) - squareEuclideanDistanceInfo[i][j] / param;\n inertialModularity += inertial;\n }\n }\n return Number(inertialModularity.toFixed(4));\n};\n/**\n * 社区发现 louvain 算法\n * @param graphData 图数据\n * @param directed 是否有向图,默认为 false\n * @param weightPropertyName 权重的属性字段\n * @param threshold 差值阈值\n * @param inertialModularity 是否使用惯性模块度(即节点属性相似性)\n * @param propertyKey 属性的字段名\n * @param involvedKeys 参与计算的key集合\n * @param uninvolvedKeys 不参与计算的key集合\n * @param inertialWeight 惯性模块度权重\n */\nvar louvain = function louvain(graphData, directed, weightPropertyName, threshold, inertialModularity, propertyKey, involvedKeys, uninvolvedKeys, inertialWeight) {\n if (directed === void 0) {\n directed = false;\n }\n if (weightPropertyName === void 0) {\n weightPropertyName = 'weight';\n }\n if (threshold === void 0) {\n threshold = 0.0001;\n }\n if (inertialModularity === void 0) {\n inertialModularity = false;\n }\n if (propertyKey === void 0) {\n propertyKey = undefined;\n }\n if (involvedKeys === void 0) {\n involvedKeys = [];\n }\n if (uninvolvedKeys === void 0) {\n uninvolvedKeys = ['id'];\n }\n if (inertialWeight === void 0) {\n inertialWeight = 1;\n }\n // the origin data\n var _a = graphData.nodes,\n nodes = _a === void 0 ? [] : _a,\n _b = graphData.edges,\n edges = _b === void 0 ? [] : _b;\n var allPropertiesWeight = [];\n if (inertialModularity) {\n nodes.forEach(function (node, index) {\n node.properties = node.properties || {};\n node.originIndex = index;\n });\n var nodeTypeInfo_1 = [];\n if (nodes.every(function (node) {\n return node.hasOwnProperty('nodeType');\n })) {\n nodeTypeInfo_1 = Array.from(new Set(nodes.map(function (node) {\n return node.nodeType;\n })));\n nodes.forEach(function (node) {\n node.properties.nodeType = nodeTypeInfo_1.findIndex(function (nodeType) {\n return nodeType === node.nodeType;\n });\n });\n }\n // 所有节点属性集合\n var properties = (0, _nodeProperties.getAllProperties)(nodes, propertyKey);\n // 所有节点属性one-hot特征向量集合\n allPropertiesWeight = (0, _dataPreprocessing.oneHot)(properties, involvedKeys, uninvolvedKeys);\n }\n var uniqueId = 1;\n var clusters = {};\n var nodeMap = {};\n // init the clusters and nodeMap\n nodes.forEach(function (node, i) {\n var cid = String(uniqueId++);\n node.clusterId = cid;\n clusters[cid] = {\n id: cid,\n nodes: [node]\n };\n nodeMap[node.id] = {\n node: node,\n idx: i\n };\n });\n // the adjacent matrix of calNodes inside clusters\n var adjMatrix = (0, _adjacentMatrix.default)(graphData, directed);\n // the sum of each row in adjacent matrix\n var ks = [];\n /**\n * neighbor nodes (id for key and weight for value) for each node\n * neighbors = {\n * id(node_id): { id(neighbor_1_id): weight(weight of the edge), id(neighbor_2_id): weight(weight of the edge), ... },\n * ...\n * }\n */\n var neighbors = {};\n // the sum of the weights of all edges in the graph\n var m = 0;\n adjMatrix.forEach(function (row, i) {\n var k = 0;\n var iid = nodes[i].id;\n neighbors[iid] = {};\n row.forEach(function (entry, j) {\n if (!entry) return;\n k += entry;\n var jid = nodes[j].id;\n neighbors[iid][jid] = entry;\n m += entry;\n });\n ks.push(k);\n });\n m /= 2;\n var totalModularity = Infinity;\n var previousModularity = Infinity;\n var iter = 0;\n var finalNodes = [];\n var finalClusters = {};\n while (true) {\n if (inertialModularity && nodes.every(function (node) {\n return node.hasOwnProperty('properties');\n })) {\n totalModularity = getModularity(nodes, adjMatrix, ks, m) + getInertialModularity(nodes, allPropertiesWeight) * inertialWeight;\n } else {\n totalModularity = getModularity(nodes, adjMatrix, ks, m);\n }\n // 第一次迭代previousModularity直接赋值\n if (iter === 0) {\n previousModularity = totalModularity;\n finalNodes = nodes;\n finalClusters = clusters;\n }\n var increaseWithinThreshold = totalModularity > 0 && totalModularity > previousModularity && totalModularity - previousModularity < threshold;\n // 总模块度增加才更新最优解\n if (totalModularity > previousModularity) {\n finalNodes = nodes.map(function (node) {\n return {\n node: node,\n clusterId: node.clusterId\n };\n });\n finalClusters = (0, _util.clone)(clusters);\n previousModularity = totalModularity;\n }\n // whether to terminate the iterations\n if (increaseWithinThreshold || iter > 100) {\n break;\n }\n ;\n iter++;\n // pre compute some values for current clusters\n Object.keys(clusters).forEach(function (clusterId) {\n // sum of weights of edges to nodes in cluster\n var sumTot = 0;\n edges.forEach(function (edge) {\n var source = edge.source,\n target = edge.target;\n var sourceClusterId = nodeMap[source].node.clusterId;\n var targetClusterId = nodeMap[target].node.clusterId;\n if (sourceClusterId === clusterId && targetClusterId !== clusterId || targetClusterId === clusterId && sourceClusterId !== clusterId) {\n sumTot = sumTot + (edge[weightPropertyName] || 1);\n }\n });\n clusters[clusterId].sumTot = sumTot;\n });\n // move the nodes to increase the delta modularity\n nodes.forEach(function (node, i) {\n var selfCluster = clusters[node.clusterId];\n var bestIncrease = 0;\n var bestCluster;\n var commonParam = ks[i] / (2 * m);\n // sum of weights of edges from node to nodes in cluster\n var kiin = 0;\n var selfClusterNodes = selfCluster.nodes;\n selfClusterNodes.forEach(function (scNode) {\n var scNodeIdx = nodeMap[scNode.id].idx;\n kiin += adjMatrix[i][scNodeIdx] || 0;\n });\n // the modurarity for **removing** the node i from the origin cluster of node i\n var removeModurarity = kiin - selfCluster.sumTot * commonParam;\n // nodes for **removing** node i into this neighbor cluster\n var selfClusterNodesAfterRemove = selfClusterNodes.filter(function (scNode) {\n return scNode.id !== node.id;\n });\n var propertiesWeightRemove = [];\n selfClusterNodesAfterRemove.forEach(function (nodeRemove, index) {\n propertiesWeightRemove[index] = allPropertiesWeight[nodeRemove.originIndex];\n });\n // the inertialModularity for **removing** the node i from the origin cluster of node i\n var removeInertialModularity = getInertialModularity(selfClusterNodesAfterRemove, allPropertiesWeight) * inertialWeight;\n // the neightbors of the node\n var nodeNeighborIds = neighbors[node.id];\n Object.keys(nodeNeighborIds).forEach(function (neighborNodeId) {\n var neighborNode = nodeMap[neighborNodeId].node;\n var neighborClusterId = neighborNode.clusterId;\n // if the node and the neighbor of node are in the same cluster, reutrn\n if (neighborClusterId === node.clusterId) return;\n var neighborCluster = clusters[neighborClusterId];\n var clusterNodes = neighborCluster.nodes;\n // if the cluster is empty, remove the cluster and return\n if (!clusterNodes || !clusterNodes.length) return;\n // sum of weights of edges from node to nodes in cluster\n var neighborClusterKiin = 0;\n clusterNodes.forEach(function (cNode) {\n var cNodeIdx = nodeMap[cNode.id].idx;\n neighborClusterKiin += adjMatrix[i][cNodeIdx] || 0;\n });\n // the modurarity for **adding** node i into this neighbor cluster\n var addModurarity = neighborClusterKiin - neighborCluster.sumTot * commonParam;\n // nodes for **adding** node i into this neighbor cluster\n var clusterNodesAfterAdd = clusterNodes.concat([node]);\n var propertiesWeightAdd = [];\n clusterNodesAfterAdd.forEach(function (nodeAdd, index) {\n propertiesWeightAdd[index] = allPropertiesWeight[nodeAdd.originIndex];\n });\n // the inertialModularity for **adding** node i into this neighbor cluster\n var addInertialModularity = getInertialModularity(clusterNodesAfterAdd, allPropertiesWeight) * inertialWeight;\n // the increase modurarity is the difference between addModurarity and removeModurarity\n var increase = addModurarity - removeModurarity;\n if (inertialModularity) {\n increase = addModurarity + addInertialModularity - (removeModurarity + removeInertialModularity);\n }\n // find the best cluster to move node i into\n if (increase > bestIncrease) {\n bestIncrease = increase;\n bestCluster = neighborCluster;\n }\n });\n // if found a best cluster to move into\n if (bestIncrease > 0) {\n bestCluster.nodes.push(node);\n var previousClusterId_1 = node.clusterId;\n node.clusterId = bestCluster.id;\n // move the node to the best cluster\n var nodeInSelfClusterIdx = selfCluster.nodes.indexOf(node);\n // remove from origin cluster\n selfCluster.nodes.splice(nodeInSelfClusterIdx, 1);\n // update sumTot for clusters\n // sum of weights of edges to nodes in cluster\n var neighborClusterSumTot_1 = 0;\n var selfClusterSumTot_1 = 0;\n edges.forEach(function (edge) {\n var source = edge.source,\n target = edge.target;\n var sourceClusterId = nodeMap[source].node.clusterId;\n var targetClusterId = nodeMap[target].node.clusterId;\n if (sourceClusterId === bestCluster.id && targetClusterId !== bestCluster.id || targetClusterId === bestCluster.id && sourceClusterId !== bestCluster.id) {\n neighborClusterSumTot_1 = neighborClusterSumTot_1 + (edge[weightPropertyName] || 1);\n }\n if (sourceClusterId === previousClusterId_1 && targetClusterId !== previousClusterId_1 || targetClusterId === previousClusterId_1 && sourceClusterId !== previousClusterId_1) {\n selfClusterSumTot_1 = selfClusterSumTot_1 + (edge[weightPropertyName] || 1);\n }\n });\n // the nodes of the clusters to move into and remove are changed, update their sumTot\n bestCluster.sumTot = neighborClusterSumTot_1;\n selfCluster.sumTot = selfClusterSumTot_1;\n }\n });\n }\n // delete the empty clusters, assign increasing clusterId\n var newClusterIdMap = {};\n var clusterIdx = 0;\n Object.keys(finalClusters).forEach(function (clusterId) {\n var cluster = finalClusters[clusterId];\n if (!cluster.nodes || !cluster.nodes.length) {\n delete finalClusters[clusterId];\n return;\n }\n var newId = String(clusterIdx + 1);\n if (newId === clusterId) {\n return;\n }\n cluster.id = newId;\n cluster.nodes = cluster.nodes.map(function (item) {\n return {\n id: item.id,\n clusterId: newId\n };\n });\n finalClusters[newId] = cluster;\n newClusterIdMap[clusterId] = newId;\n delete finalClusters[clusterId];\n clusterIdx++;\n });\n // restore node clusterId\n finalNodes.forEach(function (nodeInfo) {\n var node = nodeInfo.node,\n clusterId = nodeInfo.clusterId;\n if (!node) return;\n node.clusterId = clusterId;\n if (node.clusterId && newClusterIdMap[node.clusterId]) node.clusterId = newClusterIdMap[node.clusterId];\n });\n // get the cluster edges\n var clusterEdges = [];\n var clusterEdgeMap = {};\n edges.forEach(function (edge) {\n var source = edge.source,\n target = edge.target;\n var weight = edge[weightPropertyName] || 1;\n var sourceClusterId = nodeMap[source].node.clusterId;\n var targetClusterId = nodeMap[target].node.clusterId;\n if (!sourceClusterId || !targetClusterId) return;\n var newEdgeId = \"\".concat(sourceClusterId, \"---\").concat(targetClusterId);\n if (clusterEdgeMap[newEdgeId]) {\n clusterEdgeMap[newEdgeId].weight += weight;\n clusterEdgeMap[newEdgeId].count++;\n } else {\n var newEdge = {\n source: sourceClusterId,\n target: targetClusterId,\n weight: weight,\n count: 1\n };\n clusterEdgeMap[newEdgeId] = newEdge;\n clusterEdges.push(newEdge);\n }\n });\n var clustersArray = [];\n Object.keys(finalClusters).forEach(function (clusterId) {\n clustersArray.push(finalClusters[clusterId]);\n });\n return {\n clusters: clustersArray,\n clusterEdges: clusterEdges\n };\n};\nvar _default = louvain;\nexports.default = _default;\n\n//# sourceURL=webpack:///./node_modules/@antv/algorithm/lib/louvain.js?");
/***/ }),
/***/ "./node_modules/@antv/algorithm/lib/mts.js":
/*!*************************************************!*\
!*** ./node_modules/@antv/algorithm/lib/mts.js ***!
\*************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
eval("\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\nvar _unionFind = _interopRequireDefault(__webpack_require__(/*! ./structs/union-find */ \"./node_modules/@antv/algorithm/lib/structs/union-find.js\"));\nvar _binaryHeap = _interopRequireDefault(__webpack_require__(/*! ./structs/binary-heap */ \"./node_modules/@antv/algorithm/lib/structs/binary-heap.js\"));\nvar _util = __webpack_require__(/*! ./util */ \"./node_modules/@antv/algorithm/lib/util.js\");\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n/**\n * Prim algorithm,use priority queue,复杂度 O(E+V*logV), V: 节点数量,E: 边的数量\n * refer: https://en.wikipedia.org/wiki/Prim%27s_algorithm\n * @param graph\n * @param weight 指定用于作为边权重的属性,若不指定,则认为所有边权重一致\n */\nvar primMST = function primMST(graphData, weight) {\n var selectedEdges = [];\n var _a = graphData.nodes,\n nodes = _a === void 0 ? [] : _a,\n _b = graphData.edges,\n edges = _b === void 0 ? [] : _b;\n if (nodes.length === 0) {\n return selectedEdges;\n }\n // 从nodes[0]开始\n var currNode = nodes[0];\n var visited = new Set();\n visited.add(currNode);\n // 用二叉堆维护距已加入节点的其他节点的边的权值\n var compareWeight = function compareWeight(a, b) {\n if (weight) {\n return a.weight - b.weight;\n }\n return 0;\n };\n var edgeQueue = new _binaryHeap.default(compareWeight);\n (0, _util.getEdgesByNodeId)(currNode.id, edges).forEach(function (edge) {\n edgeQueue.insert(edge);\n });\n while (!edgeQueue.isEmpty()) {\n // 选取与已加入的结点之间边权最小的结点\n var currEdge = edgeQueue.delMin();\n var source = currEdge.source;\n var target = currEdge.target;\n if (visited.has(source) && visited.has(target)) continue;\n selectedEdges.push(currEdge);\n if (!visited.has(source)) {\n visited.add(source);\n (0, _util.getEdgesByNodeId)(source, edges).forEach(function (edge) {\n edgeQueue.insert(edge);\n });\n }\n if (!visited.has(target)) {\n visited.add(target);\n (0, _util.getEdgesByNodeId)(target, edges).forEach(function (edge) {\n edgeQueue.insert(edge);\n });\n }\n }\n return selectedEdges;\n};\n/**\n * Kruskal algorithm,复杂度 O(E*logE), E: 边的数量\n * refer: https://en.wikipedia.org/wiki/Kruskal%27s_algorithm\n * @param graph\n * @param weight 指定用于作为边权重的属性,若不指定,则认为所有边权重一致\n * @return IEdge[] 返回构成MST的边的数组\n */\nvar kruskalMST = function kruskalMST(graphData, weight) {\n var selectedEdges = [];\n var _a = graphData.nodes,\n nodes = _a === void 0 ? [] : _a,\n _b = graphData.edges,\n edges = _b === void 0 ? [] : _b;\n if (nodes.length === 0) {\n return selectedEdges;\n }\n // 若指定weight,则将所有的边按权值从小到大排序\n var weightEdges = edges.map(function (edge) {\n return edge;\n });\n if (weight) {\n weightEdges.sort(function (a, b) {\n return a.weight - b.weight;\n });\n }\n var disjointSet = new _unionFind.default(nodes.map(function (n) {\n return n.id;\n }));\n // 从权值最小的边开始,如果这条边连接的两个节点于图G中不在同一个连通分量中,则添加这条边\n // 直到遍历完所有点或边\n while (weightEdges.length > 0) {\n var curEdge = weightEdges.shift();\n var source = curEdge.source;\n var target = curEdge.target;\n if (!disjointSet.connected(source, target)) {\n selectedEdges.push(curEdge);\n disjointSet.union(source, target);\n }\n }\n return selectedEdges;\n};\n/**\n * 最小生成树\n * refer: https://en.wikipedia.org/wiki/Kruskal%27s_algorithm\n * @param graph\n * @param weight 指定用于作为边权重的属性,若不指定,则认为所有边权重一致\n * @param algo 'prim' | 'kruskal' 算法类型\n * @return EdgeConfig[] 返回构成MST的边的数组\n */\nvar minimumSpanningTree = function minimumSpanningTree(graphData, weight, algo) {\n var algos = {\n prim: primMST,\n kruskal: kruskalMST\n };\n if (!algo) return kruskalMST(graphData, weight);\n return algos[algo](graphData, weight);\n};\nvar _default = minimumSpanningTree;\nexports.default = _default;\n\n//# sourceURL=webpack:///./node_modules/@antv/algorithm/lib/mts.js?");
/***/ }),
/***/ "./node_modules/@antv/algorithm/lib/pageRank.js":
/*!******************************************************!*\
!*** ./node_modules/@antv/algorithm/lib/pageRank.js ***!
\******************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
eval("\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\nvar _degree = _interopRequireDefault(__webpack_require__(/*! ./degree */ \"./node_modules/@antv/algorithm/lib/degree.js\"));\nvar _util = __webpack_require__(/*! ./util */ \"./node_modules/@antv/algorithm/lib/util.js\");\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n/**\n * PageRank https://en.wikipedia.org/wiki/PageRank\n * refer: https://github.com/anvaka/ngraph.pagerank\n * @param graph\n * @param epsilon 判断是否收敛的精度值,默认 0.000001\n * @param linkProb 阻尼系数(dumping factor),指任意时刻,用户访问到某节点后继续访问该节点链接的下一个节点的概率,经验值 0.85\n */\nvar pageRank = function pageRank(graphData, epsilon, linkProb) {\n if (typeof epsilon !== 'number') epsilon = 0.000001;\n if (typeof linkProb !== 'number') linkProb = 0.85;\n var distance = 1;\n var leakedRank = 0;\n var maxIterations = 1000;\n var _a = graphData.nodes,\n nodes = _a === void 0 ? [] : _a,\n _b = graphData.edges,\n edges = _b === void 0 ? [] : _b;\n var nodesCount = nodes.length;\n var currentRank;\n var curRanks = {};\n var prevRanks = {};\n // Initialize pageranks 初始化\n for (var j = 0; j < nodesCount; ++j) {\n var node = nodes[j];\n var nodeId = node.id;\n curRanks[nodeId] = 1 / nodesCount;\n prevRanks[nodeId] = 1 / nodesCount;\n }\n var nodeDegree = (0, _degree.default)(graphData);\n while (maxIterations > 0 && distance > epsilon) {\n leakedRank = 0;\n for (var j = 0; j < nodesCount; ++j) {\n var node = nodes[j];\n var nodeId = node.id;\n currentRank = 0;\n if (nodeDegree[node.id].inDegree === 0) {\n curRanks[nodeId] = 0;\n } else {\n var neighbors = (0, _util.getNeighbors)(nodeId, edges, 'source');\n for (var i = 0; i < neighbors.length; ++i) {\n var neighbor = neighbors[i];\n var outDegree = nodeDegree[neighbor].outDegree;\n if (outDegree > 0) currentRank += prevRanks[neighbor] / outDegree;\n }\n curRanks[nodeId] = linkProb * currentRank;\n leakedRank += curRanks[nodeId];\n }\n }\n leakedRank = (1 - leakedRank) / nodesCount;\n distance = 0;\n for (var j = 0; j < nodesCount; ++j) {\n var node = nodes[j];\n var nodeId = node.id;\n currentRank = curRanks[nodeId] + leakedRank;\n distance += Math.abs(currentRank - prevRanks[nodeId]);\n prevRanks[nodeId] = currentRank;\n }\n maxIterations -= 1;\n }\n return prevRanks;\n};\nvar _default = pageRank;\nexports.default = _default;\n\n//# sourceURL=webpack:///./node_modules/@antv/algorithm/lib/pageRank.js?");
/***/ }),
/***/ "./node_modules/@antv/algorithm/lib/structs/binary-heap.js":
/*!*****************************************************************!*\
!*** ./node_modules/@antv/algorithm/lib/structs/binary-heap.js ***!
\*****************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
eval("\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\nvar defaultCompare = function defaultCompare(a, b) {\n return a - b;\n};\nvar MinBinaryHeap = /** @class */function () {\n function MinBinaryHeap(compareFn) {\n if (compareFn === void 0) {\n compareFn = defaultCompare;\n }\n this.compareFn = compareFn;\n this.list = [];\n }\n MinBinaryHeap.prototype.getLeft = function (index) {\n return 2 * index + 1;\n };\n MinBinaryHeap.prototype.getRight = function (index) {\n return 2 * index + 2;\n };\n MinBinaryHeap.prototype.getParent = function (index) {\n if (index === 0) {\n return null;\n }\n return Math.floor((index - 1) / 2);\n };\n MinBinaryHeap.prototype.isEmpty = function () {\n return this.list.length <= 0;\n };\n MinBinaryHeap.prototype.top = function () {\n return this.isEmpty() ? undefined : this.list[0];\n };\n MinBinaryHeap.prototype.delMin = function () {\n var top = this.top();\n var bottom = this.list.pop();\n if (this.list.length > 0) {\n this.list[0] = bottom;\n this.moveDown(0);\n }\n return top;\n };\n MinBinaryHeap.prototype.insert = function (value) {\n if (value !== null) {\n this.list.push(value);\n var index = this.list.length - 1;\n this.moveUp(index);\n return true;\n }\n return false;\n };\n MinBinaryHeap.prototype.moveUp = function (index) {\n var parent = this.getParent(index);\n while (index && index > 0 && this.compareFn(this.list[parent], this.list[index]) > 0) {\n // swap\n var tmp = this.list[parent];\n this.list[parent] = this.list[index];\n this.list[index] = tmp;\n // [this.list[index], this.list[parent]] = [this.list[parent], this.list[index]]\n index = parent;\n parent = this.getParent(index);\n }\n };\n MinBinaryHeap.prototype.moveDown = function (index) {\n var _a;\n var element = index;\n var left = this.getLeft(index);\n var right = this.getRight(index);\n var size = this.list.length;\n if (left !== null && left < size && this.compareFn(this.list[element], this.list[left]) > 0) {\n element = left;\n } else if (right !== null && right < size && this.compareFn(this.list[element], this.list[right]) > 0) {\n element = right;\n }\n if (index !== element) {\n _a = [this.list[element], this.list[index]], this.list[index] = _a[0], this.list[element] = _a[1];\n this.moveDown(element);\n }\n };\n return MinBinaryHeap;\n}();\nvar _default = MinBinaryHeap;\nexports.default = _default;\n\n//# sourceURL=webpack:///./node_modules/@antv/algorithm/lib/structs/binary-heap.js?");
/***/ }),
/***/ "./node_modules/@antv/algorithm/lib/structs/linked-list.js":
/*!*****************************************************************!*\
!*** ./node_modules/@antv/algorithm/lib/structs/linked-list.js ***!
\*****************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
eval("\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = exports.LinkedListNode = void 0;\nvar defaultComparator = function defaultComparator(a, b) {\n if (a === b) {\n return true;\n }\n return false;\n};\n/**\n * 链表中单个元素节点\n */\nvar LinkedListNode = /** @class */function () {\n function LinkedListNode(value, next) {\n if (next === void 0) {\n next = null;\n }\n this.value = value;\n this.next = next;\n }\n LinkedListNode.prototype.toString = function (callback) {\n return callback ? callback(this.value) : \"\".concat(this.value);\n };\n return LinkedListNode;\n}();\nexports.LinkedListNode = LinkedListNode;\nvar LinkedList = /** @class */function () {\n function LinkedList(comparator) {\n if (comparator === void 0) {\n comparator = defaultComparator;\n }\n this.head = null;\n this.tail = null;\n this.compare = comparator;\n }\n /**\n * 将指定元素添加到链表头部\n * @param value\n */\n LinkedList.prototype.prepend = function (value) {\n // 在头部添加一个节点\n var newNode = new LinkedListNode(value, this.head);\n this.head = newNode;\n if (!this.tail) {\n this.tail = newNode;\n }\n return this;\n };\n /**\n * 将指定元素添加到链表中\n * @param value\n */\n LinkedList.prototype.append = function (value) {\n var newNode = new LinkedListNode(value);\n // 如果不存在头节点,则将创建的新节点作为头节点\n if (!this.head) {\n this.head = newNode;\n this.tail = newNode;\n return this;\n }\n // 将新节点附加到链表末尾\n this.tail.next = newNode;\n this.tail = newNode;\n return this;\n };\n /**\n * 删除指定元素\n * @param value 要删除的元素\n */\n LinkedList.prototype.delete = function (value) {\n if (!this.head) {\n return null;\n }\n var deleteNode = null;\n // 如果删除的是头部元素,则将next作为头元素\n while (this.head && this.compare(this.head.value, value)) {\n deleteNode = this.head;\n this.head = this.head.next;\n }\n var currentNode = this.head;\n if (currentNode !== null) {\n // 如果删除了节点以后,将next节点前移\n while (currentNode.next) {\n if (this.compare(currentNode.next.value, value)) {\n deleteNode = currentNode.next;\n currentNode.next = currentNode.next.next;\n } else {\n currentNode = currentNode.next;\n }\n }\n }\n // 检查尾部节点是否被删除\n if (this.compare(this.tail.value, value)) {\n this.tail = currentNode;\n }\n return deleteNode;\n };\n /**\n * 查找指定的元素\n * @param param0\n */\n LinkedList.prototype.find = function (_a) {\n var _b = _a.value,\n value = _b === void 0 ? undefined : _b,\n _c = _a.callback,\n callback = _c === void 0 ? undefined : _c;\n if (!this.head) {\n return null;\n }\n var currentNode = this.head;\n while (currentNode) {\n // 如果指定了 callback,则按指定的 callback 查找\n if (callback && callback(currentNode.value)) {\n return currentNode;\n }\n // 如果指定了 value,则按 value 查找\n if (value !== undefined && this.compare(currentNode.value, value)) {\n return currentNode;\n }\n currentNode = currentNode.next;\n }\n return null;\n };\n /**\n * 删除尾部节点\n */\n LinkedList.prototype.deleteTail = function () {\n var deletedTail = this.tail;\n if (this.head === this.tail) {\n // 链表中只有一个元素\n this.head = null;\n this.tail = null;\n return deletedTail;\n }\n var currentNode = this.head;\n while (currentNode.next) {\n if (!currentNode.next.next) {\n currentNode.next = null;\n } else {\n currentNode = currentNode.next;\n }\n }\n this.tail = currentNode;\n return deletedTail;\n };\n /**\n * 删除头部节点\n */\n LinkedList.prototype.deleteHead = function () {\n if (!this.head) {\n return null;\n }\n var deletedHead = this.head;\n if (this.head.next) {\n this.head = this.head.next;\n } else {\n this.head = null;\n this.tail = null;\n }\n return deletedHead;\n };\n /**\n * 将一组元素转成链表中的节点\n * @param values 链表中的元素\n */\n LinkedList.prototype.fromArray = function (values) {\n var _this = this;\n values.forEach(function (value) {\n return _this.append(value);\n });\n return this;\n };\n /**\n * 将链表中的节点转成数组元素\n */\n LinkedList.prototype.toArray = function () {\n var nodes = [];\n var currentNode = this.head;\n while (currentNode) {\n nodes.push(currentNode);\n currentNode = currentNode.next;\n }\n return nodes;\n };\n /**\n * 反转链表中的元素节点\n */\n LinkedList.prototype.reverse = function () {\n var currentNode = this.head;\n var prevNode = null;\n var nextNode = null;\n while (currentNode) {\n // 存储下一个元素节点\n nextNode = currentNode.next;\n // 更改当前节点的下一个节点,以便将它连接到上一个节点上\n currentNode.next = prevNode;\n // 将 prevNode 和 currentNode 向前移动一步\n prevNode = currentNode;\n currentNode = nextNode;\n }\n this.tail = this.head;\n this.head = prevNode;\n };\n LinkedList.prototype.toString = function (callback) {\n if (callback === void 0) {\n callback = undefined;\n }\n return this.toArray().map(function (node) {\n return node.toString(callback);\n }).toString();\n };\n return LinkedList;\n}();\nvar _default = LinkedList;\nexports.default = _default;\n\n//# sourceURL=webpack:///./node_modules/@antv/algorithm/lib/structs/linked-list.js?");
/***/ }),
/***/ "./node_modules/@antv/algorithm/lib/structs/queue.js":
/*!***********************************************************!*\
!*** ./node_modules/@antv/algorithm/lib/structs/queue.js ***!
\***********************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
eval("\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\nvar _linkedList = _interopRequireDefault(__webpack_require__(/*! ./linked-list */ \"./node_modules/@antv/algorithm/lib/structs/linked-list.js\"));\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\nvar Queue = /** @class */function () {\n function Queue() {\n this.linkedList = new _linkedList.default();\n }\n /**\n * 队列是否为空\n */\n Queue.prototype.isEmpty = function () {\n return !this.linkedList.head;\n };\n /**\n * 读取队列头部的元素, 不删除队列中的元素\n */\n Queue.prototype.peek = function () {\n if (!this.linkedList.head) {\n return null;\n }\n return this.linkedList.head.value;\n };\n /**\n * 在队列的尾部新增一个元素\n * @param value\n */\n Queue.prototype.enqueue = function (value) {\n this.linkedList.append(value);\n };\n /**\n * 删除队列中的头部元素,如果队列为空,则返回 null\n */\n Queue.prototype.dequeue = function () {\n var removeHead = this.linkedList.deleteHead();\n return removeHead ? removeHead.value : null;\n };\n Queue.prototype.toString = function (callback) {\n return this.linkedList.toString(callback);\n };\n return Queue;\n}();\nvar _default = Queue;\nexports.default = _default;\n\n//# sourceURL=webpack:///./node_modules/@antv/algorithm/lib/structs/queue.js?");
/***/ }),
/***/ "./node_modules/@antv/algorithm/lib/structs/union-find.js":
/*!****************************************************************!*\
!*** ./node_modules/@antv/algorithm/lib/structs/union-find.js ***!
\****************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
eval("\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n/**\n * 并查集 Disjoint set to support quick union\n */\nvar UnionFind = /** @class */function () {\n function UnionFind(items) {\n this.count = items.length;\n this.parent = {};\n for (var _i = 0, items_1 = items; _i < items_1.length; _i++) {\n var i = items_1[_i];\n this.parent[i] = i;\n }\n }\n // find the root of the item\n UnionFind.prototype.find = function (item) {\n while (this.parent[item] !== item) {\n item = this.parent[item];\n }\n return item;\n };\n UnionFind.prototype.union = function (a, b) {\n var rootA = this.find(a);\n var rootB = this.find(b);\n if (rootA === rootB) return;\n // make the element with smaller root the parent\n if (rootA < rootB) {\n if (this.parent[b] !== b) this.union(this.parent[b], a);\n this.parent[b] = this.parent[a];\n } else {\n if (this.parent[a] !== a) this.union(this.parent[a], b);\n this.parent[a] = this.parent[b];\n }\n };\n // whether a and b are connected, i.e. a and b have the same root\n UnionFind.prototype.connected = function (a, b) {\n return this.find(a) === this.find(b);\n };\n return UnionFind;\n}();\nvar _default = UnionFind;\nexports.default = _default;\n\n//# sourceURL=webpack:///./node_modules/@antv/algorithm/lib/structs/union-find.js?");
/***/ }),
/***/ "./node_modules/@antv/algorithm/lib/types.js":
/*!***************************************************!*\
!*** ./node_modules/@antv/algorithm/lib/types.js ***!
\***************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
eval("\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.DistanceType = void 0;\nvar DistanceType;\nexports.DistanceType = DistanceType;\n(function (DistanceType) {\n DistanceType[\"EuclideanDistance\"] = \"euclideanDistance\";\n})(DistanceType || (exports.DistanceType = DistanceType = {}));\n\n//# sourceURL=webpack:///./node_modules/@antv/algorithm/lib/types.js?");
/***/ }),
/***/ "./node_modules/@antv/algorithm/lib/util.js":
/*!**************************************************!*\
!*** ./node_modules/@antv/algorithm/lib/util.js ***!
\**************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
eval("\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.uniqueId = exports.getOutEdgesNodeId = exports.getNeighbors = exports.getEdgesByNodeId = void 0;\n/**\n * 获取指定节点的所有邻居\n * @param nodeId 节点 ID\n * @param edges 图中的所有边数据\n * @param type 邻居类型\n */\nvar getNeighbors = function getNeighbors(nodeId, edges, type) {\n if (edges === void 0) {\n edges = [];\n }\n var currentEdges = edges.filter(function (edge) {\n return edge.source === nodeId || edge.target === nodeId;\n });\n if (type === 'target') {\n // 当前节点为 source,它所指向的目标节点\n var neighhborsConverter_1 = function neighhborsConverter_1(edge) {\n return edge.source === nodeId;\n };\n return currentEdges.filter(neighhborsConverter_1).map(function (edge) {\n return edge.target;\n });\n }\n if (type === 'source') {\n // 当前节点为 target,它所指向的源节点\n var neighhborsConverter_2 = function neighhborsConverter_2(edge) {\n return edge.target === nodeId;\n };\n return currentEdges.filter(neighhborsConverter_2).map(function (edge) {\n return edge.source;\n });\n }\n // 若未指定 type ,则返回所有邻居\n var neighhborsConverter = function neighhborsConverter(edge) {\n return edge.source === nodeId ? edge.target : edge.source;\n };\n return currentEdges.map(neighhborsConverter);\n};\n/**\n * 获取指定节点的出边\n * @param nodeId 节点 ID\n * @param edges 图中的所有边数据\n */\nexports.getNeighbors = getNeighbors;\nvar getOutEdgesNodeId = function getOutEdgesNodeId(nodeId, edges) {\n return edges.filter(function (edge) {\n return edge.source === nodeId;\n });\n};\n/**\n * 获取指定节点的边,包括出边和入边\n * @param nodeId 节点 ID\n * @param edges 图中的所有边数据\n */\nexports.getOutEdgesNodeId = getOutEdgesNodeId;\nvar getEdgesByNodeId = function getEdgesByNodeId(nodeId, edges) {\n return edges.filter(function (edge) {\n return edge.source === nodeId || edge.target === nodeId;\n });\n};\n/**\n * 生成唯一的 ID,规则是序号 + 时间戳\n * @param index 序号\n */\nexports.getEdgesByNodeId = getEdgesByNodeId;\nvar uniqueId = function uniqueId(index) {\n if (index === void 0) {\n index = 0;\n }\n var random1 = \"\".concat(Math.random()).split('.')[1].substr(0, 5);\n var random2 = \"\".concat(Math.random()).split('.')[1].substr(0, 5);\n return \"\".concat(index, \"-\").concat(random1).concat(random2);\n};\nexports.uniqueId = uniqueId;\n\n//# sourceURL=webpack:///./node_modules/@antv/algorithm/lib/util.js?");
/***/ }),
/***/ "./node_modules/@antv/algorithm/lib/utils/data-preprocessing.js":
/*!**********************************************************************!*\
!*** ./node_modules/@antv/algorithm/lib/utils/data-preprocessing.js ***!
\**********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
eval("\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.oneHot = exports.getDistance = exports.getAllKeyValueMap = exports.default = void 0;\nvar _util = __webpack_require__(/*! @antv/util */ \"./node_modules/@antv/util/esm/index.js\");\nvar _types = __webpack_require__(/*! ../types */ \"./node_modules/@antv/algorithm/lib/types.js\");\nvar _vector = _interopRequireDefault(__webpack_require__(/*! ./vector */ \"./node_modules/@antv/algorithm/lib/utils/vector.js\"));\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n/**\n * 获取数据中所有的属性及其对应的值\n * @param dataList 数据集\n * @param involvedKeys 参与计算的key集合\n * @param uninvolvedKeys 不参与计算的key集合\n */\nvar getAllKeyValueMap = function getAllKeyValueMap(dataList, involvedKeys, uninvolvedKeys) {\n var keys = [];\n // 指定了参与计算的keys时,使用指定的keys\n if (involvedKeys === null || involvedKeys === void 0 ? void 0 : involvedKeys.length) {\n keys = involvedKeys;\n } else {\n // 未指定抽取的keys时,提取数据中所有的key\n dataList.forEach(function (data) {\n keys = keys.concat(Object.keys(data));\n });\n keys = (0, _util.uniq)(keys);\n }\n // 获取所有值非空的key的value数组\n var allKeyValueMap = {};\n keys.forEach(function (key) {\n var value = [];\n dataList.forEach(function (data) {\n if (data[key] !== undefined && data[key] !== '') {\n value.push(data[key]);\n }\n });\n if (value.length && !(uninvolvedKeys === null || uninvolvedKeys === void 0 ? void 0 : uninvolvedKeys.includes(key))) {\n allKeyValueMap[key] = (0, _util.uniq)(value);\n }\n });\n return allKeyValueMap;\n};\n/**\n * one-hot编码:数据特征提取\n * @param dataList 数据集\n * @param involvedKeys 参与计算的的key集合\n * @param uninvolvedKeys 不参与计算的key集合\n */\nexports.getAllKeyValueMap = getAllKeyValueMap;\nvar oneHot = function oneHot(dataList, involvedKeys, uninvolvedKeys) {\n // 获取数据中所有的属性/特征及其对应的值\n var allKeyValueMap = getAllKeyValueMap(dataList, involvedKeys, uninvolvedKeys);\n var oneHotCode = [];\n if (!Object.keys(allKeyValueMap).length) {\n return oneHotCode;\n }\n // 获取所有的属性/特征值\n var allValue = Object.values(allKeyValueMap);\n // 是否所有属性/特征的值都是数值型\n var isAllNumber = allValue.every(function (value) {\n return value.every(function (item) {\n return typeof item === 'number';\n });\n });\n // 对数据进行one-hot编码\n dataList.forEach(function (data, index) {\n var code = [];\n Object.keys(allKeyValueMap).forEach(function (key) {\n var keyValue = data[key];\n var allKeyValue = allKeyValueMap[key];\n var valueIndex = allKeyValue.findIndex(function (value) {\n return keyValue === value;\n });\n var subCode = [];\n // 如果属性/特征所有的值都能转成数值型,不满足分箱,则直接用值(todo: 为了收敛更快,需做归一化处理)\n if (isAllNumber) {\n subCode.push(keyValue);\n } else {\n // 进行one-hot编码\n for (var i = 0; i < allKeyValue.length; i++) {\n if (i === valueIndex) {\n subCode.push(1);\n } else {\n subCode.push(0);\n }\n }\n }\n code = code.concat(subCode);\n });\n oneHotCode[index] = code;\n });\n return oneHotCode;\n};\n/**\n * getDistance:获取两个元素之间的距离\n * @param item\n * @param otherItem\n * @param distanceType 距离类型\n * @param graphData 图数据\n */\nexports.oneHot = oneHot;\nvar getDistance = function getDistance(item, otherItem, distanceType, graphData) {\n if (distanceType === void 0) {\n distanceType = _types.DistanceType.EuclideanDistance;\n }\n var distance = 0;\n switch (distanceType) {\n case _types.DistanceType.EuclideanDistance:\n distance = new _vector.default(item).euclideanDistance(new _vector.default(otherItem));\n break;\n default:\n break;\n }\n return distance;\n};\nexports.getDistance = getDistance;\nvar _default = {\n getAllKeyValueMap: getAllKeyValueMap,\n oneHot: oneHot,\n getDistance: getDistance\n};\nexports.default = _default;\n\n//# sourceURL=webpack:///./node_modules/@antv/algorithm/lib/utils/data-preprocessing.js?");
/***/ }),
/***/ "./node_modules/@antv/algorithm/lib/utils/node-properties.js":
/*!*******************************************************************!*\
!*** ./node_modules/@antv/algorithm/lib/utils/node-properties.js ***!
\*******************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
eval("\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.getPropertyWeight = exports.getAllSortProperties = exports.getAllProperties = exports.default = void 0;\nvar _time = __webpack_require__(/*! ../constants/time */ \"./node_modules/@antv/algorithm/lib/constants/time.js\");\n// 获取所有属性并排序\nvar getAllSortProperties = function getAllSortProperties(nodes, n) {\n if (nodes === void 0) {\n nodes = [];\n }\n if (n === void 0) {\n n = 100;\n }\n var propertyKeyInfo = {};\n nodes.forEach(function (node) {\n if (!node.properties) {\n return;\n }\n Object.keys(node.properties).forEach(function (propertyKey) {\n // 目前过滤只保留可以转成数值型的或日期型的, todo: 统一转成one-hot特征向量或者embedding\n if (propertyKey === 'id' || !\"\".concat(node.properties[propertyKey]).match(_time.secondReg) && !\"\".concat(node.properties[propertyKey]).match(_time.dateReg) && isNaN(Number(node.properties[propertyKey]))) {\n if (propertyKeyInfo.hasOwnProperty(propertyKey)) {\n delete propertyKeyInfo[propertyKey];\n }\n return;\n }\n if (propertyKeyInfo.hasOwnProperty(propertyKey)) {\n propertyKeyInfo[propertyKey] += 1;\n } else {\n propertyKeyInfo[propertyKey] = 1;\n }\n });\n });\n // 取top50的属性\n var sortKeys = Object.keys(propertyKeyInfo).sort(function (a, b) {\n return propertyKeyInfo[b] - propertyKeyInfo[a];\n });\n return sortKeys.length < n ? sortKeys : sortKeys.slice(0, n);\n};\nexports.getAllSortProperties = getAllSortProperties;\nvar processProperty = function processProperty(properties, propertyKeys) {\n return propertyKeys.map(function (key) {\n if (properties.hasOwnProperty(key)) {\n // // 可以转成数值的直接转成数值\n // if (!isNaN(Number(properties[key]))) {\n // return Number(properties[key]);\n // }\n // // 时间型的转成时间戳\n // if (properties[key].match(secondReg) || properties[key].match(dateReg)) {\n // // @ts-ignore\n // return Number(Date.parse(new Date(properties[key]))) / 1000;\n // }\n return properties[key];\n }\n return 0;\n });\n};\n// 获取属性特征权重\nvar getPropertyWeight = function getPropertyWeight(nodes) {\n var propertyKeys = getAllSortProperties(nodes);\n var allPropertiesWeight = [];\n for (var i = 0; i < nodes.length; i++) {\n allPropertiesWeight[i] = processProperty(nodes[i].properties, propertyKeys);\n }\n return allPropertiesWeight;\n};\n// 获取所有节点的属性集合\nexports.getPropertyWeight = getPropertyWeight;\nvar getAllProperties = function getAllProperties(nodes, key) {\n if (key === void 0) {\n key = undefined;\n }\n var allProperties = [];\n nodes.forEach(function (node) {\n if (key === undefined) {\n allProperties.push(node);\n }\n if (node[key] !== undefined) {\n allProperties.push(node[key]);\n }\n });\n return allProperties;\n};\nexports.getAllProperties = getAllProperties;\nvar _default = {\n getAllSortProperties: getAllSortProperties,\n getPropertyWeight: getPropertyWeight,\n getAllProperties: getAllProperties\n};\nexports.default = _default;\n\n//# sourceURL=webpack:///./node_modules/@antv/algorithm/lib/utils/node-properties.js?");
/***/ }),
/***/ "./node_modules/@antv/algorithm/lib/utils/vector.js":
/*!**********************************************************!*\
!*** ./node_modules/@antv/algorithm/lib/utils/vector.js ***!
\**********************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
eval("\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\nvar _util = __webpack_require__(/*! @antv/util */ \"./node_modules/@antv/util/esm/index.js\");\n/**\n * 向量运算\n */\n\nvar Vector = /** @class */function () {\n function Vector(arr) {\n this.arr = arr;\n }\n Vector.prototype.getArr = function () {\n return this.arr || [];\n };\n Vector.prototype.add = function (otherVector) {\n var _a;\n var otherArr = otherVector.arr;\n if (!((_a = this.arr) === null || _a === void 0 ? void 0 : _a.length)) {\n return new Vector(otherArr);\n }\n if (!(otherArr === null || otherArr === void 0 ? void 0 : otherArr.length)) {\n return new Vector(this.arr);\n }\n if (this.arr.length === otherArr.length) {\n var res = [];\n for (var index in this.arr) {\n res[index] = this.arr[index] + otherArr[index];\n }\n return new Vector(res);\n }\n };\n Vector.prototype.subtract = function (otherVector) {\n var _a;\n var otherArr = otherVector.arr;\n if (!((_a = this.arr) === null || _a === void 0 ? void 0 : _a.length)) {\n return new Vector(otherArr);\n }\n if (!(otherArr === null || otherArr === void 0 ? void 0 : otherArr.length)) {\n return new Vector(this.arr);\n }\n if (this.arr.length === otherArr.length) {\n var res = [];\n for (var index in this.arr) {\n res[index] = this.arr[index] - otherArr[index];\n }\n return new Vector(res);\n }\n };\n Vector.prototype.avg = function (length) {\n var res = [];\n if (length !== 0) {\n for (var index in this.arr) {\n res[index] = this.arr[index] / length;\n }\n }\n return new Vector(res);\n };\n Vector.prototype.negate = function () {\n var res = [];\n for (var index in this.arr) {\n res[index] = -this.arr[index];\n }\n return new Vector(res);\n };\n // 平方欧式距离\n Vector.prototype.squareEuclideanDistance = function (otherVector) {\n var _a;\n var otherArr = otherVector.arr;\n if (!((_a = this.arr) === null || _a === void 0 ? void 0 : _a.length) || !(otherArr === null || otherArr === void 0 ? void 0 : otherArr.length)) {\n return 0;\n }\n if (this.arr.length === otherArr.length) {\n var res = 0;\n for (var index in this.arr) {\n res += Math.pow(this.arr[index] - otherVector.arr[index], 2);\n }\n return res;\n }\n };\n // 欧式距离\n Vector.prototype.euclideanDistance = function (otherVector) {\n var _a;\n var otherArr = otherVector.arr;\n if (!((_a = this.arr) === null || _a === void 0 ? void 0 : _a.length) || !(otherArr === null || otherArr === void 0 ? void 0 : otherArr.length)) {\n return 0;\n }\n if (this.arr.length === otherArr.length) {\n var res = 0;\n for (var index in this.arr) {\n res += Math.pow(this.arr[index] - otherVector.arr[index], 2);\n }\n return Math.sqrt(res);\n } else {\n console.error('The two vectors are unequal in length.');\n }\n };\n // 归一化处理\n Vector.prototype.normalize = function () {\n var res = [];\n var cloneArr = (0, _util.clone)(this.arr);\n cloneArr.sort(function (a, b) {\n return a - b;\n });\n var max = cloneArr[cloneArr.length - 1];\n var min = cloneArr[0];\n for (var index in this.arr) {\n res[index] = (this.arr[index] - min) / (max - min);\n }\n return new Vector(res);\n };\n // 2范数 or 模长\n Vector.prototype.norm2 = function () {\n var _a;\n if (!((_a = this.arr) === null || _a === void 0 ? void 0 : _a.length)) {\n return 0;\n }\n var res = 0;\n for (var index in this.arr) {\n res += Math.pow(this.arr[index], 2);\n }\n return Math.sqrt(res);\n };\n // 两个向量的点积\n Vector.prototype.dot = function (otherVector) {\n var _a;\n var otherArr = otherVector.arr;\n if (!((_a = this.arr) === null || _a === void 0 ? void 0 : _a.length) || !(otherArr === null || otherArr === void 0 ? void 0 : otherArr.length)) {\n return 0;\n }\n if (this.arr.length === otherArr.length) {\n var res = 0;\n for (var index in this.arr) {\n res += this.arr[index] * otherVector.arr[index];\n }\n return res;\n } else {\n console.error('The two vectors are unequal in length.');\n }\n };\n // 两个向量比较\n Vector.prototype.equal = function (otherVector) {\n var _a;\n var otherArr = otherVector.arr;\n if (((_a = this.arr) === null || _a === void 0 ? void 0 : _a.length) !== (otherArr === null || otherArr === void 0 ? void 0 : otherArr.length)) {\n return false;\n }\n for (var index in this.arr) {\n if (this.arr[index] !== otherArr[index]) {\n return false;\n }\n }\n return true;\n };\n return Vector;\n}();\nvar _default = Vector;\nexports.default = _default;\n\n//# sourceURL=webpack:///./node_modules/@antv/algorithm/lib/utils/vector.js?");
/***/ }),
/***/ "./node_modules/@antv/algorithm/lib/workers/algorithm.js":
/*!***************************************************************!*\
!*** ./node_modules/@antv/algorithm/lib/workers/algorithm.js ***!
\***************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
eval("\n\nfunction _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nObject.defineProperty(exports, \"GADDI\", {\n enumerable: true,\n get: function get() {\n return _gaddi.default;\n }\n});\nObject.defineProperty(exports, \"breadthFirstSearch\", {\n enumerable: true,\n get: function get() {\n return _bfs.default;\n }\n});\nObject.defineProperty(exports, \"connectedComponent\", {\n enumerable: true,\n get: function get() {\n return _connectedComponent.default;\n }\n});\nObject.defineProperty(exports, \"depthFirstSearch\", {\n enumerable: true,\n get: function get() {\n return _dfs.default;\n }\n});\nObject.defineProperty(exports, \"detectCycle\", {\n enumerable: true,\n get: function get() {\n return _detectCycle.default;\n }\n});\nObject.defineProperty(exports, \"dijkstra\", {\n enumerable: true,\n get: function get() {\n return _dijkstra.default;\n }\n});\nObject.defineProperty(exports, \"findAllPath\", {\n enumerable: true,\n get: function get() {\n return _findPath.findAllPath;\n }\n});\nObject.defineProperty(exports, \"findShortestPath\", {\n enumerable: true,\n get: function get() {\n return _findPath.findShortestPath;\n }\n});\nObject.defineProperty(exports, \"floydWarshall\", {\n enumerable: true,\n get: function get() {\n return _floydWarshall.default;\n }\n});\nObject.defineProperty(exports, \"getAdjMatrix\", {\n enumerable: true,\n get: function get() {\n return _adjacentMatrix.default;\n }\n});\nObject.defineProperty(exports, \"getDegree\", {\n enumerable: true,\n get: function get() {\n return _degree.default;\n }\n});\nObject.defineProperty(exports, \"getInDegree\", {\n enumerable: true,\n get: function get() {\n return _degree.getInDegree;\n }\n});\nObject.defineProperty(exports, \"getNeighbors\", {\n enumerable: true,\n get: function get() {\n return _util.getNeighbors;\n }\n});\nObject.defineProperty(exports, \"getOutDegree\", {\n enumerable: true,\n get: function get() {\n return _degree.getOutDegree;\n }\n});\nObject.defineProperty(exports, \"labelPropagation\", {\n enumerable: true,\n get: function get() {\n return _labelPropagation.default;\n }\n});\nObject.defineProperty(exports, \"louvain\", {\n enumerable: true,\n get: function get() {\n return _louvain.default;\n }\n});\nObject.defineProperty(exports, \"minimumSpanningTree\", {\n enumerable: true,\n get: function get() {\n return _mts.default;\n }\n});\nObject.defineProperty(exports, \"pageRank\", {\n enumerable: true,\n get: function get() {\n return _pageRank.default;\n }\n});\nvar _adjacentMatrix = _interopRequireDefault(__webpack_require__(/*! ../adjacent-matrix */ \"./node_modules/@antv/algorithm/lib/adjacent-matrix.js\"));\nvar _bfs = _interopRequireDefault(__webpack_require__(/*! ../bfs */ \"./node_modules/@antv/algorithm/lib/bfs.js\"));\nvar _connectedComponent = _interopRequireDefault(__webpack_require__(/*! ../connected-component */ \"./node_modules/@antv/algorithm/lib/connected-component.js\"));\nvar _degree = _interopRequireWildcard(__webpack_require__(/*! ../degree */ \"./node_modules/@antv/algorithm/lib/degree.js\"));\nvar _detectCycle = _interopRequireDefault(__webpack_require__(/*! ../detect-cycle */ \"./node_modules/@antv/algorithm/lib/detect-cycle.js\"));\nvar _dfs = _interopRequireDefault(__webpack_require__(/*! ../dfs */ \"./node_modules/@antv/algorithm/lib/dfs.js\"));\nvar _dijkstra = _interopRequireDefault(__webpack_require__(/*! ../dijkstra */ \"./node_modules/@antv/algorithm/lib/dijkstra.js\"));\nvar _findPath = __webpack_require__(/*! ../find-path */ \"./node_modules/@antv/algorithm/lib/find-path.js\");\nvar _floydWarshall = _interopRequireDefault(__webpack_require__(/*! ../floydWarshall */ \"./node_modules/@antv/algorithm/lib/floydWarshall.js\"));\nvar _labelPropagation = _interopRequireDefault(__webpack_require__(/*! ../label-propagation */ \"./node_modules/@antv/algorithm/lib/label-propagation.js\"));\nvar _louvain = _interopRequireDefault(__webpack_require__(/*! ../louvain */ \"./node_modules/@antv/algorithm/lib/louvain.js\"));\nvar _mts = _interopRequireDefault(__webpack_require__(/*! ../mts */ \"./node_modules/@antv/algorithm/lib/mts.js\"));\nvar _pageRank = _interopRequireDefault(__webpack_require__(/*! ../pageRank */ \"./node_modules/@antv/algorithm/lib/pageRank.js\"));\nvar _gaddi = _interopRequireDefault(__webpack_require__(/*! ../gaddi */ \"./node_modules/@antv/algorithm/lib/gaddi.js\"));\nvar _util = __webpack_require__(/*! ../util */ \"./node_modules/@antv/algorithm/lib/util.js\");\nfunction _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== \"function\") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }\nfunction _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== \"object\" && typeof obj !== \"function\") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== \"default\" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n//# sourceURL=webpack:///./node_modules/@antv/algorithm/lib/workers/algorithm.js?");
/***/ }),
/***/ "./node_modules/@antv/algorithm/lib/workers/constant.js":
/*!**************************************************************!*\
!*** ./node_modules/@antv/algorithm/lib/workers/constant.js ***!
\**************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
eval("\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.MESSAGE = exports.ALGORITHM = void 0;\nvar ALGORITHM = {\n pageRank: 'pageRank',\n breadthFirstSearch: 'breadthFirstSearch',\n connectedComponent: 'connectedComponent',\n depthFirstSearch: 'depthFirstSearch',\n detectCycle: 'detectCycle',\n detectDirectedCycle: 'detectDirectedCycle',\n detectAllCycles: 'detectAllCycles',\n detectAllDirectedCycle: 'detectAllDirectedCycle',\n detectAllUndirectedCycle: 'detectAllUndirectedCycle',\n dijkstra: 'dijkstra',\n findAllPath: 'findAllPath',\n findShortestPath: 'findShortestPath',\n floydWarshall: 'floydWarshall',\n getAdjMatrix: 'getAdjMatrix',\n getDegree: 'getDegree',\n getInDegree: 'getInDegree',\n getNeighbors: 'getNeighbors',\n getOutDegree: 'getOutDegree',\n labelPropagation: 'labelPropagation',\n louvain: 'louvain',\n GADDI: 'GADDI',\n minimumSpanningTree: 'minimumSpanningTree',\n SUCCESS: 'SUCCESS',\n FAILURE: 'FAILURE'\n};\nexports.ALGORITHM = ALGORITHM;\nvar MESSAGE = {\n SUCCESS: 'SUCCESS',\n FAILURE: 'FAILURE'\n};\nexports.MESSAGE = MESSAGE;\n\n//# sourceURL=webpack:///./node_modules/@antv/algorithm/lib/workers/constant.js?");
/***/ }),
/***/ "./node_modules/@antv/algorithm/lib/workers/createWorker.js":
/*!******************************************************************!*\
!*** ./node_modules/@antv/algorithm/lib/workers/createWorker.js ***!
\******************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
eval("\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\nvar _constant = __webpack_require__(/*! ./constant */ \"./node_modules/@antv/algorithm/lib/workers/constant.js\");\nvar _index = _interopRequireDefault(__webpack_require__(/*! ./index.worker */ \"./node_modules/@antv/algorithm/lib/workers/index.worker.js\"));\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n/**\n * 创建一个在worker中运行的算法\n * @param type 算法类型\n */\nvar createWorker = function createWorker(type) {\n return function () {\n var data = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n data[_i] = arguments[_i];\n }\n return new Promise(function (resolve, reject) {\n var worker = new _index.default();\n worker.postMessage({\n _algorithmType: type,\n data: data\n });\n worker.onmessage = function (event) {\n var _a = event.data,\n data = _a.data,\n _algorithmType = _a._algorithmType;\n if (_constant.MESSAGE.SUCCESS === _algorithmType) {\n resolve(data);\n } else {\n reject();\n }\n worker.terminate();\n };\n });\n };\n};\nvar _default = createWorker;\nexports.default = _default;\n\n//# sourceURL=webpack:///./node_modules/@antv/algorithm/lib/workers/createWorker.js?");
/***/ }),
/***/ "./node_modules/@antv/algorithm/lib/workers/index.js":
/*!***********************************************************!*\
!*** ./node_modules/@antv/algorithm/lib/workers/index.js ***!
\***********************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
eval("\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.pageRankAsync = exports.minimumSpanningTreeAsync = exports.louvainAsync = exports.labelPropagationAsync = exports.getOutDegreeAsync = exports.getNeighborsAsync = exports.getInDegreeAsync = exports.getDegreeAsync = exports.getAdjMatrixAsync = exports.floydWarshallAsync = exports.findShortestPathAsync = exports.findAllPathAsync = exports.dijkstraAsync = exports.detectCycleAsync = exports.detectAllUndirectedCycleAsync = exports.detectAllDirectedCycleAsync = exports.detectAllCyclesAsync = exports.connectedComponentAsync = exports.GADDIAsync = void 0;\nvar _createWorker = _interopRequireDefault(__webpack_require__(/*! ./createWorker */ \"./node_modules/@antv/algorithm/lib/workers/createWorker.js\"));\nvar _constant = __webpack_require__(/*! ./constant */ \"./node_modules/@antv/algorithm/lib/workers/constant.js\");\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n/**\n * @param graphData 图数据\n * @param directed 是否为有向图\n */\nvar getAdjMatrixAsync = function getAdjMatrixAsync(graphData, directed) {\n return (0, _createWorker.default)(_constant.ALGORITHM.getAdjMatrix).apply(void 0, [graphData, directed]);\n};\n/**\n * 图的连通分量\n * @param graphData 图数据\n * @param directed 是否为有向图\n */\nexports.getAdjMatrixAsync = getAdjMatrixAsync;\nvar connectedComponentAsync = function connectedComponentAsync(graphData, directed) {\n return (0, _createWorker.default)(_constant.ALGORITHM.connectedComponent).apply(void 0, [graphData, directed]);\n};\n/**\n * 获取节点的度\n * @param graphData 图数据\n */\nexports.connectedComponentAsync = connectedComponentAsync;\nvar getDegreeAsync = function getDegreeAsync(graphData) {\n return (0, _createWorker.default)(_constant.ALGORITHM.getDegree)(graphData);\n};\n/**\n * 获取节点的入度\n * @param graphData 图数据\n * @param nodeId 节点ID\n */\nexports.getDegreeAsync = getDegreeAsync;\nvar getInDegreeAsync = function getInDegreeAsync(graphData, nodeId) {\n return (0, _createWorker.default)(_constant.ALGORITHM.getInDegree)(graphData, nodeId);\n};\n/**\n * 获取节点的出度\n * @param graphData 图数据\n * @param nodeId 节点ID\n */\nexports.getInDegreeAsync = getInDegreeAsync;\nvar getOutDegreeAsync = function getOutDegreeAsync(graphData, nodeId) {\n return (0, _createWorker.default)(_constant.ALGORITHM.getOutDegree)(graphData, nodeId);\n};\n/**\n * 检测图中的(有向) Cycle\n * @param graphData 图数据\n */\nexports.getOutDegreeAsync = getOutDegreeAsync;\nvar detectCycleAsync = function detectCycleAsync(graphData) {\n return (0, _createWorker.default)(_constant.ALGORITHM.detectCycle)(graphData);\n};\n/**\n * 检测图中的(无向) Cycle\n * @param graphData 图数据\n */\nexports.detectCycleAsync = detectCycleAsync;\nvar detectAllCyclesAsync = function detectAllCyclesAsync(graphData) {\n return (0, _createWorker.default)(_constant.ALGORITHM.detectAllCycles)(graphData);\n};\n/**\n * 检测图中的所有(有向) Cycle\n * @param graphData 图数据\n */\nexports.detectAllCyclesAsync = detectAllCyclesAsync;\nvar detectAllDirectedCycleAsync = function detectAllDirectedCycleAsync(graphData) {\n return (0, _createWorker.default)(_constant.ALGORITHM.detectAllDirectedCycle)(graphData);\n};\n/**\n * 检测图中的所有(无向) Cycle\n * @param graphData 图数据\n */\nexports.detectAllDirectedCycleAsync = detectAllDirectedCycleAsync;\nvar detectAllUndirectedCycleAsync = function detectAllUndirectedCycleAsync(graphData) {\n return (0, _createWorker.default)(_constant.ALGORITHM.detectAllUndirectedCycle)(graphData);\n};\n/**\n * Dijkstra's algorithm, See {@link https://en.wikipedia.org/wiki/Dijkstra%27s_algorithm}\n * @param graphData 图数据\n */\nexports.detectAllUndirectedCycleAsync = detectAllUndirectedCycleAsync;\nvar dijkstraAsync = function dijkstraAsync(graphData, source, directed, weightPropertyName) {\n return (0, _createWorker.default)(_constant.ALGORITHM.dijkstra).apply(void 0, [graphData, source, directed, weightPropertyName]);\n};\n/**\n * 查找两点之间的所有路径\n * @param graphData 图数据\n * @param start 路径起始点ID\n * @param end 路径终点ID\n * @param directed 是否为有向图\n */\nexports.dijkstraAsync = dijkstraAsync;\nvar findAllPathAsync = function findAllPathAsync(graphData, start, end, directed) {\n return (0, _createWorker.default)(_constant.ALGORITHM.findAllPath).apply(void 0, [graphData, start, end, directed]);\n};\n/**\n * 查找两点之间的所有路径\n * @param graphData 图数据\n * @param start 路径起始点ID\n * @param end 路径终点ID\n * @param directed 是否为有向图\n * @param weightPropertyName 边权重的属名称,若数据中没有权重,则默认每条边权重为 1\n */\nexports.findAllPathAsync = findAllPathAsync;\nvar findShortestPathAsync = function findShortestPathAsync(graphData, start, end, directed, weightPropertyName) {\n return (0, _createWorker.default)(_constant.ALGORITHM.findShortestPath).apply(void 0, [graphData, start, end, directed, weightPropertyName]);\n};\n/**\n * Floyd–Warshall algorithm, See {@link https://en.wikipedia.org/wiki/Floyd%E2%80%93Warshall_algorithm}\n * @param graphData 图数据\n * @param directed 是否为有向图\n */\nexports.findShortestPathAsync = findShortestPathAsync;\nvar floydWarshallAsync = function floydWarshallAsync(graphData, directed) {\n return (0, _createWorker.default)(_constant.ALGORITHM.floydWarshall).apply(void 0, [graphData, directed]);\n};\n/**\n * 标签传播算法\n * @param graphData 图数据\n * @param directed 是否有向图,默认为 false\n * @param weightPropertyName 权重的属性字段\n * @param maxIteration 最大迭代次数\n */\nexports.floydWarshallAsync = floydWarshallAsync;\nvar labelPropagationAsync = function labelPropagationAsync(graphData, directed, weightPropertyName, maxIteration) {\n if (maxIteration === void 0) {\n maxIteration = 1000;\n }\n return (0, _createWorker.default)(_constant.ALGORITHM.labelPropagation)(graphData, directed, weightPropertyName, maxIteration);\n};\n/**\n * 社区发现 louvain 算法\n * @param graphData 图数据\n * @param directed 是否有向图,默认为 false\n * @param weightPropertyName 权重的属性字段\n * @param threshold\n */\nexports.labelPropagationAsync = labelPropagationAsync;\nvar louvainAsync = function louvainAsync(graphData, directed, weightPropertyName, threshold) {\n return (0, _createWorker.default)(_constant.ALGORITHM.louvain)(graphData, directed, weightPropertyName, threshold);\n};\n/**\n * 最小生成树,See {@link https://en.wikipedia.org/wiki/Kruskal%27s_algorithm}\n * @param graph\n * @param weight 指定用于作为边权重的属性,若不指定,则认为所有边权重一致\n * @param algo 'prim' | 'kruskal' 算法类型\n * @return EdgeConfig[] 返回构成MST的边的数组\n */\nexports.louvainAsync = louvainAsync;\nvar minimumSpanningTreeAsync = function minimumSpanningTreeAsync(graphData, weight, algo) {\n return (0, _createWorker.default)(_constant.ALGORITHM.minimumSpanningTree).apply(void 0, [graphData, weight, algo]);\n};\n/**\n * PageRank https://en.wikipedia.org/wiki/PageRank\n * refer: https://github.com/anvaka/ngraph.pagerank\n * @param graph\n * @param epsilon 判断是否收敛的精度值,默认 0.000001\n * @param linkProb 阻尼系数(dumping factor),指任意时刻,用户访问到某节点后继续访问该节点链接的下一个节点的概率,经验值 0.85\n */\nexports.minimumSpanningTreeAsync = minimumSpanningTreeAsync;\nvar pageRankAsync = function pageRankAsync(graphData, epsilon, linkProb) {\n return (0, _createWorker.default)(_constant.ALGORITHM.pageRank).apply(void 0, [graphData, epsilon, linkProb]);\n};\n/**\n * 获取指定节点的所有邻居\n * @param nodeId 节点 ID\n * @param edges 图中的所有边数据\n * @param type 邻居类型\n */\nexports.pageRankAsync = pageRankAsync;\nvar getNeighborsAsync = function getNeighborsAsync(nodeId, edges, type) {\n return (0, _createWorker.default)(_constant.ALGORITHM.getNeighbors).apply(void 0, [nodeId, edges, type]);\n};\n/**\n * GADDI 图模式匹配\n * @param graphData 原图数据\n * @param pattern 搜索图(需要在原图上搜索的模式)数据\n * @param directed 是否计算有向图,默认 false\n * @param k 参数 k,表示 k-近邻\n * @param length 参数 length\n * @param nodeLabelProp 节点数据中代表节点标签(分类信息)的属性名。默认为 cluster\n * @param edgeLabelProp 边数据中代表边标签(分类信息)的属性名。默认为 cluster\n */\nexports.getNeighborsAsync = getNeighborsAsync;\nvar GADDIAsync = function GADDIAsync(graphData, pattern, directed, k, length, nodeLabelProp, edgeLabelProp) {\n if (directed === void 0) {\n directed = false;\n }\n if (nodeLabelProp === void 0) {\n nodeLabelProp = 'cluster';\n }\n if (edgeLabelProp === void 0) {\n edgeLabelProp = 'cluster';\n }\n return (0, _createWorker.default)(_constant.ALGORITHM.GADDI).apply(void 0, [graphData, pattern, directed, k, length, nodeLabelProp, edgeLabelProp]);\n};\nexports.GADDIAsync = GADDIAsync;\n\n//# sourceURL=webpack:///./node_modules/@antv/algorithm/lib/workers/index.js?");
/***/ }),
/***/ "./node_modules/@antv/algorithm/lib/workers/index.worker.js":
/*!******************************************************************!*\
!*** ./node_modules/@antv/algorithm/lib/workers/index.worker.js ***!
\******************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
eval("\n\nfunction _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\nvar algorithm = _interopRequireWildcard(__webpack_require__(/*! ./algorithm */ \"./node_modules/@antv/algorithm/lib/workers/algorithm.js\"));\nvar _constant = __webpack_require__(/*! ./constant */ \"./node_modules/@antv/algorithm/lib/workers/constant.js\");\nfunction _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== \"function\") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }\nfunction _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== \"object\" && typeof obj !== \"function\") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== \"default\" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }\nvar ctx = typeof self !== 'undefined' ? self : {};\nctx.onmessage = function (event) {\n var _a = event.data,\n _algorithmType = _a._algorithmType,\n data = _a.data;\n // 如果发送内容没有私有类型。说明不是自己发的。不管\n // fix: https://github.com/antvis/algorithm/issues/25\n if (!_algorithmType) {\n return;\n }\n if (typeof algorithm[_algorithmType] === 'function') {\n var result = algorithm[_algorithmType].apply(algorithm, data);\n ctx.postMessage({\n _algorithmType: _constant.MESSAGE.SUCCESS,\n data: result\n });\n return;\n }\n ctx.postMessage({\n _algorithmType: _constant.MESSAGE.FAILURE\n });\n};\n// https://stackoverflow.com/questions/50210416/webpack-worker-loader-fails-to-compile-typescript-worker\nvar _default = null;\nexports.default = _default;\n\n//# sourceURL=webpack:///./node_modules/@antv/algorithm/lib/workers/index.worker.js?");
/***/ }),
/***/ "./node_modules/@antv/dom-util/esm/add-event-listener.js":
/*!***************************************************************!*\
!*** ./node_modules/@antv/dom-util/esm/add-event-listener.js ***!
\***************************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return addEventListener; });\nfunction addEventListener(target, eventType, callback) {\n if (target) {\n if (typeof target.addEventListener === 'function') {\n target.addEventListener(eventType, callback, false);\n return {\n remove: function () {\n target.removeEventListener(eventType, callback, false);\n },\n };\n // @ts-ignore\n }\n if (typeof target.attachEvent === 'function') {\n // @ts-ignore\n target.attachEvent('on' + eventType, callback);\n return {\n remove: function () {\n // @ts-ignore\n target.detachEvent('on' + eventType, callback);\n },\n };\n }\n }\n}\n//# sourceMappingURL=add-event-listener.js.map\n\n//# sourceURL=webpack:///./node_modules/@antv/dom-util/esm/add-event-listener.js?");
/***/ }),
/***/ "./node_modules/@antv/dom-util/esm/create-dom.js":
/*!*******************************************************!*\
!*** ./node_modules/@antv/dom-util/esm/create-dom.js ***!
\*******************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return createDom; });\n/**\n * 创建DOM 节点\n * @param {String} str Dom 字符串\n * @return {HTMLElement} DOM 节点\n */\nvar TABLE;\nvar TABLE_TR;\nvar FRAGMENT_REG;\nvar CONTAINERS;\nfunction initConstants() {\n TABLE = document.createElement('table');\n TABLE_TR = document.createElement('tr');\n FRAGMENT_REG = /^\\s*<(\\w+|!)[^>]*>/;\n CONTAINERS = {\n tr: document.createElement('tbody'),\n tbody: TABLE,\n thead: TABLE,\n tfoot: TABLE,\n td: TABLE_TR,\n th: TABLE_TR,\n '*': document.createElement('div'),\n };\n}\nfunction createDom(str) {\n if (!TABLE) {\n initConstants();\n }\n var name = FRAGMENT_REG.test(str) && RegExp.$1;\n if (!name || !(name in CONTAINERS)) {\n name = '*';\n }\n var container = CONTAINERS[name];\n str = typeof str === 'string' ? str.replace(/(^\\s*)|(\\s*$)/g, '') : str;\n container.innerHTML = '' + str;\n var dom = container.childNodes[0];\n if (dom && container.contains(dom)) {\n container.removeChild(dom);\n }\n return dom;\n}\n//# sourceMappingURL=create-dom.js.map\n\n//# sourceURL=webpack:///./node_modules/@antv/dom-util/esm/create-dom.js?");
/***/ }),
/***/ "./node_modules/@antv/dom-util/esm/get-height.js":
/*!*******************************************************!*\
!*** ./node_modules/@antv/dom-util/esm/get-height.js ***!
\*******************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return getHeight; });\n/* harmony import */ var _get_style__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./get-style */ \"./node_modules/@antv/dom-util/esm/get-style.js\");\n\nfunction getHeight(el, defaultValue) {\n var height = Object(_get_style__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(el, 'height', defaultValue);\n if (height === 'auto') {\n height = el.offsetHeight;\n }\n return parseFloat(height);\n}\n//# sourceMappingURL=get-height.js.map\n\n//# sourceURL=webpack:///./node_modules/@antv/dom-util/esm/get-height.js?");
/***/ }),
/***/ "./node_modules/@antv/dom-util/esm/get-outer-height.js":
/*!*************************************************************!*\
!*** ./node_modules/@antv/dom-util/esm/get-outer-height.js ***!
\*************************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return getOuterHeight; });\n/* harmony import */ var _get_style__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./get-style */ \"./node_modules/@antv/dom-util/esm/get-style.js\");\n/* harmony import */ var _get_height__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./get-height */ \"./node_modules/@antv/dom-util/esm/get-height.js\");\n\n\nfunction getOuterHeight(el, defaultValue) {\n var height = Object(_get_height__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(el, defaultValue);\n var bTop = parseFloat(Object(_get_style__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(el, 'borderTopWidth')) || 0;\n var pTop = parseFloat(Object(_get_style__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(el, 'paddingTop')) || 0;\n var pBottom = parseFloat(Object(_get_style__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(el, 'paddingBottom')) || 0;\n var bBottom = parseFloat(Object(_get_style__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(el, 'borderBottomWidth')) || 0;\n var mTop = parseFloat(Object(_get_style__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(el, 'marginTop')) || 0;\n var mBottom = parseFloat(Object(_get_style__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(el, 'marginBottom')) || 0;\n return height + bTop + bBottom + pTop + pBottom + mTop + mBottom;\n}\n//# sourceMappingURL=get-outer-height.js.map\n\n//# sourceURL=webpack:///./node_modules/@antv/dom-util/esm/get-outer-height.js?");
/***/ }),
/***/ "./node_modules/@antv/dom-util/esm/get-outer-width.js":
/*!************************************************************!*\
!*** ./node_modules/@antv/dom-util/esm/get-outer-width.js ***!
\************************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return getOuterWidth; });\n/* harmony import */ var _get_style__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./get-style */ \"./node_modules/@antv/dom-util/esm/get-style.js\");\n/* harmony import */ var _get_width__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./get-width */ \"./node_modules/@antv/dom-util/esm/get-width.js\");\n\n\nfunction getOuterWidth(el, defaultValue) {\n var width = Object(_get_width__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(el, defaultValue);\n var bLeft = parseFloat(Object(_get_style__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(el, 'borderLeftWidth')) || 0;\n var pLeft = parseFloat(Object(_get_style__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(el, 'paddingLeft')) || 0;\n var pRight = parseFloat(Object(_get_style__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(el, 'paddingRight')) || 0;\n var bRight = parseFloat(Object(_get_style__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(el, 'borderRightWidth')) || 0;\n var mRight = parseFloat(Object(_get_style__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(el, 'marginRight')) || 0;\n var mLeft = parseFloat(Object(_get_style__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(el, 'marginLeft')) || 0;\n return width + bLeft + bRight + pLeft + pRight + mLeft + mRight;\n}\n//# sourceMappingURL=get-outer-width.js.map\n\n//# sourceURL=webpack:///./node_modules/@antv/dom-util/esm/get-outer-width.js?");
/***/ }),
/***/ "./node_modules/@antv/dom-util/esm/get-ratio.js":
/*!******************************************************!*\
!*** ./node_modules/@antv/dom-util/esm/get-ratio.js ***!
\******************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return getRatio; });\nfunction getRatio() {\n return window.devicePixelRatio ? window.devicePixelRatio : 2;\n}\n//# sourceMappingURL=get-ratio.js.map\n\n//# sourceURL=webpack:///./node_modules/@antv/dom-util/esm/get-ratio.js?");
/***/ }),
/***/ "./node_modules/@antv/dom-util/esm/get-style.js":
/*!******************************************************!*\
!*** ./node_modules/@antv/dom-util/esm/get-style.js ***!
\******************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return getStyle; });\n/**\n * 获取样式\n * @param {Object} dom DOM节点\n * @param {String} name 样式名\n * @param {Any} defaultValue 默认值\n * @return {String} 属性值\n */\nfunction getStyle(dom, name, defaultValue) {\n var v;\n try {\n v = window.getComputedStyle ?\n window.getComputedStyle(dom, null)[name] :\n dom.style[name]; // 一般不会走到这个逻辑,dom.style 获取的是标签 style 属性,也不准确\n }\n catch (e) {\n // do nothing\n }\n finally {\n v = v === undefined ? defaultValue : v;\n }\n return v;\n}\n//# sourceMappingURL=get-style.js.map\n\n//# sourceURL=webpack:///./node_modules/@antv/dom-util/esm/get-style.js?");
/***/ }),
/***/ "./node_modules/@antv/dom-util/esm/get-width.js":
/*!******************************************************!*\
!*** ./node_modules/@antv/dom-util/esm/get-width.js ***!
\******************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return getHeight; });\n/* harmony import */ var _get_style__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./get-style */ \"./node_modules/@antv/dom-util/esm/get-style.js\");\n\nfunction getHeight(el, defaultValue) {\n var width = Object(_get_style__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(el, 'width', defaultValue);\n if (width === 'auto') {\n width = el.offsetWidth;\n }\n return parseFloat(width);\n}\n//# sourceMappingURL=get-width.js.map\n\n//# sourceURL=webpack:///./node_modules/@antv/dom-util/esm/get-width.js?");
/***/ }),
/***/ "./node_modules/@antv/dom-util/esm/index.js":
/*!**************************************************!*\
!*** ./node_modules/@antv/dom-util/esm/index.js ***!
\**************************************************/
/*! exports provided: addEventListener, createDom, getHeight, getOuterHeight, getOuterWidth, getRatio, getStyle, getWidth, modifyCSS */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _add_event_listener__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./add-event-listener */ \"./node_modules/@antv/dom-util/esm/add-event-listener.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"addEventListener\", function() { return _add_event_listener__WEBPACK_IMPORTED_MODULE_0__[\"default\"]; });\n\n/* harmony import */ var _create_dom__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./create-dom */ \"./node_modules/@antv/dom-util/esm/create-dom.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"createDom\", function() { return _create_dom__WEBPACK_IMPORTED_MODULE_1__[\"default\"]; });\n\n/* harmony import */ var _get_height__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./get-height */ \"./node_modules/@antv/dom-util/esm/get-height.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"getHeight\", function() { return _get_height__WEBPACK_IMPORTED_MODULE_2__[\"default\"]; });\n\n/* harmony import */ var _get_outer_height__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./get-outer-height */ \"./node_modules/@antv/dom-util/esm/get-outer-height.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"getOuterHeight\", function() { return _get_outer_height__WEBPACK_IMPORTED_MODULE_3__[\"default\"]; });\n\n/* harmony import */ var _get_outer_width__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./get-outer-width */ \"./node_modules/@antv/dom-util/esm/get-outer-width.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"getOuterWidth\", function() { return _get_outer_width__WEBPACK_IMPORTED_MODULE_4__[\"default\"]; });\n\n/* harmony import */ var _get_ratio__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./get-ratio */ \"./node_modules/@antv/dom-util/esm/get-ratio.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"getRatio\", function() { return _get_ratio__WEBPACK_IMPORTED_MODULE_5__[\"default\"]; });\n\n/* harmony import */ var _get_style__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./get-style */ \"./node_modules/@antv/dom-util/esm/get-style.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"getStyle\", function() { return _get_style__WEBPACK_IMPORTED_MODULE_6__[\"default\"]; });\n\n/* harmony import */ var _get_width__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./get-width */ \"./node_modules/@antv/dom-util/esm/get-width.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"getWidth\", function() { return _get_width__WEBPACK_IMPORTED_MODULE_7__[\"default\"]; });\n\n/* harmony import */ var _modify_css__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./modify-css */ \"./node_modules/@antv/dom-util/esm/modify-css.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"modifyCSS\", function() { return _modify_css__WEBPACK_IMPORTED_MODULE_8__[\"default\"]; });\n\n// dom\n\n\n\n\n\n\n\n\n\n//# sourceMappingURL=index.js.map\n\n//# sourceURL=webpack:///./node_modules/@antv/dom-util/esm/index.js?");
/***/ }),
/***/ "./node_modules/@antv/dom-util/esm/modify-css.js":
/*!*******************************************************!*\
!*** ./node_modules/@antv/dom-util/esm/modify-css.js ***!
\*******************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return modifyCSS; });\nfunction modifyCSS(dom, css) {\n if (dom) {\n for (var key in css) {\n if (css.hasOwnProperty(key)) {\n dom.style[key] = css[key];\n }\n }\n }\n return dom;\n}\n//# sourceMappingURL=modify-css.js.map\n\n//# sourceURL=webpack:///./node_modules/@antv/dom-util/esm/modify-css.js?");
/***/ }),
/***/ "./node_modules/@antv/event-emitter/esm/index.js":
/*!*******************************************************!*\
!*** ./node_modules/@antv/event-emitter/esm/index.js ***!
\*******************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\nvar WILDCARD = '*';\n/* event-emitter */\nvar EventEmitter = /** @class */ (function () {\n function EventEmitter() {\n this._events = {};\n }\n /**\n * 监听一个事件\n * @param evt\n * @param callback\n * @param once\n */\n EventEmitter.prototype.on = function (evt, callback, once) {\n if (!this._events[evt]) {\n this._events[evt] = [];\n }\n this._events[evt].push({\n callback: callback,\n once: !!once,\n });\n return this;\n };\n /**\n * 监听一个事件一次\n * @param evt\n * @param callback\n */\n EventEmitter.prototype.once = function (evt, callback) {\n return this.on(evt, callback, true);\n };\n /**\n * 触发一个事件\n * @param evt\n * @param args\n */\n EventEmitter.prototype.emit = function (evt) {\n var _this = this;\n var args = [];\n for (var _i = 1; _i < arguments.length; _i++) {\n args[_i - 1] = arguments[_i];\n }\n var events = this._events[evt] || [];\n var wildcardEvents = this._events[WILDCARD] || [];\n // 实际的处理 emit 方法\n var doEmit = function (es) {\n var length = es.length;\n for (var i = 0; i < length; i++) {\n if (!es[i]) {\n continue;\n }\n var _a = es[i], callback = _a.callback, once = _a.once;\n if (once) {\n es.splice(i, 1);\n if (es.length === 0) {\n delete _this._events[evt];\n }\n length--;\n i--;\n }\n callback.apply(_this, args);\n }\n };\n doEmit(events);\n doEmit(wildcardEvents);\n };\n /**\n * 取消监听一个事件,或者一个channel\n * @param evt\n * @param callback\n */\n EventEmitter.prototype.off = function (evt, callback) {\n if (!evt) {\n // evt 为空全部清除\n this._events = {};\n }\n else {\n if (!callback) {\n // evt 存在,callback 为空,清除事件所有方法\n delete this._events[evt];\n }\n else {\n // evt 存在,callback 存在,清除匹配的\n var events = this._events[evt] || [];\n var length_1 = events.length;\n for (var i = 0; i < length_1; i++) {\n if (events[i].callback === callback) {\n events.splice(i, 1);\n length_1--;\n i--;\n }\n }\n if (events.length === 0) {\n delete this._events[evt];\n }\n }\n }\n return this;\n };\n /* 当前所有的事件 */\n EventEmitter.prototype.getEvents = function () {\n return this._events;\n };\n return EventEmitter;\n}());\n/* harmony default export */ __webpack_exports__[\"default\"] = (EventEmitter);\n//# sourceMappingURL=index.js.map\n\n//# sourceURL=webpack:///./node_modules/@antv/event-emitter/esm/index.js?");
/***/ }),
/***/ "./node_modules/@antv/g-base/esm/abstract/base.js":
/*!********************************************************!*\
!*** ./node_modules/@antv/g-base/esm/abstract/base.js ***!
\********************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tslib */ \"./node_modules/tslib/tslib.es6.js\");\n/* harmony import */ var _antv_event_emitter__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @antv/event-emitter */ \"./node_modules/@antv/event-emitter/esm/index.js\");\n/* harmony import */ var _util_util__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../util/util */ \"./node_modules/@antv/g-base/esm/util/util.js\");\n\n\n\nvar Base = /** @class */ (function (_super) {\n Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__extends\"])(Base, _super);\n function Base(cfg) {\n var _this = _super.call(this) || this;\n /**\n * 是否被销毁\n * @type {boolean}\n */\n _this.destroyed = false;\n var defaultCfg = _this.getDefaultCfg();\n _this.cfg = Object(_util_util__WEBPACK_IMPORTED_MODULE_2__[\"mix\"])(defaultCfg, cfg);\n return _this;\n }\n /**\n * @protected\n * 默认的配置项\n * @returns {object} 默认的配置项\n */\n Base.prototype.getDefaultCfg = function () {\n return {};\n };\n // 实现接口的方法\n Base.prototype.get = function (name) {\n return this.cfg[name];\n };\n // 实现接口的方法\n Base.prototype.set = function (name, value) {\n this.cfg[name] = value;\n };\n // 实现接口的方法\n Base.prototype.destroy = function () {\n this.cfg = {\n destroyed: true,\n };\n this.off();\n this.destroyed = true;\n };\n return Base;\n}(_antv_event_emitter__WEBPACK_IMPORTED_MODULE_1__[\"default\"]));\n/* harmony default export */ __webpack_exports__[\"default\"] = (Base);\n//# sourceMappingURL=base.js.map\n\n//# sourceURL=webpack:///./node_modules/@antv/g-base/esm/abstract/base.js?");
/***/ }),
/***/ "./node_modules/@antv/g-base/esm/abstract/canvas.js":
/*!**********************************************************!*\
!*** ./node_modules/@antv/g-base/esm/abstract/canvas.js ***!
\**********************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tslib */ \"./node_modules/tslib/tslib.es6.js\");\n/* harmony import */ var detect_browser__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! detect-browser */ \"./node_modules/detect-browser/es/index.js\");\n/* harmony import */ var _container__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./container */ \"./node_modules/@antv/g-base/esm/abstract/container.js\");\n/* harmony import */ var _util_util__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../util/util */ \"./node_modules/@antv/g-base/esm/util/util.js\");\n/* harmony import */ var _animate_timeline__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../animate/timeline */ \"./node_modules/@antv/g-base/esm/animate/timeline.js\");\n/* harmony import */ var _event_event_contoller__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../event/event-contoller */ \"./node_modules/@antv/g-base/esm/event/event-contoller.js\");\n\n\n\n\n\n\nvar PX_SUFFIX = 'px';\nvar browser = Object(detect_browser__WEBPACK_IMPORTED_MODULE_1__[\"detect\"])();\nvar isFirefox = browser && browser.name === 'firefox';\nvar Canvas = /** @class */ (function (_super) {\n Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__extends\"])(Canvas, _super);\n function Canvas(cfg) {\n var _this = _super.call(this, cfg) || this;\n _this.initContainer();\n _this.initDom();\n _this.initEvents();\n _this.initTimeline();\n return _this;\n }\n Canvas.prototype.getDefaultCfg = function () {\n var cfg = _super.prototype.getDefaultCfg.call(this);\n // set default cursor style for canvas\n cfg['cursor'] = 'default';\n // CSS transform 目前尚未经过长时间验证,为了避免影响上层业务,默认关闭,上层按需开启\n cfg['supportCSSTransform'] = false;\n return cfg;\n };\n /**\n * @protected\n * 初始化容器\n */\n Canvas.prototype.initContainer = function () {\n var container = this.get('container');\n if (Object(_util_util__WEBPACK_IMPORTED_MODULE_3__[\"isString\"])(container)) {\n container = document.getElementById(container);\n this.set('container', container);\n }\n };\n /**\n * @protected\n * 初始化 DOM\n */\n Canvas.prototype.initDom = function () {\n var el = this.createDom();\n this.set('el', el);\n // 附加到容器\n var container = this.get('container');\n container.appendChild(el);\n // 设置初始宽度\n this.setDOMSize(this.get('width'), this.get('height'));\n };\n /**\n * @protected\n * 初始化绑定的事件\n */\n Canvas.prototype.initEvents = function () {\n var eventController = new _event_event_contoller__WEBPACK_IMPORTED_MODULE_5__[\"default\"]({\n canvas: this,\n });\n eventController.init();\n this.set('eventController', eventController);\n };\n /**\n * @protected\n * 初始化时间轴\n */\n Canvas.prototype.initTimeline = function () {\n var timeline = new _animate_timeline__WEBPACK_IMPORTED_MODULE_4__[\"default\"](this);\n this.set('timeline', timeline);\n };\n /**\n * @protected\n * 修改画布对应的 DOM 的大小\n * @param {number} width 宽度\n * @param {number} height 高度\n */\n Canvas.prototype.setDOMSize = function (width, height) {\n var el = this.get('el');\n if (_util_util__WEBPACK_IMPORTED_MODULE_3__[\"isBrowser\"]) {\n el.style.width = width + PX_SUFFIX;\n el.style.height = height + PX_SUFFIX;\n }\n };\n // 实现接口\n Canvas.prototype.changeSize = function (width, height) {\n this.setDOMSize(width, height);\n this.set('width', width);\n this.set('height', height);\n this.onCanvasChange('changeSize');\n };\n /**\n * 获取当前的渲染引擎\n * @return {Renderer} 返回当前的渲染引擎\n */\n Canvas.prototype.getRenderer = function () {\n return this.get('renderer');\n };\n /**\n * 获取画布的 cursor 样式\n * @return {Cursor}\n */\n Canvas.prototype.getCursor = function () {\n return this.get('cursor');\n };\n /**\n * 设置画布的 cursor 样式\n * @param {Cursor} cursor cursor 样式\n */\n Canvas.prototype.setCursor = function (cursor) {\n this.set('cursor', cursor);\n var el = this.get('el');\n if (_util_util__WEBPACK_IMPORTED_MODULE_3__[\"isBrowser\"] && el) {\n // 直接设置样式,不等待鼠标移动时再设置\n el.style.cursor = cursor;\n }\n };\n // 实现接口\n Canvas.prototype.getPointByEvent = function (ev) {\n var supportCSSTransform = this.get('supportCSSTransform');\n if (supportCSSTransform) {\n // For Firefox <= 38\n if (isFirefox && !Object(_util_util__WEBPACK_IMPORTED_MODULE_3__[\"isNil\"])(ev.layerX) && ev.layerX !== ev.offsetX) {\n return {\n x: ev.layerX,\n y: ev.layerY,\n };\n }\n if (!Object(_util_util__WEBPACK_IMPORTED_MODULE_3__[\"isNil\"])(ev.offsetX)) {\n // For IE6+, Firefox >= 39, Chrome, Safari, Opera\n return {\n x: ev.offsetX,\n y: ev.offsetY,\n };\n }\n }\n // should calculate by self for other cases, like Safari in ios\n // TODO: support CSS transform\n var _a = this.getClientByEvent(ev), clientX = _a.x, clientY = _a.y;\n return this.getPointByClient(clientX, clientY);\n };\n // 获取 touch 事件的 clientX 和 clientY 需要单独处理\n Canvas.prototype.getClientByEvent = function (ev) {\n var clientInfo = ev;\n if (ev.touches) {\n if (ev.type === 'touchend') {\n clientInfo = ev.changedTouches[0];\n }\n else {\n clientInfo = ev.touches[0];\n }\n }\n return {\n x: clientInfo.clientX,\n y: clientInfo.clientY,\n };\n };\n // 实现接口\n Canvas.prototype.getPointByClient = function (clientX, clientY) {\n var el = this.get('el');\n var bbox = el.getBoundingClientRect();\n return {\n x: clientX - bbox.left,\n y: clientY - bbox.top,\n };\n };\n // 实现接口\n Canvas.prototype.getClientByPoint = function (x, y) {\n var el = this.get('el');\n var bbox = el.getBoundingClientRect();\n return {\n x: x + bbox.left,\n y: y + bbox.top,\n };\n };\n // 实现接口\n Canvas.prototype.draw = function () { };\n /**\n * @protected\n * 销毁 DOM 容器\n */\n Canvas.prototype.removeDom = function () {\n var el = this.get('el');\n el.parentNode.removeChild(el);\n };\n /**\n * @protected\n * 清理所有的事件\n */\n Canvas.prototype.clearEvents = function () {\n var eventController = this.get('eventController');\n eventController.destroy();\n };\n Canvas.prototype.isCanvas = function () {\n return true;\n };\n Canvas.prototype.getParent = function () {\n return null;\n };\n Canvas.prototype.destroy = function () {\n var timeline = this.get('timeline');\n if (this.get('destroyed')) {\n return;\n }\n this.clear();\n // 同初始化时相反顺序调用\n if (timeline) {\n // 画布销毁时自动停止动画\n timeline.stop();\n }\n this.clearEvents();\n this.removeDom();\n _super.prototype.destroy.call(this);\n };\n return Canvas;\n}(_container__WEBPACK_IMPORTED_MODULE_2__[\"default\"]));\n/* harmony default export */ __webpack_exports__[\"default\"] = (Canvas);\n//# sourceMappingURL=canvas.js.map\n\n//# sourceURL=webpack:///./node_modules/@antv/g-base/esm/abstract/canvas.js?");
/***/ }),
/***/ "./node_modules/@antv/g-base/esm/abstract/container.js":
/*!*************************************************************!*\
!*** ./node_modules/@antv/g-base/esm/abstract/container.js ***!
\*************************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tslib */ \"./node_modules/tslib/tslib.es6.js\");\n/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./element */ \"./node_modules/@antv/g-base/esm/abstract/element.js\");\n/* harmony import */ var _util_util__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../util/util */ \"./node_modules/@antv/g-base/esm/util/util.js\");\n\n\n\nvar SHAPE_MAP = {};\nvar INDEX = '_INDEX';\n/**\n * 设置 canvas\n * @param {IElement} element 元素\n * @param {ICanvas} canvas 画布\n */\nfunction setCanvas(element, canvas) {\n element.set('canvas', canvas);\n if (element.isGroup()) {\n var children = element.get('children');\n if (children.length) {\n children.forEach(function (child) {\n setCanvas(child, canvas);\n });\n }\n }\n}\n/**\n * 设置 timeline\n * @param {IElement} element 元素\n * @param {Timeline} timeline 时间轴\n */\nfunction setTimeline(element, timeline) {\n element.set('timeline', timeline);\n if (element.isGroup()) {\n var children = element.get('children');\n if (children.length) {\n children.forEach(function (child) {\n setTimeline(child, timeline);\n });\n }\n }\n}\nfunction contains(container, element) {\n var children = container.getChildren();\n return children.indexOf(element) >= 0;\n}\nfunction removeChild(container, element, destroy) {\n if (destroy === void 0) { destroy = true; }\n // 不再调用 element.remove() 方法,会出现循环调用\n if (destroy) {\n element.destroy();\n }\n else {\n element.set('parent', null);\n element.set('canvas', null);\n }\n Object(_util_util__WEBPACK_IMPORTED_MODULE_2__[\"removeFromArray\"])(container.getChildren(), element);\n}\nfunction getComparer(compare) {\n return function (left, right) {\n var result = compare(left, right);\n return result === 0 ? left[INDEX] - right[INDEX] : result;\n };\n}\nvar Container = /** @class */ (function (_super) {\n Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__extends\"])(Container, _super);\n function Container() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n Container.prototype.isCanvas = function () {\n return false;\n };\n // 根据子节点确定 BBox\n Container.prototype.getBBox = function () {\n // 所有的值可能在画布的可视区外\n var minX = Infinity;\n var maxX = -Infinity;\n var minY = Infinity;\n var maxY = -Infinity;\n // 将可见元素、图形以及不为空的图形分组筛选出来,用于包围盒合并\n var children = this.getChildren().filter(function (child) {\n return child.get('visible') && (!child.isGroup() || (child.isGroup() && child.getChildren().length > 0));\n });\n if (children.length > 0) {\n Object(_util_util__WEBPACK_IMPORTED_MODULE_2__[\"each\"])(children, function (child) {\n var _a = child.getBBox(), childMinX = _a.minX, childMaxX = _a.maxX, childMinY = _a.minY, childMaxY = _a.maxY;\n if (childMinX < minX) {\n minX = childMinX;\n }\n if (childMaxX > maxX) {\n maxX = childMaxX;\n }\n if (childMinY < minY) {\n minY = childMinY;\n }\n if (childMaxY > maxY) {\n maxY = childMaxY;\n }\n });\n }\n else {\n minX = 0;\n maxX = 0;\n minY = 0;\n maxY = 0;\n }\n var box = {\n x: minX,\n y: minY,\n minX: minX,\n minY: minY,\n maxX: maxX,\n maxY: maxY,\n width: maxX - minX,\n height: maxY - minY,\n };\n return box;\n };\n // 获取画布的包围盒\n Container.prototype.getCanvasBBox = function () {\n var minX = Infinity;\n var maxX = -Infinity;\n var minY = Infinity;\n var maxY = -Infinity;\n // 将可见元素、图形以及不为空的图形分组筛选出来,用于包围盒合并\n var children = this.getChildren().filter(function (child) {\n return child.get('visible') && (!child.isGroup() || (child.isGroup() && child.getChildren().length > 0));\n });\n if (children.length > 0) {\n Object(_util_util__WEBPACK_IMPORTED_MODULE_2__[\"each\"])(children, function (child) {\n var _a = child.getCanvasBBox(), childMinX = _a.minX, childMaxX = _a.maxX, childMinY = _a.minY, childMaxY = _a.maxY;\n if (childMinX < minX) {\n minX = childMinX;\n }\n if (childMaxX > maxX) {\n maxX = childMaxX;\n }\n if (childMinY < minY) {\n minY = childMinY;\n }\n if (childMaxY > maxY) {\n maxY = childMaxY;\n }\n });\n }\n else {\n minX = 0;\n maxX = 0;\n minY = 0;\n maxY = 0;\n }\n var box = {\n x: minX,\n y: minY,\n minX: minX,\n minY: minY,\n maxX: maxX,\n maxY: maxY,\n width: maxX - minX,\n height: maxY - minY,\n };\n return box;\n };\n Container.prototype.getDefaultCfg = function () {\n var cfg = _super.prototype.getDefaultCfg.call(this);\n cfg['children'] = [];\n return cfg;\n };\n Container.prototype.onAttrChange = function (name, value, originValue) {\n _super.prototype.onAttrChange.call(this, name, value, originValue);\n if (name === 'matrix') {\n var totalMatrix = this.getTotalMatrix();\n this._applyChildrenMarix(totalMatrix);\n }\n };\n // 不但应用到自己身上还要应用于子元素\n Container.prototype.applyMatrix = function (matrix) {\n var preTotalMatrix = this.getTotalMatrix();\n _super.prototype.applyMatrix.call(this, matrix);\n var totalMatrix = this.getTotalMatrix();\n // totalMatrix 没有发生变化时,这里仅考虑两者都为 null 时\n // 不继续向下传递矩阵\n if (totalMatrix === preTotalMatrix) {\n return;\n }\n this._applyChildrenMarix(totalMatrix);\n };\n // 在子元素上设置矩阵\n Container.prototype._applyChildrenMarix = function (totalMatrix) {\n var children = this.getChildren();\n Object(_util_util__WEBPACK_IMPORTED_MODULE_2__[\"each\"])(children, function (child) {\n child.applyMatrix(totalMatrix);\n });\n };\n // 兼容老版本的接口\n Container.prototype.addShape = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n var type = args[0];\n var cfg = args[1];\n if (Object(_util_util__WEBPACK_IMPORTED_MODULE_2__[\"isObject\"])(type)) {\n cfg = type;\n }\n else {\n cfg['type'] = type;\n }\n var shapeType = SHAPE_MAP[cfg.type];\n if (!shapeType) {\n shapeType = Object(_util_util__WEBPACK_IMPORTED_MODULE_2__[\"upperFirst\"])(cfg.type);\n SHAPE_MAP[cfg.type] = shapeType;\n }\n var ShapeBase = this.getShapeBase();\n var shape = new ShapeBase[shapeType](cfg);\n this.add(shape);\n return shape;\n };\n Container.prototype.addGroup = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n var groupClass = args[0], cfg = args[1];\n var group;\n if (Object(_util_util__WEBPACK_IMPORTED_MODULE_2__[\"isFunction\"])(groupClass)) {\n if (cfg) {\n group = new groupClass(cfg);\n }\n else {\n group = new groupClass({\n // canvas,\n parent: this,\n });\n }\n }\n else {\n var tmpCfg = groupClass || {};\n var TmpGroupClass = this.getGroupBase();\n group = new TmpGroupClass(tmpCfg);\n }\n this.add(group);\n return group;\n };\n Container.prototype.getCanvas = function () {\n var canvas;\n if (this.isCanvas()) {\n canvas = this;\n }\n else {\n canvas = this.get('canvas');\n }\n return canvas;\n };\n Container.prototype.getShape = function (x, y, ev) {\n // 如果不支持拾取,则直接返回\n if (!Object(_util_util__WEBPACK_IMPORTED_MODULE_2__[\"isAllowCapture\"])(this)) {\n return null;\n }\n var children = this.getChildren();\n var shape;\n // 如果容器是 group\n if (!this.isCanvas()) {\n var v = [x, y, 1];\n // 将 x, y 转换成对应于 group 的局部坐标\n v = this.invertFromMatrix(v);\n if (!this.isClipped(v[0], v[1])) {\n shape = this._findShape(children, v[0], v[1], ev);\n }\n }\n else {\n shape = this._findShape(children, x, y, ev);\n }\n return shape;\n };\n Container.prototype._findShape = function (children, x, y, ev) {\n var shape = null;\n for (var i = children.length - 1; i >= 0; i--) {\n var child = children[i];\n if (Object(_util_util__WEBPACK_IMPORTED_MODULE_2__[\"isAllowCapture\"])(child)) {\n if (child.isGroup()) {\n shape = child.getShape(x, y, ev);\n }\n else if (child.isHit(x, y)) {\n shape = child;\n }\n }\n if (shape) {\n break;\n }\n }\n return shape;\n };\n Container.prototype.add = function (element) {\n var canvas = this.getCanvas();\n var children = this.getChildren();\n var timeline = this.get('timeline');\n var preParent = element.getParent();\n if (preParent) {\n removeChild(preParent, element, false);\n }\n element.set('parent', this);\n if (canvas) {\n setCanvas(element, canvas);\n }\n if (timeline) {\n setTimeline(element, timeline);\n }\n children.push(element);\n element.onCanvasChange('add');\n this._applyElementMatrix(element);\n };\n // 将当前容器的矩阵应用到子元素\n Container.prototype._applyElementMatrix = function (element) {\n var totalMatrix = this.getTotalMatrix();\n // 添加图形或者分组时,需要把当前图元的矩阵设置进去\n if (totalMatrix) {\n element.applyMatrix(totalMatrix);\n }\n };\n Container.prototype.getChildren = function () {\n return this.get('children');\n };\n Container.prototype.sort = function () {\n var children = this.getChildren();\n // 稳定排序\n Object(_util_util__WEBPACK_IMPORTED_MODULE_2__[\"each\"])(children, function (child, index) {\n child[INDEX] = index;\n return child;\n });\n children.sort(getComparer(function (obj1, obj2) {\n return obj1.get('zIndex') - obj2.get('zIndex');\n }));\n this.onCanvasChange('sort');\n };\n Container.prototype.clear = function () {\n this.set('clearing', true);\n if (this.destroyed) {\n return;\n }\n var children = this.getChildren();\n for (var i = children.length - 1; i >= 0; i--) {\n children[i].destroy(); // 销毁子元素\n }\n this.set('children', []);\n this.onCanvasChange('clear');\n this.set('clearing', false);\n };\n Container.prototype.destroy = function () {\n if (this.get('destroyed')) {\n return;\n }\n this.clear();\n _super.prototype.destroy.call(this);\n };\n /**\n * 获取第一个子元素\n * @return {IElement} 第一个元素\n */\n Container.prototype.getFirst = function () {\n return this.getChildByIndex(0);\n };\n /**\n * 获取最后一个子元素\n * @return {IElement} 元素\n */\n Container.prototype.getLast = function () {\n var children = this.getChildren();\n return this.getChildByIndex(children.length - 1);\n };\n /**\n * 根据索引获取子元素\n * @return {IElement} 第一个元素\n */\n Container.prototype.getChildByIndex = function (index) {\n var children = this.getChildren();\n return children[index];\n };\n /**\n * 子元素的数量\n * @return {number} 子元素数量\n */\n Container.prototype.getCount = function () {\n var children = this.getChildren();\n return children.length;\n };\n /**\n * 是否包含对应元素\n * @param {IElement} element 元素\n * @return {boolean}\n */\n Container.prototype.contain = function (element) {\n var children = this.getChildren();\n return children.indexOf(element) > -1;\n };\n /**\n * 移除对应子元素\n * @param {IElement} element 子元素\n * @param {boolean} destroy 是否销毁子元素,默认为 true\n */\n Container.prototype.removeChild = function (element, destroy) {\n if (destroy === void 0) { destroy = true; }\n if (this.contain(element)) {\n element.remove(destroy);\n }\n };\n /**\n * 查找所有匹配的元素\n * @param {ElementFilterFn} fn 匹配函数\n * @return {IElement[]} 元素数组\n */\n Container.prototype.findAll = function (fn) {\n var rst = [];\n var children = this.getChildren();\n Object(_util_util__WEBPACK_IMPORTED_MODULE_2__[\"each\"])(children, function (element) {\n if (fn(element)) {\n rst.push(element);\n }\n if (element.isGroup()) {\n rst = rst.concat(element.findAll(fn));\n }\n });\n return rst;\n };\n /**\n * 查找元素,找到第一个返回\n * @param {ElementFilterFn} fn 匹配函数\n * @return {IElement|null} 元素,可以为空\n */\n Container.prototype.find = function (fn) {\n var rst = null;\n var children = this.getChildren();\n Object(_util_util__WEBPACK_IMPORTED_MODULE_2__[\"each\"])(children, function (element) {\n if (fn(element)) {\n rst = element;\n }\n else if (element.isGroup()) {\n rst = element.find(fn);\n }\n if (rst) {\n return false;\n }\n });\n return rst;\n };\n /**\n * 根据 ID 查找元素\n * @param {string} id 元素 id\n * @return {IElement|null} 元素\n */\n Container.prototype.findById = function (id) {\n return this.find(function (element) {\n return element.get('id') === id;\n });\n };\n /**\n * 该方法即将废弃,不建议使用\n * 根据 className 查找元素\n * TODO: 该方式定义暂时只给 G6 3.3 以后的版本使用,待 G6 中的 findByClassName 方法移除后,G 也需要同步移除\n * @param {string} className 元素 className\n * @return {IElement | null} 元素\n */\n Container.prototype.findByClassName = function (className) {\n return this.find(function (element) {\n return element.get('className') === className;\n });\n };\n /**\n * 根据 name 查找元素列表\n * @param {string} name 元素名称\n * @return {IElement[]} 元素\n */\n Container.prototype.findAllByName = function (name) {\n return this.findAll(function (element) {\n return element.get('name') === name;\n });\n };\n return Container;\n}(_element__WEBPACK_IMPORTED_MODULE_1__[\"default\"]));\n/* harmony default export */ __webpack_exports__[\"default\"] = (Container);\n//# sourceMappingURL=container.js.map\n\n//# sourceURL=webpack:///./node_modules/@antv/g-base/esm/abstract/container.js?");
/***/ }),
/***/ "./node_modules/@antv/g-base/esm/abstract/element.js":
/*!***********************************************************!*\
!*** ./node_modules/@antv/g-base/esm/abstract/element.js ***!
\***********************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tslib */ \"./node_modules/tslib/tslib.es6.js\");\n/* harmony import */ var _antv_util__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @antv/util */ \"./node_modules/@antv/util/esm/index.js\");\n/* harmony import */ var _antv_matrix_util__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @antv/matrix-util */ \"./node_modules/@antv/matrix-util/esm/index.js\");\n/* harmony import */ var _util_util__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../util/util */ \"./node_modules/@antv/g-base/esm/util/util.js\");\n/* harmony import */ var _util_matrix__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../util/matrix */ \"./node_modules/@antv/g-base/esm/util/matrix.js\");\n/* harmony import */ var _base__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./base */ \"./node_modules/@antv/g-base/esm/abstract/base.js\");\n\n\n\n\n\n\nvar transform = _antv_matrix_util__WEBPACK_IMPORTED_MODULE_2__[\"ext\"].transform;\nvar MATRIX = 'matrix';\nvar CLONE_CFGS = ['zIndex', 'capture', 'visible', 'type'];\n// 可以在 toAttrs 中设置,但不属于绘图属性的字段\nvar RESERVED_PORPS = ['repeat'];\nvar DELEGATION_SPLIT = ':';\nvar WILDCARD = '*';\n// 需要考虑数组嵌套数组的场景\n// 数组嵌套对象的场景不考虑\nfunction _cloneArrayAttr(arr) {\n var result = [];\n for (var i = 0; i < arr.length; i++) {\n if (Object(_antv_util__WEBPACK_IMPORTED_MODULE_1__[\"isArray\"])(arr[i])) {\n result.push([].concat(arr[i]));\n }\n else {\n result.push(arr[i]);\n }\n }\n return result;\n}\nfunction getFormatFromAttrs(toAttrs, shape) {\n var fromAttrs = {};\n var attrs = shape.attrs;\n for (var k in toAttrs) {\n fromAttrs[k] = attrs[k];\n }\n return fromAttrs;\n}\nfunction getFormatToAttrs(props, shape) {\n var toAttrs = {};\n var attrs = shape.attr();\n Object(_antv_util__WEBPACK_IMPORTED_MODULE_1__[\"each\"])(props, function (v, k) {\n if (RESERVED_PORPS.indexOf(k) === -1 && !Object(_antv_util__WEBPACK_IMPORTED_MODULE_1__[\"isEqual\"])(attrs[k], v)) {\n toAttrs[k] = v;\n }\n });\n return toAttrs;\n}\nfunction checkExistedAttrs(animations, animation) {\n if (animation.onFrame) {\n return animations;\n }\n var startTime = animation.startTime, delay = animation.delay, duration = animation.duration;\n var hasOwnProperty = Object.prototype.hasOwnProperty;\n Object(_antv_util__WEBPACK_IMPORTED_MODULE_1__[\"each\"])(animations, function (item) {\n // 后一个动画开始执行的时间 < 前一个动画的结束时间 && 后一个动画的执行时间 > 前一个动画的延迟\n if (startTime + delay < item.startTime + item.delay + item.duration && duration > item.delay) {\n Object(_antv_util__WEBPACK_IMPORTED_MODULE_1__[\"each\"])(animation.toAttrs, function (v, k) {\n if (hasOwnProperty.call(item.toAttrs, k)) {\n delete item.toAttrs[k];\n delete item.fromAttrs[k];\n }\n });\n }\n });\n return animations;\n}\nvar Element = /** @class */ (function (_super) {\n Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__extends\"])(Element, _super);\n function Element(cfg) {\n var _this = _super.call(this, cfg) || this;\n /**\n * @protected\n * 图形属性\n * @type {ShapeAttrs}\n */\n _this.attrs = {};\n var attrs = _this.getDefaultAttrs();\n Object(_antv_util__WEBPACK_IMPORTED_MODULE_1__[\"mix\"])(attrs, cfg.attrs);\n _this.attrs = attrs;\n _this.initAttrs(attrs);\n _this.initAnimate(); // 初始化动画\n return _this;\n }\n // override\n Element.prototype.getDefaultCfg = function () {\n return {\n visible: true,\n capture: true,\n zIndex: 0,\n };\n };\n /**\n * @protected\n * 获取默认的属相\n */\n Element.prototype.getDefaultAttrs = function () {\n return {\n matrix: this.getDefaultMatrix(),\n opacity: 1,\n };\n };\n /**\n * @protected\n * 一些方法调用会引起画布变化\n * @param {ChangeType} changeType 改变的类型\n */\n Element.prototype.onCanvasChange = function (changeType) { };\n /**\n * @protected\n * 初始化属性,有些属性需要加工\n * @param {object} attrs 属性值\n */\n Element.prototype.initAttrs = function (attrs) { };\n /**\n * @protected\n * 初始化动画\n */\n Element.prototype.initAnimate = function () {\n this.set('animable', true);\n this.set('animating', false);\n };\n Element.prototype.isGroup = function () {\n return false;\n };\n Element.prototype.getParent = function () {\n return this.get('parent');\n };\n Element.prototype.getCanvas = function () {\n return this.get('canvas');\n };\n Element.prototype.attr = function () {\n var _a;\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n var name = args[0], value = args[1];\n if (!name)\n return this.attrs;\n if (Object(_antv_util__WEBPACK_IMPORTED_MODULE_1__[\"isObject\"])(name)) {\n for (var k in name) {\n this.setAttr(k, name[k]);\n }\n this.afterAttrsChange(name);\n return this;\n }\n if (args.length === 2) {\n this.setAttr(name, value);\n this.afterAttrsChange((_a = {},\n _a[name] = value,\n _a));\n return this;\n }\n return this.attrs[name];\n };\n // 是否被裁剪,被裁剪则不显示,不参与拾取\n Element.prototype.isClipped = function (refX, refY) {\n var clip = this.getClip();\n return clip && !clip.isHit(refX, refY);\n };\n /**\n * 内部设置属性值的接口\n * @param {string} name 属性名\n * @param {any} value 属性值\n */\n Element.prototype.setAttr = function (name, value) {\n var originValue = this.attrs[name];\n if (originValue !== value) {\n this.attrs[name] = value;\n this.onAttrChange(name, value, originValue);\n }\n };\n /**\n * @protected\n * 属性值发生改变\n * @param {string} name 属性名\n * @param {any} value 属性值\n * @param {any} originValue 属性值\n */\n Element.prototype.onAttrChange = function (name, value, originValue) {\n if (name === 'matrix') {\n this.set('totalMatrix', null);\n }\n };\n /**\n * 属性更改后需要做的事情\n * @protected\n */\n Element.prototype.afterAttrsChange = function (targetAttrs) {\n if (this.cfg.isClipShape) {\n var applyTo = this.cfg.applyTo;\n if (applyTo) {\n applyTo.onCanvasChange('clip');\n }\n }\n else {\n this.onCanvasChange('attr');\n }\n };\n Element.prototype.show = function () {\n // 不是高频操作直接使用 set\n this.set('visible', true);\n this.onCanvasChange('show');\n return this;\n };\n Element.prototype.hide = function () {\n // 不是高频操作直接使用 set\n this.set('visible', false);\n this.onCanvasChange('hide');\n return this;\n };\n Element.prototype.setZIndex = function (zIndex) {\n this.set('zIndex', zIndex);\n var parent = this.getParent();\n if (parent) {\n // 改变 zIndex 不应该立即触发渲染 (调用 onCanvasChange('zIndex')),需要经过 sort 再触发\n parent.sort();\n }\n return this;\n };\n Element.prototype.toFront = function () {\n var parent = this.getParent();\n if (!parent) {\n return;\n }\n var children = parent.getChildren();\n var el = this.get('el');\n var index = children.indexOf(this);\n children.splice(index, 1);\n children.push(this);\n this.onCanvasChange('zIndex');\n };\n Element.prototype.toBack = function () {\n var parent = this.getParent();\n if (!parent) {\n return;\n }\n var children = parent.getChildren();\n var el = this.get('el');\n var index = children.indexOf(this);\n children.splice(index, 1);\n children.unshift(this);\n this.onCanvasChange('zIndex');\n };\n Element.prototype.remove = function (destroy) {\n if (destroy === void 0) { destroy = true; }\n var parent = this.getParent();\n if (parent) {\n Object(_util_util__WEBPACK_IMPORTED_MODULE_3__[\"removeFromArray\"])(parent.getChildren(), this);\n if (!parent.get('clearing')) {\n // 如果父元素正在清理,当前元素不触发 remove\n this.onCanvasChange('remove');\n }\n }\n else {\n this.onCanvasChange('remove');\n }\n if (destroy) {\n this.destroy();\n }\n };\n Element.prototype.resetMatrix = function () {\n this.attr(MATRIX, this.getDefaultMatrix());\n this.onCanvasChange('matrix');\n };\n Element.prototype.getMatrix = function () {\n return this.attr(MATRIX);\n };\n Element.prototype.setMatrix = function (m) {\n this.attr(MATRIX, m);\n this.onCanvasChange('matrix');\n };\n // 获取总的 matrix\n Element.prototype.getTotalMatrix = function () {\n var totalMatrix = this.cfg.totalMatrix;\n if (!totalMatrix) {\n var currentMatrix = this.attr('matrix');\n var parentMatrix = this.cfg.parentMatrix;\n if (parentMatrix && currentMatrix) {\n totalMatrix = Object(_util_matrix__WEBPACK_IMPORTED_MODULE_4__[\"multiplyMatrix\"])(parentMatrix, currentMatrix);\n }\n else {\n totalMatrix = currentMatrix || parentMatrix;\n }\n this.set('totalMatrix', totalMatrix);\n }\n return totalMatrix;\n };\n // 上层分组设置 matrix\n Element.prototype.applyMatrix = function (matrix) {\n var currentMatrix = this.attr('matrix');\n var totalMatrix = null;\n if (matrix && currentMatrix) {\n totalMatrix = Object(_util_matrix__WEBPACK_IMPORTED_MODULE_4__[\"multiplyMatrix\"])(matrix, currentMatrix);\n }\n else {\n totalMatrix = currentMatrix || matrix;\n }\n this.set('totalMatrix', totalMatrix);\n this.set('parentMatrix', matrix);\n };\n /**\n * @protected\n * 获取默认的矩阵\n * @returns {number[]|null} 默认的矩阵\n */\n Element.prototype.getDefaultMatrix = function () {\n return null;\n };\n // 将向量应用设置的矩阵\n Element.prototype.applyToMatrix = function (v) {\n var matrix = this.attr('matrix');\n if (matrix) {\n return Object(_util_matrix__WEBPACK_IMPORTED_MODULE_4__[\"multiplyVec2\"])(matrix, v);\n }\n return v;\n };\n // 根据设置的矩阵,将向量转换相对于图形/分组的位置\n Element.prototype.invertFromMatrix = function (v) {\n var matrix = this.attr('matrix');\n if (matrix) {\n var invertMatrix = Object(_util_matrix__WEBPACK_IMPORTED_MODULE_4__[\"invert\"])(matrix);\n if (invertMatrix) {\n return Object(_util_matrix__WEBPACK_IMPORTED_MODULE_4__[\"multiplyVec2\"])(invertMatrix, v);\n }\n }\n return v;\n };\n // 设置 clip\n Element.prototype.setClip = function (clipCfg) {\n var canvas = this.getCanvas();\n // 应该只设置当前元素的 clip,不应该去修改 clip 本身,方便 clip 被复用\n // TODO: setClip 的传参既 shape 配置,也支持 shape 对象\n // const preShape = this.get('clipShape');\n // if (preShape) {\n // // 将之前的 clipShape 销毁\n // preShape.destroy();\n // }\n var clipShape = null;\n // 如果配置项为 null,则不移除 clipShape\n if (clipCfg) {\n var ShapeBase = this.getShapeBase();\n var shapeType = Object(_antv_util__WEBPACK_IMPORTED_MODULE_1__[\"upperFirst\"])(clipCfg.type);\n var Cons = ShapeBase[shapeType];\n if (Cons) {\n clipShape = new Cons({\n type: clipCfg.type,\n isClipShape: true,\n applyTo: this,\n attrs: clipCfg.attrs,\n canvas: canvas,\n });\n }\n }\n this.set('clipShape', clipShape);\n this.onCanvasChange('clip');\n return clipShape;\n };\n Element.prototype.getClip = function () {\n // 高频率调用的地方直接使用 this.cfg.xxx\n var clipShape = this.cfg.clipShape;\n // 未设置时返回 Null,保证一致性\n if (!clipShape) {\n return null;\n }\n return clipShape;\n };\n Element.prototype.clone = function () {\n var _this = this;\n var originAttrs = this.attrs;\n var attrs = {};\n Object(_antv_util__WEBPACK_IMPORTED_MODULE_1__[\"each\"])(originAttrs, function (i, k) {\n if (Object(_antv_util__WEBPACK_IMPORTED_MODULE_1__[\"isArray\"])(originAttrs[k])) {\n attrs[k] = _cloneArrayAttr(originAttrs[k]);\n }\n else {\n attrs[k] = originAttrs[k];\n }\n });\n var cons = this.constructor;\n // @ts-ignore\n var clone = new cons({ attrs: attrs });\n Object(_antv_util__WEBPACK_IMPORTED_MODULE_1__[\"each\"])(CLONE_CFGS, function (cfgName) {\n clone.set(cfgName, _this.get(cfgName));\n });\n return clone;\n };\n Element.prototype.destroy = function () {\n var destroyed = this.destroyed;\n if (destroyed) {\n return;\n }\n this.attrs = {};\n _super.prototype.destroy.call(this);\n // this.onCanvasChange('destroy');\n };\n /**\n * 是否处于动画暂停状态\n * @return {boolean} 是否处于动画暂停状态\n */\n Element.prototype.isAnimatePaused = function () {\n return this.get('_pause').isPaused;\n };\n /**\n * 执行动画,支持多种函数签名\n * 1. animate(toAttrs: ElementAttrs, duration: number, easing?: string, callback?: () => void, delay?: number)\n * 2. animate(onFrame: OnFrame, duration: number, easing?: string, callback?: () => void, delay?: number)\n * 3. animate(toAttrs: ElementAttrs, cfg: AnimateCfg)\n * 4. animate(onFrame: OnFrame, cfg: AnimateCfg)\n * 各个参数的含义为:\n * toAttrs 动画最终状态\n * onFrame 自定义帧动画函数\n * duration 动画执行时间\n * easing 动画缓动效果\n * callback 动画执行后的回调\n * delay 动画延迟时间\n */\n Element.prototype.animate = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n if (!this.get('timeline') && !this.get('canvas')) {\n return;\n }\n this.set('animating', true);\n var timeline = this.get('timeline');\n if (!timeline) {\n timeline = this.get('canvas').get('timeline');\n this.set('timeline', timeline);\n }\n var animations = this.get('animations') || [];\n // 初始化 tick\n if (!timeline.timer) {\n timeline.initTimer();\n }\n var toAttrs = args[0], duration = args[1], _a = args[2], easing = _a === void 0 ? 'easeLinear' : _a, _b = args[3], callback = _b === void 0 ? _antv_util__WEBPACK_IMPORTED_MODULE_1__[\"noop\"] : _b, _c = args[4], delay = _c === void 0 ? 0 : _c;\n var onFrame;\n var repeat;\n var pauseCallback;\n var resumeCallback;\n var animateCfg;\n // 第二个参数,既可以是动画最终状态 toAttrs,也可以是自定义帧动画函数 onFrame\n if (Object(_antv_util__WEBPACK_IMPORTED_MODULE_1__[\"isFunction\"])(toAttrs)) {\n onFrame = toAttrs;\n toAttrs = {};\n }\n else if (Object(_antv_util__WEBPACK_IMPORTED_MODULE_1__[\"isObject\"])(toAttrs) && toAttrs.onFrame) {\n // 兼容 3.0 中的写法,onFrame 和 repeat 可在 toAttrs 中设置\n onFrame = toAttrs.onFrame;\n repeat = toAttrs.repeat;\n }\n // 第二个参数,既可以是执行时间 duration,也可以是动画参数 animateCfg\n if (Object(_antv_util__WEBPACK_IMPORTED_MODULE_1__[\"isObject\"])(duration)) {\n animateCfg = duration;\n duration = animateCfg.duration;\n easing = animateCfg.easing || 'easeLinear';\n delay = animateCfg.delay || 0;\n // animateCfg 中的设置优先级更高\n repeat = animateCfg.repeat || repeat || false;\n callback = animateCfg.callback || _antv_util__WEBPACK_IMPORTED_MODULE_1__[\"noop\"];\n pauseCallback = animateCfg.pauseCallback || _antv_util__WEBPACK_IMPORTED_MODULE_1__[\"noop\"];\n resumeCallback = animateCfg.resumeCallback || _antv_util__WEBPACK_IMPORTED_MODULE_1__[\"noop\"];\n }\n else {\n // 第四个参数,既可以是回调函数 callback,也可以是延迟时间 delay\n if (Object(_antv_util__WEBPACK_IMPORTED_MODULE_1__[\"isNumber\"])(callback)) {\n delay = callback;\n callback = null;\n }\n // 第三个参数,既可以是缓动参数 easing,也可以是回调函数 callback\n if (Object(_antv_util__WEBPACK_IMPORTED_MODULE_1__[\"isFunction\"])(easing)) {\n callback = easing;\n easing = 'easeLinear';\n }\n else {\n easing = easing || 'easeLinear';\n }\n }\n var formatToAttrs = getFormatToAttrs(toAttrs, this);\n var animation = {\n fromAttrs: getFormatFromAttrs(formatToAttrs, this),\n toAttrs: formatToAttrs,\n duration: duration,\n easing: easing,\n repeat: repeat,\n callback: callback,\n pauseCallback: pauseCallback,\n resumeCallback: resumeCallback,\n delay: delay,\n startTime: timeline.getTime(),\n id: Object(_antv_util__WEBPACK_IMPORTED_MODULE_1__[\"uniqueId\"])(),\n onFrame: onFrame,\n pathFormatted: false,\n };\n // 如果动画元素队列中已经有这个图形了\n if (animations.length > 0) {\n // 先检查是否需要合并属性。若有相同的动画,将该属性从前一个动画中删除,直接用后一个动画中\n animations = checkExistedAttrs(animations, animation);\n }\n else {\n // 否则将图形添加到动画元素队列\n timeline.addAnimator(this);\n }\n animations.push(animation);\n this.set('animations', animations);\n this.set('_pause', { isPaused: false });\n };\n /**\n * 停止动画\n * @param {boolean} toEnd 是否到动画的最终状态\n */\n Element.prototype.stopAnimate = function (toEnd) {\n var _this = this;\n if (toEnd === void 0) { toEnd = true; }\n var animations = this.get('animations');\n Object(_antv_util__WEBPACK_IMPORTED_MODULE_1__[\"each\"])(animations, function (animation) {\n // 将动画执行到最后一帧\n if (toEnd) {\n if (animation.onFrame) {\n _this.attr(animation.onFrame(1));\n }\n else {\n _this.attr(animation.toAttrs);\n }\n }\n if (animation.callback) {\n // 动画停止时的回调\n animation.callback();\n }\n });\n this.set('animating', false);\n this.set('animations', []);\n };\n /**\n * 暂停动画\n */\n Element.prototype.pauseAnimate = function () {\n var timeline = this.get('timeline');\n var animations = this.get('animations');\n var pauseTime = timeline.getTime();\n Object(_antv_util__WEBPACK_IMPORTED_MODULE_1__[\"each\"])(animations, function (animation) {\n animation._paused = true;\n animation._pauseTime = pauseTime;\n if (animation.pauseCallback) {\n // 动画暂停时的回调\n animation.pauseCallback();\n }\n });\n // 记录下是在什么时候暂停的\n this.set('_pause', {\n isPaused: true,\n pauseTime: pauseTime,\n });\n return this;\n };\n /**\n * 恢复动画\n */\n Element.prototype.resumeAnimate = function () {\n var timeline = this.get('timeline');\n var current = timeline.getTime();\n var animations = this.get('animations');\n var pauseTime = this.get('_pause').pauseTime;\n // 之后更新属性需要计算动画已经执行的时长,如果暂停了,就把初始时间调后\n Object(_antv_util__WEBPACK_IMPORTED_MODULE_1__[\"each\"])(animations, function (animation) {\n animation.startTime = animation.startTime + (current - pauseTime);\n animation._paused = false;\n animation._pauseTime = null;\n if (animation.resumeCallback) {\n animation.resumeCallback();\n }\n });\n this.set('_pause', {\n isPaused: false,\n });\n this.set('animations', animations);\n return this;\n };\n /**\n * 触发委托事件\n * @param {string} type 事件类型\n * @param {GraphEvent} eventObj 事件对象\n */\n Element.prototype.emitDelegation = function (type, eventObj) {\n var _this = this;\n var paths = eventObj.propagationPath;\n var events = this.getEvents();\n var relativeShape;\n if (type === 'mouseenter') {\n relativeShape = eventObj.fromShape;\n }\n else if (type === 'mouseleave') {\n relativeShape = eventObj.toShape;\n }\n var _loop_1 = function (i) {\n var element = paths[i];\n // 暂定跟 name 绑定\n var name_1 = element.get('name');\n if (name_1) {\n // 第一个 mouseenter 和 mouseleave 的停止即可,因为后面的都是前面的 Parent\n if (\n // 只有 element 是 Group 或者 Canvas 的时候,才需要判断 isParent\n (element.isGroup() || (element.isCanvas && element.isCanvas())) &&\n relativeShape &&\n Object(_util_util__WEBPACK_IMPORTED_MODULE_3__[\"isParent\"])(element, relativeShape)) {\n return \"break\";\n }\n if (Object(_antv_util__WEBPACK_IMPORTED_MODULE_1__[\"isArray\"])(name_1)) {\n Object(_antv_util__WEBPACK_IMPORTED_MODULE_1__[\"each\"])(name_1, function (subName) {\n _this.emitDelegateEvent(element, subName, eventObj);\n });\n }\n else {\n this_1.emitDelegateEvent(element, name_1, eventObj);\n }\n }\n };\n var this_1 = this;\n // 至少有一个对象,且第一个对象为 shape\n for (var i = 0; i < paths.length; i++) {\n var state_1 = _loop_1(i);\n if (state_1 === \"break\")\n break;\n }\n };\n Element.prototype.emitDelegateEvent = function (element, name, eventObj) {\n var events = this.getEvents();\n // 事件委托的形式 name:type\n var eventName = name + DELEGATION_SPLIT + eventObj.type;\n if (events[eventName] || events[WILDCARD]) {\n // 对于通配符 *,事件名称 = 委托事件名称\n eventObj.name = eventName;\n eventObj.currentTarget = element;\n eventObj.delegateTarget = this;\n // 将委托事件的监听对象 delegateObject 挂载到事件对象上\n eventObj.delegateObject = element.get('delegateObject');\n this.emit(eventName, eventObj);\n }\n };\n /**\n * 移动元素\n * @param {number} translateX 水平移动距离\n * @param {number} translateY 垂直移动距离\n * @return {IElement} 元素\n */\n Element.prototype.translate = function (translateX, translateY) {\n if (translateX === void 0) { translateX = 0; }\n if (translateY === void 0) { translateY = 0; }\n var matrix = this.getMatrix();\n var newMatrix = transform(matrix, [['t', translateX, translateY]]);\n this.setMatrix(newMatrix);\n return this;\n };\n /**\n * 移动元素到目标位置\n * @param {number} targetX 目标位置的水平坐标\n * @param {number} targetX 目标位置的垂直坐标\n * @return {IElement} 元素\n */\n Element.prototype.move = function (targetX, targetY) {\n var x = this.attr('x') || 0;\n var y = this.attr('y') || 0;\n this.translate(targetX - x, targetY - y);\n return this;\n };\n /**\n * 移动元素到目标位置,等价于 move 方法。由于 moveTo 的语义性更强,因此在文档中推荐使用 moveTo 方法\n * @param {number} targetX 目标位置的 x 轴坐标\n * @param {number} targetY 目标位置的 y 轴坐标\n * @return {IElement} 元素\n */\n Element.prototype.moveTo = function (targetX, targetY) {\n return this.move(targetX, targetY);\n };\n /**\n * 缩放元素\n * @param {number} ratioX 水平缩放比例\n * @param {number} ratioY 垂直缩放比例\n * @return {IElement} 元素\n */\n Element.prototype.scale = function (ratioX, ratioY) {\n var matrix = this.getMatrix();\n var newMatrix = transform(matrix, [['s', ratioX, ratioY || ratioX]]);\n this.setMatrix(newMatrix);\n return this;\n };\n /**\n * 以画布左上角 (0, 0) 为中心旋转元素\n * @param {number} radian 旋转角度(弧度值)\n * @return {IElement} 元素\n */\n Element.prototype.rotate = function (radian) {\n var matrix = this.getMatrix();\n var newMatrix = transform(matrix, [['r', radian]]);\n this.setMatrix(newMatrix);\n return this;\n };\n /**\n * 以起始点为中心旋转元素\n * @param {number} radian 旋转角度(弧度值)\n * @return {IElement} 元素\n */\n Element.prototype.rotateAtStart = function (rotate) {\n var _a = this.attr(), x = _a.x, y = _a.y;\n var matrix = this.getMatrix();\n var newMatrix = transform(matrix, [\n ['t', -x, -y],\n ['r', rotate],\n ['t', x, y],\n ]);\n this.setMatrix(newMatrix);\n return this;\n };\n /**\n * 以任意点 (x, y) 为中心旋转元素\n * @param {number} radian 旋转角度(弧度值)\n * @return {IElement} 元素\n */\n Element.prototype.rotateAtPoint = function (x, y, rotate) {\n var matrix = this.getMatrix();\n var newMatrix = transform(matrix, [\n ['t', -x, -y],\n ['r', rotate],\n ['t', x, y],\n ]);\n this.setMatrix(newMatrix);\n return this;\n };\n return Element;\n}(_base__WEBPACK_IMPORTED_MODULE_5__[\"default\"]));\n/* harmony default export */ __webpack_exports__[\"default\"] = (Element);\n//# sourceMappingURL=element.js.map\n\n//# sourceURL=webpack:///./node_modules/@antv/g-base/esm/abstract/element.js?");
/***/ }),
/***/ "./node_modules/@antv/g-base/esm/abstract/group.js":
/*!*********************************************************!*\
!*** ./node_modules/@antv/g-base/esm/abstract/group.js ***!
\*********************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tslib */ \"./node_modules/tslib/tslib.es6.js\");\n/* harmony import */ var _container__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./container */ \"./node_modules/@antv/g-base/esm/abstract/container.js\");\n\n\nvar AbstractGroup = /** @class */ (function (_super) {\n Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__extends\"])(AbstractGroup, _super);\n function AbstractGroup() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n AbstractGroup.prototype.isGroup = function () {\n return true;\n };\n AbstractGroup.prototype.isEntityGroup = function () {\n return false;\n };\n AbstractGroup.prototype.clone = function () {\n var clone = _super.prototype.clone.call(this);\n // 获取构造函数\n var children = this.getChildren();\n for (var i = 0; i < children.length; i++) {\n var child = children[i];\n clone.add(child.clone());\n }\n return clone;\n };\n return AbstractGroup;\n}(_container__WEBPACK_IMPORTED_MODULE_1__[\"default\"]));\n/* harmony default export */ __webpack_exports__[\"default\"] = (AbstractGroup);\n//# sourceMappingURL=group.js.map\n\n//# sourceURL=webpack:///./node_modules/@antv/g-base/esm/abstract/group.js?");
/***/ }),
/***/ "./node_modules/@antv/g-base/esm/abstract/shape.js":
/*!*********************************************************!*\
!*** ./node_modules/@antv/g-base/esm/abstract/shape.js ***!
\*********************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tslib */ \"./node_modules/tslib/tslib.es6.js\");\n/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./element */ \"./node_modules/@antv/g-base/esm/abstract/element.js\");\n/* harmony import */ var _util_matrix__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../util/matrix */ \"./node_modules/@antv/g-base/esm/util/matrix.js\");\n\n\n\nvar AbstractShape = /** @class */ (function (_super) {\n Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__extends\"])(AbstractShape, _super);\n function AbstractShape(cfg) {\n return _super.call(this, cfg) || this;\n }\n // 是否在包围盒内\n AbstractShape.prototype._isInBBox = function (refX, refY) {\n var bbox = this.getBBox();\n return bbox.minX <= refX && bbox.maxX >= refX && bbox.minY <= refY && bbox.maxY >= refY;\n };\n /**\n * 属性更改后需要做的事情\n * @protected\n * @param {ShapeAttrs} targetAttrs 渲染的图像属性\n */\n AbstractShape.prototype.afterAttrsChange = function (targetAttrs) {\n _super.prototype.afterAttrsChange.call(this, targetAttrs);\n this.clearCacheBBox();\n };\n // 计算包围盒时,需要缓存,这是一个高频的操作\n AbstractShape.prototype.getBBox = function () {\n var bbox = this.cfg.bbox;\n if (!bbox) {\n bbox = this.calculateBBox();\n this.set('bbox', bbox);\n }\n return bbox;\n };\n // 计算相对于画布的包围盒\n AbstractShape.prototype.getCanvasBBox = function () {\n var canvasBBox = this.cfg.canvasBBox;\n if (!canvasBBox) {\n canvasBBox = this.calculateCanvasBBox();\n this.set('canvasBBox', canvasBBox);\n }\n return canvasBBox;\n };\n AbstractShape.prototype.applyMatrix = function (matrix) {\n _super.prototype.applyMatrix.call(this, matrix);\n // 清理掉缓存的包围盒\n this.set('canvasBBox', null);\n };\n /**\n * 计算相对于画布的包围盒,默认等同于 bbox\n * @return {BBox} 包围盒\n */\n AbstractShape.prototype.calculateCanvasBBox = function () {\n var bbox = this.getBBox();\n var totalMatrix = this.getTotalMatrix();\n var minX = bbox.minX, minY = bbox.minY, maxX = bbox.maxX, maxY = bbox.maxY;\n if (totalMatrix) {\n var topLeft = Object(_util_matrix__WEBPACK_IMPORTED_MODULE_2__[\"multiplyVec2\"])(totalMatrix, [bbox.minX, bbox.minY]);\n var topRight = Object(_util_matrix__WEBPACK_IMPORTED_MODULE_2__[\"multiplyVec2\"])(totalMatrix, [bbox.maxX, bbox.minY]);\n var bottomLeft = Object(_util_matrix__WEBPACK_IMPORTED_MODULE_2__[\"multiplyVec2\"])(totalMatrix, [bbox.minX, bbox.maxY]);\n var bottomRight = Object(_util_matrix__WEBPACK_IMPORTED_MODULE_2__[\"multiplyVec2\"])(totalMatrix, [bbox.maxX, bbox.maxY]);\n minX = Math.min(topLeft[0], topRight[0], bottomLeft[0], bottomRight[0]);\n maxX = Math.max(topLeft[0], topRight[0], bottomLeft[0], bottomRight[0]);\n minY = Math.min(topLeft[1], topRight[1], bottomLeft[1], bottomRight[1]);\n maxY = Math.max(topLeft[1], topRight[1], bottomLeft[1], bottomRight[1]);\n }\n var attrs = this.attrs;\n // 如果存在 shadow 则计算 shadow\n if (attrs.shadowColor) {\n var _a = attrs.shadowBlur, shadowBlur = _a === void 0 ? 0 : _a, _b = attrs.shadowOffsetX, shadowOffsetX = _b === void 0 ? 0 : _b, _c = attrs.shadowOffsetY, shadowOffsetY = _c === void 0 ? 0 : _c;\n var shadowLeft = minX - shadowBlur + shadowOffsetX;\n var shadowRight = maxX + shadowBlur + shadowOffsetX;\n var shadowTop = minY - shadowBlur + shadowOffsetY;\n var shadowBottom = maxY + shadowBlur + shadowOffsetY;\n minX = Math.min(minX, shadowLeft);\n maxX = Math.max(maxX, shadowRight);\n minY = Math.min(minY, shadowTop);\n maxY = Math.max(maxY, shadowBottom);\n }\n return {\n x: minX,\n y: minY,\n minX: minX,\n minY: minY,\n maxX: maxX,\n maxY: maxY,\n width: maxX - minX,\n height: maxY - minY,\n };\n };\n /**\n * @protected\n * 清理缓存的 bbox\n */\n AbstractShape.prototype.clearCacheBBox = function () {\n this.set('bbox', null);\n this.set('canvasBBox', null);\n };\n // 实现接口\n AbstractShape.prototype.isClipShape = function () {\n return this.get('isClipShape');\n };\n /**\n * @protected\n * 不同的图形自己实现是否在图形内部的逻辑,要判断边和填充区域\n * @param {number} refX 相对于图形的坐标 x\n * @param {number} refY 相对于图形的坐标 Y\n * @return {boolean} 点是否在图形内部\n */\n AbstractShape.prototype.isInShape = function (refX, refY) {\n return false;\n };\n /**\n * 是否仅仅使用 BBox 检测就可以判定拾取到图形\n * 默认是 false,但是有些图形例如 image、marker 等都可直接使用 BBox 的检测而不需要使用图形拾取\n * @return {Boolean} 仅仅使用 BBox 进行拾取\n */\n AbstractShape.prototype.isOnlyHitBox = function () {\n return false;\n };\n // 不同的 Shape 各自实现\n AbstractShape.prototype.isHit = function (x, y) {\n var startArrowShape = this.get('startArrowShape');\n var endArrowShape = this.get('endArrowShape');\n var vec = [x, y, 1];\n vec = this.invertFromMatrix(vec);\n var refX = vec[0], refY = vec[1];\n var inBBox = this._isInBBox(refX, refY);\n // 跳过图形的拾取,在某些图形中可以省略一倍的检测成本\n if (this.isOnlyHitBox()) {\n return inBBox;\n }\n // 被裁减掉的和不在包围盒内的不进行计算\n if (inBBox && !this.isClipped(refX, refY)) {\n // 对图形进行拾取判断\n if (this.isInShape(refX, refY)) {\n return true;\n }\n // 对起始箭头进行拾取判断\n if (startArrowShape && startArrowShape.isHit(refX, refY)) {\n return true;\n }\n // 对结束箭头进行拾取判断\n if (endArrowShape && endArrowShape.isHit(refX, refY)) {\n return true;\n }\n }\n return false;\n };\n return AbstractShape;\n}(_element__WEBPACK_IMPORTED_MODULE_1__[\"default\"]));\n/* harmony default export */ __webpack_exports__[\"default\"] = (AbstractShape);\n//# sourceMappingURL=shape.js.map\n\n//# sourceURL=webpack:///./node_modules/@antv/g-base/esm/abstract/shape.js?");
/***/ }),
/***/ "./node_modules/@antv/g-base/esm/animate/register.js":
/*!***********************************************************!*\
!*** ./node_modules/@antv/g-base/esm/animate/register.js ***!
\***********************************************************/
/*! exports provided: getEasing, registerEasing */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"getEasing\", function() { return getEasing; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"registerEasing\", function() { return registerEasing; });\n/* harmony import */ var d3_ease__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! d3-ease */ \"./node_modules/d3-ease/src/index.js\");\n\nvar EASING_MAP = {};\n/**\n * 根据名称获取对应的动画缓动函数\n * @param type 动画缓动函数名称\n */\nfunction getEasing(type) {\n // 默认从 d3-ease 中获取\n return EASING_MAP[type.toLowerCase()] || d3_ease__WEBPACK_IMPORTED_MODULE_0__[type];\n}\n/**\n * 注册动画缓动函数\n * @param type 动画缓动函数名称\n * @param easeFn 动画缓动函数\n */\nfunction registerEasing(type, easeFn) {\n EASING_MAP[type.toLowerCase()] = easeFn;\n}\n//# sourceMappingURL=register.js.map\n\n//# sourceURL=webpack:///./node_modules/@antv/g-base/esm/animate/register.js?");
/***/ }),
/***/ "./node_modules/@antv/g-base/esm/animate/timeline.js":
/*!***********************************************************!*\
!*** ./node_modules/@antv/g-base/esm/animate/timeline.js ***!
\***********************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _antv_util__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @antv/util */ \"./node_modules/@antv/util/esm/index.js\");\n/* harmony import */ var d3_timer__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! d3-timer */ \"./node_modules/d3-timer/src/index.js\");\n/* harmony import */ var d3_interpolate__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! d3-interpolate */ \"./node_modules/@antv/g-base/node_modules/d3-interpolate/src/index.js\");\n/* harmony import */ var _register__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./register */ \"./node_modules/@antv/g-base/esm/animate/register.js\");\n/* harmony import */ var _util_path__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../util/path */ \"./node_modules/@antv/g-base/esm/util/path.js\");\n/* harmony import */ var _util_color__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../util/color */ \"./node_modules/@antv/g-base/esm/util/color.js\");\n\n\n // 目前整体动画只需要数值和数组的差值计算\n\n\n\nvar IDENTITY_MATRIX = [1, 0, 0, 0, 1, 0, 0, 0, 1];\n/**\n * 使用 ratio 进行插值计算来更新属性\n * @param {IElement} shape 元素\n * @param {Animation} animation 动画\n * @param {number} ratio 比例\n * @return {boolean} 动画是否执行完成\n */\nfunction _update(shape, animation, ratio) {\n var cProps = {}; // 此刻属性\n var fromAttrs = animation.fromAttrs, toAttrs = animation.toAttrs;\n if (shape.destroyed) {\n return;\n }\n var interf; // 差值函数\n for (var k in toAttrs) {\n if (!Object(_antv_util__WEBPACK_IMPORTED_MODULE_0__[\"isEqual\"])(fromAttrs[k], toAttrs[k])) {\n if (k === 'path') {\n var toPath = toAttrs[k];\n var fromPath = fromAttrs[k];\n if (toPath.length > fromPath.length) {\n toPath = _util_path__WEBPACK_IMPORTED_MODULE_4__[\"parsePathString\"](toAttrs[k]); // 终点状态\n fromPath = _util_path__WEBPACK_IMPORTED_MODULE_4__[\"parsePathString\"](fromAttrs[k]); // 起始状态\n fromPath = _util_path__WEBPACK_IMPORTED_MODULE_4__[\"fillPathByDiff\"](fromPath, toPath);\n fromPath = _util_path__WEBPACK_IMPORTED_MODULE_4__[\"formatPath\"](fromPath, toPath);\n animation.fromAttrs.path = fromPath;\n animation.toAttrs.path = toPath;\n }\n else if (!animation.pathFormatted) {\n toPath = _util_path__WEBPACK_IMPORTED_MODULE_4__[\"parsePathString\"](toAttrs[k]);\n fromPath = _util_path__WEBPACK_IMPORTED_MODULE_4__[\"parsePathString\"](fromAttrs[k]);\n fromPath = _util_path__WEBPACK_IMPORTED_MODULE_4__[\"formatPath\"](fromPath, toPath);\n animation.fromAttrs.path = fromPath;\n animation.toAttrs.path = toPath;\n animation.pathFormatted = true;\n }\n cProps[k] = [];\n for (var i = 0; i < toPath.length; i++) {\n var toPathPoint = toPath[i];\n var fromPathPoint = fromPath[i];\n var cPathPoint = [];\n for (var j = 0; j < toPathPoint.length; j++) {\n if (Object(_antv_util__WEBPACK_IMPORTED_MODULE_0__[\"isNumber\"])(toPathPoint[j]) && fromPathPoint && Object(_antv_util__WEBPACK_IMPORTED_MODULE_0__[\"isNumber\"])(fromPathPoint[j])) {\n interf = Object(d3_interpolate__WEBPACK_IMPORTED_MODULE_2__[\"interpolate\"])(fromPathPoint[j], toPathPoint[j]);\n cPathPoint.push(interf(ratio));\n }\n else {\n cPathPoint.push(toPathPoint[j]);\n }\n }\n cProps[k].push(cPathPoint);\n }\n }\n else if (k === 'matrix') {\n /*\n 对矩阵进行插值时,需要保证矩阵不为空,为空则使用单位矩阵\n TODO: 二维和三维场景下单位矩阵不同,之后 WebGL 版需要做进一步处理\n */\n var matrixFn = Object(d3_interpolate__WEBPACK_IMPORTED_MODULE_2__[\"interpolateArray\"])(fromAttrs[k] || IDENTITY_MATRIX, toAttrs[k] || IDENTITY_MATRIX);\n var currentMatrix = matrixFn(ratio);\n cProps[k] = currentMatrix;\n }\n else if (Object(_util_color__WEBPACK_IMPORTED_MODULE_5__[\"isColorProp\"])(k) && Object(_util_color__WEBPACK_IMPORTED_MODULE_5__[\"isGradientColor\"])(toAttrs[k])) {\n cProps[k] = toAttrs[k];\n }\n else if (!Object(_antv_util__WEBPACK_IMPORTED_MODULE_0__[\"isFunction\"])(toAttrs[k])) {\n // 非函数类型的值才能做插值\n interf = Object(d3_interpolate__WEBPACK_IMPORTED_MODULE_2__[\"interpolate\"])(fromAttrs[k], toAttrs[k]);\n cProps[k] = interf(ratio);\n }\n }\n }\n shape.attr(cProps);\n}\n/**\n * 根据自定义帧动画函数 onFrame 来更新属性\n * @param {IElement} shape 元素\n * @param {Animation} animation 动画\n * @param {number} elapsed 动画执行时间(毫秒)\n * @return {boolean} 动画是否执行完成\n */\nfunction update(shape, animation, elapsed) {\n var startTime = animation.startTime, delay = animation.delay;\n // 如果还没有开始执行或暂停,先不更新\n if (elapsed < startTime + delay || animation._paused) {\n return false;\n }\n var ratio;\n var duration = animation.duration;\n var easing = animation.easing;\n var easeFn = Object(_register__WEBPACK_IMPORTED_MODULE_3__[\"getEasing\"])(easing);\n // 已执行时间\n elapsed = elapsed - startTime - animation.delay;\n if (animation.repeat) {\n // 如果动画重复执行,则 elapsed > duration,计算 ratio 时需取模\n ratio = (elapsed % duration) / duration;\n ratio = easeFn(ratio);\n }\n else {\n ratio = elapsed / duration;\n if (ratio < 1) {\n // 动画未执行完\n ratio = easeFn(ratio);\n }\n else {\n // 动画已执行完\n if (animation.onFrame) {\n shape.attr(animation.onFrame(1));\n }\n else {\n shape.attr(animation.toAttrs);\n }\n return true;\n }\n }\n if (animation.onFrame) {\n var attrs = animation.onFrame(ratio);\n shape.attr(attrs);\n }\n else {\n _update(shape, animation, ratio);\n }\n return false;\n}\nvar Timeline = /** @class */ (function () {\n /**\n * 时间轴构造函数,依赖于画布\n * @param {}\n */\n function Timeline(canvas) {\n /**\n * 执行动画的元素列表\n * @type {IElement[]}\n */\n this.animators = [];\n /**\n * 当前时间\n * @type {number}\n */\n this.current = 0;\n /**\n * 定时器\n * @type {d3Timer.Timer}\n */\n this.timer = null;\n this.canvas = canvas;\n }\n /**\n * 初始化定时器\n */\n Timeline.prototype.initTimer = function () {\n var _this = this;\n var isFinished = false;\n var shape;\n var animations;\n var animation;\n this.timer = d3_timer__WEBPACK_IMPORTED_MODULE_1__[\"timer\"](function (elapsed) {\n _this.current = elapsed;\n if (_this.animators.length > 0) {\n for (var i = _this.animators.length - 1; i >= 0; i--) {\n shape = _this.animators[i];\n if (shape.destroyed) {\n // 如果已经被销毁,直接移出队列\n _this.removeAnimator(i);\n continue;\n }\n if (!shape.isAnimatePaused()) {\n animations = shape.get('animations');\n for (var j = animations.length - 1; j >= 0; j--) {\n animation = animations[j];\n isFinished = update(shape, animation, elapsed);\n if (isFinished) {\n animations.splice(j, 1);\n isFinished = false;\n if (animation.callback) {\n animation.callback();\n }\n }\n }\n }\n if (animations.length === 0) {\n _this.removeAnimator(i);\n }\n }\n var autoDraw = _this.canvas.get('autoDraw');\n // 非自动渲染模式下,手动调用 canvas.draw() 重新渲染\n if (!autoDraw) {\n _this.canvas.draw();\n }\n }\n });\n };\n /**\n * 增加动画元素\n */\n Timeline.prototype.addAnimator = function (shape) {\n this.animators.push(shape);\n };\n /**\n * 移除动画元素\n */\n Timeline.prototype.removeAnimator = function (index) {\n this.animators.splice(index, 1);\n };\n /**\n * 是否有动画在执行\n */\n Timeline.prototype.isAnimating = function () {\n return !!this.animators.length;\n };\n /**\n * 停止定时器\n */\n Timeline.prototype.stop = function () {\n if (this.timer) {\n this.timer.stop();\n }\n };\n /**\n * 停止时间轴上所有元素的动画,并置空动画元素列表\n * @param {boolean} toEnd 是否到动画的最终状态,用来透传给动画元素的 stopAnimate 方法\n */\n Timeline.prototype.stopAllAnimations = function (toEnd) {\n if (toEnd === void 0) { toEnd = true; }\n this.animators.forEach(function (animator) {\n animator.stopAnimate(toEnd);\n });\n this.animators = [];\n this.canvas.draw();\n };\n /**\n * 获取当前时间\n */\n Timeline.prototype.getTime = function () {\n return this.current;\n };\n return Timeline;\n}());\n/* harmony default export */ __webpack_exports__[\"default\"] = (Timeline);\n//# sourceMappingURL=timeline.js.map\n\n//# sourceURL=webpack:///./node_modules/@antv/g-base/esm/animate/timeline.js?");
/***/ }),
/***/ "./node_modules/@antv/g-base/esm/bbox/circle.js":
/*!******************************************************!*\
!*** ./node_modules/@antv/g-base/esm/bbox/circle.js ***!
\******************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony default export */ __webpack_exports__[\"default\"] = (function (shape) {\n var _a = shape.attr(), x = _a.x, y = _a.y, r = _a.r;\n return {\n x: x - r,\n y: y - r,\n width: r * 2,\n height: r * 2,\n };\n});\n//# sourceMappingURL=circle.js.map\n\n//# sourceURL=webpack:///./node_modules/@antv/g-base/esm/bbox/circle.js?");
/***/ }),
/***/ "./node_modules/@antv/g-base/esm/bbox/ellipse.js":
/*!*******************************************************!*\
!*** ./node_modules/@antv/g-base/esm/bbox/ellipse.js ***!
\*******************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony default export */ __webpack_exports__[\"default\"] = (function (shape) {\n var attrs = shape.attr();\n var x = attrs.x, y = attrs.y, rx = attrs.rx, ry = attrs.ry;\n return {\n x: x - rx,\n y: y - ry,\n width: rx * 2,\n height: ry * 2,\n };\n});\n//# sourceMappingURL=ellipse.js.map\n\n//# sourceURL=webpack:///./node_modules/@antv/g-base/esm/bbox/ellipse.js?");
/***/ }),
/***/ "./node_modules/@antv/g-base/esm/bbox/index.js":
/*!*****************************************************!*\
!*** ./node_modules/@antv/g-base/esm/bbox/index.js ***!
\*****************************************************/
/*! exports provided: getBBoxMethod, registerBBox */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _register__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./register */ \"./node_modules/@antv/g-base/esm/bbox/register.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"getBBoxMethod\", function() { return _register__WEBPACK_IMPORTED_MODULE_0__[\"getMethod\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"registerBBox\", function() { return _register__WEBPACK_IMPORTED_MODULE_0__[\"register\"]; });\n\n/* harmony import */ var _rect__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./rect */ \"./node_modules/@antv/g-base/esm/bbox/rect.js\");\n/* harmony import */ var _circle__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./circle */ \"./node_modules/@antv/g-base/esm/bbox/circle.js\");\n/* harmony import */ var _polyline__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./polyline */ \"./node_modules/@antv/g-base/esm/bbox/polyline.js\");\n/* harmony import */ var _polygon__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./polygon */ \"./node_modules/@antv/g-base/esm/bbox/polygon.js\");\n/* harmony import */ var _text__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./text */ \"./node_modules/@antv/g-base/esm/bbox/text.js\");\n/* harmony import */ var _path__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./path */ \"./node_modules/@antv/g-base/esm/bbox/path.js\");\n/* harmony import */ var _line__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./line */ \"./node_modules/@antv/g-base/esm/bbox/line.js\");\n/* harmony import */ var _ellipse__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./ellipse */ \"./node_modules/@antv/g-base/esm/bbox/ellipse.js\");\n\n\n\n\n\n\n\n\n\nObject(_register__WEBPACK_IMPORTED_MODULE_0__[\"register\"])('rect', _rect__WEBPACK_IMPORTED_MODULE_1__[\"default\"]);\nObject(_register__WEBPACK_IMPORTED_MODULE_0__[\"register\"])('image', _rect__WEBPACK_IMPORTED_MODULE_1__[\"default\"]); // image 使用 rect 的包围盒计算\nObject(_register__WEBPACK_IMPORTED_MODULE_0__[\"register\"])('circle', _circle__WEBPACK_IMPORTED_MODULE_2__[\"default\"]);\nObject(_register__WEBPACK_IMPORTED_MODULE_0__[\"register\"])('marker', _circle__WEBPACK_IMPORTED_MODULE_2__[\"default\"]); // marker 使用 circle 的计算方案\nObject(_register__WEBPACK_IMPORTED_MODULE_0__[\"register\"])('polyline', _polyline__WEBPACK_IMPORTED_MODULE_3__[\"default\"]);\nObject(_register__WEBPACK_IMPORTED_MODULE_0__[\"register\"])('polygon', _polygon__WEBPACK_IMPORTED_MODULE_4__[\"default\"]);\nObject(_register__WEBPACK_IMPORTED_MODULE_0__[\"register\"])('text', _text__WEBPACK_IMPORTED_MODULE_5__[\"default\"]);\nObject(_register__WEBPACK_IMPORTED_MODULE_0__[\"register\"])('path', _path__WEBPACK_IMPORTED_MODULE_6__[\"default\"]);\nObject(_register__WEBPACK_IMPORTED_MODULE_0__[\"register\"])('line', _line__WEBPACK_IMPORTED_MODULE_7__[\"default\"]);\nObject(_register__WEBPACK_IMPORTED_MODULE_0__[\"register\"])('ellipse', _ellipse__WEBPACK_IMPORTED_MODULE_8__[\"default\"]);\n\n//# sourceMappingURL=index.js.map\n\n//# sourceURL=webpack:///./node_modules/@antv/g-base/esm/bbox/index.js?");
/***/ }),
/***/ "./node_modules/@antv/g-base/esm/bbox/line.js":
/*!****************************************************!*\
!*** ./node_modules/@antv/g-base/esm/bbox/line.js ***!
\****************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./util */ \"./node_modules/@antv/g-base/esm/bbox/util.js\");\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (function (shape) {\n var attrs = shape.attr();\n var x1 = attrs.x1, y1 = attrs.y1, x2 = attrs.x2, y2 = attrs.y2;\n var minX = Math.min(x1, x2);\n var maxX = Math.max(x1, x2);\n var minY = Math.min(y1, y2);\n var maxY = Math.max(y1, y2);\n var bbox = {\n minX: minX,\n maxX: maxX,\n minY: minY,\n maxY: maxY,\n };\n bbox = Object(_util__WEBPACK_IMPORTED_MODULE_0__[\"mergeArrowBBox\"])(shape, bbox);\n return {\n x: bbox.minX,\n y: bbox.minY,\n width: bbox.maxX - bbox.minX,\n height: bbox.maxY - bbox.minY,\n };\n});\n//# sourceMappingURL=line.js.map\n\n//# sourceURL=webpack:///./node_modules/@antv/g-base/esm/bbox/line.js?");
/***/ }),
/***/ "./node_modules/@antv/g-base/esm/bbox/path.js":
/*!****************************************************!*\
!*** ./node_modules/@antv/g-base/esm/bbox/path.js ***!
\****************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _antv_g_math__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @antv/g-math */ \"./node_modules/@antv/g-math/esm/index.js\");\n/* harmony import */ var _antv_path_util__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @antv/path-util */ \"./node_modules/@antv/path-util/esm/index.js\");\n/* harmony import */ var _antv_util__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @antv/util */ \"./node_modules/@antv/util/esm/index.js\");\n/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./util */ \"./node_modules/@antv/g-base/esm/bbox/util.js\");\n\n\n\n\nfunction getPathBox(segments, lineWidth) {\n var xArr = [];\n var yArr = [];\n var segmentsWithAngle = [];\n for (var i = 0; i < segments.length; i++) {\n var segment = segments[i];\n var currentPoint = segment.currentPoint, params = segment.params, prePoint = segment.prePoint;\n var box = void 0;\n switch (segment.command) {\n case 'Q':\n box = _antv_g_math__WEBPACK_IMPORTED_MODULE_0__[\"Quad\"].box(prePoint[0], prePoint[1], params[1], params[2], params[3], params[4]);\n break;\n case 'C':\n box = _antv_g_math__WEBPACK_IMPORTED_MODULE_0__[\"Cubic\"].box(prePoint[0], prePoint[1], params[1], params[2], params[3], params[4], params[5], params[6]);\n break;\n case 'A':\n var arcParams = segment.arcParams;\n box = _antv_g_math__WEBPACK_IMPORTED_MODULE_0__[\"Arc\"].box(arcParams.cx, arcParams.cy, arcParams.rx, arcParams.ry, arcParams.xRotation, arcParams.startAngle, arcParams.endAngle);\n break;\n default:\n xArr.push(currentPoint[0]);\n yArr.push(currentPoint[1]);\n break;\n }\n if (box) {\n segment.box = box;\n xArr.push(box.x, box.x + box.width);\n yArr.push(box.y, box.y + box.height);\n }\n if (lineWidth && (segment.command === 'L' || segment.command === 'M') && segment.prePoint && segment.nextPoint) {\n segmentsWithAngle.push(segment);\n }\n }\n // bbox calculation should ignore NaN for path attribute\n // ref: https://github.com/antvis/g/issues/210\n // ref: https://github.com/antvis/G2/issues/3109\n xArr = xArr.filter(function (item) { return !Number.isNaN(item) && item !== Infinity && item !== -Infinity; });\n yArr = yArr.filter(function (item) { return !Number.isNaN(item) && item !== Infinity && item !== -Infinity; });\n var minX = Object(_antv_util__WEBPACK_IMPORTED_MODULE_2__[\"min\"])(xArr);\n var minY = Object(_antv_util__WEBPACK_IMPORTED_MODULE_2__[\"min\"])(yArr);\n var maxX = Object(_antv_util__WEBPACK_IMPORTED_MODULE_2__[\"max\"])(xArr);\n var maxY = Object(_antv_util__WEBPACK_IMPORTED_MODULE_2__[\"max\"])(yArr);\n if (segmentsWithAngle.length === 0) {\n return {\n x: minX,\n y: minY,\n width: maxX - minX,\n height: maxY - minY,\n };\n }\n for (var i = 0; i < segmentsWithAngle.length; i++) {\n var segment = segmentsWithAngle[i];\n var currentPoint = segment.currentPoint;\n var extra = void 0;\n if (currentPoint[0] === minX) {\n extra = getExtraFromSegmentWithAngle(segment, lineWidth);\n minX = minX - extra.xExtra;\n }\n else if (currentPoint[0] === maxX) {\n extra = getExtraFromSegmentWithAngle(segment, lineWidth);\n maxX = maxX + extra.xExtra;\n }\n if (currentPoint[1] === minY) {\n extra = getExtraFromSegmentWithAngle(segment, lineWidth);\n minY = minY - extra.yExtra;\n }\n else if (currentPoint[1] === maxY) {\n extra = getExtraFromSegmentWithAngle(segment, lineWidth);\n maxY = maxY + extra.yExtra;\n }\n }\n return {\n x: minX,\n y: minY,\n width: maxX - minX,\n height: maxY - minY,\n };\n}\nfunction getExtraFromSegmentWithAngle(segment, lineWidth) {\n var prePoint = segment.prePoint, currentPoint = segment.currentPoint, nextPoint = segment.nextPoint;\n var currentAndPre = Math.pow(currentPoint[0] - prePoint[0], 2) + Math.pow(currentPoint[1] - prePoint[1], 2);\n var currentAndNext = Math.pow(currentPoint[0] - nextPoint[0], 2) + Math.pow(currentPoint[1] - nextPoint[1], 2);\n var preAndNext = Math.pow(prePoint[0] - nextPoint[0], 2) + Math.pow(prePoint[1] - nextPoint[1], 2);\n // 以 currentPoint 为顶点的夹角\n var currentAngle = Math.acos((currentAndPre + currentAndNext - preAndNext) / (2 * Math.sqrt(currentAndPre) * Math.sqrt(currentAndNext)));\n // 夹角为空、 0 或 PI 时,不需要计算夹角处的额外宽度\n // 注意: 由于计算精度问题,夹角为 0 的情况计算出来的角度可能是一个很小的值,还需要判断其与 0 是否近似相等\n if (!currentAngle || Math.sin(currentAngle) === 0 || Object(_antv_util__WEBPACK_IMPORTED_MODULE_2__[\"isNumberEqual\"])(currentAngle, 0)) {\n return {\n xExtra: 0,\n yExtra: 0,\n };\n }\n var xAngle = Math.abs(Math.atan2(nextPoint[1] - currentPoint[1], nextPoint[0] - currentPoint[0]));\n var yAngle = Math.abs(Math.atan2(nextPoint[0] - currentPoint[0], nextPoint[1] - currentPoint[1]));\n // 将夹角转为锐角\n xAngle = xAngle > Math.PI / 2 ? Math.PI - xAngle : xAngle;\n yAngle = yAngle > Math.PI / 2 ? Math.PI - yAngle : yAngle;\n // 这里不考虑在水平和垂直方向的投影,直接使用最大差值\n // 由于上层统一加减了二分之一线宽,这里需要进行弥补\n var extra = {\n // 水平方向投影\n xExtra: Math.cos(currentAngle / 2 - xAngle) * ((lineWidth / 2) * (1 / Math.sin(currentAngle / 2))) - lineWidth / 2 || 0,\n // 垂直方向投影\n yExtra: Math.cos(yAngle - currentAngle / 2) * ((lineWidth / 2) * (1 / Math.sin(currentAngle / 2))) - lineWidth / 2 || 0,\n };\n return extra;\n}\n/* harmony default export */ __webpack_exports__[\"default\"] = (function (shape) {\n var attrs = shape.attr();\n var path = attrs.path, stroke = attrs.stroke;\n var lineWidth = stroke ? attrs.lineWidth : 0; // 只有有 stroke 时,lineWidth 才生效\n var segments = shape.get('segments') || Object(_antv_path_util__WEBPACK_IMPORTED_MODULE_1__[\"path2Segments\"])(path);\n var _a = getPathBox(segments, lineWidth), x = _a.x, y = _a.y, width = _a.width, height = _a.height;\n var bbox = {\n minX: x,\n minY: y,\n maxX: x + width,\n maxY: y + height,\n };\n bbox = Object(_util__WEBPACK_IMPORTED_MODULE_3__[\"mergeArrowBBox\"])(shape, bbox);\n return {\n x: bbox.minX,\n y: bbox.minY,\n width: bbox.maxX - bbox.minX,\n height: bbox.maxY - bbox.minY,\n };\n});\n//# sourceMappingURL=path.js.map\n\n//# sourceURL=webpack:///./node_modules/@antv/g-base/esm/bbox/path.js?");
/***/ }),
/***/ "./node_modules/@antv/g-base/esm/bbox/polygon.js":
/*!*******************************************************!*\
!*** ./node_modules/@antv/g-base/esm/bbox/polygon.js ***!
\*******************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _antv_g_math__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @antv/g-math */ \"./node_modules/@antv/g-math/esm/index.js\");\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (function (shape) {\n var attrs = shape.attr();\n var points = attrs.points;\n var xArr = [];\n var yArr = [];\n for (var i = 0; i < points.length; i++) {\n var point = points[i];\n xArr.push(point[0]);\n yArr.push(point[1]);\n }\n return _antv_g_math__WEBPACK_IMPORTED_MODULE_0__[\"Util\"].getBBoxByArray(xArr, yArr);\n});\n//# sourceMappingURL=polygon.js.map\n\n//# sourceURL=webpack:///./node_modules/@antv/g-base/esm/bbox/polygon.js?");
/***/ }),
/***/ "./node_modules/@antv/g-base/esm/bbox/polyline.js":
/*!********************************************************!*\
!*** ./node_modules/@antv/g-base/esm/bbox/polyline.js ***!
\********************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _antv_g_math__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @antv/g-math */ \"./node_modules/@antv/g-math/esm/index.js\");\n/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./util */ \"./node_modules/@antv/g-base/esm/bbox/util.js\");\n\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (function (shape) {\n var attrs = shape.attr();\n var points = attrs.points;\n var xArr = [];\n var yArr = [];\n for (var i = 0; i < points.length; i++) {\n var point = points[i];\n xArr.push(point[0]);\n yArr.push(point[1]);\n }\n var _a = _antv_g_math__WEBPACK_IMPORTED_MODULE_0__[\"Util\"].getBBoxByArray(xArr, yArr), x = _a.x, y = _a.y, width = _a.width, height = _a.height;\n var bbox = {\n minX: x,\n minY: y,\n maxX: x + width,\n maxY: y + height,\n };\n bbox = Object(_util__WEBPACK_IMPORTED_MODULE_1__[\"mergeArrowBBox\"])(shape, bbox);\n return {\n x: bbox.minX,\n y: bbox.minY,\n width: bbox.maxX - bbox.minX,\n height: bbox.maxY - bbox.minY,\n };\n});\n//# sourceMappingURL=polyline.js.map\n\n//# sourceURL=webpack:///./node_modules/@antv/g-base/esm/bbox/polyline.js?");
/***/ }),
/***/ "./node_modules/@antv/g-base/esm/bbox/rect.js":
/*!****************************************************!*\
!*** ./node_modules/@antv/g-base/esm/bbox/rect.js ***!
\****************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony default export */ __webpack_exports__[\"default\"] = (function (shape) {\n var attrs = shape.attr();\n var x = attrs.x, y = attrs.y, width = attrs.width, height = attrs.height;\n return {\n x: x,\n y: y,\n width: width,\n height: height,\n };\n});\n//# sourceMappingURL=rect.js.map\n\n//# sourceURL=webpack:///./node_modules/@antv/g-base/esm/bbox/rect.js?");
/***/ }),
/***/ "./node_modules/@antv/g-base/esm/bbox/register.js":
/*!********************************************************!*\
!*** ./node_modules/@antv/g-base/esm/bbox/register.js ***!
\********************************************************/
/*! exports provided: register, getMethod */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"register\", function() { return register; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"getMethod\", function() { return getMethod; });\nvar cache = new Map();\n/**\n * 注册计算包围盒的算法\n * @param type 方法名\n * @param method 方法\n */\nfunction register(type, method) {\n cache.set(type, method);\n}\n/**\n * 获取计算包围盒的算法\n * @param type 方法名\n */\nfunction getMethod(type) {\n return cache.get(type);\n}\n//# sourceMappingURL=register.js.map\n\n//# sourceURL=webpack:///./node_modules/@antv/g-base/esm/bbox/register.js?");
/***/ }),
/***/ "./node_modules/@antv/g-base/esm/bbox/text.js":
/*!****************************************************!*\
!*** ./node_modules/@antv/g-base/esm/bbox/text.js ***!
\****************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _util_text__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../util/text */ \"./node_modules/@antv/g-base/esm/util/text.js\");\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (function (shape) {\n var attrs = shape.attr();\n var x = attrs.x, y = attrs.y, text = attrs.text, fontSize = attrs.fontSize, lineHeight = attrs.lineHeight;\n var font = attrs.font;\n if (!font) {\n // 如果未组装 font\n font = Object(_util_text__WEBPACK_IMPORTED_MODULE_0__[\"assembleFont\"])(attrs);\n }\n var width = Object(_util_text__WEBPACK_IMPORTED_MODULE_0__[\"getTextWidth\"])(text, font);\n var bbox;\n if (!width) {\n // 如果width不存在,四点共其实点\n bbox = {\n x: x,\n y: y,\n width: 0,\n height: 0,\n };\n }\n else {\n var textAlign = attrs.textAlign, textBaseline = attrs.textBaseline;\n var height = Object(_util_text__WEBPACK_IMPORTED_MODULE_0__[\"getTextHeight\"])(text, fontSize, lineHeight); // attrs.height\n // 默认左右对齐:left, 默认上下对齐 bottom\n var point = {\n x: x,\n y: y - height,\n };\n if (textAlign) {\n if (textAlign === 'end' || textAlign === 'right') {\n point.x -= width;\n }\n else if (textAlign === 'center') {\n point.x -= width / 2;\n }\n }\n if (textBaseline) {\n if (textBaseline === 'top') {\n point.y += height;\n }\n else if (textBaseline === 'middle') {\n point.y += height / 2;\n }\n }\n bbox = {\n x: point.x,\n y: point.y,\n width: width,\n height: height,\n };\n }\n return bbox;\n});\n//# sourceMappingURL=text.js.map\n\n//# sourceURL=webpack:///./node_modules/@antv/g-base/esm/bbox/text.js?");
/***/ }),
/***/ "./node_modules/@antv/g-base/esm/bbox/util.js":
/*!****************************************************!*\
!*** ./node_modules/@antv/g-base/esm/bbox/util.js ***!
\****************************************************/
/*! exports provided: mergeBBox, mergeArrowBBox */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"mergeBBox\", function() { return mergeBBox; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"mergeArrowBBox\", function() { return mergeArrowBBox; });\n// 合并包围盒\nfunction mergeBBox(bbox1, bbox2) {\n if (!bbox1 || !bbox2) {\n return bbox1 || bbox2;\n }\n return {\n minX: Math.min(bbox1.minX, bbox2.minX),\n minY: Math.min(bbox1.minY, bbox2.minY),\n maxX: Math.max(bbox1.maxX, bbox2.maxX),\n maxY: Math.max(bbox1.maxY, bbox2.maxY),\n };\n}\n// 合并箭头的包围盒\nfunction mergeArrowBBox(shape, bbox) {\n var startArrowShape = shape.get('startArrowShape');\n var endArrowShape = shape.get('endArrowShape');\n var startArrowBBox = null;\n var endArrowBBox = null;\n if (startArrowShape) {\n startArrowBBox = startArrowShape.getCanvasBBox();\n bbox = mergeBBox(bbox, startArrowBBox);\n }\n if (endArrowShape) {\n endArrowBBox = endArrowShape.getCanvasBBox();\n bbox = mergeBBox(bbox, endArrowBBox);\n }\n return bbox;\n}\n//# sourceMappingURL=util.js.map\n\n//# sourceURL=webpack:///./node_modules/@antv/g-base/esm/bbox/util.js?");
/***/ }),
/***/ "./node_modules/@antv/g-base/esm/event/event-contoller.js":
/*!****************************************************************!*\
!*** ./node_modules/@antv/g-base/esm/event/event-contoller.js ***!
\****************************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _graph_event__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./graph-event */ \"./node_modules/@antv/g-base/esm/event/graph-event.js\");\n/* harmony import */ var _util_util__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../util/util */ \"./node_modules/@antv/g-base/esm/util/util.js\");\n/**\n * @fileoverview 事件处理器\n * @author dxq613@gmail.com\n */\n\n\nvar CLICK_OFFSET = 40;\nvar LEFT_BTN_CODE = 0;\nvar DELEGATION_SPLIT = ':';\nvar EVENTS = [\n 'mousedown',\n 'mouseup',\n 'dblclick',\n 'mouseout',\n 'mouseover',\n 'mousemove',\n 'mouseleave',\n 'mouseenter',\n 'touchstart',\n 'touchmove',\n 'touchend',\n 'dragenter',\n 'dragover',\n 'dragleave',\n 'drop',\n 'contextmenu',\n 'mousewheel',\n];\n// 是否有委托事件监听\nfunction hasDelegation(events, type) {\n for (var key in events) {\n if (events.hasOwnProperty(key) && key.indexOf(DELEGATION_SPLIT + type) >= 0) {\n return true;\n }\n }\n return false;\n}\n// 触发目标事件,目标只能是 shape 或 canvas\nfunction emitTargetEvent(target, type, eventObj) {\n eventObj.name = type;\n eventObj.target = target;\n eventObj.currentTarget = target;\n eventObj.delegateTarget = target;\n target.emit(type, eventObj);\n}\n// 事件冒泡, enter 和 leave 需要对 fromShape 和 toShape 进行判同\nfunction bubbleEvent(container, type, eventObj) {\n if (eventObj.bubbles) {\n var relativeShape = void 0;\n var isOverEvent = false;\n if (type === 'mouseenter') {\n relativeShape = eventObj.fromShape;\n isOverEvent = true;\n }\n else if (type === 'mouseleave') {\n isOverEvent = true;\n relativeShape = eventObj.toShape;\n }\n // canvas 上的 mouseenter, mouseleave 事件,仅当进入或者移出 canvas 时触发\n if (container.isCanvas() && isOverEvent) {\n return;\n }\n // 如果相关图形同当前图形在同一个容器内,不触发事件\n if (relativeShape && Object(_util_util__WEBPACK_IMPORTED_MODULE_1__[\"isParent\"])(container, relativeShape)) {\n // 阻止继续向上冒泡\n eventObj.bubbles = false;\n return;\n }\n // 事件名称可能在委托过程中被修改,因此事件冒泡时需要重新设置事件名称\n eventObj.name = type;\n eventObj.currentTarget = container;\n eventObj.delegateTarget = container;\n container.emit(type, eventObj);\n }\n}\nvar EventController = /** @class */ (function () {\n function EventController(cfg) {\n var _this = this;\n // 正在被拖拽的图形\n this.draggingShape = null;\n this.dragging = false;\n // 当前鼠标/touch所在位置的图形\n this.currentShape = null;\n this.mousedownShape = null;\n this.mousedownPoint = null;\n // 统一处理所有的回调\n this._eventCallback = function (ev) {\n var type = ev.type;\n _this._triggerEvent(type, ev);\n };\n // 在 document 处理拖拽到画布外的事件,处理从图形上移除画布未被捕捉的问题\n this._onDocumentMove = function (ev) {\n var canvas = _this.canvas;\n var el = canvas.get('el');\n if (el !== ev.target) {\n // 不在 canvas 上移动\n if (_this.dragging || _this.currentShape) {\n var pointInfo = _this._getPointInfo(ev);\n // 还在拖拽过程中\n if (_this.dragging) {\n _this._emitEvent('drag', ev, pointInfo, _this.draggingShape);\n }\n // 说明从某个图形直接移动到了画布外面,\n // 修复了 mouseleave 的 bug 后不再出现这种情况\n // if (this.currentShape) {\n // this._emitEvent('mouseleave', ev, pointInfo, this.currentShape, this.currentShape, null);\n // this.currentShape = null;\n // }\n }\n }\n };\n // 在 document 上处理拖拽到外面,释放鼠标时触发 dragend\n this._onDocumentMouseUp = function (ev) {\n var canvas = _this.canvas;\n var el = canvas.get('el');\n if (el !== ev.target) {\n // 不在 canvas 上移动\n if (_this.dragging) {\n var pointInfo = _this._getPointInfo(ev);\n if (_this.draggingShape) {\n // 如果存在拖拽的图形,则也触发 drop 事件\n _this._emitEvent('drop', ev, pointInfo, null);\n }\n _this._emitEvent('dragend', ev, pointInfo, _this.draggingShape);\n _this._afterDrag(_this.draggingShape, pointInfo, ev);\n }\n }\n };\n this.canvas = cfg.canvas;\n }\n EventController.prototype.init = function () {\n this._bindEvents();\n };\n // 注册事件\n EventController.prototype._bindEvents = function () {\n var _this = this;\n var el = this.canvas.get('el');\n Object(_util_util__WEBPACK_IMPORTED_MODULE_1__[\"each\"])(EVENTS, function (eventName) {\n el.addEventListener(eventName, _this._eventCallback);\n });\n if (document) {\n // 处理移动到外面没有触发 shape mouse leave 的事件\n // 处理拖拽到外部的问题\n document.addEventListener('mousemove', this._onDocumentMove);\n // 处理拖拽过程中在外部释放鼠标的问题\n document.addEventListener('mouseup', this._onDocumentMouseUp);\n }\n };\n // 清理事件\n EventController.prototype._clearEvents = function () {\n var _this = this;\n var el = this.canvas.get('el');\n Object(_util_util__WEBPACK_IMPORTED_MODULE_1__[\"each\"])(EVENTS, function (eventName) {\n el.removeEventListener(eventName, _this._eventCallback);\n });\n if (document) {\n document.removeEventListener('mousemove', this._onDocumentMove);\n document.removeEventListener('mouseup', this._onDocumentMouseUp);\n }\n };\n EventController.prototype._getEventObj = function (type, event, point, target, fromShape, toShape) {\n var eventObj = new _graph_event__WEBPACK_IMPORTED_MODULE_0__[\"default\"](type, event);\n eventObj.fromShape = fromShape;\n eventObj.toShape = toShape;\n eventObj.x = point.x;\n eventObj.y = point.y;\n eventObj.clientX = point.clientX;\n eventObj.clientY = point.clientY;\n eventObj.propagationPath.push(target);\n // 事件的x,y应该是基于画布左上角的,与canvas的matrix无关\n return eventObj;\n };\n // 根据点获取图形,提取成独立方法,便于后续优化\n EventController.prototype._getShape = function (point, ev) {\n return this.canvas.getShape(point.x, point.y, ev);\n };\n // 获取事件的当前点的信息\n EventController.prototype._getPointInfo = function (ev) {\n var canvas = this.canvas;\n var clientPoint = canvas.getClientByEvent(ev);\n var point = canvas.getPointByEvent(ev);\n return {\n x: point.x,\n y: point.y,\n clientX: clientPoint.x,\n clientY: clientPoint.y,\n };\n };\n // 触发事件\n EventController.prototype._triggerEvent = function (type, ev) {\n var pointInfo = this._getPointInfo(ev);\n // 每次都获取图形有一定成本,后期可以考虑进行缓存策略\n var shape = this._getShape(pointInfo, ev);\n var method = this[\"_on\" + type];\n var leaveCanvas = false;\n if (method) {\n method.call(this, pointInfo, shape, ev);\n }\n else {\n var preShape = this.currentShape;\n // 如果进入、移出画布时存在图形,则要分别触发事件\n if (type === 'mouseenter' || type === 'dragenter' || type === 'mouseover') {\n this._emitEvent(type, ev, pointInfo, null, null, shape); // 先进入画布\n if (shape) {\n this._emitEvent(type, ev, pointInfo, shape, null, shape); // 再触发图形的事件\n }\n if (type === 'mouseenter' && this.draggingShape) {\n // 如果正在拖拽图形, 则触发 dragleave\n this._emitEvent('dragenter', ev, pointInfo, null);\n }\n }\n else if (type === 'mouseleave' || type === 'dragleave' || type === 'mouseout') {\n leaveCanvas = true;\n if (preShape) {\n this._emitEvent(type, ev, pointInfo, preShape, preShape, null); // 先触发图形的事件\n }\n this._emitEvent(type, ev, pointInfo, null, preShape, null); // 再触发离开画布事件\n if (type === 'mouseleave' && this.draggingShape) {\n this._emitEvent('dragleave', ev, pointInfo, null);\n }\n }\n else {\n this._emitEvent(type, ev, pointInfo, shape, null, null); // 一般事件中不需要考虑 from, to\n }\n }\n if (!leaveCanvas) {\n this.currentShape = shape;\n }\n // 当鼠标从画布移动到 shape 或者从 preShape 移动到 shape 时,应用 shape 上的鼠标样式\n if (shape && !shape.get('destroyed')) {\n var canvas = this.canvas;\n var el = canvas.get('el');\n el.style.cursor = shape.attr('cursor') || canvas.get('cursor');\n }\n };\n // 记录下点击的位置、图形,便于拖拽事件、click 事件的判定\n EventController.prototype._onmousedown = function (pointInfo, shape, event) {\n // 只有鼠标左键的 mousedown 事件才会设置 mousedownShape 等属性,避免鼠标右键的 mousedown 事件引起其他事件发生\n if (event.button === LEFT_BTN_CODE) {\n this.mousedownShape = shape;\n this.mousedownPoint = pointInfo;\n this.mousedownTimeStamp = event.timeStamp;\n }\n this._emitEvent('mousedown', event, pointInfo, shape, null, null); // mousedown 不考虑fromShape, toShape\n };\n // mouseleave 和 mouseenter 都是成对存在的\n // mouseenter 和 mouseover 同时触发\n EventController.prototype._emitMouseoverEvents = function (event, pointInfo, fromShape, toShape) {\n var el = this.canvas.get('el');\n if (fromShape !== toShape) {\n if (fromShape) {\n this._emitEvent('mouseout', event, pointInfo, fromShape, fromShape, toShape);\n this._emitEvent('mouseleave', event, pointInfo, fromShape, fromShape, toShape);\n // 当鼠标从 fromShape 移动到画布上时,重置鼠标样式\n if (!toShape || toShape.get('destroyed')) {\n el.style.cursor = this.canvas.get('cursor');\n }\n }\n if (toShape) {\n this._emitEvent('mouseover', event, pointInfo, toShape, fromShape, toShape);\n this._emitEvent('mouseenter', event, pointInfo, toShape, fromShape, toShape);\n }\n }\n };\n // dragover 不等同于 mouseover,而等同于 mousemove\n EventController.prototype._emitDragoverEvents = function (event, pointInfo, fromShape, toShape, isCanvasEmit) {\n if (toShape) {\n if (toShape !== fromShape) {\n if (fromShape) {\n this._emitEvent('dragleave', event, pointInfo, fromShape, fromShape, toShape);\n }\n this._emitEvent('dragenter', event, pointInfo, toShape, fromShape, toShape);\n }\n if (!isCanvasEmit) {\n this._emitEvent('dragover', event, pointInfo, toShape);\n }\n }\n else if (fromShape) {\n // TODO: 此处判断有问题,当 drag 图形时,也会触发一次 dragleave 事件,因为此时 toShape 为 null,这不是所期望的\n // 经过空白区域\n this._emitEvent('dragleave', event, pointInfo, fromShape, fromShape, toShape);\n }\n if (isCanvasEmit) {\n this._emitEvent('dragover', event, pointInfo, toShape);\n }\n };\n // drag 完成后,需要做一些清理工作\n EventController.prototype._afterDrag = function (draggingShape, pointInfo, event) {\n if (draggingShape) {\n draggingShape.set('capture', true); // 恢复可以拾取\n this.draggingShape = null;\n }\n this.dragging = false;\n // drag 完成后,有可能 draggingShape 已经移动到了当前位置,所以不能直接取当前图形\n var shape = this._getShape(pointInfo, event);\n // 拖拽完成后,进行 enter,leave 的判定\n if (shape !== draggingShape) {\n this._emitMouseoverEvents(event, pointInfo, draggingShape, shape);\n }\n this.currentShape = shape; // 更新当前 shape,如果不处理当前图形的 mouseleave 事件可能会出问题\n };\n // 按键抬起时,会终止拖拽、触发点击\n EventController.prototype._onmouseup = function (pointInfo, shape, event) {\n // eevent.button === 0 表示鼠标左键事件,此处加上判断主要是为了避免右键鼠标会触发 mouseup 和 click 事件\n // ref: https://developer.mozilla.org/en-US/docs/Web/API/MouseEvent/button\n if (event.button === LEFT_BTN_CODE) {\n var draggingShape = this.draggingShape;\n if (this.dragging) {\n // 存在可以拖拽的图形,同时拖拽到其他图形上时触发 drag 事件\n if (draggingShape) {\n this._emitEvent('drop', event, pointInfo, shape);\n }\n this._emitEvent('dragend', event, pointInfo, draggingShape);\n this._afterDrag(draggingShape, pointInfo, event);\n }\n else {\n this._emitEvent('mouseup', event, pointInfo, shape); // 先触发 mouseup 再触发 click\n if (shape === this.mousedownShape) {\n this._emitEvent('click', event, pointInfo, shape);\n }\n this.mousedownShape = null;\n this.mousedownPoint = null;\n }\n }\n };\n // 当触发浏览器的 dragover 事件时,不会再触发 mousemove ,所以这时候的 dragenter, dragleave 事件需要重新处理\n EventController.prototype._ondragover = function (pointInfo, shape, event) {\n event.preventDefault(); // 如果不对 dragover 进行 preventDefault,则不会在 canvas 上触发 drop 事件\n var preShape = this.currentShape;\n this._emitDragoverEvents(event, pointInfo, preShape, shape, true);\n };\n // 大量的图形事件,都通过 mousemove 模拟\n EventController.prototype._onmousemove = function (pointInfo, shape, event) {\n var canvas = this.canvas;\n var preShape = this.currentShape;\n var draggingShape = this.draggingShape;\n // 正在拖拽时\n if (this.dragging) {\n // 正在拖拽中\n if (draggingShape) {\n // 如果拖拽了 shape 会触发 dragenter, dragleave, dragover 和 drag 事件\n this._emitDragoverEvents(event, pointInfo, preShape, shape, false);\n }\n // 如果存在 draggingShape 则会在 draggingShape 上触发 drag 事件,冒泡到 canvas 上\n // 否则在 canvas 上触发 drag 事件\n this._emitEvent('drag', event, pointInfo, draggingShape);\n }\n else {\n var mousedownPoint = this.mousedownPoint;\n if (mousedownPoint) {\n // 当鼠标点击下去,同时移动时,进行 drag 判定\n var mousedownShape = this.mousedownShape;\n var now = event.timeStamp;\n var timeWindow = now - this.mousedownTimeStamp;\n var dx = mousedownPoint.clientX - pointInfo.clientX;\n var dy = mousedownPoint.clientY - pointInfo.clientY;\n var dist = dx * dx + dy * dy;\n if (timeWindow > 120 || dist > CLICK_OFFSET) {\n if (mousedownShape && mousedownShape.get('draggable')) {\n // 设置了 draggable 的 shape 才能触发 drag 相关的事件\n draggingShape = this.mousedownShape; // 拖动鼠标点下时的 shape\n draggingShape.set('capture', false); // 禁止继续拾取,否则无法进行 dragover,dragenter,dragleave,drop的判定\n this.draggingShape = draggingShape;\n this.dragging = true;\n this._emitEvent('dragstart', event, pointInfo, draggingShape);\n // 清理按下鼠标时缓存的值\n this.mousedownShape = null;\n this.mousedownPoint = null;\n }\n else if (!mousedownShape && canvas.get('draggable')) {\n // 设置了 draggable 的 canvas 才能触发 drag 相关的事件\n this.dragging = true;\n this._emitEvent('dragstart', event, pointInfo, null);\n // 清理按下鼠标时缓存的值\n this.mousedownShape = null;\n this.mousedownPoint = null;\n }\n else {\n this._emitMouseoverEvents(event, pointInfo, preShape, shape);\n this._emitEvent('mousemove', event, pointInfo, shape);\n }\n }\n else {\n this._emitMouseoverEvents(event, pointInfo, preShape, shape);\n this._emitEvent('mousemove', event, pointInfo, shape);\n }\n }\n else {\n // 没有按键按下时,则直接触发 mouse over 相关的各种事件\n this._emitMouseoverEvents(event, pointInfo, preShape, shape);\n // 始终触发移动\n this._emitEvent('mousemove', event, pointInfo, shape);\n }\n }\n };\n // 触发事件\n EventController.prototype._emitEvent = function (type, event, pointInfo, shape, fromShape, toShape) {\n var eventObj = this._getEventObj(type, event, pointInfo, shape, fromShape, toShape);\n // 存在 shape 触发,则进行冒泡处理\n if (shape) {\n eventObj.shape = shape;\n // 触发 shape 上的事件\n emitTargetEvent(shape, type, eventObj);\n var parent_1 = shape.getParent();\n // 执行冒泡\n while (parent_1) {\n // 委托事件要先触发\n parent_1.emitDelegation(type, eventObj);\n // 事件冒泡停止,不能妨碍委托事件\n if (!eventObj.propagationStopped) {\n bubbleEvent(parent_1, type, eventObj);\n }\n eventObj.propagationPath.push(parent_1);\n parent_1 = parent_1.getParent();\n }\n }\n else {\n // 如果没有 shape 直接在 canvas 上触发\n var canvas = this.canvas;\n // 直接触发 canvas 上的事件\n emitTargetEvent(canvas, type, eventObj);\n }\n };\n EventController.prototype.destroy = function () {\n // 清理事件\n this._clearEvents();\n // 清理缓存的对象\n this.canvas = null;\n this.currentShape = null;\n this.draggingShape = null;\n this.mousedownPoint = null;\n this.mousedownShape = null;\n this.mousedownTimeStamp = null;\n };\n return EventController;\n}());\n/* harmony default export */ __webpack_exports__[\"default\"] = (EventController);\n//# sourceMappingURL=event-contoller.js.map\n\n//# sourceURL=webpack:///./node_modules/@antv/g-base/esm/event/event-contoller.js?");
/***/ }),
/***/ "./node_modules/@antv/g-base/esm/event/graph-event.js":
/*!************************************************************!*\
!*** ./node_modules/@antv/g-base/esm/event/graph-event.js ***!
\************************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\nvar GraphEvent = /** @class */ (function () {\n function GraphEvent(type, event) {\n /**\n * 是否允许冒泡\n * @type {boolean}\n */\n this.bubbles = true;\n /**\n * 触发对象\n * @type {object}\n */\n this.target = null;\n /**\n * 监听对象\n * @type {object}\n */\n this.currentTarget = null;\n /**\n * 委托对象\n * @type {object}\n */\n this.delegateTarget = null;\n /**\n * 委托事件监听对象的代理对象,即 ev.delegateObject = ev.currentTarget.get('delegateObject')\n * @type {object}\n */\n this.delegateObject = null;\n /**\n * 是否阻止了原生事件\n * @type {boolean}\n */\n this.defaultPrevented = false;\n /**\n * 是否阻止传播(向上冒泡)\n * @type {boolean}\n */\n this.propagationStopped = false;\n /**\n * 触发事件的图形\n * @type {IShape}\n */\n this.shape = null;\n /**\n * 开始触发事件的图形\n * @type {IShape}\n */\n this.fromShape = null;\n /**\n * 事件结束时的触发图形\n * @type {IShape}\n */\n this.toShape = null;\n // 触发事件的路径\n this.propagationPath = [];\n this.type = type;\n this.name = type;\n this.originalEvent = event;\n this.timeStamp = event.timeStamp;\n }\n /**\n * 阻止浏览器默认的行为\n */\n GraphEvent.prototype.preventDefault = function () {\n this.defaultPrevented = true;\n if (this.originalEvent.preventDefault) {\n this.originalEvent.preventDefault();\n }\n };\n /**\n * 阻止冒泡\n */\n GraphEvent.prototype.stopPropagation = function () {\n this.propagationStopped = true;\n };\n GraphEvent.prototype.toString = function () {\n var type = this.type;\n return \"[Event (type=\" + type + \")]\";\n };\n GraphEvent.prototype.save = function () { };\n GraphEvent.prototype.restore = function () { };\n return GraphEvent;\n}());\n/* harmony default export */ __webpack_exports__[\"default\"] = (GraphEvent);\n//# sourceMappingURL=graph-event.js.map\n\n//# sourceURL=webpack:///./node_modules/@antv/g-base/esm/event/graph-event.js?");
/***/ }),
/***/ "./node_modules/@antv/g-base/esm/index.js":
/*!************************************************!*\
!*** ./node_modules/@antv/g-base/esm/index.js ***!
\************************************************/
/*! no static exports found */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"version\", function() { return version; });\n/* harmony import */ var _util_path__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./util/path */ \"./node_modules/@antv/g-base/esm/util/path.js\");\n/* harmony reexport (module object) */ __webpack_require__.d(__webpack_exports__, \"PathUtil\", function() { return _util_path__WEBPACK_IMPORTED_MODULE_0__; });\n/* harmony import */ var _types__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./types */ \"./node_modules/@antv/g-base/esm/types.js\");\n/* harmony import */ var _types__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_types__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony reexport (unknown) */ for(var __WEBPACK_IMPORT_KEY__ in _types__WEBPACK_IMPORTED_MODULE_1__) if([\"default\",\"Event\",\"Base\",\"AbstractCanvas\",\"AbstractGroup\",\"AbstractShape\",\"PathUtil\",\"getBBoxMethod\",\"registerBBox\",\"getTextHeight\",\"assembleFont\",\"isAllowCapture\",\"multiplyVec2\",\"invert\",\"getOffScreenContext\",\"registerEasing\",\"version\"].indexOf(__WEBPACK_IMPORT_KEY__) < 0) (function(key) { __webpack_require__.d(__webpack_exports__, key, function() { return _types__WEBPACK_IMPORTED_MODULE_1__[key]; }) }(__WEBPACK_IMPORT_KEY__));\n/* harmony import */ var _interfaces__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./interfaces */ \"./node_modules/@antv/g-base/esm/interfaces.js\");\n/* harmony import */ var _interfaces__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_interfaces__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony reexport (unknown) */ for(var __WEBPACK_IMPORT_KEY__ in _interfaces__WEBPACK_IMPORTED_MODULE_2__) if([\"default\",\"Event\",\"Base\",\"AbstractCanvas\",\"AbstractGroup\",\"AbstractShape\",\"PathUtil\",\"getBBoxMethod\",\"registerBBox\",\"getTextHeight\",\"assembleFont\",\"isAllowCapture\",\"multiplyVec2\",\"invert\",\"getOffScreenContext\",\"registerEasing\",\"version\"].indexOf(__WEBPACK_IMPORT_KEY__) < 0) (function(key) { __webpack_require__.d(__webpack_exports__, key, function() { return _interfaces__WEBPACK_IMPORTED_MODULE_2__[key]; }) }(__WEBPACK_IMPORT_KEY__));\n/* harmony import */ var _event_graph_event__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./event/graph-event */ \"./node_modules/@antv/g-base/esm/event/graph-event.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Event\", function() { return _event_graph_event__WEBPACK_IMPORTED_MODULE_3__[\"default\"]; });\n\n/* harmony import */ var _abstract_base__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./abstract/base */ \"./node_modules/@antv/g-base/esm/abstract/base.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Base\", function() { return _abstract_base__WEBPACK_IMPORTED_MODULE_4__[\"default\"]; });\n\n/* harmony import */ var _abstract_canvas__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./abstract/canvas */ \"./node_modules/@antv/g-base/esm/abstract/canvas.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"AbstractCanvas\", function() { return _abstract_canvas__WEBPACK_IMPORTED_MODULE_5__[\"default\"]; });\n\n/* harmony import */ var _abstract_group__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./abstract/group */ \"./node_modules/@antv/g-base/esm/abstract/group.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"AbstractGroup\", function() { return _abstract_group__WEBPACK_IMPORTED_MODULE_6__[\"default\"]; });\n\n/* harmony import */ var _abstract_shape__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./abstract/shape */ \"./node_modules/@antv/g-base/esm/abstract/shape.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"AbstractShape\", function() { return _abstract_shape__WEBPACK_IMPORTED_MODULE_7__[\"default\"]; });\n\n/* harmony import */ var _bbox__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./bbox */ \"./node_modules/@antv/g-base/esm/bbox/index.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"getBBoxMethod\", function() { return _bbox__WEBPACK_IMPORTED_MODULE_8__[\"getBBoxMethod\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"registerBBox\", function() { return _bbox__WEBPACK_IMPORTED_MODULE_8__[\"registerBBox\"]; });\n\n/* harmony import */ var _util_text__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./util/text */ \"./node_modules/@antv/g-base/esm/util/text.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"getTextHeight\", function() { return _util_text__WEBPACK_IMPORTED_MODULE_9__[\"getTextHeight\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"assembleFont\", function() { return _util_text__WEBPACK_IMPORTED_MODULE_9__[\"assembleFont\"]; });\n\n/* harmony import */ var _util_util__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./util/util */ \"./node_modules/@antv/g-base/esm/util/util.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"isAllowCapture\", function() { return _util_util__WEBPACK_IMPORTED_MODULE_10__[\"isAllowCapture\"]; });\n\n/* harmony import */ var _util_matrix__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./util/matrix */ \"./node_modules/@antv/g-base/esm/util/matrix.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"multiplyVec2\", function() { return _util_matrix__WEBPACK_IMPORTED_MODULE_11__[\"multiplyVec2\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"invert\", function() { return _util_matrix__WEBPACK_IMPORTED_MODULE_11__[\"invert\"]; });\n\n/* harmony import */ var _util_offscreen__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./util/offscreen */ \"./node_modules/@antv/g-base/esm/util/offscreen.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"getOffScreenContext\", function() { return _util_offscreen__WEBPACK_IMPORTED_MODULE_12__[\"getOffScreenContext\"]; });\n\n/* harmony import */ var _animate_register__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./animate/register */ \"./node_modules/@antv/g-base/esm/animate/register.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"registerEasing\", function() { return _animate_register__WEBPACK_IMPORTED_MODULE_13__[\"registerEasing\"]; });\n\n/**\n * @fileoverview G 的基础接口定义和所有的抽象类\n * @author dxq613@gmail.com\n */\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar version = '0.5.11';\n//# sourceMappingURL=index.js.map\n\n//# sourceURL=webpack:///./node_modules/@antv/g-base/esm/index.js?");
/***/ }),
/***/ "./node_modules/@antv/g-base/esm/interfaces.js":
/*!*****************************************************!*\
!*** ./node_modules/@antv/g-base/esm/interfaces.js ***!
\*****************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("//# sourceMappingURL=interfaces.js.map\n\n//# sourceURL=webpack:///./node_modules/@antv/g-base/esm/interfaces.js?");
/***/ }),
/***/ "./node_modules/@antv/g-base/esm/types.js":
/*!************************************************!*\
!*** ./node_modules/@antv/g-base/esm/types.js ***!
\************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("//# sourceMappingURL=types.js.map\n\n//# sourceURL=webpack:///./node_modules/@antv/g-base/esm/types.js?");
/***/ }),
/***/ "./node_modules/@antv/g-base/esm/util/color.js":
/*!*****************************************************!*\
!*** ./node_modules/@antv/g-base/esm/util/color.js ***!
\*****************************************************/
/*! exports provided: isColorProp, isGradientColor */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"isColorProp\", function() { return isColorProp; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"isGradientColor\", function() { return isGradientColor; });\nvar isColorProp = function (prop) { return ['fill', 'stroke', 'fillStyle', 'strokeStyle'].includes(prop); };\nvar isGradientColor = function (val) { return /^[r,R,L,l]{1}[\\s]*\\(/.test(val); };\n//# sourceMappingURL=color.js.map\n\n//# sourceURL=webpack:///./node_modules/@antv/g-base/esm/util/color.js?");
/***/ }),
/***/ "./node_modules/@antv/g-base/esm/util/matrix.js":
/*!******************************************************!*\
!*** ./node_modules/@antv/g-base/esm/util/matrix.js ***!
\******************************************************/
/*! exports provided: multiplyMatrix, multiplyVec2, invert */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"multiplyMatrix\", function() { return multiplyMatrix; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"multiplyVec2\", function() { return multiplyVec2; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"invert\", function() { return invert; });\n/**\n * @fileoverview 矩阵运算,本来是要引入 gl-matrix, 但是考虑到 g-mobile 对大小有限制,同时 g-webgl 使用的 matrix 不一致\n * 所以,这里仅实现 2D 几个运算,上层自己引入 gl-matrix\n * @author dxq613@gmail.com\n */\n/**\n * 3阶矩阵相乘\n * @param {number[]} a 矩阵1\n * @param {number[]} b 矩阵2\n */\nfunction multiplyMatrix(a, b) {\n var out = [];\n var a00 = a[0];\n var a01 = a[1];\n var a02 = a[2];\n var a10 = a[3];\n var a11 = a[4];\n var a12 = a[5];\n var a20 = a[6];\n var a21 = a[7];\n var a22 = a[8];\n var b00 = b[0];\n var b01 = b[1];\n var b02 = b[2];\n var b10 = b[3];\n var b11 = b[4];\n var b12 = b[5];\n var b20 = b[6];\n var b21 = b[7];\n var b22 = b[8];\n out[0] = b00 * a00 + b01 * a10 + b02 * a20;\n out[1] = b00 * a01 + b01 * a11 + b02 * a21;\n out[2] = b00 * a02 + b01 * a12 + b02 * a22;\n out[3] = b10 * a00 + b11 * a10 + b12 * a20;\n out[4] = b10 * a01 + b11 * a11 + b12 * a21;\n out[5] = b10 * a02 + b11 * a12 + b12 * a22;\n out[6] = b20 * a00 + b21 * a10 + b22 * a20;\n out[7] = b20 * a01 + b21 * a11 + b22 * a21;\n out[8] = b20 * a02 + b21 * a12 + b22 * a22;\n return out;\n}\n/**\n * 3阶矩阵同2阶向量相乘\n * @param {number[]} m 矩阵\n * @param {number[]} v 二阶向量\n */\nfunction multiplyVec2(m, v) {\n var out = [];\n var x = v[0];\n var y = v[1];\n out[0] = m[0] * x + m[3] * y + m[6];\n out[1] = m[1] * x + m[4] * y + m[7];\n return out;\n}\n/**\n * 矩阵的逆\n * @param {number[]} a 矩阵\n */\nfunction invert(a) {\n var out = [];\n var a00 = a[0];\n var a01 = a[1];\n var a02 = a[2];\n var a10 = a[3];\n var a11 = a[4];\n var a12 = a[5];\n var a20 = a[6];\n var a21 = a[7];\n var a22 = a[8];\n var b01 = a22 * a11 - a12 * a21;\n var b11 = -a22 * a10 + a12 * a20;\n var b21 = a21 * a10 - a11 * a20;\n // Calculate the determinant\n var det = a00 * b01 + a01 * b11 + a02 * b21;\n if (!det) {\n return null;\n }\n det = 1.0 / det;\n out[0] = b01 * det;\n out[1] = (-a22 * a01 + a02 * a21) * det;\n out[2] = (a12 * a01 - a02 * a11) * det;\n out[3] = b11 * det;\n out[4] = (a22 * a00 - a02 * a20) * det;\n out[5] = (-a12 * a00 + a02 * a10) * det;\n out[6] = b21 * det;\n out[7] = (-a21 * a00 + a01 * a20) * det;\n out[8] = (a11 * a00 - a01 * a10) * det;\n return out;\n}\n//# sourceMappingURL=matrix.js.map\n\n//# sourceURL=webpack:///./node_modules/@antv/g-base/esm/util/matrix.js?");
/***/ }),
/***/ "./node_modules/@antv/g-base/esm/util/offscreen.js":
/*!*********************************************************!*\
!*** ./node_modules/@antv/g-base/esm/util/offscreen.js ***!
\*********************************************************/
/*! exports provided: getOffScreenContext */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"getOffScreenContext\", function() { return getOffScreenContext; });\n// 全局设置一个唯一离屏的 ctx,用于计算 isPointInPath\nvar offScreenCtx = null;\nfunction getOffScreenContext() {\n if (!offScreenCtx) {\n var canvas = document.createElement('canvas');\n canvas.width = 1;\n canvas.height = 1;\n offScreenCtx = canvas.getContext('2d');\n }\n return offScreenCtx;\n}\n//# sourceMappingURL=offscreen.js.map\n\n//# sourceURL=webpack:///./node_modules/@antv/g-base/esm/util/offscreen.js?");
/***/ }),
/***/ "./node_modules/@antv/g-base/esm/util/path.js":
/*!****************************************************!*\
!*** ./node_modules/@antv/g-base/esm/util/path.js ***!
\****************************************************/
/*! exports provided: catmullRomToBezier, fillPath, fillPathByDiff, formatPath, intersection, parsePathArray, parsePathString, pathToAbsolute, pathToCurve, rectPath */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"catmullRomToBezier\", function() { return catmullRomToBezier; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"fillPath\", function() { return fillPath; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"fillPathByDiff\", function() { return fillPathByDiff; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"formatPath\", function() { return formatPath; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"intersection\", function() { return intersection; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"parsePathArray\", function() { return parsePathArray; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"parsePathString\", function() { return parsePathString; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"pathToAbsolute\", function() { return pathToAbsolute; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"pathToCurve\", function() { return pathToCurve; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"rectPath\", function() { return rectPath; });\n/* harmony import */ var _antv_util__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @antv/util */ \"./node_modules/@antv/util/esm/index.js\");\n\nvar SPACES = '\\x09\\x0a\\x0b\\x0c\\x0d\\x20\\xa0\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000\\u2028\\u2029';\nvar PATH_COMMAND = new RegExp(\"([a-z])[\" + SPACES + \",]*((-?\\\\d*\\\\.?\\\\d*(?:e[\\\\-+]?\\\\d+)?[\" + SPACES + \"]*,?[\" + SPACES + \"]*)+)\", 'ig');\nvar PATH_VALUES = new RegExp(\"(-?\\\\d*\\\\.?\\\\d*(?:e[\\\\-+]?\\\\d+)?)[\" + SPACES + \"]*,?[\" + SPACES + \"]*\", 'ig');\n// Parse given path string into an array of arrays of path segments\nvar parsePathString = function (pathString) {\n if (!pathString) {\n return null;\n }\n if (Object(_antv_util__WEBPACK_IMPORTED_MODULE_0__[\"isArray\"])(pathString)) {\n return pathString;\n }\n var paramCounts = {\n a: 7,\n c: 6,\n o: 2,\n h: 1,\n l: 2,\n m: 2,\n r: 4,\n q: 4,\n s: 4,\n t: 2,\n v: 1,\n u: 3,\n z: 0,\n };\n var data = [];\n String(pathString).replace(PATH_COMMAND, function (a, b, c) {\n var params = [];\n var name = b.toLowerCase();\n c.replace(PATH_VALUES, function (a, b) {\n b && params.push(+b);\n });\n if (name === 'm' && params.length > 2) {\n data.push([b].concat(params.splice(0, 2)));\n name = 'l';\n b = b === 'm' ? 'l' : 'L';\n }\n if (name === 'o' && params.length === 1) {\n data.push([b, params[0]]);\n }\n if (name === 'r') {\n data.push([b].concat(params));\n }\n else {\n while (params.length >= paramCounts[name]) {\n data.push([b].concat(params.splice(0, paramCounts[name])));\n if (!paramCounts[name]) {\n break;\n }\n }\n }\n return pathString;\n });\n return data;\n};\n// http://schepers.cc/getting-to-the-point\nvar catmullRomToBezier = function (crp, z) {\n var d = [];\n // @ts-ignore\n for (var i = 0, iLen = crp.length; iLen - 2 * !z > i; i += 2) {\n var p = [\n {\n x: +crp[i - 2],\n y: +crp[i - 1],\n },\n {\n x: +crp[i],\n y: +crp[i + 1],\n },\n {\n x: +crp[i + 2],\n y: +crp[i + 3],\n },\n {\n x: +crp[i + 4],\n y: +crp[i + 5],\n },\n ];\n if (z) {\n if (!i) {\n p[0] = {\n x: +crp[iLen - 2],\n y: +crp[iLen - 1],\n };\n }\n else if (iLen - 4 === i) {\n p[3] = {\n x: +crp[0],\n y: +crp[1],\n };\n }\n else if (iLen - 2 === i) {\n p[2] = {\n x: +crp[0],\n y: +crp[1],\n };\n p[3] = {\n x: +crp[2],\n y: +crp[3],\n };\n }\n }\n else {\n if (iLen - 4 === i) {\n p[3] = p[2];\n }\n else if (!i) {\n p[0] = {\n x: +crp[i],\n y: +crp[i + 1],\n };\n }\n }\n d.push([\n 'C',\n (-p[0].x + 6 * p[1].x + p[2].x) / 6,\n (-p[0].y + 6 * p[1].y + p[2].y) / 6,\n (p[1].x + 6 * p[2].x - p[3].x) / 6,\n (p[1].y + 6 * p[2].y - p[3].y) / 6,\n p[2].x,\n p[2].y,\n ]);\n }\n return d;\n};\nvar ellipsePath = function (x, y, rx, ry, a) {\n var res = [];\n if (a === null && ry === null) {\n ry = rx;\n }\n x = +x;\n y = +y;\n rx = +rx;\n ry = +ry;\n if (a !== null) {\n var rad = Math.PI / 180;\n var x1 = x + rx * Math.cos(-ry * rad);\n var x2 = x + rx * Math.cos(-a * rad);\n var y1 = y + rx * Math.sin(-ry * rad);\n var y2 = y + rx * Math.sin(-a * rad);\n res = [\n ['M', x1, y1],\n ['A', rx, rx, 0, +(a - ry > 180), 0, x2, y2],\n ];\n }\n else {\n res = [['M', x, y], ['m', 0, -ry], ['a', rx, ry, 0, 1, 1, 0, 2 * ry], ['a', rx, ry, 0, 1, 1, 0, -2 * ry], ['z']];\n }\n return res;\n};\nvar pathToAbsolute = function (pathArray) {\n pathArray = parsePathString(pathArray);\n if (!pathArray || !pathArray.length) {\n return [['M', 0, 0]];\n }\n var res = [];\n var x = 0;\n var y = 0;\n var mx = 0;\n var my = 0;\n var start = 0;\n var pa0;\n var dots;\n if (pathArray[0][0] === 'M') {\n x = +pathArray[0][1];\n y = +pathArray[0][2];\n mx = x;\n my = y;\n start++;\n res[0] = ['M', x, y];\n }\n var crz = pathArray.length === 3 &&\n pathArray[0][0] === 'M' &&\n pathArray[1][0].toUpperCase() === 'R' &&\n pathArray[2][0].toUpperCase() === 'Z';\n for (var r = void 0, pa = void 0, i = start, ii = pathArray.length; i < ii; i++) {\n res.push((r = []));\n pa = pathArray[i];\n pa0 = pa[0];\n if (pa0 !== pa0.toUpperCase()) {\n r[0] = pa0.toUpperCase();\n switch (r[0]) {\n case 'A':\n r[1] = pa[1];\n r[2] = pa[2];\n r[3] = pa[3];\n r[4] = pa[4];\n r[5] = pa[5];\n r[6] = +pa[6] + x;\n r[7] = +pa[7] + y;\n break;\n case 'V':\n r[1] = +pa[1] + y;\n break;\n case 'H':\n r[1] = +pa[1] + x;\n break;\n case 'R':\n dots = [x, y].concat(pa.slice(1));\n for (var j = 2, jj = dots.length; j < jj; j++) {\n dots[j] = +dots[j] + x;\n dots[++j] = +dots[j] + y;\n }\n res.pop();\n res = res.concat(catmullRomToBezier(dots, crz));\n break;\n case 'O':\n res.pop();\n dots = ellipsePath(x, y, pa[1], pa[2]);\n dots.push(dots[0]);\n res = res.concat(dots);\n break;\n case 'U':\n res.pop();\n res = res.concat(ellipsePath(x, y, pa[1], pa[2], pa[3]));\n r = ['U'].concat(res[res.length - 1].slice(-2));\n break;\n case 'M':\n mx = +pa[1] + x;\n my = +pa[2] + y;\n break; // for lint\n default:\n for (var j = 1, jj = pa.length; j < jj; j++) {\n r[j] = +pa[j] + (j % 2 ? x : y);\n }\n }\n }\n else if (pa0 === 'R') {\n dots = [x, y].concat(pa.slice(1));\n res.pop();\n res = res.concat(catmullRomToBezier(dots, crz));\n r = ['R'].concat(pa.slice(-2));\n }\n else if (pa0 === 'O') {\n res.pop();\n dots = ellipsePath(x, y, pa[1], pa[2]);\n dots.push(dots[0]);\n res = res.concat(dots);\n }\n else if (pa0 === 'U') {\n res.pop();\n res = res.concat(ellipsePath(x, y, pa[1], pa[2], pa[3]));\n r = ['U'].concat(res[res.length - 1].slice(-2));\n }\n else {\n for (var k = 0, kk = pa.length; k < kk; k++) {\n r[k] = pa[k];\n }\n }\n pa0 = pa0.toUpperCase();\n if (pa0 !== 'O') {\n switch (r[0]) {\n case 'Z':\n x = +mx;\n y = +my;\n break;\n case 'H':\n x = r[1];\n break;\n case 'V':\n y = r[1];\n break;\n case 'M':\n mx = r[r.length - 2];\n my = r[r.length - 1];\n break; // for lint\n default:\n x = r[r.length - 2];\n y = r[r.length - 1];\n }\n }\n }\n return res;\n};\nvar l2c = function (x1, y1, x2, y2) {\n return [x1, y1, x2, y2, x2, y2];\n};\nvar q2c = function (x1, y1, ax, ay, x2, y2) {\n var _13 = 1 / 3;\n var _23 = 2 / 3;\n return [_13 * x1 + _23 * ax, _13 * y1 + _23 * ay, _13 * x2 + _23 * ax, _13 * y2 + _23 * ay, x2, y2];\n};\nvar a2c = function (x1, y1, rx, ry, angle, large_arc_flag, sweep_flag, x2, y2, recursive) {\n // for more information of where this math came from visit:\n // http://www.w3.org/TR/SVG11/implnote.html#ArcImplementationNotes\n if (rx === ry) {\n rx += 1;\n }\n var _120 = (Math.PI * 120) / 180;\n var rad = (Math.PI / 180) * (+angle || 0);\n var res = [];\n var xy;\n var f1;\n var f2;\n var cx;\n var cy;\n var rotate = function (x, y, rad) {\n var X = x * Math.cos(rad) - y * Math.sin(rad);\n var Y = x * Math.sin(rad) + y * Math.cos(rad);\n return {\n x: X,\n y: Y,\n };\n };\n if (!recursive) {\n xy = rotate(x1, y1, -rad);\n x1 = xy.x;\n y1 = xy.y;\n xy = rotate(x2, y2, -rad);\n x2 = xy.x;\n y2 = xy.y;\n if (x1 === x2 && y1 === y2) {\n // 若弧的起始点和终点重叠则错开一点\n x2 += 1;\n y2 += 1;\n }\n // const cos = Math.cos(Math.PI / 180 * angle);\n // const sin = Math.sin(Math.PI / 180 * angle);\n var x = (x1 - x2) / 2;\n var y = (y1 - y2) / 2;\n var h = (x * x) / (rx * rx) + (y * y) / (ry * ry);\n if (h > 1) {\n h = Math.sqrt(h);\n rx = h * rx;\n ry = h * ry;\n }\n var rx2 = rx * rx;\n var ry2 = ry * ry;\n var k = (large_arc_flag === sweep_flag ? -1 : 1) *\n Math.sqrt(Math.abs((rx2 * ry2 - rx2 * y * y - ry2 * x * x) / (rx2 * y * y + ry2 * x * x)));\n cx = (k * rx * y) / ry + (x1 + x2) / 2;\n cy = (k * -ry * x) / rx + (y1 + y2) / 2;\n // @ts-ignore\n f1 = Math.asin(((y1 - cy) / ry).toFixed(9));\n // @ts-ignore\n f2 = Math.asin(((y2 - cy) / ry).toFixed(9));\n f1 = x1 < cx ? Math.PI - f1 : f1;\n f2 = x2 < cx ? Math.PI - f2 : f2;\n f1 < 0 && (f1 = Math.PI * 2 + f1);\n f2 < 0 && (f2 = Math.PI * 2 + f2);\n if (sweep_flag && f1 > f2) {\n f1 = f1 - Math.PI * 2;\n }\n if (!sweep_flag && f2 > f1) {\n f2 = f2 - Math.PI * 2;\n }\n }\n else {\n f1 = recursive[0];\n f2 = recursive[1];\n cx = recursive[2];\n cy = recursive[3];\n }\n var df = f2 - f1;\n if (Math.abs(df) > _120) {\n var f2old = f2;\n var x2old = x2;\n var y2old = y2;\n f2 = f1 + _120 * (sweep_flag && f2 > f1 ? 1 : -1);\n x2 = cx + rx * Math.cos(f2);\n y2 = cy + ry * Math.sin(f2);\n res = a2c(x2, y2, rx, ry, angle, 0, sweep_flag, x2old, y2old, [f2, f2old, cx, cy]);\n }\n df = f2 - f1;\n var c1 = Math.cos(f1);\n var s1 = Math.sin(f1);\n var c2 = Math.cos(f2);\n var s2 = Math.sin(f2);\n var t = Math.tan(df / 4);\n var hx = (4 / 3) * rx * t;\n var hy = (4 / 3) * ry * t;\n var m1 = [x1, y1];\n var m2 = [x1 + hx * s1, y1 - hy * c1];\n var m3 = [x2 + hx * s2, y2 - hy * c2];\n var m4 = [x2, y2];\n m2[0] = 2 * m1[0] - m2[0];\n m2[1] = 2 * m1[1] - m2[1];\n if (recursive) {\n return [m2, m3, m4].concat(res);\n }\n res = [m2, m3, m4].concat(res).join().split(',');\n var newres = [];\n for (var i = 0, ii = res.length; i < ii; i++) {\n newres[i] = i % 2 ? rotate(res[i - 1], res[i], rad).y : rotate(res[i], res[i + 1], rad).x;\n }\n return newres;\n};\nvar pathToCurve = function (path, path2) {\n var p = pathToAbsolute(path);\n var p2 = path2 && pathToAbsolute(path2);\n var attrs = {\n x: 0,\n y: 0,\n bx: 0,\n by: 0,\n X: 0,\n Y: 0,\n qx: null,\n qy: null,\n };\n var attrs2 = {\n x: 0,\n y: 0,\n bx: 0,\n by: 0,\n X: 0,\n Y: 0,\n qx: null,\n qy: null,\n };\n var pcoms1 = []; // path commands of original path p\n var pcoms2 = []; // path commands of original path p2\n var pfirst = ''; // temporary holder for original path command\n var pcom = ''; // holder for previous path command of original path\n var ii;\n var processPath = function (path, d, pcom) {\n var nx;\n var ny;\n if (!path) {\n return ['C', d.x, d.y, d.x, d.y, d.x, d.y];\n }\n !(path[0] in\n {\n T: 1,\n Q: 1,\n }) && (d.qx = d.qy = null);\n switch (path[0]) {\n case 'M':\n d.X = path[1];\n d.Y = path[2];\n break;\n case 'A':\n path = ['C'].concat(a2c.apply(0, [d.x, d.y].concat(path.slice(1))));\n break;\n case 'S':\n if (pcom === 'C' || pcom === 'S') {\n // In \"S\" case we have to take into account, if the previous command is C/S.\n nx = d.x * 2 - d.bx; // And reflect the previous\n ny = d.y * 2 - d.by; // command's control point relative to the current point.\n }\n else {\n // or some else or nothing\n nx = d.x;\n ny = d.y;\n }\n path = ['C', nx, ny].concat(path.slice(1));\n break;\n case 'T':\n if (pcom === 'Q' || pcom === 'T') {\n // In \"T\" case we have to take into account, if the previous command is Q/T.\n d.qx = d.x * 2 - d.qx; // And make a reflection similar\n d.qy = d.y * 2 - d.qy; // to case \"S\".\n }\n else {\n // or something else or nothing\n d.qx = d.x;\n d.qy = d.y;\n }\n path = ['C'].concat(q2c(d.x, d.y, d.qx, d.qy, path[1], path[2]));\n break;\n case 'Q':\n d.qx = path[1];\n d.qy = path[2];\n path = ['C'].concat(q2c(d.x, d.y, path[1], path[2], path[3], path[4]));\n break;\n case 'L':\n path = ['C'].concat(l2c(d.x, d.y, path[1], path[2]));\n break;\n case 'H':\n path = ['C'].concat(l2c(d.x, d.y, path[1], d.y));\n break;\n case 'V':\n path = ['C'].concat(l2c(d.x, d.y, d.x, path[1]));\n break;\n case 'Z':\n path = ['C'].concat(l2c(d.x, d.y, d.X, d.Y));\n break;\n default:\n break;\n }\n return path;\n };\n var fixArc = function (pp, i) {\n if (pp[i].length > 7) {\n pp[i].shift();\n var pi = pp[i];\n while (pi.length) {\n pcoms1[i] = 'A'; // if created multiple C:s, their original seg is saved\n p2 && (pcoms2[i] = 'A'); // the same as above\n pp.splice(i++, 0, ['C'].concat(pi.splice(0, 6)));\n }\n pp.splice(i, 1);\n ii = Math.max(p.length, (p2 && p2.length) || 0);\n }\n };\n var fixM = function (path1, path2, a1, a2, i) {\n if (path1 && path2 && path1[i][0] === 'M' && path2[i][0] !== 'M') {\n path2.splice(i, 0, ['M', a2.x, a2.y]);\n a1.bx = 0;\n a1.by = 0;\n a1.x = path1[i][1];\n a1.y = path1[i][2];\n ii = Math.max(p.length, (p2 && p2.length) || 0);\n }\n };\n ii = Math.max(p.length, (p2 && p2.length) || 0);\n for (var i = 0; i < ii; i++) {\n p[i] && (pfirst = p[i][0]); // save current path command\n if (pfirst !== 'C') {\n // C is not saved yet, because it may be result of conversion\n pcoms1[i] = pfirst; // Save current path command\n i && (pcom = pcoms1[i - 1]); // Get previous path command pcom\n }\n p[i] = processPath(p[i], attrs, pcom); // Previous path command is inputted to processPath\n if (pcoms1[i] !== 'A' && pfirst === 'C')\n pcoms1[i] = 'C'; // A is the only command\n // which may produce multiple C:s\n // so we have to make sure that C is also C in original path\n fixArc(p, i); // fixArc adds also the right amount of A:s to pcoms1\n if (p2) {\n // the same procedures is done to p2\n p2[i] && (pfirst = p2[i][0]);\n if (pfirst !== 'C') {\n pcoms2[i] = pfirst;\n i && (pcom = pcoms2[i - 1]);\n }\n p2[i] = processPath(p2[i], attrs2, pcom);\n if (pcoms2[i] !== 'A' && pfirst === 'C') {\n pcoms2[i] = 'C';\n }\n fixArc(p2, i);\n }\n fixM(p, p2, attrs, attrs2, i);\n fixM(p2, p, attrs2, attrs, i);\n var seg = p[i];\n var seg2 = p2 && p2[i];\n var seglen = seg.length;\n var seg2len = p2 && seg2.length;\n attrs.x = seg[seglen - 2];\n attrs.y = seg[seglen - 1];\n attrs.bx = parseFloat(seg[seglen - 4]) || attrs.x;\n attrs.by = parseFloat(seg[seglen - 3]) || attrs.y;\n attrs2.bx = p2 && (parseFloat(seg2[seg2len - 4]) || attrs2.x);\n attrs2.by = p2 && (parseFloat(seg2[seg2len - 3]) || attrs2.y);\n attrs2.x = p2 && seg2[seg2len - 2];\n attrs2.y = p2 && seg2[seg2len - 1];\n }\n return p2 ? [p, p2] : p;\n};\nvar p2s = /,?([a-z]),?/gi;\nvar parsePathArray = function (path) {\n return path.join(',').replace(p2s, '$1');\n};\nvar base3 = function (t, p1, p2, p3, p4) {\n var t1 = -3 * p1 + 9 * p2 - 9 * p3 + 3 * p4;\n var t2 = t * t1 + 6 * p1 - 12 * p2 + 6 * p3;\n return t * t2 - 3 * p1 + 3 * p2;\n};\nvar bezlen = function (x1, y1, x2, y2, x3, y3, x4, y4, z) {\n if (z === null) {\n z = 1;\n }\n z = z > 1 ? 1 : z < 0 ? 0 : z;\n var z2 = z / 2;\n var n = 12;\n var Tvalues = [\n -0.1252, 0.1252, -0.3678, 0.3678, -0.5873, 0.5873, -0.7699, 0.7699, -0.9041, 0.9041, -0.9816, 0.9816,\n ];\n var Cvalues = [0.2491, 0.2491, 0.2335, 0.2335, 0.2032, 0.2032, 0.1601, 0.1601, 0.1069, 0.1069, 0.0472, 0.0472];\n var sum = 0;\n for (var i = 0; i < n; i++) {\n var ct = z2 * Tvalues[i] + z2;\n var xbase = base3(ct, x1, x2, x3, x4);\n var ybase = base3(ct, y1, y2, y3, y4);\n var comb = xbase * xbase + ybase * ybase;\n sum += Cvalues[i] * Math.sqrt(comb);\n }\n return z2 * sum;\n};\nvar curveDim = function (x0, y0, x1, y1, x2, y2, x3, y3) {\n var tvalues = [];\n var bounds = [[], []];\n var a;\n var b;\n var c;\n var t;\n for (var i = 0; i < 2; ++i) {\n if (i === 0) {\n b = 6 * x0 - 12 * x1 + 6 * x2;\n a = -3 * x0 + 9 * x1 - 9 * x2 + 3 * x3;\n c = 3 * x1 - 3 * x0;\n }\n else {\n b = 6 * y0 - 12 * y1 + 6 * y2;\n a = -3 * y0 + 9 * y1 - 9 * y2 + 3 * y3;\n c = 3 * y1 - 3 * y0;\n }\n if (Math.abs(a) < 1e-12) {\n if (Math.abs(b) < 1e-12) {\n continue;\n }\n t = -c / b;\n if (t > 0 && t < 1) {\n tvalues.push(t);\n }\n continue;\n }\n var b2ac = b * b - 4 * c * a;\n var sqrtb2ac = Math.sqrt(b2ac);\n if (b2ac < 0) {\n continue;\n }\n var t1 = (-b + sqrtb2ac) / (2 * a);\n if (t1 > 0 && t1 < 1) {\n tvalues.push(t1);\n }\n var t2 = (-b - sqrtb2ac) / (2 * a);\n if (t2 > 0 && t2 < 1) {\n tvalues.push(t2);\n }\n }\n var j = tvalues.length;\n var jlen = j;\n var mt;\n while (j--) {\n t = tvalues[j];\n mt = 1 - t;\n bounds[0][j] = mt * mt * mt * x0 + 3 * mt * mt * t * x1 + 3 * mt * t * t * x2 + t * t * t * x3;\n bounds[1][j] = mt * mt * mt * y0 + 3 * mt * mt * t * y1 + 3 * mt * t * t * y2 + t * t * t * y3;\n }\n bounds[0][jlen] = x0;\n bounds[1][jlen] = y0;\n bounds[0][jlen + 1] = x3;\n bounds[1][jlen + 1] = y3;\n bounds[0].length = bounds[1].length = jlen + 2;\n return {\n min: {\n x: Math.min.apply(0, bounds[0]),\n y: Math.min.apply(0, bounds[1]),\n },\n max: {\n x: Math.max.apply(0, bounds[0]),\n y: Math.max.apply(0, bounds[1]),\n },\n };\n};\nvar intersect = function (x1, y1, x2, y2, x3, y3, x4, y4) {\n if (Math.max(x1, x2) < Math.min(x3, x4) ||\n Math.min(x1, x2) > Math.max(x3, x4) ||\n Math.max(y1, y2) < Math.min(y3, y4) ||\n Math.min(y1, y2) > Math.max(y3, y4)) {\n return;\n }\n var nx = (x1 * y2 - y1 * x2) * (x3 - x4) - (x1 - x2) * (x3 * y4 - y3 * x4);\n var ny = (x1 * y2 - y1 * x2) * (y3 - y4) - (y1 - y2) * (x3 * y4 - y3 * x4);\n var denominator = (x1 - x2) * (y3 - y4) - (y1 - y2) * (x3 - x4);\n if (!denominator) {\n return;\n }\n var px = nx / denominator;\n var py = ny / denominator;\n var px2 = +px.toFixed(2);\n var py2 = +py.toFixed(2);\n if (px2 < +Math.min(x1, x2).toFixed(2) ||\n px2 > +Math.max(x1, x2).toFixed(2) ||\n px2 < +Math.min(x3, x4).toFixed(2) ||\n px2 > +Math.max(x3, x4).toFixed(2) ||\n py2 < +Math.min(y1, y2).toFixed(2) ||\n py2 > +Math.max(y1, y2).toFixed(2) ||\n py2 < +Math.min(y3, y4).toFixed(2) ||\n py2 > +Math.max(y3, y4).toFixed(2)) {\n return;\n }\n return {\n x: px,\n y: py,\n };\n};\nvar isPointInsideBBox = function (bbox, x, y) {\n return x >= bbox.x && x <= bbox.x + bbox.width && y >= bbox.y && y <= bbox.y + bbox.height;\n};\nvar rectPath = function (x, y, w, h, r) {\n if (r) {\n return [\n ['M', +x + +r, y],\n ['l', w - r * 2, 0],\n ['a', r, r, 0, 0, 1, r, r],\n ['l', 0, h - r * 2],\n ['a', r, r, 0, 0, 1, -r, r],\n ['l', r * 2 - w, 0],\n ['a', r, r, 0, 0, 1, -r, -r],\n ['l', 0, r * 2 - h],\n ['a', r, r, 0, 0, 1, r, -r],\n ['z'],\n ];\n }\n var res = [['M', x, y], ['l', w, 0], ['l', 0, h], ['l', -w, 0], ['z']];\n // @ts-ignore\n res.parsePathArray = parsePathArray;\n return res;\n};\nvar box = function (x, y, width, height) {\n if (x === null) {\n x = y = width = height = 0;\n }\n if (y === null) {\n y = x.y;\n width = x.width;\n height = x.height;\n x = x.x;\n }\n return {\n x: x,\n y: y,\n width: width,\n w: width,\n height: height,\n h: height,\n x2: x + width,\n y2: y + height,\n cx: x + width / 2,\n cy: y + height / 2,\n r1: Math.min(width, height) / 2,\n r2: Math.max(width, height) / 2,\n r0: Math.sqrt(width * width + height * height) / 2,\n path: rectPath(x, y, width, height),\n vb: [x, y, width, height].join(' '),\n };\n};\nvar isBBoxIntersect = function (bbox1, bbox2) {\n bbox1 = box(bbox1);\n bbox2 = box(bbox2);\n return (isPointInsideBBox(bbox2, bbox1.x, bbox1.y) ||\n isPointInsideBBox(bbox2, bbox1.x2, bbox1.y) ||\n isPointInsideBBox(bbox2, bbox1.x, bbox1.y2) ||\n isPointInsideBBox(bbox2, bbox1.x2, bbox1.y2) ||\n isPointInsideBBox(bbox1, bbox2.x, bbox2.y) ||\n isPointInsideBBox(bbox1, bbox2.x2, bbox2.y) ||\n isPointInsideBBox(bbox1, bbox2.x, bbox2.y2) ||\n isPointInsideBBox(bbox1, bbox2.x2, bbox2.y2) ||\n (((bbox1.x < bbox2.x2 && bbox1.x > bbox2.x) || (bbox2.x < bbox1.x2 && bbox2.x > bbox1.x)) &&\n ((bbox1.y < bbox2.y2 && bbox1.y > bbox2.y) || (bbox2.y < bbox1.y2 && bbox2.y > bbox1.y))));\n};\nvar bezierBBox = function (p1x, p1y, c1x, c1y, c2x, c2y, p2x, p2y) {\n if (!Object(_antv_util__WEBPACK_IMPORTED_MODULE_0__[\"isArray\"])(p1x)) {\n p1x = [p1x, p1y, c1x, c1y, c2x, c2y, p2x, p2y];\n }\n var bbox = curveDim.apply(null, p1x);\n return box(bbox.min.x, bbox.min.y, bbox.max.x - bbox.min.x, bbox.max.y - bbox.min.y);\n};\nvar findDotsAtSegment = function (p1x, p1y, c1x, c1y, c2x, c2y, p2x, p2y, t) {\n var t1 = 1 - t;\n var t13 = Math.pow(t1, 3);\n var t12 = Math.pow(t1, 2);\n var t2 = t * t;\n var t3 = t2 * t;\n var x = t13 * p1x + t12 * 3 * t * c1x + t1 * 3 * t * t * c2x + t3 * p2x;\n var y = t13 * p1y + t12 * 3 * t * c1y + t1 * 3 * t * t * c2y + t3 * p2y;\n var mx = p1x + 2 * t * (c1x - p1x) + t2 * (c2x - 2 * c1x + p1x);\n var my = p1y + 2 * t * (c1y - p1y) + t2 * (c2y - 2 * c1y + p1y);\n var nx = c1x + 2 * t * (c2x - c1x) + t2 * (p2x - 2 * c2x + c1x);\n var ny = c1y + 2 * t * (c2y - c1y) + t2 * (p2y - 2 * c2y + c1y);\n var ax = t1 * p1x + t * c1x;\n var ay = t1 * p1y + t * c1y;\n var cx = t1 * c2x + t * p2x;\n var cy = t1 * c2y + t * p2y;\n var alpha = 90 - (Math.atan2(mx - nx, my - ny) * 180) / Math.PI;\n // (mx > nx || my < ny) && (alpha += 180);\n return {\n x: x,\n y: y,\n m: {\n x: mx,\n y: my,\n },\n n: {\n x: nx,\n y: ny,\n },\n start: {\n x: ax,\n y: ay,\n },\n end: {\n x: cx,\n y: cy,\n },\n alpha: alpha,\n };\n};\nvar interHelper = function (bez1, bez2, justCount) {\n var bbox1 = bezierBBox(bez1);\n var bbox2 = bezierBBox(bez2);\n if (!isBBoxIntersect(bbox1, bbox2)) {\n return justCount ? 0 : [];\n }\n var l1 = bezlen.apply(0, bez1);\n var l2 = bezlen.apply(0, bez2);\n var n1 = ~~(l1 / 8);\n var n2 = ~~(l2 / 8);\n var dots1 = [];\n var dots2 = [];\n var xy = {};\n var res = justCount ? 0 : [];\n for (var i = 0; i < n1 + 1; i++) {\n var d = findDotsAtSegment.apply(0, bez1.concat(i / n1));\n dots1.push({\n x: d.x,\n y: d.y,\n t: i / n1,\n });\n }\n for (var i = 0; i < n2 + 1; i++) {\n var d = findDotsAtSegment.apply(0, bez2.concat(i / n2));\n dots2.push({\n x: d.x,\n y: d.y,\n t: i / n2,\n });\n }\n for (var i = 0; i < n1; i++) {\n for (var j = 0; j < n2; j++) {\n var di = dots1[i];\n var di1 = dots1[i + 1];\n var dj = dots2[j];\n var dj1 = dots2[j + 1];\n var ci = Math.abs(di1.x - di.x) < 0.001 ? 'y' : 'x';\n var cj = Math.abs(dj1.x - dj.x) < 0.001 ? 'y' : 'x';\n var is = intersect(di.x, di.y, di1.x, di1.y, dj.x, dj.y, dj1.x, dj1.y);\n if (is) {\n if (xy[is.x.toFixed(4)] === is.y.toFixed(4)) {\n continue;\n }\n xy[is.x.toFixed(4)] = is.y.toFixed(4);\n var t1 = di.t + Math.abs((is[ci] - di[ci]) / (di1[ci] - di[ci])) * (di1.t - di.t);\n var t2 = dj.t + Math.abs((is[cj] - dj[cj]) / (dj1[cj] - dj[cj])) * (dj1.t - dj.t);\n if (t1 >= 0 && t1 <= 1 && t2 >= 0 && t2 <= 1) {\n if (justCount) {\n // @ts-ignore\n res += 1;\n }\n else {\n // @ts-ignore\n res.push({\n x: is.x,\n y: is.y,\n t1: t1,\n t2: t2,\n });\n }\n }\n }\n }\n }\n return res;\n};\nvar interPathHelper = function (path1, path2, justCount) {\n path1 = pathToCurve(path1);\n path2 = pathToCurve(path2);\n var x1;\n var y1;\n var x2;\n var y2;\n var x1m;\n var y1m;\n var x2m;\n var y2m;\n var bez1;\n var bez2;\n var res = justCount ? 0 : [];\n for (var i = 0, ii = path1.length; i < ii; i++) {\n var pi = path1[i];\n if (pi[0] === 'M') {\n x1 = x1m = pi[1];\n y1 = y1m = pi[2];\n }\n else {\n if (pi[0] === 'C') {\n bez1 = [x1, y1].concat(pi.slice(1));\n x1 = bez1[6];\n y1 = bez1[7];\n }\n else {\n bez1 = [x1, y1, x1, y1, x1m, y1m, x1m, y1m];\n x1 = x1m;\n y1 = y1m;\n }\n for (var j = 0, jj = path2.length; j < jj; j++) {\n var pj = path2[j];\n if (pj[0] === 'M') {\n x2 = x2m = pj[1];\n y2 = y2m = pj[2];\n }\n else {\n if (pj[0] === 'C') {\n bez2 = [x2, y2].concat(pj.slice(1));\n x2 = bez2[6];\n y2 = bez2[7];\n }\n else {\n bez2 = [x2, y2, x2, y2, x2m, y2m, x2m, y2m];\n x2 = x2m;\n y2 = y2m;\n }\n var intr = interHelper(bez1, bez2, justCount);\n if (justCount) {\n // @ts-ignore\n res += intr;\n }\n else {\n // @ts-ignore\n for (var k = 0, kk = intr.length; k < kk; k++) {\n intr[k].segment1 = i;\n intr[k].segment2 = j;\n intr[k].bez1 = bez1;\n intr[k].bez2 = bez2;\n }\n // @ts-ignore\n res = res.concat(intr);\n }\n }\n }\n }\n }\n return res;\n};\nvar intersection = function (path1, path2) {\n return interPathHelper(path1, path2);\n};\nfunction decasteljau(points, t) {\n var left = [];\n var right = [];\n function recurse(points, t) {\n if (points.length === 1) {\n left.push(points[0]);\n right.push(points[0]);\n }\n else {\n var middlePoints = [];\n for (var i = 0; i < points.length - 1; i++) {\n if (i === 0) {\n left.push(points[0]);\n }\n if (i === points.length - 2) {\n right.push(points[i + 1]);\n }\n middlePoints[i] = [\n (1 - t) * points[i][0] + t * points[i + 1][0],\n (1 - t) * points[i][1] + t * points[i + 1][1],\n ];\n }\n recurse(middlePoints, t);\n }\n }\n if (points.length) {\n recurse(points, t);\n }\n return { left: left, right: right.reverse() };\n}\nfunction splitCurve(start, end, count) {\n var points = [[start[1], start[2]]];\n count = count || 2;\n var segments = [];\n if (end[0] === 'A') {\n points.push(end[6]);\n points.push(end[7]);\n }\n else if (end[0] === 'C') {\n points.push([end[1], end[2]]);\n points.push([end[3], end[4]]);\n points.push([end[5], end[6]]);\n }\n else if (end[0] === 'S' || end[0] === 'Q') {\n points.push([end[1], end[2]]);\n points.push([end[3], end[4]]);\n }\n else {\n points.push([end[1], end[2]]);\n }\n var leftSegments = points;\n var t = 1 / count;\n for (var i = 0; i < count - 1; i++) {\n var rt = t / (1 - t * i);\n var split = decasteljau(leftSegments, rt);\n segments.push(split.left);\n leftSegments = split.right;\n }\n segments.push(leftSegments);\n var result = segments.map(function (segment) {\n var cmd = [];\n if (segment.length === 4) {\n cmd.push('C');\n cmd = cmd.concat(segment[2]);\n }\n if (segment.length >= 3) {\n if (segment.length === 3) {\n cmd.push('Q');\n }\n cmd = cmd.concat(segment[1]);\n }\n if (segment.length === 2) {\n cmd.push('L');\n }\n cmd = cmd.concat(segment[segment.length - 1]);\n return cmd;\n });\n return result;\n}\nvar splitSegment = function (start, end, count) {\n if (count === 1) {\n return [[].concat(start)];\n }\n var segments = [];\n if (end[0] === 'L' || end[0] === 'C' || end[0] === 'Q') {\n segments = segments.concat(splitCurve(start, end, count));\n }\n else {\n var temp = [].concat(start);\n if (temp[0] === 'M') {\n temp[0] = 'L';\n }\n for (var i = 0; i <= count - 1; i++) {\n segments.push(temp);\n }\n }\n return segments;\n};\nvar fillPath = function (source, target) {\n if (source.length === 1) {\n return source;\n }\n var sourceLen = source.length - 1;\n var targetLen = target.length - 1;\n var ratio = sourceLen / targetLen;\n var segmentsToFill = [];\n if (source.length === 1 && source[0][0] === 'M') {\n for (var i = 0; i < targetLen - sourceLen; i++) {\n source.push(source[0]);\n }\n return source;\n }\n for (var i = 0; i < targetLen; i++) {\n var index = Math.floor(ratio * i);\n segmentsToFill[index] = (segmentsToFill[index] || 0) + 1;\n }\n var filled = segmentsToFill.reduce(function (filled, count, i) {\n if (i === sourceLen) {\n return filled.concat(source[sourceLen]);\n }\n return filled.concat(splitSegment(source[i], source[i + 1], count));\n }, []);\n filled.unshift(source[0]);\n if (target[targetLen] === 'Z' || target[targetLen] === 'z') {\n filled.push('Z');\n }\n return filled;\n};\nvar isEqual = function (obj1, obj2) {\n if (obj1.length !== obj2.length) {\n return false;\n }\n var result = true;\n Object(_antv_util__WEBPACK_IMPORTED_MODULE_0__[\"each\"])(obj1, function (item, i) {\n if (item !== obj2[i]) {\n result = false;\n return false;\n }\n });\n return result;\n};\nfunction getMinDiff(del, add, modify) {\n var type = null;\n var min = modify;\n if (add < min) {\n min = add;\n type = 'add';\n }\n if (del < min) {\n min = del;\n type = 'del';\n }\n return {\n type: type,\n min: min,\n };\n}\n/*\n * https://en.wikipedia.org/wiki/Levenshtein_distance\n * 计算两条path的编辑距离\n */\nvar levenshteinDistance = function (source, target) {\n var sourceLen = source.length;\n var targetLen = target.length;\n var sourceSegment;\n var targetSegment;\n var temp = 0;\n if (sourceLen === 0 || targetLen === 0) {\n return null;\n }\n var dist = [];\n for (var i = 0; i <= sourceLen; i++) {\n dist[i] = [];\n dist[i][0] = { min: i };\n }\n for (var j = 0; j <= targetLen; j++) {\n dist[0][j] = { min: j };\n }\n for (var i = 1; i <= sourceLen; i++) {\n sourceSegment = source[i - 1];\n for (var j = 1; j <= targetLen; j++) {\n targetSegment = target[j - 1];\n if (isEqual(sourceSegment, targetSegment)) {\n temp = 0;\n }\n else {\n temp = 1;\n }\n var del = dist[i - 1][j].min + 1;\n var add = dist[i][j - 1].min + 1;\n var modify = dist[i - 1][j - 1].min + temp;\n dist[i][j] = getMinDiff(del, add, modify);\n }\n }\n return dist;\n};\nvar fillPathByDiff = function (source, target) {\n var diffMatrix = levenshteinDistance(source, target);\n var sourceLen = source.length;\n var targetLen = target.length;\n var changes = [];\n var index = 1;\n var minPos = 1;\n // 如果source和target不是完全不相等\n if (diffMatrix[sourceLen][targetLen].min !== sourceLen) {\n // 获取从source到target所需改动\n for (var i = 1; i <= sourceLen; i++) {\n var min = diffMatrix[i][i].min;\n minPos = i;\n for (var j = index; j <= targetLen; j++) {\n if (diffMatrix[i][j].min < min) {\n min = diffMatrix[i][j].min;\n minPos = j;\n }\n }\n index = minPos;\n if (diffMatrix[i][index].type) {\n changes.push({ index: i - 1, type: diffMatrix[i][index].type });\n }\n }\n // 对source进行增删path\n for (var i = changes.length - 1; i >= 0; i--) {\n index = changes[i].index;\n if (changes[i].type === 'add') {\n source.splice(index, 0, [].concat(source[index]));\n }\n else {\n source.splice(index, 1);\n }\n }\n }\n // source尾部补齐\n sourceLen = source.length;\n var diff = targetLen - sourceLen;\n if (sourceLen < targetLen) {\n for (var i = 0; i < diff; i++) {\n if (source[sourceLen - 1][0] === 'z' || source[sourceLen - 1][0] === 'Z') {\n source.splice(sourceLen - 2, 0, source[sourceLen - 2]);\n }\n else {\n source.push(source[sourceLen - 1]);\n }\n sourceLen += 1;\n }\n }\n return source;\n};\n// 将两个点均分成count个点\nfunction _splitPoints(points, former, count) {\n var result = [].concat(points);\n var index;\n var t = 1 / (count + 1);\n var formerEnd = _getSegmentPoints(former)[0];\n for (var i = 1; i <= count; i++) {\n t *= i;\n index = Math.floor(points.length * t);\n if (index === 0) {\n result.unshift([formerEnd[0] * t + points[index][0] * (1 - t), formerEnd[1] * t + points[index][1] * (1 - t)]);\n }\n else {\n result.splice(index, 0, [\n formerEnd[0] * t + points[index][0] * (1 - t),\n formerEnd[1] * t + points[index][1] * (1 - t),\n ]);\n }\n }\n return result;\n}\n/*\n * 抽取pathSegment中的关键点\n * M,L,A,Q,H,V一个端点\n * Q, S抽取一个端点,一个控制点\n * C抽取一个端点,两个控制点\n */\nfunction _getSegmentPoints(segment) {\n var points = [];\n switch (segment[0]) {\n case 'M':\n points.push([segment[1], segment[2]]);\n break;\n case 'L':\n points.push([segment[1], segment[2]]);\n break;\n case 'A':\n points.push([segment[6], segment[7]]);\n break;\n case 'Q':\n points.push([segment[3], segment[4]]);\n points.push([segment[1], segment[2]]);\n break;\n case 'T':\n points.push([segment[1], segment[2]]);\n break;\n case 'C':\n points.push([segment[5], segment[6]]);\n points.push([segment[1], segment[2]]);\n points.push([segment[3], segment[4]]);\n break;\n case 'S':\n points.push([segment[3], segment[4]]);\n points.push([segment[1], segment[2]]);\n break;\n case 'H':\n points.push([segment[1], segment[1]]);\n break;\n case 'V':\n points.push([segment[1], segment[1]]);\n break;\n default:\n }\n return points;\n}\nvar formatPath = function (fromPath, toPath) {\n if (fromPath.length <= 1) {\n return fromPath;\n }\n var points;\n for (var i = 0; i < toPath.length; i++) {\n if (fromPath[i][0] !== toPath[i][0]) {\n // 获取fromPath的pathSegment的端点,根据toPath的指令对其改造\n points = _getSegmentPoints(fromPath[i]);\n switch (toPath[i][0]) {\n case 'M':\n fromPath[i] = ['M'].concat(points[0]);\n break;\n case 'L':\n fromPath[i] = ['L'].concat(points[0]);\n break;\n case 'A':\n fromPath[i] = [].concat(toPath[i]);\n fromPath[i][6] = points[0][0];\n fromPath[i][7] = points[0][1];\n break;\n case 'Q':\n if (points.length < 2) {\n if (i > 0) {\n points = _splitPoints(points, fromPath[i - 1], 1);\n }\n else {\n fromPath[i] = toPath[i];\n break;\n }\n }\n fromPath[i] = ['Q'].concat(points.reduce(function (arr, i) {\n return arr.concat(i);\n }, []));\n break;\n case 'T':\n fromPath[i] = ['T'].concat(points[0]);\n break;\n case 'C':\n if (points.length < 3) {\n if (i > 0) {\n points = _splitPoints(points, fromPath[i - 1], 2);\n }\n else {\n fromPath[i] = toPath[i];\n break;\n }\n }\n fromPath[i] = ['C'].concat(points.reduce(function (arr, i) {\n return arr.concat(i);\n }, []));\n break;\n case 'S':\n if (points.length < 2) {\n if (i > 0) {\n points = _splitPoints(points, fromPath[i - 1], 1);\n }\n else {\n fromPath[i] = toPath[i];\n break;\n }\n }\n fromPath[i] = ['S'].concat(points.reduce(function (arr, i) {\n return arr.concat(i);\n }, []));\n break;\n default:\n fromPath[i] = toPath[i];\n }\n }\n }\n return fromPath;\n};\n\n//# sourceMappingURL=path.js.map\n\n//# sourceURL=webpack:///./node_modules/@antv/g-base/esm/util/path.js?");
/***/ }),
/***/ "./node_modules/@antv/g-base/esm/util/text.js":
/*!****************************************************!*\
!*** ./node_modules/@antv/g-base/esm/util/text.js ***!
\****************************************************/
/*! exports provided: getTextHeight, getLineSpaceing, getTextWidth, assembleFont */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"getTextHeight\", function() { return getTextHeight; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"getLineSpaceing\", function() { return getLineSpaceing; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"getTextWidth\", function() { return getTextWidth; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"assembleFont\", function() { return assembleFont; });\n/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./util */ \"./node_modules/@antv/g-base/esm/util/util.js\");\n/* harmony import */ var _offscreen__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./offscreen */ \"./node_modules/@antv/g-base/esm/util/offscreen.js\");\n\n\n/**\n * 获取文本的高度\n * @param text 文本\n * @param fontSize 字体大小\n * @param lineHeight 行高,可以为空\n */\nfunction getTextHeight(text, fontSize, lineHeight) {\n var lineCount = 1;\n if (Object(_util__WEBPACK_IMPORTED_MODULE_0__[\"isString\"])(text)) {\n lineCount = text.split('\\n').length;\n }\n if (lineCount > 1) {\n var spaceingY = getLineSpaceing(fontSize, lineHeight);\n return fontSize * lineCount + spaceingY * (lineCount - 1);\n }\n return fontSize;\n}\n/**\n * 获取行间距如果文本多行,需要获取文本间距\n * @param fontSize 字体大小\n * @param lineHeight 行高\n */\nfunction getLineSpaceing(fontSize, lineHeight) {\n return lineHeight ? lineHeight - fontSize : fontSize * 0.14;\n}\n/**\n * 字体宽度\n * @param text 文本\n * @param font 字体\n */\nfunction getTextWidth(text, font) {\n var context = Object(_offscreen__WEBPACK_IMPORTED_MODULE_1__[\"getOffScreenContext\"])(); // 获取离屏的 ctx 进行计算\n var width = 0;\n // null 或者 undefined 时,宽度为 0\n if (Object(_util__WEBPACK_IMPORTED_MODULE_0__[\"isNil\"])(text) || text === '') {\n return width;\n }\n context.save();\n context.font = font;\n if (Object(_util__WEBPACK_IMPORTED_MODULE_0__[\"isString\"])(text) && text.includes('\\n')) {\n var textArr = text.split('\\n');\n Object(_util__WEBPACK_IMPORTED_MODULE_0__[\"each\"])(textArr, function (subText) {\n var measureWidth = context.measureText(subText).width;\n if (width < measureWidth) {\n width = measureWidth;\n }\n });\n }\n else {\n width = context.measureText(text).width;\n }\n context.restore();\n return width;\n}\nfunction assembleFont(attrs) {\n var fontSize = attrs.fontSize, fontFamily = attrs.fontFamily, fontWeight = attrs.fontWeight, fontStyle = attrs.fontStyle, fontVariant = attrs.fontVariant;\n return [fontStyle, fontVariant, fontWeight, fontSize + \"px\", fontFamily].join(' ').trim();\n}\n//# sourceMappingURL=text.js.map\n\n//# sourceURL=webpack:///./node_modules/@antv/g-base/esm/util/text.js?");
/***/ }),
/***/ "./node_modules/@antv/g-base/esm/util/util.js":
/*!****************************************************!*\
!*** ./node_modules/@antv/g-base/esm/util/util.js ***!
\****************************************************/
/*! exports provided: removeFromArray, isBrowser, isNil, isFunction, isString, isObject, isArray, mix, each, upperFirst, isParent, isAllowCapture */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"removeFromArray\", function() { return removeFromArray; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"isBrowser\", function() { return isBrowser; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"isParent\", function() { return isParent; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"isAllowCapture\", function() { return isAllowCapture; });\n/* harmony import */ var _antv_util__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @antv/util */ \"./node_modules/@antv/util/esm/index.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"isNil\", function() { return _antv_util__WEBPACK_IMPORTED_MODULE_0__[\"isNil\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"isFunction\", function() { return _antv_util__WEBPACK_IMPORTED_MODULE_0__[\"isFunction\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"isString\", function() { return _antv_util__WEBPACK_IMPORTED_MODULE_0__[\"isString\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"isObject\", function() { return _antv_util__WEBPACK_IMPORTED_MODULE_0__[\"isObject\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"isArray\", function() { return _antv_util__WEBPACK_IMPORTED_MODULE_0__[\"isArray\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"mix\", function() { return _antv_util__WEBPACK_IMPORTED_MODULE_0__[\"mix\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"each\", function() { return _antv_util__WEBPACK_IMPORTED_MODULE_0__[\"each\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"upperFirst\", function() { return _antv_util__WEBPACK_IMPORTED_MODULE_0__[\"upperFirst\"]; });\n\nfunction removeFromArray(arr, obj) {\n var index = arr.indexOf(obj);\n if (index !== -1) {\n arr.splice(index, 1);\n }\n}\nvar isBrowser = typeof window !== 'undefined' && typeof window.document !== 'undefined';\n\n// 是否元素的父容器\nfunction isParent(container, shape) {\n // 所有 shape 都是 canvas 的子元素\n if (container.isCanvas()) {\n return true;\n }\n var parent = shape.getParent();\n var isParent = false;\n while (parent) {\n if (parent === container) {\n isParent = true;\n break;\n }\n parent = parent.getParent();\n }\n return isParent;\n}\nfunction isAllowCapture(element) {\n // @ts-ignore\n return element.cfg.visible && element.cfg.capture;\n}\n//# sourceMappingURL=util.js.map\n\n//# sourceURL=webpack:///./node_modules/@antv/g-base/esm/util/util.js?");
/***/ }),
/***/ "./node_modules/@antv/g-base/node_modules/d3-interpolate/src/array.js":
/*!****************************************************************************!*\
!*** ./node_modules/@antv/g-base/node_modules/d3-interpolate/src/array.js ***!
\****************************************************************************/
/*! exports provided: default, genericArray */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"genericArray\", function() { return genericArray; });\n/* harmony import */ var _value_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./value.js */ \"./node_modules/@antv/g-base/node_modules/d3-interpolate/src/value.js\");\n/* harmony import */ var _numberArray_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./numberArray.js */ \"./node_modules/@antv/g-base/node_modules/d3-interpolate/src/numberArray.js\");\n\n\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (function(a, b) {\n return (Object(_numberArray_js__WEBPACK_IMPORTED_MODULE_1__[\"isNumberArray\"])(b) ? _numberArray_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"] : genericArray)(a, b);\n});\n\nfunction genericArray(a, b) {\n var nb = b ? b.length : 0,\n na = a ? Math.min(nb, a.length) : 0,\n x = new Array(na),\n c = new Array(nb),\n i;\n\n for (i = 0; i < na; ++i) x[i] = Object(_value_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(a[i], b[i]);\n for (; i < nb; ++i) c[i] = b[i];\n\n return function(t) {\n for (i = 0; i < na; ++i) c[i] = x[i](t);\n return c;\n };\n}\n\n\n//# sourceURL=webpack:///./node_modules/@antv/g-base/node_modules/d3-interpolate/src/array.js?");
/***/ }),
/***/ "./node_modules/@antv/g-base/node_modules/d3-interpolate/src/basis.js":
/*!****************************************************************************!*\
!*** ./node_modules/@antv/g-base/node_modules/d3-interpolate/src/basis.js ***!
\****************************************************************************/
/*! exports provided: basis, default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"basis\", function() { return basis; });\nfunction basis(t1, v0, v1, v2, v3) {\n var t2 = t1 * t1, t3 = t2 * t1;\n return ((1 - 3 * t1 + 3 * t2 - t3) * v0\n + (4 - 6 * t2 + 3 * t3) * v1\n + (1 + 3 * t1 + 3 * t2 - 3 * t3) * v2\n + t3 * v3) / 6;\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (function(values) {\n var n = values.length - 1;\n return function(t) {\n var i = t <= 0 ? (t = 0) : t >= 1 ? (t = 1, n - 1) : Math.floor(t * n),\n v1 = values[i],\n v2 = values[i + 1],\n v0 = i > 0 ? values[i - 1] : 2 * v1 - v2,\n v3 = i < n - 1 ? values[i + 2] : 2 * v2 - v1;\n return basis((t - i / n) * n, v0, v1, v2, v3);\n };\n});\n\n\n//# sourceURL=webpack:///./node_modules/@antv/g-base/node_modules/d3-interpolate/src/basis.js?");
/***/ }),
/***/ "./node_modules/@antv/g-base/node_modules/d3-interpolate/src/basisClosed.js":
/*!**********************************************************************************!*\
!*** ./node_modules/@antv/g-base/node_modules/d3-interpolate/src/basisClosed.js ***!
\**********************************************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _basis_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./basis.js */ \"./node_modules/@antv/g-base/node_modules/d3-interpolate/src/basis.js\");\n\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (function(values) {\n var n = values.length;\n return function(t) {\n var i = Math.floor(((t %= 1) < 0 ? ++t : t) * n),\n v0 = values[(i + n - 1) % n],\n v1 = values[i % n],\n v2 = values[(i + 1) % n],\n v3 = values[(i + 2) % n];\n return Object(_basis_js__WEBPACK_IMPORTED_MODULE_0__[\"basis\"])((t - i / n) * n, v0, v1, v2, v3);\n };\n});\n\n\n//# sourceURL=webpack:///./node_modules/@antv/g-base/node_modules/d3-interpolate/src/basisClosed.js?");
/***/ }),
/***/ "./node_modules/@antv/g-base/node_modules/d3-interpolate/src/color.js":
/*!****************************************************************************!*\
!*** ./node_modules/@antv/g-base/node_modules/d3-interpolate/src/color.js ***!
\****************************************************************************/
/*! exports provided: hue, gamma, default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"hue\", function() { return hue; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"gamma\", function() { return gamma; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return nogamma; });\n/* harmony import */ var _constant_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./constant.js */ \"./node_modules/@antv/g-base/node_modules/d3-interpolate/src/constant.js\");\n\n\nfunction linear(a, d) {\n return function(t) {\n return a + t * d;\n };\n}\n\nfunction exponential(a, b, y) {\n return a = Math.pow(a, y), b = Math.pow(b, y) - a, y = 1 / y, function(t) {\n return Math.pow(a + t * b, y);\n };\n}\n\nfunction hue(a, b) {\n var d = b - a;\n return d ? linear(a, d > 180 || d < -180 ? d - 360 * Math.round(d / 360) : d) : Object(_constant_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(isNaN(a) ? b : a);\n}\n\nfunction gamma(y) {\n return (y = +y) === 1 ? nogamma : function(a, b) {\n return b - a ? exponential(a, b, y) : Object(_constant_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(isNaN(a) ? b : a);\n };\n}\n\nfunction nogamma(a, b) {\n var d = b - a;\n return d ? linear(a, d) : Object(_constant_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(isNaN(a) ? b : a);\n}\n\n\n//# sourceURL=webpack:///./node_modules/@antv/g-base/node_modules/d3-interpolate/src/color.js?");
/***/ }),
/***/ "./node_modules/@antv/g-base/node_modules/d3-interpolate/src/constant.js":
/*!*******************************************************************************!*\
!*** ./node_modules/@antv/g-base/node_modules/d3-interpolate/src/constant.js ***!
\*******************************************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony default export */ __webpack_exports__[\"default\"] = (x => () => x);\n\n\n//# sourceURL=webpack:///./node_modules/@antv/g-base/node_modules/d3-interpolate/src/constant.js?");
/***/ }),
/***/ "./node_modules/@antv/g-base/node_modules/d3-interpolate/src/cubehelix.js":
/*!********************************************************************************!*\
!*** ./node_modules/@antv/g-base/node_modules/d3-interpolate/src/cubehelix.js ***!
\********************************************************************************/
/*! exports provided: default, cubehelixLong */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"cubehelixLong\", function() { return cubehelixLong; });\n/* harmony import */ var d3_color__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! d3-color */ \"./node_modules/d3-color/src/index.js\");\n/* harmony import */ var _color_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./color.js */ \"./node_modules/@antv/g-base/node_modules/d3-interpolate/src/color.js\");\n\n\n\nfunction cubehelix(hue) {\n return (function cubehelixGamma(y) {\n y = +y;\n\n function cubehelix(start, end) {\n var h = hue((start = Object(d3_color__WEBPACK_IMPORTED_MODULE_0__[\"cubehelix\"])(start)).h, (end = Object(d3_color__WEBPACK_IMPORTED_MODULE_0__[\"cubehelix\"])(end)).h),\n s = Object(_color_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(start.s, end.s),\n l = Object(_color_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(start.l, end.l),\n opacity = Object(_color_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(start.opacity, end.opacity);\n return function(t) {\n start.h = h(t);\n start.s = s(t);\n start.l = l(Math.pow(t, y));\n start.opacity = opacity(t);\n return start + \"\";\n };\n }\n\n cubehelix.gamma = cubehelixGamma;\n\n return cubehelix;\n })(1);\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (cubehelix(_color_js__WEBPACK_IMPORTED_MODULE_1__[\"hue\"]));\nvar cubehelixLong = cubehelix(_color_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"]);\n\n\n//# sourceURL=webpack:///./node_modules/@antv/g-base/node_modules/d3-interpolate/src/cubehelix.js?");
/***/ }),
/***/ "./node_modules/@antv/g-base/node_modules/d3-interpolate/src/date.js":
/*!***************************************************************************!*\
!*** ./node_modules/@antv/g-base/node_modules/d3-interpolate/src/date.js ***!
\***************************************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony default export */ __webpack_exports__[\"default\"] = (function(a, b) {\n var d = new Date;\n return a = +a, b = +b, function(t) {\n return d.setTime(a * (1 - t) + b * t), d;\n };\n});\n\n\n//# sourceURL=webpack:///./node_modules/@antv/g-base/node_modules/d3-interpolate/src/date.js?");
/***/ }),
/***/ "./node_modules/@antv/g-base/node_modules/d3-interpolate/src/discrete.js":
/*!*******************************************************************************!*\
!*** ./node_modules/@antv/g-base/node_modules/d3-interpolate/src/discrete.js ***!
\*******************************************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony default export */ __webpack_exports__[\"default\"] = (function(range) {\n var n = range.length;\n return function(t) {\n return range[Math.max(0, Math.min(n - 1, Math.floor(t * n)))];\n };\n});\n\n\n//# sourceURL=webpack:///./node_modules/@antv/g-base/node_modules/d3-interpolate/src/discrete.js?");
/***/ }),
/***/ "./node_modules/@antv/g-base/node_modules/d3-interpolate/src/hcl.js":
/*!**************************************************************************!*\
!*** ./node_modules/@antv/g-base/node_modules/d3-interpolate/src/hcl.js ***!
\**************************************************************************/
/*! exports provided: default, hclLong */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"hclLong\", function() { return hclLong; });\n/* harmony import */ var d3_color__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! d3-color */ \"./node_modules/d3-color/src/index.js\");\n/* harmony import */ var _color_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./color.js */ \"./node_modules/@antv/g-base/node_modules/d3-interpolate/src/color.js\");\n\n\n\nfunction hcl(hue) {\n return function(start, end) {\n var h = hue((start = Object(d3_color__WEBPACK_IMPORTED_MODULE_0__[\"hcl\"])(start)).h, (end = Object(d3_color__WEBPACK_IMPORTED_MODULE_0__[\"hcl\"])(end)).h),\n c = Object(_color_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(start.c, end.c),\n l = Object(_color_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(start.l, end.l),\n opacity = Object(_color_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(start.opacity, end.opacity);\n return function(t) {\n start.h = h(t);\n start.c = c(t);\n start.l = l(t);\n start.opacity = opacity(t);\n return start + \"\";\n };\n }\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (hcl(_color_js__WEBPACK_IMPORTED_MODULE_1__[\"hue\"]));\nvar hclLong = hcl(_color_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"]);\n\n\n//# sourceURL=webpack:///./node_modules/@antv/g-base/node_modules/d3-interpolate/src/hcl.js?");
/***/ }),
/***/ "./node_modules/@antv/g-base/node_modules/d3-interpolate/src/hsl.js":
/*!**************************************************************************!*\
!*** ./node_modules/@antv/g-base/node_modules/d3-interpolate/src/hsl.js ***!
\**************************************************************************/
/*! exports provided: default, hslLong */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"hslLong\", function() { return hslLong; });\n/* harmony import */ var d3_color__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! d3-color */ \"./node_modules/d3-color/src/index.js\");\n/* harmony import */ var _color_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./color.js */ \"./node_modules/@antv/g-base/node_modules/d3-interpolate/src/color.js\");\n\n\n\nfunction hsl(hue) {\n return function(start, end) {\n var h = hue((start = Object(d3_color__WEBPACK_IMPORTED_MODULE_0__[\"hsl\"])(start)).h, (end = Object(d3_color__WEBPACK_IMPORTED_MODULE_0__[\"hsl\"])(end)).h),\n s = Object(_color_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(start.s, end.s),\n l = Object(_color_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(start.l, end.l),\n opacity = Object(_color_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(start.opacity, end.opacity);\n return function(t) {\n start.h = h(t);\n start.s = s(t);\n start.l = l(t);\n start.opacity = opacity(t);\n return start + \"\";\n };\n }\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (hsl(_color_js__WEBPACK_IMPORTED_MODULE_1__[\"hue\"]));\nvar hslLong = hsl(_color_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"]);\n\n\n//# sourceURL=webpack:///./node_modules/@antv/g-base/node_modules/d3-interpolate/src/hsl.js?");
/***/ }),
/***/ "./node_modules/@antv/g-base/node_modules/d3-interpolate/src/hue.js":
/*!**************************************************************************!*\
!*** ./node_modules/@antv/g-base/node_modules/d3-interpolate/src/hue.js ***!
\**************************************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _color_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./color.js */ \"./node_modules/@antv/g-base/node_modules/d3-interpolate/src/color.js\");\n\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (function(a, b) {\n var i = Object(_color_js__WEBPACK_IMPORTED_MODULE_0__[\"hue\"])(+a, +b);\n return function(t) {\n var x = i(t);\n return x - 360 * Math.floor(x / 360);\n };\n});\n\n\n//# sourceURL=webpack:///./node_modules/@antv/g-base/node_modules/d3-interpolate/src/hue.js?");
/***/ }),
/***/ "./node_modules/@antv/g-base/node_modules/d3-interpolate/src/index.js":
/*!****************************************************************************!*\
!*** ./node_modules/@antv/g-base/node_modules/d3-interpolate/src/index.js ***!
\****************************************************************************/
/*! exports provided: interpolate, interpolateArray, interpolateBasis, interpolateBasisClosed, interpolateDate, interpolateDiscrete, interpolateHue, interpolateNumber, interpolateNumberArray, interpolateObject, interpolateRound, interpolateString, interpolateTransformCss, interpolateTransformSvg, interpolateZoom, interpolateRgb, interpolateRgbBasis, interpolateRgbBasisClosed, interpolateHsl, interpolateHslLong, interpolateLab, interpolateHcl, interpolateHclLong, interpolateCubehelix, interpolateCubehelixLong, piecewise, quantize */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _value_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./value.js */ \"./node_modules/@antv/g-base/node_modules/d3-interpolate/src/value.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"interpolate\", function() { return _value_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"]; });\n\n/* harmony import */ var _array_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./array.js */ \"./node_modules/@antv/g-base/node_modules/d3-interpolate/src/array.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"interpolateArray\", function() { return _array_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"]; });\n\n/* harmony import */ var _basis_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./basis.js */ \"./node_modules/@antv/g-base/node_modules/d3-interpolate/src/basis.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"interpolateBasis\", function() { return _basis_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"]; });\n\n/* harmony import */ var _basisClosed_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./basisClosed.js */ \"./node_modules/@antv/g-base/node_modules/d3-interpolate/src/basisClosed.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"interpolateBasisClosed\", function() { return _basisClosed_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"]; });\n\n/* harmony import */ var _date_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./date.js */ \"./node_modules/@antv/g-base/node_modules/d3-interpolate/src/date.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"interpolateDate\", function() { return _date_js__WEBPACK_IMPORTED_MODULE_4__[\"default\"]; });\n\n/* harmony import */ var _discrete_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./discrete.js */ \"./node_modules/@antv/g-base/node_modules/d3-interpolate/src/discrete.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"interpolateDiscrete\", function() { return _discrete_js__WEBPACK_IMPORTED_MODULE_5__[\"default\"]; });\n\n/* harmony import */ var _hue_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./hue.js */ \"./node_modules/@antv/g-base/node_modules/d3-interpolate/src/hue.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"interpolateHue\", function() { return _hue_js__WEBPACK_IMPORTED_MODULE_6__[\"default\"]; });\n\n/* harmony import */ var _number_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./number.js */ \"./node_modules/@antv/g-base/node_modules/d3-interpolate/src/number.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"interpolateNumber\", function() { return _number_js__WEBPACK_IMPORTED_MODULE_7__[\"default\"]; });\n\n/* harmony import */ var _numberArray_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./numberArray.js */ \"./node_modules/@antv/g-base/node_modules/d3-interpolate/src/numberArray.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"interpolateNumberArray\", function() { return _numberArray_js__WEBPACK_IMPORTED_MODULE_8__[\"default\"]; });\n\n/* harmony import */ var _object_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./object.js */ \"./node_modules/@antv/g-base/node_modules/d3-interpolate/src/object.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"interpolateObject\", function() { return _object_js__WEBPACK_IMPORTED_MODULE_9__[\"default\"]; });\n\n/* harmony import */ var _round_js__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./round.js */ \"./node_modules/@antv/g-base/node_modules/d3-interpolate/src/round.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"interpolateRound\", function() { return _round_js__WEBPACK_IMPORTED_MODULE_10__[\"default\"]; });\n\n/* harmony import */ var _string_js__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./string.js */ \"./node_modules/@antv/g-base/node_modules/d3-interpolate/src/string.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"interpolateString\", function() { return _string_js__WEBPACK_IMPORTED_MODULE_11__[\"default\"]; });\n\n/* harmony import */ var _transform_index_js__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./transform/index.js */ \"./node_modules/@antv/g-base/node_modules/d3-interpolate/src/transform/index.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"interpolateTransformCss\", function() { return _transform_index_js__WEBPACK_IMPORTED_MODULE_12__[\"interpolateTransformCss\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"interpolateTransformSvg\", function() { return _transform_index_js__WEBPACK_IMPORTED_MODULE_12__[\"interpolateTransformSvg\"]; });\n\n/* harmony import */ var _zoom_js__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./zoom.js */ \"./node_modules/@antv/g-base/node_modules/d3-interpolate/src/zoom.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"interpolateZoom\", function() { return _zoom_js__WEBPACK_IMPORTED_MODULE_13__[\"default\"]; });\n\n/* harmony import */ var _rgb_js__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ./rgb.js */ \"./node_modules/@antv/g-base/node_modules/d3-interpolate/src/rgb.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"interpolateRgb\", function() { return _rgb_js__WEBPACK_IMPORTED_MODULE_14__[\"default\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"interpolateRgbBasis\", function() { return _rgb_js__WEBPACK_IMPORTED_MODULE_14__[\"rgbBasis\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"interpolateRgbBasisClosed\", function() { return _rgb_js__WEBPACK_IMPORTED_MODULE_14__[\"rgbBasisClosed\"]; });\n\n/* harmony import */ var _hsl_js__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ./hsl.js */ \"./node_modules/@antv/g-base/node_modules/d3-interpolate/src/hsl.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"interpolateHsl\", function() { return _hsl_js__WEBPACK_IMPORTED_MODULE_15__[\"default\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"interpolateHslLong\", function() { return _hsl_js__WEBPACK_IMPORTED_MODULE_15__[\"hslLong\"]; });\n\n/* harmony import */ var _lab_js__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ./lab.js */ \"./node_modules/@antv/g-base/node_modules/d3-interpolate/src/lab.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"interpolateLab\", function() { return _lab_js__WEBPACK_IMPORTED_MODULE_16__[\"default\"]; });\n\n/* harmony import */ var _hcl_js__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! ./hcl.js */ \"./node_modules/@antv/g-base/node_modules/d3-interpolate/src/hcl.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"interpolateHcl\", function() { return _hcl_js__WEBPACK_IMPORTED_MODULE_17__[\"default\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"interpolateHclLong\", function() { return _hcl_js__WEBPACK_IMPORTED_MODULE_17__[\"hclLong\"]; });\n\n/* harmony import */ var _cubehelix_js__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! ./cubehelix.js */ \"./node_modules/@antv/g-base/node_modules/d3-interpolate/src/cubehelix.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"interpolateCubehelix\", function() { return _cubehelix_js__WEBPACK_IMPORTED_MODULE_18__[\"default\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"interpolateCubehelixLong\", function() { return _cubehelix_js__WEBPACK_IMPORTED_MODULE_18__[\"cubehelixLong\"]; });\n\n/* harmony import */ var _piecewise_js__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! ./piecewise.js */ \"./node_modules/@antv/g-base/node_modules/d3-interpolate/src/piecewise.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"piecewise\", function() { return _piecewise_js__WEBPACK_IMPORTED_MODULE_19__[\"default\"]; });\n\n/* harmony import */ var _quantize_js__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! ./quantize.js */ \"./node_modules/@antv/g-base/node_modules/d3-interpolate/src/quantize.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"quantize\", function() { return _quantize_js__WEBPACK_IMPORTED_MODULE_20__[\"default\"]; });\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n//# sourceURL=webpack:///./node_modules/@antv/g-base/node_modules/d3-interpolate/src/index.js?");
/***/ }),
/***/ "./node_modules/@antv/g-base/node_modules/d3-interpolate/src/lab.js":
/*!**************************************************************************!*\
!*** ./node_modules/@antv/g-base/node_modules/d3-interpolate/src/lab.js ***!
\**************************************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return lab; });\n/* harmony import */ var d3_color__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! d3-color */ \"./node_modules/d3-color/src/index.js\");\n/* harmony import */ var _color_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./color.js */ \"./node_modules/@antv/g-base/node_modules/d3-interpolate/src/color.js\");\n\n\n\nfunction lab(start, end) {\n var l = Object(_color_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])((start = Object(d3_color__WEBPACK_IMPORTED_MODULE_0__[\"lab\"])(start)).l, (end = Object(d3_color__WEBPACK_IMPORTED_MODULE_0__[\"lab\"])(end)).l),\n a = Object(_color_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(start.a, end.a),\n b = Object(_color_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(start.b, end.b),\n opacity = Object(_color_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(start.opacity, end.opacity);\n return function(t) {\n start.l = l(t);\n start.a = a(t);\n start.b = b(t);\n start.opacity = opacity(t);\n return start + \"\";\n };\n}\n\n\n//# sourceURL=webpack:///./node_modules/@antv/g-base/node_modules/d3-interpolate/src/lab.js?");
/***/ }),
/***/ "./node_modules/@antv/g-base/node_modules/d3-interpolate/src/number.js":
/*!*****************************************************************************!*\
!*** ./node_modules/@antv/g-base/node_modules/d3-interpolate/src/number.js ***!
\*****************************************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony default export */ __webpack_exports__[\"default\"] = (function(a, b) {\n return a = +a, b = +b, function(t) {\n return a * (1 - t) + b * t;\n };\n});\n\n\n//# sourceURL=webpack:///./node_modules/@antv/g-base/node_modules/d3-interpolate/src/number.js?");
/***/ }),
/***/ "./node_modules/@antv/g-base/node_modules/d3-interpolate/src/numberArray.js":
/*!**********************************************************************************!*\
!*** ./node_modules/@antv/g-base/node_modules/d3-interpolate/src/numberArray.js ***!
\**********************************************************************************/
/*! exports provided: default, isNumberArray */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"isNumberArray\", function() { return isNumberArray; });\n/* harmony default export */ __webpack_exports__[\"default\"] = (function(a, b) {\n if (!b) b = [];\n var n = a ? Math.min(b.length, a.length) : 0,\n c = b.slice(),\n i;\n return function(t) {\n for (i = 0; i < n; ++i) c[i] = a[i] * (1 - t) + b[i] * t;\n return c;\n };\n});\n\nfunction isNumberArray(x) {\n return ArrayBuffer.isView(x) && !(x instanceof DataView);\n}\n\n\n//# sourceURL=webpack:///./node_modules/@antv/g-base/node_modules/d3-interpolate/src/numberArray.js?");
/***/ }),
/***/ "./node_modules/@antv/g-base/node_modules/d3-interpolate/src/object.js":
/*!*****************************************************************************!*\
!*** ./node_modules/@antv/g-base/node_modules/d3-interpolate/src/object.js ***!
\*****************************************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _value_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./value.js */ \"./node_modules/@antv/g-base/node_modules/d3-interpolate/src/value.js\");\n\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (function(a, b) {\n var i = {},\n c = {},\n k;\n\n if (a === null || typeof a !== \"object\") a = {};\n if (b === null || typeof b !== \"object\") b = {};\n\n for (k in b) {\n if (k in a) {\n i[k] = Object(_value_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(a[k], b[k]);\n } else {\n c[k] = b[k];\n }\n }\n\n return function(t) {\n for (k in i) c[k] = i[k](t);\n return c;\n };\n});\n\n\n//# sourceURL=webpack:///./node_modules/@antv/g-base/node_modules/d3-interpolate/src/object.js?");
/***/ }),
/***/ "./node_modules/@antv/g-base/node_modules/d3-interpolate/src/piecewise.js":
/*!********************************************************************************!*\
!*** ./node_modules/@antv/g-base/node_modules/d3-interpolate/src/piecewise.js ***!
\********************************************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return piecewise; });\n/* harmony import */ var _value_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./value.js */ \"./node_modules/@antv/g-base/node_modules/d3-interpolate/src/value.js\");\n\n\nfunction piecewise(interpolate, values) {\n if (values === undefined) values = interpolate, interpolate = _value_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"];\n var i = 0, n = values.length - 1, v = values[0], I = new Array(n < 0 ? 0 : n);\n while (i < n) I[i] = interpolate(v, v = values[++i]);\n return function(t) {\n var i = Math.max(0, Math.min(n - 1, Math.floor(t *= n)));\n return I[i](t - i);\n };\n}\n\n\n//# sourceURL=webpack:///./node_modules/@antv/g-base/node_modules/d3-interpolate/src/piecewise.js?");
/***/ }),
/***/ "./node_modules/@antv/g-base/node_modules/d3-interpolate/src/quantize.js":
/*!*******************************************************************************!*\
!*** ./node_modules/@antv/g-base/node_modules/d3-interpolate/src/quantize.js ***!
\*******************************************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony default export */ __webpack_exports__[\"default\"] = (function(interpolator, n) {\n var samples = new Array(n);\n for (var i = 0; i < n; ++i) samples[i] = interpolator(i / (n - 1));\n return samples;\n});\n\n\n//# sourceURL=webpack:///./node_modules/@antv/g-base/node_modules/d3-interpolate/src/quantize.js?");
/***/ }),
/***/ "./node_modules/@antv/g-base/node_modules/d3-interpolate/src/rgb.js":
/*!**************************************************************************!*\
!*** ./node_modules/@antv/g-base/node_modules/d3-interpolate/src/rgb.js ***!
\**************************************************************************/
/*! exports provided: default, rgbBasis, rgbBasisClosed */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"rgbBasis\", function() { return rgbBasis; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"rgbBasisClosed\", function() { return rgbBasisClosed; });\n/* harmony import */ var d3_color__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! d3-color */ \"./node_modules/d3-color/src/index.js\");\n/* harmony import */ var _basis_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./basis.js */ \"./node_modules/@antv/g-base/node_modules/d3-interpolate/src/basis.js\");\n/* harmony import */ var _basisClosed_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./basisClosed.js */ \"./node_modules/@antv/g-base/node_modules/d3-interpolate/src/basisClosed.js\");\n/* harmony import */ var _color_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./color.js */ \"./node_modules/@antv/g-base/node_modules/d3-interpolate/src/color.js\");\n\n\n\n\n\n/* harmony default export */ __webpack_exports__[\"default\"] = ((function rgbGamma(y) {\n var color = Object(_color_js__WEBPACK_IMPORTED_MODULE_3__[\"gamma\"])(y);\n\n function rgb(start, end) {\n var r = color((start = Object(d3_color__WEBPACK_IMPORTED_MODULE_0__[\"rgb\"])(start)).r, (end = Object(d3_color__WEBPACK_IMPORTED_MODULE_0__[\"rgb\"])(end)).r),\n g = color(start.g, end.g),\n b = color(start.b, end.b),\n opacity = Object(_color_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"])(start.opacity, end.opacity);\n return function(t) {\n start.r = r(t);\n start.g = g(t);\n start.b = b(t);\n start.opacity = opacity(t);\n return start + \"\";\n };\n }\n\n rgb.gamma = rgbGamma;\n\n return rgb;\n})(1));\n\nfunction rgbSpline(spline) {\n return function(colors) {\n var n = colors.length,\n r = new Array(n),\n g = new Array(n),\n b = new Array(n),\n i, color;\n for (i = 0; i < n; ++i) {\n color = Object(d3_color__WEBPACK_IMPORTED_MODULE_0__[\"rgb\"])(colors[i]);\n r[i] = color.r || 0;\n g[i] = color.g || 0;\n b[i] = color.b || 0;\n }\n r = spline(r);\n g = spline(g);\n b = spline(b);\n color.opacity = 1;\n return function(t) {\n color.r = r(t);\n color.g = g(t);\n color.b = b(t);\n return color + \"\";\n };\n };\n}\n\nvar rgbBasis = rgbSpline(_basis_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"]);\nvar rgbBasisClosed = rgbSpline(_basisClosed_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"]);\n\n\n//# sourceURL=webpack:///./node_modules/@antv/g-base/node_modules/d3-interpolate/src/rgb.js?");
/***/ }),
/***/ "./node_modules/@antv/g-base/node_modules/d3-interpolate/src/round.js":
/*!****************************************************************************!*\
!*** ./node_modules/@antv/g-base/node_modules/d3-interpolate/src/round.js ***!
\****************************************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony default export */ __webpack_exports__[\"default\"] = (function(a, b) {\n return a = +a, b = +b, function(t) {\n return Math.round(a * (1 - t) + b * t);\n };\n});\n\n\n//# sourceURL=webpack:///./node_modules/@antv/g-base/node_modules/d3-interpolate/src/round.js?");
/***/ }),
/***/ "./node_modules/@antv/g-base/node_modules/d3-interpolate/src/string.js":
/*!*****************************************************************************!*\
!*** ./node_modules/@antv/g-base/node_modules/d3-interpolate/src/string.js ***!
\*****************************************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _number_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./number.js */ \"./node_modules/@antv/g-base/node_modules/d3-interpolate/src/number.js\");\n\n\nvar reA = /[-+]?(?:\\d+\\.?\\d*|\\.?\\d+)(?:[eE][-+]?\\d+)?/g,\n reB = new RegExp(reA.source, \"g\");\n\nfunction zero(b) {\n return function() {\n return b;\n };\n}\n\nfunction one(b) {\n return function(t) {\n return b(t) + \"\";\n };\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (function(a, b) {\n var bi = reA.lastIndex = reB.lastIndex = 0, // scan index for next number in b\n am, // current match in a\n bm, // current match in b\n bs, // string preceding current number in b, if any\n i = -1, // index in s\n s = [], // string constants and placeholders\n q = []; // number interpolators\n\n // Coerce inputs to strings.\n a = a + \"\", b = b + \"\";\n\n // Interpolate pairs of numbers in a & b.\n while ((am = reA.exec(a))\n && (bm = reB.exec(b))) {\n if ((bs = bm.index) > bi) { // a string precedes the next number in b\n bs = b.slice(bi, bs);\n if (s[i]) s[i] += bs; // coalesce with previous string\n else s[++i] = bs;\n }\n if ((am = am[0]) === (bm = bm[0])) { // numbers in a & b match\n if (s[i]) s[i] += bm; // coalesce with previous string\n else s[++i] = bm;\n } else { // interpolate non-matching numbers\n s[++i] = null;\n q.push({i: i, x: Object(_number_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(am, bm)});\n }\n bi = reB.lastIndex;\n }\n\n // Add remains of b.\n if (bi < b.length) {\n bs = b.slice(bi);\n if (s[i]) s[i] += bs; // coalesce with previous string\n else s[++i] = bs;\n }\n\n // Special optimization for only a single match.\n // Otherwise, interpolate each of the numbers and rejoin the string.\n return s.length < 2 ? (q[0]\n ? one(q[0].x)\n : zero(b))\n : (b = q.length, function(t) {\n for (var i = 0, o; i < b; ++i) s[(o = q[i]).i] = o.x(t);\n return s.join(\"\");\n });\n});\n\n\n//# sourceURL=webpack:///./node_modules/@antv/g-base/node_modules/d3-interpolate/src/string.js?");
/***/ }),
/***/ "./node_modules/@antv/g-base/node_modules/d3-interpolate/src/transform/decompose.js":
/*!******************************************************************************************!*\
!*** ./node_modules/@antv/g-base/node_modules/d3-interpolate/src/transform/decompose.js ***!
\******************************************************************************************/
/*! exports provided: identity, default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"identity\", function() { return identity; });\nvar degrees = 180 / Math.PI;\n\nvar identity = {\n translateX: 0,\n translateY: 0,\n rotate: 0,\n skewX: 0,\n scaleX: 1,\n scaleY: 1\n};\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (function(a, b, c, d, e, f) {\n var scaleX, scaleY, skewX;\n if (scaleX = Math.sqrt(a * a + b * b)) a /= scaleX, b /= scaleX;\n if (skewX = a * c + b * d) c -= a * skewX, d -= b * skewX;\n if (scaleY = Math.sqrt(c * c + d * d)) c /= scaleY, d /= scaleY, skewX /= scaleY;\n if (a * d < b * c) a = -a, b = -b, skewX = -skewX, scaleX = -scaleX;\n return {\n translateX: e,\n translateY: f,\n rotate: Math.atan2(b, a) * degrees,\n skewX: Math.atan(skewX) * degrees,\n scaleX: scaleX,\n scaleY: scaleY\n };\n});\n\n\n//# sourceURL=webpack:///./node_modules/@antv/g-base/node_modules/d3-interpolate/src/transform/decompose.js?");
/***/ }),
/***/ "./node_modules/@antv/g-base/node_modules/d3-interpolate/src/transform/index.js":
/*!**************************************************************************************!*\
!*** ./node_modules/@antv/g-base/node_modules/d3-interpolate/src/transform/index.js ***!
\**************************************************************************************/
/*! exports provided: interpolateTransformCss, interpolateTransformSvg */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"interpolateTransformCss\", function() { return interpolateTransformCss; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"interpolateTransformSvg\", function() { return interpolateTransformSvg; });\n/* harmony import */ var _number_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../number.js */ \"./node_modules/@antv/g-base/node_modules/d3-interpolate/src/number.js\");\n/* harmony import */ var _parse_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./parse.js */ \"./node_modules/@antv/g-base/node_modules/d3-interpolate/src/transform/parse.js\");\n\n\n\nfunction interpolateTransform(parse, pxComma, pxParen, degParen) {\n\n function pop(s) {\n return s.length ? s.pop() + \" \" : \"\";\n }\n\n function translate(xa, ya, xb, yb, s, q) {\n if (xa !== xb || ya !== yb) {\n var i = s.push(\"translate(\", null, pxComma, null, pxParen);\n q.push({i: i - 4, x: Object(_number_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(xa, xb)}, {i: i - 2, x: Object(_number_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(ya, yb)});\n } else if (xb || yb) {\n s.push(\"translate(\" + xb + pxComma + yb + pxParen);\n }\n }\n\n function rotate(a, b, s, q) {\n if (a !== b) {\n if (a - b > 180) b += 360; else if (b - a > 180) a += 360; // shortest path\n q.push({i: s.push(pop(s) + \"rotate(\", null, degParen) - 2, x: Object(_number_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(a, b)});\n } else if (b) {\n s.push(pop(s) + \"rotate(\" + b + degParen);\n }\n }\n\n function skewX(a, b, s, q) {\n if (a !== b) {\n q.push({i: s.push(pop(s) + \"skewX(\", null, degParen) - 2, x: Object(_number_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(a, b)});\n } else if (b) {\n s.push(pop(s) + \"skewX(\" + b + degParen);\n }\n }\n\n function scale(xa, ya, xb, yb, s, q) {\n if (xa !== xb || ya !== yb) {\n var i = s.push(pop(s) + \"scale(\", null, \",\", null, \")\");\n q.push({i: i - 4, x: Object(_number_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(xa, xb)}, {i: i - 2, x: Object(_number_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(ya, yb)});\n } else if (xb !== 1 || yb !== 1) {\n s.push(pop(s) + \"scale(\" + xb + \",\" + yb + \")\");\n }\n }\n\n return function(a, b) {\n var s = [], // string constants and placeholders\n q = []; // number interpolators\n a = parse(a), b = parse(b);\n translate(a.translateX, a.translateY, b.translateX, b.translateY, s, q);\n rotate(a.rotate, b.rotate, s, q);\n skewX(a.skewX, b.skewX, s, q);\n scale(a.scaleX, a.scaleY, b.scaleX, b.scaleY, s, q);\n a = b = null; // gc\n return function(t) {\n var i = -1, n = q.length, o;\n while (++i < n) s[(o = q[i]).i] = o.x(t);\n return s.join(\"\");\n };\n };\n}\n\nvar interpolateTransformCss = interpolateTransform(_parse_js__WEBPACK_IMPORTED_MODULE_1__[\"parseCss\"], \"px, \", \"px)\", \"deg)\");\nvar interpolateTransformSvg = interpolateTransform(_parse_js__WEBPACK_IMPORTED_MODULE_1__[\"parseSvg\"], \", \", \")\", \")\");\n\n\n//# sourceURL=webpack:///./node_modules/@antv/g-base/node_modules/d3-interpolate/src/transform/index.js?");
/***/ }),
/***/ "./node_modules/@antv/g-base/node_modules/d3-interpolate/src/transform/parse.js":
/*!**************************************************************************************!*\
!*** ./node_modules/@antv/g-base/node_modules/d3-interpolate/src/transform/parse.js ***!
\**************************************************************************************/
/*! exports provided: parseCss, parseSvg */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"parseCss\", function() { return parseCss; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"parseSvg\", function() { return parseSvg; });\n/* harmony import */ var _decompose_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./decompose.js */ \"./node_modules/@antv/g-base/node_modules/d3-interpolate/src/transform/decompose.js\");\n\n\nvar svgNode;\n\n/* eslint-disable no-undef */\nfunction parseCss(value) {\n const m = new (typeof DOMMatrix === \"function\" ? DOMMatrix : WebKitCSSMatrix)(value + \"\");\n return m.isIdentity ? _decompose_js__WEBPACK_IMPORTED_MODULE_0__[\"identity\"] : Object(_decompose_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(m.a, m.b, m.c, m.d, m.e, m.f);\n}\n\nfunction parseSvg(value) {\n if (value == null) return _decompose_js__WEBPACK_IMPORTED_MODULE_0__[\"identity\"];\n if (!svgNode) svgNode = document.createElementNS(\"http://www.w3.org/2000/svg\", \"g\");\n svgNode.setAttribute(\"transform\", value);\n if (!(value = svgNode.transform.baseVal.consolidate())) return _decompose_js__WEBPACK_IMPORTED_MODULE_0__[\"identity\"];\n value = value.matrix;\n return Object(_decompose_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(value.a, value.b, value.c, value.d, value.e, value.f);\n}\n\n\n//# sourceURL=webpack:///./node_modules/@antv/g-base/node_modules/d3-interpolate/src/transform/parse.js?");
/***/ }),
/***/ "./node_modules/@antv/g-base/node_modules/d3-interpolate/src/value.js":
/*!****************************************************************************!*\
!*** ./node_modules/@antv/g-base/node_modules/d3-interpolate/src/value.js ***!
\****************************************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var d3_color__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! d3-color */ \"./node_modules/d3-color/src/index.js\");\n/* harmony import */ var _rgb_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./rgb.js */ \"./node_modules/@antv/g-base/node_modules/d3-interpolate/src/rgb.js\");\n/* harmony import */ var _array_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./array.js */ \"./node_modules/@antv/g-base/node_modules/d3-interpolate/src/array.js\");\n/* harmony import */ var _date_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./date.js */ \"./node_modules/@antv/g-base/node_modules/d3-interpolate/src/date.js\");\n/* harmony import */ var _number_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./number.js */ \"./node_modules/@antv/g-base/node_modules/d3-interpolate/src/number.js\");\n/* harmony import */ var _object_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./object.js */ \"./node_modules/@antv/g-base/node_modules/d3-interpolate/src/object.js\");\n/* harmony import */ var _string_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./string.js */ \"./node_modules/@antv/g-base/node_modules/d3-interpolate/src/string.js\");\n/* harmony import */ var _constant_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./constant.js */ \"./node_modules/@antv/g-base/node_modules/d3-interpolate/src/constant.js\");\n/* harmony import */ var _numberArray_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./numberArray.js */ \"./node_modules/@antv/g-base/node_modules/d3-interpolate/src/numberArray.js\");\n\n\n\n\n\n\n\n\n\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (function(a, b) {\n var t = typeof b, c;\n return b == null || t === \"boolean\" ? Object(_constant_js__WEBPACK_IMPORTED_MODULE_7__[\"default\"])(b)\n : (t === \"number\" ? _number_js__WEBPACK_IMPORTED_MODULE_4__[\"default\"]\n : t === \"string\" ? ((c = Object(d3_color__WEBPACK_IMPORTED_MODULE_0__[\"color\"])(b)) ? (b = c, _rgb_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"]) : _string_js__WEBPACK_IMPORTED_MODULE_6__[\"default\"])\n : b instanceof d3_color__WEBPACK_IMPORTED_MODULE_0__[\"color\"] ? _rgb_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"]\n : b instanceof Date ? _date_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"]\n : Object(_numberArray_js__WEBPACK_IMPORTED_MODULE_8__[\"isNumberArray\"])(b) ? _numberArray_js__WEBPACK_IMPORTED_MODULE_8__[\"default\"]\n : Array.isArray(b) ? _array_js__WEBPACK_IMPORTED_MODULE_2__[\"genericArray\"]\n : typeof b.valueOf !== \"function\" && typeof b.toString !== \"function\" || isNaN(b) ? _object_js__WEBPACK_IMPORTED_MODULE_5__[\"default\"]\n : _number_js__WEBPACK_IMPORTED_MODULE_4__[\"default\"])(a, b);\n});\n\n\n//# sourceURL=webpack:///./node_modules/@antv/g-base/node_modules/d3-interpolate/src/value.js?");
/***/ }),
/***/ "./node_modules/@antv/g-base/node_modules/d3-interpolate/src/zoom.js":
/*!***************************************************************************!*\
!*** ./node_modules/@antv/g-base/node_modules/d3-interpolate/src/zoom.js ***!
\***************************************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\nvar epsilon2 = 1e-12;\n\nfunction cosh(x) {\n return ((x = Math.exp(x)) + 1 / x) / 2;\n}\n\nfunction sinh(x) {\n return ((x = Math.exp(x)) - 1 / x) / 2;\n}\n\nfunction tanh(x) {\n return ((x = Math.exp(2 * x)) - 1) / (x + 1);\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = ((function zoomRho(rho, rho2, rho4) {\n\n // p0 = [ux0, uy0, w0]\n // p1 = [ux1, uy1, w1]\n function zoom(p0, p1) {\n var ux0 = p0[0], uy0 = p0[1], w0 = p0[2],\n ux1 = p1[0], uy1 = p1[1], w1 = p1[2],\n dx = ux1 - ux0,\n dy = uy1 - uy0,\n d2 = dx * dx + dy * dy,\n i,\n S;\n\n // Special case for u0 ≅ u1.\n if (d2 < epsilon2) {\n S = Math.log(w1 / w0) / rho;\n i = function(t) {\n return [\n ux0 + t * dx,\n uy0 + t * dy,\n w0 * Math.exp(rho * t * S)\n ];\n }\n }\n\n // General case.\n else {\n var d1 = Math.sqrt(d2),\n b0 = (w1 * w1 - w0 * w0 + rho4 * d2) / (2 * w0 * rho2 * d1),\n b1 = (w1 * w1 - w0 * w0 - rho4 * d2) / (2 * w1 * rho2 * d1),\n r0 = Math.log(Math.sqrt(b0 * b0 + 1) - b0),\n r1 = Math.log(Math.sqrt(b1 * b1 + 1) - b1);\n S = (r1 - r0) / rho;\n i = function(t) {\n var s = t * S,\n coshr0 = cosh(r0),\n u = w0 / (rho2 * d1) * (coshr0 * tanh(rho * s + r0) - sinh(r0));\n return [\n ux0 + u * dx,\n uy0 + u * dy,\n w0 * coshr0 / cosh(rho * s + r0)\n ];\n }\n }\n\n i.duration = S * 1000 * rho / Math.SQRT2;\n\n return i;\n }\n\n zoom.rho = function(_) {\n var _1 = Math.max(1e-3, +_), _2 = _1 * _1, _4 = _2 * _2;\n return zoomRho(_1, _2, _4);\n };\n\n return zoom;\n})(Math.SQRT2, 2, 4));\n\n\n//# sourceURL=webpack:///./node_modules/@antv/g-base/node_modules/d3-interpolate/src/zoom.js?");
/***/ }),
/***/ "./node_modules/@antv/g-canvas/esm/canvas.js":
/*!***************************************************!*\
!*** ./node_modules/@antv/g-canvas/esm/canvas.js ***!
\***************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tslib */ \"./node_modules/tslib/tslib.es6.js\");\n/* harmony import */ var _antv_g_base__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @antv/g-base */ \"./node_modules/@antv/g-base/esm/index.js\");\n/* harmony import */ var _util_hit__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./util/hit */ \"./node_modules/@antv/g-canvas/esm/util/hit.js\");\n/* harmony import */ var _shape__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./shape */ \"./node_modules/@antv/g-canvas/esm/shape/index.js\");\n/* harmony import */ var _group__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./group */ \"./node_modules/@antv/g-canvas/esm/group.js\");\n/* harmony import */ var _util_util__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./util/util */ \"./node_modules/@antv/g-canvas/esm/util/util.js\");\n/* harmony import */ var _util_draw__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./util/draw */ \"./node_modules/@antv/g-canvas/esm/util/draw.js\");\n\n\n\n\n\n\n\nvar Canvas = /** @class */ (function (_super) {\n Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__extends\"])(Canvas, _super);\n function Canvas() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n Canvas.prototype.getDefaultCfg = function () {\n var cfg = _super.prototype.getDefaultCfg.call(this);\n // 设置渲染引擎为 canvas,只读属性\n cfg['renderer'] = 'canvas';\n // 是否自动绘制,不需要用户调用 draw 方法\n cfg['autoDraw'] = true;\n // 是否允许局部刷新图表\n cfg['localRefresh'] = true;\n cfg['refreshElements'] = [];\n // 是否在视图内自动裁剪\n cfg['clipView'] = true;\n // 是否使用快速拾取的方案,默认为 false,上层可以打开\n cfg['quickHit'] = false;\n return cfg;\n };\n /**\n * 一些方法调用会引起画布变化\n * @param {ChangeType} changeType 改变的类型\n */\n Canvas.prototype.onCanvasChange = function (changeType) {\n /**\n * 触发画布更新的三种 changeType\n * 1. attr: 修改画布的绘图属性\n * 2. sort: 画布排序,图形的层次会发生变化\n * 3. changeSize: 改变画布大小\n */\n if (changeType === 'attr' || changeType === 'sort' || changeType === 'changeSize') {\n this.set('refreshElements', [this]);\n this.draw();\n }\n };\n Canvas.prototype.getShapeBase = function () {\n return _shape__WEBPACK_IMPORTED_MODULE_3__;\n };\n Canvas.prototype.getGroupBase = function () {\n return _group__WEBPACK_IMPORTED_MODULE_4__[\"default\"];\n };\n /**\n * 获取屏幕像素比\n */\n Canvas.prototype.getPixelRatio = function () {\n var pixelRatio = this.get('pixelRatio') || Object(_util_util__WEBPACK_IMPORTED_MODULE_5__[\"getPixelRatio\"])();\n // 不足 1 的取 1,超出 1 的取整\n return pixelRatio >= 1 ? Math.ceil(pixelRatio) : 1;\n };\n Canvas.prototype.getViewRange = function () {\n return {\n minX: 0,\n minY: 0,\n maxX: this.cfg.width,\n maxY: this.cfg.height,\n };\n };\n // 复写基类的方法生成标签\n Canvas.prototype.createDom = function () {\n var element = document.createElement('canvas');\n var context = element.getContext('2d');\n // 缓存 context 对象\n this.set('context', context);\n return element;\n };\n Canvas.prototype.setDOMSize = function (width, height) {\n _super.prototype.setDOMSize.call(this, width, height);\n var context = this.get('context');\n var el = this.get('el');\n var pixelRatio = this.getPixelRatio();\n el.width = pixelRatio * width;\n el.height = pixelRatio * height;\n // 设置 canvas 元素的宽度和高度,会重置缩放,因此 context.scale 需要在每次设置宽、高后调用\n if (pixelRatio > 1) {\n context.scale(pixelRatio, pixelRatio);\n }\n };\n // 复写基类方法\n Canvas.prototype.clear = function () {\n _super.prototype.clear.call(this);\n this._clearFrame(); // 需要清理掉延迟绘制的帧\n var context = this.get('context');\n var element = this.get('el');\n context.clearRect(0, 0, element.width, element.height);\n };\n Canvas.prototype.getShape = function (x, y) {\n var shape;\n if (this.get('quickHit')) {\n shape = Object(_util_hit__WEBPACK_IMPORTED_MODULE_2__[\"getShape\"])(this, x, y);\n }\n else {\n shape = _super.prototype.getShape.call(this, x, y, null);\n }\n return shape;\n };\n // 对绘制区域边缘取整,避免浮点数问题\n Canvas.prototype._getRefreshRegion = function () {\n var elements = this.get('refreshElements');\n var viewRegion = this.getViewRange();\n var region;\n // 如果是当前画布整体发生了变化,则直接重绘整个画布\n if (elements.length && elements[0] === this) {\n region = viewRegion;\n }\n else {\n region = Object(_util_draw__WEBPACK_IMPORTED_MODULE_6__[\"getMergedRegion\"])(elements);\n if (region) {\n region.minX = Math.floor(region.minX);\n region.minY = Math.floor(region.minY);\n region.maxX = Math.ceil(region.maxX);\n region.maxY = Math.ceil(region.maxY);\n region.maxY += 1; // 在很多环境下字体的高低会不一致,附加一像素,避免残影\n var clipView = this.get('clipView');\n // 自动裁剪不在 view 内的区域\n if (clipView) {\n region = Object(_util_draw__WEBPACK_IMPORTED_MODULE_6__[\"mergeView\"])(region, viewRegion);\n }\n }\n }\n return region;\n };\n /**\n * 刷新图形元素,这里仅仅是放入队列,下次绘制时进行绘制\n * @param {IElement} element 图形元素\n */\n Canvas.prototype.refreshElement = function (element) {\n var refreshElements = this.get('refreshElements');\n refreshElements.push(element);\n // if (this.get('autoDraw')) {\n // this._startDraw();\n // }\n };\n // 清理还在进行的绘制\n Canvas.prototype._clearFrame = function () {\n var drawFrame = this.get('drawFrame');\n if (drawFrame) {\n // 如果全部渲染时,存在局部渲染,则抛弃掉局部渲染\n Object(_util_util__WEBPACK_IMPORTED_MODULE_5__[\"clearAnimationFrame\"])(drawFrame);\n this.set('drawFrame', null);\n this.set('refreshElements', []);\n }\n };\n // 手工调用绘制接口\n Canvas.prototype.draw = function () {\n var drawFrame = this.get('drawFrame');\n if (this.get('autoDraw') && drawFrame) {\n return;\n }\n this._startDraw();\n };\n // 绘制所有图形\n Canvas.prototype._drawAll = function () {\n var context = this.get('context');\n var element = this.get('el');\n var children = this.getChildren();\n context.clearRect(0, 0, element.width, element.height);\n Object(_util_draw__WEBPACK_IMPORTED_MODULE_6__[\"applyAttrsToContext\"])(context, this);\n Object(_util_draw__WEBPACK_IMPORTED_MODULE_6__[\"drawChildren\"])(context, children);\n // 对于 https://github.com/antvis/g/issues/422 的场景,全局渲染的模式下也会记录更新的元素队列,因此全局渲染完后也需要置空\n this.set('refreshElements', []);\n };\n // 绘制局部\n Canvas.prototype._drawRegion = function () {\n var context = this.get('context');\n var refreshElements = this.get('refreshElements');\n var children = this.getChildren();\n var region = this._getRefreshRegion();\n // 需要注意可能没有 region 的场景\n // 一般发生在设置了 localRefresh ,在没有图形发生变化的情况下,用户调用了 draw\n if (region) {\n // 清理指定区域\n context.clearRect(region.minX, region.minY, region.maxX - region.minX, region.maxY - region.minY);\n // 保存上下文,设置 clip\n context.save();\n context.beginPath();\n context.rect(region.minX, region.minY, region.maxX - region.minX, region.maxY - region.minY);\n context.clip();\n Object(_util_draw__WEBPACK_IMPORTED_MODULE_6__[\"applyAttrsToContext\"])(context, this);\n // 确认更新的元素,这个优化可以提升 10 倍左右的性能,10W 个带有 group 的节点,局部渲染会从 90ms 下降到 5-6 ms\n Object(_util_draw__WEBPACK_IMPORTED_MODULE_6__[\"checkRefresh\"])(this, children, region);\n // 绘制子元素\n Object(_util_draw__WEBPACK_IMPORTED_MODULE_6__[\"drawChildren\"])(context, children, region);\n context.restore();\n }\n else if (refreshElements.length) {\n // 防止发生改变的 elements 没有 region 的场景,这会发生在多个情况下\n // 1. 空的 group\n // 2. 所有 elements 没有在绘图区域\n // 3. group 下面的 elements 隐藏掉\n // 如果不进行清理 hasChanged 的状态会不正确\n Object(_util_draw__WEBPACK_IMPORTED_MODULE_6__[\"clearChanged\"])(refreshElements);\n }\n Object(_util_util__WEBPACK_IMPORTED_MODULE_5__[\"each\"])(refreshElements, function (element) {\n if (element.get('hasChanged')) {\n // 在视窗外的 Group 元素会加入到更新队列里,但实际却没有执行 draw() 逻辑,也就没有清除 hasChanged 标记\n // 即已经重绘完、但 hasChanged 标记没有清除的元素,需要统一清除掉。主要是 Group 存在问题,具体原因待排查\n element.set('hasChanged', false);\n }\n });\n this.set('refreshElements', []);\n };\n // 触发绘制\n Canvas.prototype._startDraw = function () {\n var _this = this;\n var drawFrame = this.get('drawFrame');\n if (!drawFrame) {\n drawFrame = Object(_util_util__WEBPACK_IMPORTED_MODULE_5__[\"requestAnimationFrame\"])(function () {\n if (_this.get('localRefresh')) {\n _this._drawRegion();\n }\n else {\n _this._drawAll();\n }\n _this.set('drawFrame', null);\n });\n this.set('drawFrame', drawFrame);\n }\n };\n Canvas.prototype.skipDraw = function () { };\n Canvas.prototype.removeDom = function () {\n var el = this.get('el');\n // 需要清理 canvas 画布内容,否则ios下 创建的canvas垃圾未回收,导致Total canvas memory use exceeds问题\n // 相关问题列表\n // https://stackoverflow.com/questions/52532614/total-canvas-memory-use-exceeds-the-maximum-limit-safari-12\n // https://github.com/openlayers/openlayers/issues/9291\n el.width = 0;\n el.height = 0;\n el.parentNode.removeChild(el);\n };\n return Canvas;\n}(_antv_g_base__WEBPACK_IMPORTED_MODULE_1__[\"AbstractCanvas\"]));\n/* harmony default export */ __webpack_exports__[\"default\"] = (Canvas);\n//# sourceMappingURL=canvas.js.map\n\n//# sourceURL=webpack:///./node_modules/@antv/g-canvas/esm/canvas.js?");
/***/ }),
/***/ "./node_modules/@antv/g-canvas/esm/group.js":
/*!**************************************************!*\
!*** ./node_modules/@antv/g-canvas/esm/group.js ***!
\**************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tslib */ \"./node_modules/tslib/tslib.es6.js\");\n/* harmony import */ var _antv_g_base__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @antv/g-base */ \"./node_modules/@antv/g-base/esm/index.js\");\n/* harmony import */ var _shape__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./shape */ \"./node_modules/@antv/g-canvas/esm/shape/index.js\");\n/* harmony import */ var _util_draw__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./util/draw */ \"./node_modules/@antv/g-canvas/esm/util/draw.js\");\n/* harmony import */ var _antv_util__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @antv/util */ \"./node_modules/@antv/util/esm/index.js\");\n/* harmony import */ var _util_util__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./util/util */ \"./node_modules/@antv/g-canvas/esm/util/util.js\");\n\n\n\n\n\n\nvar Group = /** @class */ (function (_super) {\n Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__extends\"])(Group, _super);\n function Group() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * 一些方法调用会引起画布变化\n * @param {ChangeType} changeType 改变的类型\n */\n Group.prototype.onCanvasChange = function (changeType) {\n Object(_util_draw__WEBPACK_IMPORTED_MODULE_3__[\"refreshElement\"])(this, changeType);\n };\n Group.prototype.getShapeBase = function () {\n return _shape__WEBPACK_IMPORTED_MODULE_2__;\n };\n Group.prototype.getGroupBase = function () {\n return Group;\n };\n // 同 shape 中的方法重复了\n Group.prototype._applyClip = function (context, clip) {\n if (clip) {\n context.save();\n // 将 clip 的属性挂载到 context 上\n Object(_util_draw__WEBPACK_IMPORTED_MODULE_3__[\"applyAttrsToContext\"])(context, clip);\n // 绘制 clip 路径\n clip.createPath(context);\n context.restore();\n // 裁剪\n context.clip();\n clip._afterDraw();\n }\n };\n // 这个方法以前直接使用的 getCanvasBBox,由于 group 上没有缓存,所以每次重新计算,导致性能开销比较大\n // 大概能够节省全局渲染 15-20% 的性能,如果不在这里加缓存优化后 10W 个节点无法达到 5-6 ms,大概能够 30-40ms\n Group.prototype.cacheCanvasBBox = function () {\n var children = this.cfg.children;\n var xArr = [];\n var yArr = [];\n Object(_antv_util__WEBPACK_IMPORTED_MODULE_4__[\"each\"])(children, function (child) {\n var bbox = child.cfg.cacheCanvasBBox;\n // isInview 的判定是一旦图形或者分组渲染就要计算是否在视图内,\n // 这个判定 10W 个图形下差不多能够节省 5-6 ms 的开销\n if (bbox && child.cfg.isInView) {\n xArr.push(bbox.minX, bbox.maxX);\n yArr.push(bbox.minY, bbox.maxY);\n }\n });\n var bbox = null;\n if (xArr.length) {\n var minX = Object(_antv_util__WEBPACK_IMPORTED_MODULE_4__[\"min\"])(xArr);\n var maxX = Object(_antv_util__WEBPACK_IMPORTED_MODULE_4__[\"max\"])(xArr);\n var minY = Object(_antv_util__WEBPACK_IMPORTED_MODULE_4__[\"min\"])(yArr);\n var maxY = Object(_antv_util__WEBPACK_IMPORTED_MODULE_4__[\"max\"])(yArr);\n bbox = {\n minX: minX,\n minY: minY,\n x: minX,\n y: minY,\n maxX: maxX,\n maxY: maxY,\n width: maxX - minX,\n height: maxY - minY,\n };\n var canvas = this.cfg.canvas;\n if (canvas) {\n var viewRange = canvas.getViewRange();\n // 如果这个地方判定 isInView == false 设置 bbox 为 false 的话,拾取的性能会更高\n // 但是目前 10W 图形的拾取在 2-5ms 内,这个优化意义不大,可以后期观察再看\n this.set('isInView', Object(_util_util__WEBPACK_IMPORTED_MODULE_5__[\"intersectRect\"])(bbox, viewRange));\n }\n }\n else {\n this.set('isInView', false);\n }\n this.set('cacheCanvasBBox', bbox);\n };\n Group.prototype.draw = function (context, region) {\n var children = this.cfg.children;\n var allowDraw = region ? this.cfg.refresh : true; // 局部刷新需要判定\n // 这个地方需要判定,在 G6 的场景每个 group 都有 transform 的场景下性能会开销非常大\n // 通过 refresh 的判定,可以不刷新没有发生过变化的分组,不在视窗内的分组等等\n // 如果想进一步提升局部渲染性能,可以进一步优化 refresh 的判定,依然有潜力\n if (children.length && allowDraw) {\n context.save();\n // group 上的矩阵和属性也会应用到上下文上\n // 先将 attrs 应用到上下文中,再设置 clip。因为 clip 应该被当前元素的 matrix 所影响\n Object(_util_draw__WEBPACK_IMPORTED_MODULE_3__[\"applyAttrsToContext\"])(context, this);\n this._applyClip(context, this.getClip());\n Object(_util_draw__WEBPACK_IMPORTED_MODULE_3__[\"drawChildren\"])(context, children, region);\n context.restore();\n this.cacheCanvasBBox();\n }\n // 这里的成本比较大,如果不绘制则不再\n // this.set('cacheCanvasBBox', this.getCanvasBBox());\n this.cfg.refresh = null;\n // 绘制后,消除更新标记\n this.set('hasChanged', false);\n };\n // 绘制时被跳过,一般发生在分组隐藏时\n Group.prototype.skipDraw = function () {\n this.set('cacheCanvasBBox', null);\n this.set('hasChanged', false);\n };\n return Group;\n}(_antv_g_base__WEBPACK_IMPORTED_MODULE_1__[\"AbstractGroup\"]));\n/* harmony default export */ __webpack_exports__[\"default\"] = (Group);\n//# sourceMappingURL=group.js.map\n\n//# sourceURL=webpack:///./node_modules/@antv/g-canvas/esm/group.js?");
/***/ }),
/***/ "./node_modules/@antv/g-canvas/esm/index.js":
/*!**************************************************!*\
!*** ./node_modules/@antv/g-canvas/esm/index.js ***!
\**************************************************/
/*! no static exports found */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"version\", function() { return version; });\n/* harmony import */ var _shape__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./shape */ \"./node_modules/@antv/g-canvas/esm/shape/index.js\");\n/* harmony reexport (module object) */ __webpack_require__.d(__webpack_exports__, \"Shape\", function() { return _shape__WEBPACK_IMPORTED_MODULE_0__; });\n/* harmony import */ var _antv_g_base__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @antv/g-base */ \"./node_modules/@antv/g-base/esm/index.js\");\n/* harmony reexport (unknown) */ for(var __WEBPACK_IMPORT_KEY__ in _antv_g_base__WEBPACK_IMPORTED_MODULE_1__) if([\"default\",\"Canvas\",\"Group\",\"Shape\",\"getArcParams\",\"version\"].indexOf(__WEBPACK_IMPORT_KEY__) < 0) (function(key) { __webpack_require__.d(__webpack_exports__, key, function() { return _antv_g_base__WEBPACK_IMPORTED_MODULE_1__[key]; }) }(__WEBPACK_IMPORT_KEY__));\n/* harmony import */ var _canvas__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./canvas */ \"./node_modules/@antv/g-canvas/esm/canvas.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Canvas\", function() { return _canvas__WEBPACK_IMPORTED_MODULE_2__[\"default\"]; });\n\n/* harmony import */ var _group__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./group */ \"./node_modules/@antv/g-canvas/esm/group.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Group\", function() { return _group__WEBPACK_IMPORTED_MODULE_3__[\"default\"]; });\n\n/* harmony import */ var _util_arc_params__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./util/arc-params */ \"./node_modules/@antv/g-canvas/esm/util/arc-params.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"getArcParams\", function() { return _util_arc_params__WEBPACK_IMPORTED_MODULE_4__[\"default\"]; });\n\n\n\n\n\n\n\nvar version = '0.5.12';\n//# sourceMappingURL=index.js.map\n\n//# sourceURL=webpack:///./node_modules/@antv/g-canvas/esm/index.js?");
/***/ }),
/***/ "./node_modules/@antv/g-canvas/esm/shape/base.js":
/*!*******************************************************!*\
!*** ./node_modules/@antv/g-canvas/esm/shape/base.js ***!
\*******************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tslib */ \"./node_modules/tslib/tslib.es6.js\");\n/* harmony import */ var _antv_g_base__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @antv/g-base */ \"./node_modules/@antv/g-base/esm/index.js\");\n/* harmony import */ var _util_util__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../util/util */ \"./node_modules/@antv/g-canvas/esm/util/util.js\");\n/* harmony import */ var _util_draw__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../util/draw */ \"./node_modules/@antv/g-canvas/esm/util/draw.js\");\n/* harmony import */ var _index__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./index */ \"./node_modules/@antv/g-canvas/esm/shape/index.js\");\n/* harmony import */ var _group__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../group */ \"./node_modules/@antv/g-canvas/esm/group.js\");\n\n\n\n\n\n\n\nvar ShapeBase = /** @class */ (function (_super) {\n Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__extends\"])(ShapeBase, _super);\n function ShapeBase() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n ShapeBase.prototype.getDefaultAttrs = function () {\n var attrs = _super.prototype.getDefaultAttrs.call(this);\n // 设置默认值\n return Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__assign\"])(Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__assign\"])({}, attrs), { lineWidth: 1, lineAppendWidth: 0, strokeOpacity: 1, fillOpacity: 1 });\n };\n ShapeBase.prototype.getShapeBase = function () {\n return _index__WEBPACK_IMPORTED_MODULE_4__;\n };\n ShapeBase.prototype.getGroupBase = function () {\n return _group__WEBPACK_IMPORTED_MODULE_5__[\"default\"];\n };\n /**\n * 一些方法调用会引起画布变化\n * @param {ChangeType} changeType 改变的类型\n */\n ShapeBase.prototype.onCanvasChange = function (changeType) {\n Object(_util_draw__WEBPACK_IMPORTED_MODULE_3__[\"refreshElement\"])(this, changeType);\n };\n ShapeBase.prototype.calculateBBox = function () {\n var type = this.get('type');\n var lineWidth = this.getHitLineWidth();\n // const attrs = this.attr();\n var bboxMethod = Object(_antv_g_base__WEBPACK_IMPORTED_MODULE_1__[\"getBBoxMethod\"])(type);\n var box = bboxMethod(this);\n var halfLineWidth = lineWidth / 2;\n var minX = box.x - halfLineWidth;\n var minY = box.y - halfLineWidth;\n var maxX = box.x + box.width + halfLineWidth;\n var maxY = box.y + box.height + halfLineWidth;\n return {\n x: minX,\n minX: minX,\n y: minY,\n minY: minY,\n width: box.width + lineWidth,\n height: box.height + lineWidth,\n maxX: maxX,\n maxY: maxY,\n };\n };\n ShapeBase.prototype.isFill = function () {\n return !!this.attrs['fill'] || this.isClipShape();\n };\n ShapeBase.prototype.isStroke = function () {\n return !!this.attrs['stroke'];\n };\n // 同 shape 中的方法重复了\n ShapeBase.prototype._applyClip = function (context, clip) {\n if (clip) {\n context.save();\n // 将 clip 的属性挂载到 context 上\n Object(_util_draw__WEBPACK_IMPORTED_MODULE_3__[\"applyAttrsToContext\"])(context, clip);\n // 绘制 clip 路径\n clip.createPath(context);\n context.restore();\n // 裁剪\n context.clip();\n clip._afterDraw();\n }\n };\n // 绘制图形时需要考虑 region 限制\n ShapeBase.prototype.draw = function (context, region) {\n var clip = this.cfg.clipShape;\n // 如果指定了 region,同时不允许刷新时,直接返回\n if (region) {\n if (this.cfg.refresh === false) {\n // this._afterDraw();\n this.set('hasChanged', false);\n return;\n }\n // 是否相交需要考虑 clip 的包围盒\n var bbox = this.getCanvasBBox();\n if (!Object(_util_util__WEBPACK_IMPORTED_MODULE_2__[\"intersectRect\"])(region, bbox)) {\n // 图形的包围盒与重绘区域不相交时,也需要清除标记\n this.set('hasChanged', false);\n // 存在多种情形需要更新 cacheCanvasBBox 和 isInview 的判定\n // 1. 之前图形在视窗内,但是现在不再视窗内\n // 2. 如果当前的图形以及父元素都没有发生过变化,refresh = false 不会走到这里,所以这里的图形都是父元素发生变化,但是没有在视图内的元素\n if (this.cfg.isInView) {\n this._afterDraw();\n }\n return;\n }\n }\n context.save();\n // 先将 attrs 应用到上下文中,再设置 clip。因为 clip 应该被当前元素的 matrix 所影响\n Object(_util_draw__WEBPACK_IMPORTED_MODULE_3__[\"applyAttrsToContext\"])(context, this);\n this._applyClip(context, clip);\n this.drawPath(context);\n context.restore();\n this._afterDraw();\n };\n ShapeBase.prototype.getCanvasViewBox = function () {\n var canvas = this.cfg.canvas;\n if (canvas) {\n // @ts-ignore\n return canvas.getViewRange();\n }\n return null;\n };\n ShapeBase.prototype.cacheCanvasBBox = function () {\n var canvasBBox = this.getCanvasViewBox();\n // 绘制的时候缓存包围盒\n if (canvasBBox) {\n var bbox = this.getCanvasBBox();\n var isInView = Object(_util_util__WEBPACK_IMPORTED_MODULE_2__[\"intersectRect\"])(bbox, canvasBBox);\n this.set('isInView', isInView);\n // 不再视窗内 cacheCanvasBBox 设置成 null,会提升局部渲染的性能,\n // 因为在局部渲染影响的包围盒计算时不考虑这个图形的包围盒\n // 父元素 cacheCanvasBBox 计算的时候也不计算\n if (isInView) {\n this.set('cacheCanvasBBox', bbox);\n }\n else {\n this.set('cacheCanvasBBox', null);\n }\n }\n };\n ShapeBase.prototype._afterDraw = function () {\n this.cacheCanvasBBox();\n // 绘制后消除标记\n this.set('hasChanged', false);\n this.set('refresh', null);\n };\n ShapeBase.prototype.skipDraw = function () {\n this.set('cacheCanvasBBox', null);\n this.set('isInView', null);\n this.set('hasChanged', false);\n };\n /**\n * 绘制图形的路径\n * @param {CanvasRenderingContext2D} context 上下文\n */\n ShapeBase.prototype.drawPath = function (context) {\n this.createPath(context);\n this.strokeAndFill(context);\n this.afterDrawPath(context);\n };\n /**\n * @protected\n * 填充图形\n * @param {CanvasRenderingContext2D} context context 上下文\n */\n ShapeBase.prototype.fill = function (context) {\n context.fill();\n };\n /**\n * @protected\n * 绘制图形边框\n * @param {CanvasRenderingContext2D} context context 上下文\n */\n ShapeBase.prototype.stroke = function (context) {\n context.stroke();\n };\n // 绘制或者填充\n ShapeBase.prototype.strokeAndFill = function (context) {\n var _a = this.attrs, lineWidth = _a.lineWidth, opacity = _a.opacity, strokeOpacity = _a.strokeOpacity, fillOpacity = _a.fillOpacity;\n if (this.isFill()) {\n if (!Object(_util_util__WEBPACK_IMPORTED_MODULE_2__[\"isNil\"])(fillOpacity) && fillOpacity !== 1) {\n context.globalAlpha = fillOpacity;\n this.fill(context);\n context.globalAlpha = opacity;\n }\n else {\n this.fill(context);\n }\n }\n if (this.isStroke()) {\n if (lineWidth > 0) {\n if (!Object(_util_util__WEBPACK_IMPORTED_MODULE_2__[\"isNil\"])(strokeOpacity) && strokeOpacity !== 1) {\n context.globalAlpha = strokeOpacity;\n }\n this.stroke(context);\n }\n }\n this.afterDrawPath(context);\n };\n /**\n * @protected\n * 绘制图形的路径\n * @param {CanvasRenderingContext2D} context 上下文\n */\n ShapeBase.prototype.createPath = function (context) { };\n /**\n * 绘制完成 path 后的操作\n * @param {CanvasRenderingContext2D} context 上下文\n */\n ShapeBase.prototype.afterDrawPath = function (context) { };\n ShapeBase.prototype.isInShape = function (refX, refY) {\n // return HitUtil.isHitShape(this, refX, refY);\n var isStroke = this.isStroke();\n var isFill = this.isFill();\n var lineWidth = this.getHitLineWidth();\n return this.isInStrokeOrPath(refX, refY, isStroke, isFill, lineWidth);\n };\n // 之所以不拆成 isInStroke 和 isInPath 在于两者存在一些共同的计算\n ShapeBase.prototype.isInStrokeOrPath = function (x, y, isStroke, isFill, lineWidth) {\n return false;\n };\n /**\n * 获取线拾取的宽度\n * @returns {number} 线的拾取宽度\n */\n ShapeBase.prototype.getHitLineWidth = function () {\n if (!this.isStroke()) {\n return 0;\n }\n var attrs = this.attrs;\n return attrs['lineWidth'] + attrs['lineAppendWidth'];\n };\n return ShapeBase;\n}(_antv_g_base__WEBPACK_IMPORTED_MODULE_1__[\"AbstractShape\"]));\n/* harmony default export */ __webpack_exports__[\"default\"] = (ShapeBase);\n//# sourceMappingURL=base.js.map\n\n//# sourceURL=webpack:///./node_modules/@antv/g-canvas/esm/shape/base.js?");
/***/ }),
/***/ "./node_modules/@antv/g-canvas/esm/shape/circle.js":
/*!*********************************************************!*\
!*** ./node_modules/@antv/g-canvas/esm/shape/circle.js ***!
\*********************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tslib */ \"./node_modules/tslib/tslib.es6.js\");\n/* harmony import */ var _base__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./base */ \"./node_modules/@antv/g-canvas/esm/shape/base.js\");\n/* harmony import */ var _util_util__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../util/util */ \"./node_modules/@antv/g-canvas/esm/util/util.js\");\n/**\n * @fileoverview 圆\n * @author dxq613@gmail.com\n */\n\n\n\nvar Circle = /** @class */ (function (_super) {\n Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__extends\"])(Circle, _super);\n function Circle() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n Circle.prototype.getDefaultAttrs = function () {\n var attrs = _super.prototype.getDefaultAttrs.call(this);\n return Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__assign\"])(Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__assign\"])({}, attrs), { x: 0, y: 0, r: 0 });\n };\n Circle.prototype.isInStrokeOrPath = function (x, y, isStroke, isFill, lineWidth) {\n var attrs = this.attr();\n var cx = attrs.x;\n var cy = attrs.y;\n var r = attrs.r;\n var halfLineWidth = lineWidth / 2;\n var absDistance = Object(_util_util__WEBPACK_IMPORTED_MODULE_2__[\"distance\"])(cx, cy, x, y);\n // 直接用距离,如果同时存在边和填充时,可以减少两次计算\n if (isFill && isStroke) {\n return absDistance <= r + halfLineWidth;\n }\n if (isFill) {\n return absDistance <= r;\n }\n if (isStroke) {\n return absDistance >= r - halfLineWidth && absDistance <= r + halfLineWidth;\n }\n return false;\n };\n Circle.prototype.createPath = function (context) {\n var attrs = this.attr();\n var cx = attrs.x;\n var cy = attrs.y;\n var r = attrs.r;\n context.beginPath();\n context.arc(cx, cy, r, 0, Math.PI * 2, false);\n context.closePath();\n };\n return Circle;\n}(_base__WEBPACK_IMPORTED_MODULE_1__[\"default\"]));\n/* harmony default export */ __webpack_exports__[\"default\"] = (Circle);\n//# sourceMappingURL=circle.js.map\n\n//# sourceURL=webpack:///./node_modules/@antv/g-canvas/esm/shape/circle.js?");
/***/ }),
/***/ "./node_modules/@antv/g-canvas/esm/shape/ellipse.js":
/*!**********************************************************!*\
!*** ./node_modules/@antv/g-canvas/esm/shape/ellipse.js ***!
\**********************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tslib */ \"./node_modules/tslib/tslib.es6.js\");\n/* harmony import */ var _base__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./base */ \"./node_modules/@antv/g-canvas/esm/shape/base.js\");\n/**\n * @fileoverview 椭圆\n * @author dxq613@gmail.com\n */\n\n\n// 根据椭圆公式计算 x*x/rx*rx + y*y/ry*ry;\nfunction ellipseDistance(squareX, squareY, rx, ry) {\n return squareX / (rx * rx) + squareY / (ry * ry);\n}\nvar Ellipse = /** @class */ (function (_super) {\n Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__extends\"])(Ellipse, _super);\n function Ellipse() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n Ellipse.prototype.getDefaultAttrs = function () {\n var attrs = _super.prototype.getDefaultAttrs.call(this);\n return Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__assign\"])(Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__assign\"])({}, attrs), { x: 0, y: 0, rx: 0, ry: 0 });\n };\n Ellipse.prototype.isInStrokeOrPath = function (x, y, isStroke, isFill, lineWidth) {\n var attrs = this.attr();\n var halfLineWith = lineWidth / 2;\n var cx = attrs.x;\n var cy = attrs.y;\n var rx = attrs.rx, ry = attrs.ry;\n var squareX = (x - cx) * (x - cx);\n var squareY = (y - cy) * (y - cy);\n // 使用椭圆的公式: x*x/rx*rx + y*y/ry*ry = 1;\n if (isFill && isStroke) {\n return ellipseDistance(squareX, squareY, rx + halfLineWith, ry + halfLineWith) <= 1;\n }\n if (isFill) {\n return ellipseDistance(squareX, squareY, rx, ry) <= 1;\n }\n if (isStroke) {\n return (ellipseDistance(squareX, squareY, rx - halfLineWith, ry - halfLineWith) >= 1 &&\n ellipseDistance(squareX, squareY, rx + halfLineWith, ry + halfLineWith) <= 1);\n }\n return false;\n };\n Ellipse.prototype.createPath = function (context) {\n var attrs = this.attr();\n var cx = attrs.x;\n var cy = attrs.y;\n var rx = attrs.rx;\n var ry = attrs.ry;\n context.beginPath();\n // 兼容逻辑\n if (context.ellipse) {\n context.ellipse(cx, cy, rx, ry, 0, 0, Math.PI * 2, false);\n }\n else {\n // 如果不支持,则使用圆来绘制,进行变形\n var r = rx > ry ? rx : ry;\n var scaleX = rx > ry ? 1 : rx / ry;\n var scaleY = rx > ry ? ry / rx : 1;\n context.save();\n context.translate(cx, cy);\n context.scale(scaleX, scaleY);\n context.arc(0, 0, r, 0, Math.PI * 2);\n context.restore();\n context.closePath();\n }\n };\n return Ellipse;\n}(_base__WEBPACK_IMPORTED_MODULE_1__[\"default\"]));\n/* harmony default export */ __webpack_exports__[\"default\"] = (Ellipse);\n//# sourceMappingURL=ellipse.js.map\n\n//# sourceURL=webpack:///./node_modules/@antv/g-canvas/esm/shape/ellipse.js?");
/***/ }),
/***/ "./node_modules/@antv/g-canvas/esm/shape/image.js":
/*!********************************************************!*\
!*** ./node_modules/@antv/g-canvas/esm/shape/image.js ***!
\********************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tslib */ \"./node_modules/tslib/tslib.es6.js\");\n/* harmony import */ var _base__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./base */ \"./node_modules/@antv/g-canvas/esm/shape/base.js\");\n/* harmony import */ var _util_util__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../util/util */ \"./node_modules/@antv/g-canvas/esm/util/util.js\");\n/**\n * @fileoverview 图片\n * @author dxq613@gmail.com\n */\n\n\n\nfunction isCanvas(dom) {\n return dom instanceof HTMLElement && Object(_util_util__WEBPACK_IMPORTED_MODULE_2__[\"isString\"])(dom.nodeName) && dom.nodeName.toUpperCase() === 'CANVAS';\n}\nvar ImageShape = /** @class */ (function (_super) {\n Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__extends\"])(ImageShape, _super);\n function ImageShape() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n ImageShape.prototype.getDefaultAttrs = function () {\n var attrs = _super.prototype.getDefaultAttrs.call(this);\n return Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__assign\"])(Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__assign\"])({}, attrs), { x: 0, y: 0, width: 0, height: 0 });\n };\n ImageShape.prototype.initAttrs = function (attrs) {\n this._setImage(attrs.img);\n };\n // image 不计算 stroke\n ImageShape.prototype.isStroke = function () {\n return false;\n };\n // 仅仅使用包围盒检测来进行拾取\n // 所以不需要复写 isInStrokeOrPath 的方法\n ImageShape.prototype.isOnlyHitBox = function () {\n return true;\n };\n ImageShape.prototype._afterLoading = function () {\n if (this.get('toDraw') === true) {\n var canvas = this.get('canvas');\n if (canvas) {\n // 这段应该改成局部渲染\n canvas.draw();\n }\n else {\n // 这种方式如果发生遮挡会出现问题\n this.createPath(this.get('context'));\n }\n }\n };\n ImageShape.prototype._setImage = function (img) {\n var _this = this;\n var attrs = this.attrs;\n if (Object(_util_util__WEBPACK_IMPORTED_MODULE_2__[\"isString\"])(img)) {\n var image_1 = new Image();\n image_1.onload = function () {\n // 图片未加载完,则已经被销毁\n if (_this.destroyed) {\n return false;\n }\n // 缓存原始地址,可以做对比,防止重复加载图片\n // 如果考虑到在加载过程中可能替换 img 属性,则情况更加复杂\n // this.set('imgSrc', img);\n // 这里会循环调用 _setImage 方法,但不会再走这个分支\n _this.attr('img', image_1);\n _this.set('loading', false);\n _this._afterLoading();\n var callback = _this.get('callback');\n if (callback) {\n callback.call(_this);\n }\n };\n // 设置跨域\n image_1.crossOrigin = 'Anonymous';\n image_1.src = img;\n // loading 过程中不绘制\n this.set('loading', true);\n }\n else if (img instanceof Image) {\n // 如果是一个 image 对象,则设置宽高\n if (!attrs.width) {\n attrs.width = img.width;\n }\n if (!attrs.height) {\n attrs.height = img.height;\n }\n }\n else if (isCanvas(img)) {\n // 如果设置了 canvas 对象\n if (!attrs.width) {\n attrs.width = Number(img.getAttribute('width'));\n }\n if (!attrs.height) {\n attrs.height, Number(img.getAttribute('height'));\n }\n }\n };\n ImageShape.prototype.onAttrChange = function (name, value, originValue) {\n _super.prototype.onAttrChange.call(this, name, value, originValue);\n // 如果加载的已经是当前图片,则不再处理\n if (name === 'img') {\n // 可以加缓冲,&& this.get('imgSrc') !== value\n this._setImage(value);\n }\n };\n ImageShape.prototype.createPath = function (context) {\n // 正在加载则不绘制\n if (this.get('loading')) {\n this.set('toDraw', true); // 加载完成后绘制\n this.set('context', context);\n return;\n }\n var attrs = this.attr();\n var x = attrs.x, y = attrs.y, width = attrs.width, height = attrs.height, sx = attrs.sx, sy = attrs.sy, swidth = attrs.swidth, sheight = attrs.sheight;\n var img = attrs.img;\n if (img instanceof Image || isCanvas(img)) {\n if (!Object(_util_util__WEBPACK_IMPORTED_MODULE_2__[\"isNil\"])(sx) && !Object(_util_util__WEBPACK_IMPORTED_MODULE_2__[\"isNil\"])(sy) && !Object(_util_util__WEBPACK_IMPORTED_MODULE_2__[\"isNil\"])(swidth) && !Object(_util_util__WEBPACK_IMPORTED_MODULE_2__[\"isNil\"])(sheight)) {\n context.drawImage(img, sx, sy, swidth, sheight, x, y, width, height);\n }\n else {\n context.drawImage(img, x, y, width, height);\n }\n }\n };\n return ImageShape;\n}(_base__WEBPACK_IMPORTED_MODULE_1__[\"default\"]));\n/* harmony default export */ __webpack_exports__[\"default\"] = (ImageShape);\n//# sourceMappingURL=image.js.map\n\n//# sourceURL=webpack:///./node_modules/@antv/g-canvas/esm/shape/image.js?");
/***/ }),
/***/ "./node_modules/@antv/g-canvas/esm/shape/index.js":
/*!********************************************************!*\
!*** ./node_modules/@antv/g-canvas/esm/shape/index.js ***!
\********************************************************/
/*! exports provided: Base, Circle, Ellipse, Image, Line, Marker, Path, Polygon, Polyline, Rect, Text */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _base__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./base */ \"./node_modules/@antv/g-canvas/esm/shape/base.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Base\", function() { return _base__WEBPACK_IMPORTED_MODULE_0__[\"default\"]; });\n\n/* harmony import */ var _circle__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./circle */ \"./node_modules/@antv/g-canvas/esm/shape/circle.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Circle\", function() { return _circle__WEBPACK_IMPORTED_MODULE_1__[\"default\"]; });\n\n/* harmony import */ var _ellipse__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./ellipse */ \"./node_modules/@antv/g-canvas/esm/shape/ellipse.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Ellipse\", function() { return _ellipse__WEBPACK_IMPORTED_MODULE_2__[\"default\"]; });\n\n/* harmony import */ var _image__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./image */ \"./node_modules/@antv/g-canvas/esm/shape/image.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Image\", function() { return _image__WEBPACK_IMPORTED_MODULE_3__[\"default\"]; });\n\n/* harmony import */ var _line__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./line */ \"./node_modules/@antv/g-canvas/esm/shape/line.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Line\", function() { return _line__WEBPACK_IMPORTED_MODULE_4__[\"default\"]; });\n\n/* harmony import */ var _marker__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./marker */ \"./node_modules/@antv/g-canvas/esm/shape/marker.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Marker\", function() { return _marker__WEBPACK_IMPORTED_MODULE_5__[\"default\"]; });\n\n/* harmony import */ var _path__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./path */ \"./node_modules/@antv/g-canvas/esm/shape/path.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Path\", function() { return _path__WEBPACK_IMPORTED_MODULE_6__[\"default\"]; });\n\n/* harmony import */ var _polygon__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./polygon */ \"./node_modules/@antv/g-canvas/esm/shape/polygon.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Polygon\", function() { return _polygon__WEBPACK_IMPORTED_MODULE_7__[\"default\"]; });\n\n/* harmony import */ var _polyline__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./polyline */ \"./node_modules/@antv/g-canvas/esm/shape/polyline.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Polyline\", function() { return _polyline__WEBPACK_IMPORTED_MODULE_8__[\"default\"]; });\n\n/* harmony import */ var _rect__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./rect */ \"./node_modules/@antv/g-canvas/esm/shape/rect.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Rect\", function() { return _rect__WEBPACK_IMPORTED_MODULE_9__[\"default\"]; });\n\n/* harmony import */ var _text__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./text */ \"./node_modules/@antv/g-canvas/esm/shape/text.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Text\", function() { return _text__WEBPACK_IMPORTED_MODULE_10__[\"default\"]; });\n\n\n\n\n\n\n\n\n\n\n\n\n//# sourceMappingURL=index.js.map\n\n//# sourceURL=webpack:///./node_modules/@antv/g-canvas/esm/shape/index.js?");
/***/ }),
/***/ "./node_modules/@antv/g-canvas/esm/shape/line.js":
/*!*******************************************************!*\
!*** ./node_modules/@antv/g-canvas/esm/shape/line.js ***!
\*******************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tslib */ \"./node_modules/tslib/tslib.es6.js\");\n/* harmony import */ var _antv_g_math__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @antv/g-math */ \"./node_modules/@antv/g-math/esm/index.js\");\n/* harmony import */ var _base__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./base */ \"./node_modules/@antv/g-canvas/esm/shape/base.js\");\n/* harmony import */ var _util_in_stroke_line__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../util/in-stroke/line */ \"./node_modules/@antv/g-canvas/esm/util/in-stroke/line.js\");\n/* harmony import */ var _util_arrow__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../util/arrow */ \"./node_modules/@antv/g-canvas/esm/util/arrow.js\");\n\n/**\n * @fileoverview 线\n * @author dxq613@gmail.com\n */\n\n\n\n\nvar Line = /** @class */ (function (_super) {\n Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__extends\"])(Line, _super);\n function Line() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n Line.prototype.getDefaultAttrs = function () {\n var attrs = _super.prototype.getDefaultAttrs.call(this);\n return Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__assign\"])(Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__assign\"])({}, attrs), { x1: 0, y1: 0, x2: 0, y2: 0, startArrow: false, endArrow: false });\n };\n Line.prototype.initAttrs = function (attrs) {\n this.setArrow();\n };\n // 更新属性时,检测是否更改了箭头\n Line.prototype.onAttrChange = function (name, value, originValue) {\n _super.prototype.onAttrChange.call(this, name, value, originValue);\n // 由于箭头的绘制依赖于 line 的诸多 attrs,因此这里不再对每个 attr 进行判断,attr 每次变化都会影响箭头的更新\n this.setArrow();\n };\n Line.prototype.setArrow = function () {\n var attrs = this.attr();\n var x1 = attrs.x1, y1 = attrs.y1, x2 = attrs.x2, y2 = attrs.y2, startArrow = attrs.startArrow, endArrow = attrs.endArrow;\n if (startArrow) {\n _util_arrow__WEBPACK_IMPORTED_MODULE_4__[\"addStartArrow\"](this, attrs, x2, y2, x1, y1);\n }\n if (endArrow) {\n _util_arrow__WEBPACK_IMPORTED_MODULE_4__[\"addEndArrow\"](this, attrs, x1, y1, x2, y2);\n }\n };\n Line.prototype.isInStrokeOrPath = function (x, y, isStroke, isFill, lineWidth) {\n if (!isStroke || !lineWidth) {\n return false;\n }\n var _a = this.attr(), x1 = _a.x1, y1 = _a.y1, x2 = _a.x2, y2 = _a.y2;\n return Object(_util_in_stroke_line__WEBPACK_IMPORTED_MODULE_3__[\"default\"])(x1, y1, x2, y2, lineWidth, x, y);\n };\n Line.prototype.createPath = function (context) {\n var attrs = this.attr();\n var x1 = attrs.x1, y1 = attrs.y1, x2 = attrs.x2, y2 = attrs.y2, startArrow = attrs.startArrow, endArrow = attrs.endArrow;\n var startArrowDistance = {\n dx: 0,\n dy: 0,\n };\n var endArrowDistance = {\n dx: 0,\n dy: 0,\n };\n if (startArrow && startArrow.d) {\n startArrowDistance = _util_arrow__WEBPACK_IMPORTED_MODULE_4__[\"getShortenOffset\"](x1, y1, x2, y2, attrs.startArrow.d);\n }\n if (endArrow && endArrow.d) {\n endArrowDistance = _util_arrow__WEBPACK_IMPORTED_MODULE_4__[\"getShortenOffset\"](x1, y1, x2, y2, attrs.endArrow.d);\n }\n context.beginPath();\n // 如果自定义箭头,线条相应缩进\n context.moveTo(x1 + startArrowDistance.dx, y1 + startArrowDistance.dy);\n context.lineTo(x2 - endArrowDistance.dx, y2 - endArrowDistance.dy);\n };\n Line.prototype.afterDrawPath = function (context) {\n var startArrowShape = this.get('startArrowShape');\n var endArrowShape = this.get('endArrowShape');\n if (startArrowShape) {\n startArrowShape.draw(context);\n }\n if (endArrowShape) {\n endArrowShape.draw(context);\n }\n };\n /**\n * Get length of line\n * @return {number} length\n */\n Line.prototype.getTotalLength = function () {\n var _a = this.attr(), x1 = _a.x1, y1 = _a.y1, x2 = _a.x2, y2 = _a.y2;\n return _antv_g_math__WEBPACK_IMPORTED_MODULE_1__[\"Line\"].length(x1, y1, x2, y2);\n };\n /**\n * Get point according to ratio\n * @param {number} ratio\n * @return {Point} point\n */\n Line.prototype.getPoint = function (ratio) {\n var _a = this.attr(), x1 = _a.x1, y1 = _a.y1, x2 = _a.x2, y2 = _a.y2;\n return _antv_g_math__WEBPACK_IMPORTED_MODULE_1__[\"Line\"].pointAt(x1, y1, x2, y2, ratio);\n };\n return Line;\n}(_base__WEBPACK_IMPORTED_MODULE_2__[\"default\"]));\n/* harmony default export */ __webpack_exports__[\"default\"] = (Line);\n//# sourceMappingURL=line.js.map\n\n//# sourceURL=webpack:///./node_modules/@antv/g-canvas/esm/shape/line.js?");
/***/ }),
/***/ "./node_modules/@antv/g-canvas/esm/shape/marker.js":
/*!*********************************************************!*\
!*** ./node_modules/@antv/g-canvas/esm/shape/marker.js ***!
\*********************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tslib */ \"./node_modules/tslib/tslib.es6.js\");\n/* harmony import */ var _antv_util__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @antv/util */ \"./node_modules/@antv/util/esm/index.js\");\n/* harmony import */ var _antv_path_util__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @antv/path-util */ \"./node_modules/@antv/path-util/esm/index.js\");\n/* harmony import */ var _base__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./base */ \"./node_modules/@antv/g-canvas/esm/shape/base.js\");\n/* harmony import */ var _util_util__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../util/util */ \"./node_modules/@antv/g-canvas/esm/util/util.js\");\n/* harmony import */ var _util_draw__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../util/draw */ \"./node_modules/@antv/g-canvas/esm/util/draw.js\");\n/**\n * @fileoverview Marker\n * @author dxq613@gmail.com\n */\n\n\n\n\n\n\nvar Symbols = {\n // 圆\n circle: function (x, y, r) {\n return [\n ['M', x - r, y],\n ['A', r, r, 0, 1, 0, x + r, y],\n ['A', r, r, 0, 1, 0, x - r, y],\n ];\n },\n // 正方形\n square: function (x, y, r) {\n return [['M', x - r, y - r], ['L', x + r, y - r], ['L', x + r, y + r], ['L', x - r, y + r], ['Z']];\n },\n // 菱形\n diamond: function (x, y, r) {\n return [['M', x - r, y], ['L', x, y - r], ['L', x + r, y], ['L', x, y + r], ['Z']];\n },\n // 三角形\n triangle: function (x, y, r) {\n var diffY = r * Math.sin((1 / 3) * Math.PI);\n return [['M', x - r, y + diffY], ['L', x, y - diffY], ['L', x + r, y + diffY], ['Z']];\n },\n // 倒三角形\n 'triangle-down': function (x, y, r) {\n var diffY = r * Math.sin((1 / 3) * Math.PI);\n return [['M', x - r, y - diffY], ['L', x + r, y - diffY], ['L', x, y + diffY], ['Z']];\n },\n};\nvar Marker = /** @class */ (function (_super) {\n Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__extends\"])(Marker, _super);\n function Marker() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n Marker.prototype.initAttrs = function (attrs) {\n this._resetParamsCache();\n };\n // 重置绘制 path 存储的缓存\n Marker.prototype._resetParamsCache = function () {\n // 为了加速 path 的绘制、拾取和计算,这个地方可以缓存很多东西\n // 这些缓存都是第一次需要时计算和存储,虽然增加了复杂度,但是频繁调用的方法,性能有很大提升\n this.set('paramsCache', {}); // 清理缓存\n };\n // 更新属性时,检测是否更改了 path\n Marker.prototype.onAttrChange = function (name, value, originValue) {\n _super.prototype.onAttrChange.call(this, name, value, originValue);\n if (['symbol', 'x', 'y', 'r', 'radius'].indexOf(name) !== -1) {\n // path 相关属性更改时,清理缓存\n this._resetParamsCache();\n }\n };\n // 仅仅使用包围盒检测来进行拾取\n // 所以不需要复写 isInStrokeOrPath 的方法\n Marker.prototype.isOnlyHitBox = function () {\n return true;\n };\n Marker.prototype._getR = function (attrs) {\n // 兼容 r 和 radius 两种写法,推荐使用 r\n return Object(_antv_util__WEBPACK_IMPORTED_MODULE_1__[\"isNil\"])(attrs.r) ? attrs.radius : attrs.r;\n };\n Marker.prototype._getPath = function () {\n var attrs = this.attr();\n var x = attrs.x, y = attrs.y;\n var symbol = attrs.symbol || 'circle';\n var r = this._getR(attrs);\n var method;\n var path;\n if (Object(_util_util__WEBPACK_IMPORTED_MODULE_4__[\"isFunction\"])(symbol)) {\n method = symbol;\n path = method(x, y, r);\n // 将 path 转成绝对路径\n path = Object(_antv_path_util__WEBPACK_IMPORTED_MODULE_2__[\"path2Absolute\"])(path);\n }\n else {\n // 内置 symbol 的 path 都是绝对路径,直接绘制即可,不需要对 path 进行特殊处理\n method = Marker.Symbols[symbol];\n if (!method) {\n console.warn(symbol + \" marker is not supported.\");\n return null;\n }\n path = method(x, y, r);\n }\n return path;\n };\n Marker.prototype.createPath = function (context) {\n var path = this._getPath();\n var paramsCache = this.get('paramsCache');\n Object(_util_draw__WEBPACK_IMPORTED_MODULE_5__[\"drawPath\"])(this, context, { path: path }, paramsCache);\n };\n Marker.Symbols = Symbols;\n return Marker;\n}(_base__WEBPACK_IMPORTED_MODULE_3__[\"default\"]));\n/* harmony default export */ __webpack_exports__[\"default\"] = (Marker);\n//# sourceMappingURL=marker.js.map\n\n//# sourceURL=webpack:///./node_modules/@antv/g-canvas/esm/shape/marker.js?");
/***/ }),
/***/ "./node_modules/@antv/g-canvas/esm/shape/path.js":
/*!*******************************************************!*\
!*** ./node_modules/@antv/g-canvas/esm/shape/path.js ***!
\*******************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tslib */ \"./node_modules/tslib/tslib.es6.js\");\n/* harmony import */ var _antv_g_math__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @antv/g-math */ \"./node_modules/@antv/g-math/esm/index.js\");\n/* harmony import */ var _antv_util__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @antv/util */ \"./node_modules/@antv/util/esm/index.js\");\n/* harmony import */ var _base__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./base */ \"./node_modules/@antv/g-canvas/esm/shape/base.js\");\n/* harmony import */ var _antv_path_util__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @antv/path-util */ \"./node_modules/@antv/path-util/esm/index.js\");\n/* harmony import */ var _util_draw__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../util/draw */ \"./node_modules/@antv/g-canvas/esm/util/draw.js\");\n/* harmony import */ var _util_in_path_point_in_path__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../util/in-path/point-in-path */ \"./node_modules/@antv/g-canvas/esm/util/in-path/point-in-path.js\");\n/* harmony import */ var _util_in_path_polygon__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../util/in-path/polygon */ \"./node_modules/@antv/g-canvas/esm/util/in-path/polygon.js\");\n/* harmony import */ var _util_path__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../util/path */ \"./node_modules/@antv/g-canvas/esm/util/path.js\");\n/* harmony import */ var _util_arrow__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../util/arrow */ \"./node_modules/@antv/g-canvas/esm/util/arrow.js\");\n\n\n\n\n\n\n\n\n\n\n// 是否在多个多边形内部\nfunction isInPolygons(polygons, x, y) {\n var isHit = false;\n for (var i = 0; i < polygons.length; i++) {\n var points = polygons[i];\n isHit = Object(_util_in_path_polygon__WEBPACK_IMPORTED_MODULE_7__[\"default\"])(points, x, y);\n if (isHit) {\n break;\n }\n }\n return isHit;\n}\nvar Path = /** @class */ (function (_super) {\n Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__extends\"])(Path, _super);\n function Path() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n Path.prototype.getDefaultAttrs = function () {\n var attrs = _super.prototype.getDefaultAttrs.call(this);\n return Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__assign\"])(Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__assign\"])({}, attrs), { startArrow: false, endArrow: false });\n };\n Path.prototype.initAttrs = function (attrs) {\n this._setPathArr(attrs.path);\n this.setArrow();\n };\n // 更新属性时,检测是否更改了 path\n Path.prototype.onAttrChange = function (name, value, originValue) {\n _super.prototype.onAttrChange.call(this, name, value, originValue);\n if (name === 'path') {\n this._setPathArr(value);\n }\n // 由于箭头的绘制依赖于 line 的诸多 attrs,因此这里不再对每个 attr 进行判断,attr 每次变化都会影响箭头的更新\n this.setArrow();\n };\n // 将 path 转换成绝对路径\n Path.prototype._setPathArr = function (path) {\n // 转换 path 的格式\n this.attrs.path = Object(_antv_path_util__WEBPACK_IMPORTED_MODULE_4__[\"path2Absolute\"])(path);\n var hasArc = _util_path__WEBPACK_IMPORTED_MODULE_8__[\"default\"].hasArc(path);\n // 为了加速 path 的绘制、拾取和计算,这个地方可以缓存很多东西\n // 这些缓存都是第一次需要时计算和存储,虽然增加了复杂度,但是频繁调用的方法,性能有很大提升\n this.set('hasArc', hasArc);\n this.set('paramsCache', {}); // 清理缓存\n this.set('segments', null); // 延迟生成 path,在动画场景下可能不会有拾取\n this.set('curve', null);\n this.set('tCache', null);\n this.set('totalLength', null);\n };\n Path.prototype.getSegments = function () {\n var segments = this.get('segements');\n if (!segments) {\n segments = Object(_antv_path_util__WEBPACK_IMPORTED_MODULE_4__[\"path2Segments\"])(this.attr('path'));\n this.set('segments', segments);\n }\n return segments;\n };\n Path.prototype.setArrow = function () {\n var attrs = this.attr();\n var startArrow = attrs.startArrow, endArrow = attrs.endArrow;\n if (startArrow) {\n var tangent = this.getStartTangent();\n _util_arrow__WEBPACK_IMPORTED_MODULE_9__[\"addStartArrow\"](this, attrs, tangent[0][0], tangent[0][1], tangent[1][0], tangent[1][1]);\n }\n if (endArrow) {\n var tangent = this.getEndTangent();\n _util_arrow__WEBPACK_IMPORTED_MODULE_9__[\"addEndArrow\"](this, attrs, tangent[0][0], tangent[0][1], tangent[1][0], tangent[1][1]);\n }\n };\n Path.prototype.isInStrokeOrPath = function (x, y, isStroke, isFill, lineWidth) {\n var segments = this.getSegments();\n var hasArc = this.get('hasArc');\n var isHit = false;\n if (isStroke) {\n var length_1 = this.getTotalLength();\n isHit = _util_path__WEBPACK_IMPORTED_MODULE_8__[\"default\"].isPointInStroke(segments, lineWidth, x, y, length_1);\n }\n if (!isHit && isFill) {\n if (hasArc) {\n // 存在曲线时,暂时使用 canvas 的 api 计算,后续可以进行多边形切割\n isHit = Object(_util_in_path_point_in_path__WEBPACK_IMPORTED_MODULE_6__[\"default\"])(this, x, y);\n }\n else {\n var path = this.attr('path');\n var extractResutl = _util_path__WEBPACK_IMPORTED_MODULE_8__[\"default\"].extractPolygons(path);\n // 提取出来的多边形包含闭合的和非闭合的,在这里统一按照多边形处理\n isHit = isInPolygons(extractResutl.polygons, x, y) || isInPolygons(extractResutl.polylines, x, y);\n }\n }\n return isHit;\n };\n Path.prototype.createPath = function (context) {\n var attrs = this.attr();\n var paramsCache = this.get('paramsCache'); // 由于计算圆弧的参数成本很大,所以要缓存\n Object(_util_draw__WEBPACK_IMPORTED_MODULE_5__[\"drawPath\"])(this, context, attrs, paramsCache);\n };\n Path.prototype.afterDrawPath = function (context) {\n var startArrowShape = this.get('startArrowShape');\n var endArrowShape = this.get('endArrowShape');\n if (startArrowShape) {\n startArrowShape.draw(context);\n }\n if (endArrowShape) {\n endArrowShape.draw(context);\n }\n };\n /**\n * Get total length of path\n * @return {number} length\n */\n Path.prototype.getTotalLength = function () {\n var totalLength = this.get('totalLength');\n if (!Object(_antv_util__WEBPACK_IMPORTED_MODULE_2__[\"isNil\"])(totalLength)) {\n return totalLength;\n }\n this._calculateCurve();\n this._setTcache();\n return this.get('totalLength');\n };\n /**\n * Get point according to ratio\n * @param {number} ratio\n * @return {Point} point\n */\n Path.prototype.getPoint = function (ratio) {\n var tCache = this.get('tCache');\n if (!tCache) {\n this._calculateCurve();\n this._setTcache();\n tCache = this.get('tCache');\n }\n var subt;\n var index;\n var curve = this.get('curve');\n if (!tCache || tCache.length === 0) {\n if (curve) {\n return {\n x: curve[0][1],\n y: curve[0][2],\n };\n }\n return null;\n }\n Object(_antv_util__WEBPACK_IMPORTED_MODULE_2__[\"each\"])(tCache, function (v, i) {\n if (ratio >= v[0] && ratio <= v[1]) {\n subt = (ratio - v[0]) / (v[1] - v[0]);\n index = i;\n }\n });\n var seg = curve[index];\n if (Object(_antv_util__WEBPACK_IMPORTED_MODULE_2__[\"isNil\"])(seg) || Object(_antv_util__WEBPACK_IMPORTED_MODULE_2__[\"isNil\"])(index)) {\n return null;\n }\n var l = seg.length;\n var nextSeg = curve[index + 1];\n return _antv_g_math__WEBPACK_IMPORTED_MODULE_1__[\"Cubic\"].pointAt(seg[l - 2], seg[l - 1], nextSeg[1], nextSeg[2], nextSeg[3], nextSeg[4], nextSeg[5], nextSeg[6], subt);\n };\n Path.prototype._calculateCurve = function () {\n var path = this.attr().path;\n this.set('curve', _util_path__WEBPACK_IMPORTED_MODULE_8__[\"default\"].pathToCurve(path));\n };\n Path.prototype._setTcache = function () {\n var totalLength = 0;\n var tempLength = 0;\n // 每段 curve 对应起止点的长度比例列表,形如: [[0, 0.25], [0.25, 0.6]. [0.6, 0.9], [0.9, 1]]\n var tCache = [];\n var segmentT;\n var segmentL;\n var segmentN;\n var l;\n var curve = this.get('curve');\n if (!curve) {\n return;\n }\n Object(_antv_util__WEBPACK_IMPORTED_MODULE_2__[\"each\"])(curve, function (segment, i) {\n segmentN = curve[i + 1];\n l = segment.length;\n if (segmentN) {\n totalLength +=\n _antv_g_math__WEBPACK_IMPORTED_MODULE_1__[\"Cubic\"].length(segment[l - 2], segment[l - 1], segmentN[1], segmentN[2], segmentN[3], segmentN[4], segmentN[5], segmentN[6]) || 0;\n }\n });\n this.set('totalLength', totalLength);\n if (totalLength === 0) {\n this.set('tCache', []);\n return;\n }\n Object(_antv_util__WEBPACK_IMPORTED_MODULE_2__[\"each\"])(curve, function (segment, i) {\n segmentN = curve[i + 1];\n l = segment.length;\n if (segmentN) {\n segmentT = [];\n segmentT[0] = tempLength / totalLength;\n segmentL = _antv_g_math__WEBPACK_IMPORTED_MODULE_1__[\"Cubic\"].length(segment[l - 2], segment[l - 1], segmentN[1], segmentN[2], segmentN[3], segmentN[4], segmentN[5], segmentN[6]);\n // 当 path 不连续时,segmentL 可能为空,为空时需要作为 0 处理\n tempLength += segmentL || 0;\n segmentT[1] = tempLength / totalLength;\n tCache.push(segmentT);\n }\n });\n this.set('tCache', tCache);\n };\n /**\n * Get start tangent vector\n * @return {Array}\n */\n Path.prototype.getStartTangent = function () {\n var segments = this.getSegments();\n var result;\n if (segments.length > 1) {\n var startPoint = segments[0].currentPoint;\n var endPoint = segments[1].currentPoint;\n var tangent = segments[1].startTangent;\n result = [];\n if (tangent) {\n result.push([startPoint[0] - tangent[0], startPoint[1] - tangent[1]]);\n result.push([startPoint[0], startPoint[1]]);\n }\n else {\n result.push([endPoint[0], endPoint[1]]);\n result.push([startPoint[0], startPoint[1]]);\n }\n }\n return result;\n };\n /**\n * Get end tangent vector\n * @return {Array}\n */\n Path.prototype.getEndTangent = function () {\n var segments = this.getSegments();\n var length = segments.length;\n var result;\n if (length > 1) {\n var startPoint = segments[length - 2].currentPoint;\n var endPoint = segments[length - 1].currentPoint;\n var tangent = segments[length - 1].endTangent;\n result = [];\n if (tangent) {\n result.push([endPoint[0] - tangent[0], endPoint[1] - tangent[1]]);\n result.push([endPoint[0], endPoint[1]]);\n }\n else {\n result.push([startPoint[0], startPoint[1]]);\n result.push([endPoint[0], endPoint[1]]);\n }\n }\n return result;\n };\n return Path;\n}(_base__WEBPACK_IMPORTED_MODULE_3__[\"default\"]));\n/* harmony default export */ __webpack_exports__[\"default\"] = (Path);\n//# sourceMappingURL=path.js.map\n\n//# sourceURL=webpack:///./node_modules/@antv/g-canvas/esm/shape/path.js?");
/***/ }),
/***/ "./node_modules/@antv/g-canvas/esm/shape/polygon.js":
/*!**********************************************************!*\
!*** ./node_modules/@antv/g-canvas/esm/shape/polygon.js ***!
\**********************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tslib */ \"./node_modules/tslib/tslib.es6.js\");\n/* harmony import */ var _base__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./base */ \"./node_modules/@antv/g-canvas/esm/shape/base.js\");\n/* harmony import */ var _util_in_stroke_polyline__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../util/in-stroke/polyline */ \"./node_modules/@antv/g-canvas/esm/util/in-stroke/polyline.js\");\n/* harmony import */ var _util_in_path_polygon__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../util/in-path/polygon */ \"./node_modules/@antv/g-canvas/esm/util/in-path/polygon.js\");\n/**\n * @fileoverview 多边形\n * @author dxq613@gmail.com\n */\n\n\n\n\nvar Polygon = /** @class */ (function (_super) {\n Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__extends\"])(Polygon, _super);\n function Polygon() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n Polygon.prototype.isInStrokeOrPath = function (x, y, isStroke, isFill, lineWidth) {\n var points = this.attr().points;\n var isHit = false;\n if (isStroke) {\n isHit = Object(_util_in_stroke_polyline__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(points, lineWidth, x, y, true);\n }\n if (!isHit && isFill) {\n isHit = Object(_util_in_path_polygon__WEBPACK_IMPORTED_MODULE_3__[\"default\"])(points, x, y); // isPointInPath(shape, x, y);\n }\n return isHit;\n };\n Polygon.prototype.createPath = function (context) {\n var attrs = this.attr();\n var points = attrs.points;\n if (points.length < 2) {\n return;\n }\n context.beginPath();\n for (var i = 0; i < points.length; i++) {\n var point = points[i];\n if (i === 0) {\n context.moveTo(point[0], point[1]);\n }\n else {\n context.lineTo(point[0], point[1]);\n }\n }\n context.closePath();\n };\n return Polygon;\n}(_base__WEBPACK_IMPORTED_MODULE_1__[\"default\"]));\n/* harmony default export */ __webpack_exports__[\"default\"] = (Polygon);\n//# sourceMappingURL=polygon.js.map\n\n//# sourceURL=webpack:///./node_modules/@antv/g-canvas/esm/shape/polygon.js?");
/***/ }),
/***/ "./node_modules/@antv/g-canvas/esm/shape/polyline.js":
/*!***********************************************************!*\
!*** ./node_modules/@antv/g-canvas/esm/shape/polyline.js ***!
\***********************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tslib */ \"./node_modules/tslib/tslib.es6.js\");\n/* harmony import */ var _antv_g_math__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @antv/g-math */ \"./node_modules/@antv/g-math/esm/index.js\");\n/* harmony import */ var _antv_util__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @antv/util */ \"./node_modules/@antv/util/esm/index.js\");\n/* harmony import */ var _base__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./base */ \"./node_modules/@antv/g-canvas/esm/shape/base.js\");\n/* harmony import */ var _util_in_stroke_polyline__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../util/in-stroke/polyline */ \"./node_modules/@antv/g-canvas/esm/util/in-stroke/polyline.js\");\n/* harmony import */ var _util_arrow__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../util/arrow */ \"./node_modules/@antv/g-canvas/esm/util/arrow.js\");\n\n\n\n\n\n\n\nvar PolyLine = /** @class */ (function (_super) {\n Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__extends\"])(PolyLine, _super);\n function PolyLine() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n PolyLine.prototype.getDefaultAttrs = function () {\n var attrs = _super.prototype.getDefaultAttrs.call(this);\n return Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__assign\"])(Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__assign\"])({}, attrs), { startArrow: false, endArrow: false });\n };\n PolyLine.prototype.initAttrs = function (attrs) {\n this.setArrow();\n };\n // 更新属性时,检测是否更改了 points\n PolyLine.prototype.onAttrChange = function (name, value, originValue) {\n _super.prototype.onAttrChange.call(this, name, value, originValue);\n this.setArrow();\n if (['points'].indexOf(name) !== -1) {\n this._resetCache();\n }\n };\n PolyLine.prototype._resetCache = function () {\n this.set('totalLength', null);\n this.set('tCache', null);\n };\n PolyLine.prototype.setArrow = function () {\n var attrs = this.attr();\n var _a = this.attrs, points = _a.points, startArrow = _a.startArrow, endArrow = _a.endArrow;\n var length = points.length;\n var x1 = points[0][0];\n var y1 = points[0][1];\n var x2 = points[length - 1][0];\n var y2 = points[length - 1][1];\n if (startArrow) {\n _util_arrow__WEBPACK_IMPORTED_MODULE_5__[\"addStartArrow\"](this, attrs, points[1][0], points[1][1], x1, y1);\n }\n if (endArrow) {\n _util_arrow__WEBPACK_IMPORTED_MODULE_5__[\"addEndArrow\"](this, attrs, points[length - 2][0], points[length - 2][1], x2, y2);\n }\n };\n // 不允许 fill\n PolyLine.prototype.isFill = function () {\n return false;\n };\n PolyLine.prototype.isInStrokeOrPath = function (x, y, isStroke, isFill, lineWidth) {\n // 没有设置 stroke 不能被拾取, 没有线宽不能被拾取\n if (!isStroke || !lineWidth) {\n return false;\n }\n var points = this.attr().points;\n return Object(_util_in_stroke_polyline__WEBPACK_IMPORTED_MODULE_4__[\"default\"])(points, lineWidth, x, y, false);\n };\n // 始终填充\n PolyLine.prototype.isStroke = function () {\n return true;\n };\n PolyLine.prototype.createPath = function (context) {\n var _a = this.attr(), points = _a.points, startArrow = _a.startArrow, endArrow = _a.endArrow;\n var length = points.length;\n if (points.length < 2) {\n return;\n }\n var x1 = points[0][0];\n var y1 = points[0][1];\n var x2 = points[length - 1][0];\n var y2 = points[length - 1][1];\n // 如果定义了箭头,并且是自定义箭头,线条相应缩进\n if (startArrow && startArrow.d) {\n var distance = _util_arrow__WEBPACK_IMPORTED_MODULE_5__[\"getShortenOffset\"](x1, y1, points[1][0], points[1][1], startArrow.d);\n x1 += distance.dx;\n y1 += distance.dy;\n }\n if (endArrow && endArrow.d) {\n var distance = _util_arrow__WEBPACK_IMPORTED_MODULE_5__[\"getShortenOffset\"](points[length - 2][0], points[length - 2][1], x2, y2, endArrow.d);\n x2 -= distance.dx;\n y2 -= distance.dy;\n }\n context.beginPath();\n context.moveTo(x1, y1);\n for (var i = 0; i < length - 1; i++) {\n var point = points[i];\n context.lineTo(point[0], point[1]);\n }\n context.lineTo(x2, y2);\n };\n PolyLine.prototype.afterDrawPath = function (context) {\n var startArrowShape = this.get('startArrowShape');\n var endArrowShape = this.get('endArrowShape');\n if (startArrowShape) {\n startArrowShape.draw(context);\n }\n if (endArrowShape) {\n endArrowShape.draw(context);\n }\n };\n /**\n * Get length of polyline\n * @return {number} length\n */\n PolyLine.prototype.getTotalLength = function () {\n var points = this.attr().points;\n // get totalLength from cache\n var totalLength = this.get('totalLength');\n if (!Object(_antv_util__WEBPACK_IMPORTED_MODULE_2__[\"isNil\"])(totalLength)) {\n return totalLength;\n }\n this.set('totalLength', _antv_g_math__WEBPACK_IMPORTED_MODULE_1__[\"Polyline\"].length(points));\n return this.get('totalLength');\n };\n /**\n * Get point according to ratio\n * @param {number} ratio\n * @return {Point} point\n */\n PolyLine.prototype.getPoint = function (ratio) {\n var points = this.attr().points;\n // get tCache from cache\n var tCache = this.get('tCache');\n if (!tCache) {\n this._setTcache();\n tCache = this.get('tCache');\n }\n var subt;\n var index;\n Object(_antv_util__WEBPACK_IMPORTED_MODULE_2__[\"each\"])(tCache, function (v, i) {\n if (ratio >= v[0] && ratio <= v[1]) {\n subt = (ratio - v[0]) / (v[1] - v[0]);\n index = i;\n }\n });\n return _antv_g_math__WEBPACK_IMPORTED_MODULE_1__[\"Line\"].pointAt(points[index][0], points[index][1], points[index + 1][0], points[index + 1][1], subt);\n };\n PolyLine.prototype._setTcache = function () {\n var points = this.attr().points;\n if (!points || points.length === 0) {\n return;\n }\n var totalLength = this.getTotalLength();\n if (totalLength <= 0) {\n return;\n }\n var tempLength = 0;\n var tCache = [];\n var segmentT;\n var segmentL;\n Object(_antv_util__WEBPACK_IMPORTED_MODULE_2__[\"each\"])(points, function (p, i) {\n if (points[i + 1]) {\n segmentT = [];\n segmentT[0] = tempLength / totalLength;\n segmentL = _antv_g_math__WEBPACK_IMPORTED_MODULE_1__[\"Line\"].length(p[0], p[1], points[i + 1][0], points[i + 1][1]);\n tempLength += segmentL;\n segmentT[1] = tempLength / totalLength;\n tCache.push(segmentT);\n }\n });\n this.set('tCache', tCache);\n };\n /**\n * Get start tangent vector\n * @return {Array}\n */\n PolyLine.prototype.getStartTangent = function () {\n var points = this.attr().points;\n var result = [];\n result.push([points[1][0], points[1][1]]);\n result.push([points[0][0], points[0][1]]);\n return result;\n };\n /**\n * Get end tangent vector\n * @return {Array}\n */\n PolyLine.prototype.getEndTangent = function () {\n var points = this.attr().points;\n var l = points.length - 1;\n var result = [];\n result.push([points[l - 1][0], points[l - 1][1]]);\n result.push([points[l][0], points[l][1]]);\n return result;\n };\n return PolyLine;\n}(_base__WEBPACK_IMPORTED_MODULE_3__[\"default\"]));\n/* harmony default export */ __webpack_exports__[\"default\"] = (PolyLine);\n//# sourceMappingURL=polyline.js.map\n\n//# sourceURL=webpack:///./node_modules/@antv/g-canvas/esm/shape/polyline.js?");
/***/ }),
/***/ "./node_modules/@antv/g-canvas/esm/shape/rect.js":
/*!*******************************************************!*\
!*** ./node_modules/@antv/g-canvas/esm/shape/rect.js ***!
\*******************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tslib */ \"./node_modules/tslib/tslib.es6.js\");\n/* harmony import */ var _base__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./base */ \"./node_modules/@antv/g-canvas/esm/shape/base.js\");\n/* harmony import */ var _util_parse__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../util/parse */ \"./node_modules/@antv/g-canvas/esm/util/parse.js\");\n/* harmony import */ var _util_util__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../util/util */ \"./node_modules/@antv/g-canvas/esm/util/util.js\");\n/* harmony import */ var _util_in_stroke_rect__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../util/in-stroke/rect */ \"./node_modules/@antv/g-canvas/esm/util/in-stroke/rect.js\");\n/* harmony import */ var _util_in_stroke_rect_radius__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../util/in-stroke/rect-radius */ \"./node_modules/@antv/g-canvas/esm/util/in-stroke/rect-radius.js\");\n/* harmony import */ var _util_in_path_point_in_path__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../util/in-path/point-in-path */ \"./node_modules/@antv/g-canvas/esm/util/in-path/point-in-path.js\");\n/**\n * @fileoverview 矩形\n * @author dxq613@gmail.com\n */\n\n\n\n\n\n\n\nvar Rect = /** @class */ (function (_super) {\n Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__extends\"])(Rect, _super);\n function Rect() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n Rect.prototype.getDefaultAttrs = function () {\n var attrs = _super.prototype.getDefaultAttrs.call(this);\n return Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__assign\"])(Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__assign\"])({}, attrs), { x: 0, y: 0, width: 0, height: 0, radius: 0 });\n };\n Rect.prototype.isInStrokeOrPath = function (x, y, isStroke, isFill, lineWidth) {\n var attrs = this.attr();\n var minX = attrs.x;\n var minY = attrs.y;\n var width = attrs.width;\n var height = attrs.height;\n var radius = attrs.radius;\n // 无圆角时的策略\n if (!radius) {\n var halfWidth = lineWidth / 2;\n // 同时填充和带有边框\n if (isFill && isStroke) {\n return Object(_util_util__WEBPACK_IMPORTED_MODULE_3__[\"inBox\"])(minX - halfWidth, minY - halfWidth, width + halfWidth, height + halfWidth, x, y);\n }\n // 仅填充\n if (isFill) {\n return Object(_util_util__WEBPACK_IMPORTED_MODULE_3__[\"inBox\"])(minX, minY, width, height, x, y);\n }\n if (isStroke) {\n return Object(_util_in_stroke_rect__WEBPACK_IMPORTED_MODULE_4__[\"default\"])(minX, minY, width, height, lineWidth, x, y);\n }\n }\n else {\n var isHit = false;\n if (isStroke) {\n isHit = Object(_util_in_stroke_rect_radius__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(minX, minY, width, height, radius, lineWidth, x, y);\n }\n // 仅填充时带有圆角的矩形直接通过图形拾取\n // 以后可以改成纯数学的近似拾取,将圆弧切割成多边形\n if (!isHit && isFill) {\n isHit = Object(_util_in_path_point_in_path__WEBPACK_IMPORTED_MODULE_6__[\"default\"])(this, x, y);\n }\n return isHit;\n }\n };\n Rect.prototype.createPath = function (context) {\n var attrs = this.attr();\n var x = attrs.x;\n var y = attrs.y;\n var width = attrs.width;\n var height = attrs.height;\n var radius = attrs.radius;\n context.beginPath();\n if (radius === 0) {\n // 改成原生的rect方法\n context.rect(x, y, width, height);\n }\n else {\n var _a = Object(_util_parse__WEBPACK_IMPORTED_MODULE_2__[\"parseRadius\"])(radius), r1 = _a[0], r2 = _a[1], r3 = _a[2], r4 = _a[3];\n context.moveTo(x + r1, y);\n context.lineTo(x + width - r2, y);\n r2 !== 0 && context.arc(x + width - r2, y + r2, r2, -Math.PI / 2, 0);\n context.lineTo(x + width, y + height - r3);\n r3 !== 0 && context.arc(x + width - r3, y + height - r3, r3, 0, Math.PI / 2);\n context.lineTo(x + r4, y + height);\n r4 !== 0 && context.arc(x + r4, y + height - r4, r4, Math.PI / 2, Math.PI);\n context.lineTo(x, y + r1);\n r1 !== 0 && context.arc(x + r1, y + r1, r1, Math.PI, Math.PI * 1.5);\n context.closePath();\n }\n };\n return Rect;\n}(_base__WEBPACK_IMPORTED_MODULE_1__[\"default\"]));\n/* harmony default export */ __webpack_exports__[\"default\"] = (Rect);\n//# sourceMappingURL=rect.js.map\n\n//# sourceURL=webpack:///./node_modules/@antv/g-canvas/esm/shape/rect.js?");
/***/ }),
/***/ "./node_modules/@antv/g-canvas/esm/shape/text.js":
/*!*******************************************************!*\
!*** ./node_modules/@antv/g-canvas/esm/shape/text.js ***!
\*******************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tslib */ \"./node_modules/tslib/tslib.es6.js\");\n/* harmony import */ var _base__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./base */ \"./node_modules/@antv/g-canvas/esm/shape/base.js\");\n/* harmony import */ var _util_util__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../util/util */ \"./node_modules/@antv/g-canvas/esm/util/util.js\");\n/* harmony import */ var _antv_g_base__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @antv/g-base */ \"./node_modules/@antv/g-base/esm/index.js\");\n/**\n * @fileoverview 文本\n * @author dxq613@gmail.com\n */\n\n\n\n\nvar Text = /** @class */ (function (_super) {\n Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__extends\"])(Text, _super);\n function Text() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n // 默认文本属性\n Text.prototype.getDefaultAttrs = function () {\n var attrs = _super.prototype.getDefaultAttrs.call(this);\n return Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__assign\"])(Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__assign\"])({}, attrs), { x: 0, y: 0, text: null, fontSize: 12, fontFamily: 'sans-serif', fontStyle: 'normal', fontWeight: 'normal', fontVariant: 'normal', textAlign: 'start', textBaseline: 'bottom' });\n };\n // 仅仅使用包围盒检测来进行拾取\n Text.prototype.isOnlyHitBox = function () {\n return true;\n };\n // 初始化时组合 font,同时判断 text 是否换行\n Text.prototype.initAttrs = function (attrs) {\n this._assembleFont();\n if (attrs.text) {\n this._setText(attrs.text);\n }\n };\n // 组装字体\n Text.prototype._assembleFont = function () {\n var attrs = this.attrs;\n attrs.font = Object(_antv_g_base__WEBPACK_IMPORTED_MODULE_3__[\"assembleFont\"])(attrs);\n };\n // 如果文本换行,则缓存数组\n Text.prototype._setText = function (text) {\n var textArr = null;\n if (Object(_util_util__WEBPACK_IMPORTED_MODULE_2__[\"isString\"])(text) && text.indexOf('\\n') !== -1) {\n textArr = text.split('\\n');\n }\n this.set('textArr', textArr);\n };\n // 更新属性时,检测是否更改了 font、text\n Text.prototype.onAttrChange = function (name, value, originValue) {\n _super.prototype.onAttrChange.call(this, name, value, originValue);\n if (name.startsWith('font')) {\n this._assembleFont();\n }\n if (name === 'text') {\n this._setText(value);\n }\n };\n // 这个方法在 text 时没有可以做的事情,如果要支持文字背景时可以考虑\n // createPath(context) {\n // }\n // 如果文本多行,需要获取文本间距\n Text.prototype._getSpaceingY = function () {\n var attrs = this.attrs;\n var lineHeight = attrs.lineHeight;\n var fontSize = attrs.fontSize * 1;\n return lineHeight ? lineHeight - fontSize : fontSize * 0.14;\n };\n // 绘制文本,考虑多行的场景\n Text.prototype._drawTextArr = function (context, textArr, isFill) {\n var attrs = this.attrs;\n var textBaseline = attrs.textBaseline;\n var x = attrs.x;\n var y = attrs.y;\n var fontSize = attrs.fontSize * 1;\n var spaceingY = this._getSpaceingY();\n var height = Object(_antv_g_base__WEBPACK_IMPORTED_MODULE_3__[\"getTextHeight\"])(attrs.text, attrs.fontSize, attrs.lineHeight);\n var subY;\n Object(_util_util__WEBPACK_IMPORTED_MODULE_2__[\"each\"])(textArr, function (subText, index) {\n subY = y + index * (spaceingY + fontSize) - height + fontSize; // bottom;\n if (textBaseline === 'middle')\n subY += height - fontSize - (height - fontSize) / 2;\n if (textBaseline === 'top')\n subY += height - fontSize;\n if (!Object(_util_util__WEBPACK_IMPORTED_MODULE_2__[\"isNil\"])(subText)) {\n if (isFill) {\n context.fillText(subText, x, subY);\n }\n else {\n context.strokeText(subText, x, subY);\n }\n }\n });\n };\n // 绘制文本,同时考虑填充和绘制边框\n Text.prototype._drawText = function (context, isFill) {\n var attrs = this.attr();\n var x = attrs.x;\n var y = attrs.y;\n var textArr = this.get('textArr');\n if (textArr) {\n this._drawTextArr(context, textArr, isFill);\n }\n else {\n var text = attrs.text;\n if (!Object(_util_util__WEBPACK_IMPORTED_MODULE_2__[\"isNil\"])(text)) {\n if (isFill) {\n context.fillText(text, x, y);\n }\n else {\n context.strokeText(text, x, y);\n }\n }\n }\n };\n // 复写绘制和填充的逻辑:对于文本,应该先绘制边框,再进行填充\n Text.prototype.strokeAndFill = function (context) {\n var _a = this.attrs, lineWidth = _a.lineWidth, opacity = _a.opacity, strokeOpacity = _a.strokeOpacity, fillOpacity = _a.fillOpacity;\n if (this.isStroke()) {\n if (lineWidth > 0) {\n if (!Object(_util_util__WEBPACK_IMPORTED_MODULE_2__[\"isNil\"])(strokeOpacity) && strokeOpacity !== 1) {\n context.globalAlpha = opacity;\n }\n this.stroke(context);\n }\n }\n if (this.isFill()) {\n if (!Object(_util_util__WEBPACK_IMPORTED_MODULE_2__[\"isNil\"])(fillOpacity) && fillOpacity !== 1) {\n context.globalAlpha = fillOpacity;\n this.fill(context);\n context.globalAlpha = opacity;\n }\n else {\n this.fill(context);\n }\n }\n this.afterDrawPath(context);\n };\n // 复写填充逻辑\n Text.prototype.fill = function (context) {\n this._drawText(context, true);\n };\n // 复写绘制边框的逻辑\n Text.prototype.stroke = function (context) {\n this._drawText(context, false);\n };\n return Text;\n}(_base__WEBPACK_IMPORTED_MODULE_1__[\"default\"]));\n/* harmony default export */ __webpack_exports__[\"default\"] = (Text);\n//# sourceMappingURL=text.js.map\n\n//# sourceURL=webpack:///./node_modules/@antv/g-canvas/esm/shape/text.js?");
/***/ }),
/***/ "./node_modules/@antv/g-canvas/esm/util/arc-params.js":
/*!************************************************************!*\
!*** ./node_modules/@antv/g-canvas/esm/util/arc-params.js ***!
\************************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return getArcParams; });\n/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./util */ \"./node_modules/@antv/g-canvas/esm/util/util.js\");\n\n// 向量长度\nfunction vMag(v) {\n return Math.sqrt(v[0] * v[0] + v[1] * v[1]);\n}\n// u.v/|u||v|,计算夹角的余弦值\nfunction vRatio(u, v) {\n // 当存在一个向量的长度为 0 时,夹角也为 0,即夹角的余弦值为 1\n return vMag(u) * vMag(v) ? (u[0] * v[0] + u[1] * v[1]) / (vMag(u) * vMag(v)) : 1;\n}\n// 向量角度\nfunction vAngle(u, v) {\n return (u[0] * v[1] < u[1] * v[0] ? -1 : 1) * Math.acos(vRatio(u, v));\n}\n// A 0:rx 1:ry 2:x-axis-rotation 3:large-arc-flag 4:sweep-flag 5: x 6: y\nfunction getArcParams(startPoint, params) {\n var rx = params[1];\n var ry = params[2];\n var xRotation = Object(_util__WEBPACK_IMPORTED_MODULE_0__[\"mod\"])(Object(_util__WEBPACK_IMPORTED_MODULE_0__[\"toRadian\"])(params[3]), Math.PI * 2);\n var arcFlag = params[4];\n var sweepFlag = params[5];\n // 弧形起点坐标\n var x1 = startPoint[0];\n var y1 = startPoint[1];\n // 弧形终点坐标\n var x2 = params[6];\n var y2 = params[7];\n var xp = (Math.cos(xRotation) * (x1 - x2)) / 2.0 + (Math.sin(xRotation) * (y1 - y2)) / 2.0;\n var yp = (-1 * Math.sin(xRotation) * (x1 - x2)) / 2.0 + (Math.cos(xRotation) * (y1 - y2)) / 2.0;\n var lambda = (xp * xp) / (rx * rx) + (yp * yp) / (ry * ry);\n if (lambda > 1) {\n rx *= Math.sqrt(lambda);\n ry *= Math.sqrt(lambda);\n }\n var diff = rx * rx * (yp * yp) + ry * ry * (xp * xp);\n var f = diff ? Math.sqrt((rx * rx * (ry * ry) - diff) / diff) : 1;\n if (arcFlag === sweepFlag) {\n f *= -1;\n }\n if (isNaN(f)) {\n f = 0;\n }\n // 旋转前的起点坐标,且当长半轴和短半轴的长度为 0 时,坐标按 (0, 0) 处理\n var cxp = ry ? (f * rx * yp) / ry : 0;\n var cyp = rx ? (f * -ry * xp) / rx : 0;\n // 椭圆圆心坐标\n var cx = (x1 + x2) / 2.0 + Math.cos(xRotation) * cxp - Math.sin(xRotation) * cyp;\n var cy = (y1 + y2) / 2.0 + Math.sin(xRotation) * cxp + Math.cos(xRotation) * cyp;\n // 起始点的单位向量\n var u = [(xp - cxp) / rx, (yp - cyp) / ry];\n // 终止点的单位向量\n var v = [(-1 * xp - cxp) / rx, (-1 * yp - cyp) / ry];\n // 计算起始点和圆心的连线,与 x 轴正方向的夹角\n var theta = vAngle([1, 0], u);\n // 计算圆弧起始点和终止点与椭圆圆心连线的夹角\n var dTheta = vAngle(u, v);\n if (vRatio(u, v) <= -1) {\n dTheta = Math.PI;\n }\n if (vRatio(u, v) >= 1) {\n dTheta = 0;\n }\n if (sweepFlag === 0 && dTheta > 0) {\n dTheta = dTheta - 2 * Math.PI;\n }\n if (sweepFlag === 1 && dTheta < 0) {\n dTheta = dTheta + 2 * Math.PI;\n }\n return {\n cx: cx,\n cy: cy,\n // 弧形的起点和终点相同时,长轴和短轴的长度按 0 处理\n rx: Object(_util__WEBPACK_IMPORTED_MODULE_0__[\"isSamePoint\"])(startPoint, [x2, y2]) ? 0 : rx,\n ry: Object(_util__WEBPACK_IMPORTED_MODULE_0__[\"isSamePoint\"])(startPoint, [x2, y2]) ? 0 : ry,\n startAngle: theta,\n endAngle: theta + dTheta,\n xRotation: xRotation,\n arcFlag: arcFlag,\n sweepFlag: sweepFlag,\n };\n}\n//# sourceMappingURL=arc-params.js.map\n\n//# sourceURL=webpack:///./node_modules/@antv/g-canvas/esm/util/arc-params.js?");
/***/ }),
/***/ "./node_modules/@antv/g-canvas/esm/util/arrow.js":
/*!*******************************************************!*\
!*** ./node_modules/@antv/g-canvas/esm/util/arrow.js ***!
\*******************************************************/
/*! exports provided: getShortenOffset, addStartArrow, addEndArrow */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"getShortenOffset\", function() { return getShortenOffset; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"addStartArrow\", function() { return addStartArrow; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"addEndArrow\", function() { return addEndArrow; });\n/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tslib */ \"./node_modules/tslib/tslib.es6.js\");\n/* harmony import */ var _shape__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../shape */ \"./node_modules/@antv/g-canvas/esm/shape/index.js\");\n\n\nvar sin = Math.sin, cos = Math.cos, atan2 = Math.atan2, PI = Math.PI;\nfunction _addDefaultArrow(shape, attrs, x1, y1, x2, y2, isStart) {\n var stroke = attrs.stroke, lineWidth = attrs.lineWidth;\n var x = x1 - x2;\n var y = y1 - y2;\n var rad = atan2(y, x);\n var arrowShape = new _shape__WEBPACK_IMPORTED_MODULE_1__[\"Path\"]({\n type: 'path',\n canvas: shape.get('canvas'),\n isArrowShape: true,\n attrs: {\n // 默认箭头的边长为 10,夹角为 60 度\n path: \"M\" + 10 * cos(PI / 6) + \",\" + 10 * sin(PI / 6) + \" L0,0 L\" + 10 * cos(PI / 6) + \",-\" + 10 * sin(PI / 6),\n // 使用 shape stroke 值\n stroke: stroke,\n lineWidth: lineWidth,\n },\n });\n arrowShape.translate(x2, y2);\n arrowShape.rotateAtPoint(x2, y2, rad);\n shape.set(isStart ? 'startArrowShape' : 'endArrowShape', arrowShape);\n}\n/**\n * 箭头 path 的设置要求\n * 1. 箭头顶点坐标需要为 (0, 0)\n * 2. 箭头夹角的中心分割线需要与 X 轴正方向对齐\n */\nfunction _addCustomizedArrow(shape, attrs, x1, y1, x2, y2, isStart) {\n var startArrow = attrs.startArrow, endArrow = attrs.endArrow, stroke = attrs.stroke, lineWidth = attrs.lineWidth;\n var arrowAttrs = isStart ? startArrow : endArrow;\n var d = arrowAttrs.d, arrowFill = arrowAttrs.fill, arrowStroke = arrowAttrs.stroke, arrowLineWidth = arrowAttrs.lineWidth, restAttrs = Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__rest\"])(arrowAttrs, [\"d\", \"fill\", \"stroke\", \"lineWidth\"]);\n var x = x1 - x2;\n var y = y1 - y2;\n var rad = atan2(y, x);\n if (d) {\n x2 = x2 - cos(rad) * d;\n y2 = y2 - sin(rad) * d;\n }\n var arrowShape = new _shape__WEBPACK_IMPORTED_MODULE_1__[\"Path\"]({\n type: 'path',\n canvas: shape.get('canvas'),\n isArrowShape: true,\n attrs: Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__assign\"])(Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__assign\"])({}, restAttrs), { \n // 支持单独设置箭头的 stroke 和 lineWidth,若为空则使用 shape 的值\n stroke: arrowStroke || stroke, lineWidth: arrowLineWidth || lineWidth, \n // 箭头是否填充需要手动设置,不会继承自 shape 的值\n fill: arrowFill }),\n });\n arrowShape.translate(x2, y2);\n arrowShape.rotateAtPoint(x2, y2, rad);\n shape.set(isStart ? 'startArrowShape' : 'endArrowShape', arrowShape);\n}\n/**\n * 如果自定义箭头并且有 d 需要做偏移,如果直接画,线条会超出箭头尖端,因此需要根据箭头偏移 d, 返回线需要缩短的距离\n * |----------------\n * |<|--------------\n * |\n * @param {number} x1 起始点 x\n * @param {number} y1 起始点 y\n * @param {number} x2 箭头作用点 x\n * @param {number} y2 箭头作用点 y\n * @param {number} d 箭头沿线条方向的偏移距离\n * @return {{dx: number, dy: number}} 返回线条偏移距离\n */\nfunction getShortenOffset(x1, y1, x2, y2, d) {\n var rad = atan2(y2 - y1, x2 - x1);\n return {\n dx: cos(rad) * d,\n dy: sin(rad) * d,\n };\n}\n/**\n * 绘制起始箭头\n * @param {IShape} shape 图形\n * @param {ShapeAttrs} attrs shape 的绘图属性\n * @param {number} x1 起始点 x\n * @param {number} y1 起始点 y\n * @param {number} x2 箭头作用点 x\n * @param {number} y2 箭头作用点 y\n */\nfunction addStartArrow(shape, attrs, x1, y1, x2, y2) {\n if (typeof attrs.startArrow === 'object') {\n _addCustomizedArrow(shape, attrs, x1, y1, x2, y2, true);\n }\n else if (attrs.startArrow) {\n _addDefaultArrow(shape, attrs, x1, y1, x2, y2, true);\n }\n else {\n shape.set('startArrowShape', null);\n }\n}\n/**\n * 绘制结束箭头\n * @param {IShape} shape 图形\n * @param {ShapeAttrs} attrs shape 的绘图属性\n * @param {number} x1 起始点 x\n * @param {number} y1 起始点 y\n * @param {number} x2 箭头作用点 x\n * @param {number} y2 箭头作用点 y\n */\nfunction addEndArrow(shape, attrs, x1, y1, x2, y2) {\n if (typeof attrs.endArrow === 'object') {\n _addCustomizedArrow(shape, attrs, x1, y1, x2, y2, false);\n }\n else if (attrs.endArrow) {\n _addDefaultArrow(shape, attrs, x1, y1, x2, y2, false);\n }\n else {\n shape.set('startArrowShape', null);\n }\n}\n//# sourceMappingURL=arrow.js.map\n\n//# sourceURL=webpack:///./node_modules/@antv/g-canvas/esm/util/arrow.js?");
/***/ }),
/***/ "./node_modules/@antv/g-canvas/esm/util/draw.js":
/*!******************************************************!*\
!*** ./node_modules/@antv/g-canvas/esm/util/draw.js ***!
\******************************************************/
/*! exports provided: applyAttrsToContext, drawChildren, checkRefresh, checkChildrenRefresh, clearChanged, drawPath, refreshElement, getRefreshRegion, getMergedRegion, mergeView */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"applyAttrsToContext\", function() { return applyAttrsToContext; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"drawChildren\", function() { return drawChildren; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"checkRefresh\", function() { return checkRefresh; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"checkChildrenRefresh\", function() { return checkChildrenRefresh; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"clearChanged\", function() { return clearChanged; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"drawPath\", function() { return drawPath; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"refreshElement\", function() { return refreshElement; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"getRefreshRegion\", function() { return getRefreshRegion; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"getMergedRegion\", function() { return getMergedRegion; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"mergeView\", function() { return mergeView; });\n/* harmony import */ var _antv_util__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @antv/util */ \"./node_modules/@antv/util/esm/index.js\");\n/* harmony import */ var _parse__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./parse */ \"./node_modules/@antv/g-canvas/esm/util/parse.js\");\n/* harmony import */ var _arc_params__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./arc-params */ \"./node_modules/@antv/g-canvas/esm/util/arc-params.js\");\n/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./util */ \"./node_modules/@antv/g-canvas/esm/util/util.js\");\n/* harmony import */ var _util_arrow__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../util/arrow */ \"./node_modules/@antv/g-canvas/esm/util/arrow.js\");\n\n\n\n\n\nvar SHAPE_ATTRS_MAP = {\n fill: 'fillStyle',\n stroke: 'strokeStyle',\n opacity: 'globalAlpha',\n};\nfunction applyAttrsToContext(context, element) {\n var attrs = element.attr();\n for (var k in attrs) {\n var v = attrs[k];\n // 转换一下不与 canvas 兼容的属性名\n var name_1 = SHAPE_ATTRS_MAP[k] ? SHAPE_ATTRS_MAP[k] : k;\n if (name_1 === 'matrix' && v) {\n // 设置矩阵\n context.transform(v[0], v[1], v[3], v[4], v[6], v[7]);\n }\n else if (name_1 === 'lineDash' && context.setLineDash) {\n // 设置虚线,只支持数组形式,非数组形式不做任何操作\n Object(_antv_util__WEBPACK_IMPORTED_MODULE_0__[\"isArray\"])(v) && context.setLineDash(v);\n }\n else {\n if (name_1 === 'strokeStyle' || name_1 === 'fillStyle') {\n // 如果存在渐变、pattern 这个开销有些大\n // 可以考虑缓存机制,通过 hasUpdate 来避免一些运算\n v = Object(_parse__WEBPACK_IMPORTED_MODULE_1__[\"parseStyle\"])(context, element, v);\n }\n else if (name_1 === 'globalAlpha') {\n // opacity 效果可以叠加,子元素的 opacity 需要与父元素 opacity 相乘\n v = v * context.globalAlpha;\n }\n context[name_1] = v;\n }\n }\n}\nfunction drawChildren(context, children, region) {\n for (var i = 0; i < children.length; i++) {\n var child = children[i];\n if (child.cfg.visible) {\n child.draw(context, region);\n }\n else {\n child.skipDraw();\n }\n }\n}\n// 这个地方的逻辑比较复杂,简单画了一张图:https://www.yuque.com/antv/ou292n/pcgt5g#OW1QE\nfunction checkRefresh(canvas, children, region) {\n var refreshElements = canvas.get('refreshElements');\n // 先遍历需要刷新的元素,将这些元素的父元素也设置 refresh\n Object(_antv_util__WEBPACK_IMPORTED_MODULE_0__[\"each\"])(refreshElements, function (el) {\n if (el !== canvas) {\n var parent_1 = el.cfg.parent;\n while (parent_1 && parent_1 !== canvas && !parent_1.cfg.refresh) {\n parent_1.cfg.refresh = true;\n parent_1 = parent_1.cfg.parent;\n }\n }\n });\n if (refreshElements[0] === canvas) {\n setChildrenRefresh(children, region);\n }\n else {\n // 检查所有子元素是否可以刷新\n checkChildrenRefresh(children, region);\n }\n}\n// 检查所有的子元素是否应该更新\nfunction checkChildrenRefresh(children, region) {\n for (var i = 0; i < children.length; i++) {\n var child = children[i];\n if (child.cfg.visible) {\n // 先判断 hasChanged,因为它的优先级判断应该高于 refresh\n if (child.cfg.hasChanged) {\n // 如果节点发生了 change,则需要级联设置子元素的 refresh\n child.cfg.refresh = true;\n if (child.isGroup()) {\n setChildrenRefresh(child.cfg.children, region);\n }\n }\n else if (child.cfg.refresh) {\n // 如果当前图形/分组 refresh = true,说明其子节点存在 changed\n if (child.isGroup()) {\n checkChildrenRefresh(child.cfg.children, region);\n }\n }\n else {\n // 这个分支说明此次局部刷新,所有的节点和父元素没有发生变化,仅需要检查包围盒(缓存)是否相交即可\n var refresh = checkElementRefresh(child, region);\n child.cfg.refresh = refresh;\n if (refresh && child.isGroup()) {\n // 如果需要刷新,说明子元素也需要刷新,继续进行判定\n checkChildrenRefresh(child.cfg.children, region);\n }\n }\n }\n }\n}\n// 由于对改变的图形放入 refreshElements 时做了优化,判定父元素 changed 时不加入\n// 那么有可能会出现 elements 都为空,所以最终 group\nfunction clearChanged(elements) {\n for (var i = 0; i < elements.length; i++) {\n var el = elements[i];\n el.cfg.hasChanged = false;\n // 级联清理\n if (el.isGroup() && !el.destroyed) {\n clearChanged(el.cfg.children);\n }\n }\n}\n// 当某个父元素发生改变时,调用这个方法级联设置 refresh\nfunction setChildrenRefresh(children, region) {\n for (var i = 0; i < children.length; i++) {\n var child = children[i];\n if (!child.cfg.visible) {\n continue;\n }\n // let refresh = true;\n // 获取缓存的 bbox,如果这个 bbox 还存在则说明父元素不是矩阵发生了改变\n // const bbox = child.cfg.canvasBBox;\n // if (bbox) {\n // // 如果这时候\n // refresh = intersectRect(bbox, region);\n // }\n child.cfg.refresh = true;\n // 如果需要刷新当前节点,所有的子元素设置 refresh\n if (child.isGroup()) {\n setChildrenRefresh(child.get('children'), region);\n }\n }\n}\nfunction checkElementRefresh(shape, region) {\n var bbox = shape.cfg.cacheCanvasBBox;\n var isAllow = shape.cfg.isInView && bbox && Object(_util__WEBPACK_IMPORTED_MODULE_3__[\"intersectRect\"])(bbox, region);\n return isAllow;\n}\n// 绘制 path\nfunction drawPath(shape, context, attrs, arcParamsCache) {\n var path = attrs.path, startArrow = attrs.startArrow, endArrow = attrs.endArrow;\n if (!path) {\n return;\n }\n var currentPoint = [0, 0]; // 当前图形\n var startMovePoint = [0, 0]; // 开始 M 的点,可能会有多个\n var distance = {\n dx: 0,\n dy: 0,\n };\n context.beginPath();\n for (var i = 0; i < path.length; i++) {\n var params = path[i];\n var command = params[0];\n if (i === 0 && startArrow && startArrow.d) {\n var tangent = shape.getStartTangent();\n distance = _util_arrow__WEBPACK_IMPORTED_MODULE_4__[\"getShortenOffset\"](tangent[0][0], tangent[0][1], tangent[1][0], tangent[1][1], startArrow.d);\n }\n else if (i === path.length - 2 && path[i + 1][0] === 'Z' && endArrow && endArrow.d) {\n // 为了防止结尾为 Z 的 segment 缩短不起效,需要取最后两个 segment 特殊处理\n var lastPath = path[i + 1];\n if (lastPath[0] === 'Z') {\n var tangent = shape.getEndTangent();\n distance = _util_arrow__WEBPACK_IMPORTED_MODULE_4__[\"getShortenOffset\"](tangent[0][0], tangent[0][1], tangent[1][0], tangent[1][1], endArrow.d);\n }\n }\n else if (i === path.length - 1 && endArrow && endArrow.d) {\n if (path[0] !== 'Z') {\n var tangent = shape.getEndTangent();\n distance = _util_arrow__WEBPACK_IMPORTED_MODULE_4__[\"getShortenOffset\"](tangent[0][0], tangent[0][1], tangent[1][0], tangent[1][1], endArrow.d);\n }\n }\n var dx = distance.dx, dy = distance.dy;\n // V,H,S,T 都在前面被转换成标准形式\n switch (command) {\n case 'M':\n context.moveTo(params[1] - dx, params[2] - dy);\n startMovePoint = [params[1], params[2]];\n break;\n case 'L':\n context.lineTo(params[1] - dx, params[2] - dy);\n break;\n case 'Q':\n context.quadraticCurveTo(params[1], params[2], params[3] - dx, params[4] - dy);\n break;\n case 'C':\n context.bezierCurveTo(params[1], params[2], params[3], params[4], params[5] - dx, params[6] - dy);\n break;\n case 'A': {\n var arcParams = void 0;\n // 为了加速绘制,可以提供参数的缓存,各个图形自己缓存\n if (arcParamsCache) {\n arcParams = arcParamsCache[i];\n if (!arcParams) {\n arcParams = Object(_arc_params__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(currentPoint, params);\n arcParamsCache[i] = arcParams;\n }\n }\n else {\n arcParams = Object(_arc_params__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(currentPoint, params);\n }\n var cx = arcParams.cx, cy = arcParams.cy, rx = arcParams.rx, ry = arcParams.ry, startAngle = arcParams.startAngle, endAngle = arcParams.endAngle, xRotation = arcParams.xRotation, sweepFlag = arcParams.sweepFlag;\n // 直接使用椭圆的 api\n if (context.ellipse) {\n context.ellipse(cx, cy, rx, ry, xRotation, startAngle, endAngle, 1 - sweepFlag);\n }\n else {\n var r = rx > ry ? rx : ry;\n var scaleX = rx > ry ? 1 : rx / ry;\n var scaleY = rx > ry ? ry / rx : 1;\n context.translate(cx, cy);\n context.rotate(xRotation);\n context.scale(scaleX, scaleY);\n context.arc(0, 0, r, startAngle, endAngle, 1 - sweepFlag);\n context.scale(1 / scaleX, 1 / scaleY);\n context.rotate(-xRotation);\n context.translate(-cx, -cy);\n }\n break;\n }\n case 'Z':\n context.closePath();\n break;\n default:\n break;\n }\n // 有了 Z 后,当前节点从开始 M 的点开始\n if (command === 'Z') {\n currentPoint = startMovePoint;\n }\n else {\n var len = params.length;\n currentPoint = [params[len - 2], params[len - 1]];\n }\n }\n}\n// 刷新图形元素(Shape 或者 Group)\nfunction refreshElement(element, changeType) {\n var canvas = element.get('canvas');\n // 只有存在于 canvas 上时生效\n if (canvas) {\n if (changeType === 'remove') {\n // 一旦 remove,则无法在 element 上拿到包围盒\n // destroy 后所有属性都拿不到,所以需要暂存一下\n // 这是一段 hack 的代码\n element._cacheCanvasBBox = element.get('cacheCanvasBBox');\n }\n // 防止反复刷新\n if (!element.get('hasChanged')) {\n // 但是始终要标记为 hasChanged,便于后面进行局部渲染\n element.set('hasChanged', true);\n // 本来只有局部渲染模式下,才需要记录更新的元素队列\n // if (canvas.get('localRefresh')) {\n // canvas.refreshElement(element, changeType, canvas);\n // }\n // 但对于 https://github.com/antvis/g/issues/422 的场景,全局渲染的模式下也需要记录更新的元素队列\n // 如果当前元素的父元素发生了改变,可以不放入队列,这句话大概能够提升 15% 的初次渲染性能\n if (!(element.cfg.parent && element.cfg.parent.get('hasChanged'))) {\n canvas.refreshElement(element, changeType, canvas);\n if (canvas.get('autoDraw')) {\n canvas.draw();\n }\n }\n }\n }\n}\nfunction getRefreshRegion(element) {\n var region;\n if (!element.destroyed) {\n var cacheBox = element.get('cacheCanvasBBox');\n var validCache = cacheBox && !!(cacheBox.width && cacheBox.height);\n var bbox = element.getCanvasBBox();\n var validBBox = bbox && !!(bbox.width && bbox.height);\n // 是否是有效 bbox 判定,一些 NaN 或者 宽高为 0 的情况过滤掉\n if (validCache && validBBox) {\n region = Object(_util__WEBPACK_IMPORTED_MODULE_3__[\"mergeRegion\"])(cacheBox, bbox);\n }\n else if (validCache) {\n region = cacheBox;\n }\n else if (validBBox) {\n region = bbox;\n }\n }\n else {\n // 因为元素已经销毁所以无法获取到缓存的包围盒\n region = element['_cacheCanvasBBox'];\n }\n return region;\n}\nfunction getMergedRegion(elements) {\n if (!elements.length) {\n return null;\n }\n var minXArr = [];\n var minYArr = [];\n var maxXArr = [];\n var maxYArr = [];\n Object(_antv_util__WEBPACK_IMPORTED_MODULE_0__[\"each\"])(elements, function (el) {\n var region = getRefreshRegion(el);\n if (region) {\n minXArr.push(region.minX);\n minYArr.push(region.minY);\n maxXArr.push(region.maxX);\n maxYArr.push(region.maxY);\n }\n });\n return {\n minX: Object(_antv_util__WEBPACK_IMPORTED_MODULE_0__[\"min\"])(minXArr),\n minY: Object(_antv_util__WEBPACK_IMPORTED_MODULE_0__[\"min\"])(minYArr),\n maxX: Object(_antv_util__WEBPACK_IMPORTED_MODULE_0__[\"max\"])(maxXArr),\n maxY: Object(_antv_util__WEBPACK_IMPORTED_MODULE_0__[\"max\"])(maxYArr),\n };\n}\nfunction mergeView(region, viewRegion) {\n if (!region || !viewRegion) {\n return null;\n }\n // 不相交,则直接返回 null\n if (!Object(_util__WEBPACK_IMPORTED_MODULE_3__[\"intersectRect\"])(region, viewRegion)) {\n return null;\n }\n return {\n minX: Math.max(region.minX, viewRegion.minX),\n minY: Math.max(region.minY, viewRegion.minY),\n maxX: Math.min(region.maxX, viewRegion.maxX),\n maxY: Math.min(region.maxY, viewRegion.maxY),\n };\n}\n//# sourceMappingURL=draw.js.map\n\n//# sourceURL=webpack:///./node_modules/@antv/g-canvas/esm/util/draw.js?");
/***/ }),
/***/ "./node_modules/@antv/g-canvas/esm/util/hit.js":
/*!*****************************************************!*\
!*** ./node_modules/@antv/g-canvas/esm/util/hit.js ***!
\*****************************************************/
/*! exports provided: getShape */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"getShape\", function() { return getShape; });\n/* harmony import */ var _antv_g_base__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @antv/g-base */ \"./node_modules/@antv/g-base/esm/index.js\");\n\nfunction invertFromMatrix(v, matrix) {\n if (matrix) {\n var invertMatrix = Object(_antv_g_base__WEBPACK_IMPORTED_MODULE_0__[\"invert\"])(matrix);\n return Object(_antv_g_base__WEBPACK_IMPORTED_MODULE_0__[\"multiplyVec2\"])(invertMatrix, v);\n }\n return v;\n}\nfunction getRefXY(element, x, y) {\n // @ts-ignore\n var totalMatrix = element.getTotalMatrix();\n if (totalMatrix) {\n var _a = invertFromMatrix([x, y, 1], totalMatrix), refX = _a[0], refY = _a[1];\n return [refX, refY];\n }\n return [x, y];\n}\n// 拾取前的检测,只有通过检测才能继续拾取\nfunction preTest(element, x, y) {\n // @ts-ignore\n if (element.isCanvas && element.isCanvas()) {\n return true;\n }\n // 不允许被拾取,则返回 null\n // @ts-ignore\n if (!Object(_antv_g_base__WEBPACK_IMPORTED_MODULE_0__[\"isAllowCapture\"])(element) || element.cfg.isInView === false) {\n return false;\n }\n if (element.cfg.clipShape) {\n // 如果存在 clip\n var _a = getRefXY(element, x, y), refX = _a[0], refY = _a[1];\n if (element.isClipped(refX, refY)) {\n return false;\n }\n }\n // @ts-ignore ,这个地方调用过于频繁\n var bbox = element.cfg.cacheCanvasBBox || element.getCanvasBBox();\n // 如果没有缓存 bbox,则说明不可见\n // 注释掉的这段可能会加速拾取,上面的语句改写成 const bbox = element.cfg.cacheCanvasBBox;\n // 这时候的拾取假设图形/分组在上一次绘制都在视窗内,但是上面已经判定了 isInView 所以意义不大\n // 现在还调用 element.getCanvasBBox(); 一个很大的原因是便于单元测试\n // if (!bbox) {\n // return false;\n // }\n if (!(x >= bbox.minX && x <= bbox.maxX && y >= bbox.minY && y <= bbox.maxY)) {\n return false;\n }\n return true;\n}\n// 这个方法复写了 g-base 的 getShape\nfunction getShape(container, x, y) {\n // 没有通过检测,则返回 null\n if (!preTest(container, x, y)) {\n return null;\n }\n var shape = null;\n var children = container.getChildren();\n var count = children.length;\n for (var i = count - 1; i >= 0; i--) {\n var child = children[i];\n if (child.isGroup()) {\n shape = getShape(child, x, y);\n }\n else if (preTest(child, x, y)) {\n var curShape = child;\n var _a = getRefXY(child, x, y), refX = _a[0], refY = _a[1];\n // @ts-ignore\n if (curShape.isInShape(refX, refY)) {\n shape = child;\n }\n }\n if (shape) {\n break;\n }\n }\n return shape;\n}\n//# sourceMappingURL=hit.js.map\n\n//# sourceURL=webpack:///./node_modules/@antv/g-canvas/esm/util/hit.js?");
/***/ }),
/***/ "./node_modules/@antv/g-canvas/esm/util/in-path/point-in-path.js":
/*!***********************************************************************!*\
!*** ./node_modules/@antv/g-canvas/esm/util/in-path/point-in-path.js ***!
\***********************************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return isPointInPath; });\n/* harmony import */ var _antv_g_base__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @antv/g-base */ \"./node_modules/@antv/g-base/esm/index.js\");\n\nfunction isPointInPath(shape, x, y) {\n var ctx = Object(_antv_g_base__WEBPACK_IMPORTED_MODULE_0__[\"getOffScreenContext\"])();\n shape.createPath(ctx);\n return ctx.isPointInPath(x, y);\n}\n//# sourceMappingURL=point-in-path.js.map\n\n//# sourceURL=webpack:///./node_modules/@antv/g-canvas/esm/util/in-path/point-in-path.js?");
/***/ }),
/***/ "./node_modules/@antv/g-canvas/esm/util/in-path/polygon.js":
/*!*****************************************************************!*\
!*** ./node_modules/@antv/g-canvas/esm/util/in-path/polygon.js ***!
\*****************************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return isInPolygon; });\n/**\n * @fileoverview 判断点是否在多边形内\n * @author dxq613@gmail.com\n */\n// 多边形的射线检测,参考:https://blog.csdn.net/WilliamSun0122/article/details/77994526\nvar tolerance = 1e-6;\n// 三态函数,判断两个double在eps精度下的大小关系\nfunction dcmp(x) {\n if (Math.abs(x) < tolerance) {\n return 0;\n }\n return x < 0 ? -1 : 1;\n}\n// 判断点Q是否在p1和p2的线段上\nfunction onSegment(p1, p2, q) {\n if ((q[0] - p1[0]) * (p2[1] - p1[1]) === (p2[0] - p1[0]) * (q[1] - p1[1]) &&\n Math.min(p1[0], p2[0]) <= q[0] &&\n q[0] <= Math.max(p1[0], p2[0]) &&\n Math.min(p1[1], p2[1]) <= q[1] &&\n q[1] <= Math.max(p1[1], p2[1])) {\n return true;\n }\n return false;\n}\n// 判断点P在多边形内-射线法\nfunction isInPolygon(points, x, y) {\n var isHit = false;\n var n = points.length;\n if (n <= 2) {\n // svg 中点小于 3 个时,不显示,也无法被拾取\n return false;\n }\n for (var i = 0; i < n; i++) {\n var p1 = points[i];\n var p2 = points[(i + 1) % n];\n if (onSegment(p1, p2, [x, y])) {\n // 点在多边形一条边上\n return true;\n }\n // 前一个判断min(p1[1],p2[1])
0 !== dcmp(p2[1] - y) > 0 &&\n dcmp(x - ((y - p1[1]) * (p1[0] - p2[0])) / (p1[1] - p2[1]) - p1[0]) < 0) {\n isHit = !isHit;\n }\n }\n return isHit;\n}\n//# sourceMappingURL=polygon.js.map\n\n//# sourceURL=webpack:///./node_modules/@antv/g-canvas/esm/util/in-path/polygon.js?");
/***/ }),
/***/ "./node_modules/@antv/g-canvas/esm/util/in-stroke/arc.js":
/*!***************************************************************!*\
!*** ./node_modules/@antv/g-canvas/esm/util/in-stroke/arc.js ***!
\***************************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return arc; });\n/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../util */ \"./node_modules/@antv/g-canvas/esm/util/util.js\");\n\nfunction arc(cx, cy, r, startAngle, endAngle, lineWidth, x, y) {\n var angle = (Math.atan2(y - cy, x - cx) + Math.PI * 2) % (Math.PI * 2); // 转换到 0 - 2 * Math.PI 之间\n if (angle < startAngle || angle > endAngle) {\n return false;\n }\n var point = {\n x: cx + r * Math.cos(angle),\n y: cy + r * Math.sin(angle),\n };\n return Object(_util__WEBPACK_IMPORTED_MODULE_0__[\"distance\"])(point.x, point.y, x, y) <= lineWidth / 2;\n}\n//# sourceMappingURL=arc.js.map\n\n//# sourceURL=webpack:///./node_modules/@antv/g-canvas/esm/util/in-stroke/arc.js?");
/***/ }),
/***/ "./node_modules/@antv/g-canvas/esm/util/in-stroke/line.js":
/*!****************************************************************!*\
!*** ./node_modules/@antv/g-canvas/esm/util/in-stroke/line.js ***!
\****************************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return inLine; });\n/* harmony import */ var _antv_g_math__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @antv/g-math */ \"./node_modules/@antv/g-math/esm/index.js\");\n\nfunction inLine(x1, y1, x2, y2, lineWidth, x, y) {\n var minX = Math.min(x1, x2);\n var maxX = Math.max(x1, x2);\n var minY = Math.min(y1, y2);\n var maxY = Math.max(y1, y2);\n var halfWidth = lineWidth / 2;\n // 因为目前的方案是计算点到直线的距离,而有可能会在延长线上,所以要先判断是否在包围盒内\n // 这种方案会在水平或者竖直的情况下载线的延长线上有半 lineWidth 的误差\n if (!(x >= minX - halfWidth && x <= maxX + halfWidth && y >= minY - halfWidth && y <= maxY + halfWidth)) {\n return false;\n }\n // 因为已经计算了包围盒,所以仅需要计算到直线的距离即可,可以显著提升性能\n return _antv_g_math__WEBPACK_IMPORTED_MODULE_0__[\"Line\"].pointToLine(x1, y1, x2, y2, x, y) <= lineWidth / 2;\n}\n//# sourceMappingURL=line.js.map\n\n//# sourceURL=webpack:///./node_modules/@antv/g-canvas/esm/util/in-stroke/line.js?");
/***/ }),
/***/ "./node_modules/@antv/g-canvas/esm/util/in-stroke/polyline.js":
/*!********************************************************************!*\
!*** ./node_modules/@antv/g-canvas/esm/util/in-stroke/polyline.js ***!
\********************************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return inPolyline; });\n/* harmony import */ var _line__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./line */ \"./node_modules/@antv/g-canvas/esm/util/in-stroke/line.js\");\n\nfunction inPolyline(points, lineWidth, x, y, isClose) {\n var count = points.length;\n if (count < 2) {\n return false;\n }\n for (var i = 0; i < count - 1; i++) {\n var x1 = points[i][0];\n var y1 = points[i][1];\n var x2 = points[i + 1][0];\n var y2 = points[i + 1][1];\n if (Object(_line__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(x1, y1, x2, y2, lineWidth, x, y)) {\n return true;\n }\n }\n // 如果封闭,则计算起始点和结束点的边\n if (isClose) {\n var first = points[0];\n var last = points[count - 1];\n if (Object(_line__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(first[0], first[1], last[0], last[1], lineWidth, x, y)) {\n return true;\n }\n }\n return false;\n}\n//# sourceMappingURL=polyline.js.map\n\n//# sourceURL=webpack:///./node_modules/@antv/g-canvas/esm/util/in-stroke/polyline.js?");
/***/ }),
/***/ "./node_modules/@antv/g-canvas/esm/util/in-stroke/rect-radius.js":
/*!***********************************************************************!*\
!*** ./node_modules/@antv/g-canvas/esm/util/in-stroke/rect-radius.js ***!
\***********************************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return rectWithRadius; });\n/* harmony import */ var _line__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./line */ \"./node_modules/@antv/g-canvas/esm/util/in-stroke/line.js\");\n/* harmony import */ var _arc__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./arc */ \"./node_modules/@antv/g-canvas/esm/util/in-stroke/arc.js\");\n\n\nfunction rectWithRadius(minX, minY, width, height, radius, lineWidth, x, y) {\n var halfWidth = lineWidth / 2;\n return (Object(_line__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(minX + radius, minY, minX + width - radius, minY, lineWidth, x, y) ||\n Object(_line__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(minX + width, minY + radius, minX + width, minY + height - radius, lineWidth, x, y) ||\n Object(_line__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(minX + width - radius, minY + height, minX + radius, minY + height, lineWidth, x, y) ||\n Object(_line__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(minX, minY + height - radius, minX, minY + radius, lineWidth, x, y) ||\n Object(_arc__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(minX + width - radius, minY + radius, radius, 1.5 * Math.PI, 2 * Math.PI, lineWidth, x, y) ||\n Object(_arc__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(minX + width - radius, minY + height - radius, radius, 0, 0.5 * Math.PI, lineWidth, x, y) ||\n Object(_arc__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(minX + radius, minY + height - radius, radius, 0.5 * Math.PI, Math.PI, lineWidth, x, y) ||\n Object(_arc__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(minX + radius, minY + radius, radius, Math.PI, 1.5 * Math.PI, lineWidth, x, y));\n}\n//# sourceMappingURL=rect-radius.js.map\n\n//# sourceURL=webpack:///./node_modules/@antv/g-canvas/esm/util/in-stroke/rect-radius.js?");
/***/ }),
/***/ "./node_modules/@antv/g-canvas/esm/util/in-stroke/rect.js":
/*!****************************************************************!*\
!*** ./node_modules/@antv/g-canvas/esm/util/in-stroke/rect.js ***!
\****************************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return inRect; });\n/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../util */ \"./node_modules/@antv/g-canvas/esm/util/util.js\");\n\nfunction inRect(minX, minY, width, height, lineWidth, x, y) {\n var halfWidth = lineWidth / 2;\n // 将四个边看做矩形来检测,比边的检测算法要快\n return (Object(_util__WEBPACK_IMPORTED_MODULE_0__[\"inBox\"])(minX - halfWidth, minY - halfWidth, width, lineWidth, x, y) || // 上边\n Object(_util__WEBPACK_IMPORTED_MODULE_0__[\"inBox\"])(minX + width - halfWidth, minY - halfWidth, lineWidth, height, x, y) || // 右边\n Object(_util__WEBPACK_IMPORTED_MODULE_0__[\"inBox\"])(minX + halfWidth, minY + height - halfWidth, width, lineWidth, x, y) || // 下边\n Object(_util__WEBPACK_IMPORTED_MODULE_0__[\"inBox\"])(minX - halfWidth, minY + halfWidth, lineWidth, height, x, y)); // 左边\n}\n//# sourceMappingURL=rect.js.map\n\n//# sourceURL=webpack:///./node_modules/@antv/g-canvas/esm/util/in-stroke/rect.js?");
/***/ }),
/***/ "./node_modules/@antv/g-canvas/esm/util/parse.js":
/*!*******************************************************!*\
!*** ./node_modules/@antv/g-canvas/esm/util/parse.js ***!
\*******************************************************/
/*! exports provided: parseLineGradient, parseRadialGradient, parsePattern, parseStyle, parseRadius */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"parseLineGradient\", function() { return parseLineGradient; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"parseRadialGradient\", function() { return parseRadialGradient; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"parsePattern\", function() { return parsePattern; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"parseStyle\", function() { return parseStyle; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"parseRadius\", function() { return parseRadius; });\n/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./util */ \"./node_modules/@antv/g-canvas/esm/util/util.js\");\n\nvar regexLG = /^l\\s*\\(\\s*([\\d.]+)\\s*\\)\\s*(.*)/i;\nvar regexRG = /^r\\s*\\(\\s*([\\d.]+)\\s*,\\s*([\\d.]+)\\s*,\\s*([\\d.]+)\\s*\\)\\s*(.*)/i;\nvar regexPR = /^p\\s*\\(\\s*([axyn])\\s*\\)\\s*(.*)/i;\nvar regexColorStop = /[\\d.]+:(#[^\\s]+|[^\\)]+\\))/gi;\nfunction addStop(steps, gradient) {\n var arr = steps.match(regexColorStop);\n Object(_util__WEBPACK_IMPORTED_MODULE_0__[\"each\"])(arr, function (item) {\n var itemArr = item.split(':');\n gradient.addColorStop(itemArr[0], itemArr[1]);\n });\n}\n/**\n * 将边和填充设置的颜色转换成线性渐变对象\n * @param {CanvasRenderingContext2D} context canvas 上下文\n * @param {IElement} element 图形元素\n * @param {string} gradientStr 颜色\n * @returns {any} 渐变对象\n */\nfunction parseLineGradient(context, element, gradientStr) {\n var arr = regexLG.exec(gradientStr);\n var angle = (parseFloat(arr[1]) % 360) * (Math.PI / 180);\n var steps = arr[2];\n var box = element.getBBox();\n var start;\n var end;\n if (angle >= 0 && angle < (1 / 2) * Math.PI) {\n start = {\n x: box.minX,\n y: box.minY,\n };\n end = {\n x: box.maxX,\n y: box.maxY,\n };\n }\n else if ((1 / 2) * Math.PI <= angle && angle < Math.PI) {\n start = {\n x: box.maxX,\n y: box.minY,\n };\n end = {\n x: box.minX,\n y: box.maxY,\n };\n }\n else if (Math.PI <= angle && angle < (3 / 2) * Math.PI) {\n start = {\n x: box.maxX,\n y: box.maxY,\n };\n end = {\n x: box.minX,\n y: box.minY,\n };\n }\n else {\n start = {\n x: box.minX,\n y: box.maxY,\n };\n end = {\n x: box.maxX,\n y: box.minY,\n };\n }\n var tanTheta = Math.tan(angle);\n var tanTheta2 = tanTheta * tanTheta;\n var x = (end.x - start.x + tanTheta * (end.y - start.y)) / (tanTheta2 + 1) + start.x;\n var y = (tanTheta * (end.x - start.x + tanTheta * (end.y - start.y))) / (tanTheta2 + 1) + start.y;\n var gradient = context.createLinearGradient(start.x, start.y, x, y);\n addStop(steps, gradient);\n return gradient;\n}\n/**\n * 将边和填充设置的颜色转换成圆形渐变对象\n * @param {CanvasRenderingContext2D} context canvas 上下文\n * @param {IElement} element 图形元素\n * @param {string} gradientStr 颜色\n * @returns {any} 渐变对象\n */\nfunction parseRadialGradient(context, element, gradientStr) {\n var arr = regexRG.exec(gradientStr);\n var fx = parseFloat(arr[1]);\n var fy = parseFloat(arr[2]);\n var fr = parseFloat(arr[3]);\n var steps = arr[4];\n // 环半径为0时,默认无渐变,取渐变序列的最后一个颜色\n if (fr === 0) {\n var colors = steps.match(regexColorStop);\n return colors[colors.length - 1].split(':')[1];\n }\n var box = element.getBBox();\n var width = box.maxX - box.minX;\n var height = box.maxY - box.minY;\n var r = Math.sqrt(width * width + height * height) / 2;\n var gradient = context.createRadialGradient(box.minX + width * fx, box.minY + height * fy, 0, box.minX + width / 2, box.minY + height / 2, fr * r);\n addStop(steps, gradient);\n return gradient;\n}\n/**\n * 边和填充设置的颜色转换成 pattern\n * @param {CanvasRenderingContext2D} context canvas 上下文\n * @param {IElement} element 图形元素\n * @param {string} patternStr 生成 pattern 的字符串\n */\nfunction parsePattern(context, element, patternStr) {\n // 在转换过程中进行了缓存\n if (element.get('patternSource') && element.get('patternSource') === patternStr) {\n return element.get('pattern');\n }\n var pattern;\n var img;\n var arr = regexPR.exec(patternStr);\n var repeat = arr[1];\n var source = arr[2];\n // Function to be called when pattern loads\n function onload() {\n // Create pattern\n pattern = context.createPattern(img, repeat);\n element.set('pattern', pattern); // be a cache\n element.set('patternSource', patternStr);\n }\n switch (repeat) {\n case 'a':\n repeat = 'repeat';\n break;\n case 'x':\n repeat = 'repeat-x';\n break;\n case 'y':\n repeat = 'repeat-y';\n break;\n case 'n':\n repeat = 'no-repeat';\n break;\n default:\n repeat = 'no-repeat';\n }\n img = new Image();\n // If source URL is not a data URL\n if (!source.match(/^data:/i)) {\n // Set crossOrigin for this image\n img.crossOrigin = 'Anonymous';\n }\n img.src = source;\n if (img.complete) {\n onload();\n }\n else {\n img.onload = onload;\n // Fix onload() bug in IE9\n img.src = img.src;\n }\n return pattern;\n}\nfunction parseStyle(context, element, color) {\n var bbox = element.getBBox();\n if (isNaN(bbox.x) || isNaN(bbox.y) || isNaN(bbox.width) || isNaN(bbox.height)) {\n return color;\n }\n if (Object(_util__WEBPACK_IMPORTED_MODULE_0__[\"isString\"])(color)) {\n if (color[1] === '(' || color[2] === '(') {\n if (color[0] === 'l') {\n // regexLG.test(color)\n return parseLineGradient(context, element, color);\n }\n if (color[0] === 'r') {\n // regexRG.test(color)\n return parseRadialGradient(context, element, color);\n }\n if (color[0] === 'p') {\n // regexPR.test(color)\n return parsePattern(context, element, color);\n }\n }\n return color;\n }\n if (color instanceof CanvasPattern) {\n return color;\n }\n}\nfunction parseRadius(radius) {\n var r1 = 0;\n var r2 = 0;\n var r3 = 0;\n var r4 = 0;\n if (Object(_util__WEBPACK_IMPORTED_MODULE_0__[\"isArray\"])(radius)) {\n if (radius.length === 1) {\n r1 = r2 = r3 = r4 = radius[0];\n }\n else if (radius.length === 2) {\n r1 = r3 = radius[0];\n r2 = r4 = radius[1];\n }\n else if (radius.length === 3) {\n r1 = radius[0];\n r2 = r4 = radius[1];\n r3 = radius[2];\n }\n else {\n r1 = radius[0];\n r2 = radius[1];\n r3 = radius[2];\n r4 = radius[3];\n }\n }\n else {\n r1 = r2 = r3 = r4 = radius;\n }\n return [r1, r2, r3, r4];\n}\n//# sourceMappingURL=parse.js.map\n\n//# sourceURL=webpack:///./node_modules/@antv/g-canvas/esm/util/parse.js?");
/***/ }),
/***/ "./node_modules/@antv/g-canvas/esm/util/path.js":
/*!******************************************************!*\
!*** ./node_modules/@antv/g-canvas/esm/util/path.js ***!
\******************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tslib */ \"./node_modules/tslib/tslib.es6.js\");\n/* harmony import */ var _antv_g_base__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @antv/g-base */ \"./node_modules/@antv/g-base/esm/index.js\");\n/* harmony import */ var _antv_g_math__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @antv/g-math */ \"./node_modules/@antv/g-math/esm/index.js\");\n/* harmony import */ var _antv_matrix_util__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @antv/matrix-util */ \"./node_modules/@antv/matrix-util/esm/index.js\");\n/* harmony import */ var gl_matrix_vec3__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! gl-matrix/vec3 */ \"./node_modules/gl-matrix/esm/vec3.js\");\n/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./util */ \"./node_modules/@antv/g-canvas/esm/util/util.js\");\n/* harmony import */ var _in_stroke_line__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./in-stroke/line */ \"./node_modules/@antv/g-canvas/esm/util/in-stroke/line.js\");\n/* harmony import */ var _in_stroke_arc__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./in-stroke/arc */ \"./node_modules/@antv/g-canvas/esm/util/in-stroke/arc.js\");\n\n/**\n * @fileoverview path 的一些工具\n * @author dxq613@gmail.com\n */\n\n\n\n\n\n\n\n\nvar transform = _antv_matrix_util__WEBPACK_IMPORTED_MODULE_3__[\"ext\"].transform;\nfunction hasArc(path) {\n var hasArc = false;\n var count = path.length;\n for (var i = 0; i < count; i++) {\n var params = path[i];\n var cmd = params[0];\n if (cmd === 'C' || cmd === 'A' || cmd === 'Q') {\n hasArc = true;\n break;\n }\n }\n return hasArc;\n}\nfunction isPointInStroke(segments, lineWidth, x, y, length) {\n var isHit = false;\n var halfWidth = lineWidth / 2;\n for (var i = 0; i < segments.length; i++) {\n var segment = segments[i];\n var currentPoint = segment.currentPoint, params = segment.params, prePoint = segment.prePoint, box = segment.box;\n // 如果在前面已经生成过包围盒,直接按照包围盒计算\n if (box && !Object(_util__WEBPACK_IMPORTED_MODULE_5__[\"inBox\"])(box.x - halfWidth, box.y - halfWidth, box.width + lineWidth, box.height + lineWidth, x, y)) {\n continue;\n }\n switch (segment.command) {\n // L 和 Z 都是直线, M 不进行拾取\n case 'L':\n case 'Z':\n isHit = Object(_in_stroke_line__WEBPACK_IMPORTED_MODULE_6__[\"default\"])(prePoint[0], prePoint[1], currentPoint[0], currentPoint[1], lineWidth, x, y);\n break;\n case 'Q':\n var qDistance = _antv_g_math__WEBPACK_IMPORTED_MODULE_2__[\"Quad\"].pointDistance(prePoint[0], prePoint[1], params[1], params[2], params[3], params[4], x, y);\n isHit = qDistance <= lineWidth / 2;\n break;\n case 'C':\n var cDistance = _antv_g_math__WEBPACK_IMPORTED_MODULE_2__[\"Cubic\"].pointDistance(prePoint[0], // 上一段结束位置, 即 C 的起始点\n prePoint[1], params[1], // 'C' 的参数,1、2 为第一个控制点,3、4 为第二个控制点,5、6 为结束点\n params[2], params[3], params[4], params[5], params[6], x, y, length);\n isHit = cDistance <= lineWidth / 2;\n break;\n case 'A':\n // 计算点到椭圆圆弧的距离,暂时使用近似算法,后面可以改成切割法求最近距离\n var arcParams = segment.arcParams;\n var cx = arcParams.cx, cy = arcParams.cy, rx = arcParams.rx, ry = arcParams.ry, startAngle = arcParams.startAngle, endAngle = arcParams.endAngle, xRotation = arcParams.xRotation;\n var p = [x, y, 1];\n var r = rx > ry ? rx : ry;\n var scaleX = rx > ry ? 1 : rx / ry;\n var scaleY = rx > ry ? ry / rx : 1;\n var m = transform(null, [\n ['t', -cx, -cy],\n ['r', -xRotation],\n ['s', 1 / scaleX, 1 / scaleY],\n ]);\n gl_matrix_vec3__WEBPACK_IMPORTED_MODULE_4__[\"transformMat3\"](p, p, m);\n isHit = Object(_in_stroke_arc__WEBPACK_IMPORTED_MODULE_7__[\"default\"])(0, 0, r, startAngle, endAngle, lineWidth, p[0], p[1]);\n break;\n default:\n break;\n }\n if (isHit) {\n break;\n }\n }\n return isHit;\n}\n/**\n * 提取出内部的闭合多边形和非闭合的多边形,假设 path 不存在圆弧\n * @param {Array} path 路径\n * @returns {Array} 点的集合\n */\nfunction extractPolygons(path) {\n var count = path.length;\n var polygons = [];\n var polylines = [];\n var points = []; // 防止第一个命令不是 'M'\n for (var i = 0; i < count; i++) {\n var params = path[i];\n var cmd = params[0];\n if (cmd === 'M') {\n // 遇到 'M' 判定是否是新数组,新数组中没有点\n if (points.length) {\n // 如果存在点,则说明没有遇到 'Z',开始了一个新的多边形\n polylines.push(points);\n points = []; // 创建新的点\n }\n points.push([params[1], params[2]]);\n }\n else if (cmd === 'Z') {\n if (points.length) {\n // 存在点\n polygons.push(points);\n points = []; // 开始新的点集合\n }\n // 如果不存在点,同时 'Z',则说明是错误,不处理\n }\n else {\n points.push([params[1], params[2]]);\n }\n }\n // 说明 points 未放入 polygons 或者 polyline\n // 仅当只有一个 M,没有 Z 时会发生这种情况\n if (points.length > 0) {\n polylines.push(points);\n }\n return {\n polygons: polygons,\n polylines: polylines,\n };\n}\n/* harmony default export */ __webpack_exports__[\"default\"] = (Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__assign\"])({ hasArc: hasArc,\n extractPolygons: extractPolygons,\n isPointInStroke: isPointInStroke }, _antv_g_base__WEBPACK_IMPORTED_MODULE_1__[\"PathUtil\"]));\n//# sourceMappingURL=path.js.map\n\n//# sourceURL=webpack:///./node_modules/@antv/g-canvas/esm/util/path.js?");
/***/ }),
/***/ "./node_modules/@antv/g-canvas/esm/util/util.js":
/*!******************************************************!*\
!*** ./node_modules/@antv/g-canvas/esm/util/util.js ***!
\******************************************************/
/*! exports provided: getPixelRatio, distance, inBox, intersectRect, mergeRegion, isSamePoint, isNil, isString, isFunction, isArray, each, toRadian, mod, isNumberEqual, requestAnimationFrame, clearAnimationFrame */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"getPixelRatio\", function() { return getPixelRatio; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"distance\", function() { return distance; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"inBox\", function() { return inBox; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"intersectRect\", function() { return intersectRect; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"mergeRegion\", function() { return mergeRegion; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"isSamePoint\", function() { return isSamePoint; });\n/* harmony import */ var _antv_util__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @antv/util */ \"./node_modules/@antv/util/esm/index.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"isNil\", function() { return _antv_util__WEBPACK_IMPORTED_MODULE_0__[\"isNil\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"isString\", function() { return _antv_util__WEBPACK_IMPORTED_MODULE_0__[\"isString\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"isFunction\", function() { return _antv_util__WEBPACK_IMPORTED_MODULE_0__[\"isFunction\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"isArray\", function() { return _antv_util__WEBPACK_IMPORTED_MODULE_0__[\"isArray\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"each\", function() { return _antv_util__WEBPACK_IMPORTED_MODULE_0__[\"each\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"toRadian\", function() { return _antv_util__WEBPACK_IMPORTED_MODULE_0__[\"toRadian\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"mod\", function() { return _antv_util__WEBPACK_IMPORTED_MODULE_0__[\"mod\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"isNumberEqual\", function() { return _antv_util__WEBPACK_IMPORTED_MODULE_0__[\"isNumberEqual\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"requestAnimationFrame\", function() { return _antv_util__WEBPACK_IMPORTED_MODULE_0__[\"requestAnimationFrame\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"clearAnimationFrame\", function() { return _antv_util__WEBPACK_IMPORTED_MODULE_0__[\"clearAnimationFrame\"]; });\n\nfunction getPixelRatio() {\n return window ? window.devicePixelRatio : 1;\n}\n/**\n * 两点之间的距离\n * @param {number} x1 起始点 x\n * @param {number} y1 起始点 y\n * @param {number} x2 结束点 x\n * @param {number} y2 结束点 y\n */\nfunction distance(x1, y1, x2, y2) {\n var dx = x1 - x2;\n var dy = y1 - y2;\n return Math.sqrt(dx * dx + dy * dy);\n}\n/**\n * 是否在包围盒内\n * @param {number} minX 包围盒开始的点 x\n * @param {number} minY 包围盒开始的点 y\n * @param {number} width 宽度\n * @param {number} height 高度\n * @param {[type]} x 检测点的 x\n * @param {[type]} y 监测点的 y\n */\nfunction inBox(minX, minY, width, height, x, y) {\n return x >= minX && x <= minX + width && y >= minY && y <= minY + height;\n}\nfunction intersectRect(box1, box2) {\n return !(box2.minX > box1.maxX || box2.maxX < box1.minX || box2.minY > box1.maxY || box2.maxY < box1.minY);\n}\n// 合并两个区域\nfunction mergeRegion(region1, region2) {\n if (!region1 || !region2) {\n return region1 || region2;\n }\n return {\n minX: Math.min(region1.minX, region2.minX),\n minY: Math.min(region1.minY, region2.minY),\n maxX: Math.max(region1.maxX, region2.maxX),\n maxY: Math.max(region1.maxY, region2.maxY),\n };\n}\n/**\n * 判断两个点是否重合,点坐标的格式为 [x, y]\n * @param {Array} point1 第一个点\n * @param {Array} point2 第二个点\n */\nfunction isSamePoint(point1, point2) {\n return point1[0] === point2[0] && point1[1] === point2[1];\n}\n\n//# sourceMappingURL=util.js.map\n\n//# sourceURL=webpack:///./node_modules/@antv/g-canvas/esm/util/util.js?");
/***/ }),
/***/ "./node_modules/@antv/g-math/esm/arc.js":
/*!**********************************************!*\
!*** ./node_modules/@antv/g-math/esm/arc.js ***!
\**********************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./util */ \"./node_modules/@antv/g-math/esm/util.js\");\n/* harmony import */ var _ellipse__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./ellipse */ \"./node_modules/@antv/g-math/esm/ellipse.js\");\n\n\n// 偏导数 x\nfunction derivativeXAt(cx, cy, rx, ry, xRotation, startAngle, endAngle, angle) {\n return -1 * rx * Math.cos(xRotation) * Math.sin(angle) - ry * Math.sin(xRotation) * Math.cos(angle);\n}\n// 偏导数 y\nfunction derivativeYAt(cx, cy, rx, ry, xRotation, startAngle, endAngle, angle) {\n return -1 * rx * Math.sin(xRotation) * Math.sin(angle) + ry * Math.cos(xRotation) * Math.cos(angle);\n}\n// x 的极值\nfunction xExtrema(rx, ry, xRotation) {\n return Math.atan((-ry / rx) * Math.tan(xRotation));\n}\n// y 的极值\nfunction yExtrema(rx, ry, xRotation) {\n return Math.atan(ry / (rx * Math.tan(xRotation)));\n}\n// 根据角度求 x 坐标\nfunction xAt(cx, cy, rx, ry, xRotation, angle) {\n return rx * Math.cos(xRotation) * Math.cos(angle) - ry * Math.sin(xRotation) * Math.sin(angle) + cx;\n}\n// 根据角度求 y 坐标\nfunction yAt(cx, cy, rx, ry, xRotation, angle) {\n return rx * Math.sin(xRotation) * Math.cos(angle) + ry * Math.cos(xRotation) * Math.sin(angle) + cy;\n}\n// 获取点在椭圆上的角度\nfunction getAngle(rx, ry, x0, y0) {\n var angle = Math.atan2(y0 * rx, x0 * ry);\n // 转换到 0 - 2PI 内\n return (angle + Math.PI * 2) % (Math.PI * 2);\n}\n// 根据角度获取,x,y\nfunction getPoint(rx, ry, angle) {\n return {\n x: rx * Math.cos(angle),\n y: ry * Math.sin(angle),\n };\n}\n// 旋转\nfunction rotate(x, y, angle) {\n var cos = Math.cos(angle);\n var sin = Math.sin(angle);\n return [x * cos - y * sin, x * sin + y * cos];\n}\n/* harmony default export */ __webpack_exports__[\"default\"] = ({\n /**\n * 计算包围盒\n * @param {number} cx 圆心 x\n * @param {number} cy 圆心 y\n * @param {number} rx x 轴方向的半径\n * @param {number} ry y 轴方向的半径\n * @param {number} xRotation 旋转角度\n * @param {number} startAngle 起始角度\n * @param {number} endAngle 结束角度\n * @return {object} 包围盒对象\n */\n box: function (cx, cy, rx, ry, xRotation, startAngle, endAngle) {\n var xDim = xExtrema(rx, ry, xRotation);\n var minX = Infinity;\n var maxX = -Infinity;\n var xs = [startAngle, endAngle];\n for (var i = -Math.PI * 2; i <= Math.PI * 2; i += Math.PI) {\n var xAngle = xDim + i;\n if (startAngle < endAngle) {\n if (startAngle < xAngle && xAngle < endAngle) {\n xs.push(xAngle);\n }\n }\n else {\n if (endAngle < xAngle && xAngle < startAngle) {\n xs.push(xAngle);\n }\n }\n }\n for (var i = 0; i < xs.length; i++) {\n var x = xAt(cx, cy, rx, ry, xRotation, xs[i]);\n if (x < minX) {\n minX = x;\n }\n if (x > maxX) {\n maxX = x;\n }\n }\n var yDim = yExtrema(rx, ry, xRotation);\n var minY = Infinity;\n var maxY = -Infinity;\n var ys = [startAngle, endAngle];\n for (var i = -Math.PI * 2; i <= Math.PI * 2; i += Math.PI) {\n var yAngle = yDim + i;\n if (startAngle < endAngle) {\n if (startAngle < yAngle && yAngle < endAngle) {\n ys.push(yAngle);\n }\n }\n else {\n if (endAngle < yAngle && yAngle < startAngle) {\n ys.push(yAngle);\n }\n }\n }\n for (var i = 0; i < ys.length; i++) {\n var y = yAt(cx, cy, rx, ry, xRotation, ys[i]);\n if (y < minY) {\n minY = y;\n }\n if (y > maxY) {\n maxY = y;\n }\n }\n return {\n x: minX,\n y: minY,\n width: maxX - minX,\n height: maxY - minY,\n };\n },\n /**\n * 获取圆弧的长度,计算圆弧长度时不考虑旋转角度,\n * 仅跟 rx, ry, startAngle, endAngle 相关\n * @param {number} cx 圆心 x\n * @param {number} cy 圆心 y\n * @param {number} rx x 轴方向的半径\n * @param {number} ry y 轴方向的半径\n * @param {number} xRotation 旋转角度\n * @param {number} startAngle 起始角度\n * @param {number} endAngle 结束角度\n */\n length: function (cx, cy, rx, ry, xRotation, startAngle, endAngle) { },\n /**\n * 获取指定点到圆弧的最近距离的点\n * @param {number} cx 圆心 x\n * @param {number} cy 圆心 y\n * @param {number} rx x 轴方向的半径\n * @param {number} ry y 轴方向的半径\n * @param {number} xRotation 旋转角度\n * @param {number} startAngle 起始角度\n * @param {number} endAngle 结束角度\n * @param {number} x0 指定点的 x\n * @param {number} y0 指定点的 y\n * @return {object} 到指定点最近距离的点\n */\n nearestPoint: function (cx, cy, rx, ry, xRotation, startAngle, endAngle, x0, y0) {\n // 将最近距离问题转换成到椭圆中心 0,0 没有旋转的椭圆问题\n var relativeVector = rotate(x0 - cx, y0 - cy, -xRotation);\n var x1 = relativeVector[0], y1 = relativeVector[1];\n // 计算点到椭圆的最近的点\n var relativePoint = _ellipse__WEBPACK_IMPORTED_MODULE_1__[\"default\"].nearestPoint(0, 0, rx, ry, x1, y1);\n // 获取点在椭圆上的角度\n var angle = getAngle(rx, ry, relativePoint.x, relativePoint.y);\n // 点没有在圆弧上\n if (angle < startAngle) {\n // 小于起始圆弧\n relativePoint = getPoint(rx, ry, startAngle);\n }\n else if (angle > endAngle) {\n // 大于结束圆弧\n relativePoint = getPoint(rx, ry, endAngle);\n }\n // 旋转到 xRotation 的角度\n var vector = rotate(relativePoint.x, relativePoint.y, xRotation);\n return {\n x: vector[0] + cx,\n y: vector[1] + cy,\n };\n },\n pointDistance: function (cx, cy, rx, ry, xRotation, startAngle, endAngle, x0, y0) {\n var nearestPoint = this.nearestPoint(cx, cy, rx, ry, x0, y0);\n return Object(_util__WEBPACK_IMPORTED_MODULE_0__[\"distance\"])(nearestPoint.x, nearestPoint.y, x0, y0);\n },\n pointAt: function (cx, cy, rx, ry, xRotation, startAngle, endAngle, t) {\n var angle = (endAngle - startAngle) * t + startAngle;\n return {\n x: xAt(cx, cy, rx, ry, xRotation, angle),\n y: yAt(cx, cy, rx, ry, xRotation, angle),\n };\n },\n tangentAngle: function (cx, cy, rx, ry, xRotation, startAngle, endAngle, t) {\n var angle = (endAngle - startAngle) * t + startAngle;\n var dx = derivativeXAt(cx, cy, rx, ry, xRotation, startAngle, endAngle, angle);\n var dy = derivativeYAt(cx, cy, rx, ry, xRotation, startAngle, endAngle, angle);\n return Object(_util__WEBPACK_IMPORTED_MODULE_0__[\"piMod\"])(Math.atan2(dy, dx));\n },\n});\n//# sourceMappingURL=arc.js.map\n\n//# sourceURL=webpack:///./node_modules/@antv/g-math/esm/arc.js?");
/***/ }),
/***/ "./node_modules/@antv/g-math/esm/bezier.js":
/*!*************************************************!*\
!*** ./node_modules/@antv/g-math/esm/bezier.js ***!
\*************************************************/
/*! exports provided: nearestPoint, snapLength */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"nearestPoint\", function() { return nearestPoint; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"snapLength\", function() { return snapLength; });\n/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./util */ \"./node_modules/@antv/g-math/esm/util.js\");\n\nvar EPSILON = 0.0001;\n/**\n * 使用牛顿切割法求最近的点\n * @param {number[]} xArr 点的 x 数组\n * @param {number[]} yArr 点的 y 数组\n * @param {number} x 指定的点 x\n * @param {number} y 指定的点 y\n * @param {Function} tCallback 差值函数\n */\nfunction nearestPoint(xArr, yArr, x, y, tCallback, length) {\n var t;\n var d = Infinity;\n var v0 = [x, y];\n var segNum = 20;\n if (length && length > 200) {\n segNum = length / 10;\n }\n var increaseRate = 1 / segNum;\n var interval = increaseRate / 10;\n for (var i = 0; i <= segNum; i++) {\n var _t = i * increaseRate;\n var v1 = [tCallback.apply(null, xArr.concat([_t])), tCallback.apply(null, yArr.concat([_t]))];\n var d1 = Object(_util__WEBPACK_IMPORTED_MODULE_0__[\"distance\"])(v0[0], v0[1], v1[0], v1[1]);\n if (d1 < d) {\n t = _t;\n d = d1;\n }\n }\n // 提前终止\n if (t === 0) {\n return {\n x: xArr[0],\n y: yArr[0],\n };\n }\n if (t === 1) {\n var count = xArr.length;\n return {\n x: xArr[count - 1],\n y: yArr[count - 1],\n };\n }\n d = Infinity;\n for (var i = 0; i < 32; i++) {\n if (interval < EPSILON) {\n break;\n }\n var prev = t - interval;\n var next = t + interval;\n var v1 = [tCallback.apply(null, xArr.concat([prev])), tCallback.apply(null, yArr.concat([prev]))];\n var d1 = Object(_util__WEBPACK_IMPORTED_MODULE_0__[\"distance\"])(v0[0], v0[1], v1[0], v1[1]);\n if (prev >= 0 && d1 < d) {\n t = prev;\n d = d1;\n }\n else {\n var v2 = [tCallback.apply(null, xArr.concat([next])), tCallback.apply(null, yArr.concat([next]))];\n var d2 = Object(_util__WEBPACK_IMPORTED_MODULE_0__[\"distance\"])(v0[0], v0[1], v2[0], v2[1]);\n if (next <= 1 && d2 < d) {\n t = next;\n d = d2;\n }\n else {\n interval *= 0.5;\n }\n }\n }\n return {\n x: tCallback.apply(null, xArr.concat([t])),\n y: tCallback.apply(null, yArr.concat([t])),\n };\n}\n// 近似求解 https://community.khronos.org/t/3d-cubic-bezier-segment-length/62363/2\nfunction snapLength(xArr, yArr) {\n var totalLength = 0;\n var count = xArr.length;\n for (var i = 0; i < count; i++) {\n var x = xArr[i];\n var y = yArr[i];\n var nextX = xArr[(i + 1) % count];\n var nextY = yArr[(i + 1) % count];\n totalLength += Object(_util__WEBPACK_IMPORTED_MODULE_0__[\"distance\"])(x, y, nextX, nextY);\n }\n return totalLength / 2;\n}\n//# sourceMappingURL=bezier.js.map\n\n//# sourceURL=webpack:///./node_modules/@antv/g-math/esm/bezier.js?");
/***/ }),
/***/ "./node_modules/@antv/g-math/esm/cubic.js":
/*!************************************************!*\
!*** ./node_modules/@antv/g-math/esm/cubic.js ***!
\************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./util */ \"./node_modules/@antv/g-math/esm/util.js\");\n/* harmony import */ var _line__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./line */ \"./node_modules/@antv/g-math/esm/line.js\");\n/* harmony import */ var _bezier__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./bezier */ \"./node_modules/@antv/g-math/esm/bezier.js\");\n\n\n\nfunction cubicAt(p0, p1, p2, p3, t) {\n var onet = 1 - t; // t * t * t 的性能大概是 Math.pow(t, 3) 的三倍\n return onet * onet * onet * p0 + 3 * p1 * t * onet * onet + 3 * p2 * t * t * onet + p3 * t * t * t;\n}\nfunction derivativeAt(p0, p1, p2, p3, t) {\n var onet = 1 - t;\n return 3 * (onet * onet * (p1 - p0) + 2 * onet * t * (p2 - p1) + t * t * (p3 - p2));\n}\nfunction extrema(p0, p1, p2, p3) {\n var a = -3 * p0 + 9 * p1 - 9 * p2 + 3 * p3;\n var b = 6 * p0 - 12 * p1 + 6 * p2;\n var c = 3 * p1 - 3 * p0;\n var extremas = [];\n var t1;\n var t2;\n var discSqrt;\n if (Object(_util__WEBPACK_IMPORTED_MODULE_0__[\"isNumberEqual\"])(a, 0)) {\n if (!Object(_util__WEBPACK_IMPORTED_MODULE_0__[\"isNumberEqual\"])(b, 0)) {\n t1 = -c / b;\n if (t1 >= 0 && t1 <= 1) {\n extremas.push(t1);\n }\n }\n }\n else {\n var disc = b * b - 4 * a * c;\n if (Object(_util__WEBPACK_IMPORTED_MODULE_0__[\"isNumberEqual\"])(disc, 0)) {\n extremas.push(-b / (2 * a));\n }\n else if (disc > 0) {\n discSqrt = Math.sqrt(disc);\n t1 = (-b + discSqrt) / (2 * a);\n t2 = (-b - discSqrt) / (2 * a);\n if (t1 >= 0 && t1 <= 1) {\n extremas.push(t1);\n }\n if (t2 >= 0 && t2 <= 1) {\n extremas.push(t2);\n }\n }\n }\n return extremas;\n}\n// 分割贝塞尔曲线\nfunction divideCubic(x1, y1, x2, y2, x3, y3, x4, y4, t) {\n // 划分点\n var xt = cubicAt(x1, x2, x3, x4, t);\n var yt = cubicAt(y1, y2, y3, y4, t);\n // 计算两点之间的差值点\n var c1 = _line__WEBPACK_IMPORTED_MODULE_1__[\"default\"].pointAt(x1, y1, x2, y2, t);\n var c2 = _line__WEBPACK_IMPORTED_MODULE_1__[\"default\"].pointAt(x2, y2, x3, y3, t);\n var c3 = _line__WEBPACK_IMPORTED_MODULE_1__[\"default\"].pointAt(x3, y3, x4, y4, t);\n var c12 = _line__WEBPACK_IMPORTED_MODULE_1__[\"default\"].pointAt(c1.x, c1.y, c2.x, c2.y, t);\n var c23 = _line__WEBPACK_IMPORTED_MODULE_1__[\"default\"].pointAt(c2.x, c2.y, c3.x, c3.y, t);\n return [\n [x1, y1, c1.x, c1.y, c12.x, c12.y, xt, yt],\n [xt, yt, c23.x, c23.y, c3.x, c3.y, x4, y4],\n ];\n}\n// 使用迭代法取贝塞尔曲线的长度,二阶和三阶分开写,更清晰和便于调试\nfunction cubicLength(x1, y1, x2, y2, x3, y3, x4, y4, iterationCount) {\n if (iterationCount === 0) {\n return Object(_bezier__WEBPACK_IMPORTED_MODULE_2__[\"snapLength\"])([x1, x2, x3, x4], [y1, y2, y3, y4]);\n }\n var cubics = divideCubic(x1, y1, x2, y2, x3, y3, x4, y4, 0.5);\n var left = cubics[0];\n var right = cubics[1];\n left.push(iterationCount - 1);\n right.push(iterationCount - 1);\n return cubicLength.apply(null, left) + cubicLength.apply(null, right);\n}\n/* harmony default export */ __webpack_exports__[\"default\"] = ({\n extrema: extrema,\n box: function (x1, y1, x2, y2, x3, y3, x4, y4) {\n var xArr = [x1, x4];\n var yArr = [y1, y4];\n var xExtrema = extrema(x1, x2, x3, x4);\n var yExtrema = extrema(y1, y2, y3, y4);\n for (var i = 0; i < xExtrema.length; i++) {\n xArr.push(cubicAt(x1, x2, x3, x4, xExtrema[i]));\n }\n for (var i = 0; i < yExtrema.length; i++) {\n yArr.push(cubicAt(y1, y2, y3, y4, yExtrema[i]));\n }\n return Object(_util__WEBPACK_IMPORTED_MODULE_0__[\"getBBoxByArray\"])(xArr, yArr);\n },\n length: function (x1, y1, x2, y2, x3, y3, x4, y4) {\n // 迭代三次,划分成 8 段求长度\n return cubicLength(x1, y1, x2, y2, x3, y3, x4, y4, 3);\n },\n nearestPoint: function (x1, y1, x2, y2, x3, y3, x4, y4, x0, y0, length) {\n return Object(_bezier__WEBPACK_IMPORTED_MODULE_2__[\"nearestPoint\"])([x1, x2, x3, x4], [y1, y2, y3, y4], x0, y0, cubicAt, length);\n },\n pointDistance: function (x1, y1, x2, y2, x3, y3, x4, y4, x0, y0, length) {\n var point = this.nearestPoint(x1, y1, x2, y2, x3, y3, x4, y4, x0, y0, length);\n return Object(_util__WEBPACK_IMPORTED_MODULE_0__[\"distance\"])(point.x, point.y, x0, y0);\n },\n interpolationAt: cubicAt,\n pointAt: function (x1, y1, x2, y2, x3, y3, x4, y4, t) {\n return {\n x: cubicAt(x1, x2, x3, x4, t),\n y: cubicAt(y1, y2, y3, y4, t),\n };\n },\n divide: function (x1, y1, x2, y2, x3, y3, x4, y4, t) {\n return divideCubic(x1, y1, x2, y2, x3, y3, x4, y4, t);\n },\n tangentAngle: function (x1, y1, x2, y2, x3, y3, x4, y4, t) {\n var dx = derivativeAt(x1, x2, x3, x4, t);\n var dy = derivativeAt(y1, y2, y3, y4, t);\n return Object(_util__WEBPACK_IMPORTED_MODULE_0__[\"piMod\"])(Math.atan2(dy, dx));\n },\n});\n//# sourceMappingURL=cubic.js.map\n\n//# sourceURL=webpack:///./node_modules/@antv/g-math/esm/cubic.js?");
/***/ }),
/***/ "./node_modules/@antv/g-math/esm/ellipse.js":
/*!**************************************************!*\
!*** ./node_modules/@antv/g-math/esm/ellipse.js ***!
\**************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./util */ \"./node_modules/@antv/g-math/esm/util.js\");\n/**\n * @fileoverview 椭圆的一些计算,\n * - 周长计算参考:https://www.mathsisfun.com/geometry/ellipse-perimeter.html\n * - 距离计算参考:https://wet-robots.ghost.io/simple-method-for-distance-to-ellipse/\n * @author dxq613@gmail.com\n */\n\nfunction copysign(v1, v2) {\n var absv = Math.abs(v1);\n return v2 > 0 ? absv : absv * -1;\n}\n/* harmony default export */ __webpack_exports__[\"default\"] = ({\n /**\n * 包围盒计算\n * @param {number} x 椭圆中心 x\n * @param {number} y 椭圆中心 y\n * @param {number} rx 椭圆 x 方向半径\n * @param {number} ry 椭圆 y 方向半径\n * @return {object} 包围盒\n */\n box: function (x, y, rx, ry) {\n return {\n x: x - rx,\n y: y - ry,\n width: rx * 2,\n height: ry * 2,\n };\n },\n /**\n * 计算周长,使用近似法\n * @param {number} x 椭圆中心 x\n * @param {number} y 椭圆中心 y\n * @param {number} rx 椭圆 x 方向半径\n * @param {number} ry 椭圆 y 方向半径\n * @return {number} 椭圆周长\n */\n length: function (x, y, rx, ry) {\n return Math.PI * (3 * (rx + ry) - Math.sqrt((3 * rx + ry) * (rx + 3 * ry)));\n },\n /**\n * 距离椭圆最近的点\n * @param {number} x 椭圆中心 x\n * @param {number} y 椭圆中心 y\n * @param {number} rx 椭圆 x 方向半径\n * @param {number} ry 椭圆 y 方向半径\n * @param {number} x0 指定的点 x\n * @param {number} y0 指定的点 y\n * @return {object} 椭圆上距离指定点最近的点\n */\n nearestPoint: function (x, y, rx, ry, x0, y0) {\n var a = rx;\n var b = ry;\n // 假如椭圆半径为0则返回圆心\n if (a === 0 || b === 0) {\n return {\n x: x,\n y: y,\n };\n }\n // 转换成 0, 0 为中心的椭圆计算\n var relativeX = x0 - x;\n var relativeY = y0 - y;\n var px = Math.abs(relativeX);\n var py = Math.abs(relativeY);\n var squareA = a * a;\n var squareB = b * b;\n // const angle0 = Math.atan2(relativeY, relativeX);\n var t = Math.PI / 4;\n var nearestX; // 椭圆上的任一点\n var nearestY;\n // 迭代 4 次\n for (var i = 0; i < 4; i++) {\n nearestX = a * Math.cos(t);\n nearestY = b * Math.sin(t);\n var ex = ((squareA - squareB) * Math.pow(Math.cos(t), 3)) / a;\n var ey = ((squareB - squareA) * Math.pow(Math.sin(t), 3)) / b;\n var rx1 = nearestX - ex;\n var ry1 = nearestY - ey;\n var qx = px - ex;\n var qy = py - ey;\n var r = Math.hypot(ry1, rx1);\n var q = Math.hypot(qy, qx);\n var delta_c = r * Math.asin((rx1 * qy - ry1 * qx) / (r * q));\n var delta_t = delta_c / Math.sqrt(squareA + squareB - nearestX * nearestX - nearestY * nearestY);\n t += delta_t;\n t = Math.min(Math.PI / 2, Math.max(0, t));\n }\n return {\n x: x + copysign(nearestX, relativeX),\n y: y + copysign(nearestY, relativeY),\n };\n },\n /**\n * 点到椭圆最近的距离\n * @param {number} x 椭圆中心 x\n * @param {number} y 椭圆中心 y\n * @param {number} rx 椭圆 x 方向半径\n * @param {number} ry 椭圆 y 方向半径\n * @param {number} x0 指定的点 x\n * @param {number} y0 指定的点 y\n * @return {number} 点到椭圆的距离\n */\n pointDistance: function (x, y, rx, ry, x0, y0) {\n var nearestPoint = this.nearestPoint(x, y, rx, ry, x0, y0);\n return Object(_util__WEBPACK_IMPORTED_MODULE_0__[\"distance\"])(nearestPoint.x, nearestPoint.y, x0, y0);\n },\n /**\n * 根据比例获取点\n * @param {number} x 椭圆中心 x\n * @param {number} y 椭圆中心 y\n * @param {number} rx 椭圆 x 方向半径\n * @param {number} ry 椭圆 y 方向半径\n * @param {number} t 指定比例,x轴方向为 0\n * @return {object} 点\n */\n pointAt: function (x, y, rx, ry, t) {\n var angle = 2 * Math.PI * t; // 按照角度进行计算,而不按照周长计算\n return {\n x: x + rx * Math.cos(angle),\n y: y + ry * Math.sin(angle),\n };\n },\n /**\n * 根据比例计算切线角度\n * @param {number} x 椭圆中心 x\n * @param {number} y 椭圆中心 y\n * @param {number} rx 椭圆 x 方向半径\n * @param {number} ry 椭圆 y 方向半径\n * @param {number} t 指定比例 0 - 1 之间,x轴方向为 0。在 0-1 范围之外是循环还是返回 null,还需要调整\n * @return {number} 角度,在 0 - 2PI 之间\n */\n tangentAngle: function (x, y, rx, ry, t) {\n var angle = 2 * Math.PI * t; // 按照角度进行计算,而不按照周长计算\n // 直接使用 x,y 的导数计算, x' = -rx * sin(t); y' = ry * cos(t);\n var tangentAngle = Math.atan2(ry * Math.cos(angle), -rx * Math.sin(angle));\n // 也可以使用指定点的切线方程计算,成本有些高\n // const point = this.pointAt(0, 0, rx, ry, t); // 椭圆的切线同椭圆的中心不相关\n // let tangentAngle = -1 * Math.atan((ry * ry * point.x) / (rx * rx * point.y));\n // if (angle >= 0 && angle <= Math.PI) {\n // tangentAngle += Math.PI;\n // }\n return Object(_util__WEBPACK_IMPORTED_MODULE_0__[\"piMod\"])(tangentAngle);\n },\n});\n//# sourceMappingURL=ellipse.js.map\n\n//# sourceURL=webpack:///./node_modules/@antv/g-math/esm/ellipse.js?");
/***/ }),
/***/ "./node_modules/@antv/g-math/esm/index.js":
/*!************************************************!*\
!*** ./node_modules/@antv/g-math/esm/index.js ***!
\************************************************/
/*! exports provided: Quad, Cubic, Arc, Line, Polygon, Polyline, Util */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _quadratic__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./quadratic */ \"./node_modules/@antv/g-math/esm/quadratic.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Quad\", function() { return _quadratic__WEBPACK_IMPORTED_MODULE_0__[\"default\"]; });\n\n/* harmony import */ var _cubic__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./cubic */ \"./node_modules/@antv/g-math/esm/cubic.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Cubic\", function() { return _cubic__WEBPACK_IMPORTED_MODULE_1__[\"default\"]; });\n\n/* harmony import */ var _arc__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./arc */ \"./node_modules/@antv/g-math/esm/arc.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Arc\", function() { return _arc__WEBPACK_IMPORTED_MODULE_2__[\"default\"]; });\n\n/* harmony import */ var _line__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./line */ \"./node_modules/@antv/g-math/esm/line.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Line\", function() { return _line__WEBPACK_IMPORTED_MODULE_3__[\"default\"]; });\n\n/* harmony import */ var _polygon__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./polygon */ \"./node_modules/@antv/g-math/esm/polygon.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Polygon\", function() { return _polygon__WEBPACK_IMPORTED_MODULE_4__[\"default\"]; });\n\n/* harmony import */ var _polyline__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./polyline */ \"./node_modules/@antv/g-math/esm/polyline.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Polyline\", function() { return _polyline__WEBPACK_IMPORTED_MODULE_5__[\"default\"]; });\n\n/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./util */ \"./node_modules/@antv/g-math/esm/util.js\");\n/* harmony reexport (module object) */ __webpack_require__.d(__webpack_exports__, \"Util\", function() { return _util__WEBPACK_IMPORTED_MODULE_6__; });\n\n\n\n\n\n\n\n\n//# sourceMappingURL=index.js.map\n\n//# sourceURL=webpack:///./node_modules/@antv/g-math/esm/index.js?");
/***/ }),
/***/ "./node_modules/@antv/g-math/esm/line.js":
/*!***********************************************!*\
!*** ./node_modules/@antv/g-math/esm/line.js ***!
\***********************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./util */ \"./node_modules/@antv/g-math/esm/util.js\");\n/* harmony import */ var gl_matrix_vec2__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! gl-matrix/vec2 */ \"./node_modules/gl-matrix/esm/vec2.js\");\n\n\n/* harmony default export */ __webpack_exports__[\"default\"] = ({\n /**\n * 计算线段的包围盒\n * @param {number} x1 起始点 x\n * @param {number} y1 起始点 y\n * @param {number} x2 结束点 x\n * @param {number} y2 结束点 y\n * @return {object} 包围盒对象\n */\n box: function (x1, y1, x2, y2) {\n return Object(_util__WEBPACK_IMPORTED_MODULE_0__[\"getBBoxByArray\"])([x1, x2], [y1, y2]);\n },\n /**\n * 线段的长度\n * @param {number} x1 起始点 x\n * @param {number} y1 起始点 y\n * @param {number} x2 结束点 x\n * @param {number} y2 结束点 y\n * @return {number} 距离\n */\n length: function (x1, y1, x2, y2) {\n return Object(_util__WEBPACK_IMPORTED_MODULE_0__[\"distance\"])(x1, y1, x2, y2);\n },\n /**\n * 根据比例获取点\n * @param {number} x1 起始点 x\n * @param {number} y1 起始点 y\n * @param {number} x2 结束点 x\n * @param {number} y2 结束点 y\n * @param {number} t 指定比例\n * @return {object} 包含 x, y 的点\n */\n pointAt: function (x1, y1, x2, y2, t) {\n return {\n x: (1 - t) * x1 + t * x2,\n y: (1 - t) * y1 + t * y2,\n };\n },\n /**\n * 点到线段的距离\n * @param {number} x1 起始点 x\n * @param {number} y1 起始点 y\n * @param {number} x2 结束点 x\n * @param {number} y2 结束点 y\n * @param {number} x 测试点 x\n * @param {number} y 测试点 y\n * @return {number} 距离\n */\n pointDistance: function (x1, y1, x2, y2, x, y) {\n // 投影距离 x1, y1 的向量,假设 p, p1, p2 三个点,投影点为 a\n // p1a = p1p.p1p2/|p1p2| * (p1p 的单位向量)\n var cross = (x2 - x1) * (x - x1) + (y2 - y1) * (y - y1);\n if (cross < 0) {\n return Object(_util__WEBPACK_IMPORTED_MODULE_0__[\"distance\"])(x1, y1, x, y);\n }\n var lengthSquare = (x2 - x1) * (x2 - x1) + (y2 - y1) * (y2 - y1);\n if (cross > lengthSquare) {\n return Object(_util__WEBPACK_IMPORTED_MODULE_0__[\"distance\"])(x2, y2, x, y);\n }\n return this.pointToLine(x1, y1, x2, y2, x, y);\n },\n /**\n * 点到直线的距离,而不是点到线段的距离\n * @param {number} x1 起始点 x\n * @param {number} y1 起始点 y\n * @param {number} x2 结束点 x\n * @param {number} y2 结束点 y\n * @param {number} x 测试点 x\n * @param {number} y 测试点 y\n * @return {number} 距离\n */\n pointToLine: function (x1, y1, x2, y2, x, y) {\n var d = [x2 - x1, y2 - y1];\n // 如果端点相等,则判定点到点的距离\n if (gl_matrix_vec2__WEBPACK_IMPORTED_MODULE_1__[\"exactEquals\"](d, [0, 0])) {\n return Math.sqrt((x - x1) * (x - x1) + (y - y1) * (y - y1));\n }\n var u = [-d[1], d[0]];\n gl_matrix_vec2__WEBPACK_IMPORTED_MODULE_1__[\"normalize\"](u, u);\n var a = [x - x1, y - y1];\n return Math.abs(gl_matrix_vec2__WEBPACK_IMPORTED_MODULE_1__[\"dot\"](a, u));\n },\n /**\n * 线段的角度\n * @param {number} x1 起始点 x\n * @param {number} y1 起始点 y\n * @param {number} x2 结束点 x\n * @param {number} y2 结束点 y\n * @return {number} 导数\n */\n tangentAngle: function (x1, y1, x2, y2) {\n return Math.atan2(y2 - y1, x2 - x1);\n },\n});\n//# sourceMappingURL=line.js.map\n\n//# sourceURL=webpack:///./node_modules/@antv/g-math/esm/line.js?");
/***/ }),
/***/ "./node_modules/@antv/g-math/esm/polygon.js":
/*!**************************************************!*\
!*** ./node_modules/@antv/g-math/esm/polygon.js ***!
\**************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _segments__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./segments */ \"./node_modules/@antv/g-math/esm/segments.js\");\n/* harmony import */ var _polyline__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./polyline */ \"./node_modules/@antv/g-math/esm/polyline.js\");\n\n\nfunction getAllPoints(points) {\n var tmp = points.slice(0);\n if (points.length) {\n tmp.push(points[0]);\n }\n return tmp;\n}\n/* harmony default export */ __webpack_exports__[\"default\"] = ({\n /**\n * 计算多边形的包围盒\n * @param {array} points 点的集合 [x,y] 的形式\n * @return {object} 包围盒\n */\n box: function (points) {\n return _polyline__WEBPACK_IMPORTED_MODULE_1__[\"default\"].box(points);\n },\n /**\n * 计算多边形的长度\n * @param {array} points 点的集合 [x,y] 的形式\n * @return {object} 多边形边的长度\n */\n length: function (points) {\n return Object(_segments__WEBPACK_IMPORTED_MODULE_0__[\"lengthOfSegment\"])(getAllPoints(points));\n },\n /**\n * 根据比例获取多边形的点\n * @param {array} points 点的集合 [x,y] 的形式\n * @param {number} t 在多边形的长度上的比例\n * @return {object} 根据比例值计算出来的点\n */\n pointAt: function (points, t) {\n return Object(_segments__WEBPACK_IMPORTED_MODULE_0__[\"pointAtSegments\"])(getAllPoints(points), t);\n },\n /**\n * 指定点到多边形的距离\n * @param {array} points 点的集合 [x,y] 的形式\n * @param {number} x 指定点的 x\n * @param {number} y 指定点的 y\n * @return {number} 点到多边形的距离\n */\n pointDistance: function (points, x, y) {\n return Object(_segments__WEBPACK_IMPORTED_MODULE_0__[\"distanceAtSegment\"])(getAllPoints(points), x, y);\n },\n /**\n * 根据比例获取多边形的切线角度\n * @param {array} points 点的集合 [x,y] 的形式\n * @param {number} t 在多边形的长度上的比例\n * @return {object} 根据比例值计算出来的角度\n */\n tangentAngle: function (points, t) {\n return Object(_segments__WEBPACK_IMPORTED_MODULE_0__[\"angleAtSegments\"])(getAllPoints(points), t);\n },\n});\n//# sourceMappingURL=polygon.js.map\n\n//# sourceURL=webpack:///./node_modules/@antv/g-math/esm/polygon.js?");
/***/ }),
/***/ "./node_modules/@antv/g-math/esm/polyline.js":
/*!***************************************************!*\
!*** ./node_modules/@antv/g-math/esm/polyline.js ***!
\***************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _segments__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./segments */ \"./node_modules/@antv/g-math/esm/segments.js\");\n/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./util */ \"./node_modules/@antv/g-math/esm/util.js\");\n\n\n/* harmony default export */ __webpack_exports__[\"default\"] = ({\n /**\n * 计算多折线的包围盒\n * @param {array} points 点的集合 [x,y] 的形式\n * @return {object} 包围盒\n */\n box: function (points) {\n var xArr = [];\n var yArr = [];\n for (var i = 0; i < points.length; i++) {\n var point = points[i];\n xArr.push(point[0]);\n yArr.push(point[1]);\n }\n return Object(_util__WEBPACK_IMPORTED_MODULE_1__[\"getBBoxByArray\"])(xArr, yArr);\n },\n /**\n * 计算多折线的长度\n * @param {array} points 点的集合 [x,y] 的形式\n * @return {object} 多条边的长度\n */\n length: function (points) {\n return Object(_segments__WEBPACK_IMPORTED_MODULE_0__[\"lengthOfSegment\"])(points);\n },\n /**\n * 根据比例获取多折线的点\n * @param {array} points 点的集合 [x,y] 的形式\n * @param {number} t 在多折线的长度上的比例\n * @return {object} 根据比例值计算出来的点\n */\n pointAt: function (points, t) {\n return Object(_segments__WEBPACK_IMPORTED_MODULE_0__[\"pointAtSegments\"])(points, t);\n },\n /**\n * 指定点到多折线的距离\n * @param {array} points 点的集合 [x,y] 的形式\n * @param {number} x 指定点的 x\n * @param {number} y 指定点的 y\n * @return {number} 点到多折线的距离\n */\n pointDistance: function (points, x, y) {\n return Object(_segments__WEBPACK_IMPORTED_MODULE_0__[\"distanceAtSegment\"])(points, x, y);\n },\n /**\n * 根据比例获取多折线的切线角度\n * @param {array} points 点的集合 [x,y] 的形式\n * @param {number} t 在多折线的长度上的比例\n * @return {object} 根据比例值计算出来的角度\n */\n tangentAngle: function (points, t) {\n return Object(_segments__WEBPACK_IMPORTED_MODULE_0__[\"angleAtSegments\"])(points, t);\n },\n});\n//# sourceMappingURL=polyline.js.map\n\n//# sourceURL=webpack:///./node_modules/@antv/g-math/esm/polyline.js?");
/***/ }),
/***/ "./node_modules/@antv/g-math/esm/quadratic.js":
/*!****************************************************!*\
!*** ./node_modules/@antv/g-math/esm/quadratic.js ***!
\****************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _line__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./line */ \"./node_modules/@antv/g-math/esm/line.js\");\n/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./util */ \"./node_modules/@antv/g-math/esm/util.js\");\n/* harmony import */ var _bezier__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./bezier */ \"./node_modules/@antv/g-math/esm/bezier.js\");\n\n\n\n// 差值公式\nfunction quadraticAt(p0, p1, p2, t) {\n var onet = 1 - t;\n return onet * onet * p0 + 2 * t * onet * p1 + t * t * p2;\n}\n// 求极值\nfunction extrema(p0, p1, p2) {\n var a = p0 + p2 - 2 * p1;\n if (Object(_util__WEBPACK_IMPORTED_MODULE_1__[\"isNumberEqual\"])(a, 0)) {\n return [0.5];\n }\n var rst = (p0 - p1) / a;\n if (rst <= 1 && rst >= 0) {\n return [rst];\n }\n return [];\n}\nfunction derivativeAt(p0, p1, p2, t) {\n return 2 * (1 - t) * (p1 - p0) + 2 * t * (p2 - p1);\n}\n// 分割贝塞尔曲线\nfunction divideQuadratic(x1, y1, x2, y2, x3, y3, t) {\n // 划分点\n var xt = quadraticAt(x1, x2, x3, t);\n var yt = quadraticAt(y1, y2, y3, t);\n // 分割的第一条曲线的控制点\n var controlPoint1 = _line__WEBPACK_IMPORTED_MODULE_0__[\"default\"].pointAt(x1, y1, x2, y2, t);\n // 分割的第二条曲线的控制点\n var controlPoint2 = _line__WEBPACK_IMPORTED_MODULE_0__[\"default\"].pointAt(x2, y2, x3, y3, t);\n return [\n [x1, y1, controlPoint1.x, controlPoint1.y, xt, yt],\n [xt, yt, controlPoint2.x, controlPoint2.y, x3, y3],\n ];\n}\n// 使用迭代法取贝塞尔曲线的长度\nfunction quadraticLength(x1, y1, x2, y2, x3, y3, iterationCount) {\n if (iterationCount === 0) {\n return (Object(_util__WEBPACK_IMPORTED_MODULE_1__[\"distance\"])(x1, y1, x2, y2) + Object(_util__WEBPACK_IMPORTED_MODULE_1__[\"distance\"])(x2, y2, x3, y3) + Object(_util__WEBPACK_IMPORTED_MODULE_1__[\"distance\"])(x1, y1, x3, y3)) / 2;\n }\n var quadratics = divideQuadratic(x1, y1, x2, y2, x3, y3, 0.5);\n var left = quadratics[0];\n var right = quadratics[1];\n left.push(iterationCount - 1);\n right.push(iterationCount - 1);\n return quadraticLength.apply(null, left) + quadraticLength.apply(null, right);\n}\n/* harmony default export */ __webpack_exports__[\"default\"] = ({\n box: function (x1, y1, x2, y2, x3, y3) {\n var xExtrema = extrema(x1, x2, x3)[0];\n var yExtrema = extrema(y1, y2, y3)[0];\n // 控制点不加入 box 的计算\n var xArr = [x1, x3];\n var yArr = [y1, y3];\n if (xExtrema !== undefined) {\n xArr.push(quadraticAt(x1, x2, x3, xExtrema));\n }\n if (yExtrema !== undefined) {\n yArr.push(quadraticAt(y1, y2, y3, yExtrema));\n }\n return Object(_util__WEBPACK_IMPORTED_MODULE_1__[\"getBBoxByArray\"])(xArr, yArr);\n },\n length: function (x1, y1, x2, y2, x3, y3) {\n return quadraticLength(x1, y1, x2, y2, x3, y3, 3);\n },\n nearestPoint: function (x1, y1, x2, y2, x3, y3, x0, y0) {\n return Object(_bezier__WEBPACK_IMPORTED_MODULE_2__[\"nearestPoint\"])([x1, x2, x3], [y1, y2, y3], x0, y0, quadraticAt);\n },\n pointDistance: function (x1, y1, x2, y2, x3, y3, x0, y0) {\n var point = this.nearestPoint(x1, y1, x2, y2, x3, y3, x0, y0);\n return Object(_util__WEBPACK_IMPORTED_MODULE_1__[\"distance\"])(point.x, point.y, x0, y0);\n },\n interpolationAt: quadraticAt,\n pointAt: function (x1, y1, x2, y2, x3, y3, t) {\n return {\n x: quadraticAt(x1, x2, x3, t),\n y: quadraticAt(y1, y2, y3, t),\n };\n },\n divide: function (x1, y1, x2, y2, x3, y3, t) {\n return divideQuadratic(x1, y1, x2, y2, x3, y3, t);\n },\n tangentAngle: function (x1, y1, x2, y2, x3, y3, t) {\n var dx = derivativeAt(x1, x2, x3, t);\n var dy = derivativeAt(y1, y2, y3, t);\n var angle = Math.atan2(dy, dx);\n return Object(_util__WEBPACK_IMPORTED_MODULE_1__[\"piMod\"])(angle);\n },\n});\n//# sourceMappingURL=quadratic.js.map\n\n//# sourceURL=webpack:///./node_modules/@antv/g-math/esm/quadratic.js?");
/***/ }),
/***/ "./node_modules/@antv/g-math/esm/segments.js":
/*!***************************************************!*\
!*** ./node_modules/@antv/g-math/esm/segments.js ***!
\***************************************************/
/*! exports provided: lengthOfSegment, pointAtSegments, angleAtSegments, distanceAtSegment */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"lengthOfSegment\", function() { return lengthOfSegment; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"pointAtSegments\", function() { return pointAtSegments; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"angleAtSegments\", function() { return angleAtSegments; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"distanceAtSegment\", function() { return distanceAtSegment; });\n/* harmony import */ var _line__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./line */ \"./node_modules/@antv/g-math/esm/line.js\");\n/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./util */ \"./node_modules/@antv/g-math/esm/util.js\");\n\n\nfunction analyzePoints(points) {\n // 计算每段的长度和总的长度\n var totalLength = 0;\n var segments = [];\n for (var i = 0; i < points.length - 1; i++) {\n var from = points[i];\n var to = points[i + 1];\n var length_1 = Object(_util__WEBPACK_IMPORTED_MODULE_1__[\"distance\"])(from[0], from[1], to[0], to[1]);\n var seg = {\n from: from,\n to: to,\n length: length_1,\n };\n segments.push(seg);\n totalLength += length_1;\n }\n return { segments: segments, totalLength: totalLength };\n}\nfunction lengthOfSegment(points) {\n if (points.length < 2) {\n return 0;\n }\n var totalLength = 0;\n for (var i = 0; i < points.length - 1; i++) {\n var from = points[i];\n var to = points[i + 1];\n totalLength += Object(_util__WEBPACK_IMPORTED_MODULE_1__[\"distance\"])(from[0], from[1], to[0], to[1]);\n }\n return totalLength;\n}\n/**\n * 按照比例在数据片段中获取点\n * @param {array} points 点的集合\n * @param {number} t 百分比 0-1\n * @return {object} 点的坐标\n */\nfunction pointAtSegments(points, t) {\n // 边界判断\n if (t > 1 || t < 0 || points.length < 2) {\n return null;\n }\n var _a = analyzePoints(points), segments = _a.segments, totalLength = _a.totalLength;\n // 多个点有可能重合\n if (totalLength === 0) {\n return {\n x: points[0][0],\n y: points[0][1],\n };\n }\n // 计算比例\n var startRatio = 0;\n var point = null;\n for (var i = 0; i < segments.length; i++) {\n var seg = segments[i];\n var from = seg.from, to = seg.to;\n var currentRatio = seg.length / totalLength;\n if (t >= startRatio && t <= startRatio + currentRatio) {\n var localRatio = (t - startRatio) / currentRatio;\n point = _line__WEBPACK_IMPORTED_MODULE_0__[\"default\"].pointAt(from[0], from[1], to[0], to[1], localRatio);\n break;\n }\n startRatio += currentRatio;\n }\n return point;\n}\n/**\n * 按照比例在数据片段中获取切线的角度\n * @param {array} points 点的集合\n * @param {number} t 百分比 0-1\n */\nfunction angleAtSegments(points, t) {\n // 边界判断\n if (t > 1 || t < 0 || points.length < 2) {\n return 0;\n }\n var _a = analyzePoints(points), segments = _a.segments, totalLength = _a.totalLength;\n // 计算比例\n var startRatio = 0;\n var angle = 0;\n for (var i = 0; i < segments.length; i++) {\n var seg = segments[i];\n var from = seg.from, to = seg.to;\n var currentRatio = seg.length / totalLength;\n if (t >= startRatio && t <= startRatio + currentRatio) {\n angle = Math.atan2(to[1] - from[1], to[0] - from[0]);\n break;\n }\n startRatio += currentRatio;\n }\n return angle;\n}\nfunction distanceAtSegment(points, x, y) {\n var minDistance = Infinity;\n for (var i = 0; i < points.length - 1; i++) {\n var point = points[i];\n var nextPoint = points[i + 1];\n var distance_1 = _line__WEBPACK_IMPORTED_MODULE_0__[\"default\"].pointDistance(point[0], point[1], nextPoint[0], nextPoint[1], x, y);\n if (distance_1 < minDistance) {\n minDistance = distance_1;\n }\n }\n return minDistance;\n}\n//# sourceMappingURL=segments.js.map\n\n//# sourceURL=webpack:///./node_modules/@antv/g-math/esm/segments.js?");
/***/ }),
/***/ "./node_modules/@antv/g-math/esm/util.js":
/*!***********************************************!*\
!*** ./node_modules/@antv/g-math/esm/util.js ***!
\***********************************************/
/*! exports provided: distance, isNumberEqual, getBBoxByArray, getBBoxRange, piMod */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"distance\", function() { return distance; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"isNumberEqual\", function() { return isNumberEqual; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"getBBoxByArray\", function() { return getBBoxByArray; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"getBBoxRange\", function() { return getBBoxRange; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"piMod\", function() { return piMod; });\n/* harmony import */ var _antv_util__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @antv/util */ \"./node_modules/@antv/util/esm/index.js\");\n\n/**\n * 两点之间的距离\n * @param {number} x1 起始点 x\n * @param {number} y1 起始点 y\n * @param {number} x2 结束点 x\n * @param {number} y2 结束点 y\n * @return {number} 距离\n */\nfunction distance(x1, y1, x2, y2) {\n var dx = x1 - x2;\n var dy = y1 - y2;\n return Math.sqrt(dx * dx + dy * dy);\n}\nfunction isNumberEqual(v1, v2) {\n return Math.abs(v1 - v2) < 0.001;\n}\nfunction getBBoxByArray(xArr, yArr) {\n var minX = Object(_antv_util__WEBPACK_IMPORTED_MODULE_0__[\"min\"])(xArr);\n var minY = Object(_antv_util__WEBPACK_IMPORTED_MODULE_0__[\"min\"])(yArr);\n var maxX = Object(_antv_util__WEBPACK_IMPORTED_MODULE_0__[\"max\"])(xArr);\n var maxY = Object(_antv_util__WEBPACK_IMPORTED_MODULE_0__[\"max\"])(yArr);\n return {\n x: minX,\n y: minY,\n width: maxX - minX,\n height: maxY - minY,\n };\n}\nfunction getBBoxRange(x1, y1, x2, y2) {\n return {\n minX: Object(_antv_util__WEBPACK_IMPORTED_MODULE_0__[\"min\"])([x1, x2]),\n maxX: Object(_antv_util__WEBPACK_IMPORTED_MODULE_0__[\"max\"])([x1, x2]),\n minY: Object(_antv_util__WEBPACK_IMPORTED_MODULE_0__[\"min\"])([y1, y2]),\n maxY: Object(_antv_util__WEBPACK_IMPORTED_MODULE_0__[\"max\"])([y1, y2]),\n };\n}\nfunction piMod(angle) {\n return (angle + Math.PI * 2) % (Math.PI * 2);\n}\n//# sourceMappingURL=util.js.map\n\n//# sourceURL=webpack:///./node_modules/@antv/g-math/esm/util.js?");
/***/ }),
/***/ "./node_modules/@antv/g-svg/esm/canvas.js":
/*!************************************************!*\
!*** ./node_modules/@antv/g-svg/esm/canvas.js ***!
\************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tslib */ \"./node_modules/tslib/tslib.es6.js\");\n/* harmony import */ var _antv_g_base__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @antv/g-base */ \"./node_modules/@antv/g-base/esm/index.js\");\n/* harmony import */ var _constant__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./constant */ \"./node_modules/@antv/g-svg/esm/constant.js\");\n/* harmony import */ var _util_draw__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./util/draw */ \"./node_modules/@antv/g-svg/esm/util/draw.js\");\n/* harmony import */ var _util_svg__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./util/svg */ \"./node_modules/@antv/g-svg/esm/util/svg.js\");\n/* harmony import */ var _util_dom__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./util/dom */ \"./node_modules/@antv/g-svg/esm/util/dom.js\");\n/* harmony import */ var _shape__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./shape */ \"./node_modules/@antv/g-svg/esm/shape/index.js\");\n/* harmony import */ var _group__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./group */ \"./node_modules/@antv/g-svg/esm/group.js\");\n/* harmony import */ var _defs__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./defs */ \"./node_modules/@antv/g-svg/esm/defs/index.js\");\n\n\n\n\n\n\n\n\n\nvar Canvas = /** @class */ (function (_super) {\n Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__extends\"])(Canvas, _super);\n function Canvas(cfg) {\n return _super.call(this, Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__assign\"])(Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__assign\"])({}, cfg), { autoDraw: true, \n // 设置渲染引擎为 canvas,只读属性\n renderer: 'svg' })) || this;\n }\n Canvas.prototype.getShapeBase = function () {\n return _shape__WEBPACK_IMPORTED_MODULE_6__;\n };\n Canvas.prototype.getGroupBase = function () {\n return _group__WEBPACK_IMPORTED_MODULE_7__[\"default\"];\n };\n // 覆盖 Container 中通过遍历的方式获取 shape 对象的逻辑,直接走 SVG 的 dom 拾取即可\n Canvas.prototype.getShape = function (x, y, ev) {\n var target = ev.target || ev.srcElement;\n if (!_constant__WEBPACK_IMPORTED_MODULE_2__[\"SHAPE_TO_TAGS\"][target.tagName]) {\n var parent_1 = target.parentNode;\n while (parent_1 && !_constant__WEBPACK_IMPORTED_MODULE_2__[\"SHAPE_TO_TAGS\"][parent_1.tagName]) {\n parent_1 = parent_1.parentNode;\n }\n target = parent_1;\n }\n return this.find(function (child) { return child.get('el') === target; });\n };\n // 复写基类的方法生成标签\n Canvas.prototype.createDom = function () {\n var element = Object(_util_dom__WEBPACK_IMPORTED_MODULE_5__[\"createSVGElement\"])('svg');\n var context = new _defs__WEBPACK_IMPORTED_MODULE_8__[\"default\"](element);\n element.setAttribute('width', \"\" + this.get('width'));\n element.setAttribute('height', \"\" + this.get('height'));\n // 缓存 context 对象\n this.set('context', context);\n return element;\n };\n /**\n * 一些方法调用会引起画布变化\n * @param {ChangeType} changeType 改变的类型\n */\n Canvas.prototype.onCanvasChange = function (changeType) {\n var context = this.get('context');\n var el = this.get('el');\n if (changeType === 'sort') {\n var children_1 = this.get('children');\n if (children_1 && children_1.length) {\n Object(_util_dom__WEBPACK_IMPORTED_MODULE_5__[\"sortDom\"])(this, function (a, b) {\n return children_1.indexOf(a) - children_1.indexOf(b) ? 1 : 0;\n });\n }\n }\n else if (changeType === 'clear') {\n // el maybe null for canvas\n if (el) {\n // 清空 SVG 元素\n el.innerHTML = '';\n var defsEl = context.el;\n // 清空 defs 元素\n defsEl.innerHTML = '';\n // 将清空后的 defs 元素挂载到 el 下\n el.appendChild(defsEl);\n }\n }\n else if (changeType === 'matrix') {\n Object(_util_svg__WEBPACK_IMPORTED_MODULE_4__[\"setTransform\"])(this);\n }\n else if (changeType === 'clip') {\n Object(_util_svg__WEBPACK_IMPORTED_MODULE_4__[\"setClip\"])(this, context);\n }\n else if (changeType === 'changeSize') {\n el.setAttribute('width', \"\" + this.get('width'));\n el.setAttribute('height', \"\" + this.get('height'));\n }\n };\n // 复写基类的 draw 方法\n Canvas.prototype.draw = function () {\n var context = this.get('context');\n var children = this.getChildren();\n Object(_util_svg__WEBPACK_IMPORTED_MODULE_4__[\"setClip\"])(this, context);\n if (children.length) {\n Object(_util_draw__WEBPACK_IMPORTED_MODULE_3__[\"drawChildren\"])(context, children);\n }\n };\n return Canvas;\n}(_antv_g_base__WEBPACK_IMPORTED_MODULE_1__[\"AbstractCanvas\"]));\n/* harmony default export */ __webpack_exports__[\"default\"] = (Canvas);\n//# sourceMappingURL=canvas.js.map\n\n//# sourceURL=webpack:///./node_modules/@antv/g-svg/esm/canvas.js?");
/***/ }),
/***/ "./node_modules/@antv/g-svg/esm/constant.js":
/*!**************************************************!*\
!*** ./node_modules/@antv/g-svg/esm/constant.js ***!
\**************************************************/
/*! exports provided: SHAPE_TO_TAGS, SVG_ATTR_MAP, EVENTS */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"SHAPE_TO_TAGS\", function() { return SHAPE_TO_TAGS; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"SVG_ATTR_MAP\", function() { return SVG_ATTR_MAP; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"EVENTS\", function() { return EVENTS; });\nvar SHAPE_TO_TAGS = {\n rect: 'path',\n circle: 'circle',\n line: 'line',\n path: 'path',\n marker: 'path',\n text: 'text',\n polyline: 'polyline',\n polygon: 'polygon',\n image: 'image',\n ellipse: 'ellipse',\n dom: 'foreignObject',\n};\nvar SVG_ATTR_MAP = {\n opacity: 'opacity',\n fillStyle: 'fill',\n fill: 'fill',\n fillOpacity: 'fill-opacity',\n strokeStyle: 'stroke',\n strokeOpacity: 'stroke-opacity',\n stroke: 'stroke',\n x: 'x',\n y: 'y',\n r: 'r',\n rx: 'rx',\n ry: 'ry',\n width: 'width',\n height: 'height',\n x1: 'x1',\n x2: 'x2',\n y1: 'y1',\n y2: 'y2',\n lineCap: 'stroke-linecap',\n lineJoin: 'stroke-linejoin',\n lineWidth: 'stroke-width',\n lineDash: 'stroke-dasharray',\n lineDashOffset: 'stroke-dashoffset',\n miterLimit: 'stroke-miterlimit',\n font: 'font',\n fontSize: 'font-size',\n fontStyle: 'font-style',\n fontVariant: 'font-variant',\n fontWeight: 'font-weight',\n fontFamily: 'font-family',\n startArrow: 'marker-start',\n endArrow: 'marker-end',\n path: 'd',\n class: 'class',\n id: 'id',\n style: 'style',\n preserveAspectRatio: 'preserveAspectRatio',\n};\nvar EVENTS = [\n 'click',\n 'mousedown',\n 'mouseup',\n 'dblclick',\n 'contextmenu',\n 'mouseenter',\n 'mouseleave',\n 'mouseover',\n 'mouseout',\n 'mousemove',\n 'wheel',\n];\n//# sourceMappingURL=constant.js.map\n\n//# sourceURL=webpack:///./node_modules/@antv/g-svg/esm/constant.js?");
/***/ }),
/***/ "./node_modules/@antv/g-svg/esm/defs/arrow.js":
/*!****************************************************!*\
!*** ./node_modules/@antv/g-svg/esm/defs/arrow.js ***!
\****************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _antv_util__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @antv/util */ \"./node_modules/@antv/util/esm/index.js\");\n/* harmony import */ var _util_dom__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../util/dom */ \"./node_modules/@antv/g-svg/esm/util/dom.js\");\n/**\n * @fileoverview arrow\n * @author dengfuping_develop@163.com\n */\n\n\nvar Arrow = /** @class */ (function () {\n function Arrow(attrs, type) {\n this.cfg = {};\n var el = Object(_util_dom__WEBPACK_IMPORTED_MODULE_1__[\"createSVGElement\"])('marker');\n var id = Object(_antv_util__WEBPACK_IMPORTED_MODULE_0__[\"uniqueId\"])('marker_');\n el.setAttribute('id', id);\n var shape = Object(_util_dom__WEBPACK_IMPORTED_MODULE_1__[\"createSVGElement\"])('path');\n shape.setAttribute('stroke', attrs.stroke || 'none');\n shape.setAttribute('fill', attrs.fill || 'none');\n el.appendChild(shape);\n el.setAttribute('overflow', 'visible');\n el.setAttribute('orient', 'auto-start-reverse');\n this.el = el;\n this.child = shape;\n this.id = id;\n var cfg = attrs[type === 'marker-start' ? 'startArrow' : 'endArrow'];\n this.stroke = attrs.stroke || '#000';\n if (cfg === true) {\n this._setDefaultPath(type, shape);\n }\n else {\n this.cfg = cfg; // when arrow config exists\n this._setMarker(attrs.lineWidth, shape);\n }\n return this;\n }\n Arrow.prototype.match = function () {\n return false;\n };\n Arrow.prototype._setDefaultPath = function (type, el) {\n var parent = this.el;\n // 默认箭头的边长为 10,夹角为 60 度\n el.setAttribute('d', \"M0,0 L\" + 10 * Math.cos(Math.PI / 6) + \",5 L0,10\");\n parent.setAttribute('refX', \"\" + 10 * Math.cos(Math.PI / 6));\n parent.setAttribute('refY', \"\" + 5);\n };\n Arrow.prototype._setMarker = function (r, el) {\n var parent = this.el;\n var path = this.cfg.path;\n var d = this.cfg.d;\n if (Object(_antv_util__WEBPACK_IMPORTED_MODULE_0__[\"isArray\"])(path)) {\n path = path\n .map(function (segment) {\n return segment.join(' ');\n })\n .join('');\n }\n el.setAttribute('d', path);\n parent.appendChild(el);\n if (d) {\n parent.setAttribute('refX', \"\" + d / r);\n }\n };\n Arrow.prototype.update = function (fill) {\n var child = this.child;\n if (child.attr) {\n child.attr('fill', fill);\n }\n else {\n child.setAttribute('fill', fill);\n }\n };\n return Arrow;\n}());\n/* harmony default export */ __webpack_exports__[\"default\"] = (Arrow);\n//# sourceMappingURL=arrow.js.map\n\n//# sourceURL=webpack:///./node_modules/@antv/g-svg/esm/defs/arrow.js?");
/***/ }),
/***/ "./node_modules/@antv/g-svg/esm/defs/clip.js":
/*!***************************************************!*\
!*** ./node_modules/@antv/g-svg/esm/defs/clip.js ***!
\***************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _antv_util__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @antv/util */ \"./node_modules/@antv/util/esm/index.js\");\n/* harmony import */ var _util_dom__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../util/dom */ \"./node_modules/@antv/g-svg/esm/util/dom.js\");\n/**\n * @fileoverview clip\n * @author dengfuping_develop@163.com\n */\n\n\nvar Clip = /** @class */ (function () {\n function Clip(cfg) {\n this.type = 'clip';\n this.cfg = {};\n var el = Object(_util_dom__WEBPACK_IMPORTED_MODULE_1__[\"createSVGElement\"])('clipPath');\n this.el = el;\n this.id = Object(_antv_util__WEBPACK_IMPORTED_MODULE_0__[\"uniqueId\"])('clip_');\n el.id = this.id;\n var shapeEl = cfg.cfg.el;\n el.appendChild(shapeEl);\n this.cfg = cfg;\n return this;\n }\n Clip.prototype.match = function () {\n return false;\n };\n Clip.prototype.remove = function () {\n var el = this.el;\n el.parentNode.removeChild(el);\n };\n return Clip;\n}());\n/* harmony default export */ __webpack_exports__[\"default\"] = (Clip);\n//# sourceMappingURL=clip.js.map\n\n//# sourceURL=webpack:///./node_modules/@antv/g-svg/esm/defs/clip.js?");
/***/ }),
/***/ "./node_modules/@antv/g-svg/esm/defs/gradient.js":
/*!*******************************************************!*\
!*** ./node_modules/@antv/g-svg/esm/defs/gradient.js ***!
\*******************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _antv_util__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @antv/util */ \"./node_modules/@antv/util/esm/index.js\");\n/* harmony import */ var _util_dom__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../util/dom */ \"./node_modules/@antv/g-svg/esm/util/dom.js\");\n/**\n * @fileoverview gradient\n * @author dengfuping_develop@163.com\n */\n\n\nvar regexLG = /^l\\s*\\(\\s*([\\d.]+)\\s*\\)\\s*(.*)/i;\nvar regexRG = /^r\\s*\\(\\s*([\\d.]+)\\s*,\\s*([\\d.]+)\\s*,\\s*([\\d.]+)\\s*\\)\\s*(.*)/i;\nvar regexColorStop = /[\\d.]+:(#[^\\s]+|[^)]+\\))/gi;\nfunction addStop(steps) {\n var arr = steps.match(regexColorStop);\n if (!arr) {\n return '';\n }\n var stops = '';\n arr.sort(function (a, b) {\n a = a.split(':');\n b = b.split(':');\n return Number(a[0]) - Number(b[0]);\n });\n Object(_antv_util__WEBPACK_IMPORTED_MODULE_0__[\"each\"])(arr, function (item) {\n item = item.split(':');\n stops += \"\";\n });\n return stops;\n}\nfunction parseLineGradient(color, el) {\n var arr = regexLG.exec(color);\n var angle = Object(_antv_util__WEBPACK_IMPORTED_MODULE_0__[\"mod\"])(Object(_antv_util__WEBPACK_IMPORTED_MODULE_0__[\"toRadian\"])(parseFloat(arr[1])), Math.PI * 2);\n var steps = arr[2];\n var start;\n var end;\n if (angle >= 0 && angle < 0.5 * Math.PI) {\n start = {\n x: 0,\n y: 0,\n };\n end = {\n x: 1,\n y: 1,\n };\n }\n else if (0.5 * Math.PI <= angle && angle < Math.PI) {\n start = {\n x: 1,\n y: 0,\n };\n end = {\n x: 0,\n y: 1,\n };\n }\n else if (Math.PI <= angle && angle < 1.5 * Math.PI) {\n start = {\n x: 1,\n y: 1,\n };\n end = {\n x: 0,\n y: 0,\n };\n }\n else {\n start = {\n x: 0,\n y: 1,\n };\n end = {\n x: 1,\n y: 0,\n };\n }\n var tanTheta = Math.tan(angle);\n var tanTheta2 = tanTheta * tanTheta;\n var x = (end.x - start.x + tanTheta * (end.y - start.y)) / (tanTheta2 + 1) + start.x;\n var y = (tanTheta * (end.x - start.x + tanTheta * (end.y - start.y))) / (tanTheta2 + 1) + start.y;\n el.setAttribute('x1', start.x);\n el.setAttribute('y1', start.y);\n el.setAttribute('x2', x);\n el.setAttribute('y2', y);\n el.innerHTML = addStop(steps);\n}\nfunction parseRadialGradient(color, self) {\n var arr = regexRG.exec(color);\n var cx = parseFloat(arr[1]);\n var cy = parseFloat(arr[2]);\n var r = parseFloat(arr[3]);\n var steps = arr[4];\n self.setAttribute('cx', cx);\n self.setAttribute('cy', cy);\n self.setAttribute('r', r);\n self.innerHTML = addStop(steps);\n}\nvar Gradient = /** @class */ (function () {\n function Gradient(cfg) {\n this.cfg = {};\n var el = null;\n var id = Object(_antv_util__WEBPACK_IMPORTED_MODULE_0__[\"uniqueId\"])('gradient_');\n if (cfg.toLowerCase()[0] === 'l') {\n el = Object(_util_dom__WEBPACK_IMPORTED_MODULE_1__[\"createSVGElement\"])('linearGradient');\n parseLineGradient(cfg, el);\n }\n else {\n el = Object(_util_dom__WEBPACK_IMPORTED_MODULE_1__[\"createSVGElement\"])('radialGradient');\n parseRadialGradient(cfg, el);\n }\n el.setAttribute('id', id);\n this.el = el;\n this.id = id;\n this.cfg = cfg;\n return this;\n }\n Gradient.prototype.match = function (type, attr) {\n return this.cfg === attr;\n };\n return Gradient;\n}());\n/* harmony default export */ __webpack_exports__[\"default\"] = (Gradient);\n//# sourceMappingURL=gradient.js.map\n\n//# sourceURL=webpack:///./node_modules/@antv/g-svg/esm/defs/gradient.js?");
/***/ }),
/***/ "./node_modules/@antv/g-svg/esm/defs/index.js":
/*!****************************************************!*\
!*** ./node_modules/@antv/g-svg/esm/defs/index.js ***!
\****************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _antv_util__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @antv/util */ \"./node_modules/@antv/util/esm/index.js\");\n/* harmony import */ var _gradient__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./gradient */ \"./node_modules/@antv/g-svg/esm/defs/gradient.js\");\n/* harmony import */ var _shadow__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./shadow */ \"./node_modules/@antv/g-svg/esm/defs/shadow.js\");\n/* harmony import */ var _arrow__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./arrow */ \"./node_modules/@antv/g-svg/esm/defs/arrow.js\");\n/* harmony import */ var _clip__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./clip */ \"./node_modules/@antv/g-svg/esm/defs/clip.js\");\n/* harmony import */ var _pattern__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./pattern */ \"./node_modules/@antv/g-svg/esm/defs/pattern.js\");\n/* harmony import */ var _util_dom__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../util/dom */ \"./node_modules/@antv/g-svg/esm/util/dom.js\");\n/**\n * @fileoverview defs\n * @author dengfuping_develop@163.com\n */\n\n\n\n\n\n\n\nvar Defs = /** @class */ (function () {\n function Defs(canvas) {\n var el = Object(_util_dom__WEBPACK_IMPORTED_MODULE_6__[\"createSVGElement\"])('defs');\n var id = Object(_antv_util__WEBPACK_IMPORTED_MODULE_0__[\"uniqueId\"])('defs_');\n el.id = id;\n canvas.appendChild(el);\n this.children = [];\n this.defaultArrow = {};\n this.el = el;\n this.canvas = canvas;\n }\n Defs.prototype.find = function (type, attr) {\n var children = this.children;\n var result = null;\n for (var i = 0; i < children.length; i++) {\n if (children[i].match(type, attr)) {\n result = children[i].id;\n break;\n }\n }\n return result;\n };\n Defs.prototype.findById = function (id) {\n var children = this.children;\n var flag = null;\n for (var i = 0; i < children.length; i++) {\n if (children[i].id === id) {\n flag = children[i];\n break;\n }\n }\n return flag;\n };\n Defs.prototype.add = function (item) {\n this.children.push(item);\n item.canvas = this.canvas;\n item.parent = this;\n };\n Defs.prototype.getDefaultArrow = function (attrs, name) {\n var stroke = attrs.stroke || attrs.strokeStyle;\n if (this.defaultArrow[stroke]) {\n return this.defaultArrow[stroke].id;\n }\n var arrow = new _arrow__WEBPACK_IMPORTED_MODULE_3__[\"default\"](attrs, name);\n this.defaultArrow[stroke] = arrow;\n this.el.appendChild(arrow.el);\n this.add(arrow);\n return arrow.id;\n };\n Defs.prototype.addGradient = function (cfg) {\n var gradient = new _gradient__WEBPACK_IMPORTED_MODULE_1__[\"default\"](cfg);\n this.el.appendChild(gradient.el);\n this.add(gradient);\n return gradient.id;\n };\n Defs.prototype.addArrow = function (attrs, name) {\n var arrow = new _arrow__WEBPACK_IMPORTED_MODULE_3__[\"default\"](attrs, name);\n this.el.appendChild(arrow.el);\n this.add(arrow);\n return arrow.id;\n };\n Defs.prototype.addShadow = function (cfg) {\n var shadow = new _shadow__WEBPACK_IMPORTED_MODULE_2__[\"default\"](cfg);\n this.el.appendChild(shadow.el);\n this.add(shadow);\n return shadow.id;\n };\n Defs.prototype.addPattern = function (cfg) {\n var pattern = new _pattern__WEBPACK_IMPORTED_MODULE_5__[\"default\"](cfg);\n this.el.appendChild(pattern.el);\n this.add(pattern);\n return pattern.id;\n };\n Defs.prototype.addClip = function (cfg) {\n var clip = new _clip__WEBPACK_IMPORTED_MODULE_4__[\"default\"](cfg);\n this.el.appendChild(clip.el);\n this.add(clip);\n return clip.id;\n };\n return Defs;\n}());\n/* harmony default export */ __webpack_exports__[\"default\"] = (Defs);\n//# sourceMappingURL=index.js.map\n\n//# sourceURL=webpack:///./node_modules/@antv/g-svg/esm/defs/index.js?");
/***/ }),
/***/ "./node_modules/@antv/g-svg/esm/defs/pattern.js":
/*!******************************************************!*\
!*** ./node_modules/@antv/g-svg/esm/defs/pattern.js ***!
\******************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _antv_util__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @antv/util */ \"./node_modules/@antv/util/esm/index.js\");\n/* harmony import */ var _util_dom__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../util/dom */ \"./node_modules/@antv/g-svg/esm/util/dom.js\");\n/**\n * @fileoverview pattern\n * @author dengfuping_develop@163.com\n */\n\n\nvar regexPR = /^p\\s*\\(\\s*([axyn])\\s*\\)\\s*(.*)/i;\nvar Pattern = /** @class */ (function () {\n function Pattern(cfg) {\n this.cfg = {};\n var el = Object(_util_dom__WEBPACK_IMPORTED_MODULE_1__[\"createSVGElement\"])('pattern');\n el.setAttribute('patternUnits', 'userSpaceOnUse');\n var child = Object(_util_dom__WEBPACK_IMPORTED_MODULE_1__[\"createSVGElement\"])('image');\n el.appendChild(child);\n var id = Object(_antv_util__WEBPACK_IMPORTED_MODULE_0__[\"uniqueId\"])('pattern_');\n el.id = id;\n this.el = el;\n this.id = id;\n this.cfg = cfg;\n var arr = regexPR.exec(cfg);\n var source = arr[2];\n child.setAttribute('href', source);\n var img = new Image();\n if (!source.match(/^data:/i)) {\n img.crossOrigin = 'Anonymous';\n }\n img.src = source;\n function onload() {\n el.setAttribute('width', \"\" + img.width);\n el.setAttribute('height', \"\" + img.height);\n }\n if (img.complete) {\n onload();\n }\n else {\n img.onload = onload;\n // Fix onload() bug in IE9\n img.src = img.src;\n }\n return this;\n }\n Pattern.prototype.match = function (type, attr) {\n return this.cfg === attr;\n };\n return Pattern;\n}());\n/* harmony default export */ __webpack_exports__[\"default\"] = (Pattern);\n//# sourceMappingURL=pattern.js.map\n\n//# sourceURL=webpack:///./node_modules/@antv/g-svg/esm/defs/pattern.js?");
/***/ }),
/***/ "./node_modules/@antv/g-svg/esm/defs/shadow.js":
/*!*****************************************************!*\
!*** ./node_modules/@antv/g-svg/esm/defs/shadow.js ***!
\*****************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _antv_util__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @antv/util */ \"./node_modules/@antv/util/esm/index.js\");\n/* harmony import */ var _util_dom__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../util/dom */ \"./node_modules/@antv/g-svg/esm/util/dom.js\");\n/**\n * @fileoverview shadow\n * @author dengfuping_develop@163.com\n */\n\n\nvar ATTR_MAP = {\n shadowColor: 'color',\n shadowOpacity: 'opacity',\n shadowBlur: 'blur',\n shadowOffsetX: 'dx',\n shadowOffsetY: 'dy',\n};\nvar SHADOW_DIMENSION = {\n x: '-40%',\n y: '-40%',\n width: '200%',\n height: '200%',\n};\nvar Shadow = /** @class */ (function () {\n function Shadow(cfg) {\n this.type = 'filter';\n this.cfg = {};\n this.type = 'filter';\n var el = Object(_util_dom__WEBPACK_IMPORTED_MODULE_1__[\"createSVGElement\"])('filter');\n // expand the filter region to fill in shadows\n Object(_antv_util__WEBPACK_IMPORTED_MODULE_0__[\"each\"])(SHADOW_DIMENSION, function (v, k) {\n el.setAttribute(k, v);\n });\n this.el = el;\n this.id = Object(_antv_util__WEBPACK_IMPORTED_MODULE_0__[\"uniqueId\"])('filter_');\n this.el.id = this.id;\n this.cfg = cfg;\n this._parseShadow(cfg, el);\n return this;\n }\n Shadow.prototype.match = function (type, cfg) {\n if (this.type !== type) {\n return false;\n }\n var flag = true;\n var config = this.cfg;\n Object(_antv_util__WEBPACK_IMPORTED_MODULE_0__[\"each\"])(Object.keys(config), function (attr) {\n if (config[attr] !== cfg[attr]) {\n flag = false;\n return false;\n }\n });\n return flag;\n };\n Shadow.prototype.update = function (name, value) {\n var config = this.cfg;\n config[ATTR_MAP[name]] = value;\n this._parseShadow(config, this.el);\n return this;\n };\n Shadow.prototype._parseShadow = function (config, el) {\n var child = \"\";\n el.innerHTML = child;\n };\n return Shadow;\n}());\n/* harmony default export */ __webpack_exports__[\"default\"] = (Shadow);\n//# sourceMappingURL=shadow.js.map\n\n//# sourceURL=webpack:///./node_modules/@antv/g-svg/esm/defs/shadow.js?");
/***/ }),
/***/ "./node_modules/@antv/g-svg/esm/group.js":
/*!***********************************************!*\
!*** ./node_modules/@antv/g-svg/esm/group.js ***!
\***********************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tslib */ \"./node_modules/tslib/tslib.es6.js\");\n/* harmony import */ var _antv_g_base__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @antv/g-base */ \"./node_modules/@antv/g-base/esm/index.js\");\n/* harmony import */ var _antv_util__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @antv/util */ \"./node_modules/@antv/util/esm/index.js\");\n/* harmony import */ var _shape__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./shape */ \"./node_modules/@antv/g-svg/esm/shape/index.js\");\n/* harmony import */ var _util_draw__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./util/draw */ \"./node_modules/@antv/g-svg/esm/util/draw.js\");\n/* harmony import */ var _util_svg__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./util/svg */ \"./node_modules/@antv/g-svg/esm/util/svg.js\");\n/* harmony import */ var _constant__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./constant */ \"./node_modules/@antv/g-svg/esm/constant.js\");\n/* harmony import */ var _util_dom__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./util/dom */ \"./node_modules/@antv/g-svg/esm/util/dom.js\");\n\n\n\n\n\n\n\n\nvar Group = /** @class */ (function (_super) {\n Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__extends\"])(Group, _super);\n function Group() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n // SVG 中分组对应实体标签 \n Group.prototype.isEntityGroup = function () {\n return true;\n };\n Group.prototype.createDom = function () {\n var element = Object(_util_dom__WEBPACK_IMPORTED_MODULE_7__[\"createSVGElement\"])('g');\n this.set('el', element);\n var parent = this.getParent();\n if (parent) {\n var parentNode = parent.get('el');\n if (parentNode) {\n parentNode.appendChild(element);\n }\n else {\n // parentNode maybe null for group\n parentNode = parent.createDom();\n parent.set('el', parentNode);\n parentNode.appendChild(element);\n }\n }\n return element;\n };\n // 覆盖基类的 afterAttrsChange 方法\n Group.prototype.afterAttrsChange = function (targetAttrs) {\n _super.prototype.afterAttrsChange.call(this, targetAttrs);\n var canvas = this.get('canvas');\n // 只有挂载到画布下,才对元素进行实际渲染\n if (canvas && canvas.get('autoDraw')) {\n var context = canvas.get('context');\n this.createPath(context, targetAttrs);\n }\n };\n /**\n * 一些方法调用会引起画布变化\n * @param {ChangeType} changeType 改变的类型\n */\n Group.prototype.onCanvasChange = function (changeType) {\n Object(_util_draw__WEBPACK_IMPORTED_MODULE_4__[\"refreshElement\"])(this, changeType);\n };\n Group.prototype.getShapeBase = function () {\n return _shape__WEBPACK_IMPORTED_MODULE_3__;\n };\n Group.prototype.getGroupBase = function () {\n return Group;\n };\n Group.prototype.draw = function (context) {\n var children = this.getChildren();\n var el = this.get('el');\n if (this.get('destroyed')) {\n if (el) {\n el.parentNode.removeChild(el);\n }\n }\n else {\n if (!el) {\n this.createDom();\n }\n Object(_util_svg__WEBPACK_IMPORTED_MODULE_5__[\"setClip\"])(this, context);\n this.createPath(context);\n if (children.length) {\n Object(_util_draw__WEBPACK_IMPORTED_MODULE_4__[\"drawChildren\"])(context, children);\n }\n }\n };\n /**\n * 绘制分组的路径\n * @param {Defs} context 上下文\n * @param {ShapeAttrs} targetAttrs 渲染的目标属性\n */\n Group.prototype.createPath = function (context, targetAttrs) {\n var attrs = this.attr();\n var el = this.get('el');\n Object(_antv_util__WEBPACK_IMPORTED_MODULE_2__[\"each\"])(targetAttrs || attrs, function (value, attr) {\n if (_constant__WEBPACK_IMPORTED_MODULE_6__[\"SVG_ATTR_MAP\"][attr]) {\n el.setAttribute(_constant__WEBPACK_IMPORTED_MODULE_6__[\"SVG_ATTR_MAP\"][attr], value);\n }\n });\n Object(_util_svg__WEBPACK_IMPORTED_MODULE_5__[\"setTransform\"])(this);\n };\n return Group;\n}(_antv_g_base__WEBPACK_IMPORTED_MODULE_1__[\"AbstractGroup\"]));\n/* harmony default export */ __webpack_exports__[\"default\"] = (Group);\n//# sourceMappingURL=group.js.map\n\n//# sourceURL=webpack:///./node_modules/@antv/g-svg/esm/group.js?");
/***/ }),
/***/ "./node_modules/@antv/g-svg/esm/index.js":
/*!***********************************************!*\
!*** ./node_modules/@antv/g-svg/esm/index.js ***!
\***********************************************/
/*! no static exports found */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"version\", function() { return version; });\n/* harmony import */ var _shape__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./shape */ \"./node_modules/@antv/g-svg/esm/shape/index.js\");\n/* harmony reexport (module object) */ __webpack_require__.d(__webpack_exports__, \"Shape\", function() { return _shape__WEBPACK_IMPORTED_MODULE_0__; });\n/* harmony import */ var _antv_g_base__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @antv/g-base */ \"./node_modules/@antv/g-base/esm/index.js\");\n/* harmony reexport (unknown) */ for(var __WEBPACK_IMPORT_KEY__ in _antv_g_base__WEBPACK_IMPORTED_MODULE_1__) if([\"default\",\"Canvas\",\"Group\",\"Shape\",\"version\"].indexOf(__WEBPACK_IMPORT_KEY__) < 0) (function(key) { __webpack_require__.d(__webpack_exports__, key, function() { return _antv_g_base__WEBPACK_IMPORTED_MODULE_1__[key]; }) }(__WEBPACK_IMPORT_KEY__));\n/* harmony import */ var _canvas__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./canvas */ \"./node_modules/@antv/g-svg/esm/canvas.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Canvas\", function() { return _canvas__WEBPACK_IMPORTED_MODULE_2__[\"default\"]; });\n\n/* harmony import */ var _group__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./group */ \"./node_modules/@antv/g-svg/esm/group.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Group\", function() { return _group__WEBPACK_IMPORTED_MODULE_3__[\"default\"]; });\n\n\n\n\n\n\nvar version = '0.5.6';\n//# sourceMappingURL=index.js.map\n\n//# sourceURL=webpack:///./node_modules/@antv/g-svg/esm/index.js?");
/***/ }),
/***/ "./node_modules/@antv/g-svg/esm/shape/base.js":
/*!****************************************************!*\
!*** ./node_modules/@antv/g-svg/esm/shape/base.js ***!
\****************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tslib */ \"./node_modules/tslib/tslib.es6.js\");\n/* harmony import */ var _antv_g_base__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @antv/g-base */ \"./node_modules/@antv/g-base/esm/index.js\");\n/* harmony import */ var _util_svg__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../util/svg */ \"./node_modules/@antv/g-svg/esm/util/svg.js\");\n/* harmony import */ var _util_dom__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../util/dom */ \"./node_modules/@antv/g-svg/esm/util/dom.js\");\n/* harmony import */ var _util_draw__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../util/draw */ \"./node_modules/@antv/g-svg/esm/util/draw.js\");\n/* harmony import */ var _constant__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../constant */ \"./node_modules/@antv/g-svg/esm/constant.js\");\n/* harmony import */ var _index__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./index */ \"./node_modules/@antv/g-svg/esm/shape/index.js\");\n/* harmony import */ var _group__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../group */ \"./node_modules/@antv/g-svg/esm/group.js\");\n\n\n\n\n\n\n\n\n\nvar ShapeBase = /** @class */ (function (_super) {\n Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__extends\"])(ShapeBase, _super);\n function ShapeBase() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.type = 'svg';\n _this.canFill = false;\n _this.canStroke = false;\n return _this;\n }\n ShapeBase.prototype.getDefaultAttrs = function () {\n var attrs = _super.prototype.getDefaultAttrs.call(this);\n // 设置默认值\n return Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__assign\"])(Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__assign\"])({}, attrs), { lineWidth: 1, lineAppendWidth: 0, strokeOpacity: 1, fillOpacity: 1 });\n };\n // 覆盖基类的 afterAttrsChange 方法\n ShapeBase.prototype.afterAttrsChange = function (targetAttrs) {\n _super.prototype.afterAttrsChange.call(this, targetAttrs);\n var canvas = this.get('canvas');\n // 只有挂载到画布下,才对元素进行实际渲染\n if (canvas && canvas.get('autoDraw')) {\n var context = canvas.get('context');\n this.draw(context, targetAttrs);\n }\n };\n ShapeBase.prototype.getShapeBase = function () {\n return _index__WEBPACK_IMPORTED_MODULE_6__;\n };\n ShapeBase.prototype.getGroupBase = function () {\n return _group__WEBPACK_IMPORTED_MODULE_7__[\"default\"];\n };\n /**\n * 一些方法调用会引起画布变化\n * @param {ChangeType} changeType 改变的类型\n */\n ShapeBase.prototype.onCanvasChange = function (changeType) {\n Object(_util_draw__WEBPACK_IMPORTED_MODULE_4__[\"refreshElement\"])(this, changeType);\n };\n ShapeBase.prototype.calculateBBox = function () {\n var el = this.get('el');\n var bbox = null;\n // 包围盒计算依赖于绘制,如果还没有生成对应的 Dom 元素,则包围盒的长宽均为 0\n if (el) {\n bbox = el.getBBox();\n }\n else {\n var bboxMethod = Object(_antv_g_base__WEBPACK_IMPORTED_MODULE_1__[\"getBBoxMethod\"])(this.get('type'));\n if (bboxMethod) {\n bbox = bboxMethod(this);\n }\n }\n if (bbox) {\n var x = bbox.x, y = bbox.y, width = bbox.width, height = bbox.height;\n var lineWidth = this.getHitLineWidth();\n var halfWidth = lineWidth / 2;\n var minX = x - halfWidth;\n var minY = y - halfWidth;\n var maxX = x + width + halfWidth;\n var maxY = y + height + halfWidth;\n return {\n x: minX,\n y: minY,\n minX: minX,\n minY: minY,\n maxX: maxX,\n maxY: maxY,\n width: width + lineWidth,\n height: height + lineWidth,\n };\n }\n return {\n x: 0,\n y: 0,\n minX: 0,\n minY: 0,\n maxX: 0,\n maxY: 0,\n width: 0,\n height: 0,\n };\n };\n ShapeBase.prototype.isFill = function () {\n var _a = this.attr(), fill = _a.fill, fillStyle = _a.fillStyle;\n return (fill || fillStyle || this.isClipShape()) && this.canFill;\n };\n ShapeBase.prototype.isStroke = function () {\n var _a = this.attr(), stroke = _a.stroke, strokeStyle = _a.strokeStyle;\n return (stroke || strokeStyle) && this.canStroke;\n };\n ShapeBase.prototype.draw = function (context, targetAttrs) {\n var el = this.get('el');\n if (this.get('destroyed')) {\n if (el) {\n el.parentNode.removeChild(el);\n }\n }\n else {\n if (!el) {\n Object(_util_dom__WEBPACK_IMPORTED_MODULE_3__[\"createDom\"])(this);\n }\n Object(_util_svg__WEBPACK_IMPORTED_MODULE_2__[\"setClip\"])(this, context);\n this.createPath(context, targetAttrs);\n this.shadow(context, targetAttrs);\n this.strokeAndFill(context, targetAttrs);\n this.transform(targetAttrs);\n }\n };\n /**\n * @protected\n * 绘制图形的路径\n * @param {Defs} context 上下文\n * @param {ShapeAttrs} targetAttrs 渲染的目标属性\n */\n ShapeBase.prototype.createPath = function (context, targetAttrs) { };\n // stroke and fill\n ShapeBase.prototype.strokeAndFill = function (context, targetAttrs) {\n var attrs = targetAttrs || this.attr();\n var fill = attrs.fill, fillStyle = attrs.fillStyle, stroke = attrs.stroke, strokeStyle = attrs.strokeStyle, fillOpacity = attrs.fillOpacity, strokeOpacity = attrs.strokeOpacity, lineWidth = attrs.lineWidth;\n var el = this.get('el');\n if (this.canFill) {\n // 初次渲染和更新渲染的逻辑有所不同: 初次渲染值为空时,需要设置为 none,否则就会是黑色,而更新渲染则不需要\n if (!targetAttrs) {\n this._setColor(context, 'fill', fill || fillStyle);\n }\n else if ('fill' in attrs) {\n this._setColor(context, 'fill', fill);\n }\n else if ('fillStyle' in attrs) {\n // compatible with fillStyle\n this._setColor(context, 'fill', fillStyle);\n }\n if (fillOpacity) {\n el.setAttribute(_constant__WEBPACK_IMPORTED_MODULE_5__[\"SVG_ATTR_MAP\"]['fillOpacity'], fillOpacity);\n }\n }\n if (this.canStroke && lineWidth > 0) {\n if (!targetAttrs) {\n this._setColor(context, 'stroke', stroke || strokeStyle);\n }\n else if ('stroke' in attrs) {\n this._setColor(context, 'stroke', stroke);\n }\n else if ('strokeStyle' in attrs) {\n // compatible with strokeStyle\n this._setColor(context, 'stroke', strokeStyle);\n }\n if (strokeOpacity) {\n el.setAttribute(_constant__WEBPACK_IMPORTED_MODULE_5__[\"SVG_ATTR_MAP\"]['strokeOpacity'], strokeOpacity);\n }\n if (lineWidth) {\n el.setAttribute(_constant__WEBPACK_IMPORTED_MODULE_5__[\"SVG_ATTR_MAP\"]['lineWidth'], lineWidth);\n }\n }\n };\n ShapeBase.prototype._setColor = function (context, attr, value) {\n var el = this.get('el');\n if (!value) {\n // need to set `none` to avoid default value\n el.setAttribute(_constant__WEBPACK_IMPORTED_MODULE_5__[\"SVG_ATTR_MAP\"][attr], 'none');\n return;\n }\n value = value.trim();\n if (/^[r,R,L,l]{1}[\\s]*\\(/.test(value)) {\n var id = context.find('gradient', value);\n if (!id) {\n id = context.addGradient(value);\n }\n el.setAttribute(_constant__WEBPACK_IMPORTED_MODULE_5__[\"SVG_ATTR_MAP\"][attr], \"url(#\" + id + \")\");\n }\n else if (/^[p,P]{1}[\\s]*\\(/.test(value)) {\n var id = context.find('pattern', value);\n if (!id) {\n id = context.addPattern(value);\n }\n el.setAttribute(_constant__WEBPACK_IMPORTED_MODULE_5__[\"SVG_ATTR_MAP\"][attr], \"url(#\" + id + \")\");\n }\n else {\n el.setAttribute(_constant__WEBPACK_IMPORTED_MODULE_5__[\"SVG_ATTR_MAP\"][attr], value);\n }\n };\n ShapeBase.prototype.shadow = function (context, targetAttrs) {\n var attrs = this.attr();\n var _a = targetAttrs || attrs, shadowOffsetX = _a.shadowOffsetX, shadowOffsetY = _a.shadowOffsetY, shadowBlur = _a.shadowBlur, shadowColor = _a.shadowColor;\n if (shadowOffsetX || shadowOffsetY || shadowBlur || shadowColor) {\n Object(_util_svg__WEBPACK_IMPORTED_MODULE_2__[\"setShadow\"])(this, context);\n }\n };\n ShapeBase.prototype.transform = function (targetAttrs) {\n var attrs = this.attr();\n var matrix = (targetAttrs || attrs).matrix;\n if (matrix) {\n Object(_util_svg__WEBPACK_IMPORTED_MODULE_2__[\"setTransform\"])(this);\n }\n };\n ShapeBase.prototype.isInShape = function (refX, refY) {\n return this.isPointInPath(refX, refY);\n };\n ShapeBase.prototype.isPointInPath = function (refX, refY) {\n var el = this.get('el');\n var canvas = this.get('canvas');\n var bbox = canvas.get('el').getBoundingClientRect();\n var clientX = refX + bbox.left;\n var clientY = refY + bbox.top;\n var element = document.elementFromPoint(clientX, clientY);\n if (element && element.isEqualNode(el)) {\n return true;\n }\n return false;\n };\n /**\n * 获取线拾取的宽度\n * @returns {number} 线的拾取宽度\n */\n ShapeBase.prototype.getHitLineWidth = function () {\n var _a = this.attrs, lineWidth = _a.lineWidth, lineAppendWidth = _a.lineAppendWidth;\n if (this.isStroke()) {\n return lineWidth + lineAppendWidth;\n }\n return 0;\n };\n return ShapeBase;\n}(_antv_g_base__WEBPACK_IMPORTED_MODULE_1__[\"AbstractShape\"]));\n/* harmony default export */ __webpack_exports__[\"default\"] = (ShapeBase);\n//# sourceMappingURL=base.js.map\n\n//# sourceURL=webpack:///./node_modules/@antv/g-svg/esm/shape/base.js?");
/***/ }),
/***/ "./node_modules/@antv/g-svg/esm/shape/circle.js":
/*!******************************************************!*\
!*** ./node_modules/@antv/g-svg/esm/shape/circle.js ***!
\******************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tslib */ \"./node_modules/tslib/tslib.es6.js\");\n/* harmony import */ var _antv_util__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @antv/util */ \"./node_modules/@antv/util/esm/index.js\");\n/* harmony import */ var _constant__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../constant */ \"./node_modules/@antv/g-svg/esm/constant.js\");\n/* harmony import */ var _base__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./base */ \"./node_modules/@antv/g-svg/esm/shape/base.js\");\n/**\n * @fileoverview circle\n * @author dengfuping_develop@163.com\n */\n\n\n\n\nvar Circle = /** @class */ (function (_super) {\n Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__extends\"])(Circle, _super);\n function Circle() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.type = 'circle';\n _this.canFill = true;\n _this.canStroke = true;\n return _this;\n }\n Circle.prototype.getDefaultAttrs = function () {\n var attrs = _super.prototype.getDefaultAttrs.call(this);\n return Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__assign\"])(Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__assign\"])({}, attrs), { x: 0, y: 0, r: 0 });\n };\n Circle.prototype.createPath = function (context, targetAttrs) {\n var attrs = this.attr();\n var el = this.get('el');\n Object(_antv_util__WEBPACK_IMPORTED_MODULE_1__[\"each\"])(targetAttrs || attrs, function (value, attr) {\n // 圆和椭圆的点坐标属性不是 x, y,而是 cx, cy\n if (attr === 'x' || attr === 'y') {\n el.setAttribute(\"c\" + attr, value);\n }\n else if (_constant__WEBPACK_IMPORTED_MODULE_2__[\"SVG_ATTR_MAP\"][attr]) {\n el.setAttribute(_constant__WEBPACK_IMPORTED_MODULE_2__[\"SVG_ATTR_MAP\"][attr], value);\n }\n });\n };\n return Circle;\n}(_base__WEBPACK_IMPORTED_MODULE_3__[\"default\"]));\n/* harmony default export */ __webpack_exports__[\"default\"] = (Circle);\n//# sourceMappingURL=circle.js.map\n\n//# sourceURL=webpack:///./node_modules/@antv/g-svg/esm/shape/circle.js?");
/***/ }),
/***/ "./node_modules/@antv/g-svg/esm/shape/dom.js":
/*!***************************************************!*\
!*** ./node_modules/@antv/g-svg/esm/shape/dom.js ***!
\***************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tslib */ \"./node_modules/tslib/tslib.es6.js\");\n/* harmony import */ var _antv_util__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @antv/util */ \"./node_modules/@antv/util/esm/index.js\");\n/* harmony import */ var _constant__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../constant */ \"./node_modules/@antv/g-svg/esm/constant.js\");\n/* harmony import */ var _base__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./base */ \"./node_modules/@antv/g-svg/esm/shape/base.js\");\n/**\n * @fileoverview dom\n * @author dengfuping_develop@163.com\n */\n\n\n\n\nvar Dom = /** @class */ (function (_super) {\n Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__extends\"])(Dom, _super);\n function Dom() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.type = 'dom';\n _this.canFill = false;\n _this.canStroke = false;\n return _this;\n }\n Dom.prototype.createPath = function (context, targetAttrs) {\n var attrs = this.attr();\n var el = this.get('el');\n Object(_antv_util__WEBPACK_IMPORTED_MODULE_1__[\"each\"])(targetAttrs || attrs, function (value, attr) {\n if (_constant__WEBPACK_IMPORTED_MODULE_2__[\"SVG_ATTR_MAP\"][attr]) {\n el.setAttribute(_constant__WEBPACK_IMPORTED_MODULE_2__[\"SVG_ATTR_MAP\"][attr], value);\n }\n });\n if (typeof attrs['html'] === 'function') {\n var element = attrs['html'].call(this, attrs);\n if (element instanceof Element || element instanceof HTMLDocument) {\n var children = el.childNodes;\n for (var i = children.length - 1; i >= 0; i--) {\n el.removeChild(children[i]);\n }\n el.appendChild(element); // append to el if it's an element\n }\n else {\n el.innerHTML = element; // set innerHTML\n }\n }\n else {\n el.innerHTML = attrs['html']; // set innerHTML\n }\n };\n return Dom;\n}(_base__WEBPACK_IMPORTED_MODULE_3__[\"default\"]));\n/* harmony default export */ __webpack_exports__[\"default\"] = (Dom);\n//# sourceMappingURL=dom.js.map\n\n//# sourceURL=webpack:///./node_modules/@antv/g-svg/esm/shape/dom.js?");
/***/ }),
/***/ "./node_modules/@antv/g-svg/esm/shape/ellipse.js":
/*!*******************************************************!*\
!*** ./node_modules/@antv/g-svg/esm/shape/ellipse.js ***!
\*******************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tslib */ \"./node_modules/tslib/tslib.es6.js\");\n/* harmony import */ var _antv_util__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @antv/util */ \"./node_modules/@antv/util/esm/index.js\");\n/* harmony import */ var _constant__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../constant */ \"./node_modules/@antv/g-svg/esm/constant.js\");\n/* harmony import */ var _base__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./base */ \"./node_modules/@antv/g-svg/esm/shape/base.js\");\n/**\n * @fileoverview ellipse\n * @author dengfuping_develop@163.com\n */\n\n\n\n\nvar Ellipse = /** @class */ (function (_super) {\n Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__extends\"])(Ellipse, _super);\n function Ellipse() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.type = 'ellipse';\n _this.canFill = true;\n _this.canStroke = true;\n return _this;\n }\n Ellipse.prototype.getDefaultAttrs = function () {\n var attrs = _super.prototype.getDefaultAttrs.call(this);\n return Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__assign\"])(Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__assign\"])({}, attrs), { x: 0, y: 0, rx: 0, ry: 0 });\n };\n Ellipse.prototype.createPath = function (context, targetAttrs) {\n var attrs = this.attr();\n var el = this.get('el');\n Object(_antv_util__WEBPACK_IMPORTED_MODULE_1__[\"each\"])(targetAttrs || attrs, function (value, attr) {\n // 圆和椭圆的点坐标属性不是 x, y,而是 cx, cy\n if (attr === 'x' || attr === 'y') {\n el.setAttribute(\"c\" + attr, value);\n }\n else if (_constant__WEBPACK_IMPORTED_MODULE_2__[\"SVG_ATTR_MAP\"][attr]) {\n el.setAttribute(_constant__WEBPACK_IMPORTED_MODULE_2__[\"SVG_ATTR_MAP\"][attr], value);\n }\n });\n };\n return Ellipse;\n}(_base__WEBPACK_IMPORTED_MODULE_3__[\"default\"]));\n/* harmony default export */ __webpack_exports__[\"default\"] = (Ellipse);\n//# sourceMappingURL=ellipse.js.map\n\n//# sourceURL=webpack:///./node_modules/@antv/g-svg/esm/shape/ellipse.js?");
/***/ }),
/***/ "./node_modules/@antv/g-svg/esm/shape/image.js":
/*!*****************************************************!*\
!*** ./node_modules/@antv/g-svg/esm/shape/image.js ***!
\*****************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tslib */ \"./node_modules/tslib/tslib.es6.js\");\n/* harmony import */ var _antv_util__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @antv/util */ \"./node_modules/@antv/util/esm/index.js\");\n/* harmony import */ var _constant__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../constant */ \"./node_modules/@antv/g-svg/esm/constant.js\");\n/* harmony import */ var _base__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./base */ \"./node_modules/@antv/g-svg/esm/shape/base.js\");\n/**\n * @fileoverview image\n * @author dengfuping_develop@163.com\n */\n\n\n\n\nvar Image = /** @class */ (function (_super) {\n Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__extends\"])(Image, _super);\n function Image() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.type = 'image';\n _this.canFill = false;\n _this.canStroke = false;\n return _this;\n }\n Image.prototype.getDefaultAttrs = function () {\n var attrs = _super.prototype.getDefaultAttrs.call(this);\n return Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__assign\"])(Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__assign\"])({}, attrs), { x: 0, y: 0, width: 0, height: 0 });\n };\n Image.prototype.createPath = function (context, targetAttrs) {\n var _this = this;\n var attrs = this.attr();\n var el = this.get('el');\n Object(_antv_util__WEBPACK_IMPORTED_MODULE_1__[\"each\"])(targetAttrs || attrs, function (value, attr) {\n if (attr === 'img') {\n _this._setImage(attrs.img);\n }\n else if (_constant__WEBPACK_IMPORTED_MODULE_2__[\"SVG_ATTR_MAP\"][attr]) {\n el.setAttribute(_constant__WEBPACK_IMPORTED_MODULE_2__[\"SVG_ATTR_MAP\"][attr], value);\n }\n });\n };\n Image.prototype.setAttr = function (name, value) {\n this.attrs[name] = value;\n if (name === 'img') {\n this._setImage(value);\n }\n };\n Image.prototype._setImage = function (img) {\n var attrs = this.attr();\n var el = this.get('el');\n if (Object(_antv_util__WEBPACK_IMPORTED_MODULE_1__[\"isString\"])(img)) {\n el.setAttribute('href', img);\n }\n else if (img instanceof window.Image) {\n if (!attrs.width) {\n el.setAttribute('width', img.width);\n this.attr('width', img.width);\n }\n if (!attrs.height) {\n el.setAttribute('height', img.height);\n this.attr('height', img.height);\n }\n el.setAttribute('href', img.src);\n }\n else if (img instanceof HTMLElement && Object(_antv_util__WEBPACK_IMPORTED_MODULE_1__[\"isString\"])(img.nodeName) && img.nodeName.toUpperCase() === 'CANVAS') {\n // @ts-ignore\n el.setAttribute('href', img.toDataURL());\n }\n else if (img instanceof ImageData) {\n var canvas = document.createElement('canvas');\n canvas.setAttribute('width', \"\" + img.width);\n canvas.setAttribute('height', \"\" + img.height);\n canvas.getContext('2d').putImageData(img, 0, 0);\n if (!attrs.width) {\n el.setAttribute('width', \"\" + img.width);\n this.attr('width', img.width);\n }\n if (!attrs.height) {\n el.setAttribute('height', \"\" + img.height);\n this.attr('height', img.height);\n }\n el.setAttribute('href', canvas.toDataURL());\n }\n };\n return Image;\n}(_base__WEBPACK_IMPORTED_MODULE_3__[\"default\"]));\n/* harmony default export */ __webpack_exports__[\"default\"] = (Image);\n//# sourceMappingURL=image.js.map\n\n//# sourceURL=webpack:///./node_modules/@antv/g-svg/esm/shape/image.js?");
/***/ }),
/***/ "./node_modules/@antv/g-svg/esm/shape/index.js":
/*!*****************************************************!*\
!*** ./node_modules/@antv/g-svg/esm/shape/index.js ***!
\*****************************************************/
/*! exports provided: Base, Circle, Dom, Ellipse, Image, Line, Marker, Path, Polygon, Polyline, Rect, Text */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _base__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./base */ \"./node_modules/@antv/g-svg/esm/shape/base.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Base\", function() { return _base__WEBPACK_IMPORTED_MODULE_0__[\"default\"]; });\n\n/* harmony import */ var _circle__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./circle */ \"./node_modules/@antv/g-svg/esm/shape/circle.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Circle\", function() { return _circle__WEBPACK_IMPORTED_MODULE_1__[\"default\"]; });\n\n/* harmony import */ var _dom__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./dom */ \"./node_modules/@antv/g-svg/esm/shape/dom.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Dom\", function() { return _dom__WEBPACK_IMPORTED_MODULE_2__[\"default\"]; });\n\n/* harmony import */ var _ellipse__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./ellipse */ \"./node_modules/@antv/g-svg/esm/shape/ellipse.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Ellipse\", function() { return _ellipse__WEBPACK_IMPORTED_MODULE_3__[\"default\"]; });\n\n/* harmony import */ var _image__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./image */ \"./node_modules/@antv/g-svg/esm/shape/image.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Image\", function() { return _image__WEBPACK_IMPORTED_MODULE_4__[\"default\"]; });\n\n/* harmony import */ var _line__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./line */ \"./node_modules/@antv/g-svg/esm/shape/line.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Line\", function() { return _line__WEBPACK_IMPORTED_MODULE_5__[\"default\"]; });\n\n/* harmony import */ var _marker__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./marker */ \"./node_modules/@antv/g-svg/esm/shape/marker/index.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Marker\", function() { return _marker__WEBPACK_IMPORTED_MODULE_6__[\"default\"]; });\n\n/* harmony import */ var _path__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./path */ \"./node_modules/@antv/g-svg/esm/shape/path.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Path\", function() { return _path__WEBPACK_IMPORTED_MODULE_7__[\"default\"]; });\n\n/* harmony import */ var _polygon__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./polygon */ \"./node_modules/@antv/g-svg/esm/shape/polygon.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Polygon\", function() { return _polygon__WEBPACK_IMPORTED_MODULE_8__[\"default\"]; });\n\n/* harmony import */ var _polyline__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./polyline */ \"./node_modules/@antv/g-svg/esm/shape/polyline.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Polyline\", function() { return _polyline__WEBPACK_IMPORTED_MODULE_9__[\"default\"]; });\n\n/* harmony import */ var _rect__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./rect */ \"./node_modules/@antv/g-svg/esm/shape/rect.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Rect\", function() { return _rect__WEBPACK_IMPORTED_MODULE_10__[\"default\"]; });\n\n/* harmony import */ var _text__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./text */ \"./node_modules/@antv/g-svg/esm/shape/text.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Text\", function() { return _text__WEBPACK_IMPORTED_MODULE_11__[\"default\"]; });\n\n\n\n\n\n\n\n\n\n\n\n\n\n//# sourceMappingURL=index.js.map\n\n//# sourceURL=webpack:///./node_modules/@antv/g-svg/esm/shape/index.js?");
/***/ }),
/***/ "./node_modules/@antv/g-svg/esm/shape/line.js":
/*!****************************************************!*\
!*** ./node_modules/@antv/g-svg/esm/shape/line.js ***!
\****************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tslib */ \"./node_modules/tslib/tslib.es6.js\");\n/* harmony import */ var _antv_g_math__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @antv/g-math */ \"./node_modules/@antv/g-math/esm/index.js\");\n/* harmony import */ var _antv_util__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @antv/util */ \"./node_modules/@antv/util/esm/index.js\");\n/* harmony import */ var _constant__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../constant */ \"./node_modules/@antv/g-svg/esm/constant.js\");\n/* harmony import */ var _base__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./base */ \"./node_modules/@antv/g-svg/esm/shape/base.js\");\n\n/**\n * @fileoverview line\n * @author dengfuping_develop@163.com\n */\n\n\n\n\nvar Line = /** @class */ (function (_super) {\n Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__extends\"])(Line, _super);\n function Line() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.type = 'line';\n _this.canFill = false;\n _this.canStroke = true;\n return _this;\n }\n Line.prototype.getDefaultAttrs = function () {\n var attrs = _super.prototype.getDefaultAttrs.call(this);\n return Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__assign\"])(Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__assign\"])({}, attrs), { x1: 0, y1: 0, x2: 0, y2: 0, startArrow: false, endArrow: false });\n };\n Line.prototype.createPath = function (context, targetAttrs) {\n var attrs = this.attr();\n var el = this.get('el');\n Object(_antv_util__WEBPACK_IMPORTED_MODULE_2__[\"each\"])(targetAttrs || attrs, function (value, attr) {\n if (attr === 'startArrow' || attr === 'endArrow') {\n if (value) {\n var id = Object(_antv_util__WEBPACK_IMPORTED_MODULE_2__[\"isObject\"])(value)\n ? context.addArrow(attrs, _constant__WEBPACK_IMPORTED_MODULE_3__[\"SVG_ATTR_MAP\"][attr])\n : context.getDefaultArrow(attrs, _constant__WEBPACK_IMPORTED_MODULE_3__[\"SVG_ATTR_MAP\"][attr]);\n el.setAttribute(_constant__WEBPACK_IMPORTED_MODULE_3__[\"SVG_ATTR_MAP\"][attr], \"url(#\" + id + \")\");\n }\n else {\n el.removeAttribute(_constant__WEBPACK_IMPORTED_MODULE_3__[\"SVG_ATTR_MAP\"][attr]);\n }\n }\n else if (_constant__WEBPACK_IMPORTED_MODULE_3__[\"SVG_ATTR_MAP\"][attr]) {\n el.setAttribute(_constant__WEBPACK_IMPORTED_MODULE_3__[\"SVG_ATTR_MAP\"][attr], value);\n }\n });\n };\n /**\n * Use math calculation to get length of line\n * @return {number} length\n */\n Line.prototype.getTotalLength = function () {\n var _a = this.attr(), x1 = _a.x1, y1 = _a.y1, x2 = _a.x2, y2 = _a.y2;\n return _antv_g_math__WEBPACK_IMPORTED_MODULE_1__[\"Line\"].length(x1, y1, x2, y2);\n };\n /**\n * Use math calculation to get point according to ratio as same sa Canvas version\n * @param {number} ratio\n * @return {Point} point\n */\n Line.prototype.getPoint = function (ratio) {\n var _a = this.attr(), x1 = _a.x1, y1 = _a.y1, x2 = _a.x2, y2 = _a.y2;\n return _antv_g_math__WEBPACK_IMPORTED_MODULE_1__[\"Line\"].pointAt(x1, y1, x2, y2, ratio);\n };\n return Line;\n}(_base__WEBPACK_IMPORTED_MODULE_4__[\"default\"]));\n/* harmony default export */ __webpack_exports__[\"default\"] = (Line);\n//# sourceMappingURL=line.js.map\n\n//# sourceURL=webpack:///./node_modules/@antv/g-svg/esm/shape/line.js?");
/***/ }),
/***/ "./node_modules/@antv/g-svg/esm/shape/marker/index.js":
/*!************************************************************!*\
!*** ./node_modules/@antv/g-svg/esm/shape/marker/index.js ***!
\************************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tslib */ \"./node_modules/tslib/tslib.es6.js\");\n/* harmony import */ var _antv_util__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @antv/util */ \"./node_modules/@antv/util/esm/index.js\");\n/* harmony import */ var _base__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../base */ \"./node_modules/@antv/g-svg/esm/shape/base.js\");\n/* harmony import */ var _symbols__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./symbols */ \"./node_modules/@antv/g-svg/esm/shape/marker/symbols.js\");\n/**\n * @fileoverview marker\n * @author dengfuping_develop@163.com\n */\n\n\n\n\nvar Marker = /** @class */ (function (_super) {\n Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__extends\"])(Marker, _super);\n function Marker() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.type = 'marker';\n _this.canFill = true;\n _this.canStroke = true;\n return _this;\n }\n Marker.prototype.createPath = function (context) {\n var el = this.get('el');\n el.setAttribute('d', this._assembleMarker());\n };\n Marker.prototype._assembleMarker = function () {\n var d = this._getPath();\n if (Object(_antv_util__WEBPACK_IMPORTED_MODULE_1__[\"isArray\"])(d)) {\n return d\n .map(function (path) {\n return path.join(' ');\n })\n .join('');\n }\n return d;\n };\n Marker.prototype._getPath = function () {\n var attrs = this.attr();\n var x = attrs.x, y = attrs.y;\n // 兼容 r 和 radius 两种写法,推荐使用 r\n var r = attrs.r || attrs.radius;\n var symbol = attrs.symbol || 'circle';\n var method;\n if (Object(_antv_util__WEBPACK_IMPORTED_MODULE_1__[\"isFunction\"])(symbol)) {\n method = symbol;\n }\n else {\n method = _symbols__WEBPACK_IMPORTED_MODULE_3__[\"default\"].get(symbol);\n }\n if (!method) {\n console.warn(method + \" symbol is not exist.\");\n return null;\n }\n return method(x, y, r);\n };\n // 作为其静态属性\n Marker.symbolsFactory = _symbols__WEBPACK_IMPORTED_MODULE_3__[\"default\"];\n return Marker;\n}(_base__WEBPACK_IMPORTED_MODULE_2__[\"default\"]));\n/* harmony default export */ __webpack_exports__[\"default\"] = (Marker);\n//# sourceMappingURL=index.js.map\n\n//# sourceURL=webpack:///./node_modules/@antv/g-svg/esm/shape/marker/index.js?");
/***/ }),
/***/ "./node_modules/@antv/g-svg/esm/shape/marker/symbols.js":
/*!**************************************************************!*\
!*** ./node_modules/@antv/g-svg/esm/shape/marker/symbols.js ***!
\**************************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\nvar Symbols = {\n // 圆\n circle: function (x, y, r) {\n return [\n ['M', x, y],\n ['m', -r, 0],\n ['a', r, r, 0, 1, 0, r * 2, 0],\n ['a', r, r, 0, 1, 0, -r * 2, 0],\n ];\n },\n // 正方形\n square: function (x, y, r) {\n return [['M', x - r, y - r], ['L', x + r, y - r], ['L', x + r, y + r], ['L', x - r, y + r], ['Z']];\n },\n // 菱形\n diamond: function (x, y, r) {\n return [['M', x - r, y], ['L', x, y - r], ['L', x + r, y], ['L', x, y + r], ['Z']];\n },\n // 三角形\n triangle: function (x, y, r) {\n var diffY = r * Math.sin((1 / 3) * Math.PI);\n return [['M', x - r, y + diffY], ['L', x, y - diffY], ['L', x + r, y + diffY], ['z']];\n },\n // 倒三角形\n triangleDown: function (x, y, r) {\n var diffY = r * Math.sin((1 / 3) * Math.PI);\n return [['M', x - r, y - diffY], ['L', x + r, y - diffY], ['L', x, y + diffY], ['Z']];\n },\n};\n/* harmony default export */ __webpack_exports__[\"default\"] = ({\n get: function (type) {\n return Symbols[type];\n },\n register: function (type, func) {\n Symbols[type] = func;\n },\n remove: function (type) {\n delete Symbols[type];\n },\n getAll: function () {\n return Symbols;\n },\n});\n//# sourceMappingURL=symbols.js.map\n\n//# sourceURL=webpack:///./node_modules/@antv/g-svg/esm/shape/marker/symbols.js?");
/***/ }),
/***/ "./node_modules/@antv/g-svg/esm/shape/path.js":
/*!****************************************************!*\
!*** ./node_modules/@antv/g-svg/esm/shape/path.js ***!
\****************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tslib */ \"./node_modules/tslib/tslib.es6.js\");\n/* harmony import */ var _antv_util__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @antv/util */ \"./node_modules/@antv/util/esm/index.js\");\n/* harmony import */ var _constant__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../constant */ \"./node_modules/@antv/g-svg/esm/constant.js\");\n/* harmony import */ var _base__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./base */ \"./node_modules/@antv/g-svg/esm/shape/base.js\");\n\n\n\n\nvar Path = /** @class */ (function (_super) {\n Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__extends\"])(Path, _super);\n function Path() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.type = 'path';\n _this.canFill = true;\n _this.canStroke = true;\n return _this;\n }\n Path.prototype.getDefaultAttrs = function () {\n var attrs = _super.prototype.getDefaultAttrs.call(this);\n return Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__assign\"])(Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__assign\"])({}, attrs), { startArrow: false, endArrow: false });\n };\n Path.prototype.createPath = function (context, targetAttrs) {\n var _this = this;\n var attrs = this.attr();\n var el = this.get('el');\n Object(_antv_util__WEBPACK_IMPORTED_MODULE_1__[\"each\"])(targetAttrs || attrs, function (value, attr) {\n if (attr === 'path' && Object(_antv_util__WEBPACK_IMPORTED_MODULE_1__[\"isArray\"])(value)) {\n el.setAttribute('d', _this._formatPath(value));\n }\n else if (attr === 'startArrow' || attr === 'endArrow') {\n if (value) {\n var id = Object(_antv_util__WEBPACK_IMPORTED_MODULE_1__[\"isObject\"])(value)\n ? context.addArrow(attrs, _constant__WEBPACK_IMPORTED_MODULE_2__[\"SVG_ATTR_MAP\"][attr])\n : context.getDefaultArrow(attrs, _constant__WEBPACK_IMPORTED_MODULE_2__[\"SVG_ATTR_MAP\"][attr]);\n el.setAttribute(_constant__WEBPACK_IMPORTED_MODULE_2__[\"SVG_ATTR_MAP\"][attr], \"url(#\" + id + \")\");\n }\n else {\n el.removeAttribute(_constant__WEBPACK_IMPORTED_MODULE_2__[\"SVG_ATTR_MAP\"][attr]);\n }\n }\n else if (_constant__WEBPACK_IMPORTED_MODULE_2__[\"SVG_ATTR_MAP\"][attr]) {\n el.setAttribute(_constant__WEBPACK_IMPORTED_MODULE_2__[\"SVG_ATTR_MAP\"][attr], value);\n }\n });\n };\n Path.prototype._formatPath = function (value) {\n var newValue = value\n .map(function (path) {\n return path.join(' ');\n })\n .join('');\n if (~newValue.indexOf('NaN')) {\n return '';\n }\n return newValue;\n };\n /**\n * Get total length of path\n * 尽管通过浏览器的 SVGPathElement.getTotalLength() 接口获取的 path 长度,\n * 与 Canvas 版本通过数学计算的方式得到的长度有一些细微差异,但最大误差在个位数像素,精度上可以能接受\n * @return {number} length\n */\n Path.prototype.getTotalLength = function () {\n var el = this.get('el');\n return el ? el.getTotalLength() : null;\n };\n /**\n * Get point according to ratio\n * @param {number} ratio\n * @return {Point} point\n */\n Path.prototype.getPoint = function (ratio) {\n var el = this.get('el');\n var totalLength = this.getTotalLength();\n // @see https://github.com/antvis/g/issues/634\n if (totalLength === 0) {\n return null;\n }\n var point = el ? el.getPointAtLength(ratio * totalLength) : null;\n return point\n ? {\n x: point.x,\n y: point.y,\n }\n : null;\n };\n return Path;\n}(_base__WEBPACK_IMPORTED_MODULE_3__[\"default\"]));\n/* harmony default export */ __webpack_exports__[\"default\"] = (Path);\n//# sourceMappingURL=path.js.map\n\n//# sourceURL=webpack:///./node_modules/@antv/g-svg/esm/shape/path.js?");
/***/ }),
/***/ "./node_modules/@antv/g-svg/esm/shape/polygon.js":
/*!*******************************************************!*\
!*** ./node_modules/@antv/g-svg/esm/shape/polygon.js ***!
\*******************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tslib */ \"./node_modules/tslib/tslib.es6.js\");\n/* harmony import */ var _antv_util__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @antv/util */ \"./node_modules/@antv/util/esm/index.js\");\n/* harmony import */ var _constant__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../constant */ \"./node_modules/@antv/g-svg/esm/constant.js\");\n/* harmony import */ var _base__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./base */ \"./node_modules/@antv/g-svg/esm/shape/base.js\");\n\n/**\n * @fileoverview polygon\n * @author dengfuping_develop@163.com\n */\n\n\n\nvar Polygon = /** @class */ (function (_super) {\n Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__extends\"])(Polygon, _super);\n function Polygon() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.type = 'polygon';\n _this.canFill = true;\n _this.canStroke = true;\n return _this;\n }\n Polygon.prototype.createPath = function (context, targetAttrs) {\n var attrs = this.attr();\n var el = this.get('el');\n Object(_antv_util__WEBPACK_IMPORTED_MODULE_1__[\"each\"])(targetAttrs || attrs, function (value, attr) {\n if (attr === 'points' && Object(_antv_util__WEBPACK_IMPORTED_MODULE_1__[\"isArray\"])(value) && value.length >= 2) {\n el.setAttribute('points', value.map(function (point) { return point[0] + \",\" + point[1]; }).join(' '));\n }\n else if (_constant__WEBPACK_IMPORTED_MODULE_2__[\"SVG_ATTR_MAP\"][attr]) {\n el.setAttribute(_constant__WEBPACK_IMPORTED_MODULE_2__[\"SVG_ATTR_MAP\"][attr], value);\n }\n });\n };\n return Polygon;\n}(_base__WEBPACK_IMPORTED_MODULE_3__[\"default\"]));\n/* harmony default export */ __webpack_exports__[\"default\"] = (Polygon);\n//# sourceMappingURL=polygon.js.map\n\n//# sourceURL=webpack:///./node_modules/@antv/g-svg/esm/shape/polygon.js?");
/***/ }),
/***/ "./node_modules/@antv/g-svg/esm/shape/polyline.js":
/*!********************************************************!*\
!*** ./node_modules/@antv/g-svg/esm/shape/polyline.js ***!
\********************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tslib */ \"./node_modules/tslib/tslib.es6.js\");\n/* harmony import */ var _antv_g_math__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @antv/g-math */ \"./node_modules/@antv/g-math/esm/index.js\");\n/* harmony import */ var _antv_util__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @antv/util */ \"./node_modules/@antv/util/esm/index.js\");\n/* harmony import */ var _constant__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../constant */ \"./node_modules/@antv/g-svg/esm/constant.js\");\n/* harmony import */ var _base__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./base */ \"./node_modules/@antv/g-svg/esm/shape/base.js\");\n\n\n\n\n\n\nvar Polyline = /** @class */ (function (_super) {\n Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__extends\"])(Polyline, _super);\n function Polyline() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.type = 'polyline';\n _this.canFill = true;\n _this.canStroke = true;\n return _this;\n }\n Polyline.prototype.getDefaultAttrs = function () {\n var attrs = _super.prototype.getDefaultAttrs.call(this);\n return Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__assign\"])(Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__assign\"])({}, attrs), { startArrow: false, endArrow: false });\n };\n // 更新属性时,检测是否更改了 points\n Polyline.prototype.onAttrChange = function (name, value, originValue) {\n _super.prototype.onAttrChange.call(this, name, value, originValue);\n if (['points'].indexOf(name) !== -1) {\n this._resetCache();\n }\n };\n Polyline.prototype._resetCache = function () {\n this.set('totalLength', null);\n this.set('tCache', null);\n };\n Polyline.prototype.createPath = function (context, targetAttrs) {\n var attrs = this.attr();\n var el = this.get('el');\n Object(_antv_util__WEBPACK_IMPORTED_MODULE_2__[\"each\"])(targetAttrs || attrs, function (value, attr) {\n if (attr === 'points' && Object(_antv_util__WEBPACK_IMPORTED_MODULE_2__[\"isArray\"])(value) && value.length >= 2) {\n el.setAttribute('points', value.map(function (point) { return point[0] + \",\" + point[1]; }).join(' '));\n }\n else if (_constant__WEBPACK_IMPORTED_MODULE_3__[\"SVG_ATTR_MAP\"][attr]) {\n el.setAttribute(_constant__WEBPACK_IMPORTED_MODULE_3__[\"SVG_ATTR_MAP\"][attr], value);\n }\n });\n };\n /**\n * Get length of polyline\n * @return {number} length\n */\n Polyline.prototype.getTotalLength = function () {\n var points = this.attr().points;\n // get totalLength from cache\n var totalLength = this.get('totalLength');\n if (!Object(_antv_util__WEBPACK_IMPORTED_MODULE_2__[\"isNil\"])(totalLength)) {\n return totalLength;\n }\n this.set('totalLength', _antv_g_math__WEBPACK_IMPORTED_MODULE_1__[\"Polyline\"].length(points));\n return this.get('totalLength');\n };\n /**\n * Get point according to ratio\n * @param {number} ratio\n * @return {Point} point\n */\n Polyline.prototype.getPoint = function (ratio) {\n var points = this.attr().points;\n // get tCache from cache\n var tCache = this.get('tCache');\n if (!tCache) {\n this._setTcache();\n tCache = this.get('tCache');\n }\n var subt;\n var index;\n Object(_antv_util__WEBPACK_IMPORTED_MODULE_2__[\"each\"])(tCache, function (v, i) {\n if (ratio >= v[0] && ratio <= v[1]) {\n subt = (ratio - v[0]) / (v[1] - v[0]);\n index = i;\n }\n });\n return _antv_g_math__WEBPACK_IMPORTED_MODULE_1__[\"Line\"].pointAt(points[index][0], points[index][1], points[index + 1][0], points[index + 1][1], subt);\n };\n Polyline.prototype._setTcache = function () {\n var points = this.attr().points;\n if (!points || points.length === 0) {\n return;\n }\n var totalLength = this.getTotalLength();\n if (totalLength <= 0) {\n return;\n }\n var tempLength = 0;\n var tCache = [];\n var segmentT;\n var segmentL;\n Object(_antv_util__WEBPACK_IMPORTED_MODULE_2__[\"each\"])(points, function (p, i) {\n if (points[i + 1]) {\n segmentT = [];\n segmentT[0] = tempLength / totalLength;\n segmentL = _antv_g_math__WEBPACK_IMPORTED_MODULE_1__[\"Line\"].length(p[0], p[1], points[i + 1][0], points[i + 1][1]);\n tempLength += segmentL;\n segmentT[1] = tempLength / totalLength;\n tCache.push(segmentT);\n }\n });\n this.set('tCache', tCache);\n };\n /**\n * Get start tangent vector\n * @return {Array}\n */\n Polyline.prototype.getStartTangent = function () {\n var points = this.attr().points;\n var result = [];\n result.push([points[1][0], points[1][1]]);\n result.push([points[0][0], points[0][1]]);\n return result;\n };\n /**\n * Get end tangent vector\n * @return {Array}\n */\n Polyline.prototype.getEndTangent = function () {\n var points = this.attr().points;\n var l = points.length - 1;\n var result = [];\n result.push([points[l - 1][0], points[l - 1][1]]);\n result.push([points[l][0], points[l][1]]);\n return result;\n };\n return Polyline;\n}(_base__WEBPACK_IMPORTED_MODULE_4__[\"default\"]));\n/* harmony default export */ __webpack_exports__[\"default\"] = (Polyline);\n//# sourceMappingURL=polyline.js.map\n\n//# sourceURL=webpack:///./node_modules/@antv/g-svg/esm/shape/polyline.js?");
/***/ }),
/***/ "./node_modules/@antv/g-svg/esm/shape/rect.js":
/*!****************************************************!*\
!*** ./node_modules/@antv/g-svg/esm/shape/rect.js ***!
\****************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tslib */ \"./node_modules/tslib/tslib.es6.js\");\n/* harmony import */ var _antv_util__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @antv/util */ \"./node_modules/@antv/util/esm/index.js\");\n/* harmony import */ var _base__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./base */ \"./node_modules/@antv/g-svg/esm/shape/base.js\");\n/* harmony import */ var _constant__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../constant */ \"./node_modules/@antv/g-svg/esm/constant.js\");\n/* harmony import */ var _util_format__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../util/format */ \"./node_modules/@antv/g-svg/esm/util/format.js\");\n/**\n * @fileoverview rect\n * @author dengfuping_develop@163.com\n */\n\n\n\n\n\nvar Rect = /** @class */ (function (_super) {\n Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__extends\"])(Rect, _super);\n function Rect() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.type = 'rect';\n _this.canFill = true;\n _this.canStroke = true;\n return _this;\n }\n Rect.prototype.getDefaultAttrs = function () {\n var attrs = _super.prototype.getDefaultAttrs.call(this);\n return Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__assign\"])(Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__assign\"])({}, attrs), { x: 0, y: 0, width: 0, height: 0, radius: 0 });\n };\n Rect.prototype.createPath = function (context, targetAttrs) {\n var _this = this;\n var attrs = this.attr();\n var el = this.get('el');\n // 加上状态量,用来标记 path 是否已组装\n var completed = false;\n // 和组装 path 相关的绘图属性\n var pathRelatedAttrs = ['x', 'y', 'width', 'height', 'radius'];\n Object(_antv_util__WEBPACK_IMPORTED_MODULE_1__[\"each\"])(targetAttrs || attrs, function (value, attr) {\n if (pathRelatedAttrs.indexOf(attr) !== -1 && !completed) {\n el.setAttribute('d', _this._assembleRect(attrs));\n completed = true;\n }\n else if (pathRelatedAttrs.indexOf(attr) === -1 && _constant__WEBPACK_IMPORTED_MODULE_3__[\"SVG_ATTR_MAP\"][attr]) {\n el.setAttribute(_constant__WEBPACK_IMPORTED_MODULE_3__[\"SVG_ATTR_MAP\"][attr], value);\n }\n });\n };\n Rect.prototype._assembleRect = function (attrs) {\n var x = attrs.x;\n var y = attrs.y;\n var w = attrs.width;\n var h = attrs.height;\n var radius = attrs.radius;\n if (!radius) {\n return \"M \" + x + \",\" + y + \" l \" + w + \",0 l 0,\" + h + \" l\" + -w + \" 0 z\";\n }\n var r = Object(_util_format__WEBPACK_IMPORTED_MODULE_4__[\"parseRadius\"])(radius);\n if (Object(_antv_util__WEBPACK_IMPORTED_MODULE_1__[\"isArray\"])(radius)) {\n if (radius.length === 1) {\n r.r1 = r.r2 = r.r3 = r.r4 = radius[0];\n }\n else if (radius.length === 2) {\n r.r1 = r.r3 = radius[0];\n r.r2 = r.r4 = radius[1];\n }\n else if (radius.length === 3) {\n r.r1 = radius[0];\n r.r2 = r.r4 = radius[1];\n r.r3 = radius[2];\n }\n else {\n r.r1 = radius[0];\n r.r2 = radius[1];\n r.r3 = radius[2];\n r.r4 = radius[3];\n }\n }\n else {\n r.r1 = r.r2 = r.r3 = r.r4 = radius;\n }\n var d = [\n [\"M \" + (x + r.r1) + \",\" + y],\n [\"l \" + (w - r.r1 - r.r2) + \",0\"],\n [\"a \" + r.r2 + \",\" + r.r2 + \",0,0,1,\" + r.r2 + \",\" + r.r2],\n [\"l 0,\" + (h - r.r2 - r.r3)],\n [\"a \" + r.r3 + \",\" + r.r3 + \",0,0,1,\" + -r.r3 + \",\" + r.r3],\n [\"l \" + (r.r3 + r.r4 - w) + \",0\"],\n [\"a \" + r.r4 + \",\" + r.r4 + \",0,0,1,\" + -r.r4 + \",\" + -r.r4],\n [\"l 0,\" + (r.r4 + r.r1 - h)],\n [\"a \" + r.r1 + \",\" + r.r1 + \",0,0,1,\" + r.r1 + \",\" + -r.r1],\n ['z'],\n ];\n return d.join(' ');\n };\n return Rect;\n}(_base__WEBPACK_IMPORTED_MODULE_2__[\"default\"]));\n/* harmony default export */ __webpack_exports__[\"default\"] = (Rect);\n//# sourceMappingURL=rect.js.map\n\n//# sourceURL=webpack:///./node_modules/@antv/g-svg/esm/shape/rect.js?");
/***/ }),
/***/ "./node_modules/@antv/g-svg/esm/shape/text.js":
/*!****************************************************!*\
!*** ./node_modules/@antv/g-svg/esm/shape/text.js ***!
\****************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tslib */ \"./node_modules/tslib/tslib.es6.js\");\n/* harmony import */ var _antv_util__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @antv/util */ \"./node_modules/@antv/util/esm/index.js\");\n/* harmony import */ var detect_browser__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! detect-browser */ \"./node_modules/detect-browser/es/index.js\");\n/* harmony import */ var _util_svg__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../util/svg */ \"./node_modules/@antv/g-svg/esm/util/svg.js\");\n/* harmony import */ var _constant__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../constant */ \"./node_modules/@antv/g-svg/esm/constant.js\");\n/* harmony import */ var _base__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./base */ \"./node_modules/@antv/g-svg/esm/shape/base.js\");\n/**\n * @fileoverview text\n * @author dengfuping_develop@163.com\n */\n\n\n\n\n\n\nvar LETTER_SPACING = 0.3;\nvar BASELINE_MAP = {\n top: 'before-edge',\n middle: 'central',\n bottom: 'after-edge',\n alphabetic: 'baseline',\n hanging: 'hanging',\n};\n// for FireFox\nvar BASELINE_MAP_FOR_FIREFOX = {\n top: 'text-before-edge',\n middle: 'central',\n bottom: 'text-after-edge',\n alphabetic: 'alphabetic',\n hanging: 'hanging',\n};\nvar ANCHOR_MAP = {\n left: 'left',\n start: 'left',\n center: 'middle',\n right: 'end',\n end: 'end',\n};\nvar Text = /** @class */ (function (_super) {\n Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__extends\"])(Text, _super);\n function Text() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.type = 'text';\n _this.canFill = true;\n _this.canStroke = true;\n return _this;\n }\n Text.prototype.getDefaultAttrs = function () {\n var attrs = _super.prototype.getDefaultAttrs.call(this);\n return Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__assign\"])(Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__assign\"])({}, attrs), { x: 0, y: 0, text: null, fontSize: 12, fontFamily: 'sans-serif', fontStyle: 'normal', fontWeight: 'normal', fontVariant: 'normal', textAlign: 'start', textBaseline: 'bottom' });\n };\n Text.prototype.createPath = function (context, targetAttrs) {\n var _this = this;\n var attrs = this.attr();\n var el = this.get('el');\n this._setFont();\n Object(_antv_util__WEBPACK_IMPORTED_MODULE_1__[\"each\"])(targetAttrs || attrs, function (value, attr) {\n if (attr === 'text') {\n _this._setText(\"\" + value);\n }\n else if (attr === 'matrix' && value) {\n Object(_util_svg__WEBPACK_IMPORTED_MODULE_3__[\"setTransform\"])(_this);\n }\n else if (_constant__WEBPACK_IMPORTED_MODULE_4__[\"SVG_ATTR_MAP\"][attr]) {\n el.setAttribute(_constant__WEBPACK_IMPORTED_MODULE_4__[\"SVG_ATTR_MAP\"][attr], value);\n }\n });\n el.setAttribute('paint-order', 'stroke');\n el.setAttribute('style', 'stroke-linecap:butt; stroke-linejoin:miter;');\n };\n Text.prototype._setFont = function () {\n var el = this.get('el');\n var _a = this.attr(), textBaseline = _a.textBaseline, textAlign = _a.textAlign;\n var browser = Object(detect_browser__WEBPACK_IMPORTED_MODULE_2__[\"detect\"])();\n if (browser && browser.name === 'firefox') {\n // compatible with FireFox browser, ref: https://github.com/antvis/g/issues/119\n el.setAttribute('dominant-baseline', BASELINE_MAP_FOR_FIREFOX[textBaseline] || 'alphabetic');\n }\n else {\n el.setAttribute('alignment-baseline', BASELINE_MAP[textBaseline] || 'baseline');\n }\n el.setAttribute('text-anchor', ANCHOR_MAP[textAlign] || 'left');\n };\n Text.prototype._setText = function (text) {\n var el = this.get('el');\n var _a = this.attr(), x = _a.x, _b = _a.textBaseline, baseline = _b === void 0 ? 'bottom' : _b;\n if (!text) {\n el.innerHTML = '';\n }\n else if (~text.indexOf('\\n')) {\n var textArr = text.split('\\n');\n var textLen_1 = textArr.length - 1;\n var arr_1 = '';\n Object(_antv_util__WEBPACK_IMPORTED_MODULE_1__[\"each\"])(textArr, function (segment, i) {\n if (i === 0) {\n if (baseline === 'alphabetic') {\n arr_1 += \"\" + segment + \"\";\n }\n else if (baseline === 'top') {\n arr_1 += \"\" + segment + \"\";\n }\n else if (baseline === 'middle') {\n arr_1 += \"\" + segment + \"\";\n }\n else if (baseline === 'bottom') {\n arr_1 += \"\" + segment + \"\";\n }\n else if (baseline === 'hanging') {\n arr_1 += \"\" + segment + \"\";\n }\n }\n else {\n arr_1 += \"\" + segment + \"\";\n }\n });\n el.innerHTML = arr_1;\n }\n else {\n el.innerHTML = text;\n }\n };\n return Text;\n}(_base__WEBPACK_IMPORTED_MODULE_5__[\"default\"]));\n/* harmony default export */ __webpack_exports__[\"default\"] = (Text);\n//# sourceMappingURL=text.js.map\n\n//# sourceURL=webpack:///./node_modules/@antv/g-svg/esm/shape/text.js?");
/***/ }),
/***/ "./node_modules/@antv/g-svg/esm/util/dom.js":
/*!**************************************************!*\
!*** ./node_modules/@antv/g-svg/esm/util/dom.js ***!
\**************************************************/
/*! exports provided: createSVGElement, createDom, sortDom, moveTo */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"createSVGElement\", function() { return createSVGElement; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"createDom\", function() { return createDom; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"sortDom\", function() { return sortDom; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"moveTo\", function() { return moveTo; });\n/* harmony import */ var _antv_util__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @antv/util */ \"./node_modules/@antv/util/esm/index.js\");\n/* harmony import */ var _constant__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../constant */ \"./node_modules/@antv/g-svg/esm/constant.js\");\n\n\n/**\n * 创建并返回图形的 svg 元素\n * @param type svg类型\n */\nfunction createSVGElement(type) {\n return document.createElementNS('http://www.w3.org/2000/svg', type);\n}\n/**\n * 创建并返回图形的 dom 元素\n * @param {IShape} shape 图形\n * @return {SVGElement}\n */\nfunction createDom(shape) {\n var type = _constant__WEBPACK_IMPORTED_MODULE_1__[\"SHAPE_TO_TAGS\"][shape.type];\n var parent = shape.getParent();\n if (!type) {\n throw new Error(\"the type \" + shape.type + \" is not supported by svg\");\n }\n var element = createSVGElement(type);\n if (shape.get('id')) {\n element.id = shape.get('id');\n }\n shape.set('el', element);\n shape.set('attrs', {});\n // 对于 defs 下的 dom 节点,parent 为空,通过 context 统一挂载到 defs 节点下\n if (parent) {\n var parentNode = parent.get('el');\n if (parentNode) {\n parentNode.appendChild(element);\n }\n else {\n // parentNode maybe null for group\n parentNode = parent.createDom();\n parent.set('el', parentNode);\n parentNode.appendChild(element);\n }\n }\n return element;\n}\n/**\n * 对 dom 元素进行排序\n * @param {IElement} element 元素\n * @param {sorter} function 排序函数\n */\nfunction sortDom(element, sorter) {\n var el = element.get('el');\n var childList = Object(_antv_util__WEBPACK_IMPORTED_MODULE_0__[\"toArray\"])(el.children).sort(sorter);\n // create empty fragment\n var fragment = document.createDocumentFragment();\n childList.forEach(function (child) {\n fragment.appendChild(child);\n });\n el.appendChild(fragment);\n}\n/**\n * 将 dom 元素移动到父元素下的指定位置\n * @param {SVGElement} element dom 元素\n * @param {number} targetIndex 目标位置(从 0 开始)\n */\nfunction moveTo(element, targetIndex) {\n var parentNode = element.parentNode;\n var siblings = Array.from(parentNode.childNodes).filter(\n // 要求为元素节点,且不能为 defs 节点\n function (node) { return node.nodeType === 1 && node.nodeName.toLowerCase() !== 'defs'; });\n // 获取目标节点\n var target = siblings[targetIndex];\n var currentIndex = siblings.indexOf(element);\n // 如果目标节点存在\n if (target) {\n // 当前索引 > 目标索引,直接插入到目标节点之前即可\n if (currentIndex > targetIndex) {\n parentNode.insertBefore(element, target);\n }\n else if (currentIndex < targetIndex) {\n // 当前索引 < 目标索引\n // 获取目标节点的下一个节点\n var targetNext = siblings[targetIndex + 1];\n // 如果目标节点的下一个节点存在,插入到该节点之前\n if (targetNext) {\n parentNode.insertBefore(element, targetNext);\n }\n else {\n // 如果该节点不存在,则追加到末尾\n parentNode.appendChild(element);\n }\n }\n }\n else {\n parentNode.appendChild(element);\n }\n}\n//# sourceMappingURL=dom.js.map\n\n//# sourceURL=webpack:///./node_modules/@antv/g-svg/esm/util/dom.js?");
/***/ }),
/***/ "./node_modules/@antv/g-svg/esm/util/draw.js":
/*!***************************************************!*\
!*** ./node_modules/@antv/g-svg/esm/util/draw.js ***!
\***************************************************/
/*! exports provided: drawChildren, refreshElement */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"drawChildren\", function() { return drawChildren; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"refreshElement\", function() { return refreshElement; });\n/* harmony import */ var _svg__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./svg */ \"./node_modules/@antv/g-svg/esm/util/svg.js\");\n/* harmony import */ var _dom__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./dom */ \"./node_modules/@antv/g-svg/esm/util/dom.js\");\n\n\nfunction drawChildren(context, children) {\n children.forEach(function (child) {\n child.draw(context);\n });\n}\n/**\n * 更新元素,包括 group 和 shape\n * @param {IElement} element SVG 元素\n * @param {ChangeType} changeType 更新类型\n */\nfunction refreshElement(element, changeType) {\n // 对于还没有挂载到画布下的元素,canvas 可能为空\n var canvas = element.get('canvas');\n // 只有挂载到画布下,才对元素进行实际渲染\n if (canvas && canvas.get('autoDraw')) {\n var context = canvas.get('context');\n var parent_1 = element.getParent();\n var parentChildren = parent_1 ? parent_1.getChildren() : [canvas];\n var el = element.get('el');\n if (changeType === 'remove') {\n var isClipShape = element.get('isClipShape');\n // 对于 clip,不仅需要将 clipShape 对于的 SVG 元素删除,还需要将上层的 clipPath 元素也删除\n if (isClipShape) {\n var clipPathEl = el && el.parentNode;\n var defsEl = clipPathEl && clipPathEl.parentNode;\n if (clipPathEl && defsEl) {\n defsEl.removeChild(clipPathEl);\n }\n }\n else if (el && el.parentNode) {\n el.parentNode.removeChild(el);\n }\n }\n else if (changeType === 'show') {\n el.setAttribute('visibility', 'visible');\n }\n else if (changeType === 'hide') {\n el.setAttribute('visibility', 'hidden');\n }\n else if (changeType === 'zIndex') {\n Object(_dom__WEBPACK_IMPORTED_MODULE_1__[\"moveTo\"])(el, parentChildren.indexOf(element));\n }\n else if (changeType === 'sort') {\n var children_1 = element.get('children');\n if (children_1 && children_1.length) {\n Object(_dom__WEBPACK_IMPORTED_MODULE_1__[\"sortDom\"])(element, function (a, b) {\n return children_1.indexOf(a) - children_1.indexOf(b) ? 1 : 0;\n });\n }\n }\n else if (changeType === 'clear') {\n // el maybe null for group\n if (el) {\n el.innerHTML = '';\n }\n }\n else if (changeType === 'matrix') {\n Object(_svg__WEBPACK_IMPORTED_MODULE_0__[\"setTransform\"])(element);\n }\n else if (changeType === 'clip') {\n Object(_svg__WEBPACK_IMPORTED_MODULE_0__[\"setClip\"])(element, context);\n }\n else if (changeType === 'attr') {\n // 已在 afterAttrsChange 进行了处理,此处 do nothing\n }\n else if (changeType === 'add') {\n element.draw(context);\n }\n }\n}\n//# sourceMappingURL=draw.js.map\n\n//# sourceURL=webpack:///./node_modules/@antv/g-svg/esm/util/draw.js?");
/***/ }),
/***/ "./node_modules/@antv/g-svg/esm/util/format.js":
/*!*****************************************************!*\
!*** ./node_modules/@antv/g-svg/esm/util/format.js ***!
\*****************************************************/
/*! exports provided: parseRadius, parsePath */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"parseRadius\", function() { return parseRadius; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"parsePath\", function() { return parsePath; });\n/* harmony import */ var _antv_util__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @antv/util */ \"./node_modules/@antv/util/esm/index.js\");\n\nvar regexTags = /[MLHVQTCSAZ]([^MLHVQTCSAZ]*)/gi;\nvar regexDot = /[^\\s,]+/gi;\nfunction parseRadius(radius) {\n var r1 = 0;\n var r2 = 0;\n var r3 = 0;\n var r4 = 0;\n if (Object(_antv_util__WEBPACK_IMPORTED_MODULE_0__[\"isArray\"])(radius)) {\n if (radius.length === 1) {\n r1 = r2 = r3 = r4 = radius[0];\n }\n else if (radius.length === 2) {\n r1 = r3 = radius[0];\n r2 = r4 = radius[1];\n }\n else if (radius.length === 3) {\n r1 = radius[0];\n r2 = r4 = radius[1];\n r3 = radius[2];\n }\n else {\n r1 = radius[0];\n r2 = radius[1];\n r3 = radius[2];\n r4 = radius[3];\n }\n }\n else {\n r1 = r2 = r3 = r4 = radius;\n }\n return {\n r1: r1,\n r2: r2,\n r3: r3,\n r4: r4,\n };\n}\nfunction parsePath(path) {\n path = path || [];\n if (Object(_antv_util__WEBPACK_IMPORTED_MODULE_0__[\"isArray\"])(path)) {\n return path;\n }\n if (Object(_antv_util__WEBPACK_IMPORTED_MODULE_0__[\"isString\"])(path)) {\n path = path.match(regexTags);\n Object(_antv_util__WEBPACK_IMPORTED_MODULE_0__[\"each\"])(path, function (item, index) {\n item = item.match(regexDot);\n if (item[0].length > 1) {\n var tag = item[0].charAt(0);\n item.splice(1, 0, item[0].substr(1));\n item[0] = tag;\n }\n Object(_antv_util__WEBPACK_IMPORTED_MODULE_0__[\"each\"])(item, function (sub, i) {\n if (!isNaN(sub)) {\n item[i] = +sub;\n }\n });\n path[index] = item;\n });\n return path;\n }\n}\n//# sourceMappingURL=format.js.map\n\n//# sourceURL=webpack:///./node_modules/@antv/g-svg/esm/util/format.js?");
/***/ }),
/***/ "./node_modules/@antv/g-svg/esm/util/svg.js":
/*!**************************************************!*\
!*** ./node_modules/@antv/g-svg/esm/util/svg.js ***!
\**************************************************/
/*! exports provided: setShadow, setTransform, setClip */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"setShadow\", function() { return setShadow; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"setTransform\", function() { return setTransform; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"setClip\", function() { return setClip; });\n/* harmony import */ var _dom__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./dom */ \"./node_modules/@antv/g-svg/esm/util/dom.js\");\n\nfunction setShadow(model, context) {\n var el = model.cfg.el;\n var attrs = model.attr();\n var cfg = {\n dx: attrs.shadowOffsetX,\n dy: attrs.shadowOffsetY,\n blur: attrs.shadowBlur,\n color: attrs.shadowColor,\n };\n if (!cfg.dx && !cfg.dy && !cfg.blur && !cfg.color) {\n el.removeAttribute('filter');\n }\n else {\n var id = context.find('filter', cfg);\n if (!id) {\n id = context.addShadow(cfg);\n }\n el.setAttribute('filter', \"url(#\" + id + \")\");\n }\n}\nfunction setTransform(model) {\n var matrix = model.attr().matrix;\n if (matrix) {\n var el = model.cfg.el;\n var transform = [];\n for (var i = 0; i < 9; i += 3) {\n transform.push(matrix[i] + \",\" + matrix[i + 1]);\n }\n transform = transform.join(',');\n if (transform.indexOf('NaN') === -1) {\n el.setAttribute('transform', \"matrix(\" + transform + \")\");\n }\n else {\n console.warn('invalid matrix:', matrix);\n }\n }\n}\nfunction setClip(model, context) {\n var clip = model.getClip();\n var el = model.get('el');\n if (!clip) {\n el.removeAttribute('clip-path');\n }\n else if (clip && !el.hasAttribute('clip-path')) {\n Object(_dom__WEBPACK_IMPORTED_MODULE_0__[\"createDom\"])(clip);\n clip.createPath(context);\n var id = context.addClip(clip);\n el.setAttribute('clip-path', \"url(#\" + id + \")\");\n }\n}\n//# sourceMappingURL=svg.js.map\n\n//# sourceURL=webpack:///./node_modules/@antv/g-svg/esm/util/svg.js?");
/***/ }),
/***/ "./node_modules/@antv/g-webgpu-core/es/ComponentManager.js":
/*!*****************************************************************!*\
!*** ./node_modules/@antv/g-webgpu-core/es/ComponentManager.js ***!
\*****************************************************************/
/*! exports provided: Component, ComponentManager */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"Component\", function() { return Component; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"ComponentManager\", function() { return ComponentManager; });\n/* harmony import */ var _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/asyncToGenerator */ \"./node_modules/@babel/runtime/helpers/asyncToGenerator.js\");\n/* harmony import */ var _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/createClass */ \"./node_modules/@babel/runtime/helpers/createClass.js\");\n/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/classCallCheck */ \"./node_modules/@babel/runtime/helpers/classCallCheck.js\");\n/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @babel/runtime/regenerator */ \"./node_modules/@babel/runtime/regenerator/index.js\");\n/* harmony import */ var _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var _Entity__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./Entity */ \"./node_modules/@antv/g-webgpu-core/es/Entity.js\");\n\n\n\n\n\nvar Component = /*#__PURE__*/_babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1___default()(function Component(data) {\n _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_2___default()(this, Component);\n} //\n);\n\n/**\n * 管理某一类 Component,尽可能做到 AoS 而非 SoA\n * @see https://wickedengine.net/2019/09/29/entity-component-system/\n * @see https://github.com/turanszkij/WickedEngine/blob/master/WickedEngine/wiECS.h\n */\n// tslint:disable-next-line:max-classes-per-file\nvar ComponentManager = /*#__PURE__*/function () {\n /**\n * 不在 Entity 中维护拥有的 Component 列表,反之亦然\n */\n\n function ComponentManager(clazz) {\n _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_2___default()(this, ComponentManager);\n this.clazz = void 0;\n this.components = [];\n this.entities = [];\n this.lookup = {};\n this.clazz = clazz;\n }\n _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1___default()(ComponentManager, [{\n key: \"clear\",\n value: function clear() {\n this.components = [];\n this.entities = [];\n this.lookup = {};\n }\n }, {\n key: \"contains\",\n value: function contains(entity) {\n return this.lookup[entity] > -1;\n }\n }, {\n key: \"create\",\n value: function create(entity, data) {\n this.lookup[entity] = this.components.length;\n var component = new this.clazz(data || {});\n this.components.push(component);\n this.entities.push(entity);\n return component;\n }\n }, {\n key: \"remove\",\n value: function remove(entity) {\n var componentIndex = this.lookup[entity];\n if (componentIndex > -1) {\n if (componentIndex < this.components.length - 1) {\n // 将待删除元素和最后一个元素交换\n // C++ 中有 std::move 这样的操作,避免数据的拷贝\n // @see https://github.com/turanszkij/WickedEngine/blob/master/WickedEngine/wiECS.h#L169\n this.components[componentIndex] = this.components[this.components.length - 1];\n this.entities[componentIndex] = this.entities[this.entities.length - 1];\n this.lookup[this.entities[componentIndex]] = componentIndex;\n }\n }\n\n // 待删除元素已经移动到了最后一个\n this.components.pop();\n this.entities.pop();\n delete this.lookup[entity];\n }\n }, {\n key: \"removeKeepSorted\",\n value: function removeKeepSorted(entity) {\n var componentIndex = this.lookup[entity];\n if (componentIndex > -1) {\n var entity2 = this.entities[componentIndex];\n if (componentIndex < this.components.length - 1) {\n // Move every component left by one that is after this element:\n for (var _i = componentIndex + 1; _i < this.components.length; ++_i) {\n this.components[_i - 1] = this.components[_i];\n }\n // Move every entity left by one that is after this element and update lut:\n for (var _i2 = componentIndex + 1; _i2 < this.entities.length; ++_i2) {\n this.entities[_i2 - 1] = this.entities[_i2];\n this.lookup[this.entities[_i2 - 1]] = _i2 - 1;\n }\n }\n this.components.pop();\n this.entities.pop();\n delete this.lookup[entity2];\n }\n }\n }, {\n key: \"moveItem\",\n value: function moveItem(srcIndex, destIndex) {\n if (srcIndex === destIndex) {\n return;\n }\n\n // Save the moved component and entity:\n var srcComponent = this.components[srcIndex];\n var srcEntity = this.entities[srcIndex];\n\n // Every other entity-component that's in the way gets moved by one and lut is kept updated:\n var direction = srcIndex < destIndex ? 1 : -1;\n for (var _i3 = srcIndex; _i3 !== destIndex; _i3 += direction) {\n var next = _i3 + direction;\n this.components[_i3] = this.components[next];\n this.entities[_i3] = this.entities[next];\n this.lookup[this.entities[_i3]] = _i3;\n }\n\n // Saved entity-component moved to the required position:\n this.components[destIndex] = srcComponent;\n this.entities[destIndex] = srcEntity;\n this.lookup[srcEntity] = destIndex;\n }\n }, {\n key: \"getEntity\",\n value: function getEntity(index) {\n return this.entities[index];\n }\n\n /**\n * 由于缺少类似 C++ 的重载操作符,没法通过 [下标] 直接访问。因此只能增加该方法用于遍历。\n */\n }, {\n key: \"getComponent\",\n value: function getComponent(index) {\n return this.components[index];\n }\n }, {\n key: \"getComponentByEntity\",\n value: function getComponentByEntity(entity) {\n var componentIndex = this.lookup[entity];\n if (componentIndex > -1) {\n return this.components[componentIndex];\n }\n return null;\n }\n }, {\n key: \"getCount\",\n value: function getCount() {\n return this.components.length;\n }\n }, {\n key: \"getEntityByComponentIndex\",\n value: function getEntityByComponentIndex(componentIdx) {\n for (var _i4 = 0, _Object$keys = Object.keys(this.lookup); _i4 < _Object$keys.length; _i4++) {\n var _entity = _Object$keys[_i4];\n var entityInNum = Number(_entity);\n if (this.lookup[entityInNum] === componentIdx) {\n return entityInNum;\n }\n }\n return _Entity__WEBPACK_IMPORTED_MODULE_4__[\"EMPTY\"];\n }\n }, {\n key: \"find\",\n value: function find(callback) {\n for (var _i5 = 0; _i5 < this.getCount(); _i5++) {\n var _component = this.getComponent(_i5);\n if (callback(_component, _i5)) {\n return _component;\n }\n }\n return null;\n }\n }, {\n key: \"findIndex\",\n value: function findIndex(callback) {\n for (var _i6 = 0; _i6 < this.getCount(); _i6++) {\n var _component2 = this.getComponent(_i6);\n if (callback(_component2, _i6)) {\n return _i6;\n }\n }\n return -1;\n }\n }, {\n key: \"forEach\",\n value: function forEach(callback) {\n for (var _i7 = 0, _Object$keys2 = Object.keys(this.lookup); _i7 < _Object$keys2.length; _i7++) {\n var _entity2 = _Object$keys2[_i7];\n var entityInNum = Number(_entity2);\n var componentIndex = this.lookup[entityInNum];\n callback(entityInNum, this.getComponent(componentIndex));\n }\n }\n }, {\n key: \"forEachAsync\",\n value: function () {\n var _forEachAsync = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_0___default()( /*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_3___default.a.mark(function _callee(callback) {\n var _i8, _Object$keys3, _entity3, entityInNum, componentIndex;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_3___default.a.wrap(function _callee$(_context) {\n while (1) {\n switch (_context.prev = _context.next) {\n case 0:\n _i8 = 0, _Object$keys3 = Object.keys(this.lookup);\n case 1:\n if (!(_i8 < _Object$keys3.length)) {\n _context.next = 10;\n break;\n }\n _entity3 = _Object$keys3[_i8];\n entityInNum = Number(_entity3);\n componentIndex = this.lookup[entityInNum];\n _context.next = 7;\n return callback(entityInNum, this.getComponent(componentIndex));\n case 7:\n _i8++;\n _context.next = 1;\n break;\n case 10:\n case \"end\":\n return _context.stop();\n }\n }\n }, _callee, this);\n }));\n function forEachAsync(_x) {\n return _forEachAsync.apply(this, arguments);\n }\n return forEachAsync;\n }()\n }, {\n key: \"map\",\n value: function map(callback) {\n var result = [];\n for (var _i9 = 0, _Object$keys4 = Object.keys(this.lookup); _i9 < _Object$keys4.length; _i9++) {\n var _entity4 = _Object$keys4[_i9];\n var entityInNum = Number(_entity4);\n var componentIndex = this.lookup[entityInNum];\n result.push(callback(entityInNum, this.getComponent(componentIndex)));\n }\n return result;\n }\n }]);\n return ComponentManager;\n}();\n//# sourceMappingURL=ComponentManager.js.map\n\n//# sourceURL=webpack:///./node_modules/@antv/g-webgpu-core/es/ComponentManager.js?");
/***/ }),
/***/ "./node_modules/@antv/g-webgpu-core/es/Entity.js":
/*!*******************************************************!*\
!*** ./node_modules/@antv/g-webgpu-core/es/Entity.js ***!
\*******************************************************/
/*! exports provided: EMPTY, createEntity */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"EMPTY\", function() { return EMPTY; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"createEntity\", function() { return createEntity; });\nvar EMPTY = -1;\nvar entitySequence = 1;\n\n/**\n * 类似关系型数据库的主键\n * TODO: 自动生成,考虑序列化\n */\nfunction createEntity() {\n return entitySequence++;\n}\n//# sourceMappingURL=Entity.js.map\n\n//# sourceURL=webpack:///./node_modules/@antv/g-webgpu-core/es/Entity.js?");
/***/ }),
/***/ "./node_modules/@antv/g-webgpu-core/es/components/renderer/gl.js":
/*!***********************************************************************!*\
!*** ./node_modules/@antv/g-webgpu-core/es/components/renderer/gl.js ***!
\***********************************************************************/
/*! exports provided: gl */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"gl\", function() { return gl; });\n/**\n * WebGL 枚举值\n * @see http://www.khronos.org/registry/webgl/specs/latest/1.0/#5.14\n * 使用 babel 插件对常量进行内联,以减少最终打包产物大小\n * @see https://github.com/uber/deck.gl/blob/7.1-release/dev-docs/roadmaps/dist-size-roadmap.md#inline-gl-constants\n * 为了支持 WebGPU,新增 TextureUsage\n * @see https://gpuweb.github.io/gpuweb/#gputextureusage\n */\nvar gl;\n(function (gl) {\n gl[gl[\"DEPTH_BUFFER_BIT\"] = 256] = \"DEPTH_BUFFER_BIT\";\n gl[gl[\"STENCIL_BUFFER_BIT\"] = 1024] = \"STENCIL_BUFFER_BIT\";\n gl[gl[\"COLOR_BUFFER_BIT\"] = 16384] = \"COLOR_BUFFER_BIT\";\n gl[gl[\"POINTS\"] = 0] = \"POINTS\";\n gl[gl[\"LINES\"] = 1] = \"LINES\";\n gl[gl[\"LINE_LOOP\"] = 2] = \"LINE_LOOP\";\n gl[gl[\"LINE_STRIP\"] = 3] = \"LINE_STRIP\";\n gl[gl[\"TRIANGLES\"] = 4] = \"TRIANGLES\";\n gl[gl[\"TRIANGLE_STRIP\"] = 5] = \"TRIANGLE_STRIP\";\n gl[gl[\"TRIANGLE_FAN\"] = 6] = \"TRIANGLE_FAN\";\n gl[gl[\"ZERO\"] = 0] = \"ZERO\";\n gl[gl[\"ONE\"] = 1] = \"ONE\";\n gl[gl[\"SRC_COLOR\"] = 768] = \"SRC_COLOR\";\n gl[gl[\"ONE_MINUS_SRC_COLOR\"] = 769] = \"ONE_MINUS_SRC_COLOR\";\n gl[gl[\"SRC_ALPHA\"] = 770] = \"SRC_ALPHA\";\n gl[gl[\"ONE_MINUS_SRC_ALPHA\"] = 771] = \"ONE_MINUS_SRC_ALPHA\";\n gl[gl[\"DST_ALPHA\"] = 772] = \"DST_ALPHA\";\n gl[gl[\"ONE_MINUS_DST_ALPHA\"] = 773] = \"ONE_MINUS_DST_ALPHA\";\n gl[gl[\"DST_COLOR\"] = 774] = \"DST_COLOR\";\n gl[gl[\"ONE_MINUS_DST_COLOR\"] = 775] = \"ONE_MINUS_DST_COLOR\";\n gl[gl[\"SRC_ALPHA_SATURATE\"] = 776] = \"SRC_ALPHA_SATURATE\";\n gl[gl[\"FUNC_ADD\"] = 32774] = \"FUNC_ADD\";\n gl[gl[\"BLEND_EQUATION\"] = 32777] = \"BLEND_EQUATION\";\n gl[gl[\"BLEND_EQUATION_RGB\"] = 32777] = \"BLEND_EQUATION_RGB\";\n gl[gl[\"BLEND_EQUATION_ALPHA\"] = 34877] = \"BLEND_EQUATION_ALPHA\";\n gl[gl[\"FUNC_SUBTRACT\"] = 32778] = \"FUNC_SUBTRACT\";\n gl[gl[\"FUNC_REVERSE_SUBTRACT\"] = 32779] = \"FUNC_REVERSE_SUBTRACT\";\n gl[gl[\"MAX_EXT\"] = 32776] = \"MAX_EXT\";\n gl[gl[\"MIN_EXT\"] = 32775] = \"MIN_EXT\";\n gl[gl[\"BLEND_DST_RGB\"] = 32968] = \"BLEND_DST_RGB\";\n gl[gl[\"BLEND_SRC_RGB\"] = 32969] = \"BLEND_SRC_RGB\";\n gl[gl[\"BLEND_DST_ALPHA\"] = 32970] = \"BLEND_DST_ALPHA\";\n gl[gl[\"BLEND_SRC_ALPHA\"] = 32971] = \"BLEND_SRC_ALPHA\";\n gl[gl[\"CONSTANT_COLOR\"] = 32769] = \"CONSTANT_COLOR\";\n gl[gl[\"ONE_MINUS_CONSTANT_COLOR\"] = 32770] = \"ONE_MINUS_CONSTANT_COLOR\";\n gl[gl[\"CONSTANT_ALPHA\"] = 32771] = \"CONSTANT_ALPHA\";\n gl[gl[\"ONE_MINUS_CONSTANT_ALPHA\"] = 32772] = \"ONE_MINUS_CONSTANT_ALPHA\";\n gl[gl[\"BLEND_COLOR\"] = 32773] = \"BLEND_COLOR\";\n gl[gl[\"ARRAY_BUFFER\"] = 34962] = \"ARRAY_BUFFER\";\n gl[gl[\"ELEMENT_ARRAY_BUFFER\"] = 34963] = \"ELEMENT_ARRAY_BUFFER\";\n gl[gl[\"ARRAY_BUFFER_BINDING\"] = 34964] = \"ARRAY_BUFFER_BINDING\";\n gl[gl[\"ELEMENT_ARRAY_BUFFER_BINDING\"] = 34965] = \"ELEMENT_ARRAY_BUFFER_BINDING\";\n gl[gl[\"STREAM_DRAW\"] = 35040] = \"STREAM_DRAW\";\n gl[gl[\"STATIC_DRAW\"] = 35044] = \"STATIC_DRAW\";\n gl[gl[\"DYNAMIC_DRAW\"] = 35048] = \"DYNAMIC_DRAW\";\n gl[gl[\"BUFFER_SIZE\"] = 34660] = \"BUFFER_SIZE\";\n gl[gl[\"BUFFER_USAGE\"] = 34661] = \"BUFFER_USAGE\";\n gl[gl[\"CURRENT_VERTEX_ATTRIB\"] = 34342] = \"CURRENT_VERTEX_ATTRIB\";\n gl[gl[\"FRONT\"] = 1028] = \"FRONT\";\n gl[gl[\"BACK\"] = 1029] = \"BACK\";\n gl[gl[\"FRONT_AND_BACK\"] = 1032] = \"FRONT_AND_BACK\";\n gl[gl[\"CULL_FACE\"] = 2884] = \"CULL_FACE\";\n gl[gl[\"BLEND\"] = 3042] = \"BLEND\";\n gl[gl[\"DITHER\"] = 3024] = \"DITHER\";\n gl[gl[\"STENCIL_TEST\"] = 2960] = \"STENCIL_TEST\";\n gl[gl[\"DEPTH_TEST\"] = 2929] = \"DEPTH_TEST\";\n gl[gl[\"SCISSOR_TEST\"] = 3089] = \"SCISSOR_TEST\";\n gl[gl[\"POLYGON_OFFSET_FILL\"] = 32823] = \"POLYGON_OFFSET_FILL\";\n gl[gl[\"SAMPLE_ALPHA_TO_COVERAGE\"] = 32926] = \"SAMPLE_ALPHA_TO_COVERAGE\";\n gl[gl[\"SAMPLE_COVERAGE\"] = 32928] = \"SAMPLE_COVERAGE\";\n gl[gl[\"NO_ERROR\"] = 0] = \"NO_ERROR\";\n gl[gl[\"INVALID_ENUM\"] = 1280] = \"INVALID_ENUM\";\n gl[gl[\"INVALID_VALUE\"] = 1281] = \"INVALID_VALUE\";\n gl[gl[\"INVALID_OPERATION\"] = 1282] = \"INVALID_OPERATION\";\n gl[gl[\"OUT_OF_MEMORY\"] = 1285] = \"OUT_OF_MEMORY\";\n gl[gl[\"CW\"] = 2304] = \"CW\";\n gl[gl[\"CCW\"] = 2305] = \"CCW\";\n gl[gl[\"LINE_WIDTH\"] = 2849] = \"LINE_WIDTH\";\n gl[gl[\"ALIASED_POINT_SIZE_RANGE\"] = 33901] = \"ALIASED_POINT_SIZE_RANGE\";\n gl[gl[\"ALIASED_LINE_WIDTH_RANGE\"] = 33902] = \"ALIASED_LINE_WIDTH_RANGE\";\n gl[gl[\"CULL_FACE_MODE\"] = 2885] = \"CULL_FACE_MODE\";\n gl[gl[\"FRONT_FACE\"] = 2886] = \"FRONT_FACE\";\n gl[gl[\"DEPTH_RANGE\"] = 2928] = \"DEPTH_RANGE\";\n gl[gl[\"DEPTH_WRITEMASK\"] = 2930] = \"DEPTH_WRITEMASK\";\n gl[gl[\"DEPTH_CLEAR_VALUE\"] = 2931] = \"DEPTH_CLEAR_VALUE\";\n gl[gl[\"DEPTH_FUNC\"] = 2932] = \"DEPTH_FUNC\";\n gl[gl[\"STENCIL_CLEAR_VALUE\"] = 2961] = \"STENCIL_CLEAR_VALUE\";\n gl[gl[\"STENCIL_FUNC\"] = 2962] = \"STENCIL_FUNC\";\n gl[gl[\"STENCIL_FAIL\"] = 2964] = \"STENCIL_FAIL\";\n gl[gl[\"STENCIL_PASS_DEPTH_FAIL\"] = 2965] = \"STENCIL_PASS_DEPTH_FAIL\";\n gl[gl[\"STENCIL_PASS_DEPTH_PASS\"] = 2966] = \"STENCIL_PASS_DEPTH_PASS\";\n gl[gl[\"STENCIL_REF\"] = 2967] = \"STENCIL_REF\";\n gl[gl[\"STENCIL_VALUE_MASK\"] = 2963] = \"STENCIL_VALUE_MASK\";\n gl[gl[\"STENCIL_WRITEMASK\"] = 2968] = \"STENCIL_WRITEMASK\";\n gl[gl[\"STENCIL_BACK_FUNC\"] = 34816] = \"STENCIL_BACK_FUNC\";\n gl[gl[\"STENCIL_BACK_FAIL\"] = 34817] = \"STENCIL_BACK_FAIL\";\n gl[gl[\"STENCIL_BACK_PASS_DEPTH_FAIL\"] = 34818] = \"STENCIL_BACK_PASS_DEPTH_FAIL\";\n gl[gl[\"STENCIL_BACK_PASS_DEPTH_PASS\"] = 34819] = \"STENCIL_BACK_PASS_DEPTH_PASS\";\n gl[gl[\"STENCIL_BACK_REF\"] = 36003] = \"STENCIL_BACK_REF\";\n gl[gl[\"STENCIL_BACK_VALUE_MASK\"] = 36004] = \"STENCIL_BACK_VALUE_MASK\";\n gl[gl[\"STENCIL_BACK_WRITEMASK\"] = 36005] = \"STENCIL_BACK_WRITEMASK\";\n gl[gl[\"VIEWPORT\"] = 2978] = \"VIEWPORT\";\n gl[gl[\"SCISSOR_BOX\"] = 3088] = \"SCISSOR_BOX\";\n gl[gl[\"COLOR_CLEAR_VALUE\"] = 3106] = \"COLOR_CLEAR_VALUE\";\n gl[gl[\"COLOR_WRITEMASK\"] = 3107] = \"COLOR_WRITEMASK\";\n gl[gl[\"UNPACK_ALIGNMENT\"] = 3317] = \"UNPACK_ALIGNMENT\";\n gl[gl[\"PACK_ALIGNMENT\"] = 3333] = \"PACK_ALIGNMENT\";\n gl[gl[\"MAX_TEXTURE_SIZE\"] = 3379] = \"MAX_TEXTURE_SIZE\";\n gl[gl[\"MAX_VIEWPORT_DIMS\"] = 3386] = \"MAX_VIEWPORT_DIMS\";\n gl[gl[\"SUBPIXEL_BITS\"] = 3408] = \"SUBPIXEL_BITS\";\n gl[gl[\"RED_BITS\"] = 3410] = \"RED_BITS\";\n gl[gl[\"GREEN_BITS\"] = 3411] = \"GREEN_BITS\";\n gl[gl[\"BLUE_BITS\"] = 3412] = \"BLUE_BITS\";\n gl[gl[\"ALPHA_BITS\"] = 3413] = \"ALPHA_BITS\";\n gl[gl[\"DEPTH_BITS\"] = 3414] = \"DEPTH_BITS\";\n gl[gl[\"STENCIL_BITS\"] = 3415] = \"STENCIL_BITS\";\n gl[gl[\"POLYGON_OFFSET_UNITS\"] = 10752] = \"POLYGON_OFFSET_UNITS\";\n gl[gl[\"POLYGON_OFFSET_FACTOR\"] = 32824] = \"POLYGON_OFFSET_FACTOR\";\n gl[gl[\"TEXTURE_BINDING_2D\"] = 32873] = \"TEXTURE_BINDING_2D\";\n gl[gl[\"SAMPLE_BUFFERS\"] = 32936] = \"SAMPLE_BUFFERS\";\n gl[gl[\"SAMPLES\"] = 32937] = \"SAMPLES\";\n gl[gl[\"SAMPLE_COVERAGE_VALUE\"] = 32938] = \"SAMPLE_COVERAGE_VALUE\";\n gl[gl[\"SAMPLE_COVERAGE_INVERT\"] = 32939] = \"SAMPLE_COVERAGE_INVERT\";\n gl[gl[\"COMPRESSED_TEXTURE_FORMATS\"] = 34467] = \"COMPRESSED_TEXTURE_FORMATS\";\n gl[gl[\"DONT_CARE\"] = 4352] = \"DONT_CARE\";\n gl[gl[\"FASTEST\"] = 4353] = \"FASTEST\";\n gl[gl[\"NICEST\"] = 4354] = \"NICEST\";\n gl[gl[\"GENERATE_MIPMAP_HINT\"] = 33170] = \"GENERATE_MIPMAP_HINT\";\n gl[gl[\"BYTE\"] = 5120] = \"BYTE\";\n gl[gl[\"UNSIGNED_BYTE\"] = 5121] = \"UNSIGNED_BYTE\";\n gl[gl[\"SHORT\"] = 5122] = \"SHORT\";\n gl[gl[\"UNSIGNED_SHORT\"] = 5123] = \"UNSIGNED_SHORT\";\n gl[gl[\"INT\"] = 5124] = \"INT\";\n gl[gl[\"UNSIGNED_INT\"] = 5125] = \"UNSIGNED_INT\";\n gl[gl[\"FLOAT\"] = 5126] = \"FLOAT\";\n gl[gl[\"DEPTH_COMPONENT\"] = 6402] = \"DEPTH_COMPONENT\";\n gl[gl[\"ALPHA\"] = 6406] = \"ALPHA\";\n gl[gl[\"RGB\"] = 6407] = \"RGB\";\n gl[gl[\"RGBA\"] = 6408] = \"RGBA\";\n gl[gl[\"LUMINANCE\"] = 6409] = \"LUMINANCE\";\n gl[gl[\"LUMINANCE_ALPHA\"] = 6410] = \"LUMINANCE_ALPHA\";\n gl[gl[\"UNSIGNED_SHORT_4_4_4_4\"] = 32819] = \"UNSIGNED_SHORT_4_4_4_4\";\n gl[gl[\"UNSIGNED_SHORT_5_5_5_1\"] = 32820] = \"UNSIGNED_SHORT_5_5_5_1\";\n gl[gl[\"UNSIGNED_SHORT_5_6_5\"] = 33635] = \"UNSIGNED_SHORT_5_6_5\";\n gl[gl[\"FRAGMENT_SHADER\"] = 35632] = \"FRAGMENT_SHADER\";\n gl[gl[\"VERTEX_SHADER\"] = 35633] = \"VERTEX_SHADER\";\n gl[gl[\"MAX_VERTEX_ATTRIBS\"] = 34921] = \"MAX_VERTEX_ATTRIBS\";\n gl[gl[\"MAX_VERTEX_UNIFORM_VECTORS\"] = 36347] = \"MAX_VERTEX_UNIFORM_VECTORS\";\n gl[gl[\"MAX_VARYING_VECTORS\"] = 36348] = \"MAX_VARYING_VECTORS\";\n gl[gl[\"MAX_COMBINED_TEXTURE_IMAGE_UNITS\"] = 35661] = \"MAX_COMBINED_TEXTURE_IMAGE_UNITS\";\n gl[gl[\"MAX_VERTEX_TEXTURE_IMAGE_UNITS\"] = 35660] = \"MAX_VERTEX_TEXTURE_IMAGE_UNITS\";\n gl[gl[\"MAX_TEXTURE_IMAGE_UNITS\"] = 34930] = \"MAX_TEXTURE_IMAGE_UNITS\";\n gl[gl[\"MAX_FRAGMENT_UNIFORM_VECTORS\"] = 36349] = \"MAX_FRAGMENT_UNIFORM_VECTORS\";\n gl[gl[\"SHADER_TYPE\"] = 35663] = \"SHADER_TYPE\";\n gl[gl[\"DELETE_STATUS\"] = 35712] = \"DELETE_STATUS\";\n gl[gl[\"LINK_STATUS\"] = 35714] = \"LINK_STATUS\";\n gl[gl[\"VALIDATE_STATUS\"] = 35715] = \"VALIDATE_STATUS\";\n gl[gl[\"ATTACHED_SHADERS\"] = 35717] = \"ATTACHED_SHADERS\";\n gl[gl[\"ACTIVE_UNIFORMS\"] = 35718] = \"ACTIVE_UNIFORMS\";\n gl[gl[\"ACTIVE_ATTRIBUTES\"] = 35721] = \"ACTIVE_ATTRIBUTES\";\n gl[gl[\"SHADING_LANGUAGE_VERSION\"] = 35724] = \"SHADING_LANGUAGE_VERSION\";\n gl[gl[\"CURRENT_PROGRAM\"] = 35725] = \"CURRENT_PROGRAM\";\n gl[gl[\"NEVER\"] = 512] = \"NEVER\";\n gl[gl[\"LESS\"] = 513] = \"LESS\";\n gl[gl[\"EQUAL\"] = 514] = \"EQUAL\";\n gl[gl[\"LEQUAL\"] = 515] = \"LEQUAL\";\n gl[gl[\"GREATER\"] = 516] = \"GREATER\";\n gl[gl[\"NOTEQUAL\"] = 517] = \"NOTEQUAL\";\n gl[gl[\"GEQUAL\"] = 518] = \"GEQUAL\";\n gl[gl[\"ALWAYS\"] = 519] = \"ALWAYS\";\n gl[gl[\"KEEP\"] = 7680] = \"KEEP\";\n gl[gl[\"REPLACE\"] = 7681] = \"REPLACE\";\n gl[gl[\"INCR\"] = 7682] = \"INCR\";\n gl[gl[\"DECR\"] = 7683] = \"DECR\";\n gl[gl[\"INVERT\"] = 5386] = \"INVERT\";\n gl[gl[\"INCR_WRAP\"] = 34055] = \"INCR_WRAP\";\n gl[gl[\"DECR_WRAP\"] = 34056] = \"DECR_WRAP\";\n gl[gl[\"VENDOR\"] = 7936] = \"VENDOR\";\n gl[gl[\"RENDERER\"] = 7937] = \"RENDERER\";\n gl[gl[\"VERSION\"] = 7938] = \"VERSION\";\n gl[gl[\"NEAREST\"] = 9728] = \"NEAREST\";\n gl[gl[\"LINEAR\"] = 9729] = \"LINEAR\";\n gl[gl[\"NEAREST_MIPMAP_NEAREST\"] = 9984] = \"NEAREST_MIPMAP_NEAREST\";\n gl[gl[\"LINEAR_MIPMAP_NEAREST\"] = 9985] = \"LINEAR_MIPMAP_NEAREST\";\n gl[gl[\"NEAREST_MIPMAP_LINEAR\"] = 9986] = \"NEAREST_MIPMAP_LINEAR\";\n gl[gl[\"LINEAR_MIPMAP_LINEAR\"] = 9987] = \"LINEAR_MIPMAP_LINEAR\";\n gl[gl[\"TEXTURE_MAG_FILTER\"] = 10240] = \"TEXTURE_MAG_FILTER\";\n gl[gl[\"TEXTURE_MIN_FILTER\"] = 10241] = \"TEXTURE_MIN_FILTER\";\n gl[gl[\"TEXTURE_WRAP_S\"] = 10242] = \"TEXTURE_WRAP_S\";\n gl[gl[\"TEXTURE_WRAP_T\"] = 10243] = \"TEXTURE_WRAP_T\";\n gl[gl[\"TEXTURE_2D\"] = 3553] = \"TEXTURE_2D\";\n gl[gl[\"TEXTURE\"] = 5890] = \"TEXTURE\";\n gl[gl[\"TEXTURE_CUBE_MAP\"] = 34067] = \"TEXTURE_CUBE_MAP\";\n gl[gl[\"TEXTURE_BINDING_CUBE_MAP\"] = 34068] = \"TEXTURE_BINDING_CUBE_MAP\";\n gl[gl[\"TEXTURE_CUBE_MAP_POSITIVE_X\"] = 34069] = \"TEXTURE_CUBE_MAP_POSITIVE_X\";\n gl[gl[\"TEXTURE_CUBE_MAP_NEGATIVE_X\"] = 34070] = \"TEXTURE_CUBE_MAP_NEGATIVE_X\";\n gl[gl[\"TEXTURE_CUBE_MAP_POSITIVE_Y\"] = 34071] = \"TEXTURE_CUBE_MAP_POSITIVE_Y\";\n gl[gl[\"TEXTURE_CUBE_MAP_NEGATIVE_Y\"] = 34072] = \"TEXTURE_CUBE_MAP_NEGATIVE_Y\";\n gl[gl[\"TEXTURE_CUBE_MAP_POSITIVE_Z\"] = 34073] = \"TEXTURE_CUBE_MAP_POSITIVE_Z\";\n gl[gl[\"TEXTURE_CUBE_MAP_NEGATIVE_Z\"] = 34074] = \"TEXTURE_CUBE_MAP_NEGATIVE_Z\";\n gl[gl[\"MAX_CUBE_MAP_TEXTURE_SIZE\"] = 34076] = \"MAX_CUBE_MAP_TEXTURE_SIZE\";\n gl[gl[\"TEXTURE0\"] = 33984] = \"TEXTURE0\";\n gl[gl[\"TEXTURE1\"] = 33985] = \"TEXTURE1\";\n gl[gl[\"TEXTURE2\"] = 33986] = \"TEXTURE2\";\n gl[gl[\"TEXTURE3\"] = 33987] = \"TEXTURE3\";\n gl[gl[\"TEXTURE4\"] = 33988] = \"TEXTURE4\";\n gl[gl[\"TEXTURE5\"] = 33989] = \"TEXTURE5\";\n gl[gl[\"TEXTURE6\"] = 33990] = \"TEXTURE6\";\n gl[gl[\"TEXTURE7\"] = 33991] = \"TEXTURE7\";\n gl[gl[\"TEXTURE8\"] = 33992] = \"TEXTURE8\";\n gl[gl[\"TEXTURE9\"] = 33993] = \"TEXTURE9\";\n gl[gl[\"TEXTURE10\"] = 33994] = \"TEXTURE10\";\n gl[gl[\"TEXTURE11\"] = 33995] = \"TEXTURE11\";\n gl[gl[\"TEXTURE12\"] = 33996] = \"TEXTURE12\";\n gl[gl[\"TEXTURE13\"] = 33997] = \"TEXTURE13\";\n gl[gl[\"TEXTURE14\"] = 33998] = \"TEXTURE14\";\n gl[gl[\"TEXTURE15\"] = 33999] = \"TEXTURE15\";\n gl[gl[\"TEXTURE16\"] = 34000] = \"TEXTURE16\";\n gl[gl[\"TEXTURE17\"] = 34001] = \"TEXTURE17\";\n gl[gl[\"TEXTURE18\"] = 34002] = \"TEXTURE18\";\n gl[gl[\"TEXTURE19\"] = 34003] = \"TEXTURE19\";\n gl[gl[\"TEXTURE20\"] = 34004] = \"TEXTURE20\";\n gl[gl[\"TEXTURE21\"] = 34005] = \"TEXTURE21\";\n gl[gl[\"TEXTURE22\"] = 34006] = \"TEXTURE22\";\n gl[gl[\"TEXTURE23\"] = 34007] = \"TEXTURE23\";\n gl[gl[\"TEXTURE24\"] = 34008] = \"TEXTURE24\";\n gl[gl[\"TEXTURE25\"] = 34009] = \"TEXTURE25\";\n gl[gl[\"TEXTURE26\"] = 34010] = \"TEXTURE26\";\n gl[gl[\"TEXTURE27\"] = 34011] = \"TEXTURE27\";\n gl[gl[\"TEXTURE28\"] = 34012] = \"TEXTURE28\";\n gl[gl[\"TEXTURE29\"] = 34013] = \"TEXTURE29\";\n gl[gl[\"TEXTURE30\"] = 34014] = \"TEXTURE30\";\n gl[gl[\"TEXTURE31\"] = 34015] = \"TEXTURE31\";\n gl[gl[\"ACTIVE_TEXTURE\"] = 34016] = \"ACTIVE_TEXTURE\";\n gl[gl[\"REPEAT\"] = 10497] = \"REPEAT\";\n gl[gl[\"CLAMP_TO_EDGE\"] = 33071] = \"CLAMP_TO_EDGE\";\n gl[gl[\"MIRRORED_REPEAT\"] = 33648] = \"MIRRORED_REPEAT\";\n gl[gl[\"FLOAT_VEC2\"] = 35664] = \"FLOAT_VEC2\";\n gl[gl[\"FLOAT_VEC3\"] = 35665] = \"FLOAT_VEC3\";\n gl[gl[\"FLOAT_VEC4\"] = 35666] = \"FLOAT_VEC4\";\n gl[gl[\"INT_VEC2\"] = 35667] = \"INT_VEC2\";\n gl[gl[\"INT_VEC3\"] = 35668] = \"INT_VEC3\";\n gl[gl[\"INT_VEC4\"] = 35669] = \"INT_VEC4\";\n gl[gl[\"BOOL\"] = 35670] = \"BOOL\";\n gl[gl[\"BOOL_VEC2\"] = 35671] = \"BOOL_VEC2\";\n gl[gl[\"BOOL_VEC3\"] = 35672] = \"BOOL_VEC3\";\n gl[gl[\"BOOL_VEC4\"] = 35673] = \"BOOL_VEC4\";\n gl[gl[\"FLOAT_MAT2\"] = 35674] = \"FLOAT_MAT2\";\n gl[gl[\"FLOAT_MAT3\"] = 35675] = \"FLOAT_MAT3\";\n gl[gl[\"FLOAT_MAT4\"] = 35676] = \"FLOAT_MAT4\";\n gl[gl[\"SAMPLER_2D\"] = 35678] = \"SAMPLER_2D\";\n gl[gl[\"SAMPLER_CUBE\"] = 35680] = \"SAMPLER_CUBE\";\n gl[gl[\"VERTEX_ATTRIB_ARRAY_ENABLED\"] = 34338] = \"VERTEX_ATTRIB_ARRAY_ENABLED\";\n gl[gl[\"VERTEX_ATTRIB_ARRAY_SIZE\"] = 34339] = \"VERTEX_ATTRIB_ARRAY_SIZE\";\n gl[gl[\"VERTEX_ATTRIB_ARRAY_STRIDE\"] = 34340] = \"VERTEX_ATTRIB_ARRAY_STRIDE\";\n gl[gl[\"VERTEX_ATTRIB_ARRAY_TYPE\"] = 34341] = \"VERTEX_ATTRIB_ARRAY_TYPE\";\n gl[gl[\"VERTEX_ATTRIB_ARRAY_NORMALIZED\"] = 34922] = \"VERTEX_ATTRIB_ARRAY_NORMALIZED\";\n gl[gl[\"VERTEX_ATTRIB_ARRAY_POINTER\"] = 34373] = \"VERTEX_ATTRIB_ARRAY_POINTER\";\n gl[gl[\"VERTEX_ATTRIB_ARRAY_BUFFER_BINDING\"] = 34975] = \"VERTEX_ATTRIB_ARRAY_BUFFER_BINDING\";\n gl[gl[\"COMPILE_STATUS\"] = 35713] = \"COMPILE_STATUS\";\n gl[gl[\"LOW_FLOAT\"] = 36336] = \"LOW_FLOAT\";\n gl[gl[\"MEDIUM_FLOAT\"] = 36337] = \"MEDIUM_FLOAT\";\n gl[gl[\"HIGH_FLOAT\"] = 36338] = \"HIGH_FLOAT\";\n gl[gl[\"LOW_INT\"] = 36339] = \"LOW_INT\";\n gl[gl[\"MEDIUM_INT\"] = 36340] = \"MEDIUM_INT\";\n gl[gl[\"HIGH_INT\"] = 36341] = \"HIGH_INT\";\n gl[gl[\"FRAMEBUFFER\"] = 36160] = \"FRAMEBUFFER\";\n gl[gl[\"RENDERBUFFER\"] = 36161] = \"RENDERBUFFER\";\n gl[gl[\"RGBA4\"] = 32854] = \"RGBA4\";\n gl[gl[\"RGB5_A1\"] = 32855] = \"RGB5_A1\";\n gl[gl[\"RGB565\"] = 36194] = \"RGB565\";\n gl[gl[\"DEPTH_COMPONENT16\"] = 33189] = \"DEPTH_COMPONENT16\";\n gl[gl[\"STENCIL_INDEX\"] = 6401] = \"STENCIL_INDEX\";\n gl[gl[\"STENCIL_INDEX8\"] = 36168] = \"STENCIL_INDEX8\";\n gl[gl[\"DEPTH_STENCIL\"] = 34041] = \"DEPTH_STENCIL\";\n gl[gl[\"RENDERBUFFER_WIDTH\"] = 36162] = \"RENDERBUFFER_WIDTH\";\n gl[gl[\"RENDERBUFFER_HEIGHT\"] = 36163] = \"RENDERBUFFER_HEIGHT\";\n gl[gl[\"RENDERBUFFER_INTERNAL_FORMAT\"] = 36164] = \"RENDERBUFFER_INTERNAL_FORMAT\";\n gl[gl[\"RENDERBUFFER_RED_SIZE\"] = 36176] = \"RENDERBUFFER_RED_SIZE\";\n gl[gl[\"RENDERBUFFER_GREEN_SIZE\"] = 36177] = \"RENDERBUFFER_GREEN_SIZE\";\n gl[gl[\"RENDERBUFFER_BLUE_SIZE\"] = 36178] = \"RENDERBUFFER_BLUE_SIZE\";\n gl[gl[\"RENDERBUFFER_ALPHA_SIZE\"] = 36179] = \"RENDERBUFFER_ALPHA_SIZE\";\n gl[gl[\"RENDERBUFFER_DEPTH_SIZE\"] = 36180] = \"RENDERBUFFER_DEPTH_SIZE\";\n gl[gl[\"RENDERBUFFER_STENCIL_SIZE\"] = 36181] = \"RENDERBUFFER_STENCIL_SIZE\";\n gl[gl[\"FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE\"] = 36048] = \"FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE\";\n gl[gl[\"FRAMEBUFFER_ATTACHMENT_OBJECT_NAME\"] = 36049] = \"FRAMEBUFFER_ATTACHMENT_OBJECT_NAME\";\n gl[gl[\"FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL\"] = 36050] = \"FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL\";\n gl[gl[\"FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE\"] = 36051] = \"FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE\";\n gl[gl[\"COLOR_ATTACHMENT0\"] = 36064] = \"COLOR_ATTACHMENT0\";\n gl[gl[\"DEPTH_ATTACHMENT\"] = 36096] = \"DEPTH_ATTACHMENT\";\n gl[gl[\"STENCIL_ATTACHMENT\"] = 36128] = \"STENCIL_ATTACHMENT\";\n gl[gl[\"DEPTH_STENCIL_ATTACHMENT\"] = 33306] = \"DEPTH_STENCIL_ATTACHMENT\";\n gl[gl[\"NONE\"] = 0] = \"NONE\";\n gl[gl[\"FRAMEBUFFER_COMPLETE\"] = 36053] = \"FRAMEBUFFER_COMPLETE\";\n gl[gl[\"FRAMEBUFFER_INCOMPLETE_ATTACHMENT\"] = 36054] = \"FRAMEBUFFER_INCOMPLETE_ATTACHMENT\";\n gl[gl[\"FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT\"] = 36055] = \"FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT\";\n gl[gl[\"FRAMEBUFFER_INCOMPLETE_DIMENSIONS\"] = 36057] = \"FRAMEBUFFER_INCOMPLETE_DIMENSIONS\";\n gl[gl[\"FRAMEBUFFER_UNSUPPORTED\"] = 36061] = \"FRAMEBUFFER_UNSUPPORTED\";\n gl[gl[\"FRAMEBUFFER_BINDING\"] = 36006] = \"FRAMEBUFFER_BINDING\";\n gl[gl[\"RENDERBUFFER_BINDING\"] = 36007] = \"RENDERBUFFER_BINDING\";\n gl[gl[\"MAX_RENDERBUFFER_SIZE\"] = 34024] = \"MAX_RENDERBUFFER_SIZE\";\n gl[gl[\"INVALID_FRAMEBUFFER_OPERATION\"] = 1286] = \"INVALID_FRAMEBUFFER_OPERATION\";\n gl[gl[\"UNPACK_FLIP_Y_WEBGL\"] = 37440] = \"UNPACK_FLIP_Y_WEBGL\";\n gl[gl[\"UNPACK_PREMULTIPLY_ALPHA_WEBGL\"] = 37441] = \"UNPACK_PREMULTIPLY_ALPHA_WEBGL\";\n gl[gl[\"CONTEXT_LOST_WEBGL\"] = 37442] = \"CONTEXT_LOST_WEBGL\";\n gl[gl[\"UNPACK_COLORSPACE_CONVERSION_WEBGL\"] = 37443] = \"UNPACK_COLORSPACE_CONVERSION_WEBGL\";\n gl[gl[\"BROWSER_DEFAULT_WEBGL\"] = 37444] = \"BROWSER_DEFAULT_WEBGL\";\n gl[gl[\"COPY_SRC\"] = 1] = \"COPY_SRC\";\n gl[gl[\"COPY_DST\"] = 2] = \"COPY_DST\";\n gl[gl[\"SAMPLED\"] = 4] = \"SAMPLED\";\n gl[gl[\"STORAGE\"] = 8] = \"STORAGE\";\n gl[gl[\"RENDER_ATTACHMENT\"] = 16] = \"RENDER_ATTACHMENT\";\n})(gl || (gl = {}));\n//# sourceMappingURL=gl.js.map\n\n//# sourceURL=webpack:///./node_modules/@antv/g-webgpu-core/es/components/renderer/gl.js?");
/***/ }),
/***/ "./node_modules/@antv/g-webgpu-core/es/index.js":
/*!******************************************************!*\
!*** ./node_modules/@antv/g-webgpu-core/es/index.js ***!
\******************************************************/
/*! exports provided: createEntity, Component, ComponentManager, isSafari, gl, ConfigService, AST_TOKEN_TYPES, AST_NODE_TYPES, STORAGE_CLASS, Target, DefineValuePlaceholder */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"AST_TOKEN_TYPES\", function() { return AST_TOKEN_TYPES; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"AST_NODE_TYPES\", function() { return AST_NODE_TYPES; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"STORAGE_CLASS\", function() { return STORAGE_CLASS; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"Target\", function() { return Target; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"DefineValuePlaceholder\", function() { return DefineValuePlaceholder; });\n/* harmony import */ var _ComponentManager__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./ComponentManager */ \"./node_modules/@antv/g-webgpu-core/es/ComponentManager.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Component\", function() { return _ComponentManager__WEBPACK_IMPORTED_MODULE_0__[\"Component\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ComponentManager\", function() { return _ComponentManager__WEBPACK_IMPORTED_MODULE_0__[\"ComponentManager\"]; });\n\n/* harmony import */ var _components_renderer_gl__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./components/renderer/gl */ \"./node_modules/@antv/g-webgpu-core/es/components/renderer/gl.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"gl\", function() { return _components_renderer_gl__WEBPACK_IMPORTED_MODULE_1__[\"gl\"]; });\n\n/* harmony import */ var _Entity__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./Entity */ \"./node_modules/@antv/g-webgpu-core/es/Entity.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"createEntity\", function() { return _Entity__WEBPACK_IMPORTED_MODULE_2__[\"createEntity\"]; });\n\n/* harmony import */ var _services_config_ConfigService__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./services/config/ConfigService */ \"./node_modules/@antv/g-webgpu-core/es/services/config/ConfigService.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ConfigService\", function() { return _services_config_ConfigService__WEBPACK_IMPORTED_MODULE_3__[\"ConfigService\"]; });\n\n/* harmony import */ var _utils_isSafari__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./utils/isSafari */ \"./node_modules/@antv/g-webgpu-core/es/utils/isSafari.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"isSafari\", function() { return _utils_isSafari__WEBPACK_IMPORTED_MODULE_4__[\"isSafari\"]; });\n\n\n\n\n\n\nvar AST_TOKEN_TYPES;\n(function (AST_TOKEN_TYPES) {\n AST_TOKEN_TYPES[\"Void\"] = \"Void\";\n AST_TOKEN_TYPES[\"Boolean\"] = \"Boolean\";\n AST_TOKEN_TYPES[\"Float\"] = \"Float\";\n AST_TOKEN_TYPES[\"Uint32\"] = \"Uint32\";\n AST_TOKEN_TYPES[\"Int32\"] = \"Int32\";\n AST_TOKEN_TYPES[\"Vector\"] = \"Vector\";\n AST_TOKEN_TYPES[\"Vector2Float\"] = \"vec2\";\n AST_TOKEN_TYPES[\"Vector3Float\"] = \"vec3\";\n AST_TOKEN_TYPES[\"Vector4Float\"] = \"vec4\";\n AST_TOKEN_TYPES[\"Vector2Boolean\"] = \"vec2\";\n AST_TOKEN_TYPES[\"Vector3Boolean\"] = \"vec3\";\n AST_TOKEN_TYPES[\"Vector4Boolean\"] = \"vec4\";\n AST_TOKEN_TYPES[\"Vector2Uint\"] = \"vec2\";\n AST_TOKEN_TYPES[\"Vector3Uint\"] = \"vec3\";\n AST_TOKEN_TYPES[\"Vector4Uint\"] = \"vec4\";\n AST_TOKEN_TYPES[\"Vector2Int\"] = \"vec2\";\n AST_TOKEN_TYPES[\"Vector3Int\"] = \"vec3\";\n AST_TOKEN_TYPES[\"Vector4Int\"] = \"vec4\";\n AST_TOKEN_TYPES[\"Matrix\"] = \"Matrix\";\n AST_TOKEN_TYPES[\"Matrix3x3Float\"] = \"mat3x3\";\n AST_TOKEN_TYPES[\"Matrix4x4Float\"] = \"mat4x4\";\n AST_TOKEN_TYPES[\"Struct\"] = \"Struct\";\n AST_TOKEN_TYPES[\"FloatArray\"] = \"Float[]\";\n AST_TOKEN_TYPES[\"Vector4FloatArray\"] = \"vec4[]\";\n})(AST_TOKEN_TYPES || (AST_TOKEN_TYPES = {}));\nvar AST_NODE_TYPES;\n(function (AST_NODE_TYPES) {\n AST_NODE_TYPES[\"Program\"] = \"Program\";\n AST_NODE_TYPES[\"Identifier\"] = \"Identifier\";\n AST_NODE_TYPES[\"VariableDeclaration\"] = \"VariableDeclaration\";\n AST_NODE_TYPES[\"BlockStatement\"] = \"BlockStatement\";\n AST_NODE_TYPES[\"ReturnStatement\"] = \"ReturnStatement\";\n AST_NODE_TYPES[\"FunctionDeclaration\"] = \"FunctionDeclaration\";\n AST_NODE_TYPES[\"VariableDeclarator\"] = \"VariableDeclarator\";\n AST_NODE_TYPES[\"AssignmentExpression\"] = \"AssignmentExpression\";\n AST_NODE_TYPES[\"LogicalExpression\"] = \"LogicalExpression\";\n AST_NODE_TYPES[\"BinaryExpression\"] = \"BinaryExpression\";\n AST_NODE_TYPES[\"ArrayExpression\"] = \"ArrayExpression\";\n AST_NODE_TYPES[\"UnaryExpression\"] = \"UnaryExpression\";\n AST_NODE_TYPES[\"UpdateExpression\"] = \"UpdateExpression\";\n AST_NODE_TYPES[\"FunctionExpression\"] = \"FunctionExpression\";\n AST_NODE_TYPES[\"MemberExpression\"] = \"MemberExpression\";\n AST_NODE_TYPES[\"ConditionalExpression\"] = \"ConditionalExpression\";\n AST_NODE_TYPES[\"ExpressionStatement\"] = \"ExpressionStatement\";\n AST_NODE_TYPES[\"CallExpression\"] = \"CallExpression\";\n AST_NODE_TYPES[\"NumThreadStatement\"] = \"NumThreadStatement\";\n AST_NODE_TYPES[\"StorageStatement\"] = \"StorageStatement\";\n AST_NODE_TYPES[\"DoWhileStatement\"] = \"DoWhileStatement\";\n AST_NODE_TYPES[\"WhileStatement\"] = \"WhileStatement\";\n AST_NODE_TYPES[\"ForStatement\"] = \"ForStatement\";\n AST_NODE_TYPES[\"BreakStatement\"] = \"BreakStatement\";\n AST_NODE_TYPES[\"ContinueStatement\"] = \"ContinueStatement\";\n AST_NODE_TYPES[\"IfStatement\"] = \"IfStatement\";\n AST_NODE_TYPES[\"ImportedFunctionStatement\"] = \"ImportedFunctionStatement\";\n})(AST_NODE_TYPES || (AST_NODE_TYPES = {}));\nvar STORAGE_CLASS;\n(function (STORAGE_CLASS) {\n STORAGE_CLASS[\"Input\"] = \"Input\";\n STORAGE_CLASS[\"Output\"] = \"Output\";\n STORAGE_CLASS[\"Uniform\"] = \"Uniform\";\n STORAGE_CLASS[\"Workgroup\"] = \"Workgroup\";\n STORAGE_CLASS[\"UniformConstant\"] = \"UniformConstant\";\n STORAGE_CLASS[\"Image\"] = \"Image\";\n STORAGE_CLASS[\"StorageBuffer\"] = \"StorageBuffer\";\n STORAGE_CLASS[\"Private\"] = \"Private\";\n STORAGE_CLASS[\"Function\"] = \"Function\";\n})(STORAGE_CLASS || (STORAGE_CLASS = {}));\n/**\n * 根据目标平台生成 Shader 代码\n * * WebGL GLSL 1.0\n * * WebGPU Chrome/Edge GLSL 4.5 & WGSL @see https://gpuweb.github.io/gpuweb/wgsl.html\n * * Safari WHLSL (maybe deprecated)\n */\nvar Target;\n(function (Target) {\n Target[\"GLSL100\"] = \"GLSL100\";\n Target[\"GLSL450\"] = \"GLSL450\";\n Target[\"WGSL\"] = \"WGSL\";\n})(Target || (Target = {}));\nvar DefineValuePlaceholder = '__DefineValuePlaceholder__';\n\n//# sourceMappingURL=index.js.map\n\n//# sourceURL=webpack:///./node_modules/@antv/g-webgpu-core/es/index.js?");
/***/ }),
/***/ "./node_modules/@antv/g-webgpu-core/es/services/config/ConfigService.js":
/*!******************************************************************************!*\
!*** ./node_modules/@antv/g-webgpu-core/es/services/config/ConfigService.js ***!
\******************************************************************************/
/*! exports provided: ConfigService */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"ConfigService\", function() { return ConfigService; });\n/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/classCallCheck */ \"./node_modules/@babel/runtime/helpers/classCallCheck.js\");\n/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/createClass */ \"./node_modules/@babel/runtime/helpers/createClass.js\");\n/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1__);\n\n\nvar ConfigService = /*#__PURE__*/function () {\n function ConfigService() {\n _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0___default()(this, ConfigService);\n this.config = void 0;\n }\n _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1___default()(ConfigService, [{\n key: \"get\",\n value: function get() {\n return this.config;\n }\n }, {\n key: \"set\",\n value: function set(config) {\n this.config = config;\n }\n }]);\n return ConfigService;\n}();\n//# sourceMappingURL=ConfigService.js.map\n\n//# sourceURL=webpack:///./node_modules/@antv/g-webgpu-core/es/services/config/ConfigService.js?");
/***/ }),
/***/ "./node_modules/@antv/g-webgpu-core/es/utils/isSafari.js":
/*!***************************************************************!*\
!*** ./node_modules/@antv/g-webgpu-core/es/utils/isSafari.js ***!
\***************************************************************/
/*! exports provided: isSafari */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"isSafari\", function() { return isSafari; });\nvar isSafari = typeof navigator !== 'undefined' && /Version\\/[\\d\\.]+.*Safari/.test(navigator.userAgent);\n//# sourceMappingURL=isSafari.js.map\n\n//# sourceURL=webpack:///./node_modules/@antv/g-webgpu-core/es/utils/isSafari.js?");
/***/ }),
/***/ "./node_modules/@antv/g-webgpu-engine/es/index.js":
/*!********************************************************!*\
!*** ./node_modules/@antv/g-webgpu-engine/es/index.js ***!
\********************************************************/
/*! exports provided: WebGLEngine */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _webgl__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./webgl */ \"./node_modules/@antv/g-webgpu-engine/es/webgl/index.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"WebGLEngine\", function() { return _webgl__WEBPACK_IMPORTED_MODULE_0__[\"WebGLEngine\"]; });\n\n\n\n//# sourceMappingURL=index.js.map\n\n//# sourceURL=webpack:///./node_modules/@antv/g-webgpu-engine/es/index.js?");
/***/ }),
/***/ "./node_modules/@antv/g-webgpu-engine/es/utils/uniform.js":
/*!****************************************************************!*\
!*** ./node_modules/@antv/g-webgpu-engine/es/utils/uniform.js ***!
\****************************************************************/
/*! exports provided: extractUniforms */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"extractUniforms\", function() { return extractUniforms; });\n/* harmony import */ var lodash_isTypedArray__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! lodash/isTypedArray */ \"./node_modules/lodash/isTypedArray.js\");\n/* harmony import */ var lodash_isTypedArray__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(lodash_isTypedArray__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var lodash_isPlainObject__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! lodash/isPlainObject */ \"./node_modules/lodash/isPlainObject.js\");\n/* harmony import */ var lodash_isPlainObject__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(lodash_isPlainObject__WEBPACK_IMPORTED_MODULE_1__);\n\n\n/**\n * 考虑结构体命名, eg:\n * a: { b: 1 } -> 'a.b'\n * a: [ { b: 1 } ] -> 'a[0].b'\n */\nfunction extractUniforms(uniforms) {\n var extractedUniforms = {};\n Object.keys(uniforms).forEach(function (uniformName) {\n extractUniformsRecursively(uniformName, uniforms[uniformName], extractedUniforms, '');\n });\n return extractedUniforms;\n}\nfunction extractUniformsRecursively(uniformName, uniformValue, uniforms, prefix) {\n if (uniformValue === null || typeof uniformValue === 'number' ||\n // u_A: 1\n typeof uniformValue === 'boolean' ||\n // u_A: false\n Array.isArray(uniformValue) && typeof uniformValue[0] === 'number' ||\n // u_A: [1, 2, 3]\n lodash_isTypedArray__WEBPACK_IMPORTED_MODULE_0___default()(uniformValue) ||\n // u_A: Float32Array\n // @ts-ignore\n uniformValue === '' ||\n // @ts-ignore\n uniformValue.resize !== undefined) {\n uniforms[\"\".concat(prefix && prefix + '.').concat(uniformName)] = uniformValue;\n return;\n }\n\n // u_Struct.a.b.c\n if (lodash_isPlainObject__WEBPACK_IMPORTED_MODULE_1___default()(uniformValue)) {\n Object.keys(uniformValue).forEach(function (childName) {\n extractUniformsRecursively(childName,\n // @ts-ignore\n uniformValue[childName], uniforms, \"\".concat(prefix && prefix + '.').concat(uniformName));\n });\n }\n\n // u_Struct[0].a\n if (Array.isArray(uniformValue)) {\n // @ts-ignore\n uniformValue.forEach(function (child, idx) {\n Object.keys(child).forEach(function (childName) {\n extractUniformsRecursively(childName,\n // @ts-ignore\n child[childName], uniforms, \"\".concat(prefix && prefix + '.').concat(uniformName, \"[\").concat(idx, \"]\"));\n });\n });\n }\n}\n//# sourceMappingURL=uniform.js.map\n\n//# sourceURL=webpack:///./node_modules/@antv/g-webgpu-engine/es/utils/uniform.js?");
/***/ }),
/***/ "./node_modules/@antv/g-webgpu-engine/es/webgl/ReglAttribute.js":
/*!**********************************************************************!*\
!*** ./node_modules/@antv/g-webgpu-engine/es/webgl/ReglAttribute.js ***!
\**********************************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return ReglAttribute; });\n/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/classCallCheck */ \"./node_modules/@babel/runtime/helpers/classCallCheck.js\");\n/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/createClass */ \"./node_modules/@babel/runtime/helpers/createClass.js\");\n/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1__);\n\n\n/**\n * @see https://github.com/regl-project/regl/blob/gh-pages/API.md#attributes\n */\nvar ReglAttribute = /*#__PURE__*/function () {\n function ReglAttribute(gl, options) {\n _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0___default()(this, ReglAttribute);\n this.attribute = void 0;\n this.buffer = void 0;\n var buffer = options.buffer,\n offset = options.offset,\n stride = options.stride,\n normalized = options.normalized,\n size = options.size,\n divisor = options.divisor;\n this.buffer = buffer;\n this.attribute = {\n buffer: buffer.get(),\n offset: offset || 0,\n stride: stride || 0,\n normalized: normalized || false,\n divisor: divisor || 0\n };\n if (size) {\n this.attribute.size = size;\n }\n }\n _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1___default()(ReglAttribute, [{\n key: \"get\",\n value: function get() {\n return this.attribute;\n }\n }, {\n key: \"updateBuffer\",\n value: function updateBuffer(options) {\n this.buffer.subData(options);\n }\n }, {\n key: \"destroy\",\n value: function destroy() {\n this.buffer.destroy();\n }\n }]);\n return ReglAttribute;\n}();\n\n//# sourceMappingURL=ReglAttribute.js.map\n\n//# sourceURL=webpack:///./node_modules/@antv/g-webgpu-engine/es/webgl/ReglAttribute.js?");
/***/ }),
/***/ "./node_modules/@antv/g-webgpu-engine/es/webgl/ReglBuffer.js":
/*!*******************************************************************!*\
!*** ./node_modules/@antv/g-webgpu-engine/es/webgl/ReglBuffer.js ***!
\*******************************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return ReglBuffer; });\n/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/classCallCheck */ \"./node_modules/@babel/runtime/helpers/classCallCheck.js\");\n/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/createClass */ \"./node_modules/@babel/runtime/helpers/createClass.js\");\n/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _antv_g_webgpu_core__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @antv/g-webgpu-core */ \"./node_modules/@antv/g-webgpu-core/es/index.js\");\n/* harmony import */ var _constants__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./constants */ \"./node_modules/@antv/g-webgpu-engine/es/webgl/constants.js\");\n\n\n\n\n\n/**\n * adaptor for regl.Buffer\n * @see https://github.com/regl-project/regl/blob/gh-pages/API.md#buffers\n */\nvar ReglBuffer = /*#__PURE__*/function () {\n function ReglBuffer(reGl, options) {\n _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0___default()(this, ReglBuffer);\n this.buffer = void 0;\n var data = options.data,\n usage = options.usage,\n type = options.type;\n // @ts-ignore\n this.buffer = reGl.buffer({\n data: data,\n usage: _constants__WEBPACK_IMPORTED_MODULE_3__[\"usageMap\"][usage || _antv_g_webgpu_core__WEBPACK_IMPORTED_MODULE_2__[\"gl\"].STATIC_DRAW],\n type: _constants__WEBPACK_IMPORTED_MODULE_3__[\"dataTypeMap\"][type || _antv_g_webgpu_core__WEBPACK_IMPORTED_MODULE_2__[\"gl\"].UNSIGNED_BYTE]\n // length: 0,\n });\n }\n _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1___default()(ReglBuffer, [{\n key: \"get\",\n value: function get() {\n return this.buffer;\n }\n }, {\n key: \"destroy\",\n value: function destroy() {\n // this.buffer.destroy();\n }\n }, {\n key: \"subData\",\n value: function subData(_ref) {\n var data = _ref.data,\n offset = _ref.offset;\n // @ts-ignore\n this.buffer.subdata(data, offset);\n }\n }]);\n return ReglBuffer;\n}();\n\n//# sourceMappingURL=ReglBuffer.js.map\n\n//# sourceURL=webpack:///./node_modules/@antv/g-webgpu-engine/es/webgl/ReglBuffer.js?");
/***/ }),
/***/ "./node_modules/@antv/g-webgpu-engine/es/webgl/ReglComputeModel.js":
/*!*************************************************************************!*\
!*** ./node_modules/@antv/g-webgpu-engine/es/webgl/ReglComputeModel.js ***!
\*************************************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return ReglComputeModel; });\n/* harmony import */ var _babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/toConsumableArray */ \"./node_modules/@babel/runtime/helpers/toConsumableArray.js\");\n/* harmony import */ var _babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/defineProperty */ \"./node_modules/@babel/runtime/helpers/defineProperty.js\");\n/* harmony import */ var _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/asyncToGenerator */ \"./node_modules/@babel/runtime/helpers/asyncToGenerator.js\");\n/* harmony import */ var _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @babel/runtime/helpers/classCallCheck */ \"./node_modules/@babel/runtime/helpers/classCallCheck.js\");\n/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @babel/runtime/helpers/createClass */ \"./node_modules/@babel/runtime/helpers/createClass.js\");\n/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_4__);\n/* harmony import */ var lodash_isTypedArray__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! lodash/isTypedArray */ \"./node_modules/lodash/isTypedArray.js\");\n/* harmony import */ var lodash_isTypedArray__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(lodash_isTypedArray__WEBPACK_IMPORTED_MODULE_5__);\n/* harmony import */ var _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @babel/runtime/regenerator */ \"./node_modules/@babel/runtime/regenerator/index.js\");\n/* harmony import */ var _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_6__);\n/* harmony import */ var _antv_g_webgpu_core__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @antv/g-webgpu-core */ \"./node_modules/@antv/g-webgpu-core/es/index.js\");\n\n\n\n\n\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_1___default()(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\n\n\n/* babel-plugin-inline-import './shaders/quad.vert.glsl' */\nvar quadVert = \"attribute vec3 a_Position;\\nattribute vec2 a_TexCoord;\\n\\nvarying vec2 v_TexCoord;\\n\\nvoid main() {\\n gl_Position = vec4(a_Position, 1.0);\\n v_TexCoord = a_TexCoord;\\n}\";\nvar textureId = 0;\nvar debug = false;\n\n/**\n * adaptor for regl.DrawCommand\n */\nvar ReglComputeModel = /*#__PURE__*/function () {\n function ReglComputeModel(reGl, context) {\n var _this = this;\n _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_3___default()(this, ReglComputeModel);\n this.reGl = reGl;\n this.context = context;\n this.entity = Object(_antv_g_webgpu_core__WEBPACK_IMPORTED_MODULE_7__[\"createEntity\"])();\n this.texFBO = void 0;\n this.computeCommand = void 0;\n this.textureCache = {};\n this.outputTextureName = void 0;\n this.swapOutputTextureName = void 0;\n this.compiledPingpong = void 0;\n this.dynamicPingpong = void 0;\n var uniforms = {};\n this.context.uniforms.forEach(function (uniform) {\n var name = uniform.name,\n type = uniform.type,\n data = uniform.data,\n isReferer = uniform.isReferer,\n storageClass = uniform.storageClass;\n // store data with a 2D texture\n if (storageClass === _antv_g_webgpu_core__WEBPACK_IMPORTED_MODULE_7__[\"STORAGE_CLASS\"].StorageBuffer) {\n if (!isReferer) {\n _this.textureCache[name] = _this.calcDataTexture(name, type, data);\n var _this$textureCache$na = _this.textureCache[name],\n width = _this$textureCache$na.textureWidth,\n isOutput = _this$textureCache$na.isOutput;\n uniforms[\"\".concat(name, \"Size\")] = [width, width];\n if (isOutput) {\n _this.outputTextureName = name;\n if (_this.context.needPingpong) {\n _this.outputTextureName = \"\".concat(name, \"Output\");\n _this.textureCache[_this.outputTextureName] = _this.calcDataTexture(name, type, data);\n }\n }\n } else {\n // @ts-ignore\n _this.textureCache[name] = {\n data: undefined\n };\n // refer to another kernel's output,\n // the referred kernel may not have been initialized, so we use dynamic way here\n uniforms[\"\".concat(name, \"Size\")] = function () {\n return (\n // @ts-ignore\n data.compiledBundle.context.output.textureSize\n );\n };\n }\n uniforms[name] = function () {\n if (debug) {\n console.log(\"[\".concat(_this.entity, \"]: \").concat(name, \" \").concat(_this.textureCache[name].id));\n }\n return _this.textureCache[name].texture;\n };\n } else if (storageClass === _antv_g_webgpu_core__WEBPACK_IMPORTED_MODULE_7__[\"STORAGE_CLASS\"].Uniform) {\n if (data && (Array.isArray(data) || lodash_isTypedArray__WEBPACK_IMPORTED_MODULE_5___default()(data)) && data.length > 16) {\n // up to mat4 which includes 16 elements\n throw new Error(\"invalid data type \".concat(type));\n }\n // get uniform dynamically\n uniforms[name] = function () {\n return uniform.data;\n };\n }\n });\n var _this$getOuputDataTex = this.getOuputDataTexture(),\n textureWidth = _this$getOuputDataTex.textureWidth,\n texelCount = _this$getOuputDataTex.texelCount;\n\n // 传入 output 纹理尺寸和数据长度,便于多余的 texel 提前退出\n uniforms.u_OutputTextureSize = [textureWidth, textureWidth];\n uniforms.u_OutputTexelCount = texelCount;\n\n // 保存在 Kernel 的上下文中,供其他 Kernel 引用\n this.context.output.textureSize = [textureWidth, textureWidth];\n var drawParams = {\n attributes: {\n a_Position: [[-1, 1, 0], [-1, -1, 0], [1, 1, 0], [1, -1, 0]],\n a_TexCoord: [[0, 1], [0, 0], [1, 1], [1, 0]]\n },\n frag: \"#ifdef GL_FRAGMENT_PRECISION_HIGH\\n precision highp float;\\n#else\\n precision mediump float;\\n#endif\\n\".concat(this.context.shader),\n uniforms: uniforms,\n vert: quadVert,\n // TODO: use a fullscreen triangle instead.\n primitive: 'triangle strip',\n count: 4\n };\n this.computeCommand = this.reGl(drawParams);\n }\n _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_4___default()(ReglComputeModel, [{\n key: \"run\",\n value: function run() {\n var _this2 = this;\n if (this.context.maxIteration > 1 && this.context.needPingpong) {\n this.compiledPingpong = true;\n }\n // need pingpong when (@in@out and execute(10)) or use `setBinding('out', self)`\n // this.needPingpong =\n // !!(this.context.maxIteration > 1 && this.context.needPingpong);\n\n // if (this.relativeOutputTextureNames.length) {\n // const { id, texture } = this.getOuputDataTexture();\n // this.relativeOutputTextureNames.forEach((name) => {\n // this.textureCache[name].id = id;\n // this.textureCache[name].texture = texture;\n // });\n // this.swap();\n // }\n\n if (this.compiledPingpong || this.dynamicPingpong) {\n this.swap();\n }\n this.texFBO = this.reGl.framebuffer({\n color: this.getOuputDataTexture().texture\n });\n this.texFBO.use(function () {\n _this2.computeCommand();\n });\n if (debug) {\n console.log(\"[\".concat(this.entity, \"]: output \").concat(this.getOuputDataTexture().id));\n }\n }\n }, {\n key: \"readData\",\n value: function () {\n var _readData = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_2___default()( /*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_6___default.a.mark(function _callee() {\n var _this3 = this;\n var pixels, _this$getOuputDataTex2, originalDataLength, elementsPerTexel, _this$getOuputDataTex3, typedArrayConstructor, formattedPixels, i;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_6___default.a.wrap(function _callee$(_context) {\n while (1) {\n switch (_context.prev = _context.next) {\n case 0:\n this.reGl({\n framebuffer: this.texFBO\n })(function () {\n pixels = _this3.reGl.read();\n });\n\n // @ts-ignore\n if (!pixels) {\n _context.next = 6;\n break;\n }\n _this$getOuputDataTex2 = this.getOuputDataTexture(), originalDataLength = _this$getOuputDataTex2.originalDataLength, elementsPerTexel = _this$getOuputDataTex2.elementsPerTexel, _this$getOuputDataTex3 = _this$getOuputDataTex2.typedArrayConstructor, typedArrayConstructor = _this$getOuputDataTex3 === void 0 ? Float32Array : _this$getOuputDataTex3;\n formattedPixels = [];\n if (elementsPerTexel !== 4) {\n for (i = 0; i < pixels.length; i += 4) {\n if (elementsPerTexel === 1) {\n formattedPixels.push(pixels[i]);\n } else if (elementsPerTexel === 2) {\n formattedPixels.push(pixels[i], pixels[i + 1]);\n } else {\n formattedPixels.push(pixels[i], pixels[i + 1], pixels[i + 2]);\n }\n }\n } else {\n // @ts-ignore\n formattedPixels = pixels;\n }\n\n // 截取多余的部分\n // @ts-ignore\n return _context.abrupt(\"return\", new typedArrayConstructor(formattedPixels.slice(0, originalDataLength)));\n case 6:\n return _context.abrupt(\"return\", new Float32Array());\n case 7:\n case \"end\":\n return _context.stop();\n }\n }\n }, _callee, this);\n }));\n function readData() {\n return _readData.apply(this, arguments);\n }\n return readData;\n }()\n }, {\n key: \"confirmInput\",\n value: function confirmInput(model, inputName) {\n var inputModel;\n // refer to self, same as pingpong\n if (this.entity === model.entity) {\n this.dynamicPingpong = true;\n inputModel = this;\n } else {\n inputModel = model;\n }\n this.textureCache[inputName].id = inputModel.getOuputDataTexture().id;\n this.textureCache[inputName].texture = inputModel.getOuputDataTexture().texture;\n if (debug) {\n console.log(\"[\".concat(this.entity, \"]: confirm input \").concat(inputName, \" from model \").concat(inputModel.entity, \", \").concat(inputModel.getOuputDataTexture().id));\n }\n }\n }, {\n key: \"updateUniform\",\n value: function updateUniform() {\n // already get uniform's data dynamically when created, do nothing here\n }\n }, {\n key: \"updateBuffer\",\n value: function updateBuffer(bufferName, data) {\n var offset = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0;\n // regenerate data texture\n var buffer = this.context.uniforms.find(function (_ref) {\n var name = _ref.name;\n return name === bufferName;\n });\n if (buffer) {\n var _this$calcDataTexture = this.calcDataTexture(bufferName, buffer.type, data),\n texture = _this$calcDataTexture.texture,\n paddingData = _this$calcDataTexture.data;\n\n // TODO: destroy outdated texture\n this.textureCache[bufferName].data = paddingData;\n this.textureCache[bufferName].texture = texture;\n }\n }\n }, {\n key: \"destroy\",\n value: function destroy() {\n // regl will destroy all resources\n }\n }, {\n key: \"swap\",\n value: function swap() {\n if (!this.swapOutputTextureName) {\n this.createSwapOutputDataTexture();\n }\n if (this.compiledPingpong) {\n var outputTextureUniformName = this.context.output.name;\n this.textureCache[outputTextureUniformName].id = this.getOuputDataTexture().id;\n this.textureCache[outputTextureUniformName].texture = this.getOuputDataTexture().texture;\n }\n var tmp = this.outputTextureName;\n this.outputTextureName = this.swapOutputTextureName;\n this.swapOutputTextureName = tmp;\n if (debug) {\n console.log(\"[\".concat(this.entity, \"]: after swap, output \").concat(this.getOuputDataTexture().id));\n }\n }\n }, {\n key: \"getOuputDataTexture\",\n value: function getOuputDataTexture() {\n return this.textureCache[this.outputTextureName];\n }\n }, {\n key: \"createSwapOutputDataTexture\",\n value: function createSwapOutputDataTexture() {\n var texture = this.cloneDataTexture(this.getOuputDataTexture());\n this.swapOutputTextureName = \"\".concat(this.entity, \"-swap\");\n this.textureCache[this.swapOutputTextureName] = texture;\n }\n }, {\n key: \"cloneDataTexture\",\n value: function cloneDataTexture(texture) {\n var data = texture.data,\n textureWidth = texture.textureWidth;\n return _objectSpread(_objectSpread({}, texture), {}, {\n id: textureId++,\n // @ts-ignore\n texture: this.reGl.texture({\n width: textureWidth,\n height: textureWidth,\n data: data,\n type: 'float'\n })\n });\n }\n }, {\n key: \"calcDataTexture\",\n value: function calcDataTexture(name, type, data) {\n var elementsPerTexel = 1;\n if (type === _antv_g_webgpu_core__WEBPACK_IMPORTED_MODULE_7__[\"AST_TOKEN_TYPES\"].Vector4FloatArray) {\n elementsPerTexel = 4;\n }\n\n // 用 0 补全不足 vec4 的部分\n var paddingData = [];\n for (var i = 0; i < data.length; i += elementsPerTexel) {\n if (elementsPerTexel === 1) {\n paddingData.push(data[i], 0, 0, 0);\n } else if (elementsPerTexel === 2) {\n paddingData.push(data[i], data[i + 1], 0, 0);\n } else if (elementsPerTexel === 3) {\n paddingData.push(data[i], data[i + 1], data[i + 2], 0);\n } else if (elementsPerTexel === 4) {\n paddingData.push(data[i], data[i + 1], data[i + 2], data[i + 3]);\n }\n }\n\n // 使用纹理存储,例如 Array(8) 使用 3 * 3 纹理,末尾空白使用 0 填充\n var originalDataLength = data.length;\n var texelCount = Math.ceil(originalDataLength / elementsPerTexel);\n var width = Math.ceil(Math.sqrt(texelCount));\n var paddingTexelCount = width * width;\n if (texelCount < paddingTexelCount) {\n paddingData.push.apply(paddingData, _babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_0___default()(new Array((paddingTexelCount - texelCount) * 4).fill(0)));\n }\n var texture = this.reGl.texture({\n width: width,\n height: width,\n data: paddingData,\n type: 'float'\n });\n return {\n id: textureId++,\n data: paddingData,\n originalDataLength: originalDataLength,\n typedArrayConstructor: lodash_isTypedArray__WEBPACK_IMPORTED_MODULE_5___default()(data) ? data.constructor : undefined,\n textureWidth: width,\n texture: texture,\n texelCount: texelCount,\n elementsPerTexel: elementsPerTexel,\n isOutput: name === this.context.output.name\n };\n }\n }]);\n return ReglComputeModel;\n}();\n\n//# sourceMappingURL=ReglComputeModel.js.map\n\n//# sourceURL=webpack:///./node_modules/@antv/g-webgpu-engine/es/webgl/ReglComputeModel.js?");
/***/ }),
/***/ "./node_modules/@antv/g-webgpu-engine/es/webgl/ReglElements.js":
/*!*********************************************************************!*\
!*** ./node_modules/@antv/g-webgpu-engine/es/webgl/ReglElements.js ***!
\*********************************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return ReglElements; });\n/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/classCallCheck */ \"./node_modules/@babel/runtime/helpers/classCallCheck.js\");\n/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/createClass */ \"./node_modules/@babel/runtime/helpers/createClass.js\");\n/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _antv_g_webgpu_core__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @antv/g-webgpu-core */ \"./node_modules/@antv/g-webgpu-core/es/index.js\");\n/* harmony import */ var _constants__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./constants */ \"./node_modules/@antv/g-webgpu-engine/es/webgl/constants.js\");\n\n\n\n\n\n/**\n * @see https://github.com/regl-project/regl/blob/gh-pages/API.md#elements\n */\nvar ReglElements = /*#__PURE__*/function () {\n function ReglElements(reGl, options) {\n _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0___default()(this, ReglElements);\n this.elements = void 0;\n var data = options.data,\n usage = options.usage,\n type = options.type,\n count = options.count;\n this.elements = reGl.elements({\n data: data,\n usage: _constants__WEBPACK_IMPORTED_MODULE_3__[\"usageMap\"][usage || _antv_g_webgpu_core__WEBPACK_IMPORTED_MODULE_2__[\"gl\"].STATIC_DRAW],\n type: _constants__WEBPACK_IMPORTED_MODULE_3__[\"dataTypeMap\"][type || _antv_g_webgpu_core__WEBPACK_IMPORTED_MODULE_2__[\"gl\"].UNSIGNED_BYTE],\n count: count\n });\n }\n _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1___default()(ReglElements, [{\n key: \"get\",\n value: function get() {\n return this.elements;\n }\n }, {\n key: \"subData\",\n value: function subData(_ref) {\n var data = _ref.data;\n this.elements.subdata(data);\n }\n }, {\n key: \"destroy\",\n value: function destroy() {\n this.elements.destroy();\n }\n }]);\n return ReglElements;\n}();\n\n//# sourceMappingURL=ReglElements.js.map\n\n//# sourceURL=webpack:///./node_modules/@antv/g-webgpu-engine/es/webgl/ReglElements.js?");
/***/ }),
/***/ "./node_modules/@antv/g-webgpu-engine/es/webgl/ReglFramebuffer.js":
/*!************************************************************************!*\
!*** ./node_modules/@antv/g-webgpu-engine/es/webgl/ReglFramebuffer.js ***!
\************************************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return ReglFramebuffer; });\n/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/classCallCheck */ \"./node_modules/@babel/runtime/helpers/classCallCheck.js\");\n/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/createClass */ \"./node_modules/@babel/runtime/helpers/createClass.js\");\n/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1__);\n\n\n/**\n * adaptor for regl.Framebuffer\n * @see https://github.com/regl-project/regl/blob/gh-pages/API.md#framebuffers\n */\nvar ReglFramebuffer = /*#__PURE__*/function () {\n function ReglFramebuffer(reGl, options) {\n _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0___default()(this, ReglFramebuffer);\n this.framebuffer = void 0;\n var width = options.width,\n height = options.height,\n color = options.color,\n colors = options.colors,\n depth = options.depth,\n stencil = options.stencil;\n var framebufferOptions = {\n width: width,\n height: height\n };\n if (Array.isArray(colors)) {\n framebufferOptions.colors = colors.map(function (c) {\n return c.get();\n });\n }\n if (color && typeof color !== 'boolean') {\n framebufferOptions.color = color.get();\n }\n\n // TODO: depth & stencil\n\n this.framebuffer = reGl.framebuffer(framebufferOptions);\n }\n _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1___default()(ReglFramebuffer, [{\n key: \"get\",\n value: function get() {\n return this.framebuffer;\n }\n }, {\n key: \"destroy\",\n value: function destroy() {\n this.framebuffer.destroy();\n }\n }, {\n key: \"resize\",\n value: function resize(_ref) {\n var width = _ref.width,\n height = _ref.height;\n this.framebuffer.resize(width, height);\n }\n }]);\n return ReglFramebuffer;\n}();\n\n//# sourceMappingURL=ReglFramebuffer.js.map\n\n//# sourceURL=webpack:///./node_modules/@antv/g-webgpu-engine/es/webgl/ReglFramebuffer.js?");
/***/ }),
/***/ "./node_modules/@antv/g-webgpu-engine/es/webgl/ReglModel.js":
/*!******************************************************************!*\
!*** ./node_modules/@antv/g-webgpu-engine/es/webgl/ReglModel.js ***!
\******************************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return ReglModel; });\n/* harmony import */ var _babel_runtime_helpers_typeof__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/typeof */ \"./node_modules/@babel/runtime/helpers/typeof.js\");\n/* harmony import */ var _babel_runtime_helpers_typeof__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_typeof__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/defineProperty */ \"./node_modules/@babel/runtime/helpers/defineProperty.js\");\n/* harmony import */ var _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/classCallCheck */ \"./node_modules/@babel/runtime/helpers/classCallCheck.js\");\n/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @babel/runtime/helpers/createClass */ \"./node_modules/@babel/runtime/helpers/createClass.js\");\n/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var _antv_g_webgpu_core__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @antv/g-webgpu-core */ \"./node_modules/@antv/g-webgpu-core/es/index.js\");\n/* harmony import */ var _utils_uniform__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../utils/uniform */ \"./node_modules/@antv/g-webgpu-engine/es/utils/uniform.js\");\n/* harmony import */ var _constants__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./constants */ \"./node_modules/@antv/g-webgpu-engine/es/webgl/constants.js\");\n\n\n\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_1___default()(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\n\n\n\n/**\n * adaptor for regl.DrawCommand\n */\nvar ReglModel = /*#__PURE__*/function () {\n function ReglModel(reGl, options) {\n _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_2___default()(this, ReglModel);\n this.reGl = void 0;\n this.drawCommand = void 0;\n this.uniforms = {};\n this.reGl = reGl;\n var vs = options.vs,\n fs = options.fs,\n defines = options.defines,\n attributes = options.attributes,\n uniforms = options.uniforms,\n primitive = options.primitive,\n count = options.count,\n elements = options.elements,\n depth = options.depth,\n blend = options.blend,\n stencil = options.stencil,\n cull = options.cull,\n instances = options.instances,\n scissor = options.scissor,\n viewport = options.viewport;\n var reglUniforms = {};\n if (uniforms) {\n this.uniforms = Object(_utils_uniform__WEBPACK_IMPORTED_MODULE_5__[\"extractUniforms\"])(uniforms);\n Object.keys(uniforms).forEach(function (uniformName) {\n // use regl prop API\n // @ts-ignore\n reglUniforms[uniformName] = reGl.prop(uniformName);\n });\n }\n var reglAttributes = {};\n Object.keys(attributes).forEach(function (name) {\n reglAttributes[name] = attributes[name].get();\n });\n var defineStmts = defines && this.generateDefines(defines) || '';\n var drawParams = {\n attributes: reglAttributes,\n frag: \"#ifdef GL_FRAGMENT_PRECISION_HIGH\\n precision highp float;\\n#else\\n precision mediump float;\\n#endif\\n\".concat(defineStmts, \"\\n\").concat(fs),\n uniforms: reglUniforms,\n vert: \"\\n\".concat(defineStmts, \"\\n\").concat(vs),\n primitive: _constants__WEBPACK_IMPORTED_MODULE_6__[\"primitiveMap\"][primitive === undefined ? _antv_g_webgpu_core__WEBPACK_IMPORTED_MODULE_4__[\"gl\"].TRIANGLES : primitive]\n };\n if (instances) {\n drawParams.instances = instances;\n }\n\n // elements 中可能包含 count,此时不应传入\n if (count) {\n drawParams.count = count;\n }\n if (elements) {\n drawParams.elements = elements.get();\n }\n if (scissor) {\n drawParams.scissor = scissor;\n }\n if (viewport) {\n drawParams.viewport = viewport;\n }\n this.initDepthDrawParams({\n depth: depth\n }, drawParams);\n this.initBlendDrawParams({\n blend: blend\n }, drawParams);\n this.initStencilDrawParams({\n stencil: stencil\n }, drawParams);\n this.initCullDrawParams({\n cull: cull\n }, drawParams);\n this.drawCommand = reGl(drawParams);\n }\n _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_3___default()(ReglModel, [{\n key: \"addUniforms\",\n value: function addUniforms(uniforms) {\n this.uniforms = _objectSpread(_objectSpread({}, this.uniforms), Object(_utils_uniform__WEBPACK_IMPORTED_MODULE_5__[\"extractUniforms\"])(uniforms));\n }\n }, {\n key: \"draw\",\n value: function draw(options) {\n var uniforms = _objectSpread(_objectSpread({}, this.uniforms), Object(_utils_uniform__WEBPACK_IMPORTED_MODULE_5__[\"extractUniforms\"])(options.uniforms || {}));\n var reglDrawProps = {};\n Object.keys(uniforms).forEach(function (uniformName) {\n var type = _babel_runtime_helpers_typeof__WEBPACK_IMPORTED_MODULE_0___default()(uniforms[uniformName]);\n if (type === 'boolean' || type === 'number' || Array.isArray(uniforms[uniformName]) ||\n // @ts-ignore\n uniforms[uniformName].BYTES_PER_ELEMENT) {\n reglDrawProps[uniformName] = uniforms[uniformName];\n } else if (type === 'string') {\n // TODO: image url\n } else {\n reglDrawProps[uniformName] = uniforms[uniformName].get();\n }\n });\n this.drawCommand(reglDrawProps);\n }\n }, {\n key: \"destroy\",\n value: function destroy() {\n // don't need do anything since we will call `rendererService.cleanup()`\n }\n\n /**\n * @see https://github.com/regl-project/regl/blob/gh-pages/API.md#depth-buffer\n */\n }, {\n key: \"initDepthDrawParams\",\n value: function initDepthDrawParams(_ref, drawParams) {\n var depth = _ref.depth;\n if (depth) {\n drawParams.depth = {\n enable: depth.enable === undefined ? true : !!depth.enable,\n mask: depth.mask === undefined ? true : !!depth.mask,\n func: _constants__WEBPACK_IMPORTED_MODULE_6__[\"depthFuncMap\"][depth.func || _antv_g_webgpu_core__WEBPACK_IMPORTED_MODULE_4__[\"gl\"].LESS],\n range: depth.range || [0, 1]\n };\n }\n }\n\n /**\n * @see https://github.com/regl-project/regl/blob/gh-pages/API.md#blending\n */\n }, {\n key: \"initBlendDrawParams\",\n value: function initBlendDrawParams(_ref2, drawParams) {\n var blend = _ref2.blend;\n if (blend) {\n var enable = blend.enable,\n func = blend.func,\n equation = blend.equation,\n _blend$color = blend.color,\n color = _blend$color === void 0 ? [0, 0, 0, 0] : _blend$color;\n // @ts-ignore\n drawParams.blend = {\n enable: !!enable,\n func: {\n srcRGB: _constants__WEBPACK_IMPORTED_MODULE_6__[\"blendFuncMap\"][func && func.srcRGB || _antv_g_webgpu_core__WEBPACK_IMPORTED_MODULE_4__[\"gl\"].SRC_ALPHA],\n srcAlpha: _constants__WEBPACK_IMPORTED_MODULE_6__[\"blendFuncMap\"][func && func.srcAlpha || _antv_g_webgpu_core__WEBPACK_IMPORTED_MODULE_4__[\"gl\"].SRC_ALPHA],\n dstRGB: _constants__WEBPACK_IMPORTED_MODULE_6__[\"blendFuncMap\"][func && func.dstRGB || _antv_g_webgpu_core__WEBPACK_IMPORTED_MODULE_4__[\"gl\"].ONE_MINUS_SRC_ALPHA],\n dstAlpha: _constants__WEBPACK_IMPORTED_MODULE_6__[\"blendFuncMap\"][func && func.dstAlpha || _antv_g_webgpu_core__WEBPACK_IMPORTED_MODULE_4__[\"gl\"].ONE_MINUS_SRC_ALPHA]\n },\n equation: {\n rgb: _constants__WEBPACK_IMPORTED_MODULE_6__[\"blendEquationMap\"][equation && equation.rgb || _antv_g_webgpu_core__WEBPACK_IMPORTED_MODULE_4__[\"gl\"].FUNC_ADD],\n alpha: _constants__WEBPACK_IMPORTED_MODULE_6__[\"blendEquationMap\"][equation && equation.alpha || _antv_g_webgpu_core__WEBPACK_IMPORTED_MODULE_4__[\"gl\"].FUNC_ADD]\n },\n color: color\n };\n }\n }\n\n /**\n * @see https://github.com/regl-project/regl/blob/gh-pages/API.md#stencil\n */\n }, {\n key: \"initStencilDrawParams\",\n value: function initStencilDrawParams(_ref3, drawParams) {\n var stencil = _ref3.stencil;\n if (stencil) {\n var enable = stencil.enable,\n _stencil$mask = stencil.mask,\n mask = _stencil$mask === void 0 ? -1 : _stencil$mask,\n _stencil$func = stencil.func,\n func = _stencil$func === void 0 ? {\n cmp: _antv_g_webgpu_core__WEBPACK_IMPORTED_MODULE_4__[\"gl\"].ALWAYS,\n ref: 0,\n mask: -1\n } : _stencil$func,\n _stencil$opFront = stencil.opFront,\n opFront = _stencil$opFront === void 0 ? {\n fail: _antv_g_webgpu_core__WEBPACK_IMPORTED_MODULE_4__[\"gl\"].KEEP,\n zfail: _antv_g_webgpu_core__WEBPACK_IMPORTED_MODULE_4__[\"gl\"].KEEP,\n zpass: _antv_g_webgpu_core__WEBPACK_IMPORTED_MODULE_4__[\"gl\"].KEEP\n } : _stencil$opFront,\n _stencil$opBack = stencil.opBack,\n opBack = _stencil$opBack === void 0 ? {\n fail: _antv_g_webgpu_core__WEBPACK_IMPORTED_MODULE_4__[\"gl\"].KEEP,\n zfail: _antv_g_webgpu_core__WEBPACK_IMPORTED_MODULE_4__[\"gl\"].KEEP,\n zpass: _antv_g_webgpu_core__WEBPACK_IMPORTED_MODULE_4__[\"gl\"].KEEP\n } : _stencil$opBack;\n drawParams.stencil = {\n enable: !!enable,\n mask: mask,\n func: _objectSpread(_objectSpread({}, func), {}, {\n cmp: _constants__WEBPACK_IMPORTED_MODULE_6__[\"stencilFuncMap\"][func.cmp]\n }),\n opFront: {\n fail: _constants__WEBPACK_IMPORTED_MODULE_6__[\"stencilOpMap\"][opFront.fail],\n zfail: _constants__WEBPACK_IMPORTED_MODULE_6__[\"stencilOpMap\"][opFront.zfail],\n zpass: _constants__WEBPACK_IMPORTED_MODULE_6__[\"stencilOpMap\"][opFront.zpass]\n },\n opBack: {\n fail: _constants__WEBPACK_IMPORTED_MODULE_6__[\"stencilOpMap\"][opBack.fail],\n zfail: _constants__WEBPACK_IMPORTED_MODULE_6__[\"stencilOpMap\"][opBack.zfail],\n zpass: _constants__WEBPACK_IMPORTED_MODULE_6__[\"stencilOpMap\"][opBack.zpass]\n }\n };\n }\n }\n\n /**\n * @see https://github.com/regl-project/regl/blob/gh-pages/API.md#culling\n */\n }, {\n key: \"initCullDrawParams\",\n value: function initCullDrawParams(_ref4, drawParams) {\n var cull = _ref4.cull;\n if (cull) {\n var enable = cull.enable,\n _cull$face = cull.face,\n face = _cull$face === void 0 ? _antv_g_webgpu_core__WEBPACK_IMPORTED_MODULE_4__[\"gl\"].BACK : _cull$face;\n drawParams.cull = {\n enable: !!enable,\n face: _constants__WEBPACK_IMPORTED_MODULE_6__[\"cullFaceMap\"][face]\n };\n }\n }\n }, {\n key: \"generateDefines\",\n value: function generateDefines(defines) {\n return Object.keys(defines).map(function (name) {\n return \"#define \".concat(name, \" \").concat(Number(defines[name]));\n }).join('\\n');\n }\n }]);\n return ReglModel;\n}();\n\n//# sourceMappingURL=ReglModel.js.map\n\n//# sourceURL=webpack:///./node_modules/@antv/g-webgpu-engine/es/webgl/ReglModel.js?");
/***/ }),
/***/ "./node_modules/@antv/g-webgpu-engine/es/webgl/ReglTexture2D.js":
/*!**********************************************************************!*\
!*** ./node_modules/@antv/g-webgpu-engine/es/webgl/ReglTexture2D.js ***!
\**********************************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return ReglTexture2D; });\n/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/classCallCheck */ \"./node_modules/@babel/runtime/helpers/classCallCheck.js\");\n/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/createClass */ \"./node_modules/@babel/runtime/helpers/createClass.js\");\n/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _antv_g_webgpu_core__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @antv/g-webgpu-core */ \"./node_modules/@antv/g-webgpu-core/es/index.js\");\n/* harmony import */ var _constants__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./constants */ \"./node_modules/@antv/g-webgpu-engine/es/webgl/constants.js\");\n\n\n\n\n\n/**\n * adaptor for regl.Buffer\n * @see https://github.com/regl-project/regl/blob/gh-pages/API.md#buffers\n */\nvar ReglTexture2D = /*#__PURE__*/function () {\n function ReglTexture2D(reGl, options) {\n _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0___default()(this, ReglTexture2D);\n this.texture = void 0;\n this.width = void 0;\n this.height = void 0;\n var data = options.data,\n _options$type = options.type,\n type = _options$type === void 0 ? _antv_g_webgpu_core__WEBPACK_IMPORTED_MODULE_2__[\"gl\"].UNSIGNED_BYTE : _options$type,\n width = options.width,\n height = options.height,\n _options$flipY = options.flipY,\n flipY = _options$flipY === void 0 ? false : _options$flipY,\n _options$format = options.format,\n format = _options$format === void 0 ? _antv_g_webgpu_core__WEBPACK_IMPORTED_MODULE_2__[\"gl\"].RGBA : _options$format,\n _options$mipmap = options.mipmap,\n mipmap = _options$mipmap === void 0 ? false : _options$mipmap,\n _options$wrapS = options.wrapS,\n wrapS = _options$wrapS === void 0 ? _antv_g_webgpu_core__WEBPACK_IMPORTED_MODULE_2__[\"gl\"].CLAMP_TO_EDGE : _options$wrapS,\n _options$wrapT = options.wrapT,\n wrapT = _options$wrapT === void 0 ? _antv_g_webgpu_core__WEBPACK_IMPORTED_MODULE_2__[\"gl\"].CLAMP_TO_EDGE : _options$wrapT,\n _options$aniso = options.aniso,\n aniso = _options$aniso === void 0 ? 0 : _options$aniso,\n _options$alignment = options.alignment,\n alignment = _options$alignment === void 0 ? 1 : _options$alignment,\n _options$premultiplyA = options.premultiplyAlpha,\n premultiplyAlpha = _options$premultiplyA === void 0 ? false : _options$premultiplyA,\n _options$mag = options.mag,\n mag = _options$mag === void 0 ? _antv_g_webgpu_core__WEBPACK_IMPORTED_MODULE_2__[\"gl\"].NEAREST : _options$mag,\n _options$min = options.min,\n min = _options$min === void 0 ? _antv_g_webgpu_core__WEBPACK_IMPORTED_MODULE_2__[\"gl\"].NEAREST : _options$min,\n _options$colorSpace = options.colorSpace,\n colorSpace = _options$colorSpace === void 0 ? _antv_g_webgpu_core__WEBPACK_IMPORTED_MODULE_2__[\"gl\"].BROWSER_DEFAULT_WEBGL : _options$colorSpace;\n this.width = width;\n this.height = height;\n var textureOptions = {\n width: width,\n height: height,\n // @ts-ignore\n type: _constants__WEBPACK_IMPORTED_MODULE_3__[\"dataTypeMap\"][type],\n format: _constants__WEBPACK_IMPORTED_MODULE_3__[\"formatMap\"][format],\n wrapS: _constants__WEBPACK_IMPORTED_MODULE_3__[\"wrapModeMap\"][wrapS],\n wrapT: _constants__WEBPACK_IMPORTED_MODULE_3__[\"wrapModeMap\"][wrapT],\n // @ts-ignore\n mag: _constants__WEBPACK_IMPORTED_MODULE_3__[\"filterMap\"][mag],\n min: _constants__WEBPACK_IMPORTED_MODULE_3__[\"filterMap\"][min],\n alignment: alignment,\n flipY: flipY,\n colorSpace: _constants__WEBPACK_IMPORTED_MODULE_3__[\"colorSpaceMap\"][colorSpace],\n premultiplyAlpha: premultiplyAlpha,\n aniso: aniso\n };\n if (data) {\n textureOptions.data = data;\n }\n if (typeof mipmap === 'number') {\n textureOptions.mipmap = _constants__WEBPACK_IMPORTED_MODULE_3__[\"mipmapMap\"][mipmap];\n } else if (typeof mipmap === 'boolean') {\n textureOptions.mipmap = mipmap;\n }\n this.texture = reGl.texture(textureOptions);\n }\n _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1___default()(ReglTexture2D, [{\n key: \"get\",\n value: function get() {\n return this.texture;\n }\n }, {\n key: \"update\",\n value: function update() {\n // @ts-ignore\n this.texture._texture.bind();\n }\n }, {\n key: \"resize\",\n value: function resize(_ref) {\n var width = _ref.width,\n height = _ref.height;\n this.texture.resize(width, height);\n this.width = width;\n this.height = height;\n }\n }, {\n key: \"destroy\",\n value: function destroy() {\n this.texture.destroy();\n }\n }]);\n return ReglTexture2D;\n}();\n\n//# sourceMappingURL=ReglTexture2D.js.map\n\n//# sourceURL=webpack:///./node_modules/@antv/g-webgpu-engine/es/webgl/ReglTexture2D.js?");
/***/ }),
/***/ "./node_modules/@antv/g-webgpu-engine/es/webgl/constants.js":
/*!******************************************************************!*\
!*** ./node_modules/@antv/g-webgpu-engine/es/webgl/constants.js ***!
\******************************************************************/
/*! exports provided: primitiveMap, usageMap, dataTypeMap, formatMap, mipmapMap, filterMap, wrapModeMap, colorSpaceMap, depthFuncMap, blendEquationMap, blendFuncMap, stencilFuncMap, stencilOpMap, cullFaceMap */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"primitiveMap\", function() { return primitiveMap; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"usageMap\", function() { return usageMap; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"dataTypeMap\", function() { return dataTypeMap; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"formatMap\", function() { return formatMap; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"mipmapMap\", function() { return mipmapMap; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"filterMap\", function() { return filterMap; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"wrapModeMap\", function() { return wrapModeMap; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"colorSpaceMap\", function() { return colorSpaceMap; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"depthFuncMap\", function() { return depthFuncMap; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"blendEquationMap\", function() { return blendEquationMap; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"blendFuncMap\", function() { return blendFuncMap; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"stencilFuncMap\", function() { return stencilFuncMap; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"stencilOpMap\", function() { return stencilOpMap; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"cullFaceMap\", function() { return cullFaceMap; });\n/* harmony import */ var _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/defineProperty */ \"./node_modules/@babel/runtime/helpers/defineProperty.js\");\n/* harmony import */ var _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _antv_g_webgpu_core__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @antv/g-webgpu-core */ \"./node_modules/@antv/g-webgpu-core/es/index.js\");\n\nvar _primitiveMap, _usageMap, _dataTypeMap, _formatMap, _mipmapMap, _filterMap, _wrapModeMap, _colorSpaceMap, _depthFuncMap, _blendEquationMap, _blendFuncMap, _stencilFuncMap, _stencilOpMap, _cullFaceMap;\n/**\n * @desc 由于 regl 使用大量字符串而非 WebGL 常量,因此需要映射\n */\n\n// @see https://github.com/regl-project/regl/blob/gh-pages/lib/constants/primitives.json\nvar primitiveMap = (_primitiveMap = {}, _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default()(_primitiveMap, _antv_g_webgpu_core__WEBPACK_IMPORTED_MODULE_1__[\"gl\"].POINTS, 'points'), _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default()(_primitiveMap, _antv_g_webgpu_core__WEBPACK_IMPORTED_MODULE_1__[\"gl\"].LINES, 'lines'), _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default()(_primitiveMap, _antv_g_webgpu_core__WEBPACK_IMPORTED_MODULE_1__[\"gl\"].LINE_LOOP, 'line loop'), _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default()(_primitiveMap, _antv_g_webgpu_core__WEBPACK_IMPORTED_MODULE_1__[\"gl\"].LINE_STRIP, 'line strip'), _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default()(_primitiveMap, _antv_g_webgpu_core__WEBPACK_IMPORTED_MODULE_1__[\"gl\"].TRIANGLES, 'triangles'), _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default()(_primitiveMap, _antv_g_webgpu_core__WEBPACK_IMPORTED_MODULE_1__[\"gl\"].TRIANGLE_FAN, 'triangle fan'), _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default()(_primitiveMap, _antv_g_webgpu_core__WEBPACK_IMPORTED_MODULE_1__[\"gl\"].TRIANGLE_STRIP, 'triangle strip'), _primitiveMap);\nvar usageMap = (_usageMap = {}, _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default()(_usageMap, _antv_g_webgpu_core__WEBPACK_IMPORTED_MODULE_1__[\"gl\"].STATIC_DRAW, 'static'), _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default()(_usageMap, _antv_g_webgpu_core__WEBPACK_IMPORTED_MODULE_1__[\"gl\"].DYNAMIC_DRAW, 'dynamic'), _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default()(_usageMap, _antv_g_webgpu_core__WEBPACK_IMPORTED_MODULE_1__[\"gl\"].STREAM_DRAW, 'stream'), _usageMap);\nvar dataTypeMap = (_dataTypeMap = {}, _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default()(_dataTypeMap, _antv_g_webgpu_core__WEBPACK_IMPORTED_MODULE_1__[\"gl\"].BYTE, 'int8'), _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default()(_dataTypeMap, _antv_g_webgpu_core__WEBPACK_IMPORTED_MODULE_1__[\"gl\"].UNSIGNED_INT, 'int16'), _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default()(_dataTypeMap, _antv_g_webgpu_core__WEBPACK_IMPORTED_MODULE_1__[\"gl\"].INT, 'int32'), _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default()(_dataTypeMap, _antv_g_webgpu_core__WEBPACK_IMPORTED_MODULE_1__[\"gl\"].UNSIGNED_BYTE, 'uint8'), _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default()(_dataTypeMap, _antv_g_webgpu_core__WEBPACK_IMPORTED_MODULE_1__[\"gl\"].UNSIGNED_SHORT, 'uint16'), _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default()(_dataTypeMap, _antv_g_webgpu_core__WEBPACK_IMPORTED_MODULE_1__[\"gl\"].UNSIGNED_INT, 'uint32'), _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default()(_dataTypeMap, _antv_g_webgpu_core__WEBPACK_IMPORTED_MODULE_1__[\"gl\"].FLOAT, 'float'), _dataTypeMap);\nvar formatMap = (_formatMap = {}, _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default()(_formatMap, _antv_g_webgpu_core__WEBPACK_IMPORTED_MODULE_1__[\"gl\"].ALPHA, 'alpha'), _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default()(_formatMap, _antv_g_webgpu_core__WEBPACK_IMPORTED_MODULE_1__[\"gl\"].LUMINANCE, 'luminance'), _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default()(_formatMap, _antv_g_webgpu_core__WEBPACK_IMPORTED_MODULE_1__[\"gl\"].LUMINANCE_ALPHA, 'luminance alpha'), _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default()(_formatMap, _antv_g_webgpu_core__WEBPACK_IMPORTED_MODULE_1__[\"gl\"].RGB, 'rgb'), _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default()(_formatMap, _antv_g_webgpu_core__WEBPACK_IMPORTED_MODULE_1__[\"gl\"].RGBA, 'rgba'), _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default()(_formatMap, _antv_g_webgpu_core__WEBPACK_IMPORTED_MODULE_1__[\"gl\"].RGBA4, 'rgba4'), _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default()(_formatMap, _antv_g_webgpu_core__WEBPACK_IMPORTED_MODULE_1__[\"gl\"].RGB5_A1, 'rgb5 a1'), _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default()(_formatMap, _antv_g_webgpu_core__WEBPACK_IMPORTED_MODULE_1__[\"gl\"].RGB565, 'rgb565'), _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default()(_formatMap, _antv_g_webgpu_core__WEBPACK_IMPORTED_MODULE_1__[\"gl\"].DEPTH_COMPONENT, 'depth'), _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default()(_formatMap, _antv_g_webgpu_core__WEBPACK_IMPORTED_MODULE_1__[\"gl\"].DEPTH_STENCIL, 'depth stencil'), _formatMap);\nvar mipmapMap = (_mipmapMap = {}, _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default()(_mipmapMap, _antv_g_webgpu_core__WEBPACK_IMPORTED_MODULE_1__[\"gl\"].DONT_CARE, 'dont care'), _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default()(_mipmapMap, _antv_g_webgpu_core__WEBPACK_IMPORTED_MODULE_1__[\"gl\"].NICEST, 'nice'), _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default()(_mipmapMap, _antv_g_webgpu_core__WEBPACK_IMPORTED_MODULE_1__[\"gl\"].FASTEST, 'fast'), _mipmapMap);\nvar filterMap = (_filterMap = {}, _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default()(_filterMap, _antv_g_webgpu_core__WEBPACK_IMPORTED_MODULE_1__[\"gl\"].NEAREST, 'nearest'), _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default()(_filterMap, _antv_g_webgpu_core__WEBPACK_IMPORTED_MODULE_1__[\"gl\"].LINEAR, 'linear'), _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default()(_filterMap, _antv_g_webgpu_core__WEBPACK_IMPORTED_MODULE_1__[\"gl\"].LINEAR_MIPMAP_LINEAR, 'mipmap'), _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default()(_filterMap, _antv_g_webgpu_core__WEBPACK_IMPORTED_MODULE_1__[\"gl\"].NEAREST_MIPMAP_LINEAR, 'nearest mipmap linear'), _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default()(_filterMap, _antv_g_webgpu_core__WEBPACK_IMPORTED_MODULE_1__[\"gl\"].LINEAR_MIPMAP_NEAREST, 'linear mipmap nearest'), _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default()(_filterMap, _antv_g_webgpu_core__WEBPACK_IMPORTED_MODULE_1__[\"gl\"].NEAREST_MIPMAP_NEAREST, 'nearest mipmap nearest'), _filterMap);\nvar wrapModeMap = (_wrapModeMap = {}, _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default()(_wrapModeMap, _antv_g_webgpu_core__WEBPACK_IMPORTED_MODULE_1__[\"gl\"].REPEAT, 'repeat'), _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default()(_wrapModeMap, _antv_g_webgpu_core__WEBPACK_IMPORTED_MODULE_1__[\"gl\"].CLAMP_TO_EDGE, 'clamp'), _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default()(_wrapModeMap, _antv_g_webgpu_core__WEBPACK_IMPORTED_MODULE_1__[\"gl\"].MIRRORED_REPEAT, 'mirror'), _wrapModeMap);\nvar colorSpaceMap = (_colorSpaceMap = {}, _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default()(_colorSpaceMap, _antv_g_webgpu_core__WEBPACK_IMPORTED_MODULE_1__[\"gl\"].NONE, 'none'), _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default()(_colorSpaceMap, _antv_g_webgpu_core__WEBPACK_IMPORTED_MODULE_1__[\"gl\"].BROWSER_DEFAULT_WEBGL, 'browser'), _colorSpaceMap);\nvar depthFuncMap = (_depthFuncMap = {}, _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default()(_depthFuncMap, _antv_g_webgpu_core__WEBPACK_IMPORTED_MODULE_1__[\"gl\"].NEVER, 'never'), _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default()(_depthFuncMap, _antv_g_webgpu_core__WEBPACK_IMPORTED_MODULE_1__[\"gl\"].ALWAYS, 'always'), _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default()(_depthFuncMap, _antv_g_webgpu_core__WEBPACK_IMPORTED_MODULE_1__[\"gl\"].LESS, 'less'), _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default()(_depthFuncMap, _antv_g_webgpu_core__WEBPACK_IMPORTED_MODULE_1__[\"gl\"].LEQUAL, 'lequal'), _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default()(_depthFuncMap, _antv_g_webgpu_core__WEBPACK_IMPORTED_MODULE_1__[\"gl\"].GREATER, 'greater'), _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default()(_depthFuncMap, _antv_g_webgpu_core__WEBPACK_IMPORTED_MODULE_1__[\"gl\"].GEQUAL, 'gequal'), _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default()(_depthFuncMap, _antv_g_webgpu_core__WEBPACK_IMPORTED_MODULE_1__[\"gl\"].EQUAL, 'equal'), _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default()(_depthFuncMap, _antv_g_webgpu_core__WEBPACK_IMPORTED_MODULE_1__[\"gl\"].NOTEQUAL, 'notequal'), _depthFuncMap);\nvar blendEquationMap = (_blendEquationMap = {}, _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default()(_blendEquationMap, _antv_g_webgpu_core__WEBPACK_IMPORTED_MODULE_1__[\"gl\"].FUNC_ADD, 'add'), _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default()(_blendEquationMap, _antv_g_webgpu_core__WEBPACK_IMPORTED_MODULE_1__[\"gl\"].MIN_EXT, 'min'), _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default()(_blendEquationMap, _antv_g_webgpu_core__WEBPACK_IMPORTED_MODULE_1__[\"gl\"].MAX_EXT, 'max'), _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default()(_blendEquationMap, _antv_g_webgpu_core__WEBPACK_IMPORTED_MODULE_1__[\"gl\"].FUNC_SUBTRACT, 'subtract'), _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default()(_blendEquationMap, _antv_g_webgpu_core__WEBPACK_IMPORTED_MODULE_1__[\"gl\"].FUNC_REVERSE_SUBTRACT, 'reverse subtract'), _blendEquationMap);\nvar blendFuncMap = (_blendFuncMap = {}, _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default()(_blendFuncMap, _antv_g_webgpu_core__WEBPACK_IMPORTED_MODULE_1__[\"gl\"].ZERO, 'zero'), _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default()(_blendFuncMap, _antv_g_webgpu_core__WEBPACK_IMPORTED_MODULE_1__[\"gl\"].ONE, 'one'), _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default()(_blendFuncMap, _antv_g_webgpu_core__WEBPACK_IMPORTED_MODULE_1__[\"gl\"].SRC_COLOR, 'src color'), _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default()(_blendFuncMap, _antv_g_webgpu_core__WEBPACK_IMPORTED_MODULE_1__[\"gl\"].ONE_MINUS_SRC_COLOR, 'one minus src color'), _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default()(_blendFuncMap, _antv_g_webgpu_core__WEBPACK_IMPORTED_MODULE_1__[\"gl\"].SRC_ALPHA, 'src alpha'), _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default()(_blendFuncMap, _antv_g_webgpu_core__WEBPACK_IMPORTED_MODULE_1__[\"gl\"].ONE_MINUS_SRC_ALPHA, 'one minus src alpha'), _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default()(_blendFuncMap, _antv_g_webgpu_core__WEBPACK_IMPORTED_MODULE_1__[\"gl\"].DST_COLOR, 'dst color'), _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default()(_blendFuncMap, _antv_g_webgpu_core__WEBPACK_IMPORTED_MODULE_1__[\"gl\"].ONE_MINUS_DST_COLOR, 'one minus dst color'), _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default()(_blendFuncMap, _antv_g_webgpu_core__WEBPACK_IMPORTED_MODULE_1__[\"gl\"].DST_ALPHA, 'dst alpha'), _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default()(_blendFuncMap, _antv_g_webgpu_core__WEBPACK_IMPORTED_MODULE_1__[\"gl\"].ONE_MINUS_DST_ALPHA, 'one minus dst alpha'), _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default()(_blendFuncMap, _antv_g_webgpu_core__WEBPACK_IMPORTED_MODULE_1__[\"gl\"].CONSTANT_COLOR, 'constant color'), _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default()(_blendFuncMap, _antv_g_webgpu_core__WEBPACK_IMPORTED_MODULE_1__[\"gl\"].ONE_MINUS_CONSTANT_COLOR, 'one minus constant color'), _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default()(_blendFuncMap, _antv_g_webgpu_core__WEBPACK_IMPORTED_MODULE_1__[\"gl\"].CONSTANT_ALPHA, 'constant alpha'), _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default()(_blendFuncMap, _antv_g_webgpu_core__WEBPACK_IMPORTED_MODULE_1__[\"gl\"].ONE_MINUS_CONSTANT_ALPHA, 'one minus constant alpha'), _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default()(_blendFuncMap, _antv_g_webgpu_core__WEBPACK_IMPORTED_MODULE_1__[\"gl\"].SRC_ALPHA_SATURATE, 'src alpha saturate'), _blendFuncMap);\nvar stencilFuncMap = (_stencilFuncMap = {}, _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default()(_stencilFuncMap, _antv_g_webgpu_core__WEBPACK_IMPORTED_MODULE_1__[\"gl\"].NEVER, 'never'), _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default()(_stencilFuncMap, _antv_g_webgpu_core__WEBPACK_IMPORTED_MODULE_1__[\"gl\"].ALWAYS, 'always'), _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default()(_stencilFuncMap, _antv_g_webgpu_core__WEBPACK_IMPORTED_MODULE_1__[\"gl\"].LESS, 'less'), _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default()(_stencilFuncMap, _antv_g_webgpu_core__WEBPACK_IMPORTED_MODULE_1__[\"gl\"].LEQUAL, 'lequal'), _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default()(_stencilFuncMap, _antv_g_webgpu_core__WEBPACK_IMPORTED_MODULE_1__[\"gl\"].GREATER, 'greater'), _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default()(_stencilFuncMap, _antv_g_webgpu_core__WEBPACK_IMPORTED_MODULE_1__[\"gl\"].GEQUAL, 'gequal'), _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default()(_stencilFuncMap, _antv_g_webgpu_core__WEBPACK_IMPORTED_MODULE_1__[\"gl\"].EQUAL, 'equal'), _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default()(_stencilFuncMap, _antv_g_webgpu_core__WEBPACK_IMPORTED_MODULE_1__[\"gl\"].NOTEQUAL, 'notequal'), _stencilFuncMap);\nvar stencilOpMap = (_stencilOpMap = {}, _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default()(_stencilOpMap, _antv_g_webgpu_core__WEBPACK_IMPORTED_MODULE_1__[\"gl\"].ZERO, 'zero'), _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default()(_stencilOpMap, _antv_g_webgpu_core__WEBPACK_IMPORTED_MODULE_1__[\"gl\"].KEEP, 'keep'), _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default()(_stencilOpMap, _antv_g_webgpu_core__WEBPACK_IMPORTED_MODULE_1__[\"gl\"].REPLACE, 'replace'), _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default()(_stencilOpMap, _antv_g_webgpu_core__WEBPACK_IMPORTED_MODULE_1__[\"gl\"].INVERT, 'invert'), _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default()(_stencilOpMap, _antv_g_webgpu_core__WEBPACK_IMPORTED_MODULE_1__[\"gl\"].INCR, 'increment'), _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default()(_stencilOpMap, _antv_g_webgpu_core__WEBPACK_IMPORTED_MODULE_1__[\"gl\"].DECR, 'decrement'), _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default()(_stencilOpMap, _antv_g_webgpu_core__WEBPACK_IMPORTED_MODULE_1__[\"gl\"].INCR_WRAP, 'increment wrap'), _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default()(_stencilOpMap, _antv_g_webgpu_core__WEBPACK_IMPORTED_MODULE_1__[\"gl\"].DECR_WRAP, 'decrement wrap'), _stencilOpMap);\nvar cullFaceMap = (_cullFaceMap = {}, _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default()(_cullFaceMap, _antv_g_webgpu_core__WEBPACK_IMPORTED_MODULE_1__[\"gl\"].FRONT, 'front'), _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default()(_cullFaceMap, _antv_g_webgpu_core__WEBPACK_IMPORTED_MODULE_1__[\"gl\"].BACK, 'back'), _cullFaceMap);\n//# sourceMappingURL=constants.js.map\n\n//# sourceURL=webpack:///./node_modules/@antv/g-webgpu-engine/es/webgl/constants.js?");
/***/ }),
/***/ "./node_modules/@antv/g-webgpu-engine/es/webgl/index.js":
/*!**************************************************************!*\
!*** ./node_modules/@antv/g-webgpu-engine/es/webgl/index.js ***!
\**************************************************************/
/*! exports provided: WebGLEngine */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"WebGLEngine\", function() { return WebGLEngine; });\n/* harmony import */ var _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/asyncToGenerator */ \"./node_modules/@babel/runtime/helpers/asyncToGenerator.js\");\n/* harmony import */ var _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/classCallCheck */ \"./node_modules/@babel/runtime/helpers/classCallCheck.js\");\n/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/createClass */ \"./node_modules/@babel/runtime/helpers/createClass.js\");\n/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @babel/runtime/regenerator */ \"./node_modules/@babel/runtime/regenerator/index.js\");\n/* harmony import */ var _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var _antv_g_webgpu_core__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @antv/g-webgpu-core */ \"./node_modules/@antv/g-webgpu-core/es/index.js\");\n/* harmony import */ var regl__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! regl */ \"./node_modules/regl/dist/regl.js\");\n/* harmony import */ var regl__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(regl__WEBPACK_IMPORTED_MODULE_5__);\n/* harmony import */ var _ReglAttribute__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./ReglAttribute */ \"./node_modules/@antv/g-webgpu-engine/es/webgl/ReglAttribute.js\");\n/* harmony import */ var _ReglBuffer__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./ReglBuffer */ \"./node_modules/@antv/g-webgpu-engine/es/webgl/ReglBuffer.js\");\n/* harmony import */ var _ReglComputeModel__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./ReglComputeModel */ \"./node_modules/@antv/g-webgpu-engine/es/webgl/ReglComputeModel.js\");\n/* harmony import */ var _ReglElements__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./ReglElements */ \"./node_modules/@antv/g-webgpu-engine/es/webgl/ReglElements.js\");\n/* harmony import */ var _ReglFramebuffer__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./ReglFramebuffer */ \"./node_modules/@antv/g-webgpu-engine/es/webgl/ReglFramebuffer.js\");\n/* harmony import */ var _ReglModel__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./ReglModel */ \"./node_modules/@antv/g-webgpu-engine/es/webgl/ReglModel.js\");\n/* harmony import */ var _ReglTexture2D__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./ReglTexture2D */ \"./node_modules/@antv/g-webgpu-engine/es/webgl/ReglTexture2D.js\");\n\n\n\n\n/**\n * render w/ regl\n * @see https://github.com/regl-project/regl/blob/gh-pages/API.md\n */\n\n\n\n\n\n\n\n\n\n\n/**\n * regl renderer\n */\nvar WebGLEngine = /*#__PURE__*/function () {\n function WebGLEngine() {\n var _this = this;\n _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_1___default()(this, WebGLEngine);\n this.supportWebGPU = false;\n this.useWGSL = false;\n this.$canvas = void 0;\n this.gl = void 0;\n this.inited = void 0;\n this.createModel = /*#__PURE__*/function () {\n var _ref = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_0___default()( /*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_3___default.a.mark(function _callee2(options) {\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_3___default.a.wrap(function _callee2$(_context2) {\n while (1) {\n switch (_context2.prev = _context2.next) {\n case 0:\n if (!options.uniforms) {\n _context2.next = 3;\n break;\n }\n _context2.next = 3;\n return Promise.all(Object.keys(options.uniforms).map( /*#__PURE__*/function () {\n var _ref2 = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_0___default()( /*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_3___default.a.mark(function _callee(name) {\n var texture;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_3___default.a.wrap(function _callee$(_context) {\n while (1) {\n switch (_context.prev = _context.next) {\n case 0:\n if (!(options.uniforms[name] &&\n // @ts-ignore\n options.uniforms[name].load !== undefined)) {\n _context.next = 5;\n break;\n }\n _context.next = 3;\n return options.uniforms[name].load();\n case 3:\n texture = _context.sent;\n // @ts-ignore\n options.uniforms[name] = texture;\n case 5:\n case \"end\":\n return _context.stop();\n }\n }\n }, _callee);\n }));\n return function (_x2) {\n return _ref2.apply(this, arguments);\n };\n }()));\n case 3:\n return _context2.abrupt(\"return\", new _ReglModel__WEBPACK_IMPORTED_MODULE_11__[\"default\"](_this.gl, options));\n case 4:\n case \"end\":\n return _context2.stop();\n }\n }\n }, _callee2);\n }));\n return function (_x) {\n return _ref.apply(this, arguments);\n };\n }();\n this.createAttribute = function (options) {\n return new _ReglAttribute__WEBPACK_IMPORTED_MODULE_6__[\"default\"](_this.gl, options);\n };\n this.createBuffer = function (options) {\n return new _ReglBuffer__WEBPACK_IMPORTED_MODULE_7__[\"default\"](_this.gl, options);\n };\n this.createElements = function (options) {\n return new _ReglElements__WEBPACK_IMPORTED_MODULE_9__[\"default\"](_this.gl, options);\n };\n this.createTexture2D = function (options) {\n return new _ReglTexture2D__WEBPACK_IMPORTED_MODULE_12__[\"default\"](_this.gl, options);\n };\n this.createFramebuffer = function (options) {\n return new _ReglFramebuffer__WEBPACK_IMPORTED_MODULE_10__[\"default\"](_this.gl, options);\n };\n this.useFramebuffer = function (framebuffer, drawCommands) {\n _this.gl({\n framebuffer: framebuffer ? framebuffer.get() : null\n })(drawCommands);\n };\n this.createComputeModel = /*#__PURE__*/function () {\n var _ref3 = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_0___default()( /*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_3___default.a.mark(function _callee3(context) {\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_3___default.a.wrap(function _callee3$(_context3) {\n while (1) {\n switch (_context3.prev = _context3.next) {\n case 0:\n return _context3.abrupt(\"return\", new _ReglComputeModel__WEBPACK_IMPORTED_MODULE_8__[\"default\"](_this.gl, context));\n case 1:\n case \"end\":\n return _context3.stop();\n }\n }\n }, _callee3);\n }));\n return function (_x3) {\n return _ref3.apply(this, arguments);\n };\n }();\n this.clear = function (options) {\n // @see https://github.com/regl-project/regl/blob/gh-pages/API.md#clear-the-draw-buffer\n var color = options.color,\n depth = options.depth,\n stencil = options.stencil,\n _options$framebuffer = options.framebuffer,\n framebuffer = _options$framebuffer === void 0 ? null : _options$framebuffer;\n var reglClearOptions = {\n color: color,\n depth: depth,\n stencil: stencil\n };\n reglClearOptions.framebuffer = framebuffer === null ? framebuffer : framebuffer.get();\n _this.gl.clear(reglClearOptions);\n };\n this.setScissor = function (scissor) {\n if (_this.gl && _this.gl._gl) {\n // https://developer.mozilla.org/zh-CN/docs/Web/API/WebGLRenderingContext/scissor\n if (scissor.enable && scissor.box) {\n // console.log(scissor.box);\n _this.gl._gl.enable(_antv_g_webgpu_core__WEBPACK_IMPORTED_MODULE_4__[\"gl\"].SCISSOR_TEST);\n _this.gl._gl.scissor(scissor.box.x, scissor.box.y, scissor.box.width, scissor.box.height);\n } else {\n _this.gl._gl.disable(_antv_g_webgpu_core__WEBPACK_IMPORTED_MODULE_4__[\"gl\"].SCISSOR_TEST);\n }\n _this.gl._refresh();\n }\n };\n this.viewport = function (_ref4) {\n var x = _ref4.x,\n y = _ref4.y,\n width = _ref4.width,\n height = _ref4.height;\n if (_this.gl && _this.gl._gl) {\n // use WebGL context directly\n // @see https://github.com/regl-project/regl/blob/gh-pages/API.md#unsafe-escape-hatch\n _this.gl._gl.viewport(x, y, width, height);\n _this.gl._refresh();\n }\n };\n this.readPixels = function (options) {\n var framebuffer = options.framebuffer,\n x = options.x,\n y = options.y,\n width = options.width,\n height = options.height;\n var readPixelsOptions = {\n x: x,\n y: y,\n width: width,\n height: height\n };\n if (framebuffer) {\n readPixelsOptions.framebuffer = framebuffer.get();\n }\n return _this.gl.read(readPixelsOptions);\n };\n this.getCanvas = function () {\n return _this.$canvas;\n };\n this.getGLContext = function () {\n return _this.gl._gl;\n };\n this.destroy = function () {\n if (_this.gl) {\n // @see https://github.com/regl-project/regl/blob/gh-pages/API.md#clean-up\n _this.gl.destroy();\n _this.inited = false;\n }\n };\n }\n _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_2___default()(WebGLEngine, [{\n key: \"init\",\n value: function () {\n var _init = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_0___default()( /*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_3___default.a.mark(function _callee4(cfg) {\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_3___default.a.wrap(function _callee4$(_context4) {\n while (1) {\n switch (_context4.prev = _context4.next) {\n case 0:\n if (!this.inited) {\n _context4.next = 2;\n break;\n }\n return _context4.abrupt(\"return\");\n case 2:\n this.$canvas = cfg.canvas;\n // tslint:disable-next-line:typedef\n _context4.next = 5;\n return new Promise(function (resolve, reject) {\n regl__WEBPACK_IMPORTED_MODULE_5___default()({\n canvas: cfg.canvas,\n attributes: {\n alpha: true,\n // use TAA instead of MSAA\n // @see https://www.khronos.org/registry/webgl/specs/1.0/#5.2.1\n antialias: cfg.antialias,\n premultipliedAlpha: true\n // preserveDrawingBuffer: false,\n },\n\n pixelRatio: 1,\n // TODO: use extensions\n extensions: ['OES_element_index_uint', 'OES_texture_float', 'OES_standard_derivatives',\n // wireframe\n 'angle_instanced_arrays' // VSM shadow map\n ],\n\n optionalExtensions: ['EXT_texture_filter_anisotropic', 'EXT_blend_minmax', 'WEBGL_depth_texture'],\n profile: true,\n onDone: function onDone(err, r) {\n if (err || !r) {\n reject(err);\n }\n // @ts-ignore\n resolve(r);\n }\n });\n });\n case 5:\n this.gl = _context4.sent;\n this.inited = true;\n case 7:\n case \"end\":\n return _context4.stop();\n }\n }\n }, _callee4, this);\n }));\n function init(_x4) {\n return _init.apply(this, arguments);\n }\n return init;\n }()\n }, {\n key: \"isFloatSupported\",\n value: function isFloatSupported() {\n // @see https://github.com/antvis/GWebGPUEngine/issues/26\n // @ts-ignore\n return this.gl.limits.readFloat;\n }\n }, {\n key: \"beginFrame\",\n value: function beginFrame() {\n //\n }\n }, {\n key: \"endFrame\",\n value: function endFrame() {\n //\n }\n }]);\n return WebGLEngine;\n}();\n//# sourceMappingURL=index.js.map\n\n//# sourceURL=webpack:///./node_modules/@antv/g-webgpu-engine/es/webgl/index.js?");
/***/ }),
/***/ "./node_modules/@antv/g-webgpu/es/Kernel.js":
/*!**************************************************!*\
!*** ./node_modules/@antv/g-webgpu/es/Kernel.js ***!
\**************************************************/
/*! exports provided: Kernel */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"Kernel\", function() { return Kernel; });\n/* harmony import */ var _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/asyncToGenerator */ \"./node_modules/@babel/runtime/helpers/asyncToGenerator.js\");\n/* harmony import */ var _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/defineProperty */ \"./node_modules/@babel/runtime/helpers/defineProperty.js\");\n/* harmony import */ var _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/classCallCheck */ \"./node_modules/@babel/runtime/helpers/classCallCheck.js\");\n/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @babel/runtime/helpers/createClass */ \"./node_modules/@babel/runtime/helpers/createClass.js\");\n/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var lodash_isTypedArray__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! lodash/isTypedArray */ \"./node_modules/lodash/isTypedArray.js\");\n/* harmony import */ var lodash_isTypedArray__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(lodash_isTypedArray__WEBPACK_IMPORTED_MODULE_4__);\n/* harmony import */ var lodash_isNumber__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! lodash/isNumber */ \"./node_modules/lodash/isNumber.js\");\n/* harmony import */ var lodash_isNumber__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(lodash_isNumber__WEBPACK_IMPORTED_MODULE_5__);\n/* harmony import */ var lodash_isArray__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! lodash/isArray */ \"./node_modules/lodash/isArray.js\");\n/* harmony import */ var lodash_isArray__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(lodash_isArray__WEBPACK_IMPORTED_MODULE_6__);\n/* harmony import */ var _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @babel/runtime/regenerator */ \"./node_modules/@babel/runtime/regenerator/index.js\");\n/* harmony import */ var _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_7__);\n/* harmony import */ var _antv_g_webgpu_core__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! @antv/g-webgpu-core */ \"./node_modules/@antv/g-webgpu-core/es/index.js\");\n/* harmony import */ var _utils_canvas__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./utils/canvas */ \"./node_modules/@antv/g-webgpu/es/utils/canvas.js\");\n\n\n\n\n\n\n\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_1___default()(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\n\n\nvar Kernel = /*#__PURE__*/function () {\n function Kernel(engine, configService) {\n _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_2___default()(this, Kernel);\n this.engine = engine;\n this.configService = configService;\n this.model = void 0;\n this.dirty = true;\n this.compiledBundle = void 0;\n this.initPromise = void 0;\n }\n _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_3___default()(Kernel, [{\n key: \"init\",\n value: function init() {\n var _this$configService$g = this.configService.get(),\n canvas = _this$configService$g.canvas,\n engineOptions = _this$configService$g.engineOptions;\n this.initPromise = this.engine.init(_objectSpread({\n canvas: canvas || Object(_utils_canvas__WEBPACK_IMPORTED_MODULE_9__[\"createCanvas\"])(),\n // swapChainFormat: WebGPUConstants.TextureFormat.BGRA8Unorm,\n antialiasing: false\n }, engineOptions));\n }\n }, {\n key: \"setBundle\",\n value: function setBundle(bundle) {\n // deep clone\n this.compiledBundle = JSON.parse(JSON.stringify(bundle));\n }\n }, {\n key: \"setDispatch\",\n value: function setDispatch(dispatch) {\n if (this.compiledBundle.context) {\n this.compiledBundle.context.dispatch = dispatch;\n }\n return this;\n }\n }, {\n key: \"setMaxIteration\",\n value: function setMaxIteration(maxIteration) {\n if (this.compiledBundle.context) {\n this.compiledBundle.context.maxIteration = maxIteration;\n }\n return this;\n }\n }, {\n key: \"setBinding\",\n value: function setBinding(name, data) {\n var _this = this;\n if (typeof name === 'string') {\n var isNumberLikeData = lodash_isNumber__WEBPACK_IMPORTED_MODULE_5___default()(data) || lodash_isTypedArray__WEBPACK_IMPORTED_MODULE_4___default()(data) || lodash_isArray__WEBPACK_IMPORTED_MODULE_6___default()(data);\n if (this.compiledBundle && this.compiledBundle.context) {\n // set define, eg. setBinding('MAX_LENGTH', 10)\n var existedDefine = this.compiledBundle.context.defines.find(function (b) {\n return b.name === name;\n });\n if (existedDefine) {\n existedDefine.value = data;\n return this;\n }\n\n // set uniform\n var existedBinding = this.compiledBundle.context.uniforms.find(function (b) {\n return b.name === name;\n });\n if (existedBinding) {\n // update uniform or buffer\n if (isNumberLikeData) {\n // @ts-ignore\n existedBinding.data = data;\n existedBinding.isReferer = false;\n if (existedBinding.storageClass === _antv_g_webgpu_core__WEBPACK_IMPORTED_MODULE_8__[\"STORAGE_CLASS\"].Uniform) {\n if (this.model) {\n // @ts-ignore\n this.model.updateUniform(name, data);\n }\n } else {\n if (this.model) {\n // @ts-ignore\n this.model.updateBuffer(name, data);\n }\n }\n } else {\n // update with another kernel\n existedBinding.isReferer = true;\n // @ts-ignore\n existedBinding.data = data;\n }\n }\n }\n } else {\n Object.keys(name).forEach(function (key) {\n _this.setBinding(key, name[key]);\n });\n }\n return this;\n }\n }, {\n key: \"execute\",\n value: function () {\n var _execute = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_0___default()( /*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_7___default.a.mark(function _callee() {\n var _this2 = this;\n var iteration,\n i,\n _args = arguments;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_7___default.a.wrap(function _callee$(_context) {\n while (1) {\n switch (_context.prev = _context.next) {\n case 0:\n iteration = _args.length > 0 && _args[0] !== undefined ? _args[0] : 1;\n if (!this.dirty) {\n _context.next = 6;\n break;\n }\n if (this.compiledBundle.context) {\n if (iteration > 1) {\n this.compiledBundle.context.maxIteration = iteration;\n } else {\n this.compiledBundle.context.maxIteration++;\n }\n }\n _context.next = 5;\n return this.compile();\n case 5:\n this.dirty = false;\n case 6:\n this.engine.beginFrame();\n\n // 首先开启当前 frame 的 compute pass\n this.engine.clear({});\n if (this.compiledBundle.context) {\n this.compiledBundle.context.uniforms.filter(function (_ref) {\n var isReferer = _ref.isReferer;\n return isReferer;\n }).forEach(function (_ref2) {\n var data = _ref2.data,\n name = _ref2.name;\n // @ts-ignore\n _this2.model.confirmInput(data.model, name);\n });\n }\n for (i = 0; i < iteration; i++) {\n this.model.run();\n }\n this.engine.endFrame();\n return _context.abrupt(\"return\", this);\n case 12:\n case \"end\":\n return _context.stop();\n }\n }\n }, _callee, this);\n }));\n function execute() {\n return _execute.apply(this, arguments);\n }\n return execute;\n }()\n /**\n * read output from GPUBuffer\n */\n }, {\n key: \"getOutput\",\n value: function () {\n var _getOutput = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_0___default()( /*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_7___default.a.mark(function _callee2() {\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_7___default.a.wrap(function _callee2$(_context2) {\n while (1) {\n switch (_context2.prev = _context2.next) {\n case 0:\n return _context2.abrupt(\"return\", this.model.readData());\n case 1:\n case \"end\":\n return _context2.stop();\n }\n }\n }, _callee2, this);\n }));\n function getOutput() {\n return _getOutput.apply(this, arguments);\n }\n return getOutput;\n }()\n }, {\n key: \"compile\",\n value: function () {\n var _compile = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_0___default()( /*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_7___default.a.mark(function _callee3() {\n var context, target, shader;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_7___default.a.wrap(function _callee3$(_context3) {\n while (1) {\n switch (_context3.prev = _context3.next) {\n case 0:\n _context3.next = 2;\n return this.initPromise;\n case 2:\n context = _objectSpread({}, this.compiledBundle.context);\n target = this.engine.supportWebGPU ? this.engine.useWGSL ? _antv_g_webgpu_core__WEBPACK_IMPORTED_MODULE_8__[\"Target\"].WGSL : _antv_g_webgpu_core__WEBPACK_IMPORTED_MODULE_8__[\"Target\"].GLSL450 : _antv_g_webgpu_core__WEBPACK_IMPORTED_MODULE_8__[\"Target\"].GLSL100;\n shader = this.compiledBundle.shaders[target]; // this.bindings?.forEach(({ name, data }) => {\n // if (name === name.toUpperCase()) {\n // const define = context.defines.find((d) => d.name === name);\n // if (define) {\n // // @ts-ignore\n // define.value = data;\n // }\n // }\n // });\n // 生成运行时 define\n context.defines.filter(function (define) {\n return define.runtime;\n }).forEach(function (define) {\n var valuePlaceHolder = \"\".concat(_antv_g_webgpu_core__WEBPACK_IMPORTED_MODULE_8__[\"DefineValuePlaceholder\"]).concat(define.name);\n shader = shader.replace(valuePlaceHolder, \"\".concat(define.value));\n });\n context.shader = shader;\n\n // 添加 uniform 绑定的数据\n context.uniforms.forEach(function (uniform) {\n // const binding = this.bindings.find((b) => b.name === uniform.name);\n // if (binding) {\n // // @ts-ignore\n // uniform.data = binding.referer || binding.data;\n // // @ts-ignore\n // uniform.isReferer = !!binding.referer;\n // }\n\n // 未指定数据,尝试根据 uniform 类型初始化\n if (!uniform.data) {\n if (uniform.storageClass === _antv_g_webgpu_core__WEBPACK_IMPORTED_MODULE_8__[\"STORAGE_CLASS\"].StorageBuffer) {\n var sizePerElement = 1;\n if (uniform.type === _antv_g_webgpu_core__WEBPACK_IMPORTED_MODULE_8__[\"AST_TOKEN_TYPES\"].FloatArray) {\n sizePerElement = 1;\n } else if (uniform.type === _antv_g_webgpu_core__WEBPACK_IMPORTED_MODULE_8__[\"AST_TOKEN_TYPES\"].Vector4FloatArray) {\n sizePerElement = 4;\n }\n uniform.data = new Float32Array(context.output.length * sizePerElement).fill(0);\n }\n }\n });\n // } else if (uniform.type === 'image2D') {\n // // @ts-ignore\n // buffer.data = new Uint8ClampedArray(context.output.length!).fill(0);\n // }\n\n this.compiledBundle.context = context;\n _context3.next = 11;\n return this.engine.createComputeModel(this.compiledBundle.context);\n case 11:\n this.model = _context3.sent;\n case 12:\n case \"end\":\n return _context3.stop();\n }\n }\n }, _callee3, this);\n }));\n function compile() {\n return _compile.apply(this, arguments);\n }\n return compile;\n }()\n }]);\n return Kernel;\n}();\n//# sourceMappingURL=Kernel.js.map\n\n//# sourceURL=webpack:///./node_modules/@antv/g-webgpu/es/Kernel.js?");
/***/ }),
/***/ "./node_modules/@antv/g-webgpu/es/World.js":
/*!*************************************************!*\
!*** ./node_modules/@antv/g-webgpu/es/World.js ***!
\*************************************************/
/*! exports provided: World */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"World\", function() { return World; });\n/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/classCallCheck */ \"./node_modules/@babel/runtime/helpers/classCallCheck.js\");\n/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/createClass */ \"./node_modules/@babel/runtime/helpers/createClass.js\");\n/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _antv_g_webgpu_core__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @antv/g-webgpu-core */ \"./node_modules/@antv/g-webgpu-core/es/index.js\");\n/* harmony import */ var _antv_g_webgpu_engine__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @antv/g-webgpu-engine */ \"./node_modules/@antv/g-webgpu-engine/es/index.js\");\n/* harmony import */ var _Kernel__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./Kernel */ \"./node_modules/@antv/g-webgpu/es/Kernel.js\");\n\n\n\n\n\nvar World = /*#__PURE__*/function () {\n function World() {\n _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0___default()(this, World);\n this.engine = void 0;\n this.configService = new _antv_g_webgpu_core__WEBPACK_IMPORTED_MODULE_2__[\"ConfigService\"]();\n }\n _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1___default()(World, [{\n key: \"setConfig\",\n value: function setConfig(config) {\n this.configService.set(config);\n }\n }, {\n key: \"setEngine\",\n value: function setEngine(engine) {\n this.engine = engine;\n }\n }, {\n key: \"createEntity\",\n value: function createEntity() {\n return Object(_antv_g_webgpu_core__WEBPACK_IMPORTED_MODULE_2__[\"createEntity\"])();\n }\n }, {\n key: \"createKernel\",\n value: function createKernel(precompiledBundle) {\n var kernel = new _Kernel__WEBPACK_IMPORTED_MODULE_4__[\"Kernel\"](this.engine, this.configService);\n if (typeof precompiledBundle === 'string') {\n kernel.setBundle(JSON.parse(precompiledBundle));\n } else {\n kernel.setBundle(precompiledBundle);\n }\n kernel.init();\n return kernel;\n }\n }, {\n key: \"destroy\",\n value: function destroy() {\n this.engine.destroy();\n }\n }], [{\n key: \"create\",\n value: function create() {\n var config = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n var world = new World();\n world.setConfig(config);\n world.setEngine(new _antv_g_webgpu_engine__WEBPACK_IMPORTED_MODULE_3__[\"WebGLEngine\"]());\n return world;\n }\n }]);\n return World;\n}();\n//# sourceMappingURL=World.js.map\n\n//# sourceURL=webpack:///./node_modules/@antv/g-webgpu/es/World.js?");
/***/ }),
/***/ "./node_modules/@antv/g-webgpu/es/index.js":
/*!*************************************************!*\
!*** ./node_modules/@antv/g-webgpu/es/index.js ***!
\*************************************************/
/*! exports provided: World, Kernel */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _Kernel__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./Kernel */ \"./node_modules/@antv/g-webgpu/es/Kernel.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Kernel\", function() { return _Kernel__WEBPACK_IMPORTED_MODULE_0__[\"Kernel\"]; });\n\n/* harmony import */ var _World__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./World */ \"./node_modules/@antv/g-webgpu/es/World.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"World\", function() { return _World__WEBPACK_IMPORTED_MODULE_1__[\"World\"]; });\n\n\n\n\n//# sourceMappingURL=index.js.map\n\n//# sourceURL=webpack:///./node_modules/@antv/g-webgpu/es/index.js?");
/***/ }),
/***/ "./node_modules/@antv/g-webgpu/es/utils/canvas.js":
/*!********************************************************!*\
!*** ./node_modules/@antv/g-webgpu/es/utils/canvas.js ***!
\********************************************************/
/*! exports provided: createCanvas */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"createCanvas\", function() { return createCanvas; });\nfunction createCanvas() {\n if (typeof document !== 'undefined') {\n return document.createElement('canvas');\n } else {\n throw new Error('Cannot create a canvas in this context');\n }\n}\n//# sourceMappingURL=canvas.js.map\n\n//# sourceURL=webpack:///./node_modules/@antv/g-webgpu/es/utils/canvas.js?");
/***/ }),
/***/ "./node_modules/@antv/g6-core/es/behavior/behavior.js":
/*!************************************************************!*\
!*** ./node_modules/@antv/g6-core/es/behavior/behavior.js ***!
\************************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _antv_util__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @antv/util */ \"./node_modules/@antv/util/esm/index.js\");\n/* harmony import */ var _behaviorOption__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./behaviorOption */ \"./node_modules/@antv/g6-core/es/behavior/behaviorOption.js\");\n\n\nvar Behavior = /** @class */function () {\n function Behavior() {}\n /**\n * 自定义 Behavior\n * @param type Behavior 名称\n * @param behavior Behavior 定义的方法集合\n */\n Behavior.registerBehavior = function (type, behavior) {\n if (!behavior) {\n throw new Error(\"please specify handler for this behavior: \".concat(type));\n }\n var prototype = Object(_antv_util__WEBPACK_IMPORTED_MODULE_0__[\"clone\"])(_behaviorOption__WEBPACK_IMPORTED_MODULE_1__[\"default\"]);\n Object.assign(prototype, behavior);\n // eslint-disable-next-line func-names\n var base = function base(cfg) {\n var _this = this;\n Object.assign(this, this.getDefaultCfg(), cfg);\n var events = this.getEvents();\n this.events = null;\n var eventsToBind = {};\n if (events) {\n Object(_antv_util__WEBPACK_IMPORTED_MODULE_0__[\"each\"])(events, function (handle, event) {\n eventsToBind[event] = Object(_antv_util__WEBPACK_IMPORTED_MODULE_0__[\"wrapBehavior\"])(_this, handle);\n });\n this.events = eventsToBind;\n }\n };\n base.prototype = prototype;\n Behavior.types[type] = base;\n };\n Behavior.hasBehavior = function (type) {\n return !!Behavior.types[type];\n };\n Behavior.getBehavior = function (type) {\n return Behavior.types[type];\n };\n // 所有自定义的 Behavior 的实例\n Behavior.types = {};\n return Behavior;\n}();\n/* harmony default export */ __webpack_exports__[\"default\"] = (Behavior);\n\n//# sourceURL=webpack:///./node_modules/@antv/g6-core/es/behavior/behavior.js?");
/***/ }),
/***/ "./node_modules/@antv/g6-core/es/behavior/behaviorOption.js":
/*!******************************************************************!*\
!*** ./node_modules/@antv/g6-core/es/behavior/behaviorOption.js ***!
\******************************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _antv_util__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @antv/util */ \"./node_modules/@antv/util/esm/index.js\");\n\n// 自定义 Behavior 时候共有的方法\n/* harmony default export */ __webpack_exports__[\"default\"] = ({\n getDefaultCfg: function getDefaultCfg() {\n return {};\n },\n /**\n * register event handler, behavior will auto bind events\n * for example:\n * return {\n * click: 'onClick'\n * }\n */\n getEvents: function getEvents() {\n return {};\n },\n updateCfg: function updateCfg(cfg) {\n Object.assign(this, cfg);\n return true;\n },\n shouldBegin: function shouldBegin() {\n return true;\n },\n shouldUpdate: function shouldUpdate() {\n return true;\n },\n shouldEnd: function shouldEnd() {\n return true;\n },\n /**\n * auto bind events when register behavior\n * @param graph Graph instance\n */\n bind: function bind(graph) {\n var _this = this;\n var events = this.events;\n this.graph = graph;\n if (this.type === 'drag-canvas' || this.type === 'brush-select' || this.type === 'lasso-select') {\n graph.get('canvas').set('draggable', true);\n }\n Object(_antv_util__WEBPACK_IMPORTED_MODULE_0__[\"each\"])(events, function (handler, event) {\n graph.on(event, handler);\n });\n // To avoid the tabs switching makes the keydown related behaviors disable\n document.addEventListener('visibilitychange', function () {\n _this.keydown = false;\n });\n },\n unbind: function unbind(graph) {\n var events = this.events;\n var draggable = graph.get('canvas').get('draggable');\n if (this.type === 'drag-canvas' || this.type === 'brush-select' || this.type === 'lasso-select') {\n graph.get('canvas').set('draggable', false);\n }\n Object(_antv_util__WEBPACK_IMPORTED_MODULE_0__[\"each\"])(events, function (handler, event) {\n graph.off(event, handler);\n });\n graph.get('canvas').set('draggable', draggable);\n },\n get: function get(val) {\n return this[val];\n },\n set: function set(key, val) {\n this[key] = val;\n return this;\n }\n});\n\n//# sourceURL=webpack:///./node_modules/@antv/g6-core/es/behavior/behaviorOption.js?");
/***/ }),
/***/ "./node_modules/@antv/g6-core/es/behavior/index.js":
/*!*********************************************************!*\
!*** ./node_modules/@antv/g6-core/es/behavior/index.js ***!
\*********************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _behavior__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./behavior */ \"./node_modules/@antv/g6-core/es/behavior/behavior.js\");\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (_behavior__WEBPACK_IMPORTED_MODULE_0__[\"default\"]);\n\n//# sourceURL=webpack:///./node_modules/@antv/g6-core/es/behavior/index.js?");
/***/ }),
/***/ "./node_modules/@antv/g6-core/es/element/arrow.js":
/*!********************************************************!*\
!*** ./node_modules/@antv/g6-core/es/element/arrow.js ***!
\********************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony default export */ __webpack_exports__[\"default\"] = ({\n triangle: function triangle(width, length, d) {\n if (width === void 0) {\n width = 10;\n }\n if (length === void 0) {\n length = 15;\n }\n if (d === void 0) {\n d = 0;\n }\n var begin = d * 2;\n var path = \"M \".concat(begin, \",0 L \").concat(begin + length, \",-\").concat(width / 2, \" L \").concat(begin + length, \",\").concat(width / 2, \" Z\");\n return path;\n },\n vee: function vee(width, length, d) {\n if (width === void 0) {\n width = 15;\n }\n if (length === void 0) {\n length = 20;\n }\n if (d === void 0) {\n d = 0;\n }\n var begin = d * 2;\n var path = \"M \".concat(begin, \",0 L \").concat(begin + length, \",-\").concat(width / 2, \"\\n L \").concat(begin + 2 * length / 3, \",0 L \").concat(begin + length, \",\").concat(width / 2, \" Z\");\n return path;\n },\n circle: function circle(r, d) {\n if (r === void 0) {\n r = 5;\n }\n if (d === void 0) {\n d = 0;\n }\n var begin = d * 2;\n var path = \"M \".concat(begin, \", 0\\n a \").concat(r, \",\").concat(r, \" 0 1,0 \").concat(r * 2, \",0\\n a \").concat(r, \",\").concat(r, \" 0 1,0 \").concat(-r * 2, \",0\");\n return path;\n },\n rect: function rect(width, length, d) {\n if (width === void 0) {\n width = 10;\n }\n if (length === void 0) {\n length = 10;\n }\n if (d === void 0) {\n d = 0;\n }\n var begin = d * 2;\n var path = \"M \".concat(begin, \",\").concat(-width / 2, \" \\n L \").concat(begin + length, \",\").concat(-width / 2, \" \\n L \").concat(begin + length, \",\").concat(width / 2, \" \\n L \").concat(begin, \",\").concat(width / 2, \" Z\");\n return path;\n },\n diamond: function diamond(width, length, d) {\n if (width === void 0) {\n width = 15;\n }\n if (length === void 0) {\n length = 15;\n }\n if (d === void 0) {\n d = 0;\n }\n var begin = d * 2;\n var path = \"M \".concat(begin, \",0 \\n L \").concat(begin + length / 2, \",\").concat(-width / 2, \" \\n L \").concat(begin + length, \",0 \\n L \").concat(begin + length / 2, \",\").concat(width / 2, \" Z\");\n return path;\n },\n triangleRect: function triangleRect(tWidth, tLength, rWidth, rLength, gap, d) {\n if (tWidth === void 0) {\n tWidth = 15;\n }\n if (tLength === void 0) {\n tLength = 15;\n }\n if (rWidth === void 0) {\n rWidth = 15;\n }\n if (rLength === void 0) {\n rLength = 3;\n }\n if (gap === void 0) {\n gap = 5;\n }\n if (d === void 0) {\n d = 0;\n }\n var begin = d * 2;\n var rectBegin = begin + tLength + gap;\n var path = \"M \".concat(begin, \",0 L \").concat(begin + tLength, \",-\").concat(tWidth / 2, \" L \").concat(begin + tLength, \",\").concat(tWidth / 2, \" Z\\n M \").concat(rectBegin, \", -\").concat(rWidth / 2, \"\\n L \").concat(rectBegin + rLength, \" -\").concat(rWidth / 2, \"\\n L \").concat(rectBegin + rLength, \" \").concat(rWidth / 2, \"\\n L \").concat(rectBegin, \" \").concat(rWidth / 2, \"\\n Z\");\n return path;\n }\n});\n\n//# sourceURL=webpack:///./node_modules/@antv/g6-core/es/element/arrow.js?");
/***/ }),
/***/ "./node_modules/@antv/g6-core/es/element/combo.js":
/*!********************************************************!*\
!*** ./node_modules/@antv/g6-core/es/element/combo.js ***!
\********************************************************/
/*! no exports provided */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tslib */ \"./node_modules/tslib/tslib.es6.js\");\n/* harmony import */ var _antv_util__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @antv/util */ \"./node_modules/@antv/util/esm/index.js\");\n/* harmony import */ var _global__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../global */ \"./node_modules/@antv/g6-core/es/global.js\");\n/* harmony import */ var _shape__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./shape */ \"./node_modules/@antv/g6-core/es/element/shape.js\");\n/* harmony import */ var _shapeBase__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./shapeBase */ \"./node_modules/@antv/g6-core/es/element/shapeBase.js\");\n\n\n\n\n\nvar singleCombo = {\n itemType: 'combo',\n // 单个图形的类型\n shapeType: 'single-combo',\n /**\n * Combo 标题文本相对图形的位置,默认为 top\n * 位置包括: top, bottom, left, right, center\n * @type {String}\n */\n labelPosition: 'top',\n /**\n * 标题文本相对偏移,当 labelPosition 不为 center 时有效\n * @type {Number}\n */\n refX: _global__WEBPACK_IMPORTED_MODULE_2__[\"default\"].comboLabel.refX,\n refY: _global__WEBPACK_IMPORTED_MODULE_2__[\"default\"].comboLabel.refY,\n options: {\n style: {\n stroke: _global__WEBPACK_IMPORTED_MODULE_2__[\"default\"].defaultCombo.style.stroke,\n fill: _global__WEBPACK_IMPORTED_MODULE_2__[\"default\"].defaultCombo.style.fill,\n lineWidth: _global__WEBPACK_IMPORTED_MODULE_2__[\"default\"].defaultCombo.style.lineWidth\n },\n labelCfg: {\n style: {\n fill: _global__WEBPACK_IMPORTED_MODULE_2__[\"default\"].comboLabel.style.fill,\n fontSize: _global__WEBPACK_IMPORTED_MODULE_2__[\"default\"].comboLabel.style.fontSize,\n fontFamily: _global__WEBPACK_IMPORTED_MODULE_2__[\"default\"].windowFontFamily\n }\n },\n stateStyles: Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__assign\"])({}, _global__WEBPACK_IMPORTED_MODULE_2__[\"default\"].comboStateStyles),\n collapsedSubstituteIcon: {\n show: false,\n img: 'https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*RsnHRqLfJn4AAAAAAAAAAAAAARQnAQ'\n }\n },\n /**\n * 获取 Combo 宽高\n * @internal 返回 Combo 的大小,以 [width, height] 的方式维护\n * @param {Object} cfg Combo 的配置项\n * @return {Array} 宽高\n */\n getSize: function getSize(cfg) {\n var size = Object(_antv_util__WEBPACK_IMPORTED_MODULE_1__[\"clone\"])(cfg.size || this.options.size || _global__WEBPACK_IMPORTED_MODULE_2__[\"default\"].defaultCombo.size);\n // size 是数组,若长度为 1,则补长度为 2\n if (Object(_antv_util__WEBPACK_IMPORTED_MODULE_1__[\"isArray\"])(size) && size.length === 1) {\n size = [size[0], size[0]];\n }\n // size 为数字,则转换为数组\n if (!Object(_antv_util__WEBPACK_IMPORTED_MODULE_1__[\"isArray\"])(size)) {\n size = [size, size];\n }\n return size;\n },\n // 私有方法,不希望扩展的 Combo 复写这个方法\n getLabelStyleByPosition: function getLabelStyleByPosition(cfg, labelCfg) {\n var labelPosition = labelCfg.position || this.labelPosition;\n var cfgStyle = cfg.style;\n var padding = cfg.padding || this.options.padding;\n if (Object(_antv_util__WEBPACK_IMPORTED_MODULE_1__[\"isArray\"])(padding)) padding = Math.max.apply(Math, padding);\n var refX = labelCfg.refX,\n refY = labelCfg.refY;\n // 考虑 refX 和 refY = 0 的场景,不用用 labelCfg.refX || Global.nodeLabel.refX\n if (Object(_antv_util__WEBPACK_IMPORTED_MODULE_1__[\"isNil\"])(refX)) {\n refX = this.refX; // 不居中时的偏移量\n }\n\n if (Object(_antv_util__WEBPACK_IMPORTED_MODULE_1__[\"isNil\"])(refY)) {\n refY = this.refY; // 不居中时的偏移量\n }\n\n var size = this.getSize(cfg);\n var r = Math.max(cfgStyle.r, size[0] / 2) || size[0] / 2;\n var dis = r + padding;\n var style;\n switch (labelPosition) {\n case 'top':\n style = {\n x: 0,\n y: -dis - refY,\n textBaseline: 'bottom',\n textAlign: 'center'\n };\n break;\n case 'bottom':\n style = {\n x: 0,\n y: dis + refY,\n textBaseline: 'bottom',\n textAlign: 'center'\n };\n break;\n case 'left':\n style = {\n x: -dis + refX,\n y: 0,\n textAlign: 'left'\n };\n break;\n case 'center':\n style = {\n x: 0,\n y: 0,\n text: cfg.label,\n textAlign: 'center'\n };\n break;\n default:\n style = {\n x: dis + refX,\n y: 0,\n textAlign: 'right'\n };\n break;\n }\n style.text = cfg.label;\n return style;\n },\n drawShape: function drawShape(cfg, group) {\n var shapeType = this.shapeType; // || this.type,都已经加了 shapeType\n var style = this.getShapeStyle(cfg);\n var shape = group.addShape(shapeType, {\n attrs: style,\n draggable: true,\n name: 'combo-shape'\n });\n return shape;\n },\n updateCollapsedIcon: function updateCollapsedIcon(cfg, item, keyShapeStyle) {\n var collapsed = cfg.collapsed,\n _a = cfg.collapsedSubstituteIcon,\n collapsedSubstituteIcon = _a === void 0 ? {} : _a;\n var substituteIconConfig = Object.assign({}, this.options.collapsedSubstituteIcon, collapsedSubstituteIcon);\n var show = substituteIconConfig.show,\n img = substituteIconConfig.img,\n width = substituteIconConfig.width,\n height = substituteIconConfig.height;\n var group = item.getContainer();\n var collapsedIconShape = group.find(function (ele) {\n return ele.get('name') === 'combo-collapsed-substitute-icon';\n });\n var iconShapeExist = collapsedIconShape && !collapsedIconShape.destroyed;\n var keyShape = item.get('keyShape');\n if (collapsed && show) {\n if (iconShapeExist) {\n collapsedIconShape.show();\n } else {\n var sizeAttr = {\n width: width || keyShapeStyle.r * 2 || keyShapeStyle.width,\n height: height || keyShapeStyle.r * 2 || keyShapeStyle.height\n };\n collapsedIconShape = group.addShape('image', {\n attrs: Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__assign\"])({\n img: img,\n x: -sizeAttr.width / 2,\n y: -sizeAttr.height / 2\n }, sizeAttr),\n name: 'combo-collapsed-substitute-icon',\n draggable: true\n });\n }\n keyShape.hide();\n } else if (iconShapeExist) {\n collapsedIconShape.hide();\n keyShape.show();\n }\n },\n updateShape: function updateShape(cfg, item, keyShapeStyle) {\n var _this = this;\n var keyShape = item.get('keyShape');\n var itemAnimate = item.get('animate');\n var animate = itemAnimate && (cfg.animate === undefined ? this.options.animate : cfg.animate);\n if (animate && keyShape.animate) {\n // 更新到展开状态,先将 collapsedIcon 隐藏。否则在动画完成后再出现 collapsedIcon\n if (!cfg.collapsed) {\n this.updateCollapsedIcon(cfg, item, keyShapeStyle);\n }\n keyShape.animate(keyShapeStyle, {\n duration: 200,\n easing: 'easeLinear',\n callback: function callback() {\n if (cfg.collapsed) {\n _this.updateCollapsedIcon(cfg, item, keyShapeStyle);\n }\n }\n });\n } else {\n keyShape.attr(Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__assign\"])({}, keyShapeStyle));\n this.updateCollapsedIcon(cfg, item, keyShapeStyle);\n }\n this.updateLabel(cfg, item);\n // special for some types of nodes\n }\n};\n\nvar singleComboDef = Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__assign\"])(Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__assign\"])({}, _shapeBase__WEBPACK_IMPORTED_MODULE_4__[\"shapeBase\"]), singleCombo);\n_shape__WEBPACK_IMPORTED_MODULE_3__[\"default\"].registerCombo('single-combo', singleComboDef);\n\n//# sourceURL=webpack:///./node_modules/@antv/g6-core/es/element/combo.js?");
/***/ }),
/***/ "./node_modules/@antv/g6-core/es/element/combos/circle.js":
/*!****************************************************************!*\
!*** ./node_modules/@antv/g6-core/es/element/combos/circle.js ***!
\****************************************************************/
/*! no exports provided */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tslib */ \"./node_modules/tslib/tslib.es6.js\");\n/* harmony import */ var _global__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../global */ \"./node_modules/@antv/g6-core/es/global.js\");\n/* harmony import */ var _shape__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../shape */ \"./node_modules/@antv/g6-core/es/element/shape.js\");\n/* harmony import */ var _antv_util__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @antv/util */ \"./node_modules/@antv/util/esm/index.js\");\n\n\n\n\n// 圆形 Combo\n_shape__WEBPACK_IMPORTED_MODULE_2__[\"default\"].registerCombo('circle', {\n // 自定义节点时的配置\n options: {\n size: [_global__WEBPACK_IMPORTED_MODULE_1__[\"default\"].defaultCombo.size[0], _global__WEBPACK_IMPORTED_MODULE_1__[\"default\"].defaultCombo.size[0]],\n padding: Math.max.apply(Math, _global__WEBPACK_IMPORTED_MODULE_1__[\"default\"].defaultCombo.padding),\n animate: true,\n style: {\n stroke: _global__WEBPACK_IMPORTED_MODULE_1__[\"default\"].defaultCombo.style.stroke,\n fill: _global__WEBPACK_IMPORTED_MODULE_1__[\"default\"].defaultCombo.style.fill,\n lineWidth: _global__WEBPACK_IMPORTED_MODULE_1__[\"default\"].defaultCombo.style.lineWidth\n },\n labelCfg: {\n style: {\n fill: _global__WEBPACK_IMPORTED_MODULE_1__[\"default\"].comboLabel.style.fill,\n fontSize: _global__WEBPACK_IMPORTED_MODULE_1__[\"default\"].comboLabel.style.fontSize\n },\n refX: 0,\n refY: 0\n },\n stateStyles: Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__assign\"])({}, _global__WEBPACK_IMPORTED_MODULE_1__[\"default\"].comboStateStyles),\n collapsedSubstituteIcon: {\n show: false,\n img: 'https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*RsnHRqLfJn4AAAAAAAAAAAAAARQnAQ'\n }\n },\n shapeType: 'circle',\n // 文本位置\n labelPosition: 'top',\n drawShape: function drawShape(cfg, group) {\n var style = this.getShapeStyle(cfg);\n delete style.height;\n delete style.width;\n var keyShape = group.addShape('circle', {\n attrs: style,\n className: 'circle-combo',\n name: 'circle-combo',\n draggable: true\n });\n return keyShape;\n },\n /**\n * 获取 Combo 的样式,供基于该 Combo 自定义时使用\n * @param {Object} cfg Combo 数据模型\n * @return {Object} Combo 的样式\n */\n getShapeStyle: function getShapeStyle(cfg) {\n var defaultStyle = this.options.style;\n var padding = cfg.padding || this.options.padding;\n if (Object(_antv_util__WEBPACK_IMPORTED_MODULE_3__[\"isArray\"])(padding)) padding = Math.max.apply(Math, padding);\n var strokeStyle = {\n stroke: cfg.color\n };\n // 如果设置了color,则覆盖默认的stroke属性\n var style = Object(_antv_util__WEBPACK_IMPORTED_MODULE_3__[\"mix\"])({}, defaultStyle, strokeStyle, cfg.style);\n var fixSize = cfg.collapsed && cfg.fixCollapseSize ? cfg.fixCollapseSize : cfg.fixSize;\n var r;\n if (fixSize) {\n r = Object(_antv_util__WEBPACK_IMPORTED_MODULE_3__[\"isNumber\"])(fixSize) ? fixSize / 2 : fixSize[0] / 2;\n } else {\n var size = this.getSize(cfg);\n if (!Object(_antv_util__WEBPACK_IMPORTED_MODULE_3__[\"isNumber\"])(style.r) || isNaN(style.r)) r = size[0] / 2 || _global__WEBPACK_IMPORTED_MODULE_1__[\"default\"].defaultCombo.style.r;else r = Math.max(style.r, size[0] / 2) || size[0] / 2;\n }\n style.r = r + padding;\n var styles = Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__assign\"])({\n x: 0,\n y: 0\n }, style);\n if (cfg.style) cfg.style.r = r;else {\n cfg.style = {\n r: r\n };\n }\n return styles;\n },\n update: function update(cfg, item) {\n var size = this.getSize(cfg);\n var padding = cfg.padding || this.options.padding;\n if (Object(_antv_util__WEBPACK_IMPORTED_MODULE_3__[\"isArray\"])(padding)) padding = Math.max.apply(Math, padding);\n var cfgStyle = Object(_antv_util__WEBPACK_IMPORTED_MODULE_3__[\"clone\"])(cfg.style);\n var fixSize = cfg.collapsed && cfg.fixCollapseSize ? cfg.fixCollapseSize : cfg.fixSize;\n var r;\n if (fixSize) {\n r = Object(_antv_util__WEBPACK_IMPORTED_MODULE_3__[\"isNumber\"])(fixSize) ? fixSize / 2 : fixSize[0] / 2;\n } else {\n r = Math.max(cfgStyle.r, size[0] / 2) || size[0] / 2;\n }\n cfgStyle.r = r + padding;\n var itemCacheSize = item.get('sizeCache');\n if (itemCacheSize) {\n itemCacheSize.r = cfgStyle.r;\n }\n // 下面这些属性需要覆盖默认样式与目前样式,但若在 cfg 中有指定则应该被 cfg 的相应配置覆盖。\n var strokeStyle = {\n stroke: cfg.color\n };\n // 与 getShapeStyle 不同在于,update 时需要获取到当前的 style 进行融合。即新传入的配置项中没有涉及的属性,保留当前的配置。\n var keyShape = item.get('keyShape');\n var style = Object(_antv_util__WEBPACK_IMPORTED_MODULE_3__[\"mix\"])({}, keyShape.attr(), strokeStyle, cfgStyle);\n if (cfg.style) cfg.style.r = r;else {\n cfg.style = {\n r: r\n };\n }\n this.updateShape(cfg, item, style, true);\n }\n}, 'single-combo');\n\n//# sourceURL=webpack:///./node_modules/@antv/g6-core/es/element/combos/circle.js?");
/***/ }),
/***/ "./node_modules/@antv/g6-core/es/element/combos/index.js":
/*!***************************************************************!*\
!*** ./node_modules/@antv/g6-core/es/element/combos/index.js ***!
\***************************************************************/
/*! no exports provided */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _circle__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./circle */ \"./node_modules/@antv/g6-core/es/element/combos/circle.js\");\n/* harmony import */ var _rect__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./rect */ \"./node_modules/@antv/g6-core/es/element/combos/rect.js\");\n\n\n\n//# sourceURL=webpack:///./node_modules/@antv/g6-core/es/element/combos/index.js?");
/***/ }),
/***/ "./node_modules/@antv/g6-core/es/element/combos/rect.js":
/*!**************************************************************!*\
!*** ./node_modules/@antv/g6-core/es/element/combos/rect.js ***!
\**************************************************************/
/*! no exports provided */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tslib */ \"./node_modules/tslib/tslib.es6.js\");\n/* harmony import */ var _antv_util__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @antv/util */ \"./node_modules/@antv/util/esm/index.js\");\n/* harmony import */ var _global__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../global */ \"./node_modules/@antv/g6-core/es/global.js\");\n/* harmony import */ var _shape__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../shape */ \"./node_modules/@antv/g6-core/es/element/shape.js\");\n\n\n\n\n_shape__WEBPACK_IMPORTED_MODULE_3__[\"default\"].registerCombo('rect', {\n // 自定义 Combo 时的配置\n options: {\n size: [40, 5],\n padding: [25, 20, 15, 20],\n animate: true,\n style: {\n radius: 0,\n stroke: _global__WEBPACK_IMPORTED_MODULE_2__[\"default\"].defaultCombo.style.stroke,\n fill: _global__WEBPACK_IMPORTED_MODULE_2__[\"default\"].defaultCombo.style.fill,\n lineWidth: _global__WEBPACK_IMPORTED_MODULE_2__[\"default\"].defaultCombo.style.lineWidth\n },\n // 文本样式配置\n labelCfg: {\n style: {\n fill: _global__WEBPACK_IMPORTED_MODULE_2__[\"default\"].comboLabel.style.fill,\n fontSize: _global__WEBPACK_IMPORTED_MODULE_2__[\"default\"].comboLabel.style.fontSize,\n fontFamily: _global__WEBPACK_IMPORTED_MODULE_2__[\"default\"].windowFontFamily\n }\n },\n // 连接点,默认为左右\n anchorPoints: [[0, 0.5], [1, 0.5]],\n stateStyles: Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__assign\"])({}, _global__WEBPACK_IMPORTED_MODULE_2__[\"default\"].comboStateStyles),\n collapsedSubstituteIcon: {\n show: false,\n img: 'https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*RsnHRqLfJn4AAAAAAAAAAAAAARQnAQ'\n }\n },\n shapeType: 'rect',\n labelPosition: 'top',\n drawShape: function drawShape(cfg, group) {\n var style = this.getShapeStyle(cfg);\n var keyShape = group.addShape('rect', {\n attrs: style,\n className: 'rect-combo',\n name: 'rect-combo',\n draggable: true\n });\n return keyShape;\n },\n // 私有方法,不希望扩展的 Combo 复写这个方法\n getLabelStyleByPosition: function getLabelStyleByPosition(cfg, labelCfg) {\n var labelPosition = labelCfg.position || this.labelPosition;\n var cfgStyle = cfg.style;\n var padding = cfg.padding || this.options.padding;\n if (Object(_antv_util__WEBPACK_IMPORTED_MODULE_1__[\"isNumber\"])(padding)) padding = [padding, padding, padding, padding];\n var refX = labelCfg.refX,\n refY = labelCfg.refY;\n // 考虑 refX 和 refY = 0 的场景,不用用 labelCfg.refX || Global.nodeLabel.refY\n if (Object(_antv_util__WEBPACK_IMPORTED_MODULE_1__[\"isNil\"])(refX)) {\n refX = this.refX; // 不居中时的偏移量\n }\n\n if (Object(_antv_util__WEBPACK_IMPORTED_MODULE_1__[\"isNil\"])(refY)) {\n refY = this.refY; // 不居中时的偏移量\n }\n\n var left = -cfgStyle.width / 2 - padding[3];\n var right = cfgStyle.width / 2 + padding[1];\n var top = -cfgStyle.height / 2 - padding[0];\n var bottom = cfgStyle.height / 2 + padding[2];\n var style;\n switch (labelPosition) {\n case 'top':\n style = {\n x: left + refX,\n y: top + refY,\n textBaseline: 'top',\n textAlign: 'left'\n };\n break;\n case 'bottom':\n style = {\n x: 0,\n y: bottom + refY,\n textBaseline: 'top',\n textAlign: 'center'\n };\n break;\n case 'left':\n style = {\n x: left + refY,\n y: 0,\n textAlign: 'left'\n };\n break;\n case 'center':\n style = {\n x: 0,\n y: 0,\n text: cfg.label,\n textAlign: 'center'\n };\n break;\n case 'top-center':\n style = {\n x: 0,\n y: top + refY,\n textBaseline: 'top',\n textAlign: 'center'\n };\n break;\n default:\n style = {\n x: right + refX,\n y: 0,\n textAlign: 'right'\n };\n break;\n }\n style.text = cfg.label;\n return style;\n },\n /**\n * 获取节点的样式,供基于该节点自定义时使用\n * @param {Object} cfg 节点数据模型\n * @return {Object} 节点的样式\n */\n getShapeStyle: function getShapeStyle(cfg) {\n var defaultStyle = this.options.style;\n var padding = cfg.padding || this.options.padding;\n if (Object(_antv_util__WEBPACK_IMPORTED_MODULE_1__[\"isNumber\"])(padding)) padding = [padding, padding, padding, padding];\n var strokeStyle = {\n stroke: cfg.color\n };\n // 如果设置了color,则覆盖默认的stroke属性\n var style = Object(_antv_util__WEBPACK_IMPORTED_MODULE_1__[\"mix\"])({}, defaultStyle, strokeStyle, cfg.style);\n var size = this.getSize(cfg);\n var width;\n var height;\n var fixSize = cfg.collapsed && cfg.fixCollapseSize ? cfg.fixCollapseSize : cfg.fixSize;\n if (fixSize) {\n if (Object(_antv_util__WEBPACK_IMPORTED_MODULE_1__[\"isNumber\"])(fixSize)) {\n width = fixSize;\n height = fixSize;\n } else {\n width = fixSize[0];\n height = fixSize[1];\n }\n } else {\n if (!Object(_antv_util__WEBPACK_IMPORTED_MODULE_1__[\"isNumber\"])(style.width) || isNaN(style.width)) width = size[0] || _global__WEBPACK_IMPORTED_MODULE_2__[\"default\"].defaultCombo.style.width;else width = Math.max(style.width, size[0]) || size[0];\n if (!Object(_antv_util__WEBPACK_IMPORTED_MODULE_1__[\"isNumber\"])(style.height) || isNaN(style.height)) height = size[1] || _global__WEBPACK_IMPORTED_MODULE_2__[\"default\"].defaultCombo.style.height;else height = Math.max(style.height, size[1]) || size[1];\n }\n var x = -width / 2 - padding[3];\n var y = -height / 2 - padding[0];\n style.width = width + padding[1] + padding[3];\n style.height = height + padding[0] + padding[2];\n var styles = Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__assign\"])({\n x: x,\n y: y\n }, style);\n if (!cfg.style) {\n cfg.style = {\n width: width,\n height: height\n };\n } else {\n cfg.style.width = width;\n cfg.style.height = height;\n }\n return styles;\n },\n update: function update(cfg, item) {\n var size = this.getSize(cfg);\n var padding = cfg.padding || this.options.padding;\n if (Object(_antv_util__WEBPACK_IMPORTED_MODULE_1__[\"isNumber\"])(padding)) padding = [padding, padding, padding, padding];\n var cfgStyle = Object(_antv_util__WEBPACK_IMPORTED_MODULE_1__[\"clone\"])(cfg.style);\n var width, height;\n var fixSize = cfg.collapsed && cfg.fixCollapseSize ? cfg.fixCollapseSize : cfg.fixSize;\n if (fixSize) {\n if (Object(_antv_util__WEBPACK_IMPORTED_MODULE_1__[\"isNumber\"])(fixSize)) {\n width = fixSize;\n height = fixSize;\n } else {\n width = fixSize[0];\n height = fixSize[1];\n }\n } else {\n width = Math.max(cfgStyle.width, size[0]) || size[0];\n height = Math.max(cfgStyle.height, size[1]) || size[1];\n }\n cfgStyle.width = width + padding[1] + padding[3];\n cfgStyle.height = height + padding[0] + padding[2];\n var itemCacheSize = item.get('sizeCache');\n if (itemCacheSize) {\n itemCacheSize.width = cfgStyle.width;\n itemCacheSize.height = cfgStyle.height;\n }\n cfgStyle.x = -width / 2 - padding[3];\n cfgStyle.y = -height / 2 - padding[0];\n // 下面这些属性需要覆盖默认样式与目前样式,但若在 cfg 中有指定则应该被 cfg 的相应配置覆盖。\n var strokeStyle = {\n stroke: cfg.color\n };\n // 与 getShapeStyle 不同在于,update 时需要获取到当前的 style 进行融合。即新传入的配置项中没有涉及的属性,保留当前的配置。\n var keyShape = item.get('keyShape');\n var style = Object(_antv_util__WEBPACK_IMPORTED_MODULE_1__[\"mix\"])({}, keyShape.attr(), strokeStyle, cfgStyle);\n if (cfg.style) {\n cfg.style.width = width;\n cfg.style.height = height;\n } else {\n cfg.style = {\n width: width,\n height: height\n };\n }\n this.updateShape(cfg, item, style, false);\n }\n}, 'single-combo');\n\n//# sourceURL=webpack:///./node_modules/@antv/g6-core/es/element/combos/rect.js?");
/***/ }),
/***/ "./node_modules/@antv/g6-core/es/element/edge.js":
/*!*******************************************************!*\
!*** ./node_modules/@antv/g6-core/es/element/edge.js ***!
\*******************************************************/
/*! no exports provided */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tslib */ \"./node_modules/tslib/tslib.es6.js\");\n/* harmony import */ var _antv_util__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @antv/util */ \"./node_modules/@antv/util/esm/index.js\");\n/* harmony import */ var _util_graphic__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../util/graphic */ \"./node_modules/@antv/g6-core/es/util/graphic.js\");\n/* harmony import */ var _util_math__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../util/math */ \"./node_modules/@antv/g6-core/es/util/math.js\");\n/* harmony import */ var _util_path__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../util/path */ \"./node_modules/@antv/g6-core/es/util/path.js\");\n/* harmony import */ var _global__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../global */ \"./node_modules/@antv/g6-core/es/global.js\");\n/* harmony import */ var _shape__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./shape */ \"./node_modules/@antv/g6-core/es/element/shape.js\");\n/* harmony import */ var _shapeBase__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./shapeBase */ \"./node_modules/@antv/g6-core/es/element/shapeBase.js\");\n/**\n * @fileOverview 自定义边\n * @description 自定义边中有大量逻辑同自定义节点重复,虽然可以提取成为 mixin ,但是考虑到代码的可读性,还是单独实现。\n */\n\n\n\n\n\n\n\n\nvar CLS_SHAPE = 'edge-shape';\n// start,end 倒置,center 不变\nfunction revertAlign(labelPosition) {\n var textAlign = labelPosition;\n if (labelPosition === 'start') {\n textAlign = 'end';\n } else if (labelPosition === 'end') {\n textAlign = 'start';\n }\n return textAlign;\n}\nvar singleEdge = {\n itemType: 'edge',\n /**\n * 文本的位置\n * @type {String}\n */\n labelPosition: 'center',\n /**\n * 文本的 x 偏移\n * @type {Number}\n */\n refX: 0,\n /**\n * 文本的 y 偏移\n * @type {Number}\n */\n refY: 0,\n /**\n * 文本是否跟着线自动旋转,默认 false\n * @type {Boolean}\n */\n labelAutoRotate: false,\n // 自定义边时的配置\n options: {\n size: _global__WEBPACK_IMPORTED_MODULE_5__[\"default\"].defaultEdge.size,\n style: {\n x: 0,\n y: 0,\n stroke: _global__WEBPACK_IMPORTED_MODULE_5__[\"default\"].defaultEdge.style.stroke,\n lineAppendWidth: _global__WEBPACK_IMPORTED_MODULE_5__[\"default\"].defaultEdge.style.lineAppendWidth\n },\n labelCfg: {\n style: {\n fill: _global__WEBPACK_IMPORTED_MODULE_5__[\"default\"].edgeLabel.style.fill,\n fontSize: _global__WEBPACK_IMPORTED_MODULE_5__[\"default\"].edgeLabel.style.fontSize,\n fontFamily: _global__WEBPACK_IMPORTED_MODULE_5__[\"default\"].windowFontFamily\n }\n },\n stateStyles: Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__assign\"])({}, _global__WEBPACK_IMPORTED_MODULE_5__[\"default\"].edgeStateStyles)\n },\n /**\n * 获取边的 path\n * @internal 供扩展的边覆盖\n * @param {Array} points 构成边的点的集合\n * @return {Array} 构成 path 的数组\n */\n getPath: function getPath(points) {\n var path = [];\n Object(_antv_util__WEBPACK_IMPORTED_MODULE_1__[\"each\"])(points, function (point, index) {\n if (index === 0) {\n path.push(['M', point.x, point.y]);\n } else {\n path.push(['L', point.x, point.y]);\n }\n });\n return path;\n },\n getShapeStyle: function getShapeStyle(cfg) {\n var defaultStyle = this.options.style;\n var strokeStyle = {\n stroke: cfg.color\n };\n // 如果设置了color,则覆盖默认的stroke属性\n var style = Object(_antv_util__WEBPACK_IMPORTED_MODULE_1__[\"mix\"])({}, defaultStyle, strokeStyle, cfg.style);\n var size = cfg.size || _global__WEBPACK_IMPORTED_MODULE_5__[\"default\"].defaultEdge.size;\n cfg = this.getPathPoints(cfg);\n var startPoint = cfg.startPoint,\n endPoint = cfg.endPoint;\n var controlPoints = this.getControlPoints(cfg);\n var points = [startPoint]; // 添加起始点\n // 添加控制点\n if (controlPoints) {\n points = points.concat(controlPoints);\n }\n // 添加结束点\n points.push(endPoint);\n var path = this.getPath(points);\n var styles = Object(_antv_util__WEBPACK_IMPORTED_MODULE_1__[\"mix\"])({}, _global__WEBPACK_IMPORTED_MODULE_5__[\"default\"].defaultEdge.style, {\n stroke: _global__WEBPACK_IMPORTED_MODULE_5__[\"default\"].defaultEdge.color,\n lineWidth: size,\n path: path\n }, style);\n return styles;\n },\n updateShapeStyle: function updateShapeStyle(cfg, item, updateType) {\n var _a;\n var group = item.getContainer();\n // const strokeStyle: ShapeStyle = {\n // stroke: cfg.color,\n // };\n var shape = ((_a = item.getKeyShape) === null || _a === void 0 ? void 0 : _a.call(item)) || group['shapeMap']['edge-shape']; // group.find((element) => element.get('className') === 'edge-shape');\n var size = cfg.size;\n cfg = this.getPathPoints(cfg);\n var startPoint = cfg.startPoint,\n endPoint = cfg.endPoint;\n var controlPoints = this.getControlPoints(cfg); // || cfg.controlPoints;\n var points = [startPoint]; // 添加起始点\n // 添加控制点\n if (controlPoints) {\n points = points.concat(controlPoints);\n }\n // 添加结束点\n points.push(endPoint);\n var currentAttr = shape.attr();\n // const previousStyle = mix({}, strokeStyle, currentAttr, cfg.style);\n var previousStyle = cfg.style || {};\n if (previousStyle.stroke === undefined) {\n previousStyle.stroke = cfg.color;\n }\n var source = cfg.sourceNode;\n var target = cfg.targetNode;\n var routeCfg = {\n radius: previousStyle.radius\n };\n if (!controlPoints) {\n routeCfg = {\n source: source,\n target: target,\n offset: previousStyle.offset,\n radius: previousStyle.radius\n };\n }\n var path = this.getPath(points, routeCfg);\n var style = {};\n if (updateType === 'move') {\n style = {\n path: path\n };\n } else {\n if (currentAttr.endArrow && previousStyle.endArrow === false) {\n cfg.style.endArrow = {\n path: ''\n };\n }\n if (currentAttr.startArrow && previousStyle.startArrow === false) {\n cfg.style.startArrow = {\n path: ''\n };\n }\n style = Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__assign\"])({}, cfg.style);\n if (style.lineWidth === undefined) style.lineWidth = (Object(_antv_util__WEBPACK_IMPORTED_MODULE_1__[\"isNumber\"])(size) ? size : size === null || size === void 0 ? void 0 : size[0]) || currentAttr.lineWidth;\n if (style.path === undefined) style.path = path;\n if (style.stroke === undefined) style.stroke = currentAttr.stroke || cfg.color;\n }\n if (shape) {\n shape.attr(style);\n }\n },\n getLabelStyleByPosition: function getLabelStyleByPosition(cfg, labelCfg, group) {\n var labelPosition = labelCfg.position || this.labelPosition; // 文本的位置用户可以传入\n var style = {};\n var pathShape = group === null || group === void 0 ? void 0 : group['shapeMap'][CLS_SHAPE]; // group?.find((element) => element.get('className') === CLS_SHAPE);\n // 不对 pathShape 进行判空,如果线不存在,说明有问题了\n var pointPercent;\n if (labelPosition === 'start') {\n pointPercent = 0;\n } else if (labelPosition === 'end') {\n pointPercent = 1;\n } else {\n pointPercent = 0.5;\n }\n // 偏移量\n var offsetX = labelCfg.refX || this.refX;\n var offsetY = labelCfg.refY || this.refY;\n // 如果两个节点重叠,线就变成了一个点,这时候label的位置,就是这个点 + 绝对偏移\n if (cfg.startPoint.x === cfg.endPoint.x && cfg.startPoint.y === cfg.endPoint.y) {\n style.x = cfg.startPoint.x + offsetX;\n style.y = cfg.startPoint.y + offsetY;\n style.text = cfg.label;\n return style;\n }\n var autoRotate;\n if (Object(_antv_util__WEBPACK_IMPORTED_MODULE_1__[\"isNil\"])(labelCfg.autoRotate)) autoRotate = this.labelAutoRotate;else autoRotate = labelCfg.autoRotate;\n var offsetStyle = Object(_util_graphic__WEBPACK_IMPORTED_MODULE_2__[\"getLabelPosition\"])(pathShape, pointPercent, offsetX, offsetY, autoRotate);\n style.x = offsetStyle.x;\n style.y = offsetStyle.y;\n style.rotate = offsetStyle.rotate;\n style.textAlign = this._getTextAlign(labelPosition, offsetStyle.angle);\n style.text = cfg.label;\n return style;\n },\n getLabelBgStyleByPosition: function getLabelBgStyleByPosition(label, labelCfg) {\n if (!label) {\n return {};\n }\n var bbox = label.getBBox();\n var backgroundStyle = labelCfg.style && labelCfg.style.background;\n if (!backgroundStyle) {\n return {};\n }\n var padding = backgroundStyle.padding;\n var backgroundWidth = bbox.width + padding[1] + padding[3];\n var backgroundHeight = bbox.height + padding[0] + padding[2];\n var style = Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__assign\"])(Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__assign\"])({}, backgroundStyle), {\n width: backgroundWidth,\n height: backgroundHeight,\n x: bbox.minX - padding[3],\n y: bbox.minY - padding[0],\n matrix: [1, 0, 0, 0, 1, 0, 0, 0, 1]\n });\n var autoRotate;\n if (Object(_antv_util__WEBPACK_IMPORTED_MODULE_1__[\"isNil\"])(labelCfg.autoRotate)) autoRotate = this.labelAutoRotate;else autoRotate = labelCfg.autoRotate;\n if (autoRotate) {\n style.matrix = label.attr('matrix') || [1, 0, 0, 0, 1, 0, 0, 0, 1];\n }\n return style;\n },\n // 获取文本对齐方式\n _getTextAlign: function _getTextAlign(labelPosition, angle) {\n var textAlign = 'center';\n if (!angle) {\n return labelPosition;\n }\n angle = angle % (Math.PI * 2); // 取模\n if (labelPosition !== 'center') {\n if (angle >= 0 && angle <= Math.PI / 2 || angle >= 3 / 2 * Math.PI && angle < 2 * Math.PI) {\n textAlign = labelPosition;\n } else {\n textAlign = revertAlign(labelPosition);\n }\n }\n return textAlign;\n },\n /**\n * @internal 获取边的控制点\n * @param {Object} cfg 边的配置项\n * @return {Array} 控制点的数组\n */\n getControlPoints: function getControlPoints(cfg) {\n return cfg.controlPoints;\n },\n /**\n * @internal 处理需要重计算点和边的情况\n * @param {Object} cfg 边的配置项\n * @return {Object} 边的配置项\n */\n getPathPoints: function getPathPoints(cfg) {\n return cfg;\n },\n /**\n * 绘制边\n * @override\n * @param {Object} cfg 边的配置项\n * @param {G.Group} group 边的容器\n * @return {IShape} 图形\n */\n drawShape: function drawShape(cfg, group) {\n var shapeStyle = this.getShapeStyle(cfg);\n var shape = group.addShape('path', {\n className: CLS_SHAPE,\n name: CLS_SHAPE,\n attrs: shapeStyle\n });\n group['shapeMap'][CLS_SHAPE] = shape;\n return shape;\n },\n drawLabel: function drawLabel(cfg, group) {\n var defaultLabelCfg = this.options.labelCfg;\n var labelCfg = Object(_antv_util__WEBPACK_IMPORTED_MODULE_1__[\"deepMix\"])({}, defaultLabelCfg, cfg.labelCfg);\n var labelStyle = this.getLabelStyle(cfg, labelCfg, group);\n var rotate = labelStyle.rotate;\n delete labelStyle.rotate;\n var label = group.addShape('text', {\n attrs: labelStyle,\n name: 'text-shape',\n labelRelated: true,\n draggable: true\n });\n group['shapeMap']['text-shape'] = label;\n if (!isNaN(rotate) && rotate !== '') {\n label.rotateAtStart(rotate);\n }\n if (labelStyle.background) {\n var rect = this.drawLabelBg(cfg, group, label, labelStyle, rotate);\n var labelBgClassname = this.itemType + _shapeBase__WEBPACK_IMPORTED_MODULE_7__[\"CLS_LABEL_BG_SUFFIX\"];\n rect.set('classname', labelBgClassname);\n group['shapeMap'][labelBgClassname] = rect;\n label.toFront();\n }\n return label;\n },\n drawLabelBg: function drawLabelBg(cfg, group, label, labelStyle, rotate) {\n var defaultLabelCfg = this.options.labelCfg;\n var labelCfg = Object(_antv_util__WEBPACK_IMPORTED_MODULE_1__[\"deepMix\"])({}, defaultLabelCfg, cfg.labelCfg);\n var style = this.getLabelBgStyleByPosition(label, labelCfg);\n var rect = group.addShape('rect', {\n name: 'text-bg-shape',\n attrs: style,\n labelRelated: true\n });\n group['shapeMap']['text-bg-shape'] = rect;\n return rect;\n }\n};\nvar singleEdgeDef = Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__assign\"])(Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__assign\"])({}, _shapeBase__WEBPACK_IMPORTED_MODULE_7__[\"shapeBase\"]), singleEdge);\n_shape__WEBPACK_IMPORTED_MODULE_6__[\"default\"].registerEdge('single-edge', singleEdgeDef);\n// 直线, 不支持控制点\n_shape__WEBPACK_IMPORTED_MODULE_6__[\"default\"].registerEdge('line', {\n // 控制点不生效\n getControlPoints: function getControlPoints() {\n return undefined;\n }\n}, 'single-edge');\n// 直线\n_shape__WEBPACK_IMPORTED_MODULE_6__[\"default\"].registerEdge('spline', {\n getPath: function getPath(points) {\n var path = Object(_util_path__WEBPACK_IMPORTED_MODULE_4__[\"getSpline\"])(points);\n return path;\n }\n}, 'single-edge');\n_shape__WEBPACK_IMPORTED_MODULE_6__[\"default\"].registerEdge('arc', {\n curveOffset: 20,\n clockwise: 1,\n getControlPoints: function getControlPoints(cfg) {\n var startPoint = cfg.startPoint,\n endPoint = cfg.endPoint;\n var midPoint = {\n x: (startPoint.x + endPoint.x) / 2,\n y: (startPoint.y + endPoint.y) / 2\n };\n var center;\n var arcPoint;\n // 根据给定点计算圆弧\n if (cfg.controlPoints !== undefined) {\n arcPoint = cfg.controlPoints[0];\n center = Object(_util_math__WEBPACK_IMPORTED_MODULE_3__[\"getCircleCenterByPoints\"])(startPoint, arcPoint, endPoint);\n // 根据控制点和直线关系决定 clockwise值\n if (startPoint.x <= endPoint.x && startPoint.y > endPoint.y) {\n this.clockwise = center.x > arcPoint.x ? 0 : 1;\n } else if (startPoint.x <= endPoint.x && startPoint.y < endPoint.y) {\n this.clockwise = center.x > arcPoint.x ? 1 : 0;\n } else if (startPoint.x > endPoint.x && startPoint.y <= endPoint.y) {\n this.clockwise = center.y < arcPoint.y ? 0 : 1;\n } else {\n this.clockwise = center.y < arcPoint.y ? 1 : 0;\n }\n // 若给定点和两端点共线,无法生成圆弧,绘制直线\n if ((arcPoint.x - startPoint.x) / (arcPoint.y - startPoint.y) === (endPoint.x - startPoint.x) / (endPoint.y - startPoint.y)) {\n return [];\n }\n } else {\n // 根据直线连线中点的的偏移计算圆弧\n // 若用户给定偏移量则根据其计算,否则按照默认偏移值计算\n if (cfg.curveOffset === undefined) {\n cfg.curveOffset = this.curveOffset;\n }\n if (Object(_antv_util__WEBPACK_IMPORTED_MODULE_1__[\"isArray\"])(cfg.curveOffset)) {\n cfg.curveOffset = cfg.curveOffset[0];\n }\n if (cfg.curveOffset < 0) {\n this.clockwise = 0;\n } else {\n this.clockwise = 1;\n }\n var vec = {\n x: endPoint.x - startPoint.x,\n y: endPoint.y - startPoint.y\n };\n var edgeAngle = Math.atan2(vec.y, vec.x);\n arcPoint = {\n x: cfg.curveOffset * Math.cos(-Math.PI / 2 + edgeAngle) + midPoint.x,\n y: cfg.curveOffset * Math.sin(-Math.PI / 2 + edgeAngle) + midPoint.y\n };\n center = Object(_util_math__WEBPACK_IMPORTED_MODULE_3__[\"getCircleCenterByPoints\"])(startPoint, arcPoint, endPoint);\n }\n var radius = Object(_util_math__WEBPACK_IMPORTED_MODULE_3__[\"distance\"])(startPoint, center);\n var controlPoints = [{\n x: radius,\n y: radius\n }];\n return controlPoints;\n },\n getPath: function getPath(points) {\n var path = [];\n path.push(['M', points[0].x, points[0].y]);\n // 控制点与端点共线\n if (points.length === 2) {\n path.push(['L', points[1].x, points[1].y]);\n } else {\n path.push(['A', points[1].x, points[1].y, 0, 0, this.clockwise, points[2].x, points[2].y]);\n }\n return path;\n }\n}, 'single-edge');\n_shape__WEBPACK_IMPORTED_MODULE_6__[\"default\"].registerEdge('quadratic', {\n curvePosition: 0.5,\n curveOffset: -20,\n getControlPoints: function getControlPoints(cfg) {\n var controlPoints = cfg.controlPoints; // 指定controlPoints\n if (!controlPoints || !controlPoints.length) {\n var startPoint = cfg.startPoint,\n endPoint = cfg.endPoint;\n if (cfg.curveOffset === undefined) cfg.curveOffset = this.curveOffset;\n if (cfg.curvePosition === undefined) cfg.curvePosition = this.curvePosition;\n if (Object(_antv_util__WEBPACK_IMPORTED_MODULE_1__[\"isArray\"])(cfg.curveOffset)) cfg.curveOffset = cfg.curveOffset[0];\n if (Object(_antv_util__WEBPACK_IMPORTED_MODULE_1__[\"isArray\"])(cfg.curvePosition)) cfg.curvePosition = cfg.curveOffset[0];\n var innerPoint = Object(_util_path__WEBPACK_IMPORTED_MODULE_4__[\"getControlPoint\"])(startPoint, endPoint, cfg.curvePosition, cfg.curveOffset);\n controlPoints = [innerPoint];\n }\n return controlPoints;\n },\n getPath: function getPath(points) {\n var path = [];\n path.push(['M', points[0].x, points[0].y]);\n path.push(['Q', points[1].x, points[1].y, points[2].x, points[2].y]);\n return path;\n }\n}, 'single-edge');\n_shape__WEBPACK_IMPORTED_MODULE_6__[\"default\"].registerEdge('cubic', {\n curvePosition: [1 / 2, 1 / 2],\n curveOffset: [-20, 20],\n getControlPoints: function getControlPoints(cfg) {\n var controlPoints = cfg.controlPoints; // 指定 controlPoints\n if (cfg.curveOffset === undefined) cfg.curveOffset = this.curveOffset;\n if (cfg.curvePosition === undefined) cfg.curvePosition = this.curvePosition;\n if (Object(_antv_util__WEBPACK_IMPORTED_MODULE_1__[\"isNumber\"])(cfg.curveOffset)) cfg.curveOffset = [cfg.curveOffset, -cfg.curveOffset];\n if (Object(_antv_util__WEBPACK_IMPORTED_MODULE_1__[\"isNumber\"])(cfg.curvePosition)) cfg.curvePosition = [cfg.curvePosition, 1 - cfg.curvePosition];\n if (!controlPoints || !controlPoints.length || controlPoints.length < 2) {\n var startPoint = cfg.startPoint,\n endPoint = cfg.endPoint;\n var innerPoint1 = Object(_util_path__WEBPACK_IMPORTED_MODULE_4__[\"getControlPoint\"])(startPoint, endPoint, cfg.curvePosition[0], cfg.curveOffset[0]);\n var innerPoint2 = Object(_util_path__WEBPACK_IMPORTED_MODULE_4__[\"getControlPoint\"])(startPoint, endPoint, cfg.curvePosition[1], cfg.curveOffset[1]);\n controlPoints = [innerPoint1, innerPoint2];\n }\n return controlPoints;\n },\n getPath: function getPath(points) {\n var path = [];\n path.push(['M', points[0].x, points[0].y]);\n path.push(['C', points[1].x, points[1].y, points[2].x, points[2].y, points[3].x, points[3].y]);\n return path;\n }\n}, 'single-edge');\n// 垂直方向的三阶贝塞尔曲线,不再考虑用户外部传入的控制点\n_shape__WEBPACK_IMPORTED_MODULE_6__[\"default\"].registerEdge('cubic-vertical', {\n curvePosition: [1 / 2, 1 / 2],\n minCurveOffset: [0, 0],\n curveOffset: undefined,\n getControlPoints: function getControlPoints(cfg) {\n var startPoint = cfg.startPoint,\n endPoint = cfg.endPoint;\n if (cfg.curvePosition === undefined) cfg.curvePosition = this.curvePosition;\n if (cfg.curveOffset === undefined) cfg.curveOffset = this.curveOffset;\n if (cfg.minCurveOffset === undefined) cfg.minCurveOffset = this.minCurveOffset;\n if (Object(_antv_util__WEBPACK_IMPORTED_MODULE_1__[\"isNumber\"])(cfg.curveOffset)) cfg.curveOffset = [cfg.curveOffset, -cfg.curveOffset];\n if (Object(_antv_util__WEBPACK_IMPORTED_MODULE_1__[\"isNumber\"])(cfg.minCurveOffset)) cfg.minCurveOffset = [cfg.minCurveOffset, -cfg.minCurveOffset];\n if (Object(_antv_util__WEBPACK_IMPORTED_MODULE_1__[\"isNumber\"])(cfg.curvePosition)) cfg.curvePosition = [cfg.curvePosition, 1 - cfg.curvePosition];\n var yDist = endPoint.y - startPoint.y;\n var curveOffset = [0, 0];\n if (cfg.curveOffset) {\n curveOffset = cfg.curveOffset;\n } else if (Math.abs(yDist) < Math.abs(cfg.minCurveOffset[0])) {\n curveOffset = cfg.minCurveOffset;\n }\n var innerPoint1 = {\n x: startPoint.x,\n y: startPoint.y + yDist * this.curvePosition[0] + curveOffset[0]\n };\n var innerPoint2 = {\n x: endPoint.x,\n y: endPoint.y - yDist * this.curvePosition[1] + curveOffset[1]\n };\n return [innerPoint1, innerPoint2];\n }\n}, 'cubic');\n// 水平方向的三阶贝塞尔曲线,不再考虑用户外部传入的控制点\n_shape__WEBPACK_IMPORTED_MODULE_6__[\"default\"].registerEdge('cubic-horizontal', {\n curvePosition: [1 / 2, 1 / 2],\n minCurveOffset: [0, 0],\n curveOffset: undefined,\n getControlPoints: function getControlPoints(cfg) {\n var startPoint = cfg.startPoint,\n endPoint = cfg.endPoint;\n if (cfg.curvePosition === undefined) cfg.curvePosition = this.curvePosition;\n if (cfg.curveOffset === undefined) cfg.curveOffset = this.curveOffset;\n if (cfg.minCurveOffset === undefined) cfg.minCurveOffset = this.minCurveOffset;\n if (Object(_antv_util__WEBPACK_IMPORTED_MODULE_1__[\"isNumber\"])(cfg.curveOffset)) cfg.curveOffset = [cfg.curveOffset, -cfg.curveOffset];\n if (Object(_antv_util__WEBPACK_IMPORTED_MODULE_1__[\"isNumber\"])(cfg.minCurveOffset)) cfg.minCurveOffset = [cfg.minCurveOffset, -cfg.minCurveOffset];\n if (Object(_antv_util__WEBPACK_IMPORTED_MODULE_1__[\"isNumber\"])(cfg.curvePosition)) cfg.curvePosition = [cfg.curvePosition, 1 - cfg.curvePosition];\n var xDist = endPoint.x - startPoint.x;\n var curveOffset = [0, 0];\n if (cfg.curveOffset) {\n curveOffset = cfg.curveOffset;\n } else if (Math.abs(xDist) < Math.abs(cfg.minCurveOffset[0])) {\n curveOffset = cfg.minCurveOffset;\n }\n var innerPoint1 = {\n x: startPoint.x + xDist * this.curvePosition[0] + curveOffset[0],\n y: startPoint.y\n };\n var innerPoint2 = {\n x: endPoint.x - xDist * this.curvePosition[1] + curveOffset[1],\n y: endPoint.y\n };\n var controlPoints = [innerPoint1, innerPoint2];\n return controlPoints;\n }\n}, 'cubic');\n_shape__WEBPACK_IMPORTED_MODULE_6__[\"default\"].registerEdge('loop', {\n getPathPoints: function getPathPoints(cfg) {\n return Object(_util_graphic__WEBPACK_IMPORTED_MODULE_2__[\"getLoopCfgs\"])(cfg);\n },\n getControlPoints: function getControlPoints(cfg) {\n return cfg.controlPoints;\n },\n afterDraw: function afterDraw(cfg) {\n cfg.controlPoints = undefined;\n },\n afterUpdate: function afterUpdate(cfg) {\n cfg.controlPoints = undefined;\n }\n}, 'cubic');\n\n//# sourceURL=webpack:///./node_modules/@antv/g6-core/es/element/edge.js?");
/***/ }),
/***/ "./node_modules/@antv/g6-core/es/element/hull/bubbleset.js":
/*!*****************************************************************!*\
!*** ./node_modules/@antv/g6-core/es/element/hull/bubbleset.js ***!
\*****************************************************************/
/*! exports provided: genBubbleSet */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"genBubbleSet\", function() { return genBubbleSet; });\n/* harmony import */ var _util_math__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../util/math */ \"./node_modules/@antv/g6-core/es/util/math.js\");\n\nvar defaultOps = {\n maxRoutingIterations: 100,\n maxMarchingIterations: 100,\n pixelGroupSize: 2,\n edgeR0: 10,\n edgeR1: 10,\n nodeR0: 5,\n nodeR1: 10,\n morphBuffer: 5,\n threshold: 0.001,\n skip: 16,\n nodeInfluenceFactor: 1,\n edgeInfluenceFactor: 1,\n negativeNodeInfluenceFactor: -0.5\n};\n/**\n * Marching square algorithm for traching the contour of a pixel group\n * https://www.emanueleferonato.com/2013/03/01/using-marching-squares-algorithm-to-trace-the-contour-of-an-image/\n * @param potentialArea\n * @param threshold\n */\nfunction MarchingSquares(contour, potentialArea, threshold) {\n var marched = false;\n var getVal = function getVal(x, y) {\n return potentialArea.cells[x + y * potentialArea.width];\n };\n var getState = function getState(x, y) {\n var squareVal = 0;\n if (getVal(x - 1, y - 1) >= threshold) {\n squareVal += 1;\n }\n if (getVal(x, y - 1) > threshold) {\n squareVal += 2;\n }\n if (getVal(x - 1, y) > threshold) {\n squareVal += 4;\n }\n if (getVal(x, y) > threshold) {\n squareVal += 8;\n }\n return squareVal;\n };\n var doMarch = function doMarch(xPos, yPos) {\n var x = xPos;\n var y = yPos;\n var prevX;\n var prevY;\n for (var i = 0; i < potentialArea.width * potentialArea.height; i++) {\n prevX = x;\n prevY = y;\n if (contour.findIndex(function (item) {\n return item.x === x && item.y === y;\n }) > -1) {\n if (contour[0].x !== x || contour[0].y !== y) {\n // encountered a loop but haven't returned to start: change direction using conditionals and continue back to start\n } else {\n return true;\n }\n } else {\n contour.push({\n x: x,\n y: y\n });\n }\n var state = getState(x, y);\n // assign the move direction according to state of the square\n switch (state) {\n case -1:\n console.warn('Marched out of bounds');\n return true;\n case 0:\n case 3:\n case 2:\n case 7:\n x++; // go right\n break;\n case 12:\n case 14:\n case 4:\n x--; // go left\n break;\n case 6:\n // go left if come from up else go right\n if (prevX === 0) {\n if (prevY === -1) {\n x -= 1;\n } else {\n x += 1;\n }\n }\n break;\n case 1:\n case 13:\n case 5:\n y--; // go up\n break;\n case 9:\n // go up if come from right else go down\n if (prevX === 1) {\n if (prevY === 0) {\n y -= 1;\n } else {\n y += 1;\n }\n }\n break;\n case 10:\n case 8:\n case 11:\n y++; // go down\n break;\n default:\n console.warn(\"Marching squares invalid state: \".concat(state));\n return true;\n }\n }\n };\n this.march = function () {\n for (var x = 0; x < potentialArea.width && !marched; x += 1) {\n for (var y = 0; y < potentialArea.height && !marched; y += 1) {\n if (getVal(x, y) > threshold && getState(x, y) !== 15) {\n marched = doMarch(x, y);\n }\n }\n }\n return marched;\n };\n}\n/**\n * Space partition & assign value to each cell\n * @param points\n */\nvar initGridCells = function initGridCells(width, height, pixelGroupSize) {\n var scaleWidth = Math.ceil(width / pixelGroupSize);\n var scaleHeight = Math.ceil(height / pixelGroupSize);\n var gridCells = new Float32Array(Math.max(0, scaleWidth * scaleHeight)).fill(0);\n return {\n cells: gridCells,\n width: scaleWidth,\n height: scaleHeight\n };\n};\n/**\n * Find the optimal already visited member to item;\n Optimal: minimize cost(j) = distance(i,j) ∗ countObstacles(i,j)\n * @param item\n * @param visited\n */\nvar pickBestNeighbor = function pickBestNeighbor(item, visited, nonMembers) {\n var closestNeighbour = null;\n var minCost = Number.POSITIVE_INFINITY;\n visited.forEach(function (neighbourItem) {\n var itemP = {\n x: item.getModel().x,\n y: item.getModel().y\n };\n var neighbourItemP = {\n x: neighbourItem.getModel().x,\n y: neighbourItem.getModel().y\n };\n var dist = Object(_util_math__WEBPACK_IMPORTED_MODULE_0__[\"squareDist\"])(itemP, neighbourItemP);\n var directLine = new _util_math__WEBPACK_IMPORTED_MODULE_0__[\"Line\"](itemP.x, itemP.y, neighbourItemP.x, neighbourItemP.y);\n var numberObstacles = nonMembers.reduce(function (count, _item) {\n if (Object(_util_math__WEBPACK_IMPORTED_MODULE_0__[\"fractionToLine\"])(_item, directLine) > 0) {\n return count + 1;\n }\n return count;\n }, 0);\n if (dist * Math.pow(numberObstacles + 1, 2) < minCost) {\n closestNeighbour = neighbourItem;\n minCost = dist * Math.pow(numberObstacles + 1, 2);\n }\n });\n return closestNeighbour;\n};\n/**\n * 返回和线相交的item中,离边的起点最近的item\n * @param items\n * @param line\n */\nvar getIntersectItem = function getIntersectItem(items, line) {\n var minDistance = Number.POSITIVE_INFINITY;\n var closestItem = null;\n items.forEach(function (item) {\n var distance = Object(_util_math__WEBPACK_IMPORTED_MODULE_0__[\"fractionToLine\"])(item, line);\n // find closest intersection\n if (distance >= 0 && distance < minDistance) {\n closestItem = item;\n minDistance = distance;\n }\n });\n return closestItem;\n};\n/**\n * Modify the directLine and Route virtual edges around obstacles\n */\nvar computeRoute = function computeRoute(directLine, nonMembers, maxRoutingIterations, morphBuffer) {\n var checkedLines = [];\n var linesToCheck = [];\n linesToCheck.push(directLine);\n var hasIntersection = true;\n var iterations = 0;\n var pointExists = function pointExists(point, lines) {\n var flag = false;\n lines.forEach(function (line) {\n if (flag) return;\n if (Object(_util_math__WEBPACK_IMPORTED_MODULE_0__[\"isPointsOverlap\"])(point, {\n x: line.x1,\n y: line.y1\n }) || Object(_util_math__WEBPACK_IMPORTED_MODULE_0__[\"isPointsOverlap\"])(point, {\n x: line.x2,\n y: line.y2\n })) {\n flag = true;\n }\n });\n return flag;\n };\n var isPointInNonMembers = function isPointInNonMembers(point, _nonMembers) {\n for (var _i = 0, _nonMembers_1 = _nonMembers; _i < _nonMembers_1.length; _i++) {\n var item = _nonMembers_1[_i];\n var bbox = item.getBBox();\n var itemContour = [[bbox.x, bbox.y], [bbox.x + bbox.width, bbox.y], [bbox.x, bbox.y + bbox.height], [bbox.x + bbox.width, bbox.y + bbox.height]];\n if (Object(_util_math__WEBPACK_IMPORTED_MODULE_0__[\"isPointInPolygon\"])(itemContour, point.x, point.y)) {\n return true;\n }\n }\n return false;\n };\n // outer loop end when no more intersections or out of iterations\n while (hasIntersection && iterations < maxRoutingIterations) {\n hasIntersection = false;\n var _loop_1 = function _loop_1() {\n var line = linesToCheck.pop();\n var closestItem = getIntersectItem(nonMembers, line);\n if (closestItem) {\n var _a = Object(_util_math__WEBPACK_IMPORTED_MODULE_0__[\"itemIntersectByLine\"])(closestItem, line),\n intersections_1 = _a[0],\n countIntersections = _a[1];\n // if line passes through item\n if (countIntersections === 2) {\n var testReroute = function testReroute(isFirst) {\n var tempMorphBuffer = morphBuffer;\n var virtualNode = rerouteLine(closestItem, tempMorphBuffer, intersections_1, isFirst);\n // test the virtualNode already exists\n var exist = pointExists(virtualNode, linesToCheck) || pointExists(virtualNode, checkedLines);\n var pointInside = isPointInNonMembers(virtualNode, nonMembers);\n while (!exist && pointInside && tempMorphBuffer >= 1) {\n // try a smaller buffer\n tempMorphBuffer /= 1.5;\n virtualNode = rerouteLine(closestItem, tempMorphBuffer, intersections_1, isFirst);\n exist = pointExists(virtualNode, linesToCheck) || pointExists(virtualNode, checkedLines);\n pointInside = isPointInNonMembers(virtualNode, nonMembers);\n }\n // 第二次route时不要求pointInside\n if (virtualNode && !exist && (!isFirst || !pointInside)) {\n // add 2 rerouted lines to check\n linesToCheck.push(new _util_math__WEBPACK_IMPORTED_MODULE_0__[\"Line\"](line.x1, line.y1, virtualNode.x, virtualNode.y));\n linesToCheck.push(new _util_math__WEBPACK_IMPORTED_MODULE_0__[\"Line\"](virtualNode.x, virtualNode.y, line.x2, line.y2));\n hasIntersection = true;\n }\n };\n testReroute(true);\n if (!hasIntersection) {\n // if we didn't find a valid point around the first corner, try the second\n testReroute(false);\n }\n }\n }\n // no intersection found, mark this line as completed\n if (!hasIntersection) {\n checkedLines.push(line);\n }\n iterations += 1;\n };\n // inner loop end when out of lines or found an intersection\n while (!hasIntersection && linesToCheck.length) {\n _loop_1();\n }\n }\n // 加入剩余的线\n while (linesToCheck.length) {\n checkedLines.push(linesToCheck.pop());\n }\n return checkedLines;\n};\n/**\n * Connect item with visited members using direct line or virtual edges\n */\nfunction getRoute(item, nonMembers, visited, maxRoutingIterations, morphBuffer) {\n var optimalNeighbor = pickBestNeighbor(item, visited, nonMembers);\n if (optimalNeighbor === null) {\n return [];\n }\n // merge the consecutive lines\n var mergeLines = function mergeLines(checkedLines) {\n var finalRoute = [];\n while (checkedLines.length > 0) {\n var line1 = checkedLines.pop();\n if (checkedLines.length === 0) {\n finalRoute.push(line1);\n break;\n }\n var line2 = checkedLines.pop();\n var mergeLine = new _util_math__WEBPACK_IMPORTED_MODULE_0__[\"Line\"](line1.x1, line1.y1, line2.x2, line2.y2);\n var closestItem = getIntersectItem(nonMembers, mergeLine);\n // merge most recent line and previous line\n if (!closestItem) {\n checkedLines.push(mergeLine);\n } else {\n finalRoute.push(line1);\n checkedLines.push(line2);\n }\n }\n return finalRoute;\n };\n var directLine = new _util_math__WEBPACK_IMPORTED_MODULE_0__[\"Line\"](item.getModel().x, item.getModel().y, optimalNeighbor.getModel().x, optimalNeighbor.getModel().y);\n var checkedLines = computeRoute(directLine, nonMembers, maxRoutingIterations, morphBuffer);\n var finalRoute = mergeLines(checkedLines);\n return finalRoute;\n}\n/**\n * Calculate the counter that includes the selected items and exclues the non-selected items\n * @param graph\n * @param members\n * @param nonMembers\n * @param options\n */\nvar genBubbleSet = function genBubbleSet(members, nonMembers, ops) {\n // eslint-disable-next-line no-redeclare\n var options = Object.assign(defaultOps, ops);\n var centroid = Object(_util_math__WEBPACK_IMPORTED_MODULE_0__[\"getPointsCenter\"])(members.map(function (item) {\n return {\n x: item.getModel().x,\n y: item.getModel().y\n };\n }));\n // 按照到中心距离远近排序\n members = members.sort(function (a, b) {\n return Object(_util_math__WEBPACK_IMPORTED_MODULE_0__[\"squareDist\"])({\n x: a.getModel().x,\n y: a.getModel().y\n }, centroid) - Object(_util_math__WEBPACK_IMPORTED_MODULE_0__[\"squareDist\"])({\n x: b.getModel().x,\n y: b.getModel().y\n }, centroid);\n });\n var visited = [];\n var virtualEdges = [];\n members.forEach(function (item) {\n var lines = getRoute(item, nonMembers, visited, options.maxRoutingIterations, options.morphBuffer);\n lines.forEach(function (l) {\n virtualEdges.push(l);\n });\n visited.push(item);\n });\n // 由于edge也可以作为member和nonMember传入,暂时不考虑把edges作为参数传入genBubbleSet\n // edges && edges.forEach(e => {\n // virtualEdges.push(new Line(e.getSource().getModel().x, e.getSource().getModel().y, e.getTarget().getModel().x, e.getTarget().getModel().y));\n // });\n var activeRegion = getActiveRregion(members, virtualEdges, options.nodeR0);\n var potentialArea = initGridCells(activeRegion.width, activeRegion.height, options.pixelGroupSize);\n // Use march squares to generate contour\n var contour = [];\n var hull = [];\n for (var iterations = 0; iterations < options.maxMarchingIterations; iterations++) {\n fillPotentialArea(members, nonMembers, virtualEdges, activeRegion, potentialArea, options);\n contour = [];\n hull = [];\n if (!new MarchingSquares(contour, potentialArea, options.threshold).march()) continue;\n var marchedPath = contour.map(function (point) {\n return {\n x: Math.round(point.x * options.pixelGroupSize + activeRegion.minX),\n y: Math.round(point.y * options.pixelGroupSize + activeRegion.minY)\n };\n });\n // const marchedPath = marchingSquares(potentialArea, options.threshold).map(point => ({ x: Math.round(point.x * options.pixelGroupSize + activeRegion.minX), y: Math.round(point.y * options.pixelGroupSize + activeRegion.minY) }))\n if (marchedPath) {\n var size = marchedPath.length;\n if (options.skip > 1) {\n size = Math.floor(marchedPath.length / options.skip);\n // if we reduced too much (fewer than three points in reduced surface) reduce skip and try again\n while (size < 3 && options.skip > 1) {\n options.skip -= 1;\n size = Math.floor(marchedPath.length / options.skip);\n }\n }\n // copy hull values\n for (var i = 0, j = 0; j < size; j += 1, i += options.skip) {\n hull.push({\n x: marchedPath[i].x,\n y: marchedPath[i].y\n });\n }\n }\n var isContourValid = function isContourValid() {\n for (var _i = 0, members_1 = members; _i < members_1.length; _i++) {\n var item = members_1[_i];\n var hullPoints = hull.map(function (point) {\n return [point.x, point.y];\n });\n if (!Object(_util_math__WEBPACK_IMPORTED_MODULE_0__[\"isPointInPolygon\"])(hullPoints, item.getBBox().centerX, item.getBBox().centerY)) return false;\n }\n // 不强制要求所有nonMembers都没有包含在内\n // for (const item of nonMembers) {\n // if (isPointInPolygon({ x: item.getBBox().centerX, y: item.getBBox().centerY }, contour)) return false\n // }\n return true;\n };\n if (hull && isContourValid()) {\n return hull;\n }\n // update parameters for next iteration\n options.threshold *= 0.9;\n if (iterations <= options.maxMarchingIterations * 0.5) {\n options.memberInfluenceFactor *= 1.2;\n options.edgeInfluenceFactor *= 1.2;\n } else if (options.nonMemberInfluenceFactor !== 0 && nonMembers.length > 0) {\n // after half the iterations, start increasing positive energy and lowering the threshold\n options.nonMemberInfluenceFactor *= 0.8;\n } else {\n break;\n }\n }\n return hull;\n};\n/**\n * unionboundingbox\n * @param members\n * @param edges\n */\nfunction getActiveRregion(members, edges, offset) {\n var activeRegion = {\n minX: Number.POSITIVE_INFINITY,\n minY: Number.POSITIVE_INFINITY,\n maxX: Number.NEGATIVE_INFINITY,\n maxY: Number.NEGATIVE_INFINITY,\n width: 0,\n height: 0,\n x: 0,\n y: 0\n };\n var bboxes = [];\n members.forEach(function (item) {\n bboxes.push(item.getBBox());\n });\n edges.forEach(function (l) {\n bboxes.push(l.getBBox());\n });\n for (var _i = 0, bboxes_1 = bboxes; _i < bboxes_1.length; _i++) {\n var bbox = bboxes_1[_i];\n activeRegion.minX = (bbox.minX < activeRegion.minX ? bbox.minX : activeRegion.minX) - offset;\n activeRegion.minY = (bbox.minY < activeRegion.minY ? bbox.minY : activeRegion.minY) - offset;\n activeRegion.maxX = (bbox.maxX > activeRegion.maxX ? bbox.maxX : activeRegion.maxX) + offset;\n activeRegion.maxY = (bbox.maxY > activeRegion.maxY ? bbox.maxY : activeRegion.maxY) + offset;\n }\n activeRegion.width = activeRegion.maxX - activeRegion.minX;\n activeRegion.height = activeRegion.maxY - activeRegion.minY;\n activeRegion.x = activeRegion.minX;\n activeRegion.y = activeRegion.minY;\n return activeRegion;\n}\nfunction fillPotentialArea(members, nonMembers, edges, activeRegion, potentialArea, options) {\n function pos2GridIx(x, offset) {\n var gridIx = Math.floor((x - offset) / options.pixelGroupSize);\n return gridIx < 0 ? 0 : gridIx;\n }\n function gridIx2Pos(x, offset) {\n return x * options.pixelGroupSize + offset;\n }\n // using inverse a for numerical stability\n var nodeInfA = (options.nodeR0 - options.nodeR1) * (options.nodeR0 - options.nodeR1);\n var edgeInfA = (options.edgeR0 - options.edgeR1) * (options.edgeR0 - options.edgeR1);\n var getAffectedRegion = function getAffectedRegion(bbox, thresholdR) {\n var startX = Math.min(pos2GridIx(bbox.minX, thresholdR + activeRegion.minX), potentialArea.width);\n var startY = Math.min(pos2GridIx(bbox.minY, thresholdR + activeRegion.minY), potentialArea.height);\n var endX = Math.min(pos2GridIx(bbox.maxX, -thresholdR + activeRegion.minX), potentialArea.width);\n var endY = Math.min(pos2GridIx(bbox.maxY, -thresholdR + activeRegion.minY), potentialArea.height);\n return [startX, startY, endX, endY];\n };\n var addItemInfluence = function addItemInfluence(item, influenceFactor) {\n var bbox = item.getBBox();\n var _a = getAffectedRegion(bbox, options.nodeR1),\n startX = _a[0],\n startY = _a[1],\n endX = _a[2],\n endY = _a[3];\n // calculate item influence for each cell\n for (var y = startY; y < endY; y += 1) {\n for (var x = startX; x < endX; x += 1) {\n if (influenceFactor < 0 && potentialArea[x + y * potentialArea.width] <= 0) {\n continue;\n }\n var tempX = gridIx2Pos(x, activeRegion.minX);\n var tempY = gridIx2Pos(y, activeRegion.minY);\n var distanceSq = Object(_util_math__WEBPACK_IMPORTED_MODULE_0__[\"pointRectSquareDist\"])({\n x: tempX,\n y: tempY\n }, {\n x: bbox.minX,\n y: bbox.minY,\n width: bbox.width,\n height: bbox.height\n });\n if (distanceSq < Math.pow(options.nodeR1, 2)) {\n var dr = Math.sqrt(distanceSq) - options.nodeR1;\n potentialArea.cells[x + y * potentialArea.width] += influenceFactor * dr * dr;\n }\n }\n }\n };\n var addEdgeInfluence = function addEdgeInfluence(line, influenceFactor) {\n var bbox = line.getBBox();\n var _a = getAffectedRegion(bbox, options.edgeR1),\n startX = _a[0],\n startY = _a[1],\n endX = _a[2],\n endY = _a[3];\n // for every point in active part of potentialArea, calculate distance to nearest point on line and add influence\n for (var y = startY; y < endY; y += 1) {\n for (var x = startX; x < endX; x += 1) {\n if (influenceFactor < 0 && potentialArea.cells[x + y * potentialArea.width] <= 0) {\n continue;\n }\n var tempX = gridIx2Pos(x, activeRegion.minX);\n var tempY = gridIx2Pos(y, activeRegion.minY);\n var minDistanceSq = Object(_util_math__WEBPACK_IMPORTED_MODULE_0__[\"pointLineSquareDist\"])({\n x: tempX,\n y: tempY\n }, line);\n // only influence if less than r1\n if (minDistanceSq < Math.pow(options.edgeR1, 2)) {\n var mdr = Math.sqrt(minDistanceSq) - options.edgeR1;\n potentialArea.cells[x + y * potentialArea.width] += influenceFactor * mdr * mdr;\n }\n }\n }\n };\n if (options.nodeInfluenceFactor) {\n members.forEach(function (item) {\n addItemInfluence(item, options.nodeInfluenceFactor / nodeInfA);\n });\n }\n if (options.edgeInfluenceFactor) {\n edges.forEach(function (edge) {\n addEdgeInfluence(edge, options.edgeInfluenceFactor / edgeInfA);\n });\n }\n if (options.negativeNodeInfluenceFactor) {\n nonMembers.forEach(function (item) {\n addItemInfluence(item, options.negativeNodeInfluenceFactor / nodeInfA);\n });\n }\n}\nfunction rerouteLine(item, buffer, intersections, wrapNormal) {\n var bbox = item.getBBox();\n var topIntersect = intersections[0],\n leftIntersect = intersections[1],\n bottomIntersect = intersections[2],\n rightIntersect = intersections[3];\n var cornerPos = {\n topLeft: {\n x: bbox.minX - buffer,\n y: bbox.minY - buffer\n },\n topRight: {\n x: bbox.maxX + buffer,\n y: bbox.minY - buffer\n },\n bottomLeft: {\n x: bbox.minX - buffer,\n y: bbox.maxY + buffer\n },\n bottomRight: {\n x: bbox.maxX + buffer,\n y: bbox.maxY + buffer\n }\n };\n var totalArea = bbox.height * bbox.width;\n function calcHalfArea(intersect1, intersect2) {\n return bbox.width * ((intersect1.y - bbox.minY + (intersect2.y - bbox.minY)) * 0.5);\n }\n // 根据线和boundingbox相交的情况,确定control point的位置\n if (leftIntersect) {\n // 相交区域有三角形\n if (topIntersect) return wrapNormal ? cornerPos.topLeft : cornerPos.bottomRight;\n if (bottomIntersect) return wrapNormal ? cornerPos.bottomLeft : cornerPos.topRight;\n // 相交区域分成上下两个梯形,比较面积\n var topArea = calcHalfArea(leftIntersect, rightIntersect);\n if (topArea < totalArea * 0.5) {\n if (leftIntersect.y > rightIntersect.y) return wrapNormal ? cornerPos.topLeft : cornerPos.bottomRight;\n return wrapNormal ? cornerPos.topRight : cornerPos.bottomLeft;\n }\n if (leftIntersect.y < rightIntersect.y) return wrapNormal ? cornerPos.bottomLeft : cornerPos.topRight;\n return wrapNormal ? cornerPos.bottomRight : cornerPos.topLeft;\n }\n if (rightIntersect) {\n if (topIntersect) return wrapNormal ? cornerPos.topRight : cornerPos.bottomLeft;\n if (bottomIntersect) return wrapNormal ? cornerPos.bottomRight : cornerPos.topLeft;\n }\n // 相交区域分成左右两个梯形\n var leftArea = calcHalfArea(topIntersect, bottomIntersect);\n if (leftArea < totalArea * 0.5) {\n if (topIntersect.x > bottomIntersect.x) return wrapNormal ? cornerPos.topLeft : cornerPos.bottomRight;\n return wrapNormal ? cornerPos.bottomLeft : cornerPos.topRight;\n }\n if (topIntersect.x < bottomIntersect.x) return wrapNormal ? cornerPos.topRight : cornerPos.bottomLeft;\n return wrapNormal ? cornerPos.bottomRight : cornerPos.topLeft;\n}\n\n//# sourceURL=webpack:///./node_modules/@antv/g6-core/es/element/hull/bubbleset.js?");
/***/ }),
/***/ "./node_modules/@antv/g6-core/es/element/hull/convexHull.js":
/*!******************************************************************!*\
!*** ./node_modules/@antv/g6-core/es/element/hull/convexHull.js ***!
\******************************************************************/
/*! exports provided: cross, genConvexHull */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"cross\", function() { return cross; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"genConvexHull\", function() { return genConvexHull; });\n/**\n * Use cross product to judge the direction of the turn.\n * Returns a positive value, if OAB makes a clockwise turn,\n * negative for counter-clockwise turn, and zero if the points are collinear.\n */\nvar cross = function cross(a, b, o) {\n return (a.y - o.y) * (b.x - o.x) - (a.x - o.x) * (b.y - o.y);\n};\n/**\n * Generate a convex hull of given points. Andrew's monotone chain algorithm.\n * @param points An array of [x, y] representing the coordinates of points.\n * @return a list of vertices of the convex hull in counter-clockwise order,\n */\nvar genConvexHull = function genConvexHull(items) {\n var points = items.map(function (item) {\n return {\n x: item.getModel().x,\n y: item.getModel().y\n };\n });\n points.sort(function (a, b) {\n return a.x === b.x ? a.y - b.y : a.x - b.x;\n });\n // remove duplicate points\n var pointMap = {};\n for (var i = points.length - 1; i >= 0; i--) {\n var _a = points[i],\n x = _a.x,\n y = _a.y;\n if (pointMap[\"\".concat(x, \"-\").concat(y)]) points.splice(i, 1);\n pointMap[\"\".concat(x, \"-\").concat(y)] = true;\n }\n if (points.length === 1) {\n return points;\n }\n // build the lower hull\n var lower = [];\n for (var i = 0; i < points.length; i++) {\n while (lower.length >= 2 && cross(lower[lower.length - 2], lower[lower.length - 1], points[i]) <= 0) {\n lower.pop();\n }\n lower.push(points[i]);\n }\n // build the upper hull\n var upper = [];\n for (var i = points.length - 1; i >= 0; i--) {\n while (upper.length >= 2 && cross(upper[upper.length - 2], upper[upper.length - 1], points[i]) <= 0) {\n upper.pop();\n }\n upper.push(points[i]);\n }\n upper.pop();\n lower.pop();\n var strictHull = lower.concat(upper);\n return strictHull;\n};\n\n//# sourceURL=webpack:///./node_modules/@antv/g6-core/es/element/hull/convexHull.js?");
/***/ }),
/***/ "./node_modules/@antv/g6-core/es/element/index.js":
/*!********************************************************!*\
!*** ./node_modules/@antv/g6-core/es/element/index.js ***!
\********************************************************/
/*! exports provided: Arrow, Marker, default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _shape__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./shape */ \"./node_modules/@antv/g6-core/es/element/shape.js\");\n/* harmony import */ var _node__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./node */ \"./node_modules/@antv/g6-core/es/element/node.js\");\n/* harmony import */ var _edge__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./edge */ \"./node_modules/@antv/g6-core/es/element/edge.js\");\n/* harmony import */ var _combo__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./combo */ \"./node_modules/@antv/g6-core/es/element/combo.js\");\n/* harmony import */ var _combos__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./combos */ \"./node_modules/@antv/g6-core/es/element/combos/index.js\");\n/* harmony import */ var _nodes__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./nodes */ \"./node_modules/@antv/g6-core/es/element/nodes/index.js\");\n/* harmony import */ var _arrow__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./arrow */ \"./node_modules/@antv/g6-core/es/element/arrow.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Arrow\", function() { return _arrow__WEBPACK_IMPORTED_MODULE_6__[\"default\"]; });\n\n/* harmony import */ var _marker__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./marker */ \"./node_modules/@antv/g6-core/es/element/marker.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Marker\", function() { return _marker__WEBPACK_IMPORTED_MODULE_7__[\"default\"]; });\n\n\n\n\n\n\n\n\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (_shape__WEBPACK_IMPORTED_MODULE_0__[\"default\"]);\n\n//# sourceURL=webpack:///./node_modules/@antv/g6-core/es/element/index.js?");
/***/ }),
/***/ "./node_modules/@antv/g6-core/es/element/marker.js":
/*!*********************************************************!*\
!*** ./node_modules/@antv/g6-core/es/element/marker.js ***!
\*********************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony default export */ __webpack_exports__[\"default\"] = ({\n collapse: function collapse(x, y, r) {\n return [['M', x - r, y], ['a', r, r, 0, 1, 0, r * 2, 0], ['a', r, r, 0, 1, 0, -r * 2, 0], ['M', x - r + 4, y], ['L', x + r - 4, y]];\n },\n expand: function expand(x, y, r) {\n return [['M', x - r, y], ['a', r, r, 0, 1, 0, r * 2, 0], ['a', r, r, 0, 1, 0, -r * 2, 0], ['M', x - r + 4, y], ['L', x - r + 2 * r - 4, y], ['M', x - r + r, y - r + 4], ['L', x, y + r - 4]];\n },\n upTriangle: function upTriangle(x, y, r) {\n var l1 = r * Math.cos(Math.PI / 6);\n var l2 = r * Math.sin(Math.PI / 6);\n return [['M', x - l1, y + l2], ['L', x + l1, y + l2], ['L', x, y - r], ['Z']];\n },\n downTriangle: function downTriangle(x, y, r) {\n var l1 = r * Math.cos(Math.PI / 6);\n var l2 = r * Math.sin(Math.PI / 6);\n return [['M', x - l1, y - l2], ['L', x + l1, y - l2], ['L', x, y + r], ['Z']];\n }\n});\n\n//# sourceURL=webpack:///./node_modules/@antv/g6-core/es/element/marker.js?");
/***/ }),
/***/ "./node_modules/@antv/g6-core/es/element/node.js":
/*!*******************************************************!*\
!*** ./node_modules/@antv/g6-core/es/element/node.js ***!
\*******************************************************/
/*! no exports provided */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tslib */ \"./node_modules/tslib/tslib.es6.js\");\n/* harmony import */ var _antv_util__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @antv/util */ \"./node_modules/@antv/util/esm/index.js\");\n/* harmony import */ var _util_base__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../util/base */ \"./node_modules/@antv/g6-core/es/util/base.js\");\n/* harmony import */ var _global__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../global */ \"./node_modules/@antv/g6-core/es/global.js\");\n/* harmony import */ var _shape__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./shape */ \"./node_modules/@antv/g6-core/es/element/shape.js\");\n/* harmony import */ var _shapeBase__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./shapeBase */ \"./node_modules/@antv/g6-core/es/element/shapeBase.js\");\n/* harmony import */ var _util_graphic__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../util/graphic */ \"./node_modules/@antv/g6-core/es/util/graphic.js\");\n\n\n\n\n\n\n\nvar singleNode = {\n itemType: 'node',\n // 单个图形的类型\n shapeType: 'single-node',\n /**\n * 文本相对图形的位置,默认以中心点\n * 位置包括: top, bottom, left, right, center\n * @type {String}\n */\n labelPosition: 'center',\n /**\n * 文本相对偏移,当 labelPosition 不为 center 时有效\n * @type {Number}\n */\n offset: _global__WEBPACK_IMPORTED_MODULE_3__[\"default\"].nodeLabel.offset,\n /**\n * 获取节点宽高\n * @internal 返回节点的大小,以 [width, height] 的方式维护\n * @param {Object} cfg 节点的配置项\n * @return {Array} 宽高\n */\n getSize: function getSize(cfg) {\n var _a;\n var size = ((_a = this.mergeStyle) === null || _a === void 0 ? void 0 : _a.size) || cfg.size || this.getOptions({}).size || _global__WEBPACK_IMPORTED_MODULE_3__[\"default\"].defaultNode.size; // Global.defaultNode.size; // \n // size 是数组,但长度为1,则补长度为2\n if (Object(_antv_util__WEBPACK_IMPORTED_MODULE_1__[\"isArray\"])(size) && size.length === 1) {\n size = [size[0], size[0]];\n }\n // size 为数字,则转换为数组\n if (!Object(_antv_util__WEBPACK_IMPORTED_MODULE_1__[\"isArray\"])(size)) {\n size = [size, size];\n }\n return size;\n },\n // 私有方法,不希望扩展的节点复写这个方法\n getLabelStyleByPosition: function getLabelStyleByPosition(cfg, labelCfg) {\n var labelMaxLength = labelCfg.maxLength;\n var text = cfg.label;\n if (labelMaxLength) {\n text = Object(_util_graphic__WEBPACK_IMPORTED_MODULE_6__[\"truncateLabelByLength\"])(text, labelMaxLength);\n }\n var labelPosition = labelCfg.position || this.labelPosition;\n // 默认的位置(最可能的情形),所以放在最上面\n if (labelPosition === 'center') {\n return {\n x: 0,\n y: 0,\n text: text,\n textBaseline: 'middle',\n textAlign: 'center'\n };\n }\n var offset = labelCfg.offset;\n if (Object(_antv_util__WEBPACK_IMPORTED_MODULE_1__[\"isNil\"])(offset)) {\n // 考虑 offset = 0 的场景,不用用 labelCfg.offset || Global.nodeLabel.offset\n offset = this.offset; // 不居中时的偏移量\n }\n\n var size = this.getSize(cfg);\n var style;\n switch (labelPosition) {\n case 'top':\n style = {\n x: 0,\n y: -size[1] / 2 - offset,\n textBaseline: 'bottom',\n textAlign: 'center'\n };\n break;\n case 'bottom':\n style = {\n x: 0,\n y: size[1] / 2 + offset,\n textBaseline: 'top',\n textAlign: 'center'\n };\n break;\n case 'left':\n style = {\n x: -size[0] / 2 - offset,\n y: 0,\n textBaseline: 'middle',\n textAlign: 'right'\n };\n break;\n default:\n style = {\n x: size[0] / 2 + offset,\n y: 0,\n textBaseline: 'middle',\n textAlign: 'left'\n };\n break;\n }\n style.text = text;\n return style;\n },\n getLabelBgStyleByPosition: function getLabelBgStyleByPosition(label, labelCfg) {\n var _a;\n if (!label) return {};\n var backgroundStyle = (_a = labelCfg.style) === null || _a === void 0 ? void 0 : _a.background;\n if (!backgroundStyle) return {};\n var bbox = label.getBBox();\n var padding = Object(_util_base__WEBPACK_IMPORTED_MODULE_2__[\"formatPadding\"])(backgroundStyle.padding);\n var backgroundWidth = bbox.width + padding[1] + padding[3];\n var backgroundHeight = bbox.height + padding[0] + padding[2];\n return Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__assign\"])(Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__assign\"])({\n x: bbox.minX - padding[3],\n y: bbox.minY - padding[0]\n }, backgroundStyle), {\n width: backgroundWidth,\n height: backgroundHeight\n });\n },\n drawShape: function drawShape(cfg, group) {\n var shapeType = this.shapeType; // || this.type,都已经加了 shapeType\n var style = this.getShapeStyle(cfg);\n var shape = group.addShape(shapeType, {\n attrs: style,\n draggable: true,\n name: 'node-shape'\n });\n group['shapeMap']['node-shape'] = shape;\n return shape;\n },\n /**\n * 更新linkPoints\n * @param {Object} cfg 节点数据配置项\n * @param {Group} group Item所在的group\n */\n updateLinkPoints: function updateLinkPoints(cfg, group) {\n var defaultLinkPoints = (this.mergeStyle || this.getOptions(cfg)).linkPoints;\n var markLeft = group['shapeMap']['link-point-left'] || group.find(function (element) {\n return element.get('className') === 'link-point-left';\n });\n var markRight = group['shapeMap']['link-point-right'] || group.find(function (element) {\n return element.get('className') === 'link-point-right';\n });\n var markTop = group['shapeMap']['link-point-top'] || group.find(function (element) {\n return element.get('className') === 'link-point-top';\n });\n var markBottom = group['shapeMap']['link-point-bottom'] || group.find(function (element) {\n return element.get('className') === 'link-point-bottom';\n });\n var currentLinkPoints;\n if (markLeft) {\n currentLinkPoints = markLeft.attr();\n }\n if (markRight && !currentLinkPoints) {\n currentLinkPoints = markRight.attr();\n }\n if (markTop && !currentLinkPoints) {\n currentLinkPoints = markTop.attr();\n }\n if (markBottom && !currentLinkPoints) {\n currentLinkPoints = markBottom.attr();\n }\n if (!currentLinkPoints) currentLinkPoints = defaultLinkPoints;\n var linkPoints = Object(_antv_util__WEBPACK_IMPORTED_MODULE_1__[\"mix\"])({}, currentLinkPoints, cfg.linkPoints);\n var markFill = linkPoints.fill,\n markStroke = linkPoints.stroke,\n borderWidth = linkPoints.lineWidth;\n var markSize = linkPoints.size / 2;\n if (!markSize) markSize = linkPoints.r;\n var _a = cfg.linkPoints ? cfg.linkPoints : {\n left: undefined,\n right: undefined,\n top: undefined,\n bottom: undefined\n },\n left = _a.left,\n right = _a.right,\n top = _a.top,\n bottom = _a.bottom;\n var size = this.getSize(cfg);\n var width = size[0];\n var height = size[1];\n var styles = {\n r: markSize,\n fill: markFill,\n stroke: markStroke,\n lineWidth: borderWidth\n };\n if (markLeft) {\n if (!left && left !== undefined) {\n markLeft.remove();\n delete group['shapeMap']['link-point-left'];\n } else {\n markLeft.attr(Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__assign\"])(Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__assign\"])({}, styles), {\n x: -width / 2,\n y: 0\n }));\n }\n } else if (left) {\n var name_1 = 'link-point-left';\n group['shapeMap'][name_1] = group.addShape('circle', {\n attrs: Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__assign\"])(Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__assign\"])({}, styles), {\n x: -width / 2,\n y: 0\n }),\n className: name_1,\n name: name_1,\n isAnchorPoint: true\n });\n }\n if (markRight) {\n if (!right && right !== undefined) {\n markRight.remove();\n delete group['shapeMap']['link-point-right'];\n }\n markRight.attr(Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__assign\"])(Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__assign\"])({}, styles), {\n x: width / 2,\n y: 0\n }));\n } else if (right) {\n var name_2 = 'link-point-right';\n group['shapeMap'][name_2] = group.addShape('circle', {\n attrs: Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__assign\"])(Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__assign\"])({}, styles), {\n x: width / 2,\n y: 0\n }),\n className: name_2,\n name: name_2,\n isAnchorPoint: true\n });\n }\n if (markTop) {\n if (!top && top !== undefined) {\n markTop.remove();\n delete group['shapeMap']['link-point-top'];\n }\n markTop.attr(Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__assign\"])(Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__assign\"])({}, styles), {\n x: 0,\n y: -height / 2\n }));\n } else if (top) {\n var name_3 = 'link-point-top';\n group['shapeMap'][name_3] = group.addShape('circle', {\n attrs: Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__assign\"])(Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__assign\"])({}, styles), {\n x: 0,\n y: -height / 2\n }),\n className: name_3,\n name: name_3,\n isAnchorPoint: true\n });\n }\n if (markBottom) {\n if (!bottom && bottom !== undefined) {\n markBottom.remove();\n delete group['shapeMap']['link-point-bottom'];\n } else {\n markBottom.attr(Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__assign\"])(Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__assign\"])({}, styles), {\n x: 0,\n y: height / 2\n }));\n }\n } else if (bottom) {\n var name_4 = 'link-point-bottom';\n group['shapeMap'][name_4] = group.addShape('circle', {\n attrs: Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__assign\"])(Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__assign\"])({}, styles), {\n x: 0,\n y: height / 2\n }),\n className: name_4,\n name: name_4,\n isAnchorPoint: true\n });\n }\n },\n updateShape: function updateShape(cfg, item, keyShapeStyle, hasIcon, updateType) {\n var keyShape = item.get('keyShape');\n keyShape.attr(Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__assign\"])({}, keyShapeStyle));\n if (!undefined || (updateType === null || updateType === void 0 ? void 0 : updateType.includes('label'))) {\n this.updateLabel(cfg, item, updateType);\n }\n if (hasIcon) {\n this.updateIcon(cfg, item);\n }\n },\n updateIcon: function updateIcon(cfg, item) {\n var _this = this;\n var group = item.getContainer();\n var icon = (this.mergeStyle || this.getOptions(cfg)).icon;\n var _a = cfg.icon ? cfg.icon : {\n show: undefined,\n text: undefined\n },\n show = _a.show,\n text = _a.text;\n var iconShape = group['shapeMap'][\"\".concat(this.type, \"-icon\")] || group.find(function (ele) {\n return ele.get('name') === \"\".concat(_this.type, \"-icon\");\n });\n if (iconShape) {\n // 若原先存在 icon\n if (show || show === undefined) {\n // 若传入 show: true, 或没有设置,则更新原有的 icon 样式\n var iconConfig = Object(_antv_util__WEBPACK_IMPORTED_MODULE_1__[\"mix\"])({}, iconShape.attr(), icon);\n var _b = iconConfig.width,\n w = _b === void 0 ? 20 : _b,\n _c = iconConfig.height,\n h = _c === void 0 ? 20 : _c;\n if (iconConfig.fontFamily === 'iconfont' || iconConfig.hasOwnProperty('text')) {\n w = 0;\n h = 0;\n }\n iconShape.attr(Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__assign\"])(Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__assign\"])({}, iconConfig), {\n x: -w / 2,\n y: -h / 2\n }));\n } else {\n // 若传入了 show: false 则删除原先的 icon\n iconShape.remove();\n delete group['shapeMap'][\"\".concat(this.type, \"-icon\")];\n }\n } else if (show) {\n // 如果原先不存在 icon,但传入了 show: true,则新增 icon\n var name_5 = \"\".concat(this.type, \"-icon\");\n if (text) {\n group['shapeMap'][name_5] = group.addShape('text', {\n attrs: Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__assign\"])({\n x: 0,\n y: 0,\n fontSize: 12,\n fill: '#000',\n stroke: '#000',\n textBaseline: 'middle',\n textAlign: 'center'\n }, icon),\n className: name_5,\n name: name_5\n });\n } else {\n var w = icon.width,\n h = icon.height;\n group['shapeMap'][name_5] = group.addShape('image', {\n attrs: Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__assign\"])(Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__assign\"])({}, icon), {\n x: -w / 2,\n y: -h / 2\n }),\n className: name_5,\n name: name_5\n });\n }\n // to ensure the label is on the top of all the shapes\n var labelShape = group['shapeMap']['node-label'] || group.find(function (ele) {\n return ele.get('name') === 'node-label';\n });\n if (labelShape) {\n labelShape.toFront();\n }\n }\n }\n};\nvar singleNodeDef = Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__assign\"])(Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__assign\"])({}, _shapeBase__WEBPACK_IMPORTED_MODULE_5__[\"shapeBase\"]), singleNode);\n_shape__WEBPACK_IMPORTED_MODULE_4__[\"default\"].registerNode('single-node', singleNodeDef);\n\n//# sourceURL=webpack:///./node_modules/@antv/g6-core/es/element/node.js?");
/***/ }),
/***/ "./node_modules/@antv/g6-core/es/element/nodes/image.js":
/*!**************************************************************!*\
!*** ./node_modules/@antv/g6-core/es/element/nodes/image.js ***!
\**************************************************************/
/*! no exports provided */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tslib */ \"./node_modules/tslib/tslib.es6.js\");\n/* harmony import */ var _shape__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../shape */ \"./node_modules/@antv/g6-core/es/element/shape.js\");\n/* harmony import */ var _global__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../global */ \"./node_modules/@antv/g6-core/es/global.js\");\n\n\n\n/**\n * 基本的图片,可以添加文本,默认文本在图片的下面\n */\n_shape__WEBPACK_IMPORTED_MODULE_1__[\"default\"].registerNode('image', {\n options: {\n img: 'https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*eD7nT6tmYgAAAAAAAAAAAABkARQnAQ',\n size: 200,\n labelCfg: {\n style: {\n fontFamily: _global__WEBPACK_IMPORTED_MODULE_2__[\"default\"].windowFontFamily\n }\n },\n clipCfg: {\n show: false,\n type: 'circle',\n // circle\n r: 50,\n // ellipse\n rx: 50,\n ry: 35,\n // rect\n width: 50,\n height: 35,\n // polygon\n points: [[30, 12], [12, 30], [30, 48], [48, 30]],\n // path\n path: [['M', 25, 25], ['L', 50, 25], ['A', 12.5, 12.5, 0, 1, 1, 50, 50], ['A', 12.5, 12.5, 0, 1, 0, 50, 50], ['L', 25, 75], ['Z']],\n // 坐标\n x: 0,\n y: 0\n // clip 的属性样式\n // style: {\n // lineWidth: 1\n // },\n }\n },\n\n shapeType: 'image',\n labelPosition: 'bottom',\n drawShape: function drawShape(cfg, group) {\n var shapeType = this.shapeType;\n var style = this.getShapeStyle(cfg);\n delete style.fill;\n var shape = group.addShape(shapeType, {\n attrs: style,\n className: \"\".concat(this.type, \"-keyShape\"),\n name: \"\".concat(this.type, \"-keyShape\"),\n draggable: true\n });\n this.drawClip(cfg, shape);\n return shape;\n },\n drawClip: function drawClip(cfg, shape) {\n var clip = (this.mergeStyle || this.getOptions(cfg)).clipCfg;\n if (!clip.show) {\n return;\n }\n // 支持 circle、rect、ellipse、Polygon 及自定义 path clip\n var type = clip.type,\n x = clip.x,\n y = clip.y,\n style = clip.style;\n if (type === 'circle') {\n var r = clip.r;\n shape.setClip({\n type: 'circle',\n attrs: Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__assign\"])({\n r: r,\n x: x,\n y: y\n }, style)\n });\n } else if (type === 'rect') {\n var width = clip.width,\n height = clip.height;\n var rectX = x - width / 2;\n var rectY = y - height / 2;\n shape.setClip({\n type: 'rect',\n attrs: Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__assign\"])({\n x: rectX,\n y: rectY,\n width: width,\n height: height\n }, style)\n });\n } else if (type === 'ellipse') {\n var rx = clip.rx,\n ry = clip.ry;\n shape.setClip({\n type: 'ellipse',\n attrs: Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__assign\"])({\n x: x,\n y: y,\n rx: rx,\n ry: ry\n }, style)\n });\n } else if (type === 'polygon') {\n var points = clip.points;\n shape.setClip({\n type: 'polygon',\n attrs: Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__assign\"])({\n points: points\n }, style)\n });\n } else if (type === 'path') {\n var path = clip.path;\n shape.setClip({\n type: 'path',\n attrs: Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__assign\"])({\n path: path\n }, style)\n });\n }\n },\n getShapeStyle: function getShapeStyle(cfg) {\n var _a = this.mergeStyle || this.getOptions(cfg),\n defaultStyle = _a.style,\n img = _a.img;\n var size = this.getSize(cfg);\n var width = size[0];\n var height = size[1];\n if (defaultStyle) {\n width = defaultStyle.width || size[0];\n height = defaultStyle.height || size[1];\n }\n var style = Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__assign\"])({\n x: -width / 2,\n y: -height / 2,\n width: width,\n height: height,\n img: img\n }, defaultStyle);\n return style;\n },\n updateShapeStyle: function updateShapeStyle(cfg, item) {\n var group = item.getContainer();\n var shapeClassName = \"\".concat(this.itemType, \"-shape\");\n var shape = group['shapeMap'][shapeClassName] || group.find(function (element) {\n return element.get('className') === shapeClassName;\n }) || item.getKeyShape();\n var shapeStyle = this.getShapeStyle(cfg);\n if (shape && !shape.destroyed) {\n shape.attr(shapeStyle);\n }\n }\n}, 'single-node');\n\n//# sourceURL=webpack:///./node_modules/@antv/g6-core/es/element/nodes/image.js?");
/***/ }),
/***/ "./node_modules/@antv/g6-core/es/element/nodes/index.js":
/*!**************************************************************!*\
!*** ./node_modules/@antv/g6-core/es/element/nodes/index.js ***!
\**************************************************************/
/*! no exports provided */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _simple_circle__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./simple-circle */ \"./node_modules/@antv/g6-core/es/element/nodes/simple-circle.js\");\n/* harmony import */ var _simple_rect__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./simple-rect */ \"./node_modules/@antv/g6-core/es/element/nodes/simple-rect.js\");\n/* harmony import */ var _image__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./image */ \"./node_modules/@antv/g6-core/es/element/nodes/image.js\");\n\n\n\n\n//# sourceURL=webpack:///./node_modules/@antv/g6-core/es/element/nodes/index.js?");
/***/ }),
/***/ "./node_modules/@antv/g6-core/es/element/nodes/simple-circle.js":
/*!**********************************************************************!*\
!*** ./node_modules/@antv/g6-core/es/element/nodes/simple-circle.js ***!
\**********************************************************************/
/*! no exports provided */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tslib */ \"./node_modules/tslib/tslib.es6.js\");\n/* harmony import */ var _antv_util__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @antv/util */ \"./node_modules/@antv/util/esm/index.js\");\n/* harmony import */ var _global__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../global */ \"./node_modules/@antv/g6-core/es/global.js\");\n/* harmony import */ var _shape__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../shape */ \"./node_modules/@antv/g6-core/es/element/shape.js\");\n\n\n\n\n// 带有图标的圆,可用于拓扑图中\n_shape__WEBPACK_IMPORTED_MODULE_3__[\"default\"].registerNode('simple-circle', {\n // 自定义节点时的配置\n options: {\n size: _global__WEBPACK_IMPORTED_MODULE_2__[\"default\"].defaultNode.size,\n style: {\n x: 0,\n y: 0,\n stroke: _global__WEBPACK_IMPORTED_MODULE_2__[\"default\"].defaultNode.style.stroke,\n fill: _global__WEBPACK_IMPORTED_MODULE_2__[\"default\"].defaultNode.style.fill,\n lineWidth: _global__WEBPACK_IMPORTED_MODULE_2__[\"default\"].defaultNode.style.lineWidth\n },\n labelCfg: {\n style: {\n fill: _global__WEBPACK_IMPORTED_MODULE_2__[\"default\"].nodeLabel.style.fill,\n fontSize: _global__WEBPACK_IMPORTED_MODULE_2__[\"default\"].nodeLabel.style.fontSize,\n fontFamily: _global__WEBPACK_IMPORTED_MODULE_2__[\"default\"].windowFontFamily\n }\n },\n stateStyles: Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__assign\"])({}, _global__WEBPACK_IMPORTED_MODULE_2__[\"default\"].nodeStateStyles)\n },\n shapeType: 'simple-circle',\n // 文本位置\n labelPosition: 'center',\n shapeMap: {},\n drawShape: function drawShape(cfg, group) {\n var style = this.getShapeStyle(cfg);\n var name = \"\".concat(this.type, \"-keyShape\");\n var keyShape = group.addShape('circle', {\n attrs: style,\n className: \"\".concat(this.type, \"-keyShape\"),\n name: name,\n draggable: true\n });\n group['shapeMap'][name] = keyShape;\n return keyShape;\n },\n /**\n * 获取节点的样式,供基于该节点自定义时使用\n * @param {Object} cfg 节点数据模型\n * @return {Object} 节点的样式\n */\n getShapeStyle: function getShapeStyle(cfg) {\n var defaultStyle = (this.mergeStyle || this.getOptions(cfg)).style;\n var strokeStyle = {\n stroke: cfg.color\n };\n // 如果设置了color,则覆盖默认的stroke属性\n var style = Object(_antv_util__WEBPACK_IMPORTED_MODULE_1__[\"deepMix\"])({}, defaultStyle, strokeStyle);\n var size = this.getSize(cfg);\n var r = size[0] / 2;\n var styles = Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__assign\"])({\n x: 0,\n y: 0,\n r: r\n }, style);\n return styles;\n },\n update: function update(cfg, item, updateType) {\n var size = this.getSize(cfg);\n // 下面这些属性需要覆盖默认样式与目前样式,但若在 cfg 中有指定则应该被 cfg 的相应配置覆盖。\n var strokeStyle = {\n stroke: cfg.color,\n r: size[0] / 2\n };\n // 与 getShapeStyle 不同在于,update 时需要获取到当前的 style 进行融合。即新传入的配置项中没有涉及的属性,保留当前的配置。\n var keyShape = item.get('keyShape');\n var style = Object(_antv_util__WEBPACK_IMPORTED_MODULE_1__[\"deepMix\"])({}, keyShape.attr(), strokeStyle, cfg.style);\n this.updateShape(cfg, item, style, true, updateType);\n }\n}, 'single-node');\n\n//# sourceURL=webpack:///./node_modules/@antv/g6-core/es/element/nodes/simple-circle.js?");
/***/ }),
/***/ "./node_modules/@antv/g6-core/es/element/nodes/simple-rect.js":
/*!********************************************************************!*\
!*** ./node_modules/@antv/g6-core/es/element/nodes/simple-rect.js ***!
\********************************************************************/
/*! no exports provided */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tslib */ \"./node_modules/tslib/tslib.es6.js\");\n/* harmony import */ var _antv_util__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @antv/util */ \"./node_modules/@antv/util/esm/index.js\");\n/* harmony import */ var _global__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../global */ \"./node_modules/@antv/g6-core/es/global.js\");\n/* harmony import */ var _shape__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../shape */ \"./node_modules/@antv/g6-core/es/element/shape.js\");\n\n\n\n\n_shape__WEBPACK_IMPORTED_MODULE_3__[\"default\"].registerNode('simple-rect', {\n // 自定义节点时的配置\n options: {\n size: [100, 30],\n style: {\n radius: 0,\n stroke: _global__WEBPACK_IMPORTED_MODULE_2__[\"default\"].defaultNode.style.stroke,\n fill: _global__WEBPACK_IMPORTED_MODULE_2__[\"default\"].defaultNode.style.fill,\n lineWidth: _global__WEBPACK_IMPORTED_MODULE_2__[\"default\"].defaultNode.style.lineWidth\n },\n // 文本样式配置\n labelCfg: {\n style: {\n fill: _global__WEBPACK_IMPORTED_MODULE_2__[\"default\"].nodeLabel.style.fill,\n fontSize: _global__WEBPACK_IMPORTED_MODULE_2__[\"default\"].nodeLabel.style.fontSize,\n fontFamily: _global__WEBPACK_IMPORTED_MODULE_2__[\"default\"].windowFontFamily\n }\n },\n // 连接点,默认为左右\n // anchorPoints: [{ x: 0, y: 0.5 }, { x: 1, y: 0.5 }]\n anchorPoints: [[0, 0.5], [1, 0.5]],\n stateStyles: Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__assign\"])({}, _global__WEBPACK_IMPORTED_MODULE_2__[\"default\"].nodeStateStyles)\n },\n shapeType: 'simple-rect',\n labelPosition: 'center',\n drawShape: function drawShape(cfg, group) {\n var style = this.getShapeStyle(cfg);\n var keyShape = group.addShape('rect', {\n attrs: style,\n className: \"\".concat(this.type, \"-keyShape\"),\n name: \"\".concat(this.type, \"-keyShape\"),\n draggable: true\n });\n return keyShape;\n },\n /**\n * 获取节点的样式,供基于该节点自定义时使用\n * @param {Object} cfg 节点数据模型\n * @return {Object} 节点的样式\n */\n getShapeStyle: function getShapeStyle(cfg) {\n var defaultStyle = (this.mergeStyle || this.getOptions(cfg)).style;\n var strokeStyle = {\n stroke: cfg.color\n };\n // 如果设置了color,则覆盖默认的stroke属性\n var style = Object(_antv_util__WEBPACK_IMPORTED_MODULE_1__[\"mix\"])({}, defaultStyle, strokeStyle);\n var size = this.getSize(cfg);\n var width = style.width || size[0];\n var height = style.height || size[1];\n var styles = Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__assign\"])({\n x: -width / 2,\n y: -height / 2,\n width: width,\n height: height\n }, style);\n return styles;\n },\n update: function update(cfg, item, updateType) {\n var group = item.getContainer();\n // 这里不传 cfg 参数是因为 cfg.style 需要最后覆盖样式\n var defaultStyle = (this.mergeStyle || this.getOptions(cfg)).style;\n var size = this.getSize(cfg);\n var keyShape = item.get('keyShape');\n if (!cfg.size) {\n size[0] = keyShape.attr('width') || defaultStyle.width;\n size[1] = keyShape.attr('height') || defaultStyle.height;\n }\n // 下面这些属性需要覆盖默认样式与目前样式,但若在 cfg 中有指定则应该被 cfg 的相应配置覆盖。\n var strokeStyle = {\n stroke: cfg.color,\n x: -size[0] / 2,\n y: -size[1] / 2,\n width: size[0],\n height: size[1]\n };\n // 与 getShapeStyle 不同在于,update 时需要获取到当前的 style 进行融合。即新传入的配置项中没有涉及的属性,保留当前的配置。\n var style = Object(_antv_util__WEBPACK_IMPORTED_MODULE_1__[\"mix\"])({}, defaultStyle, keyShape.attr(), strokeStyle);\n style = Object(_antv_util__WEBPACK_IMPORTED_MODULE_1__[\"mix\"])(style, cfg.style);\n this.updateShape(cfg, item, style, false, updateType);\n }\n}, 'single-node');\n\n//# sourceURL=webpack:///./node_modules/@antv/g6-core/es/element/nodes/simple-rect.js?");
/***/ }),
/***/ "./node_modules/@antv/g6-core/es/element/shape.js":
/*!********************************************************!*\
!*** ./node_modules/@antv/g6-core/es/element/shape.js ***!
\********************************************************/
/*! exports provided: ShapeFactoryBase, default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"ShapeFactoryBase\", function() { return ShapeFactoryBase; });\n/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tslib */ \"./node_modules/tslib/tslib.es6.js\");\n/* harmony import */ var _antv_util__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @antv/util */ \"./node_modules/@antv/util/esm/index.js\");\n/* harmony import */ var _xml__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./xml */ \"./node_modules/@antv/g6-core/es/element/xml.js\");\n\n\n\nvar cache = {}; // ucfirst 开销过大,进行缓存\n// 首字母大写\nfunction ucfirst(str) {\n if (!cache[str]) {\n cache[str] = Object(_antv_util__WEBPACK_IMPORTED_MODULE_1__[\"upperFirst\"])(str);\n }\n return cache[str];\n}\n/**\n * 工厂方法的基类\n * @type Shape.FactoryBase\n */\nvar ShapeFactoryBase = {\n /**\n * 默认的形状,当没有指定/匹配 shapeType 时,使用默认的\n * @type {String}\n */\n defaultShapeType: 'defaultType',\n /**\n * 形状的 className,用于搜索\n * @type {String}\n */\n className: null,\n /**\n * 获取绘制 Shape 的工具类,无状态\n * @param {String} type 类型\n * @return {Shape} 工具类\n */\n getShape: function getShape(type) {\n var self = this;\n var shape = self[type] || self[self.defaultShapeType] || self['simple-circle'];\n return shape;\n },\n /**\n * 绘制图形\n * @param {String} type 类型\n * @param {Object} cfg 配置项\n * @param {G.Group} group 图形的分组\n * @return {IShape} 图形对象\n */\n draw: function draw(type, cfg, group) {\n var shape = this.getShape(type);\n group['shapeMap'] = {};\n var rst = shape.draw(cfg, group);\n if (shape.afterDraw) {\n shape.afterDraw(cfg, group, rst);\n }\n return rst;\n },\n /**\n * 更新\n * @param {String} type 类型\n * @param {Object} cfg 配置项\n * @param {G6.Item} item 节点、边、分组等\n */\n baseUpdate: function baseUpdate(type, cfg, item, updateType) {\n var _a, _b;\n var shape = this.getShape(type);\n // 防止没定义 update 函数\n if (shape.update) {\n // shape.mergeStyle = updateType === 'move' || updateType === 'bbox' ? {} : shape.getOptions?.(cfg);\n shape.mergeStyle = (_a = shape.getOptions) === null || _a === void 0 ? void 0 : _a.call(shape, cfg, updateType);\n (_b = shape.update) === null || _b === void 0 ? void 0 : _b.call(shape, cfg, item, updateType);\n }\n if (shape.afterUpdate) {\n shape.afterUpdate(cfg, item);\n }\n },\n /**\n * 设置状态\n * @param {String} type 类型\n * @param {String} name 状态名\n * @param {String | Boolean} value 状态值\n * @param {G6.Item} item 节点、边、分组等\n */\n setState: function setState(type, name, value, item) {\n var shape = this.getShape(type);\n // 调用 shape/shapeBase.ts 中的 setState 方法\n shape.setState(name, value, item);\n },\n /**\n * 是否允许更新,不重新绘制图形\n * @param {String} type 类型\n * @return {Boolean} 是否允许使用更新\n */\n shouldUpdate: function shouldUpdate(type) {\n var shape = this.getShape(type);\n return !!shape.update;\n },\n getControlPoints: function getControlPoints(type, cfg) {\n var shape = this.getShape(type);\n return shape.getControlPoints(cfg);\n },\n /**\n * 获取控制点\n * @param {String} type 节点、边类型\n * @param {Object} cfg 节点、边的配置项\n * @return {Array|null} 控制点的数组,如果为 null,则没有控制点\n */\n getAnchorPoints: function getAnchorPoints(type, cfg) {\n var shape = this.getShape(type);\n return shape.getAnchorPoints(cfg);\n }\n};\n/**\n * 元素的框架\n */\nvar ShapeFramework = {\n // 默认样式及配置\n options: {},\n /**\n * 绘制\n */\n draw: function draw(cfg, group) {\n return this.drawShape(cfg, group);\n },\n /**\n * 绘制\n */\n drawShape: function drawShape( /* cfg, group */) {},\n /**\n * 绘制完成后的操作,便于用户继承现有的节点、边\n */\n afterDraw: function afterDraw( /* cfg, group */) {},\n // update(cfg, item) // 默认不定义\n afterUpdate: function afterUpdate( /* cfg, item */) {},\n /**\n * 设置节点、边状态\n */\n setState: function setState( /* name, value, item */) {},\n /**\n * 获取控制点\n * @param {Object} cfg 节点、边的配置项\n * @return {Array|null} 控制点的数组,如果为 null,则没有控制点\n */\n getControlPoints: function getControlPoints(cfg) {\n return cfg.controlPoints;\n },\n /**\n * 获取控制点\n * @param {Object} cfg 节点、边的配置项\n * @return {Array|null} 控制点的数组,如果为 null,则没有控制点\n */\n getAnchorPoints: function getAnchorPoints(cfg) {\n var defaultAnchorPoints = this.options.anchorPoints;\n var anchorPoints = cfg.anchorPoints || defaultAnchorPoints;\n return anchorPoints;\n }\n /* 如果没定义 update 方法,每次都调用 draw 方法\n update(cfg, item) {\n }\n */\n};\n\nvar Shape = /** @class */function () {\n function Shape() {}\n Shape.registerFactory = function (factoryType, cfg) {\n var className = ucfirst(factoryType);\n var factoryBase = ShapeFactoryBase;\n var shapeFactory = Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__assign\"])(Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__assign\"])({}, factoryBase), cfg);\n Shape[className] = shapeFactory;\n shapeFactory.className = className;\n return shapeFactory;\n };\n Shape.getFactory = function (factoryType) {\n var className = ucfirst(factoryType);\n return Shape[className];\n };\n Shape.registerNode = function (shapeType, nodeDefinition, extendShapeType) {\n var shapeFactory = Shape.Node;\n var shapeObj;\n if (typeof nodeDefinition === 'string' || typeof nodeDefinition === 'function') {\n var autoNodeDefinition = Object(_xml__WEBPACK_IMPORTED_MODULE_2__[\"createNodeFromXML\"])(nodeDefinition);\n shapeObj = Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__assign\"])(Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__assign\"])({}, shapeFactory.getShape('single-node')), autoNodeDefinition);\n } else if (nodeDefinition.jsx) {\n var jsx = nodeDefinition.jsx;\n var autoNodeDefinition = Object(_xml__WEBPACK_IMPORTED_MODULE_2__[\"createNodeFromXML\"])(jsx);\n shapeObj = Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__assign\"])(Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__assign\"])(Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__assign\"])({}, shapeFactory.getShape('single-node')), autoNodeDefinition), nodeDefinition);\n } else {\n shapeFactory.getShape(extendShapeType);\n var extendShape = extendShapeType ? shapeFactory.getShape(extendShapeType) : ShapeFramework;\n shapeObj = Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__assign\"])(Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__assign\"])({}, extendShape), nodeDefinition);\n }\n shapeObj.type = shapeType;\n shapeObj.itemType = 'node';\n shapeFactory[shapeType] = shapeObj;\n return shapeObj;\n };\n Shape.registerEdge = function (shapeType, edgeDefinition, extendShapeType) {\n var shapeFactory = Shape.Edge;\n var extendShape = extendShapeType ? shapeFactory.getShape(extendShapeType) : ShapeFramework;\n var shapeObj = Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__assign\"])(Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__assign\"])({}, extendShape), edgeDefinition);\n shapeObj.type = shapeType;\n shapeObj.itemType = 'edge';\n shapeFactory[shapeType] = shapeObj;\n return shapeObj;\n };\n Shape.registerCombo = function (shapeType, comboDefinition, extendShapeType) {\n var shapeFactory = Shape.Combo;\n var extendShape = extendShapeType ? shapeFactory.getShape(extendShapeType) : ShapeFramework;\n var shapeObj = Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__assign\"])(Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__assign\"])({}, extendShape), comboDefinition);\n shapeObj.type = shapeType;\n shapeObj.itemType = 'combo';\n shapeFactory[shapeType] = shapeObj;\n return shapeObj;\n };\n return Shape;\n}();\n/* harmony default export */ __webpack_exports__[\"default\"] = (Shape);\n// 注册 Node 的工厂方法\nShape.registerFactory('node', {\n defaultShapeType: 'circle'\n});\n// 注册 Edge 的工厂方法\nShape.registerFactory('edge', {\n defaultShapeType: 'line'\n});\n// 注册 Combo 的工厂方法\nShape.registerFactory('combo', {\n defaultShapeType: 'circle'\n});\n\n//# sourceURL=webpack:///./node_modules/@antv/g6-core/es/element/shape.js?");
/***/ }),
/***/ "./node_modules/@antv/g6-core/es/element/shapeBase.js":
/*!************************************************************!*\
!*** ./node_modules/@antv/g6-core/es/element/shapeBase.js ***!
\************************************************************/
/*! exports provided: CLS_LABEL_BG_SUFFIX, shapeBase */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"CLS_LABEL_BG_SUFFIX\", function() { return CLS_LABEL_BG_SUFFIX; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"shapeBase\", function() { return shapeBase; });\n/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tslib */ \"./node_modules/tslib/tslib.es6.js\");\n/* harmony import */ var _global__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../global */ \"./node_modules/@antv/g6-core/es/global.js\");\n/* harmony import */ var _antv_matrix_util__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @antv/matrix-util */ \"./node_modules/@antv/matrix-util/esm/index.js\");\n/* harmony import */ var _antv_util__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @antv/util */ \"./node_modules/@antv/util/esm/index.js\");\n/* harmony import */ var _util_graphic__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../util/graphic */ \"./node_modules/@antv/g6-core/es/util/graphic.js\");\nfunction _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\n\n\n\n\n\nvar transform = _antv_matrix_util__WEBPACK_IMPORTED_MODULE_2__[\"ext\"].transform;\nvar CLS_SHAPE_SUFFIX = '-shape';\nvar CLS_LABEL_SUFFIX = '-label';\nvar ARROWS = ['startArrow', 'endArrow'];\nvar SHAPE_DEFAULT_ATTRS = {\n lineWidth: 1,\n stroke: undefined,\n fill: undefined,\n lineAppendWidth: 1,\n opacity: undefined,\n strokeOpacity: undefined,\n fillOpacity: undefined,\n x: 0,\n y: 0,\n r: 10,\n width: 20,\n height: 20,\n shadowColor: undefined,\n shadowBlur: 0,\n shadowOffsetX: 0,\n shadowOffsetY: 0\n};\nvar PATH_SHAPE_DEFAULT_ATTRS = {\n lineWidth: 1,\n stroke: '#000',\n lineDash: undefined,\n startArrow: false,\n endArrow: false,\n opacity: undefined,\n strokeOpacity: undefined,\n fillOpacity: undefined,\n shadowColor: undefined,\n shadowBlur: 0,\n shadowOffsetX: 0,\n shadowOffsetY: 0\n};\nvar SHAPES_DEFAULT_ATTRS = {\n edge: PATH_SHAPE_DEFAULT_ATTRS,\n node: SHAPE_DEFAULT_ATTRS,\n combo: SHAPE_DEFAULT_ATTRS\n};\nvar CLS_LABEL_BG_SUFFIX = '-label-bg';\n// 单个 shape 带有一个 label,共用这段代码\nvar shapeBase = {\n // 默认样式及配置\n options: {\n labelCfg: {\n style: {\n fontFamily: _global__WEBPACK_IMPORTED_MODULE_1__[\"default\"].windowFontFamily\n }\n },\n descriptionCfg: {\n style: {\n fontFamily: _global__WEBPACK_IMPORTED_MODULE_1__[\"default\"].windowFontFamily\n }\n }\n },\n itemType: '',\n /**\n * 形状的类型,例如 circle,ellipse,polyline...\n */\n type: '',\n getCustomConfig: function getCustomConfig(cfg) {\n return {};\n },\n getOptions: function getOptions(cfg, updateType) {\n if (updateType === 'move' || (updateType === null || updateType === void 0 ? void 0 : updateType.includes('bbox'))) return cfg;\n return Object(_antv_util__WEBPACK_IMPORTED_MODULE_3__[\"deepMix\"])({}, this.options, this.getCustomConfig(cfg) || {}, cfg);\n },\n /**\n * 绘制节点/边,包含文本\n * @override\n * @param {Object} cfg 节点的配置项\n * @param {G.Group} group 节点的容器\n * @return {IShape} 绘制的图形\n */\n draw: function draw(cfg, group) {\n group['shapeMap'] = {};\n this.mergeStyle = this.getOptions(cfg);\n var shape = this.drawShape(cfg, group);\n shape.set('className', this.itemType + CLS_SHAPE_SUFFIX);\n group['shapeMap'][this.itemType + CLS_SHAPE_SUFFIX] = shape;\n if (cfg.label) {\n var label = this.drawLabel(cfg, group);\n label.set('className', this.itemType + CLS_LABEL_SUFFIX);\n group['shapeMap'][this.itemType + CLS_LABEL_SUFFIX] = label;\n }\n return shape;\n },\n /**\n * 绘制完成后的操作,便于用户继承现有的节点、边\n * @param cfg\n * @param group\n * @param keyShape\n */\n afterDraw: function afterDraw(cfg, group, keyShape) {},\n drawShape: function drawShape(cfg, group) {\n return null;\n },\n drawLabel: function drawLabel(cfg, group) {\n var defaultLabelCfg = (this.mergeStyle || this.getOptions(cfg) || {}).labelCfg;\n // image的情况下有可能为null\n var labelCfg = defaultLabelCfg || {};\n var labelStyle = this.getLabelStyle(cfg, labelCfg, group);\n var rotate = labelStyle.rotate;\n delete labelStyle.rotate;\n var label = group.addShape('text', {\n attrs: labelStyle,\n draggable: true,\n className: 'text-shape',\n name: 'text-shape',\n labelRelated: true\n });\n group['shapeMap']['text-shape'] = label;\n if (!isNaN(rotate) && rotate !== '') {\n var labelBBox = label.getBBox();\n var labelMatrix = [1, 0, 0, 0, 1, 0, 0, 0, 1];\n if (labelStyle.rotateCenter) {\n switch (labelStyle.rotateCenter) {\n case 'center':\n labelMatrix = transform(labelMatrix, [['t', -labelBBox.width / 2, -labelBBox.height / 2], ['r', rotate], ['t', labelBBox.width / 2, labelBBox.height / 2]]);\n break;\n case 'lefttop':\n labelMatrix = transform(labelMatrix, [['t', -labelStyle.x, -labelStyle.y], ['r', rotate], ['t', labelStyle.x, labelStyle.y]]);\n break;\n case 'leftcenter':\n labelMatrix = transform(labelMatrix, [['t', -labelStyle.x, -labelStyle.y - labelBBox.height / 2], ['r', rotate], ['t', labelStyle.x, labelStyle.y + labelBBox.height / 2]]);\n break;\n default:\n labelMatrix = transform(labelMatrix, [['t', -labelBBox.width / 2, -labelBBox.height / 2], ['r', rotate], ['t', labelBBox.width / 2, labelBBox.height / 2]]);\n break;\n }\n } else {\n labelMatrix = transform(labelMatrix, [['t', -labelStyle.x, -labelStyle.y - labelBBox.height / 2], ['r', rotate], ['t', labelStyle.x, labelStyle.y + labelBBox.height / 2]]);\n }\n label.setMatrix(labelMatrix);\n }\n if (labelStyle.background) {\n var rect = this.drawLabelBg(cfg, group, label);\n var labelBgClassname = this.itemType + CLS_LABEL_BG_SUFFIX;\n rect.set('classname', labelBgClassname);\n group['shapeMap'][labelBgClassname] = rect;\n label.toFront();\n }\n return label;\n },\n drawLabelBg: function drawLabelBg(cfg, group, label) {\n var defaultLabelCfg = this.options.labelCfg;\n var labelCfg = Object(_antv_util__WEBPACK_IMPORTED_MODULE_3__[\"mix\"])({}, defaultLabelCfg, cfg.labelCfg);\n var style = this.getLabelBgStyleByPosition(label, labelCfg);\n var rect = group.addShape('rect', {\n name: 'text-bg-shape',\n attrs: style,\n labelRelated: true\n });\n group['shapeMap']['text-bg-shape'] = rect;\n return rect;\n },\n getLabelStyleByPosition: function getLabelStyleByPosition(cfg, labelCfg, group) {\n return {\n text: cfg.label\n };\n },\n getLabelBgStyleByPosition: function getLabelBgStyleByPosition(label, labelCfg) {\n return {};\n },\n /**\n * 获取文本的配置项\n * @param cfg 节点的配置项\n * @param labelCfg 文本的配置项\n * @param group 父容器,label 的定位可能与图形相关\n */\n getLabelStyle: function getLabelStyle(cfg, labelCfg, group) {\n var calculateStyle = this.getLabelStyleByPosition(cfg, labelCfg, group);\n var attrName = \"\".concat(this.itemType, \"Label\"); // 取 nodeLabel,edgeLabel 的配置项\n var defaultStyle = _global__WEBPACK_IMPORTED_MODULE_1__[\"default\"][attrName] ? _global__WEBPACK_IMPORTED_MODULE_1__[\"default\"][attrName].style : null;\n return Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__assign\"])(Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__assign\"])(Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__assign\"])({}, defaultStyle), calculateStyle), labelCfg.style);\n },\n /**\n * 获取图形的配置项\n * @param cfg\n */\n getShapeStyle: function getShapeStyle(cfg) {\n return cfg.style;\n },\n /**\n * 更新节点,包含文本\n * @override\n * @param {Object} cfg 节点/边的配置项\n * @param {G6.Item} item 节点/边\n */\n update: function update(cfg, item, updateType) {\n this.updateShapeStyle(cfg, item, updateType);\n this.updateLabel(cfg, item, updateType);\n },\n updateShapeStyle: function updateShapeStyle(cfg, item, updateType) {\n var _a;\n var group = item.getContainer();\n var shape = item.getKeyShape();\n var shapeStyle = Object(_antv_util__WEBPACK_IMPORTED_MODULE_3__[\"mix\"])({}, shape.attr(), cfg.style);\n var _loop_1 = function _loop_1(key) {\n var _b;\n var style = shapeStyle[key];\n if (Object(_antv_util__WEBPACK_IMPORTED_MODULE_3__[\"isPlainObject\"])(style)) {\n // 更新图元素样式,支持更新子元素\n var subShape = ((_a = group['shapeMap']) === null || _a === void 0 ? void 0 : _a[key]) || group.find(function (element) {\n return element.get('name') === key;\n });\n subShape === null || subShape === void 0 ? void 0 : subShape.attr(style);\n } else {\n shape.attr((_b = {}, _b[key] = style, _b));\n }\n };\n for (var key in shapeStyle) {\n _loop_1(key);\n }\n },\n updateLabel: function updateLabel(cfg, item, updateType) {\n var _a, _b;\n var group = item.getContainer();\n var _c = (this.mergeStyle || this.getOptions({}, updateType) || {}).labelCfg,\n labelCfg = _c === void 0 ? {} : _c;\n var labelClassName = this.itemType + CLS_LABEL_SUFFIX;\n var label = group['shapeMap'][labelClassName] || group.find(function (ele) {\n return ele.get('className') === labelClassName;\n });\n var labelBgClassname = this.itemType + CLS_LABEL_BG_SUFFIX;\n var labelBg = group['shapeMap'][labelBgClassname] || group.find(function (ele) {\n return ele.get('className') === labelBgClassname;\n });\n if (label && cfg.label === undefined) {\n group.removeChild(label);\n delete group['shapeMap'][labelClassName];\n if (labelBg) {\n group.removeChild(labelBg);\n delete group['shapeMap'][labelBgClassname];\n }\n }\n // 防止 cfg.label = \"\" 的情况\n if (cfg.label || cfg.label === '') {\n // 若传入的新配置中有 label,(用户没传入但原先有 label,label 也会有值)\n if (!label) {\n // 若原先不存在 label,则绘制一个新的 label\n var newLabel = this.drawLabel(cfg, group);\n newLabel.set('className', labelClassName);\n group['shapeMap'][labelClassName] = newLabel;\n } else {\n // 若原先存在 label,则更新样式。与 getLabelStyle 不同在于这里需要融合当前 label 的样式\n // 融合 style 以外的属性:position, offset, ...\n if (!updateType || updateType === 'bbox|label' || this.itemType === 'edge' && updateType !== 'style') {\n labelCfg = Object(_antv_util__WEBPACK_IMPORTED_MODULE_3__[\"deepMix\"])(labelCfg, cfg.labelCfg);\n }\n // 获取位置信息\n var calculateStyle = this.getLabelStyleByPosition(cfg, labelCfg, group);\n // 取 nodeLabel,edgeLabel 的配置项\n var cfgStyle = (_a = cfg.labelCfg) === null || _a === void 0 ? void 0 : _a.style;\n // const cfgBgStyle = labelCfg.style?.background;\n // 需要融合当前\b label 的样式 label.attr()。不再需要全局/默认样式,因为已经应用在当前的 label 上\n var labelStyle = Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__assign\"])(Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__assign\"])({}, calculateStyle), cfgStyle);\n var rotate = labelStyle.rotate;\n delete labelStyle.rotate;\n // 计算 label 的旋转矩阵\n if (!isNaN(rotate) && rotate !== '') {\n // if G 4.x define the rotateAtStart, use it directly instead of using the following codes\n var rotateMatrix = [1, 0, 0, 0, 1, 0, 0, 0, 1];\n rotateMatrix = transform(rotateMatrix, [['t', -labelStyle.x, -labelStyle.y], ['r', rotate], ['t', labelStyle.x, labelStyle.y]]);\n labelStyle.matrix = rotateMatrix;\n label.attr(labelStyle);\n } else {\n if (((_b = label.getMatrix()) === null || _b === void 0 ? void 0 : _b[4]) !== 1) {\n label.resetMatrix();\n }\n label.attr(labelStyle);\n }\n if (!labelBg) {\n if (labelStyle.background) {\n labelBg = this.drawLabelBg(cfg, group, label);\n labelBg.set('classname', labelBgClassname);\n group['shapeMap'][labelBgClassname] = labelBg;\n label.toFront();\n }\n } else if (labelStyle.background) {\n var calculateBgStyle = this.getLabelBgStyleByPosition(label, labelCfg);\n labelBg.attr(calculateBgStyle);\n } else {\n group.removeChild(labelBg);\n }\n }\n }\n },\n // update(cfg, item) // 默认不定义\n afterUpdate: function afterUpdate(cfg, item) {},\n /**\n * 设置节点的状态,主要是交互状态,业务状态请在 draw 方法中实现\n * 单图形的节点仅考虑 selected、active 状态,有其他状态需求的用户自己复写这个方法\n * @override\n * @param {String} name 状态名称\n * @param {String | Boolean} value 状态值\n * @param {G6.Item} item 节点\n */\n setState: function setState(name, value, item) {\n var _a, _b;\n var _c;\n var shape = item.get('keyShape');\n if (!shape || shape.destroyed) return;\n var type = item.getType();\n var stateName = Object(_antv_util__WEBPACK_IMPORTED_MODULE_3__[\"isBoolean\"])(value) ? name : \"\".concat(name, \":\").concat(value);\n var shapeStateStyle = this.getStateStyle(stateName, item);\n var itemStateStyle = item.getStateStyle(stateName);\n // const originStyle = item.getOriginStyle();\n // 不允许设置一个不存在的状态\n if (!itemStateStyle && !shapeStateStyle) {\n return;\n }\n // 要设置或取消的状态的样式\n // 当没有 state 状态时,默认使用 model.stateStyles 中的样式\n var styles = Object(_antv_util__WEBPACK_IMPORTED_MODULE_3__[\"mix\"])({}, itemStateStyle || shapeStateStyle);\n var group = item.getContainer();\n // 从图元素现有的样式中删除本次要取消的 states 中存在的属性值。使用对象检索更快\n var keptAttrs = {\n x: 1,\n y: 1,\n cx: 1,\n cy: 1,\n matrix: 1\n };\n if (type === 'combo') {\n keptAttrs.r = 1;\n keptAttrs.width = 1;\n keptAttrs.height = 1;\n }\n if (value) {\n var _loop_2 = function _loop_2(key) {\n var _d;\n var style = styles[key];\n if (Object(_antv_util__WEBPACK_IMPORTED_MODULE_3__[\"isPlainObject\"])(style) && !ARROWS.includes(key)) {\n var subShape = ((_c = group['shapeMap']) === null || _c === void 0 ? void 0 : _c[key]) || group.find(function (element) {\n return element.get('name') === key;\n });\n subShape === null || subShape === void 0 ? void 0 : subShape.attr(style);\n } else {\n // 非纯对象,则认为是设置到 keyShape 上面的\n shape.attr((_d = {}, _d[key] = style, _d));\n }\n };\n // style 为要设置的状态的样式\n for (var key in styles) {\n _loop_2(key);\n }\n } else {\n // 所有生效的 state 的样式\n var enableStatesStyle = Object(_util_graphic__WEBPACK_IMPORTED_MODULE_4__[\"cloneBesidesImg\"])(item.getCurrentStatesStyle());\n var model = item.getModel();\n // 原始样式\n var originStyle_1 = Object(_antv_util__WEBPACK_IMPORTED_MODULE_3__[\"mix\"])({}, model.style, Object(_util_graphic__WEBPACK_IMPORTED_MODULE_4__[\"cloneBesidesImg\"])(item.getOriginStyle()));\n var keyShapeName_1 = shape.get('name');\n // cloning shape.attr(), keys.forEach to avoid cloning the img attr, which leads to maximum clone heap #2383\n // const keyShapeStyles = clone(shape.attr())\n var shapeAttrs_1 = shape.attr();\n var keyShapeStyles_1 = {};\n Object.keys(shapeAttrs_1).forEach(function (key) {\n if (key === 'img') return;\n var attr = shapeAttrs_1[key];\n if (attr && _typeof(attr) === 'object') {\n keyShapeStyles_1[key] = Object(_antv_util__WEBPACK_IMPORTED_MODULE_3__[\"clone\"])(attr);\n } else {\n keyShapeStyles_1[key] = attr;\n }\n });\n // 已有样式 - 要取消的状态的样式\n var filtetDisableStatesStyle = {};\n var _loop_3 = function _loop_3(p) {\n var style = styles[p];\n if (Object(_antv_util__WEBPACK_IMPORTED_MODULE_3__[\"isPlainObject\"])(style) && !ARROWS.includes(p)) {\n var subShape_1 = group['shapeMap'][p] || group.find(function (ele) {\n return ele.get('name') === p;\n });\n if (subShape_1) {\n var subShapeStyles_1 = Object(_util_graphic__WEBPACK_IMPORTED_MODULE_4__[\"cloneBesidesImg\"])(subShape_1.attr());\n Object(_antv_util__WEBPACK_IMPORTED_MODULE_3__[\"each\"])(style, function (v, key) {\n if (p === keyShapeName_1 && keyShapeStyles_1[key] && !keptAttrs[key]) {\n delete keyShapeStyles_1[key];\n var value_1 = originStyle_1[p][key] || SHAPES_DEFAULT_ATTRS[type][key];\n shape.attr(key, value_1);\n } else if (subShapeStyles_1[key] || subShapeStyles_1[key] === 0) {\n delete subShapeStyles_1[key];\n var value_2 = originStyle_1[p][key] || SHAPES_DEFAULT_ATTRS[type][key];\n subShape_1.attr(key, value_2);\n }\n });\n filtetDisableStatesStyle[p] = subShapeStyles_1;\n }\n } else {\n if (keyShapeStyles_1[p] && !keptAttrs[p]) {\n delete keyShapeStyles_1[p];\n var value_3 = originStyle_1[p] || (originStyle_1[keyShapeName_1] ? originStyle_1[keyShapeName_1][p] : undefined) || SHAPES_DEFAULT_ATTRS[type][p];\n shape.attr(p, value_3);\n }\n }\n };\n // styles 为要取消的状态的样式\n for (var p in styles) {\n _loop_3(p);\n }\n // 从图元素现有的样式中删除本次要取消的 states 中存在的属性值后,\n // 如果 keyShape 有 name 属性,则 filtetDisableStatesStyle 的格式为 { keyShapeName: {} }\n // 否则为普通对象\n if (!keyShapeName_1) {\n Object(_antv_util__WEBPACK_IMPORTED_MODULE_3__[\"mix\"])(filtetDisableStatesStyle, keyShapeStyles_1);\n } else {\n filtetDisableStatesStyle[keyShapeName_1] = keyShapeStyles_1;\n }\n for (var key in enableStatesStyle) {\n if (keptAttrs[key]) continue;\n var enableStyle = enableStatesStyle[key];\n if (!Object(_antv_util__WEBPACK_IMPORTED_MODULE_3__[\"isPlainObject\"])(enableStyle) || ARROWS.includes(key)) {\n // 把样式属性merge到keyShape中\n if (!keyShapeName_1) {\n Object(_antv_util__WEBPACK_IMPORTED_MODULE_3__[\"mix\"])(originStyle_1, (_a = {}, _a[key] = enableStyle, _a));\n } else {\n Object(_antv_util__WEBPACK_IMPORTED_MODULE_3__[\"mix\"])(originStyle_1[keyShapeName_1], (_b = {}, _b[key] = enableStyle, _b));\n delete originStyle_1[key];\n }\n delete enableStatesStyle[key];\n }\n }\n var originstyles = {};\n Object(_antv_util__WEBPACK_IMPORTED_MODULE_3__[\"deepMix\"])(originstyles, originStyle_1, filtetDisableStatesStyle, enableStatesStyle);\n var keyShapeSetted = false;\n var _loop_4 = function _loop_4(originKey) {\n var _e, _f;\n var style = originstyles[originKey];\n if (Object(_antv_util__WEBPACK_IMPORTED_MODULE_3__[\"isPlainObject\"])(style) && !ARROWS.includes(originKey)) {\n var subShape = group['shapeMap'][originKey] || group.find(function (ele) {\n return ele.get('name') === originKey;\n });\n if (subShape) {\n // The text's position and matrix is not allowed to be affected by states\n if (subShape.get('type') === 'text' || subShape.get('labelRelated')) {\n delete style.x;\n delete style.y;\n delete style.matrix;\n }\n if (originKey === keyShapeName_1) {\n if (type === 'combo') {\n delete style.r;\n delete style.width;\n delete style.height;\n }\n keyShapeSetted = true;\n }\n subShape.attr(style);\n }\n } else if (!keyShapeSetted) {\n var value_4 = style || SHAPES_DEFAULT_ATTRS[type][originKey];\n // 当更新 combo 状态时,当不存在 keyShapeName 时候,则认为是设置到 keyShape 上面的\n if (type === 'combo') {\n if (!keyShapeName_1) {\n shape.attr((_e = {}, _e[originKey] = value_4, _e));\n }\n } else {\n shape.attr((_f = {}, _f[originKey] = value_4, _f));\n }\n }\n };\n for (var originKey in originstyles) {\n _loop_4(originKey);\n }\n }\n },\n /**\n * 获取不同状态下的样式\n *\n * @param {string} name 状态名称\n * @param {Item} item Node或Edge的实例\n * @return {object} 样式\n */\n getStateStyle: function getStateStyle(name, item) {\n var model = item.getModel();\n var type = item.getType();\n var _a = this.getOptions(model),\n stateStyles = _a.stateStyles,\n _b = _a.style,\n style = _b === void 0 ? {} : _b;\n var modelStateStyle = model.stateStyles ? model.stateStyles[name] : stateStyles && stateStyles[name];\n if (type === 'combo') {\n return Object(_antv_util__WEBPACK_IMPORTED_MODULE_3__[\"clone\"])(modelStateStyle);\n }\n return Object(_antv_util__WEBPACK_IMPORTED_MODULE_3__[\"mix\"])({}, style, modelStateStyle);\n },\n /**\n * 获取控制点\n * @param {Object} cfg 节点、边的配置项\n * @return {Array|null} 控制点的数组,如果为 null,则没有控制点\n */\n getControlPoints: function getControlPoints(cfg) {\n return cfg.controlPoints;\n },\n /**\n * 获取控制点\n * @param {Object} cfg 节点、边的配置项\n * @return {Array|null} 锚点的数组,如果为 null,则没有锚点\n */\n getAnchorPoints: function getAnchorPoints(cfg) {\n var _a, _b;\n var anchorPoints = (cfg === null || cfg === void 0 ? void 0 : cfg.anchorPoints) || ((_a = this.getCustomConfig(cfg)) === null || _a === void 0 ? void 0 : _a.anchorPoints) || ((_b = this.options) === null || _b === void 0 ? void 0 : _b.anchorPoints);\n return anchorPoints;\n }\n};\n\n//# sourceURL=webpack:///./node_modules/@antv/g6-core/es/element/shapeBase.js?");
/***/ }),
/***/ "./node_modules/@antv/g6-core/es/element/xml.js":
/*!******************************************************!*\
!*** ./node_modules/@antv/g6-core/es/element/xml.js ***!
\******************************************************/
/*! exports provided: xmlDataRenderer, parseXML, getBBox, generateTarget, compareTwoTarget, createNodeFromXML */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"xmlDataRenderer\", function() { return xmlDataRenderer; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"parseXML\", function() { return parseXML; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"getBBox\", function() { return getBBox; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"generateTarget\", function() { return generateTarget; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"compareTwoTarget\", function() { return compareTwoTarget; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"createNodeFromXML\", function() { return createNodeFromXML; });\n/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tslib */ \"./node_modules/tslib/tslib.es6.js\");\n/* harmony import */ var _antv_util__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @antv/util */ \"./node_modules/@antv/util/esm/index.js\");\n/* harmony import */ var _util_graphic__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../util/graphic */ \"./node_modules/@antv/g6-core/es/util/graphic.js\");\nfunction _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\n/**\n * @fileOverview 从xml建立自定义Node,包含update\n * @author xuzhi.mxz@antfin.com\n */\n\n\n\n/**\n * 一种更宽松的JSON 解析,如果遇到不符合规范的字段会直接转为字符串\n * @param text json 内容\n */\nfunction looseJSONParse(text) {\n if (typeof text !== 'string') {\n return text;\n }\n var safeParse = function safeParse(str) {\n if (typeof str !== 'string') {\n return str;\n }\n try {\n return JSON.parse(str.trim());\n } catch (e) {\n return str.trim();\n }\n };\n var firstAttempt = safeParse(text);\n if (typeof firstAttempt !== 'string') {\n return firstAttempt;\n }\n var tail = function tail(arr) {\n return arr[arr.length - 1];\n };\n var str = text.trim();\n var objectStack = [];\n var syntaxStack = [];\n var isLastPair = function isLastPair() {\n var syntaxes = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n syntaxes[_i] = arguments[_i];\n }\n return syntaxes.some(function (syntax) {\n return tail(syntaxStack) === syntax;\n });\n };\n var getValueStore = function getValueStore() {\n return tail(objectStack);\n };\n var rst = null;\n var i = 0;\n var temp = '';\n while (i < str.length) {\n var nowChar = str[i];\n var isInString = isLastPair('\"', \"'\");\n if (!isInString && !nowChar.trim()) {\n i += 1;\n continue;\n }\n var isLastTranslate = str[i - 1] === '\\\\';\n var isInObject = isLastPair('}');\n var isInArray = isLastPair(']');\n var isWaitingValue = isLastPair(',');\n var tempArr = getValueStore();\n if (isInString) {\n if (tail(syntaxStack) === nowChar && !isLastTranslate) {\n syntaxStack.pop();\n var value = safeParse(temp);\n tempArr.push(value);\n rst = value;\n temp = '';\n } else {\n temp += nowChar;\n }\n } else if (isInArray && nowChar === ',') {\n if (temp) {\n tempArr.push(safeParse(temp));\n temp = '';\n }\n } else if (isInObject && nowChar === ':') {\n syntaxStack.push(',');\n if (temp) {\n tempArr.push(temp);\n temp = '';\n }\n } else if (isWaitingValue && nowChar === ',') {\n if (temp) {\n tempArr.push(safeParse(temp));\n temp = '';\n }\n syntaxStack.pop();\n } else if (nowChar === '}' && (isInObject || isWaitingValue)) {\n if (temp) {\n tempArr.push(safeParse(temp));\n temp = '';\n }\n if (isWaitingValue) {\n syntaxStack.pop();\n }\n var obj = {};\n for (var c = 1; c < tempArr.length; c += 2) {\n obj[tempArr[c - 1]] = tempArr[c];\n }\n objectStack.pop();\n if (objectStack.length) {\n tail(objectStack).push(obj);\n }\n syntaxStack.pop();\n rst = obj;\n } else if (nowChar === ']' && isInArray) {\n if (temp) {\n tempArr.push(safeParse(temp));\n temp = '';\n }\n objectStack.pop();\n if (objectStack.length) {\n tail(objectStack).push(tempArr);\n }\n syntaxStack.pop();\n rst = tempArr;\n } else if (nowChar === '{') {\n objectStack.push([]);\n syntaxStack.push('}');\n } else if (nowChar === '[') {\n objectStack.push([]);\n syntaxStack.push(']');\n } else if (nowChar === '\"') {\n syntaxStack.push('\"');\n } else if (nowChar === \"'\") {\n syntaxStack.push(\"'\");\n } else {\n temp += nowChar;\n }\n i += 1;\n }\n return rst || temp;\n}\nvar keyConvert = function keyConvert(str) {\n return str.split('-').reduce(function (a, b) {\n return a + b.charAt(0).toUpperCase() + b.slice(1);\n });\n};\n/**\n * 简单的一个{{}}模板渲染,不包含任何复杂语法\n * @param xml\n */\nvar xmlDataRenderer = function xmlDataRenderer(xml) {\n return function (data) {\n var len = xml.length;\n var arr = [];\n var i = 0;\n var tmp = '';\n while (i < len) {\n if (xml[i] === '{' && xml[i + 1] === '{') {\n arr.push(tmp);\n tmp = '';\n i += 2;\n } else if (xml[i] === '}' && xml[i + 1] === '}') {\n if (arr.length) {\n var last = arr.pop();\n tmp = Object(_antv_util__WEBPACK_IMPORTED_MODULE_1__[\"get\"])(data, tmp, last.endsWith('=') ? \"\\\"{\".concat(tmp, \"}\\\"\") : tmp);\n arr.push(last + tmp);\n }\n i += 2;\n tmp = '';\n } else {\n tmp += xml[i];\n i += 1;\n }\n }\n arr.push(tmp);\n return arr.map(function (e, index) {\n return arr[index - 1] && arr[index - 1].endsWith('=') ? \"\\\"{\".concat(e, \"}\\\"\") : e;\n }).join('');\n };\n};\n/**\n * 解析XML,并转化为相应的JSON结构\n * @param xml xml解析后的节点\n */\nfunction parseXML(xml, cfg) {\n var attrs = {};\n var keys = xml.getAttributeNames && xml.getAttributeNames() || [];\n var children = xml.children && Array.from(xml.children).map(function (e) {\n return parseXML(e, cfg);\n });\n var rst = {};\n var tagName = xml.tagName ? xml.tagName.toLowerCase() : 'group';\n if (tagName === 'text') {\n attrs.text = xml.innerText;\n }\n rst.type = tagName;\n if (tagName === 'img') {\n rst.type = 'image';\n }\n Array.from(keys).forEach(function (k) {\n var key = keyConvert(k);\n var val = xml.getAttribute(k);\n try {\n if (key === 'style' || key === 'attrs') {\n var style = looseJSONParse(val);\n attrs = Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__assign\"])(Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__assign\"])({}, attrs), style);\n } else {\n rst[key] = looseJSONParse(val);\n }\n } catch (e) {\n if (key === 'style') {\n throw e;\n }\n rst[key] = val;\n }\n });\n rst.attrs = attrs;\n if (cfg && cfg.style && rst.name && _typeof(cfg.style[rst.name]) === 'object') {\n rst.attrs = Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__assign\"])(Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__assign\"])({}, rst.attrs), cfg.style[rst.name]);\n }\n if (cfg && cfg.style && rst.keyshape) {\n rst.attrs = Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__assign\"])(Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__assign\"])({}, rst.attrs), cfg.style);\n }\n if (children.length) {\n rst.children = children;\n }\n return rst;\n}\n/**\n * 根据偏移量和内部节点最终的bounding box来得出该shape最终的bbox\n */\nfunction getBBox(node, offset, childrenBBox) {\n var _a = node.attrs,\n attrs = _a === void 0 ? {} : _a;\n var bbox = {\n x: offset.x || 0,\n y: offset.y || 0,\n width: childrenBBox.width || 0,\n height: childrenBBox.height || 0\n };\n var shapeHeight, shapeWidth;\n switch (node.type) {\n case 'maker':\n case 'circle':\n if (attrs.r) {\n shapeWidth = 2 * attrs.r;\n shapeHeight = 2 * attrs.r;\n }\n break;\n case 'text':\n if (attrs.text) {\n shapeWidth = Object(_util_graphic__WEBPACK_IMPORTED_MODULE_2__[\"getTextSize\"])(attrs.text, attrs.fontSize || 12)[0];\n shapeHeight = 16;\n bbox.y += shapeHeight;\n bbox.height = shapeHeight;\n bbox.width = shapeWidth;\n node.attrs = Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__assign\"])({\n fontSize: 12,\n fill: '#000'\n }, attrs);\n }\n break;\n default:\n if (attrs.width) {\n shapeWidth = attrs.width;\n }\n if (attrs.height) {\n shapeHeight = attrs.height;\n }\n }\n if (shapeHeight >= 0) {\n bbox.height = shapeHeight;\n }\n if (shapeWidth >= 0) {\n bbox.width = shapeWidth;\n }\n if (attrs.marginTop) {\n bbox.y += attrs.marginTop;\n }\n if (attrs.marginLeft) {\n bbox.x += attrs.marginLeft;\n }\n return bbox;\n}\n/**\n * 把从xml计算出的结构填上位置信息,补全attrs\n * @param target\n * @param lastOffset\n */\nfunction generateTarget(target, lastOffset) {\n var _a;\n if (lastOffset === void 0) {\n lastOffset = {\n x: 0,\n y: 0\n };\n }\n var defaultBbox = Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__assign\"])({\n x: 0,\n y: 0,\n width: 0,\n height: 0\n }, lastOffset);\n if ((_a = target.children) === null || _a === void 0 ? void 0 : _a.length) {\n var _b = target.attrs,\n attrs = _b === void 0 ? {} : _b;\n var marginTop = attrs.marginTop;\n var offset = Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__assign\"])({}, lastOffset);\n if (marginTop) {\n offset.y += marginTop;\n }\n for (var index = 0; index < target.children.length; index++) {\n target.children[index].attrs.key = \"\".concat(attrs.key || 'root', \" -\").concat(index, \" \");\n var node = generateTarget(target.children[index], offset);\n if (node.bbox) {\n var bbox = node.bbox;\n if (node.attrs.next === 'inline') {\n offset.x += node.bbox.width;\n } else {\n offset.y += node.bbox.height;\n }\n if (bbox.width + bbox.x > defaultBbox.width) {\n defaultBbox.width = bbox.width + bbox.x;\n }\n if (bbox.height + bbox.y > defaultBbox.height) {\n defaultBbox.height = bbox.height + bbox.y;\n }\n }\n }\n }\n target.bbox = getBBox(target, lastOffset, defaultBbox);\n target.attrs = Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__assign\"])(Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__assign\"])({}, target.attrs), target.bbox);\n return target;\n}\n/**\n * 对比前后两个最终计算出来的node,并对比出最小改动,\n * 动作: 'add' 添加节点 | ’delete‘ 删除节点 | ’change‘ 改变节点attrs | 'restructure' 重构节点\n * @param nowTarget\n * @param formerTarget\n */\nfunction compareTwoTarget(nowTarget, formerTarget) {\n var _a, _b, _c, _d;\n var type = (nowTarget || {}).type;\n var key = ((formerTarget === null || formerTarget === void 0 ? void 0 : formerTarget.attrs) || {}).key;\n if (key && nowTarget) {\n nowTarget.attrs.key = key;\n }\n if (!nowTarget && formerTarget) {\n return {\n action: 'delete',\n val: formerTarget,\n type: type,\n key: key\n };\n }\n if (nowTarget && !formerTarget) {\n return {\n action: 'add',\n val: nowTarget,\n type: type\n };\n }\n if (!nowTarget && !formerTarget) {\n return {\n action: 'same',\n type: type\n };\n }\n var children = [];\n if (((_a = nowTarget.children) === null || _a === void 0 ? void 0 : _a.length) > 0 || ((_b = formerTarget.children) === null || _b === void 0 ? void 0 : _b.length) > 0) {\n var length_1 = Math.max((_c = nowTarget.children) === null || _c === void 0 ? void 0 : _c.length, (_d = formerTarget.children) === null || _d === void 0 ? void 0 : _d.length);\n var formerChildren = formerTarget.children || [];\n var nowChildren = nowTarget.children || [];\n for (var index = 0; index < length_1; index += 1) {\n children.push(compareTwoTarget(nowChildren[index], formerChildren[index]));\n }\n }\n var formerKeys = Object.keys(formerTarget.attrs);\n var nowKeys = Object.keys(nowTarget.attrs);\n if (formerTarget.type !== nowTarget.type) {\n return {\n action: 'restructure',\n nowTarget: nowTarget,\n formerTarget: formerTarget,\n key: key,\n children: children\n };\n }\n if (formerKeys.filter(function (e) {\n return e !== 'children';\n }).some(function (e) {\n return nowTarget.attrs[e] !== formerTarget.attrs[e] || !nowKeys.includes(e);\n })) {\n return {\n action: 'change',\n val: nowTarget,\n children: children,\n type: type,\n key: key\n };\n }\n return {\n action: 'same',\n children: children,\n type: type,\n key: key\n };\n}\n/**\n * 根据xml或者返回xml的函数构建自定义节点的结构\n * @param gen\n */\nfunction createNodeFromXML(gen) {\n var structures = {};\n var compileXML = function compileXML(cfg) {\n var rawStr = typeof gen === 'function' ? gen(cfg) : gen;\n var target = xmlDataRenderer(rawStr)(cfg);\n var xmlParser = document.createElement('div');\n xmlParser.innerHTML = target;\n var xml = xmlParser.children[0];\n var result = generateTarget(parseXML(xml, cfg));\n xmlParser.remove();\n return result;\n };\n return {\n draw: function draw(cfg, group) {\n var resultTarget = compileXML(cfg);\n var keyshape = group;\n var renderTarget = function renderTarget(target) {\n var _a = target.attrs,\n attrs = _a === void 0 ? {} : _a,\n bbox = target.bbox,\n type = target.type,\n children = target.children,\n rest = Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__rest\"])(target, [\"attrs\", \"bbox\", \"type\", \"children\"]);\n if (target.type !== 'group') {\n var shape = group.addShape(target.type, Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__assign\"])({\n attrs: attrs,\n origin: {\n bbox: bbox,\n type: type,\n children: children\n }\n }, rest));\n if (target.keyshape) {\n keyshape = shape;\n }\n }\n if (target.children) {\n target.children.forEach(function (n) {\n return renderTarget(n);\n });\n }\n };\n renderTarget(resultTarget);\n structures[cfg.id] = [resultTarget];\n return keyshape;\n },\n update: function update(cfg, node) {\n if (!structures[cfg.id]) {\n structures[cfg.id] = [];\n }\n var container = node.getContainer();\n var children = container.get('children');\n var newTarget = compileXML(cfg);\n var lastTarget = structures[cfg.id].pop();\n var diffResult = compareTwoTarget(newTarget, lastTarget);\n var addShape = function addShape(shape) {\n var _a;\n if (shape.type !== 'group') {\n container.addShape(shape.type, {\n attrs: shape.attrs\n });\n }\n if ((_a = shape.children) === null || _a === void 0 ? void 0 : _a.length) {\n shape.children.map(function (e) {\n return addShape(e);\n });\n }\n };\n var delShape = function delShape(shape) {\n var _a;\n var targetShape = children.find(function (e) {\n return e.attrs.key === shape.attrs.key;\n });\n if (targetShape) {\n container.removeChild(targetShape);\n }\n if ((_a = shape.children) === null || _a === void 0 ? void 0 : _a.length) {\n shape.children.map(function (e) {\n return delShape(e);\n });\n }\n };\n var updateTarget = function updateTarget(target) {\n var key = target.key;\n if (target.type !== 'group') {\n var targetShape = children.find(function (e) {\n return e.attrs.key === key;\n });\n switch (target.action) {\n case 'change':\n if (targetShape) {\n var originAttr = target.val.keyshape ? node.getOriginStyle() : {};\n targetShape.attr(Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__assign\"])(Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__assign\"])({}, originAttr), target.val.attrs));\n }\n break;\n case 'add':\n addShape(target.val);\n break;\n case 'delete':\n delShape(target.val);\n break;\n case 'restructure':\n delShape(target.formerTarget);\n addShape(target.nowTarget);\n break;\n default:\n break;\n }\n }\n if (target.children) {\n target.children.forEach(function (n) {\n return updateTarget(n);\n });\n }\n };\n updateTarget(diffResult);\n structures[cfg.id].push(newTarget);\n },\n getAnchorPoints: function getAnchorPoints() {\n return [[0, 0.5], [1, 0.5], [0.5, 1], [0.5, 0]];\n }\n };\n}\n\n//# sourceURL=webpack:///./node_modules/@antv/g6-core/es/element/xml.js?");
/***/ }),
/***/ "./node_modules/@antv/g6-core/es/global.js":
/*!*************************************************!*\
!*** ./node_modules/@antv/g6-core/es/global.js ***!
\*************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\nvar subjectColor = 'rgb(95, 149, 255)';\nvar backColor = 'rgb(255, 255, 255)';\nvar textColor = 'rgb(0, 0, 0)';\nvar activeFill = 'rgb(247, 250, 255)';\nvar nodeMainFill = 'rgb(239, 244, 255)';\nvar comboFill = 'rgb(253, 253, 253)';\nvar disabledFill = 'rgb(250, 250, 250)';\nvar edgeMainStroke = 'rgb(224, 224, 224)';\nvar edgeInactiveStroke = 'rgb(234, 234, 234)';\nvar edgeDisablesStroke = 'rgb(245, 245, 245)';\nvar inactiveStroke = 'rgb(191, 213, 255)';\nvar highlightStroke = '#4572d9';\nvar highlightFill = 'rgb(223, 234, 255)';\nvar colorSet = {\n // for nodes\n mainStroke: subjectColor,\n mainFill: nodeMainFill,\n activeStroke: subjectColor,\n activeFill: activeFill,\n inactiveStroke: inactiveStroke,\n inactiveFill: activeFill,\n selectedStroke: subjectColor,\n selectedFill: backColor,\n highlightStroke: highlightStroke,\n highlightFill: highlightFill,\n disableStroke: edgeMainStroke,\n disableFill: disabledFill,\n // for edges\n edgeMainStroke: edgeMainStroke,\n edgeActiveStroke: subjectColor,\n edgeInactiveStroke: edgeInactiveStroke,\n edgeSelectedStroke: subjectColor,\n edgeHighlightStroke: subjectColor,\n edgeDisableStroke: edgeDisablesStroke,\n // for combos\n comboMainStroke: edgeMainStroke,\n comboMainFill: comboFill,\n comboActiveStroke: subjectColor,\n comboActiveFill: activeFill,\n comboInactiveStroke: edgeMainStroke,\n comboInactiveFill: comboFill,\n comboSelectedStroke: subjectColor,\n comboSelectedFill: comboFill,\n comboHighlightStroke: highlightStroke,\n comboHighlightFill: comboFill,\n comboDisableStroke: edgeInactiveStroke,\n comboDisableFill: disabledFill\n};\n/* harmony default export */ __webpack_exports__[\"default\"] = ({\n version: '0.8.23',\n rootContainerClassName: 'root-container',\n nodeContainerClassName: 'node-container',\n edgeContainerClassName: 'edge-container',\n comboContainerClassName: 'combo-container',\n delegateContainerClassName: 'delegate-container',\n defaultLoopPosition: 'top',\n nodeLabel: {\n style: {\n fill: '#000',\n fontSize: 12,\n textAlign: 'center',\n textBaseline: 'middle'\n },\n offset: 4 // 节点的默认文本不居中时的偏移量\n },\n\n defaultNode: {\n type: 'circle',\n style: {\n lineWidth: 1,\n stroke: colorSet.mainStroke,\n fill: nodeMainFill\n },\n size: 20,\n color: colorSet.mainStroke,\n linkPoints: {\n size: 8,\n lineWidth: 1,\n fill: colorSet.activeFill,\n stroke: colorSet.activeStroke\n }\n },\n // 节点应用状态后的样式,默认仅提供 active、selected、highlight、inactive、disable,用户可以自己扩展\n nodeStateStyles: {\n active: {\n fill: colorSet.activeFill,\n stroke: colorSet.activeStroke,\n lineWidth: 2,\n shadowColor: colorSet.mainStroke,\n shadowBlur: 10\n },\n selected: {\n fill: colorSet.selectedFill,\n stroke: colorSet.selectedStroke,\n lineWidth: 4,\n shadowColor: colorSet.selectedStroke,\n shadowBlur: 10,\n 'text-shape': {\n fontWeight: 500\n }\n },\n highlight: {\n fill: colorSet.highlightFill,\n stroke: colorSet.highlightStroke,\n lineWidth: 2,\n 'text-shape': {\n fontWeight: 500\n }\n },\n inactive: {\n fill: colorSet.inactiveFill,\n stroke: colorSet.inactiveStroke,\n lineWidth: 1\n },\n disable: {\n fill: colorSet.disableFill,\n stroke: colorSet.disableStroke,\n lineWidth: 1\n }\n },\n edgeLabel: {\n style: {\n fill: textColor,\n textAlign: 'center',\n textBaseline: 'middle',\n fontSize: 12\n }\n },\n defaultEdge: {\n type: 'line',\n size: 1,\n style: {\n stroke: colorSet.edgeMainStroke,\n lineAppendWidth: 2\n },\n color: colorSet.edgeMainStroke\n },\n // 边应用状态后的样式,默认仅提供 active、selected、highlight、inactive、disable,用户可以自己扩展\n edgeStateStyles: {\n active: {\n stroke: colorSet.edgeActiveStroke,\n lineWidth: 1\n },\n selected: {\n stroke: colorSet.edgeSelectedStroke,\n lineWidth: 2,\n shadowColor: colorSet.edgeSelectedStroke,\n shadowBlur: 10,\n 'text-shape': {\n fontWeight: 500\n }\n },\n highlight: {\n stroke: colorSet.edgeHighlightStroke,\n lineWidth: 2,\n 'text-shape': {\n fontWeight: 500\n }\n },\n inactive: {\n stroke: colorSet.edgeInactiveStroke,\n lineWidth: 1\n },\n disable: {\n stroke: colorSet.edgeDisableStroke,\n lineWidth: 1\n }\n },\n comboLabel: {\n style: {\n fill: textColor,\n // textAlign: 'center',\n textBaseline: 'middle',\n fontSize: 12\n },\n refY: 10,\n refX: 10 // Combo 的默认文本不居中时的偏移量\n },\n\n defaultCombo: {\n type: 'circle',\n style: {\n fill: colorSet.comboMainFill,\n lineWidth: 1,\n stroke: colorSet.comboMainStroke,\n r: 5,\n width: 20,\n height: 10\n },\n size: [20, 5],\n color: colorSet.comboMainStroke,\n padding: [25, 20, 15, 20]\n },\n // combo 应用状态后的样式,默认仅提供 active、selected、highlight、inactive、disable,用户可以自己扩展\n comboStateStyles: {\n active: {\n stroke: colorSet.comboActiveStroke,\n lineWidth: 1,\n fill: colorSet.comboActiveFill\n },\n selected: {\n stroke: colorSet.comboSelectedStroke,\n lineWidth: 2,\n fill: colorSet.comboSelectedFill,\n shadowColor: colorSet.comboSelectedStroke,\n shadowBlur: 10,\n 'text-shape': {\n fontWeight: 500\n }\n },\n highlight: {\n stroke: colorSet.comboHighlightStroke,\n lineWidth: 2,\n fill: colorSet.comboHighlightFill,\n 'text-shape': {\n fontWeight: 500\n }\n },\n inactive: {\n stroke: colorSet.comboInactiveStroke,\n fill: colorSet.comboInactiveFill,\n lineWidth: 1\n },\n disable: {\n stroke: colorSet.comboDisableStroke,\n fill: colorSet.comboDisableFill,\n lineWidth: 1\n }\n },\n delegateStyle: {\n fill: '#F3F9FF',\n fillOpacity: 0.5,\n stroke: '#1890FF',\n strokeOpacity: 0.9,\n lineDash: [5, 5]\n },\n windowFontFamily: typeof window !== 'undefined' && window.getComputedStyle && document.body ? window.getComputedStyle(document.body, null).getPropertyValue('font-family') || 'Arial, sans-serif' : 'Arial, sans-serif'\n});\n\n//# sourceURL=webpack:///./node_modules/@antv/g6-core/es/global.js?");
/***/ }),
/***/ "./node_modules/@antv/g6-core/es/graph/controller/event.js":
/*!*****************************************************************!*\
!*** ./node_modules/@antv/g6-core/es/graph/controller/event.js ***!
\*****************************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\nvar EventController = /** @class */function () {\n function EventController(graph) {\n this.graph = graph;\n this.destroyed = false;\n this.initEvents();\n }\n return EventController;\n}();\n/* harmony default export */ __webpack_exports__[\"default\"] = (EventController);\n\n//# sourceURL=webpack:///./node_modules/@antv/g6-core/es/graph/controller/event.js?");
/***/ }),
/***/ "./node_modules/@antv/g6-core/es/graph/controller/index.js":
/*!*****************************************************************!*\
!*** ./node_modules/@antv/g6-core/es/graph/controller/index.js ***!
\*****************************************************************/
/*! exports provided: ModeController, ViewController, ItemController, StateController */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _mode__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./mode */ \"./node_modules/@antv/g6-core/es/graph/controller/mode.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ModeController\", function() { return _mode__WEBPACK_IMPORTED_MODULE_0__[\"default\"]; });\n\n/* harmony import */ var _view__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./view */ \"./node_modules/@antv/g6-core/es/graph/controller/view.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ViewController\", function() { return _view__WEBPACK_IMPORTED_MODULE_1__[\"default\"]; });\n\n/* harmony import */ var _item__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./item */ \"./node_modules/@antv/g6-core/es/graph/controller/item.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ItemController\", function() { return _item__WEBPACK_IMPORTED_MODULE_2__[\"default\"]; });\n\n/* harmony import */ var _state__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./state */ \"./node_modules/@antv/g6-core/es/graph/controller/state.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"StateController\", function() { return _state__WEBPACK_IMPORTED_MODULE_3__[\"default\"]; });\n\n\n\n\n\n\n//# sourceURL=webpack:///./node_modules/@antv/g6-core/es/graph/controller/index.js?");
/***/ }),
/***/ "./node_modules/@antv/g6-core/es/graph/controller/item.js":
/*!****************************************************************!*\
!*** ./node_modules/@antv/g6-core/es/graph/controller/item.js ***!
\****************************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tslib */ \"./node_modules/tslib/tslib.es6.js\");\n/* harmony import */ var _antv_util__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @antv/util */ \"./node_modules/@antv/util/esm/index.js\");\n/* harmony import */ var _item_edge__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../item/edge */ \"./node_modules/@antv/g6-core/es/item/edge.js\");\n/* harmony import */ var _item_node__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../item/node */ \"./node_modules/@antv/g6-core/es/item/node.js\");\n/* harmony import */ var _item_combo__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../item/combo */ \"./node_modules/@antv/g6-core/es/item/combo.js\");\n/* harmony import */ var _util_graphic__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../util/graphic */ \"./node_modules/@antv/g6-core/es/util/graphic.js\");\n\n\n\n\n\n\nvar NODE = 'node';\nvar EDGE = 'edge';\nvar VEDGE = 'vedge';\nvar COMBO = 'combo';\nvar CFG_PREFIX = 'default';\nvar MAPPER_SUFFIX = 'Mapper';\nvar STATE_SUFFIX = 'stateStyles';\nvar ItemController = /** @class */function () {\n function ItemController(graph) {\n var _this = this;\n this.edgeToBeUpdateMap = {};\n /**\n * 更新边限流,同时可以防止相同的边频繁重复更新\n * */\n this.throttleRefresh = Object(_antv_util__WEBPACK_IMPORTED_MODULE_1__[\"throttle\"])(function (_) {\n var graph = _this.graph;\n if (!graph || graph.get('destroyed')) return;\n var edgeToBeUpdateMap = _this.edgeToBeUpdateMap;\n if (!edgeToBeUpdateMap) return;\n var edgeValues = Object.values(edgeToBeUpdateMap);\n if (!edgeValues.length) return;\n edgeValues.forEach(function (obj) {\n var edge = obj.edge;\n if (!edge || edge.destroyed) return;\n var source = edge.getSource();\n var target = edge.getTarget();\n if (!source || source.destroyed || !target || target.destroyed) return;\n edge.refresh(obj.updateType);\n });\n _this.edgeToBeUpdateMap = {};\n }, 16, {\n trailing: true,\n leading: true\n });\n this.graph = graph;\n this.destroyed = false;\n }\n /**\n * 增加 Item 实例\n *\n * @param {ITEM_TYPE} type 实例类型,node 或 edge\n * @param {(NodeConfig & EdgeConfig)} model 数据模型\n * @returns {(Item)}\n * @memberof ItemController\n */\n ItemController.prototype.addItem = function (type, model) {\n var graph = this.graph;\n var vType = type === VEDGE ? EDGE : type;\n var parent = graph.get(\"\".concat(vType, \"Group\")) || graph.get('group');\n var upperType = Object(_antv_util__WEBPACK_IMPORTED_MODULE_1__[\"upperFirst\"])(vType);\n var item = null;\n // 获取 this.get('styles') 中的值\n var styles = graph.get(vType + Object(_antv_util__WEBPACK_IMPORTED_MODULE_1__[\"upperFirst\"])(STATE_SUFFIX)) || {};\n var defaultModel = graph.get(CFG_PREFIX + upperType);\n if (model[STATE_SUFFIX]) {\n // 设置 this.get('styles') 中的值\n styles = model[STATE_SUFFIX];\n }\n if (defaultModel) {\n // 很多布局会直接修改原数据模型,所以不能用 merge 的形式,逐个写入原 model 中\n Object(_antv_util__WEBPACK_IMPORTED_MODULE_1__[\"each\"])(defaultModel, function (val, cfg) {\n if (Object(_antv_util__WEBPACK_IMPORTED_MODULE_1__[\"isObject\"])(val) && !Object(_antv_util__WEBPACK_IMPORTED_MODULE_1__[\"isArray\"])(val)) {\n model[cfg] = Object(_antv_util__WEBPACK_IMPORTED_MODULE_1__[\"deepMix\"])({}, val, model[cfg]);\n } else if (Object(_antv_util__WEBPACK_IMPORTED_MODULE_1__[\"isArray\"])(val)) {\n model[cfg] = model[cfg] || Object(_antv_util__WEBPACK_IMPORTED_MODULE_1__[\"clone\"])(defaultModel[cfg]);\n } else {\n model[cfg] = model[cfg] || defaultModel[cfg];\n }\n });\n }\n var mapper = graph.get(vType + MAPPER_SUFFIX);\n if (mapper) {\n var mappedModel_1 = mapper(model);\n if (mappedModel_1[STATE_SUFFIX]) {\n // 设置 this.get('styles') 中的值\n styles = mappedModel_1[STATE_SUFFIX];\n delete mappedModel_1[STATE_SUFFIX];\n }\n // 如果配置了 defaultEdge 或 defaultNode,则将默认配置的数据也合并进去\n Object(_antv_util__WEBPACK_IMPORTED_MODULE_1__[\"each\"])(mappedModel_1, function (val, cfg) {\n if (Object(_antv_util__WEBPACK_IMPORTED_MODULE_1__[\"isObject\"])(val) && !Object(_antv_util__WEBPACK_IMPORTED_MODULE_1__[\"isArray\"])(val)) {\n model[cfg] = Object(_antv_util__WEBPACK_IMPORTED_MODULE_1__[\"deepMix\"])({}, model[cfg], val);\n } else {\n model[cfg] = mappedModel_1[cfg] || model[cfg];\n }\n });\n }\n graph.emit('beforeadditem', {\n type: type,\n model: model\n });\n if (type === EDGE || type === VEDGE) {\n var source = void 0;\n var target = void 0;\n source = model.source; // eslint-disable-line prefer-destructuring\n target = model.target; // eslint-disable-line prefer-destructuring\n if (source && Object(_antv_util__WEBPACK_IMPORTED_MODULE_1__[\"isString\"])(source)) {\n source = graph.findById(source);\n }\n if (target && Object(_antv_util__WEBPACK_IMPORTED_MODULE_1__[\"isString\"])(target)) {\n target = graph.findById(target);\n }\n if (!source || !target) {\n console.warn(\"The source or target node of edge \".concat(model.id, \" does not exist!\"));\n return;\n }\n if (source.getType && source.getType() === 'combo') {\n model.isComboEdge = true;\n // graph.updateCombo(source as ICombo);\n }\n\n if (target.getType && target.getType() === 'combo') {\n model.isComboEdge = true;\n // graph.updateCombo(target as ICombo);\n }\n\n item = new _item_edge__WEBPACK_IMPORTED_MODULE_2__[\"default\"]({\n model: model,\n source: source,\n target: target,\n styles: styles,\n linkCenter: graph.get('linkCenter'),\n group: parent.addGroup()\n });\n } else if (type === NODE) {\n item = new _item_node__WEBPACK_IMPORTED_MODULE_3__[\"default\"]({\n model: model,\n styles: styles,\n group: parent.addGroup()\n });\n } else if (type === COMBO) {\n var children = model.children;\n var comboBBox = Object(_util_graphic__WEBPACK_IMPORTED_MODULE_5__[\"getComboBBox\"])(children, graph);\n var bboxX = void 0,\n bboxY = void 0;\n if (!isNaN(comboBBox.x)) bboxX = comboBBox.x;else if (isNaN(model.x)) bboxX = Math.random() * 100;\n if (!isNaN(comboBBox.y)) bboxY = comboBBox.y;else if (isNaN(model.y)) bboxY = Math.random() * 100;\n if (isNaN(model.x) || isNaN(model.y)) {\n model.x = bboxX;\n model.y = bboxY;\n } else {\n // if there is x y in model, place the combo according to it and move its succeed items. that means, the priority of the combo's position is higher than succeed items'\n var dx = model.x - bboxX;\n var dy = model.y - bboxY;\n // In the same time, adjust the children's positions\n this.updateComboSucceeds(model.id, dx, dy, children);\n }\n var comboGroup = parent.addGroup();\n comboGroup.setZIndex(model.depth);\n item = new _item_combo__WEBPACK_IMPORTED_MODULE_4__[\"default\"]({\n model: model,\n styles: styles,\n animate: graph.get('animate'),\n bbox: model.collapsed ? Object(_util_graphic__WEBPACK_IMPORTED_MODULE_5__[\"getComboBBox\"])([], graph) : comboBBox,\n group: comboGroup\n });\n // if it is a circle combo, diagonal length of the children's bbox should be the diameter of the combo's bbox\n if (!model.collapsed && item.getKeyShape().get('type') === 'circle') {\n comboBBox.width = Math.hypot(comboBBox.height, comboBBox.width);\n comboBBox.height = comboBBox.width;\n item.set('bbox', comboBBox);\n item.refresh();\n }\n var comboModel_1 = item.getModel();\n (children || []).forEach(function (child) {\n var childItem = graph.findById(child.id);\n item.addChild(childItem);\n child.depth = comboModel_1.depth + 2;\n });\n }\n if (item) {\n item.setOptimize(graph.getNodes().length > graph.get('optimizeThreshold'));\n graph.get(\"\".concat(type, \"s\")).push(item);\n graph.get('itemMap')[item.get('id')] = item;\n graph.emit('afteradditem', {\n item: item,\n model: model\n });\n // eslint-disable-next-line consistent-return\n return item;\n }\n };\n /**\n * 更新节点或边\n *\n * @param {Item} item ID 或 实例\n * @param {(EdgeConfig | Partial)} cfg 数据模型\n * @returns\n * @memberof ItemController\n */\n ItemController.prototype.updateItem = function (item, cfg) {\n var _this = this;\n var _a, _b;\n var graph = this.graph;\n if (Object(_antv_util__WEBPACK_IMPORTED_MODULE_1__[\"isString\"])(item)) {\n item = graph.findById(item);\n }\n if (!item || item.destroyed) {\n return;\n }\n // 更新的 item 的类型\n var type = '';\n if (item.getType) type = item.getType();\n var mapper = graph.get(type + MAPPER_SUFFIX);\n var model = item.getModel();\n var oriX = model.x,\n oriY = model.y;\n var updateType = item.getUpdateType(cfg);\n if (mapper) {\n var result = Object(_antv_util__WEBPACK_IMPORTED_MODULE_1__[\"deepMix\"])({}, model, cfg);\n var mappedModel = mapper(result);\n // 将 update 时候用户传入的参数与mapperModel做deepMix,以便复用之前设置的参数值\n var newModel = Object(_antv_util__WEBPACK_IMPORTED_MODULE_1__[\"deepMix\"])({}, model, mappedModel, cfg);\n if (mappedModel[STATE_SUFFIX]) {\n item.set('styles', newModel[STATE_SUFFIX]);\n delete newModel[STATE_SUFFIX];\n }\n Object(_antv_util__WEBPACK_IMPORTED_MODULE_1__[\"each\"])(newModel, function (val, key) {\n cfg[key] = val;\n });\n } else {\n // merge update传进来的对象参数,model中没有的数据不做处理,对象和字符串值也不做处理,直接替换原来的\n Object(_antv_util__WEBPACK_IMPORTED_MODULE_1__[\"each\"])(cfg, function (val, key) {\n if (model[key]) {\n if (Object(_antv_util__WEBPACK_IMPORTED_MODULE_1__[\"isObject\"])(val) && !Object(_antv_util__WEBPACK_IMPORTED_MODULE_1__[\"isArray\"])(val)) {\n cfg[key] = Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__assign\"])(Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__assign\"])({}, model[key]), cfg[key]);\n }\n }\n });\n }\n // emit beforeupdateitem 事件\n graph.emit('beforeupdateitem', {\n item: item,\n cfg: cfg\n });\n if (type === EDGE) {\n // 若是边要更新source || target, 为了不影响示例内部model,并且重新计算startPoint和endPoint,手动设置\n if (cfg.source) {\n var source = cfg.source;\n if (Object(_antv_util__WEBPACK_IMPORTED_MODULE_1__[\"isString\"])(source)) {\n source = graph.findById(source);\n }\n item.setSource(source);\n }\n if (cfg.target) {\n var target = cfg.target;\n if (Object(_antv_util__WEBPACK_IMPORTED_MODULE_1__[\"isString\"])(target)) {\n target = graph.findById(target);\n }\n item.setTarget(target);\n }\n item.update(cfg);\n } else if (type === NODE) {\n item.update(cfg, updateType);\n var edges = item.getEdges();\n if (updateType === 'move') {\n Object(_antv_util__WEBPACK_IMPORTED_MODULE_1__[\"each\"])(edges, function (edge) {\n _this.edgeToBeUpdateMap[edge.getID()] = {\n edge: edge,\n updateType: updateType\n };\n _this.throttleRefresh();\n });\n } else if (updateType === null || updateType === void 0 ? void 0 : updateType.includes('bbox')) {\n Object(_antv_util__WEBPACK_IMPORTED_MODULE_1__[\"each\"])(edges, function (edge) {\n edge.refresh(updateType);\n });\n }\n } else if (type === COMBO) {\n item.update(cfg, updateType);\n if (!isNaN(cfg.x) || !isNaN(cfg.y)) {\n // if there is x y in model, place the combo according to it and move its succeed items. that means, the priority of the combo's position is higher than succeed items'\n var dx = cfg.x - oriX || 0;\n var dy = cfg.y - oriY || 0;\n // In the same time, adjust the children's positions\n this.updateComboSucceeds(model.id, dx, dy);\n }\n var edges_1 = item.getEdges();\n var refreshEdge = (updateType === null || updateType === void 0 ? void 0 : updateType.includes('bbox')) || updateType === 'move';\n if (refreshEdge && type === COMBO) {\n var shapeFactory = item.get('shapeFactory');\n var shapeType = model.type || 'circle';\n var comboAnimate = model.animate === undefined || cfg.animate === undefined ? (_b = (_a = shapeFactory[shapeType]) === null || _a === void 0 ? void 0 : _a.options) === null || _b === void 0 ? void 0 : _b.animate : model.animate || cfg.animate;\n if (comboAnimate) {\n setTimeout(function () {\n if (!item || item.destroyed) return;\n var keyShape = item.getKeyShape();\n if (!keyShape || keyShape.destroyed) return;\n Object(_antv_util__WEBPACK_IMPORTED_MODULE_1__[\"each\"])(edges_1, function (edge) {\n if (edge && !edge.destroyed) edge.refresh();\n });\n }, 201);\n } else {\n Object(_antv_util__WEBPACK_IMPORTED_MODULE_1__[\"each\"])(edges_1, function (edge) {\n edge.refresh();\n });\n }\n }\n }\n item.setOptimize(graph.getNodes().length > graph.get('optimizeThreshold'));\n graph.emit('afterupdateitem', {\n item: item,\n cfg: cfg\n });\n };\n /**\n * 根据 combo 的子元素更新 combo 的位置及大小\n *\n * @param {ICombo} combo ID 或 实例\n * @returns\n * @memberof ItemController\n */\n ItemController.prototype.updateCombo = function (combo, children, followCombo) {\n var _this = this;\n var _a, _b;\n var graph = this.graph;\n if (Object(_antv_util__WEBPACK_IMPORTED_MODULE_1__[\"isString\"])(combo)) {\n combo = graph.findById(combo);\n }\n if (!combo || combo.destroyed) {\n return;\n }\n var model = combo.getModel();\n var comboBBox = Object(_util_graphic__WEBPACK_IMPORTED_MODULE_5__[\"getComboBBox\"])(children, graph, combo);\n var comboX = comboBBox.x,\n comboY = comboBBox.y;\n combo.set('bbox', comboBBox);\n var x = comboX,\n y = comboY;\n if (followCombo) {\n // position of combo model first\n x = isNaN(model.x) ? comboX : model.x;\n y = isNaN(model.y) ? comboY : model.y;\n } else {\n // position of succeed items first\n x = isNaN(comboX) ? model.x : comboX;\n y = isNaN(comboY) ? model.y : comboY;\n }\n combo.update({\n x: x,\n y: y\n });\n var shapeFactory = combo.get('shapeFactory');\n var shapeType = model.type || 'circle';\n var comboAnimate = model.animate === undefined ? (_b = (_a = shapeFactory[shapeType]) === null || _a === void 0 ? void 0 : _a.options) === null || _b === void 0 ? void 0 : _b.animate : model.animate;\n if (comboAnimate) {\n setTimeout(function () {\n if (!combo || combo.destroyed) return;\n var keyShape = combo.getKeyShape();\n if (!keyShape || keyShape.destroyed) return;\n combo.getShapeCfg(model); // 更新 combo 缓存的 size\n _this.updateComboEdges(combo);\n }, 201);\n } else {\n this.updateComboEdges(combo);\n }\n };\n ItemController.prototype.updateComboEdges = function (combo) {\n var _a, _b;\n var combEdges = combo.getEdges() || [];\n for (var i = 0; i < combEdges.length; i++) {\n var edge = combEdges[i];\n if (!(edge === null || edge === void 0 ? void 0 : edge.destroyed) && !((_a = edge === null || edge === void 0 ? void 0 : edge.getSource()) === null || _a === void 0 ? void 0 : _a.destroyed) && !((_b = edge === null || edge === void 0 ? void 0 : edge.getTarget()) === null || _b === void 0 ? void 0 : _b.destroyed)) {\n edge.refresh();\n }\n }\n };\n /**\n * 收起 combo,隐藏相关元素\n */\n ItemController.prototype.collapseCombo = function (combo, stack) {\n if (stack === void 0) {\n stack = true;\n }\n var graph = this.graph;\n if (Object(_antv_util__WEBPACK_IMPORTED_MODULE_1__[\"isString\"])(combo)) {\n combo = graph.findById(combo);\n }\n var children = combo.getChildren();\n children.nodes.forEach(function (node) {\n graph.hideItem(node, stack);\n });\n children.combos.forEach(function (c) {\n graph.hideItem(c, stack);\n });\n };\n /**\n * 根据位置差量 dx dy,更新 comboId 后继元素的位置\n * */\n ItemController.prototype.updateComboSucceeds = function (comboId, dx, dy, children) {\n var _this = this;\n if (children === void 0) {\n children = [];\n }\n var graph = this.graph;\n if (!dx && !dy) return;\n var kids = children;\n if (!(kids === null || kids === void 0 ? void 0 : kids.length)) {\n var comboTrees = graph.get('comboTrees');\n comboTrees === null || comboTrees === void 0 ? void 0 : comboTrees.forEach(function (child) {\n Object(_util_graphic__WEBPACK_IMPORTED_MODULE_5__[\"traverseTree\"])(child, function (subTree) {\n if (subTree.id === comboId) {\n kids = subTree.children;\n return false;\n }\n return true;\n });\n });\n }\n kids === null || kids === void 0 ? void 0 : kids.forEach(function (child) {\n var childItem = graph.findById(child.id);\n if (childItem) {\n var childModel = childItem.getModel();\n _this.updateItem(child.id, {\n x: (childModel.x || 0) + dx,\n y: (childModel.y || 0) + dy\n });\n }\n });\n };\n /**\n * 展开 combo,相关元素出现\n * 若子 combo 原先是收起状态,则保持它的收起状态\n */\n ItemController.prototype.expandCombo = function (combo, stack) {\n if (stack === void 0) {\n stack = true;\n }\n var graph = this.graph;\n if (Object(_antv_util__WEBPACK_IMPORTED_MODULE_1__[\"isString\"])(combo)) {\n combo = graph.findById(combo);\n }\n var children = combo.getChildren();\n var edgeSet = new Set();\n children.nodes.forEach(function (node) {\n graph.showItem(node, stack);\n node.getEdges().forEach(function (edge) {\n return edgeSet.add(edge);\n });\n });\n children.combos.forEach(function (c) {\n if (c.getModel().collapsed) {\n c.show();\n } else {\n graph.showItem(c, stack);\n }\n c.getEdges().forEach(function (edge) {\n return edgeSet.add(edge);\n });\n });\n edgeSet.forEach(function (edge) {\n return edge.refresh();\n });\n };\n /**\n * 删除指定的节点或边\n *\n * @param {Item} item item ID 或实例\n * @returns {void}\n * @memberof ItemController\n */\n ItemController.prototype.removeItem = function (item) {\n var _this = this;\n var graph = this.graph;\n if (Object(_antv_util__WEBPACK_IMPORTED_MODULE_1__[\"isString\"])(item)) {\n item = graph.findById(item);\n }\n if (!item || item.destroyed) {\n return;\n }\n var itemModel = Object(_antv_util__WEBPACK_IMPORTED_MODULE_1__[\"clone\"])(item.getModel());\n var type = '';\n if (item.getType) type = item.getType();\n graph.emit('beforeremoveitem', {\n item: itemModel,\n type: type\n });\n var items = graph.get(\"\".concat(type, \"s\"));\n var index = items.indexOf(item);\n if (index > -1) items.splice(index, 1);\n if (type === EDGE) {\n var vitems = graph.get(\"v\".concat(type, \"s\"));\n var vindex = vitems.indexOf(item);\n if (vindex > -1) vitems.splice(vindex, 1);\n }\n var itemId = item.get('id');\n var itemMap = graph.get('itemMap');\n delete itemMap[itemId];\n var comboTrees = graph.get('comboTrees');\n var id = item.get('id');\n if (type === NODE) {\n var comboId = item.getModel().comboId;\n if (comboTrees && comboId) {\n var brothers_1 = comboTrees;\n var found_1 = false; // the flag to terminate the forEach circulation\n // remove the node from the children array of its parent fromt he tree\n comboTrees.forEach(function (ctree) {\n if (found_1) return;\n Object(_util_graphic__WEBPACK_IMPORTED_MODULE_5__[\"traverseTree\"])(ctree, function (combo) {\n if (combo.id === id && brothers_1) {\n var bidx = brothers_1.indexOf(combo);\n brothers_1.splice(bidx, 1);\n found_1 = true;\n return false; // terminate the traverse\n }\n\n brothers_1 = combo.children;\n return true;\n });\n });\n }\n // 若移除的是节点,需要将与之相连的边一同删除\n var edges = item.getEdges();\n for (var i = edges.length - 1; i >= 0; i--) {\n graph.removeItem(edges[i], false);\n }\n if (comboId) graph.updateCombo(comboId);\n } else if (type === COMBO) {\n var parentId = item.getModel().parentId;\n var comboInTree_1;\n // find the subtree rooted at the item to be removed\n var found_2 = false; // the flag to terminate the forEach circulation\n (comboTrees || []).forEach(function (ctree) {\n if (found_2) return;\n Object(_util_graphic__WEBPACK_IMPORTED_MODULE_5__[\"traverseTree\"])(ctree, function (combo) {\n if (combo.id === id) {\n comboInTree_1 = combo;\n found_2 = true;\n return false; // terminate the traverse\n }\n\n return true;\n });\n });\n comboInTree_1.removed = true;\n if (comboInTree_1 && comboInTree_1.children) {\n comboInTree_1.children.forEach(function (child) {\n _this.removeItem(child.id);\n });\n }\n // 若移除的是 combo,需要将与之相连的边一同删除\n var edges = item.getEdges();\n for (var i = edges.length; i >= 0; i--) {\n graph.removeItem(edges[i], false);\n }\n if (parentId) graph.updateCombo(parentId);\n }\n item.destroy();\n graph.emit('afterremoveitem', {\n item: itemModel,\n type: type\n });\n };\n /**\n * 更新 item 状态\n *\n * @param {Item} item Item 实例\n * @param {string} state 状态名称\n * @param {boolean} value 是否启用状态或状态值\n * @returns {void}\n * @memberof ItemController\n */\n ItemController.prototype.setItemState = function (item, state, value) {\n var graph = this.graph;\n var stateName = state;\n if (Object(_antv_util__WEBPACK_IMPORTED_MODULE_1__[\"isString\"])(value)) {\n stateName = \"\".concat(state, \":\").concat(value);\n }\n // 已经存在要设置的 state,或不存在 state 的样式为 undefined\n if (item.hasState(stateName) === value && value ||\n // 当该状态已经存在且现在需要设置为 true 时,不需要继续。当该状态不存在,且设置为 false 时,需要继续\n Object(_antv_util__WEBPACK_IMPORTED_MODULE_1__[\"isString\"])(value) && item.hasState(stateName)) {\n // 当该状态 value 是字符串,且已经存在该状态,不需要继续\n return;\n }\n graph.emit('beforeitemstatechange', {\n item: item,\n state: stateName,\n enabled: value\n });\n item.setState(state, value);\n graph.autoPaint();\n graph.emit('afteritemstatechange', {\n item: item,\n state: stateName,\n enabled: value\n });\n };\n /**\n * 将指定状态的优先级提升为最高优先级\n * @param {Item} item 元素id或元素实例\n * @param state 状态名称\n */\n ItemController.prototype.priorityState = function (item, state) {\n var graph = this.graph;\n var currentItem = item;\n if (Object(_antv_util__WEBPACK_IMPORTED_MODULE_1__[\"isString\"])(item)) {\n currentItem = graph.findById(item);\n }\n // 先取消已有的 state\n this.setItemState(currentItem, state, false);\n // 再设置state,则此时该优先级为最高\n this.setItemState(currentItem, state, true);\n };\n /**\n * 清除所有指定的状态\n *\n * @param {Item} item Item 实例\n * @param {string[]} states 状态名称集合\n * @memberof ItemController\n */\n ItemController.prototype.clearItemStates = function (item, states) {\n var graph = this.graph;\n if (Object(_antv_util__WEBPACK_IMPORTED_MODULE_1__[\"isString\"])(item)) {\n item = graph.findById(item);\n }\n graph.emit('beforeitemstatesclear', {\n item: item,\n states: states\n });\n item.clearStates(states);\n graph.emit('afteritemstatesclear', {\n item: item,\n states: states\n });\n };\n /**\n * 刷新指定的 Item\n *\n * @param {Item} item Item ID 或 实例\n * @memberof ItemController\n */\n ItemController.prototype.refreshItem = function (item) {\n var graph = this.graph;\n if (Object(_antv_util__WEBPACK_IMPORTED_MODULE_1__[\"isString\"])(item)) {\n item = graph.findById(item);\n }\n graph.emit('beforeitemrefresh', {\n item: item\n });\n // 调用 Item 的 refresh 方法,实现刷新功能\n item.refresh();\n graph.emit('afteritemrefresh', {\n item: item\n });\n };\n /**\n * 根据 graph 上用 combos 数据生成的 comboTree 来增加所有 combos\n *\n * @param {ComboTree[]} comboTrees graph 上用 combos 数据生成的 comboTree\n * @param {ComboConfig[]} comboModels combos 数据\n * @memberof ItemController\n */\n ItemController.prototype.addCombos = function (comboTrees, comboModels) {\n var _this = this;\n var graph = this.graph;\n (comboTrees || []).forEach(function (ctree) {\n Object(_util_graphic__WEBPACK_IMPORTED_MODULE_5__[\"traverseTreeUp\"])(ctree, function (child) {\n var comboModel;\n comboModels.forEach(function (model) {\n if (model.id === child.id) {\n model.children = child.children;\n model.depth = child.depth;\n comboModel = model;\n }\n });\n if (comboModel) {\n _this.addItem('combo', comboModel);\n }\n return true;\n });\n });\n var comboGroup = graph.get('comboGroup');\n if (comboGroup) comboGroup.sort();\n };\n /**\n * 改变Item的显示状态\n *\n * @param {Item} item Item ID 或 实例\n * @param {boolean} visible 是否显示\n * @memberof ItemController\n */\n ItemController.prototype.changeItemVisibility = function (item, visible) {\n var _this = this;\n var graph = this.graph;\n if (Object(_antv_util__WEBPACK_IMPORTED_MODULE_1__[\"isString\"])(item)) {\n item = graph.findById(item);\n }\n if (!item) {\n console.warn('The item to be shown or hidden does not exist!');\n return;\n }\n graph.emit('beforeitemvisibilitychange', {\n item: item,\n visible: visible\n });\n item.changeVisibility(visible);\n if (item.getType && item.getType() === NODE) {\n var edges = item.getEdges();\n Object(_antv_util__WEBPACK_IMPORTED_MODULE_1__[\"each\"])(edges, function (edge) {\n // 若隐藏节点,则将与之关联的边也隐藏\n // 若显示节点,则将与之关联的边也显示,但是需要判断边两端的节点都是可见的\n if (visible && !(edge.get('source').isVisible() && edge.get('target').isVisible())) {\n return;\n }\n _this.changeItemVisibility(edge, visible);\n });\n } else if (item.getType && item.getType() === COMBO) {\n var comboTrees = graph.get('comboTrees');\n var id_1 = item.get('id');\n var children_1 = [];\n var found_3 = false; // flag the terminate the forEach\n (comboTrees || []).forEach(function (ctree) {\n if (found_3) return;\n if (!ctree.children || ctree.children.length === 0) return;\n Object(_util_graphic__WEBPACK_IMPORTED_MODULE_5__[\"traverseTree\"])(ctree, function (combo) {\n if (combo.id === id_1) {\n children_1 = combo.children;\n found_3 = true;\n return false; // terminate the traverse\n }\n\n return true;\n });\n });\n if (children_1 && (!visible || visible && !item.getModel().collapsed)) {\n children_1.forEach(function (child) {\n var childItem = graph.findById(child.id);\n _this.changeItemVisibility(childItem, visible);\n });\n }\n var edges = item.getEdges();\n Object(_antv_util__WEBPACK_IMPORTED_MODULE_1__[\"each\"])(edges, function (edge) {\n // 若隐藏 combo,则将与 combo 本身关联的边也隐藏\n // 若显示 combo,则将与 combo 本身关联的边也显示,但是需要判断边两端的节点都是可见的\n if (visible && !(edge.get('source').isVisible() && edge.get('target').isVisible())) {\n return;\n }\n _this.changeItemVisibility(edge, visible);\n });\n }\n graph.emit('afteritemvisibilitychange', {\n item: item,\n visible: visible\n });\n return item;\n };\n ItemController.prototype.destroy = function () {\n this.graph = null;\n this.destroyed = true;\n };\n return ItemController;\n}();\n/* harmony default export */ __webpack_exports__[\"default\"] = (ItemController);\n\n//# sourceURL=webpack:///./node_modules/@antv/g6-core/es/graph/controller/item.js?");
/***/ }),
/***/ "./node_modules/@antv/g6-core/es/graph/controller/layout.js":
/*!******************************************************************!*\
!*** ./node_modules/@antv/g6-core/es/graph/controller/layout.js ***!
\******************************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tslib */ \"./node_modules/tslib/tslib.es6.js\");\n/* harmony import */ var _antv_util__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @antv/util */ \"./node_modules/@antv/util/esm/index.js\");\n/* harmony import */ var _util_base__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../util/base */ \"./node_modules/@antv/g6-core/es/util/base.js\");\n/* harmony import */ var _util_layout__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../util/layout */ \"./node_modules/@antv/g6-core/es/util/layout.js\");\n\n\n\n\nvar LayoutController = /** @class */function () {\n function LayoutController(graph) {\n this.graph = graph;\n this.layoutCfg = graph.get('layout') || {};\n this.layoutType = this.getLayoutType();\n this.layoutMethods = [];\n this.initLayout();\n }\n // eslint-disable-next-line class-methods-use-this\n LayoutController.prototype.initLayout = function () {\n // no data before rendering\n };\n LayoutController.prototype.getLayoutType = function () {\n return this.getLayoutCfgType(this.layoutCfg);\n };\n LayoutController.prototype.getLayoutCfgType = function (layoutCfg) {\n var type = layoutCfg.type;\n // type should be top priority\n if (type) {\n return type;\n }\n var pipes = layoutCfg.pipes;\n if (Array.isArray(pipes)) {\n return pipes.map(function (pipe) {\n return (pipe === null || pipe === void 0 ? void 0 : pipe.type) || '';\n });\n }\n return null;\n };\n LayoutController.prototype.isLayoutTypeSame = function (cfg) {\n var current = this.getLayoutCfgType(cfg);\n var preHasPipes = Array.isArray(this.layoutType);\n var currentHasPipes = Array.isArray(current);\n // already has pipes, and the new one is pipes\n if (preHasPipes && currentHasPipes) {\n return this.layoutType.every(function (type, index) {\n return type === current[index];\n });\n }\n // only one of the pre and current is pipes\n if (Array.isArray(current) || Array.isArray(this.layoutType)) {\n return false;\n }\n // both of the pre and current are not pipes\n return (cfg === null || cfg === void 0 ? void 0 : cfg.type) === this.layoutType;\n };\n // 绘制\n LayoutController.prototype.refreshLayout = function () {\n var _a = this,\n graph = _a.graph,\n layoutType = _a.layoutType,\n _b = _a.layoutCfg,\n layoutCfg = _b === void 0 ? {} : _b;\n if (!graph) return;\n var animate = layoutCfg.animate;\n var isDefaultAnimateLayout = animate === undefined && (layoutType === 'force' || layoutType === 'force2');\n var forceAnimate = Object(_util_layout__WEBPACK_IMPORTED_MODULE_3__[\"isForce\"])(layoutType) && (animate || isDefaultAnimateLayout);\n if (graph.get('animate') && !forceAnimate) {\n graph.positionsAnimate(layoutType === 'comboCombined');\n } else {\n graph.refreshPositions(layoutType === 'comboCombined');\n }\n };\n // 更换布局\n LayoutController.prototype.changeLayout = function (cfg) {\n var disableTriggerLayout = cfg.disableTriggerLayout,\n otherCfgs = Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__rest\"])(cfg, [\"disableTriggerLayout\"]);\n this.layoutCfg = otherCfgs;\n this.layoutType = otherCfgs.type || this.layoutType;\n // 不触发重新布局,仅更新参数\n if (disableTriggerLayout) return;\n this.layout();\n };\n // 更换数据\n LayoutController.prototype.changeData = function (success) {\n this.layout(success);\n };\n LayoutController.prototype.destoryLayoutMethods = function () {\n var layoutMethods = this.layoutMethods;\n var destroyedLayoutTypes = [];\n layoutMethods === null || layoutMethods === void 0 ? void 0 : layoutMethods.forEach(function (layoutMethod) {\n var _a;\n var layoutType = (_a = layoutMethod.getType) === null || _a === void 0 ? void 0 : _a.call(layoutMethod);\n if (layoutType) destroyedLayoutTypes.push(layoutType);\n layoutMethod.destroy();\n });\n this.layoutMethods = [];\n return destroyedLayoutTypes;\n };\n // 销毁布局,不能使用 this.destroy,因为 controller 还需要被使用,只是把布局算法销毁\n LayoutController.prototype.destroyLayout = function () {\n this.destoryLayoutMethods();\n var graph = this.graph;\n if (graph && !graph.get('destroyed')) {\n graph.set('layout', undefined);\n }\n this.layoutCfg = undefined;\n this.layoutType = undefined;\n this.layoutMethods = undefined;\n };\n // 从 this.graph 获取数据\n LayoutController.prototype.setDataFromGraph = function () {\n var _a;\n var nodes = [];\n var hiddenNodes = [];\n var edges = [];\n var hiddenEdges = [];\n var comboEdges = [];\n var combos = [];\n var hiddenCombos = [];\n var nodeItems = this.graph.getNodes();\n var edgeItems = this.graph.getEdges();\n var comboItems = this.graph.getCombos();\n var nodeLength = nodeItems.length;\n for (var i = 0; i < nodeLength; i++) {\n var nodeItem = nodeItems[i];\n if (!nodeItem || nodeItem.destroyed) continue;\n var model = nodeItem.getModel();\n if (!nodeItem.isVisible()) {\n hiddenNodes.push(model);\n continue;\n }\n nodes.push(model);\n }\n var edgeLength = edgeItems.length;\n for (var i = 0; i < edgeLength; i++) {\n var edgeItem = edgeItems[i];\n if (!edgeItem || edgeItem.destroyed) continue;\n var model = edgeItem.getModel();\n if (!edgeItem.isVisible()) {\n hiddenEdges.push(model);\n continue;\n }\n if (!model.isComboEdge) edges.push(model);else comboEdges.push(model);\n }\n var comboLength = comboItems.length;\n for (var i = 0; i < comboLength; i++) {\n var comboItem = comboItems[i];\n if (comboItem.destroyed) continue;\n var model = comboItem.getModel();\n if (!comboItem.isVisible()) {\n hiddenCombos.push(model);\n continue;\n }\n combos.push(model);\n }\n return {\n nodes: nodes,\n hiddenNodes: hiddenNodes,\n edges: edges,\n hiddenEdges: hiddenEdges,\n combos: combos,\n hiddenCombos: hiddenCombos,\n comboEdges: comboEdges,\n vedges: (_a = this.graph.get('vedges')) === null || _a === void 0 ? void 0 : _a.map(function (edge) {\n return edge.getModel();\n })\n };\n };\n // 重新布局\n LayoutController.prototype.relayout = function (reloadData) {\n var _this = this;\n var _a = this,\n graph = _a.graph,\n layoutMethods = _a.layoutMethods,\n layoutCfg = _a.layoutCfg;\n if (!graph || graph.get('destroyed')) return;\n var start = Promise.resolve();\n if (reloadData) {\n this.data = this.setDataFromGraph();\n var nodes = this.data.nodes;\n if (!nodes) {\n return false;\n }\n start = this.initPositions(layoutCfg.center, nodes);\n }\n graph.emit('beforelayout');\n layoutMethods === null || layoutMethods === void 0 ? void 0 : layoutMethods.forEach(function (layoutMethod, index) {\n var currentCfg = layoutCfg[index] || layoutCfg;\n start = start.then(function () {\n var _a;\n var relayoutPromise = _this.execLayoutMethod(currentCfg, index);\n if (index === layoutMethods.length - 1) {\n (_a = layoutCfg.onAllLayoutEnd) === null || _a === void 0 ? void 0 : _a.call(layoutCfg);\n }\n return relayoutPromise;\n });\n });\n };\n // 筛选参与布局的nodes和edges\n LayoutController.prototype.filterLayoutData = function (data, cfg) {\n var nodes = data.nodes,\n edges = data.edges,\n rest = Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__rest\"])(data, [\"nodes\", \"edges\"]);\n if (!nodes) {\n return data;\n }\n var nodesFilter;\n var edegsFilter;\n if (Object(_antv_util__WEBPACK_IMPORTED_MODULE_1__[\"isFunction\"])(cfg === null || cfg === void 0 ? void 0 : cfg.nodesFilter)) {\n nodesFilter = cfg.nodesFilter;\n } else {\n nodesFilter = function nodesFilter() {\n return true;\n };\n }\n var fNodes = nodes.filter(nodesFilter);\n if (Object(_antv_util__WEBPACK_IMPORTED_MODULE_1__[\"isFunction\"])(cfg === null || cfg === void 0 ? void 0 : cfg.edgesFilter)) {\n edegsFilter = cfg.edgesFilter;\n } else {\n var nodesMap_1 = fNodes.reduce(function (acc, cur) {\n acc[cur.id] = true;\n return acc;\n }, {});\n edegsFilter = function edegsFilter(edge) {\n return nodesMap_1[edge.source] && nodesMap_1[edge.target];\n };\n }\n return Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__assign\"])({\n nodes: fNodes,\n edges: edges.filter(edegsFilter)\n }, rest);\n };\n LayoutController.prototype.getLayoutBBox = function (nodes) {\n var graph = this.graph;\n var graphGroupNodes = Object(_antv_util__WEBPACK_IMPORTED_MODULE_1__[\"groupBy\"])(graph.getNodes(), function (n) {\n return n.getModel().layoutOrder;\n });\n var layoutNodes = Object.values(graphGroupNodes).map(function (value) {\n var bbox = Object(_util_base__WEBPACK_IMPORTED_MODULE_2__[\"calculationItemsBBox\"])(value);\n bbox.size = [bbox.width, bbox.height];\n return bbox;\n });\n var groupNodes = Object.values(Object(_antv_util__WEBPACK_IMPORTED_MODULE_1__[\"groupBy\"])(nodes, 'layoutOrder'));\n return {\n groupNodes: groupNodes,\n layoutNodes: layoutNodes\n };\n };\n // 控制布局动画\n // eslint-disable-next-line class-methods-use-this\n LayoutController.prototype.layoutAnimate = function () {};\n // 将当前节点的平均中心移动到原点\n LayoutController.prototype.moveToZero = function () {\n var graph = this.graph;\n var data = graph.get('data');\n var nodes = data.nodes;\n if (nodes[0].x === undefined || nodes[0].x === null || Object(_util_base__WEBPACK_IMPORTED_MODULE_2__[\"isNaN\"])(nodes[0].x)) {\n return;\n }\n var meanCenter = [0, 0];\n var nodeLength = nodes.length;\n for (var i = 0; i < nodeLength; i++) {\n var node = nodes[i];\n meanCenter[0] += node.x;\n meanCenter[1] += node.y;\n }\n meanCenter[0] /= nodes.length;\n meanCenter[1] /= nodes.length;\n for (var i = 0; i < nodeLength; i++) {\n var node = nodes[i];\n node.x -= meanCenter[0];\n node.y -= meanCenter[1];\n }\n };\n // 初始化节点到 center 附近\n LayoutController.prototype.initPositions = function (center, nodes) {\n var _a;\n return Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__awaiter\"])(this, void 0, void 0, function () {\n var graph, nodesToInit, nodeLength;\n return Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__generator\"])(this, function (_b) {\n graph = this.graph;\n if (!(nodes === null || nodes === void 0 ? void 0 : nodes.length)) {\n return [2 /*return*/, Promise.resolve()];\n }\n nodesToInit = nodes.filter(function (node) {\n return Object(_util_base__WEBPACK_IMPORTED_MODULE_2__[\"isNaN\"])(node.x) || Object(_util_base__WEBPACK_IMPORTED_MODULE_2__[\"isNaN\"])(node.y);\n });\n nodeLength = nodesToInit ? nodesToInit.length : 0;\n if (!nodeLength) return [2 /*return*/];\n return [2 /*return*/, (_a = this.initWithPreset) === null || _a === void 0 ? void 0 : _a.call(this, function () {},\n // onFullfillment\n function () {\n var width = graph.get('width') * 0.85;\n var height = graph.get('height') * 0.85;\n var horiNum = Math.ceil(Math.sqrt(nodeLength) * (width / height));\n var vertiNum = Math.ceil(nodeLength / horiNum);\n var horiGap = width / (horiNum - 1);\n var vertiGap = height / (vertiNum - 1);\n if (!isFinite(horiGap) || !horiGap) horiGap = 0;\n if (!isFinite(vertiGap) || !horiGap) vertiGap = 0;\n var beginX = center[0] - width / 2;\n var beginY = center[1] - height / 2;\n var allHavePos = true;\n for (var i = 0; i < nodeLength; i++) {\n var node = nodesToInit[i];\n if (Object(_util_base__WEBPACK_IMPORTED_MODULE_2__[\"isNaN\"])(+node.x)) {\n allHavePos = false;\n node.x = i % horiNum * horiGap + beginX;\n }\n if (Object(_util_base__WEBPACK_IMPORTED_MODULE_2__[\"isNaN\"])(+node.y)) {\n allHavePos = false;\n node.y = Math.floor(i / horiNum) * vertiGap + beginY;\n }\n }\n })];\n });\n });\n };\n LayoutController.prototype.destroy = function () {\n this.graph = null;\n this.destoryLayoutMethods();\n this.destroyed = true;\n };\n return LayoutController;\n}();\n/* harmony default export */ __webpack_exports__[\"default\"] = (LayoutController);\n\n//# sourceURL=webpack:///./node_modules/@antv/g6-core/es/graph/controller/layout.js?");
/***/ }),
/***/ "./node_modules/@antv/g6-core/es/graph/controller/mode.js":
/*!****************************************************************!*\
!*** ./node_modules/@antv/g6-core/es/graph/controller/mode.js ***!
\****************************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _antv_util__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @antv/util */ \"./node_modules/@antv/util/esm/index.js\");\n/* harmony import */ var _behavior_behavior__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../behavior/behavior */ \"./node_modules/@antv/g6-core/es/behavior/behavior.js\");\n\n\nvar ModeController = /** @class */function () {\n function ModeController(graph) {\n this.graph = graph;\n this.destroyed = false;\n this.modes = graph.get('modes') || {\n default: []\n };\n this.formatModes();\n this.mode = graph.get('defaultMode') || 'default';\n this.currentBehaves = [];\n this.setMode(this.mode);\n }\n ModeController.prototype.formatModes = function () {\n var modes = this.modes;\n Object(_antv_util__WEBPACK_IMPORTED_MODULE_0__[\"each\"])(modes, function (mode) {\n Object(_antv_util__WEBPACK_IMPORTED_MODULE_0__[\"each\"])(mode, function (behavior, i) {\n if (Object(_antv_util__WEBPACK_IMPORTED_MODULE_0__[\"isString\"])(behavior)) {\n mode[i] = {\n type: behavior\n };\n }\n });\n });\n };\n ModeController.prototype.setBehaviors = function (mode) {\n var graph = this.graph;\n var behaviors = this.modes[mode];\n var behaves = [];\n var behave;\n Object(_antv_util__WEBPACK_IMPORTED_MODULE_0__[\"each\"])(behaviors || [], function (behavior) {\n var BehaviorInstance = _behavior_behavior__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getBehavior(behavior.type || behavior);\n if (!BehaviorInstance) {\n return;\n }\n behave = new BehaviorInstance(behavior);\n if (behave) {\n behave.bind(graph);\n behaves.push(behave);\n }\n });\n this.currentBehaves = behaves;\n };\n ModeController.mergeBehaviors = function (modeBehaviors, behaviors) {\n Object(_antv_util__WEBPACK_IMPORTED_MODULE_0__[\"each\"])(behaviors, function (behavior) {\n if (modeBehaviors.indexOf(behavior) < 0) {\n if (Object(_antv_util__WEBPACK_IMPORTED_MODULE_0__[\"isString\"])(behavior)) {\n behavior = {\n type: behavior\n };\n }\n modeBehaviors.push(behavior);\n }\n });\n return modeBehaviors;\n };\n ModeController.filterBehaviors = function (modeBehaviors, behaviors) {\n var result = [];\n modeBehaviors.forEach(function (behavior) {\n var type = '';\n if (Object(_antv_util__WEBPACK_IMPORTED_MODULE_0__[\"isString\"])(behavior)) {\n type = behavior;\n } else {\n // eslint-disable-next-line prefer-destructuring\n type = behavior.type;\n }\n if (behaviors.indexOf(type) < 0) {\n result.push(behavior);\n }\n });\n return result;\n };\n ModeController.prototype.setMode = function (mode) {\n var _a = this,\n modes = _a.modes,\n graph = _a.graph;\n var current = mode;\n var behaviors = modes[current];\n if (!behaviors) {\n return;\n }\n graph.emit('beforemodechange', {\n mode: mode\n });\n Object(_antv_util__WEBPACK_IMPORTED_MODULE_0__[\"each\"])(this.currentBehaves, function (behave) {\n if (behave.delegate) behave.delegate.remove();\n behave.unbind(graph);\n });\n this.setBehaviors(current);\n graph.emit('aftermodechange', {\n mode: mode\n });\n this.mode = mode;\n };\n ModeController.prototype.getMode = function () {\n return this.mode;\n };\n /**\n * 动态增加或删除 Behavior\n *\n * @param {ModeType[]} behaviors\n * @param {(ModeType[] | ModeType)} modes\n * @param {boolean} isAdd\n * @returns {Mode}\n * @memberof Mode\n */\n ModeController.prototype.manipulateBehaviors = function (behaviors, modes, isAdd) {\n var _this = this;\n var behaves;\n if (!Object(_antv_util__WEBPACK_IMPORTED_MODULE_0__[\"isArray\"])(behaviors)) {\n behaves = [behaviors];\n } else {\n behaves = behaviors;\n }\n if (Object(_antv_util__WEBPACK_IMPORTED_MODULE_0__[\"isArray\"])(modes)) {\n Object(_antv_util__WEBPACK_IMPORTED_MODULE_0__[\"each\"])(modes, function (mode) {\n if (!_this.modes[mode]) {\n if (isAdd) {\n _this.modes[mode] = behaves;\n }\n } else if (isAdd) {\n _this.modes[mode] = ModeController.mergeBehaviors(_this.modes[mode] || [], behaves);\n } else {\n _this.modes[mode] = ModeController.filterBehaviors(_this.modes[mode] || [], behaves);\n }\n });\n return this;\n }\n var currentMode = modes;\n if (!modes) {\n currentMode = this.mode; // isString(this.mode) ? this.mode : this.mode.type\n }\n\n if (!this.modes[currentMode]) {\n if (isAdd) {\n this.modes[currentMode] = behaves;\n }\n }\n if (isAdd) {\n this.modes[currentMode] = ModeController.mergeBehaviors(this.modes[currentMode] || [], behaves);\n } else {\n this.modes[currentMode] = ModeController.filterBehaviors(this.modes[currentMode] || [], behaves);\n }\n this.formatModes();\n this.setMode(this.mode);\n return this;\n };\n /**\n * 更新行为参数\n * @param {string | ModeOption | ModeType} behavior 需要更新的行为\n * @param {string | string[]} modes 指定的模式中的行为,不指定则为 default\n * @return {Graph} Graph\n */\n ModeController.prototype.updateBehavior = function (behavior, newCfg, mode) {\n if (Object(_antv_util__WEBPACK_IMPORTED_MODULE_0__[\"isString\"])(behavior)) {\n behavior = {\n type: behavior\n };\n }\n var behaviorSet = [];\n if (!mode || mode === this.mode || mode === 'default') {\n behaviorSet = this.currentBehaves;\n if (!behaviorSet || !behaviorSet.length) {\n console.warn('Update behavior failed! There is no behaviors in this mode on the graph.');\n return this;\n }\n var length_1 = behaviorSet.length;\n for (var i = 0; i < length_1; i++) {\n var behave = behaviorSet[i];\n if (behave.type === behavior.type) {\n behave.updateCfg(newCfg);\n return this;\n }\n if (i === length_1 - 1) console.warn('Update behavior failed! There is no such behavior in the mode');\n }\n } else {\n behaviorSet = this.modes[mode];\n if (!behaviorSet || !behaviorSet.length) {\n console.warn('Update behavior failed! There is no behaviors in this mode on the graph.');\n return this;\n }\n var length_2 = behaviorSet.length;\n for (var i = 0; i < length_2; i++) {\n var behave = behaviorSet[i];\n if (behave.type === behavior.type || behave === behavior.type) {\n if (behave === behavior.type) behave = {\n type: behave\n };\n Object.assign(behave, newCfg);\n behaviorSet[i] = behave;\n return this;\n }\n if (i === length_2 - 1) console.warn('Update behavior failed! There is no such behavior in the mode');\n }\n }\n return this;\n };\n ModeController.prototype.destroy = function () {\n this.graph = null;\n this.modes = null;\n this.currentBehaves = null;\n this.destroyed = true;\n };\n return ModeController;\n}();\n/* harmony default export */ __webpack_exports__[\"default\"] = (ModeController);\n\n//# sourceURL=webpack:///./node_modules/@antv/g6-core/es/graph/controller/mode.js?");
/***/ }),
/***/ "./node_modules/@antv/g6-core/es/graph/controller/state.js":
/*!*****************************************************************!*\
!*** ./node_modules/@antv/g6-core/es/graph/controller/state.js ***!
\*****************************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _antv_util__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @antv/util */ \"./node_modules/@antv/util/esm/index.js\");\n\nvar StateController = /** @class */function () {\n function StateController(graph) {\n this.graph = graph;\n this.destroyed = false;\n }\n /**\n * 更新 Item 的状态\n *\n * @param {Item} item Item实例\n * @param {string} state 状态名称\n * @param {boolean} enabled 状态是否可用\n * @memberof State\n */\n StateController.prototype.updateState = function (item, state, enabled) {\n var graphStates = this.graph.get('states');\n var key = state;\n if (Object(_antv_util__WEBPACK_IMPORTED_MODULE_0__[\"isString\"])(enabled)) key = \"\".concat(state, \":\").concat(enabled);\n if (!graphStates[key]) graphStates[key] = [];\n if (enabled) graphStates[key].push(item);else graphStates[key] = graphStates[key].filter(function (itemInState) {\n return itemInState !== item;\n });\n this.graph.set('states', graphStates);\n this.graph.emit('graphstatechange', {\n states: graphStates\n });\n };\n /**\n * 批量更新 states,兼容 updateState,支持更新一个 state\n *\n * @param {Item} item\n * @param {(string | string[])} states\n * @param {boolean} enabled\n * @memberof State\n */\n StateController.prototype.updateStates = function (item, states, enabled) {\n var graphStates = this.graph.get('states');\n var stateNames = Object(_antv_util__WEBPACK_IMPORTED_MODULE_0__[\"isString\"])(states) ? [states] : states;\n stateNames.forEach(function (stateName) {\n var key = stateName;\n if (!graphStates[key]) graphStates[key] = [];\n if (Object(_antv_util__WEBPACK_IMPORTED_MODULE_0__[\"isString\"])(enabled)) key = \"\".concat(stateName, \":\").concat(enabled);\n if (enabled) graphStates[key].push(item);else graphStates[key] = graphStates[key].filter(function (itemInState) {\n return itemInState !== item;\n });\n });\n this.graph.set('states', graphStates);\n this.graph.emit('graphstatechange', {\n states: states\n });\n };\n StateController.prototype.destroy = function () {\n this.graph = null;\n this.destroyed = true;\n };\n return StateController;\n}();\n/* harmony default export */ __webpack_exports__[\"default\"] = (StateController);\n\n//# sourceURL=webpack:///./node_modules/@antv/g6-core/es/graph/controller/state.js?");
/***/ }),
/***/ "./node_modules/@antv/g6-core/es/graph/controller/view.js":
/*!****************************************************************!*\
!*** ./node_modules/@antv/g6-core/es/graph/controller/view.js ***!
\****************************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tslib */ \"./node_modules/tslib/tslib.es6.js\");\n/* harmony import */ var _antv_util__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @antv/util */ \"./node_modules/@antv/util/esm/index.js\");\n/* harmony import */ var _util_base__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../util/base */ \"./node_modules/@antv/g6-core/es/util/base.js\");\n/* harmony import */ var _util_math__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../util/math */ \"./node_modules/@antv/g6-core/es/util/math.js\");\n/* harmony import */ var _antv_matrix_util_lib_ext__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @antv/matrix-util/lib/ext */ \"./node_modules/@antv/matrix-util/lib/ext.js\");\n/* harmony import */ var _antv_matrix_util_lib_ext__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_antv_matrix_util_lib_ext__WEBPACK_IMPORTED_MODULE_4__);\n/* harmony import */ var _util_graphic__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../util/graphic */ \"./node_modules/@antv/g6-core/es/util/graphic.js\");\n\n\n\n\n\n\nvar ViewController = /** @class */function () {\n function ViewController(graph) {\n this.destroyed = false;\n this.graph = graph;\n this.destroyed = false;\n }\n // get view center coordinate\n ViewController.prototype.getViewCenter = function () {\n var padding = this.getFormatPadding();\n var graph = this.graph;\n var width = this.graph.get('width');\n var height = graph.get('height');\n return {\n x: (width - padding[1] - padding[3]) / 2 + padding[3],\n y: (height - padding[0] - padding[2]) / 2 + padding[0]\n };\n };\n ViewController.prototype.fitCenter = function (animate, animateCfg) {\n var graph = this.graph;\n var group = graph.get('group');\n var bbox;\n // if reaches optimizeThreshold, fitView according to the 4 corner nodes\n var nodes = graph.getNodes();\n if (nodes.length > graph.get('optimizeThreshold')) {\n var minX_1 = Infinity;\n var minY_1 = Infinity;\n var maxX_1 = -Infinity;\n var maxY_1 = -Infinity;\n nodes.forEach(function (node) {\n var _a = node.getModel(),\n x = _a.x,\n y = _a.y;\n if (minX_1 > x) minX_1 = x;\n if (minY_1 > y) minY_1 = y;\n if (maxX_1 < x) maxX_1 = x;\n if (maxY_1 < y) maxY_1 = y;\n });\n var matrix = group.getMatrix() || [1, 0, 0, 0, 1, 0, 0, 0, 1];\n var _a = Object(_util_math__WEBPACK_IMPORTED_MODULE_3__[\"applyMatrix\"])({\n x: minX_1,\n y: minY_1\n }, matrix),\n transMinX = _a.x,\n transMinY = _a.y;\n var _b = Object(_util_math__WEBPACK_IMPORTED_MODULE_3__[\"applyMatrix\"])({\n x: maxX_1,\n y: maxY_1\n }, matrix),\n transMaxX = _b.x,\n transMaxY = _b.y;\n bbox = {\n minX: transMinX,\n maxX: transMaxX,\n minY: transMinY,\n maxY: transMaxY,\n width: transMaxX - transMinX,\n height: transMaxY - transMinY,\n x: transMinX,\n y: transMinY\n };\n } else {\n bbox = group.getCanvasBBox();\n }\n if (bbox.width === 0 || bbox.height === 0) return;\n var viewCenter = this.getViewCenter();\n var groupCenter = {\n x: bbox.x + bbox.width / 2,\n y: bbox.y + bbox.height / 2\n };\n graph.translate(viewCenter.x - groupCenter.x, viewCenter.y - groupCenter.y, animate, animateCfg);\n };\n ViewController.prototype.animatedFitView = function (group, startMatrix, animateCfg, bbox, viewCenter, groupCenter, ratio, zoomToFit) {\n var graph = this.graph;\n animateCfg = animateCfg ? animateCfg : {\n duration: 500,\n easing: 'easeCubic'\n };\n // start from the default matrix\n var matrix = [1, 0, 0, 0, 1, 0, 0, 0, 1];\n // Translate\n var vx = bbox.x + viewCenter.x - groupCenter.x - bbox.minX;\n var vy = bbox.y + viewCenter.y - groupCenter.y - bbox.minY;\n if (Object(_util_base__WEBPACK_IMPORTED_MODULE_2__[\"isNaN\"])(vx) || Object(_util_base__WEBPACK_IMPORTED_MODULE_2__[\"isNaN\"])(vy)) return;\n var translatedMatrix = Object(_antv_matrix_util_lib_ext__WEBPACK_IMPORTED_MODULE_4__[\"transform\"])(matrix, [['t', vx, vy]]);\n if (!zoomToFit) {\n // If zooming is not needed just animate the current translated matrix and return\n var animationConfig_1 = Object(_util_graphic__WEBPACK_IMPORTED_MODULE_5__[\"getAnimateCfgWithCallback\"])({\n animateCfg: animateCfg,\n callback: function callback() {\n graph.emit('viewportchange', {\n action: 'translate',\n matrix: translatedMatrix\n });\n }\n });\n group.animate(function (ratio) {\n return {\n matrix: Object(_util_math__WEBPACK_IMPORTED_MODULE_3__[\"lerpArray\"])(startMatrix, translatedMatrix, ratio)\n };\n }, animationConfig_1);\n return;\n }\n // Zoom\n var minZoom = graph.get('minZoom');\n var maxZoom = graph.get('maxZoom');\n var realRatio = ratio;\n if (minZoom && ratio < minZoom) {\n realRatio = minZoom;\n console.warn('fitview failed, ratio out of range, ratio: %f', ratio, 'graph minzoom has been used instead');\n } else if (maxZoom && ratio > maxZoom) {\n realRatio = maxZoom;\n console.warn('fitview failed, ratio out of range, ratio: %f', ratio, 'graph maxzoom has been used instead');\n }\n var zoomedMatrix = Object(_antv_matrix_util_lib_ext__WEBPACK_IMPORTED_MODULE_4__[\"transform\"])(translatedMatrix, [['t', -viewCenter.x, -viewCenter.y], ['s', realRatio, realRatio], ['t', viewCenter.x, viewCenter.y]]);\n // Animation\n var animationConfig = Object(_util_graphic__WEBPACK_IMPORTED_MODULE_5__[\"getAnimateCfgWithCallback\"])({\n animateCfg: animateCfg,\n callback: function callback() {\n group.setMatrix(zoomedMatrix);\n graph.emit('viewportchange', {\n action: 'translate',\n matrix: translatedMatrix\n });\n graph.emit('viewportchange', {\n action: 'zoom',\n matrix: zoomedMatrix\n });\n }\n });\n group.stopAnimate();\n group.setMatrix(startMatrix);\n group.animate(function (ratio) {\n return {\n matrix: Object(_util_math__WEBPACK_IMPORTED_MODULE_3__[\"lerpArray\"])(startMatrix, zoomedMatrix, ratio)\n };\n }, animationConfig);\n };\n // fit view graph\n ViewController.prototype.fitView = function (animate, animateCfg) {\n var graph = this.graph;\n var padding = this.getFormatPadding();\n var width = graph.get('width');\n var height = graph.get('height');\n var group = graph.get('group');\n var startMatrix = group.getMatrix() || [1, 0, 0, 0, 1, 0, 0, 0, 1];\n group.resetMatrix();\n var bbox;\n // if reaches optimizeThreshold, fitView according to the 4 corner nodes\n var nodes = graph.getNodes();\n if (nodes.length > graph.get('optimizeThreshold')) {\n var minX_2 = Infinity;\n var minY_2 = Infinity;\n var maxX_2 = -Infinity;\n var maxY_2 = -Infinity;\n nodes.forEach(function (node) {\n var _a = node.getModel(),\n x = _a.x,\n y = _a.y;\n if (minX_2 > x) minX_2 = x;\n if (minY_2 > y) minY_2 = y;\n if (maxX_2 < x) maxX_2 = x;\n if (maxY_2 < y) maxY_2 = y;\n });\n bbox = {\n minX: minX_2,\n maxX: maxX_2,\n minY: minY_2,\n maxY: maxY_2,\n width: maxX_2 - minX_2,\n height: maxY_2 - minY_2,\n x: minX_2,\n y: minY_2\n };\n } else {\n bbox = group.getCanvasBBox();\n }\n if (bbox.width === 0 || bbox.height === 0) return;\n var viewCenter = this.getViewCenter();\n var groupCenter = {\n x: bbox.x + bbox.width / 2,\n y: bbox.y + bbox.height / 2\n };\n // Compute ratio\n var w = (width - padding[1] - padding[3]) / bbox.width;\n var h = (height - padding[0] - padding[2]) / bbox.height;\n var ratio = w;\n if (w > h) {\n ratio = h;\n }\n if (animate) {\n this.animatedFitView(group, startMatrix, animateCfg, bbox, viewCenter, groupCenter, ratio, true);\n } else {\n var dx = viewCenter.x - groupCenter.x;\n var dy = viewCenter.y - groupCenter.y;\n if (Object(_util_base__WEBPACK_IMPORTED_MODULE_2__[\"isNaN\"])(dx) || Object(_util_base__WEBPACK_IMPORTED_MODULE_2__[\"isNaN\"])(dy)) return;\n graph.translate(dx, dy);\n if (!graph.zoom(ratio, viewCenter)) {\n console.warn('zoom failed, ratio out of range, ratio: %f', ratio);\n }\n }\n };\n // fit view graph by rule\n ViewController.prototype.fitViewByRules = function (rules, animate, animateCfg) {\n var _a = rules.onlyOutOfViewPort,\n onlyOutOfViewPort = _a === void 0 ? false : _a,\n _b = rules.direction,\n direction = _b === void 0 ? 'both' : _b,\n _c = rules.ratioRule,\n ratioRule = _c === void 0 ? 'min' : _c;\n var graph = this.graph;\n var padding = this.getFormatPadding();\n var width = graph.get('width');\n var height = graph.get('height');\n var group = graph.get('group');\n var startMatrix = group.getMatrix() || [1, 0, 0, 0, 1, 0, 0, 0, 1];\n group.resetMatrix();\n var bbox;\n // if reaches optimizeThreshold, fitView according to the 4 corner nodes\n var nodes = graph.getNodes();\n if (nodes.length > graph.get('optimizeThreshold')) {\n var minX_3 = Infinity;\n var minY_3 = Infinity;\n var maxX_3 = -Infinity;\n var maxY_3 = -Infinity;\n nodes.forEach(function (node) {\n var _a = node.getModel(),\n x = _a.x,\n y = _a.y;\n if (minX_3 > x) minX_3 = x;\n if (minY_3 > y) minY_3 = y;\n if (maxX_3 < x) maxX_3 = x;\n if (maxY_3 < y) maxY_3 = y;\n });\n bbox = {\n minX: minX_3,\n maxX: maxX_3,\n minY: minY_3,\n maxY: maxY_3,\n width: maxX_3 - minX_3,\n height: maxY_3 - minY_3,\n x: minX_3,\n y: minY_3\n };\n } else {\n bbox = group.getCanvasBBox();\n }\n if (bbox.width === 0 || bbox.height === 0) return;\n var viewCenter = this.getViewCenter();\n var groupCenter = {\n x: bbox.x + bbox.width / 2,\n y: bbox.y + bbox.height / 2\n };\n // Compute ratio\n var wRatio = (width - padding[1] - padding[3]) / bbox.width;\n var hRatio = (height - padding[0] - padding[2]) / bbox.height;\n var ratio;\n if (direction === 'x') {\n ratio = wRatio;\n } else if (direction === 'y') {\n ratio = hRatio;\n } else {\n // ratioRule\n ratio = ratioRule === 'max' ? Math.max(wRatio, hRatio) : Math.min(wRatio, hRatio);\n }\n // 如果设置了仅对超出视口宽高的场景进行fitview,则没超出的场景zoom取1\n if (onlyOutOfViewPort) {\n ratio = ratio < 1 ? ratio : 1;\n }\n if (animate) {\n this.animatedFitView(group, startMatrix, animateCfg, bbox, viewCenter, groupCenter, ratio, true);\n } else {\n var initZoomRatio = graph.getZoom();\n var endZoom = initZoomRatio * ratio;\n var minZoom = graph.get('minZoom');\n // 如果zoom小于最小zoom, 则以最小zoom为准\n if (endZoom < minZoom) {\n endZoom = minZoom;\n console.warn('fitview failed, ratio out of range, ratio: %f', ratio, 'graph minzoom has been used instead');\n }\n graph.translate(viewCenter.x - groupCenter.x, viewCenter.y - groupCenter.y);\n graph.zoomTo(endZoom, viewCenter);\n }\n };\n ViewController.prototype.getFormatPadding = function () {\n var padding = this.graph.get('fitViewPadding');\n return Object(_util_base__WEBPACK_IMPORTED_MODULE_2__[\"formatPadding\"])(padding);\n };\n ViewController.prototype.focusPoint = function (point, animate, animateCfg) {\n var _this = this;\n var viewCenter = this.getViewCenter();\n var modelCenter = this.getPointByCanvas(viewCenter.x, viewCenter.y);\n var viewportMatrix = this.graph.get('group').getMatrix();\n if (!viewportMatrix) viewportMatrix = [1, 0, 0, 0, 1, 0, 0, 0, 1];\n if (animate) {\n var dx_1 = (modelCenter.x - point.x) * viewportMatrix[0];\n var dy_1 = (modelCenter.y - point.y) * viewportMatrix[4];\n var lastX_1 = 0;\n var lastY_1 = 0;\n var newX_1 = 0;\n var newY_1 = 0;\n // 动画每次平移一点,直到目标位置\n this.graph.get('canvas').animate(function (ratio) {\n newX_1 = dx_1 * ratio;\n newY_1 = dy_1 * ratio;\n _this.graph.translate(newX_1 - lastX_1, newY_1 - lastY_1);\n lastX_1 = newX_1;\n lastY_1 = newY_1;\n }, Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__assign\"])({}, animateCfg));\n } else {\n this.graph.translate((modelCenter.x - point.x) * viewportMatrix[0], (modelCenter.y - point.y) * viewportMatrix[4]);\n }\n };\n /**\n * 将 Canvas 坐标转成视口坐标\n * @param canvasX canvas x 坐标\n * @param canvasY canvas y 坐标\n */\n ViewController.prototype.getPointByCanvas = function (canvasX, canvasY) {\n var viewportMatrix = this.graph.get('group').getMatrix();\n if (!viewportMatrix) {\n viewportMatrix = [1, 0, 0, 0, 1, 0, 0, 0, 1];\n }\n var point = Object(_util_math__WEBPACK_IMPORTED_MODULE_3__[\"invertMatrix\"])({\n x: canvasX,\n y: canvasY\n }, viewportMatrix);\n return point;\n };\n /**\n * 将页面坐标转成视口坐标\n * @param clientX 页面 x 坐标\n * @param clientY 页面 y 坐标\n */\n ViewController.prototype.getPointByClient = function (clientX, clientY) {\n var canvas = this.graph.get('canvas');\n var canvasPoint = canvas.getPointByClient(clientX, clientY);\n return this.getPointByCanvas(canvasPoint.x, canvasPoint.y);\n };\n /**\n * 将视口坐标转成页面坐标\n * @param x 视口 x 坐标\n * @param y 视口 y 坐标\n */\n ViewController.prototype.getClientByPoint = function (x, y) {\n var canvas = this.graph.get('canvas');\n var canvasPoint = this.getCanvasByPoint(x, y);\n var point = canvas.getClientByPoint(canvasPoint.x, canvasPoint.y);\n return {\n x: point.x,\n y: point.y\n };\n };\n /**\n * 将视口坐标转成 Canvas 坐标\n * @param x 视口 x 坐标\n * @param y 视口 y 坐标\n */\n ViewController.prototype.getCanvasByPoint = function (x, y) {\n var viewportMatrix = this.graph.get('group').getMatrix();\n if (!viewportMatrix) {\n viewportMatrix = [1, 0, 0, 0, 1, 0, 0, 0, 1];\n }\n return Object(_util_math__WEBPACK_IMPORTED_MODULE_3__[\"applyMatrix\"])({\n x: x,\n y: y\n }, viewportMatrix);\n };\n /**\n * 将元素移动到画布中心\n * @param item Item 实例或 id\n * @param {boolean} animate 是否带有动画地移动\n * @param {GraphAnimateConfig} animateCfg 若带有动画,动画的配置项\n */\n ViewController.prototype.focus = function (item, animate, animateCfg) {\n if (Object(_antv_util__WEBPACK_IMPORTED_MODULE_1__[\"isString\"])(item)) {\n item = this.graph.findById(item);\n }\n if (item) {\n var x = 0,\n y = 0;\n if (item.getType && item.getType() === 'edge') {\n var sourceMatrix = item.getSource().get('group').getMatrix();\n var targetMatrix = item.getTarget().get('group').getMatrix();\n if (sourceMatrix && targetMatrix) {\n x = (sourceMatrix[6] + targetMatrix[6]) / 2;\n y = (sourceMatrix[7] + targetMatrix[7]) / 2;\n } else if (sourceMatrix || targetMatrix) {\n x = sourceMatrix ? sourceMatrix[6] : targetMatrix[6];\n y = sourceMatrix ? sourceMatrix[7] : targetMatrix[7];\n }\n } else {\n var group = item.get('group');\n var matrix = group.getMatrix();\n if (!matrix) matrix = [1, 0, 0, 0, 1, 0, 0, 0, 1];\n x = matrix[6];\n y = matrix[7];\n }\n // 用实际位置而不是model中的x,y,防止由于拖拽等的交互导致model的x,y并不是当前的x,y\n this.focusPoint({\n x: x,\n y: y\n }, animate, animateCfg);\n }\n };\n ViewController.prototype.focusItems = function (items, zoomToFit, animate, animateCfg) {\n if (!items.length) {\n return;\n }\n var graph = this.graph;\n var padding = this.getFormatPadding();\n var width = graph.get('width');\n var height = graph.get('height');\n var group = graph.get('group');\n var startMatrix = group.getMatrix() || [1, 0, 0, 0, 1, 0, 0, 0, 1];\n group.resetMatrix();\n var bbox = {\n x: 0,\n y: 0,\n minX: Number.MAX_SAFE_INTEGER,\n minY: Number.MAX_SAFE_INTEGER,\n maxX: Number.MIN_SAFE_INTEGER,\n maxY: Number.MIN_SAFE_INTEGER,\n width: 0,\n height: 0\n };\n for (var _i = 0, items_1 = items; _i < items_1.length; _i++) {\n var item = items_1[_i];\n var itemBBox = item.getBBox();\n if (itemBBox.minX < bbox.minX) {\n bbox.minX = itemBBox.minX;\n }\n if (itemBBox.minY < bbox.minY) {\n bbox.minY = itemBBox.minY;\n }\n if (itemBBox.maxX > bbox.maxX) {\n bbox.maxX = itemBBox.maxX;\n }\n if (itemBBox.maxY > bbox.maxY) {\n bbox.maxY = itemBBox.maxY;\n }\n }\n bbox.x = bbox.minX;\n bbox.y = bbox.minY;\n bbox.width = bbox.maxX - bbox.minX;\n bbox.height = bbox.maxY - bbox.minY;\n if (bbox.width === 0 || bbox.height === 0) return;\n var viewCenter = this.getViewCenter();\n var groupCenter = {\n x: bbox.x + bbox.width / 2,\n y: bbox.y + bbox.height / 2\n };\n // Compute ratio\n var w = (width - padding[1] - padding[3]) / bbox.width;\n var h = (height - padding[0] - padding[2]) / bbox.height;\n var ratio = w;\n if (w > h) {\n ratio = h;\n }\n if (animate) {\n this.animatedFitView(group, startMatrix, animateCfg, bbox, viewCenter, groupCenter, ratio, zoomToFit);\n } else {\n graph.translate(viewCenter.x - groupCenter.x, viewCenter.y - groupCenter.y);\n if (zoomToFit && !graph.zoom(ratio, viewCenter)) {\n console.warn('zoom failed, ratio out of range, ratio: %f', ratio);\n }\n }\n };\n /**\n * 改变 canvas 画布的宽度和高度\n * @param width canvas 宽度\n * @param height canvas 高度\n */\n ViewController.prototype.changeSize = function (width, height) {\n var graph = this.graph;\n if (!Object(_antv_util__WEBPACK_IMPORTED_MODULE_1__[\"isNumber\"])(width) || !Object(_antv_util__WEBPACK_IMPORTED_MODULE_1__[\"isNumber\"])(height)) {\n throw Error('invalid canvas width & height, please make sure width & height type is number');\n }\n graph.set({\n width: width,\n height: height\n });\n var canvas = graph.get('canvas');\n canvas.changeSize(width, height);\n // change the size of grid plugin if it exists on graph\n var plugins = graph.get('plugins');\n plugins.forEach(function (plugin) {\n if (plugin.get('gridContainer')) {\n // 网格定位信息初始化\n plugin.positionInit();\n }\n });\n };\n ViewController.prototype.destroy = function () {\n this.graph = null;\n this.destroyed = false;\n };\n return ViewController;\n}();\n/* harmony default export */ __webpack_exports__[\"default\"] = (ViewController);\n\n//# sourceURL=webpack:///./node_modules/@antv/g6-core/es/graph/controller/view.js?");
/***/ }),
/***/ "./node_modules/@antv/g6-core/es/graph/graph.js":
/*!******************************************************!*\
!*** ./node_modules/@antv/g6-core/es/graph/graph.js ***!
\******************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tslib */ \"./node_modules/tslib/tslib.es6.js\");\n/* harmony import */ var _antv_event_emitter__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @antv/event-emitter */ \"./node_modules/@antv/event-emitter/esm/index.js\");\n/* harmony import */ var _antv_matrix_util__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @antv/matrix-util */ \"./node_modules/@antv/matrix-util/esm/index.js\");\n/* harmony import */ var _antv_util__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @antv/util */ \"./node_modules/@antv/util/esm/index.js\");\n/* harmony import */ var _antv_algorithm__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @antv/algorithm */ \"./node_modules/@antv/algorithm/es/index.js\");\n/* harmony import */ var _util_math__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../util/math */ \"./node_modules/@antv/g6-core/es/util/math.js\");\n/* harmony import */ var _util_validation__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../util/validation */ \"./node_modules/@antv/g6-core/es/util/validation.js\");\n/* harmony import */ var _global__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../global */ \"./node_modules/@antv/g6-core/es/global.js\");\n/* harmony import */ var _controller__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./controller */ \"./node_modules/@antv/g6-core/es/graph/controller/index.js\");\n/* harmony import */ var _util_graphic__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../util/graphic */ \"./node_modules/@antv/g6-core/es/util/graphic.js\");\n/* harmony import */ var _item_hull__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../item/hull */ \"./node_modules/@antv/g6-core/es/item/hull.js\");\n\n\n\n\n\n\n\n\n\n\n\nvar transform = _antv_matrix_util__WEBPACK_IMPORTED_MODULE_2__[\"ext\"].transform;\nvar NODE = 'node';\nvar AbstractGraph = /** @class */function (_super) {\n Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__extends\"])(AbstractGraph, _super);\n function AbstractGraph(cfg) {\n var _this = _super.call(this) || this;\n /**\n * 根据 comboTree 结构整理 Combo 相关的图形绘制层级,包括 Combo 本身、节点、边\n * @param {GraphData} data 数据\n */\n _this.sortCombos = Object(_antv_util__WEBPACK_IMPORTED_MODULE_3__[\"debounce\"])(function () {\n var comboSorted = _this.get('comboSorted');\n if (!_this || _this.destroyed || comboSorted) return;\n _this.set('comboSorted', true);\n var depthMap = [];\n var dataDepthMap = {};\n var comboTrees = _this.get('comboTrees');\n (comboTrees || []).forEach(function (cTree) {\n Object(_util_graphic__WEBPACK_IMPORTED_MODULE_9__[\"traverseTree\"])(cTree, function (child) {\n if (depthMap[child.depth]) depthMap[child.depth].push(child.id);else depthMap[child.depth] = [child.id];\n dataDepthMap[child.id] = child.depth;\n return true;\n });\n });\n var edges = _this.getEdges().concat(_this.get('vedges'));\n (edges || []).forEach(function (edgeItem) {\n var edge = edgeItem.getModel();\n var sourceDepth = dataDepthMap[edge.source] || 0;\n var targetDepth = dataDepthMap[edge.target] || 0;\n var depth = Math.max(sourceDepth, targetDepth);\n if (depthMap[depth]) depthMap[depth].push(edge.id);else depthMap[depth] = [edge.id];\n });\n depthMap.forEach(function (array) {\n if (!array || !array.length) return;\n for (var i = array.length - 1; i >= 0; i--) {\n var item = _this.findById(array[i]);\n if (item) item.toFront();\n }\n });\n }, 500, false);\n _this.cfg = Object(_antv_util__WEBPACK_IMPORTED_MODULE_3__[\"deepMix\"])(_this.getDefaultCfg(), cfg);\n _this.init();\n _this.animating = false;\n _this.destroyed = false;\n // 启用 stack 后,实例化 undoStack 和 redoStack\n if (_this.cfg.enabledStack) {\n // 实例化 undo 和 redo 栈\n _this.undoStack = new _antv_algorithm__WEBPACK_IMPORTED_MODULE_4__[\"Stack\"](_this.cfg.maxStep);\n _this.redoStack = new _antv_algorithm__WEBPACK_IMPORTED_MODULE_4__[\"Stack\"](_this.cfg.maxStep);\n }\n return _this;\n }\n AbstractGraph.prototype.init = function () {\n this.initCanvas();\n // instance controller\n var viewController = new _controller__WEBPACK_IMPORTED_MODULE_8__[\"ViewController\"](this);\n var modeController = new _controller__WEBPACK_IMPORTED_MODULE_8__[\"ModeController\"](this);\n var itemController = new _controller__WEBPACK_IMPORTED_MODULE_8__[\"ItemController\"](this);\n var stateController = new _controller__WEBPACK_IMPORTED_MODULE_8__[\"StateController\"](this);\n this.set({\n viewController: viewController,\n modeController: modeController,\n itemController: itemController,\n stateController: stateController\n });\n // 初始化布局机制\n this.initLayoutController();\n // 初始化事件机制\n this.initEventController();\n this.initGroups();\n /** 初始化插件 */\n this.initPlugins();\n };\n // 初始化所有 Group\n AbstractGraph.prototype.initGroups = function () {\n var canvas = this.get('canvas');\n if (!canvas) return;\n var el = canvas.get('el');\n var _a = (el || {}).id,\n id = _a === void 0 ? 'g6' : _a;\n var group = canvas.addGroup({\n id: \"\".concat(id, \"-root\"),\n className: _global__WEBPACK_IMPORTED_MODULE_7__[\"default\"].rootContainerClassName\n });\n if (this.get('groupByTypes')) {\n var edgeGroup = group.addGroup({\n id: \"\".concat(id, \"-edge\"),\n className: _global__WEBPACK_IMPORTED_MODULE_7__[\"default\"].edgeContainerClassName\n });\n var nodeGroup = group.addGroup({\n id: \"\".concat(id, \"-node\"),\n className: _global__WEBPACK_IMPORTED_MODULE_7__[\"default\"].nodeContainerClassName\n });\n var comboGroup = group.addGroup({\n id: \"\".concat(id, \"-combo\"),\n className: _global__WEBPACK_IMPORTED_MODULE_7__[\"default\"].comboContainerClassName\n });\n // 用于存储自定义的群组\n comboGroup.toBack();\n this.set({\n nodeGroup: nodeGroup,\n edgeGroup: edgeGroup,\n comboGroup: comboGroup\n });\n }\n var delegateGroup = group.addGroup({\n id: \"\".concat(id, \"-delegate\"),\n className: _global__WEBPACK_IMPORTED_MODULE_7__[\"default\"].delegateContainerClassName\n });\n this.set({\n delegateGroup: delegateGroup\n });\n this.set('group', group);\n };\n // eslint-disable-next-line class-methods-use-this\n AbstractGraph.prototype.getDefaultCfg = function () {\n return {\n /**\n * Container could be dom object or dom id\n */\n container: undefined,\n /**\n * Canvas width\n * unit pixel if undefined force fit width\n */\n width: undefined,\n /**\n * Canvas height\n * unit pixel if undefined force fit height\n */\n height: undefined,\n /**\n * renderer canvas or svg\n * @type {string}\n */\n renderer: 'canvas',\n /**\n * control graph behaviors\n */\n modes: {},\n /**\n * 注册插件\n */\n plugins: [],\n /**\n * source data\n */\n data: {},\n /**\n * Fit view padding (client scale)\n */\n fitViewPadding: 10,\n /**\n * Minimum scale size\n */\n minZoom: 0.02,\n /**\n * Maxmum scale size\n */\n maxZoom: 10,\n /**\n * capture events\n */\n event: true,\n /**\n * group node & edges into different graphic groups\n */\n groupByTypes: true,\n /**\n * determine if it's a directed graph\n */\n directed: false,\n /**\n * when data or shape changed, should canvas draw automatically\n */\n autoPaint: true,\n /**\n * store all the node instances\n */\n nodes: [],\n /**\n * store all the edge instances\n */\n edges: [],\n /**\n * store all the combo instances\n */\n combos: [],\n /**\n * store all the edge instances which are virtual edges related to collapsed combo\n */\n vedges: [],\n /**\n * all the instances indexed by id\n */\n itemMap: {},\n /**\n * 边直接连接到节点的中心,不再考虑锚点\n */\n linkCenter: false,\n /**\n * 默认的节点配置,data 上定义的配置会覆盖这些配置。例如:\n * defaultNode: {\n * type: 'rect',\n * size: [60, 40],\n * style: {\n * //... 样式配置项\n * }\n * }\n * 若数据项为 { id: 'node', x: 100, y: 100 }\n * 实际创建的节点模型是 { id: 'node', x: 100, y: 100, type: 'rect', size: [60, 40] }\n * 若数据项为 { id: 'node', x: 100, y: 100, type: 'circle' }\n * 实际创建的节点模型是 { id: 'node', x: 100, y: 100, type: 'circle', size: [60, 40] }\n */\n defaultNode: {},\n /**\n * 默认边配置,data 上定义的配置会覆盖这些配置。用法同 defaultNode\n */\n defaultEdge: {},\n /**\n * 节点默认样式,也可以添加状态样式\n * 例如:\n * const graph = new G6.Graph({\n * nodeStateStyles: {\n * selected: { fill: '#ccc', stroke: '#666' },\n * active: { lineWidth: 2 }\n * },\n * ...\n * });\n *\n */\n nodeStateStyles: {},\n /**\n * 边默认样式,用法同nodeStateStyle\n */\n edgeStateStyles: {},\n /**\n * graph 状态\n */\n states: {},\n /**\n * 是否启用全局动画\n */\n animate: false,\n /**\n * 动画设置,仅在 animate 为 true 时有效\n */\n animateCfg: {\n /**\n * 帧回调函数,用于自定义节点运动路径,为空时线性运动\n */\n onFrame: undefined,\n /**\n * 动画时长(ms)\n */\n duration: 500,\n /**\n * 指定动画动效\n */\n easing: 'easeLinear'\n },\n callback: undefined,\n // 默认不启用 undo & redo 功能\n enabledStack: false,\n // 只有当 enabledStack 为 true 时才起作用\n maxStep: 10,\n // 存储图上的 tooltip dom,方便销毁\n tooltips: [],\n // 达到这一节点数量(默认值 1000),将开启性能优化模式。目前包括:节点状态样式变更是否影响相关边的更新\n optimizeThreshold: 1000\n };\n };\n /**\n * 将值设置到 this.cfg 变量上面\n * @param key 键 或 对象值\n * @param val 值\n */\n AbstractGraph.prototype.set = function (key, val) {\n if (Object(_antv_util__WEBPACK_IMPORTED_MODULE_3__[\"isPlainObject\"])(key)) {\n this.cfg = Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__assign\"])(Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__assign\"])({}, this.cfg), key);\n } else {\n this.cfg[key] = val;\n }\n if (key === 'enabledStack' && val && !this.undoStack && !this.redoStack) {\n this.undoStack = new _antv_algorithm__WEBPACK_IMPORTED_MODULE_4__[\"Stack\"](this.cfg.maxStep);\n this.redoStack = new _antv_algorithm__WEBPACK_IMPORTED_MODULE_4__[\"Stack\"](this.cfg.maxStep);\n }\n return this;\n };\n /**\n * 获取 this.cfg 中的值\n * @param key 键\n */\n AbstractGraph.prototype.get = function (key) {\n var _a;\n return (_a = this.cfg) === null || _a === void 0 ? void 0 : _a[key];\n };\n /**\n * 获取 graph 的根图形分组\n * @return 根 group\n */\n AbstractGraph.prototype.getGroup = function () {\n return this.get('group');\n };\n /**\n * 获取 graph 的 DOM 容器\n * @return DOM 容器\n */\n AbstractGraph.prototype.getContainer = function () {\n return this.get('container');\n };\n /**\n * 获取 graph 的最小缩放比例\n * @return minZoom\n */\n AbstractGraph.prototype.getMinZoom = function () {\n return this.get('minZoom');\n };\n /**\n * 设置 graph 的最小缩放比例\n * @return minZoom\n */\n AbstractGraph.prototype.setMinZoom = function (ratio) {\n return this.set('minZoom', ratio);\n };\n /**\n * 获取 graph 的最大缩放比例\n * @param maxZoom\n */\n AbstractGraph.prototype.getMaxZoom = function () {\n return this.get('maxZoom');\n };\n /**\n * 设置 graph 的最大缩放比例\n * @param maxZoom\n */\n AbstractGraph.prototype.setMaxZoom = function (ratio) {\n return this.set('maxZoom', ratio);\n };\n /**\n * 获取 graph 的宽度\n * @return width\n */\n AbstractGraph.prototype.getWidth = function () {\n return this.get('width');\n };\n /**\n * 获取 graph 的高度\n * @return width\n */\n AbstractGraph.prototype.getHeight = function () {\n return this.get('height');\n };\n /**\n * 清理元素多个状态\n * @param {string|Item} item 元素id或元素实例\n * @param {string[]} states 状态\n */\n AbstractGraph.prototype.clearItemStates = function (item, states) {\n if (Object(_antv_util__WEBPACK_IMPORTED_MODULE_3__[\"isString\"])(item)) {\n item = this.findById(item);\n }\n var itemController = this.get('itemController');\n if (!states) {\n states = item.get('states');\n }\n itemController.clearItemStates(item, states);\n var stateController = this.get('stateController');\n stateController.updateStates(item, states, false);\n };\n /**\n * 设置各个节点样式,以及在各种状态下节点 keyShape 的样式。\n * 若是自定义节点切在各种状态下\n * graph.node(node => {\n * return {\n * type: 'rect',\n * label: node.id,\n * style: { fill: '#666' },\n * stateStyles: {\n * selected: { fill: 'blue' },\n * custom: { fill: 'green' }\n * }\n * }\n * });\n * @param {function} nodeFn 指定每个节点样式\n */\n AbstractGraph.prototype.node = function (nodeFn) {\n if (typeof nodeFn === 'function') {\n this.set('nodeMapper', nodeFn);\n }\n };\n /**\n * 设置各个边样式\n * @param {function} edgeFn 指定每个边的样式,用法同 node\n */\n AbstractGraph.prototype.edge = function (edgeFn) {\n if (typeof edgeFn === 'function') {\n this.set('edgeMapper', edgeFn);\n }\n };\n /**\n * 设置各个 combo 的配置\n * @param comboFn\n */\n AbstractGraph.prototype.combo = function (comboFn) {\n if (typeof comboFn === 'function') {\n this.set('comboMapper', comboFn);\n }\n };\n /**\n * 根据 ID 查询图元素实例\n * @param id 图元素 ID\n */\n AbstractGraph.prototype.findById = function (id) {\n return this.get('itemMap')[id];\n };\n /**\n * 根据对应规则查找单个元素\n * @param {ITEM_TYPE} type 元素类型(node | edge | group)\n * @param {(item: T, index: number) => T} fn 指定规则\n * @return {T} 元素实例\n */\n AbstractGraph.prototype.find = function (type, fn) {\n var result;\n var items = this.get(\"\".concat(type, \"s\"));\n // eslint-disable-next-line consistent-return\n Object(_antv_util__WEBPACK_IMPORTED_MODULE_3__[\"each\"])(items, function (item, i) {\n if (fn(item, i)) {\n result = item;\n return result;\n }\n });\n return result;\n };\n /**\n * 查找所有满足规则的元素\n * @param {string} type 元素类型(node|edge)\n * @param {string} fn 指定规则\n * @return {array} 元素实例\n */\n AbstractGraph.prototype.findAll = function (type, fn) {\n var result = [];\n Object(_antv_util__WEBPACK_IMPORTED_MODULE_3__[\"each\"])(this.get(\"\".concat(type, \"s\")), function (item, i) {\n if (fn(item, i)) {\n result.push(item);\n }\n });\n return result;\n };\n /**\n * 查找所有处于指定状态的元素\n * @param {string} type 元素类型(node|edge)\n * @param {string} state 状态\n * @return {object} 元素实例\n */\n AbstractGraph.prototype.findAllByState = function (type, state, additionalFilter) {\n if (additionalFilter) {\n return this.findAll(type, function (item) {\n return item.hasState(state) && additionalFilter(item);\n });\n } else {\n return this.findAll(type, function (item) {\n return item.hasState(state);\n });\n }\n };\n /**\n * 平移画布\n * @param dx 水平方向位移\n * @param dy 垂直方向位移\n * @param {boolean} animate 是否带有动画地移动\n * @param {GraphAnimateConfig} animateCfg 若带有动画,动画的配置项\n */\n AbstractGraph.prototype.translate = function (dx, dy, animate, animateCfg) {\n var _this = this;\n var group = this.get('group');\n var matrix = Object(_antv_util__WEBPACK_IMPORTED_MODULE_3__[\"clone\"])(group.getMatrix());\n if (!matrix) {\n matrix = [1, 0, 0, 0, 1, 0, 0, 0, 1];\n }\n if (animate) {\n var animateConfig = Object(_util_graphic__WEBPACK_IMPORTED_MODULE_9__[\"getAnimateCfgWithCallback\"])({\n animateCfg: animateCfg,\n callback: function callback() {\n return _this.emit('viewportchange', {\n action: 'translate',\n matrix: group.getMatrix()\n });\n }\n });\n Object(_util_math__WEBPACK_IMPORTED_MODULE_5__[\"move\"])(group, {\n x: group.getCanvasBBox().x + dx,\n y: group.getCanvasBBox().y + dy\n }, animate, animateConfig || {\n duration: 500,\n easing: 'easeCubic'\n });\n } else {\n matrix = transform(matrix, [['t', dx, dy]]);\n group.setMatrix(matrix);\n this.emit('viewportchange', {\n action: 'translate',\n matrix: matrix\n });\n this.autoPaint();\n }\n };\n /**\n * 平移画布到某点\n * @param {number} x 水平坐标\n * @param {number} y 垂直坐标\n * @param {boolean} animate 是否带有动画地移动\n * @param {GraphAnimateConfig} animateCfg 若带有动画,动画的配置项\n */\n AbstractGraph.prototype.moveTo = function (x, y, animate, animateCfg) {\n var group = this.get('group');\n Object(_util_math__WEBPACK_IMPORTED_MODULE_5__[\"move\"])(group, {\n x: x,\n y: y\n }, animate, animateCfg || {\n duration: 500,\n easing: 'easeCubic'\n });\n this.emit('viewportchange', {\n action: 'move',\n matrix: group.getMatrix()\n });\n };\n /**\n * 调整视口适应视图\n * @param {object} padding 四周围边距\n * @param {FitViewRules} rules fitView的规则\n * @param {boolean} animate 是否带有动画地移动\n * @param {GraphAnimateConfig} animateCfg 若带有动画,动画的配置项\n */\n AbstractGraph.prototype.fitView = function (padding, rules, animate, animateCfg) {\n if (padding) {\n this.set('fitViewPadding', padding);\n }\n var viewController = this.get('viewController');\n if (rules) {\n viewController.fitViewByRules(rules, animate, animateCfg);\n } else {\n viewController.fitView(animate, animateCfg);\n }\n this.autoPaint();\n };\n /**\n * 调整视口适应视图,不缩放,仅将图 bbox 中心对齐到画布中心\n * @param {boolean} animate 是否带有动画地移动\n * @param {GraphAnimateConfig} animateCfg 若带有动画,动画的配置项\n */\n AbstractGraph.prototype.fitCenter = function (animate, animateCfg) {\n var viewController = this.get('viewController');\n viewController.fitCenter(animate, animateCfg);\n this.autoPaint();\n };\n /**\n * 新增行为\n * @param {string | ModeOption | ModeType[]} behaviors 添加的行为\n * @param {string | string[]} modes 添加到对应的模式\n * @return {Graph} Graph\n */\n AbstractGraph.prototype.addBehaviors = function (behaviors, modes) {\n var modeController = this.get('modeController');\n modeController.manipulateBehaviors(behaviors, modes, true);\n return this;\n };\n /**\n * 移除行为\n * @param {string | ModeOption | ModeType[]} behaviors 移除的行为\n * @param {string | string[]} modes 从指定的模式中移除\n * @return {Graph} Graph\n */\n AbstractGraph.prototype.removeBehaviors = function (behaviors, modes) {\n var modeController = this.get('modeController');\n modeController.manipulateBehaviors(behaviors, modes, false);\n return this;\n };\n /**\n * 更新行为参数\n * @param {string | ModeOption | ModeType} behavior 需要更新的行为\n * @param {string | string[]} modes 指定的模式中的行为,不指定则为 default\n * @return {Graph} Graph\n */\n AbstractGraph.prototype.updateBehavior = function (behavior, newCfg, mode) {\n var modeController = this.get('modeController');\n modeController.updateBehavior(behavior, newCfg, mode);\n return this;\n };\n /**\n * 伸缩窗口\n * @param ratio 伸缩比例\n * @param center 以center的x, y坐标为中心缩放\n * @param {boolean} animate 是否带有动画地移动\n * @param {GraphAnimateConfig} animateCfg 若带有动画,动画的配置项\n * @return {boolean} 缩放是否成功\n */\n AbstractGraph.prototype.zoom = function (ratio, center, animate, animateCfg) {\n var _this = this;\n var group = this.get('group');\n var matrix = Object(_antv_util__WEBPACK_IMPORTED_MODULE_3__[\"clone\"])(group.getMatrix()) || [1, 0, 0, 0, 1, 0, 0, 0, 1];\n var minZoom = this.get('minZoom');\n var maxZoom = this.get('maxZoom');\n var currentZoom = this.getZoom() || 1;\n var targetZoom = currentZoom * ratio;\n var finalRatio = ratio;\n var failed = false;\n if (minZoom && targetZoom < minZoom) {\n finalRatio = minZoom / currentZoom;\n failed = true;\n } else if (maxZoom && targetZoom > maxZoom) {\n finalRatio = maxZoom / currentZoom;\n failed = true;\n }\n if (center) {\n matrix = transform(matrix, [['t', -center.x, -center.y], ['s', finalRatio, finalRatio], ['t', center.x, center.y]]);\n } else {\n matrix = transform(matrix, [['s', finalRatio, finalRatio]]);\n }\n if (animate) {\n // Clone the original matrix to perform the animation\n var aniMatrix_1 = Object(_antv_util__WEBPACK_IMPORTED_MODULE_3__[\"clone\"])(group.getMatrix());\n if (!aniMatrix_1) {\n aniMatrix_1 = [1, 0, 0, 0, 1, 0, 0, 0, 1];\n }\n var initialRatio_1 = aniMatrix_1[0];\n var targetRatio_1 = initialRatio_1 * finalRatio;\n var animateConfig = Object(_util_graphic__WEBPACK_IMPORTED_MODULE_9__[\"getAnimateCfgWithCallback\"])({\n animateCfg: animateCfg,\n callback: function callback() {\n return _this.emit('viewportchange', {\n action: 'zoom',\n matrix: group.getMatrix()\n });\n }\n });\n group.animate(function (ratio) {\n if (ratio === 1) {\n // Reuse the first transformation\n aniMatrix_1 = matrix;\n } else {\n var scale = Object(_util_math__WEBPACK_IMPORTED_MODULE_5__[\"lerp\"])(initialRatio_1, targetRatio_1, ratio) / aniMatrix_1[0];\n if (center) {\n aniMatrix_1 = transform(aniMatrix_1, [['t', -center.x, -center.y], ['s', scale, scale], ['t', center.x, center.y]]);\n } else {\n aniMatrix_1 = transform(aniMatrix_1, [['s', scale, scale]]);\n }\n }\n return {\n matrix: aniMatrix_1\n };\n }, animateConfig);\n } else {\n group.setMatrix(matrix);\n this.emit('viewportchange', {\n action: 'zoom',\n matrix: matrix\n });\n this.autoPaint();\n }\n return !failed;\n };\n /**\n * 伸缩视口到一固定比例\n * @param {number} toRatio 伸缩比例\n * @param {Point} center 以center的x, y坐标为中心缩放\n * @param {boolean} animate 是否带有动画地移动\n * @param {GraphAnimateConfig} animateCfg 若带有动画,动画的配置项\n * @return {boolean} 缩放是否成功\n */\n AbstractGraph.prototype.zoomTo = function (toRatio, center, animate, animateCfg) {\n var ratio = toRatio / this.getZoom();\n return this.zoom(ratio, center, animate, animateCfg);\n };\n /**\n * 将元素移动到视口中心\n * @param {Item} item 指定元素\n * @param {boolean} animate 是否带有动画地移动\n * @param {GraphAnimateConfig} animateCfg 若带有动画,动画的配置项\n */\n AbstractGraph.prototype.focusItem = function (item, animate, animateCfg) {\n var viewController = this.get('viewController');\n var isAnimate = false;\n if (animate) isAnimate = true;else if (animate === undefined) isAnimate = this.get('animate');\n var curAniamteCfg = {};\n if (animateCfg) curAniamteCfg = animateCfg;else if (animateCfg === undefined) curAniamteCfg = this.get('animateCfg');\n viewController.focus(item, isAnimate, curAniamteCfg);\n this.autoPaint();\n };\n /**\n * Focus on the passed items\n * @param {Item[]} items Items you want to focus on\n * @param {boolean} zoomToFit Wether to zoom on the passed items\n * @param {boolean} animate Wether to animate the transition\n * @param {GraphAnimateConfig} animateCfg Animation configuration\n */\n AbstractGraph.prototype.focusItems = function (items, zoomToFit, animate, animateCfg) {\n var viewController = this.get('viewController');\n viewController.focusItems(items, zoomToFit, animate, animateCfg);\n };\n /**\n * 自动重绘\n * @internal 仅供内部更新机制调用,外部根据需求调用 render 或 paint 接口\n */\n AbstractGraph.prototype.autoPaint = function () {\n if (this.get('autoPaint')) {\n this.paint();\n }\n };\n /**\n * 仅画布重新绘制\n */\n AbstractGraph.prototype.paint = function () {\n this.emit('beforepaint');\n this.get('canvas').draw();\n this.emit('afterpaint');\n };\n /**\n * 将屏幕坐标转换为视口坐标\n * @param {number} clientX 屏幕x坐标\n * @param {number} clientY 屏幕y坐标\n * @return {Point} 视口坐标\n */\n AbstractGraph.prototype.getPointByClient = function (clientX, clientY) {\n var viewController = this.get('viewController');\n return viewController.getPointByClient(clientX, clientY);\n };\n /**\n * 将绘制坐标转换为屏幕坐标\n * @param {number} x 绘制坐标 x\n * @param {number} y 绘制坐标 y\n * @return {Point} 绘制坐标\n */\n AbstractGraph.prototype.getClientByPoint = function (x, y) {\n var viewController = this.get('viewController');\n return viewController.getClientByPoint(x, y);\n };\n /**\n * 将画布坐标转换为绘制坐标\n * @param {number} canvasX 画布 x 坐标\n * @param {number} canvasY 画布 y 坐标\n * @return {object} 绘制坐标\n */\n AbstractGraph.prototype.getPointByCanvas = function (canvasX, canvasY) {\n var viewController = this.get('viewController');\n return viewController.getPointByCanvas(canvasX, canvasY);\n };\n /**\n * 将绘制坐标转换为画布坐标\n * @param {number} x 绘制坐标 x\n * @param {number} y 绘制坐标 y\n * @return {object} 画布坐标\n */\n AbstractGraph.prototype.getCanvasByPoint = function (x, y) {\n var viewController = this.get('viewController');\n return viewController.getCanvasByPoint(x, y);\n };\n /**\n * 获取图内容的中心绘制坐标\n * @return {object} 中心绘制坐标\n */\n AbstractGraph.prototype.getGraphCenterPoint = function () {\n var bbox = this.get('group').getCanvasBBox();\n return {\n x: (bbox.minX + bbox.maxX) / 2,\n y: (bbox.minY + bbox.maxY) / 2\n };\n };\n /**\n * 获取视口中心绘制坐标\n * @return {object} 视口中心绘制坐标\n */\n AbstractGraph.prototype.getViewPortCenterPoint = function () {\n return this.getPointByCanvas(this.get('width') / 2, this.get('height') / 2);\n };\n /**\n * 显示元素\n * @param {Item} item 指定元素\n * @param {boolean} stack 本次操作是否入栈,默认为 true\n */\n AbstractGraph.prototype.showItem = function (item, stack) {\n if (stack === void 0) {\n stack = true;\n }\n var itemController = this.get('itemController');\n var object = itemController.changeItemVisibility(item, true);\n if (stack && this.get('enabledStack')) {\n var id = object.getID();\n var type = object.getType();\n var before = {};\n var after = {};\n switch (type) {\n case 'node':\n before.nodes = [{\n id: id,\n visible: false\n }];\n after.nodes = [{\n id: id,\n visible: true\n }];\n break;\n case 'edge':\n before.nodes = [{\n id: id,\n visible: false\n }];\n after.edges = [{\n id: id,\n visible: true\n }];\n break;\n case 'combo':\n before.nodes = [{\n id: id,\n visible: false\n }];\n after.combos = [{\n id: id,\n visible: true\n }];\n break;\n default:\n break;\n }\n this.pushStack('visible', {\n before: before,\n after: after\n });\n }\n };\n /**\n * 隐藏元素\n * @param {Item} item 指定元素\n * @param {boolean} stack 本次操作是否入栈,默认为 true\n */\n AbstractGraph.prototype.hideItem = function (item, stack) {\n if (stack === void 0) {\n stack = true;\n }\n var itemController = this.get('itemController');\n var object = itemController.changeItemVisibility(item, false);\n if (stack && this.get('enabledStack')) {\n var id = object.getID();\n var type = object.getType();\n var before = {};\n var after = {};\n switch (type) {\n case 'node':\n before.nodes = [{\n id: id,\n visible: true\n }];\n after.nodes = [{\n id: id,\n visible: false\n }];\n break;\n case 'edge':\n before.nodes = [{\n id: id,\n visible: true\n }];\n after.edges = [{\n id: id,\n visible: false\n }];\n break;\n case 'combo':\n before.nodes = [{\n id: id,\n visible: true\n }];\n after.combos = [{\n id: id,\n visible: false\n }];\n break;\n default:\n break;\n }\n this.pushStack('visible', {\n before: before,\n after: after\n });\n }\n };\n /**\n * 刷新元素\n * @param {string|object} item 元素id或元素实例\n */\n AbstractGraph.prototype.refreshItem = function (item) {\n var itemController = this.get('itemController');\n itemController.refreshItem(item);\n };\n /**\n * 设置是否在更新/刷新后自动重绘\n * @param {boolean} auto 自动重绘\n */\n AbstractGraph.prototype.setAutoPaint = function (auto) {\n var self = this;\n self.set('autoPaint', auto);\n var canvas = self.get('canvas');\n canvas.set('autoDraw', auto);\n };\n /**\n * 删除元素\n * @param {Item} item 元素id或元素实例\n * @param {boolean} stack 本次操作是否入栈,默认为 true\n */\n AbstractGraph.prototype.remove = function (item, stack) {\n if (stack === void 0) {\n stack = true;\n }\n this.removeItem(item, stack);\n };\n /**\n * 删除元素\n * @param {Item} item 元素id或元素实例\n * @param {boolean} stack 本次操作是否入栈,默认为 true\n */\n AbstractGraph.prototype.removeItem = function (item, stack) {\n if (stack === void 0) {\n stack = true;\n }\n var nodeItem = item;\n if (Object(_antv_util__WEBPACK_IMPORTED_MODULE_3__[\"isString\"])(item)) nodeItem = this.findById(item);\n if (!nodeItem && Object(_antv_util__WEBPACK_IMPORTED_MODULE_3__[\"isString\"])(item)) {\n console.warn(\"The item \".concat(item, \" to be removed does not exist!\"));\n } else if (nodeItem) {\n var type = '';\n if (nodeItem.getType) type = nodeItem.getType();\n // 将删除的元素入栈\n if (stack && this.get('enabledStack')) {\n var deletedModel = Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__assign\"])(Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__assign\"])({}, nodeItem.getModel()), {\n itemType: type\n });\n var before = {};\n switch (type) {\n case 'node':\n {\n before.nodes = [deletedModel];\n before.edges = [];\n var edges = nodeItem.getEdges();\n for (var i = edges.length - 1; i >= 0; i--) {\n before.edges.push(Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__assign\"])(Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__assign\"])({}, edges[i].getModel()), {\n itemType: 'edge'\n }));\n }\n break;\n }\n case 'edge':\n before.edges = [deletedModel];\n break;\n case 'combo':\n before.combos = [deletedModel];\n break;\n default:\n break;\n }\n this.pushStack('delete', {\n before: before,\n after: {}\n });\n }\n if (type === 'node') {\n var model = nodeItem.getModel();\n // 如果删除的是节点,且该节点存在于某个 Combo 中,则需要先将 node 从 combo 中移除,否则删除节点后,操作 combo 会出错\n if (model.comboId) {\n this.updateComboTree(nodeItem, undefined, false);\n }\n }\n var itemController = this.get('itemController');\n itemController.removeItem(nodeItem);\n if (type === 'combo') {\n var newComboTrees = Object(_util_graphic__WEBPACK_IMPORTED_MODULE_9__[\"reconstructTree\"])(this.get('comboTrees'));\n this.set('comboTrees', newComboTrees);\n }\n }\n };\n AbstractGraph.prototype.innerAddItem = function (type, model, itemController) {\n // 添加节点、边或combo之前,先验证数据是否符合规范\n if (!Object(_util_validation__WEBPACK_IMPORTED_MODULE_6__[\"singleDataValidation\"])(type, model)) {\n return false;\n }\n if (model.id && this.findById(model.id)) {\n console.warn(\"This item exists already. Be sure the id %c\".concat(model.id, \"%c is unique.\"), 'font-size: 20px; color: red;', '');\n return;\n }\n var item;\n var comboTrees = this.get('comboTrees') || [];\n if (type === 'combo') {\n var itemMap_1 = this.get('itemMap');\n var foundParent_1 = false;\n comboTrees.forEach(function (ctree) {\n if (foundParent_1) return; // terminate the forEach after the tree containing the item is done\n Object(_util_graphic__WEBPACK_IMPORTED_MODULE_9__[\"traverseTreeUp\"])(ctree, function (child) {\n // find the parent\n if (model.parentId === child.id) {\n foundParent_1 = true;\n var newCombo = Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__assign\"])({\n id: model.id,\n depth: child.depth + 2\n }, model);\n if (child.children) child.children.push(newCombo);else child.children = [newCombo];\n model.depth = newCombo.depth;\n item = itemController.addItem(type, model);\n }\n var childItem = itemMap_1[child.id];\n // after the parent is found, update all the ancestors\n if (foundParent_1 && childItem && childItem.getType && childItem.getType() === 'combo') {\n itemController.updateCombo(childItem, child.children);\n }\n return true;\n });\n });\n // if the parent is not found, add it to the root\n if (!foundParent_1) {\n var newCombo = Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__assign\"])({\n id: model.id,\n depth: 0\n }, model);\n model.depth = newCombo.depth;\n comboTrees.push(newCombo);\n item = itemController.addItem(type, model);\n }\n this.set('comboTrees', comboTrees);\n if (model.collapsed) {\n this.collapseCombo(item, false);\n this.updateCombo(item);\n }\n } else if (type === 'node' && Object(_antv_util__WEBPACK_IMPORTED_MODULE_3__[\"isString\"])(model.comboId) && comboTrees) {\n var parentCombo = this.findById(model.comboId);\n if (parentCombo && parentCombo.getType && parentCombo.getType() !== 'combo') {\n console.warn(\"'\".concat(model.comboId, \"' is not a id of a combo in the graph, the node will be added without combo.\"));\n }\n item = itemController.addItem(type, model);\n var itemMap_2 = this.get('itemMap');\n var foundParent_2 = false,\n foundNode_1 = false;\n comboTrees.forEach(function (ctree) {\n if (foundNode_1 || foundParent_2) return; // terminate the forEach\n Object(_util_graphic__WEBPACK_IMPORTED_MODULE_9__[\"traverseTreeUp\"])(ctree, function (child) {\n if (child.id === model.id) {\n // if the item exists in the tree already, terminate\n foundNode_1 = true;\n return false;\n }\n if (model.comboId === child.id && !foundNode_1) {\n // found the parent, add the item to the children of its parent in the tree\n foundParent_2 = true;\n var cloneNode = Object(_antv_util__WEBPACK_IMPORTED_MODULE_3__[\"clone\"])(model);\n cloneNode.itemType = 'node';\n if (child.children) child.children.push(cloneNode);else child.children = [cloneNode];\n cloneNode.depth = child.depth + 1;\n }\n // update the size of all the ancestors\n if (foundParent_2 && itemMap_2[child.id].getType && itemMap_2[child.id].getType() === 'combo') {\n itemController.updateCombo(itemMap_2[child.id], child.children);\n }\n return true;\n });\n });\n } else {\n item = itemController.addItem(type, model);\n }\n if (type === 'node' && model.comboId || type === 'combo' && model.parentId) {\n // add the combo to the parent's children array\n var parentCombo = this.findById(model.comboId || model.parentId);\n if (parentCombo && parentCombo.getType && parentCombo.getType() === 'combo') parentCombo.addChild(item);\n }\n return item;\n };\n /**\n * 新增元素\n * @param {ITEM_TYPE} type 元素类型(node | edge)\n * @param {ModelConfig} model 元素数据模型\n * @param {boolean} stack 本次操作是否入栈,默认为 true\n * @param {boolean} sortCombo 本次操作是否需要更新 combo 层级顺序,内部参数,用户在外部使用 addItem 时始终时需要更新\n * @return {Item} 元素实例\n */\n AbstractGraph.prototype.addItem = function (type, model, stack, sortCombo) {\n if (stack === void 0) {\n stack = true;\n }\n if (sortCombo === void 0) {\n sortCombo = true;\n }\n var currentComboSorted = this.get('comboSorted');\n this.set('comboSorted', currentComboSorted && !sortCombo);\n var itemController = this.get('itemController');\n var item = this.innerAddItem(type, model, itemController);\n if (item === false || item === true) {\n return item;\n }\n var combos = this.get('combos');\n if (combos && combos.length > 0) {\n this.sortCombos();\n }\n this.autoPaint();\n if (stack && this.get('enabledStack')) {\n var addedModel = Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__assign\"])(Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__assign\"])({}, item.getModel()), {\n itemType: type\n });\n var after = {};\n switch (type) {\n case 'node':\n after.nodes = [addedModel];\n break;\n case 'edge':\n after.edges = [addedModel];\n break;\n case 'combo':\n after.combos = [addedModel];\n break;\n default:\n break;\n }\n this.pushStack('add', {\n before: {},\n after: after\n });\n }\n return item;\n };\n AbstractGraph.prototype.addItems = function (items, stack, sortCombo) {\n if (items === void 0) {\n items = [];\n }\n if (stack === void 0) {\n stack = true;\n }\n if (sortCombo === void 0) {\n sortCombo = true;\n }\n var currentComboSorted = this.get('comboSorted');\n this.set('comboSorted', currentComboSorted && !sortCombo);\n var itemController = this.get('itemController');\n var returnItems = [];\n // 1. add anything that is not an edge.\n // Add undefined as a placeholder for the next cycle. This way we return items matching the input order\n for (var i = 0; i < items.length; i++) {\n var item = items[i];\n if (item.type !== 'edge' && item.type !== 'vedge') {\n returnItems.push(this.innerAddItem(item.type, item.model, itemController));\n } else {\n returnItems.push(undefined);\n }\n }\n // 2. add all the edges\n for (var i = 0; i < items.length; i++) {\n var item = items[i];\n if (item.type === 'edge' || item.type === 'vedge') {\n returnItems[i] = this.innerAddItem(item.type, item.model, itemController);\n }\n }\n if (sortCombo) {\n var combos = this.get('combos');\n if (combos && combos.length > 0) {\n this.sortCombos();\n }\n }\n this.autoPaint();\n if (stack && this.get('enabledStack')) {\n var after = {\n nodes: [],\n edges: [],\n combos: []\n };\n for (var i = 0; i < items.length; i++) {\n var type = items[i].type;\n var returnItem = returnItems[i];\n if (!!returnItem && returnItem !== true) {\n var addedModel = Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__assign\"])(Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__assign\"])({}, returnItem.getModel()), {\n itemType: type\n });\n switch (type) {\n case 'node':\n after.nodes.push(addedModel);\n break;\n case 'edge':\n after.edges.push(addedModel);\n break;\n case 'combo':\n after.combos.push(addedModel);\n break;\n default:\n break;\n }\n }\n }\n this.pushStack('addItems', {\n before: {},\n after: after\n });\n }\n return returnItems;\n };\n /**\n * 新增元素\n * @param {ITEM_TYPE} type 元素类型(node | edge)\n * @param {ModelConfig} model 元素数据模型\n * @param {boolean} stack 本次操作是否入栈,默认为 true\n * @param {boolean} sortCombo 本次操作是否需要更新 combo 层级顺序,内部参数,用户在外部使用 addItem 时始终时需要更新\n * @return {Item} 元素实例\n */\n AbstractGraph.prototype.add = function (type, model, stack, sortCombo) {\n if (stack === void 0) {\n stack = true;\n }\n if (sortCombo === void 0) {\n sortCombo = true;\n }\n return this.addItem(type, model, stack, sortCombo);\n };\n /**\n * 更新元素\n * @param {Item} item 元素id或元素实例\n * @param {Partial | EdgeConfig} cfg 需要更新的数据\n */\n AbstractGraph.prototype.updateItem = function (item, cfg, stack) {\n var _this = this;\n if (stack === void 0) {\n stack = true;\n }\n var itemController = this.get('itemController');\n var currentItem;\n if (Object(_antv_util__WEBPACK_IMPORTED_MODULE_3__[\"isString\"])(item)) {\n currentItem = this.findById(item);\n } else {\n currentItem = item;\n }\n var stackEnabled = stack && this.get('enabledStack');\n var unupdatedModel;\n if (stackEnabled) {\n unupdatedModel = Object(_antv_util__WEBPACK_IMPORTED_MODULE_3__[\"clone\"])(currentItem.getModel());\n }\n var type = '';\n if (currentItem.getType) type = currentItem.getType();\n var states = Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__spreadArray\"])([], currentItem.getStates(), true);\n if (type === 'combo') {\n Object(_antv_util__WEBPACK_IMPORTED_MODULE_3__[\"each\"])(states, function (state) {\n return _this.setItemState(currentItem, state, false);\n });\n }\n itemController.updateItem(currentItem, cfg);\n if (type === 'combo') {\n Object(_antv_util__WEBPACK_IMPORTED_MODULE_3__[\"each\"])(states, function (state) {\n return _this.setItemState(currentItem, state, true);\n });\n }\n if (stackEnabled) {\n var before = {\n nodes: [],\n edges: [],\n combos: []\n };\n var after = {\n nodes: [],\n edges: [],\n combos: []\n };\n var afterModel = Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__assign\"])({\n id: unupdatedModel.id\n }, cfg);\n switch (type) {\n case 'node':\n before.nodes.push(unupdatedModel);\n after.nodes.push(afterModel);\n break;\n case 'edge':\n before.edges.push(unupdatedModel);\n after.edges.push(afterModel);\n break;\n case 'combo':\n before.combos.push(unupdatedModel);\n after.combos.push(afterModel);\n break;\n default:\n break;\n }\n this.pushStack('update', {\n before: before,\n after: after\n });\n }\n };\n /**\n * 更新元素\n * @param {Item} item 元素id或元素实例\n * @param {Partial | EdgeConfig} cfg 需要更新的数据\n * @param {boolean} stack 本次操作是否入栈,默认为 true\n */\n AbstractGraph.prototype.update = function (item, cfg, stack) {\n if (stack === void 0) {\n stack = true;\n }\n this.updateItem(item, cfg, stack);\n };\n /**\n * 设置元素状态\n * @param {Item} item 元素id或元素实例\n * @param {string} state 状态名称\n * @param {string | boolean} value 是否启用状态 或 状态值\n */\n AbstractGraph.prototype.setItemState = function (item, state, value) {\n if (Object(_antv_util__WEBPACK_IMPORTED_MODULE_3__[\"isString\"])(item)) {\n item = this.findById(item);\n }\n var itemController = this.get('itemController');\n itemController.setItemState(item, state, value);\n var stateController = this.get('stateController');\n stateController.updateState(item, state, value);\n };\n /**\n * 将指定状态的优先级提升为最高优先级\n * @param {Item} item 元素id或元素实例\n * @param state 状态名称\n */\n AbstractGraph.prototype.priorityState = function (item, state) {\n var itemController = this.get('itemController');\n itemController.priorityState(item, state);\n };\n /**\n * 设置视图初始化数据\n * @param {GraphData} data 初始化数据\n */\n AbstractGraph.prototype.data = function (data) {\n Object(_util_validation__WEBPACK_IMPORTED_MODULE_6__[\"dataValidation\"])(data);\n this.set('data', data);\n };\n /**\n * 根据data接口的数据渲染视图\n */\n AbstractGraph.prototype.render = function () {\n var self = this;\n this.set('comboSorted', false);\n var data = this.get('data');\n if (this.get('enabledStack')) {\n // render 之前清空 redo 和 undo 栈\n this.clearStack();\n }\n if (!data) {\n throw new Error('data must be defined first');\n }\n var _a = data.nodes,\n nodes = _a === void 0 ? [] : _a,\n _b = data.edges,\n edges = _b === void 0 ? [] : _b,\n _c = data.combos,\n combos = _c === void 0 ? [] : _c;\n this.clear(true);\n this.emit('beforerender');\n self.addItems(nodes.map(function (node) {\n return {\n type: 'node',\n model: node\n };\n }), false, false);\n // process the data to tree structure\n if ((combos === null || combos === void 0 ? void 0 : combos.length) !== 0) {\n var comboTrees = Object(_util_graphic__WEBPACK_IMPORTED_MODULE_9__[\"plainCombosToTrees\"])(combos, nodes);\n this.set('comboTrees', comboTrees);\n // add combos\n self.addCombos(combos);\n }\n self.addItems(edges.map(function (edge) {\n return {\n type: 'edge',\n model: edge\n };\n }), false, false);\n var animate = self.get('animate');\n if (self.get('fitView') || self.get('fitCenter')) {\n self.set('animate', false);\n }\n // layout\n var layoutController = self.get('layoutController');\n if (layoutController) {\n layoutController.layout(success);\n if (this.destroyed) return;\n } else {\n success();\n }\n // 将在 onLayoutEnd 中被调用\n function success() {\n // 自底向上将 collapsed 的 combo 合起\n (self.get('comboTrees') || []).forEach(function (ctree) {\n Object(_util_graphic__WEBPACK_IMPORTED_MODULE_9__[\"traverseTreeUp\"])(ctree, function (child) {\n var item = self.findById(child.id);\n if (item.getType() === 'combo' && child.collapsed) {\n self.collapseCombo(child.id, false);\n self.updateCombo(item);\n }\n return true;\n });\n });\n // fitView 与 fitCenter 共存时,fitView 优先,fitCenter 不再执行\n if (self.get('fitView')) {\n self.fitView();\n } else if (self.get('fitCenter')) {\n self.fitCenter();\n }\n self.autoPaint();\n self.emit('afterrender');\n if (self.get('fitView') || self.get('fitCenter')) {\n self.set('animate', animate);\n }\n setTimeout(function () {\n var _a;\n (_a = self.getCombos()) === null || _a === void 0 ? void 0 : _a.forEach(function (combo) {\n combo.set('animate', true);\n });\n }, 0);\n }\n if (!this.get('groupByTypes')) {\n if (combos && combos.length !== 0) {\n this.sortCombos();\n } else {\n // 为提升性能,选择数量少的进行操作\n if (data.nodes && data.edges && data.nodes.length < data.edges.length) {\n var nodesArr = this.getNodes();\n // 遍历节点实例,将所有节点提前。\n nodesArr.forEach(function (node) {\n node.toFront();\n });\n } else {\n var edgesArr = this.getEdges();\n // 遍历节点实例,将所有节点提前。\n edgesArr.forEach(function (edge) {\n edge.toBack();\n });\n }\n }\n }\n };\n /**\n * 接收数据进行渲染\n * @Param {Object} data 初始化数据\n */\n AbstractGraph.prototype.read = function (data) {\n this.data(data);\n this.render();\n };\n // 比较item\n AbstractGraph.prototype.diffItems = function (type, items, models) {\n var self = this;\n var item;\n var itemMap = this.get('itemMap');\n Object(_antv_util__WEBPACK_IMPORTED_MODULE_3__[\"each\"])(models, function (model) {\n item = itemMap[model.id];\n if (item) {\n if (self.get('animate') && type === NODE) {\n var containerMatrix = item.getContainer().getMatrix();\n if (!containerMatrix) containerMatrix = [1, 0, 0, 0, 1, 0, 0, 0, 1];\n item.set('originAttrs', {\n x: containerMatrix[6],\n y: containerMatrix[7]\n });\n }\n self.updateItem(item, model, false);\n } else {\n item = self.addItem(type, model, false);\n }\n if (item) items[\"\".concat(type, \"s\")].push(item);\n });\n };\n /**\n * 更改源数据,根据新数据重新渲染视图\n * @param {GraphData | TreeGraphData} data 源数据\n * @param {boolean} 是否入栈,默认为true\n * @return {object} this\n */\n AbstractGraph.prototype.changeData = function (propsData, stack) {\n var _this = this;\n var _a;\n if (stack === void 0) {\n stack = true;\n }\n var self = this;\n var data = propsData || self.get('data');\n if (!Object(_util_validation__WEBPACK_IMPORTED_MODULE_6__[\"dataValidation\"])(data)) {\n return this;\n }\n this.emit('beforechangedata');\n if (stack && this.get('enabledStack')) {\n this.pushStack('changedata', {\n before: self.save(),\n after: data\n });\n }\n this.set('comboSorted', false);\n // 删除 hulls\n this.removeHulls();\n // 更改数据源后,取消所有状态\n this.getNodes().map(function (node) {\n return self.clearItemStates(node);\n });\n this.getEdges().map(function (edge) {\n return self.clearItemStates(edge);\n });\n var canvas = this.get('canvas');\n var localRefresh = canvas.get('localRefresh');\n canvas.set('localRefresh', false);\n if (!self.get('data')) {\n self.data(data);\n self.render();\n }\n var itemMap = this.get('itemMap');\n var items = {\n nodes: [],\n edges: []\n };\n var combosData = data.combos;\n if (combosData) {\n var comboTrees = Object(_util_graphic__WEBPACK_IMPORTED_MODULE_9__[\"plainCombosToTrees\"])(combosData, data.nodes);\n this.set('comboTrees', comboTrees);\n } else {\n this.set('comboTrees', []);\n }\n this.diffItems('node', items, data.nodes);\n Object(_antv_util__WEBPACK_IMPORTED_MODULE_3__[\"each\"])(itemMap, function (item, id) {\n itemMap[id].getModel().depth = 0;\n if (item.getType && item.getType() === 'edge') return;\n if (item.getType && item.getType() === 'combo') {\n delete itemMap[id];\n item.destroy();\n } else if (items.nodes.indexOf(item) < 0) {\n delete itemMap[id];\n self.remove(item, false);\n }\n });\n // clear the destroyed combos here to avoid removing sub nodes before removing the parent combo\n var comboItems = this.getCombos();\n var combosLength = comboItems.length;\n for (var i = combosLength - 1; i >= 0; i--) {\n if (comboItems[i].destroyed) {\n comboItems.splice(i, 1);\n }\n }\n // process the data to tree structure\n if (combosData) {\n // add combos\n self.addCombos(combosData);\n if (!this.get('groupByTypes')) {\n this.sortCombos();\n }\n }\n this.diffItems('edge', items, data.edges);\n Object(_antv_util__WEBPACK_IMPORTED_MODULE_3__[\"each\"])(itemMap, function (item, id) {\n if (item.getType && (item.getType() === 'node' || item.getType() === 'combo')) return;\n if (items.edges.indexOf(item) < 0) {\n delete itemMap[id];\n self.remove(item, false);\n }\n });\n // 自底向上将 collapsed 的 combo 合起\n (this.get('comboTrees') || []).forEach(function (ctree) {\n Object(_util_graphic__WEBPACK_IMPORTED_MODULE_9__[\"traverseTreeUp\"])(ctree, function (child) {\n var item = _this.findById(child.id);\n if (item.getType() === 'combo' && child.collapsed) {\n _this.collapseCombo(child.id, false);\n }\n return true;\n });\n });\n this.set({\n nodes: items.nodes,\n edges: items.edges\n });\n var _b = (this.get('layout') || {}).relayoutAtChangeData,\n relayoutAtChangeData = _b === void 0 ? true : _b;\n var layoutController = this.get('layoutController');\n if (relayoutAtChangeData && layoutController) {\n layoutController.changeData(function () {\n setTimeout(function () {\n var _a;\n (_a = self.getCombos()) === null || _a === void 0 ? void 0 : _a.forEach(function (combo) {\n combo.set('animate', true);\n });\n }, 0);\n });\n if (self.get('animate') && !layoutController.getLayoutType()) {\n // 如果没有指定布局\n self.positionsAnimate();\n (_a = self.getCombos()) === null || _a === void 0 ? void 0 : _a.forEach(function (combo) {\n return combo.set('animate', true);\n });\n } else {\n self.autoPaint();\n }\n }\n setTimeout(function () {\n canvas.set('localRefresh', localRefresh);\n }, 16);\n this.set('data', data);\n this.emit('afterchangedata');\n return this;\n };\n /**\n * 私有方法,在 render 和 changeData 的时候批量添加数据中所有平铺的 combos\n * @param {ComboConfig[]} combos 平铺的 combos 数据\n */\n AbstractGraph.prototype.addCombos = function (combos) {\n var self = this;\n var comboTrees = self.get('comboTrees');\n var itemController = this.get('itemController');\n itemController.addCombos(comboTrees, combos);\n };\n /**\n * 根据已经存在的节点或 combo 创建新的 combo\n * @param combo combo ID 或 Combo 配置\n * @param childrenIds 添加到 Combo 中的元素,包括节点和 combo\n */\n AbstractGraph.prototype.createCombo = function (combo, childrenIds, stack) {\n var _this = this;\n if (stack === void 0) {\n stack = true;\n }\n var itemController = this.get('itemController');\n this.set('comboSorted', false);\n // step 1: 创建新的 Combo\n var comboId = '';\n var comboConfig;\n if (!combo) return;\n if (Object(_antv_util__WEBPACK_IMPORTED_MODULE_3__[\"isString\"])(combo)) {\n comboId = combo;\n comboConfig = {\n id: combo\n };\n } else {\n comboId = combo.id;\n if (!comboId) {\n console.warn('Create combo failed. Please assign a unique string id for the adding combo.');\n return;\n }\n comboConfig = combo;\n }\n var shouldStack = stack && this.get('enabledStack');\n // cache the children's old parent for stack\n var childrenParentCache = {\n nodes: [],\n combos: []\n };\n if (shouldStack) {\n childrenIds.forEach(function (childId) {\n var childItem = _this.findById(childId);\n var childType = childItem.getType();\n if (childType !== 'node' && childType !== 'combo') return;\n var childModel = childItem.getModel();\n childrenParentCache[\"\".concat(childType, \"s\")].push({\n id: childId,\n parentId: childType === 'node' ? childModel.comboId : childModel.parentId\n });\n });\n }\n // step 2: Pull children out of their parents\n var comboTrees = this.get('comboTrees');\n var childrenIdsSet = new Set(childrenIds);\n var pulledComboTreesById = new Map();\n if (comboTrees) {\n comboTrees.forEach(function (ctree) {\n Object(_util_graphic__WEBPACK_IMPORTED_MODULE_9__[\"traverseTreeUp\"])(ctree, function (treeNode, parentTreeNode, index) {\n if (childrenIdsSet.has(treeNode.id)) {\n if (parentTreeNode) {\n var parentItem = _this.findById(parentTreeNode.id);\n var item = _this.findById(treeNode.id);\n // Removing current item from the tree during the traversal is ok because children traversal is done\n // in an *inverse order* - indices of the next-traversed items are not disturbed by the removal.\n parentTreeNode.children.splice(index, 1);\n parentItem.removeChild(item);\n // We have to update the parent node geometry since nodes were removed from them, _while they are still visible_\n // (combos may be moved inside the new combo and become hidden)\n itemController.updateCombo(parentItem, parentTreeNode.children);\n }\n if (treeNode.itemType === 'combo') {\n pulledComboTreesById.set(treeNode.id, treeNode);\n }\n }\n return true;\n });\n });\n comboTrees = comboTrees.filter(function (ctree) {\n return !childrenIdsSet.has(ctree.id);\n });\n this.set('comboTrees', comboTrees);\n }\n // step 3: 更新 children,根据类型添加 comboId 或 parentId\n var newChildrenParent = {\n nodes: [],\n combos: []\n };\n var trees = childrenIds.map(function (elementId) {\n var item = _this.findById(elementId);\n var model = item.getModel();\n var type = '';\n if (item.getType) type = item.getType();\n // Combos will be just moved around, so their children can be preserved\n var cItem = pulledComboTreesById.get(elementId) || {\n id: item.getID(),\n itemType: type\n };\n if (type === 'combo') {\n cItem.parentId = comboId;\n model.parentId = comboId;\n } else if (type === 'node') {\n cItem.comboId = comboId;\n model.comboId = comboId;\n }\n if (shouldStack) {\n newChildrenParent[\"\".concat(type, \"s\")].push({\n id: model.id,\n parentId: comboId\n });\n }\n return cItem;\n });\n comboConfig.children = trees;\n // step 4: 添加 Combo,addItem 时会将子将元素添加到 Combo 中\n this.addItem('combo', comboConfig, false);\n this.set('comboSorted', false);\n // step 5: 更新 comboTrees 结构\n if (comboTrees) {\n comboTrees.forEach(function (ctree) {\n Object(_util_graphic__WEBPACK_IMPORTED_MODULE_9__[\"traverseTree\"])(ctree, function (treeNode) {\n // Set the children to the newly created combo\n if (treeNode.id === comboId) {\n treeNode.itemType = 'combo';\n treeNode.children = trees;\n return false;\n }\n return true;\n });\n });\n this.sortCombos();\n }\n if (shouldStack) {\n newChildrenParent.combos.push(comboConfig);\n this.pushStack('createCombo', {\n before: childrenParentCache,\n after: newChildrenParent\n });\n }\n // Fixes issue of nested child combos not being interactive (under parent on graph).\n var comboItem = this.findById(comboId);\n if (!comboItem.getModel().parentId && comboItem.getChildren().combos.length) {\n this.updateComboTree(comboItem, undefined, false);\n }\n setTimeout(function () {\n comboItem.set('animate', true);\n }, 0);\n };\n /**\n * 解散 combo\n * @param {String | INode | ICombo} combo 需要被解散的 Combo item 或 id\n */\n AbstractGraph.prototype.uncombo = function (combo, stack) {\n var _this = this;\n var _a, _b;\n if (stack === void 0) {\n stack = true;\n }\n var self = this;\n var comboItem = combo;\n if (Object(_antv_util__WEBPACK_IMPORTED_MODULE_3__[\"isString\"])(combo)) {\n comboItem = this.findById(combo);\n }\n if (!comboItem || comboItem.getType && comboItem.getType() !== 'combo') {\n console.warn('The item is not a combo!');\n return;\n }\n var comboModel = comboItem.getModel();\n var parentId = comboItem.getModel().parentId;\n var comboTrees = self.get('comboTrees');\n if (!comboTrees) comboTrees = [];\n var itemMap = this.get('itemMap');\n var comboId = comboItem.get('id');\n var treeToBeUncombo;\n var brothers = [];\n var comboItems = this.get('combos');\n var parentItem = this.findById(parentId);\n var shouldStack = stack && this.get('enabledStack');\n var comboConfig = {};\n if (shouldStack) {\n comboConfig = Object(_antv_util__WEBPACK_IMPORTED_MODULE_3__[\"clone\"])(comboModel);\n comboConfig.children = [];\n }\n comboTrees.forEach(function (ctree) {\n if (treeToBeUncombo) return; // terminate the forEach\n Object(_util_graphic__WEBPACK_IMPORTED_MODULE_9__[\"traverseTreeUp\"])(ctree, function (subtree) {\n var _a;\n // find the combo to be uncomboed, delete the combo from map and cache\n if (subtree.id === comboId) {\n treeToBeUncombo = subtree;\n // delete the related edges\n var edgeIds = comboItem.getEdges().map(function (edge) {\n return edge.getID();\n });\n edgeIds.forEach(function (edgeId) {\n _this.removeItem(edgeId, false);\n });\n var index = comboItems.indexOf(comboItem);\n comboItems.splice(index, 1);\n delete itemMap[comboId];\n var itemModel = Object(_antv_util__WEBPACK_IMPORTED_MODULE_3__[\"clone\"])(comboItem.getModel());\n comboItem.destroy();\n _this.emit('afterremoveitem', {\n item: itemModel,\n type: 'combo'\n });\n }\n // find the parent to remove the combo from the combo's brothers array and add the combo's children to the combo's brothers array in the tree\n if (parentId && treeToBeUncombo && subtree.id === parentId) {\n parentItem.removeCombo(comboItem);\n brothers = subtree.children; // the combo's brothers\n // remove the combo from its brothers array\n var index = brothers.indexOf(treeToBeUncombo);\n if (index !== -1) {\n brothers.splice(index, 1);\n }\n // append the combo's children to the combo's brothers array\n (_a = treeToBeUncombo.children) === null || _a === void 0 ? void 0 : _a.forEach(function (child) {\n var item = _this.findById(child.id);\n var childModel = item.getModel();\n if (item.getType && item.getType() === 'combo') {\n child.parentId = parentId;\n delete child.comboId;\n childModel.parentId = parentId; // update the parentId of the model\n delete childModel.comboId;\n } else if (item.getType && item.getType() === 'node') {\n child.comboId = parentId;\n childModel.comboId = parentId; // update the parentId of the model\n }\n\n parentItem.addChild(item);\n brothers.push(child);\n });\n _this.updateCombo(parentItem);\n return false;\n }\n return true;\n });\n });\n // if the parentId is not found, remove the combo from the roots\n if (!parentId && treeToBeUncombo) {\n var index = comboTrees.indexOf(treeToBeUncombo);\n comboTrees.splice(index, 1);\n // modify the parentId of the children\n (_a = treeToBeUncombo.children) === null || _a === void 0 ? void 0 : _a.forEach(function (child) {\n child.parentId = undefined;\n var childModel = _this.findById(child.id).getModel();\n delete childModel.parentId; // update the parentId of the model\n delete childModel.comboId; // update the comboId of the model\n if (child.itemType !== 'node') comboTrees.push(child);\n });\n }\n if (shouldStack) {\n // cache the children's old parent and combo model for stack\n var childrenParentCache_1 = {\n nodes: [],\n combos: []\n };\n var childNewParent_1 = {\n nodes: [],\n combos: []\n };\n (_b = treeToBeUncombo.children) === null || _b === void 0 ? void 0 : _b.forEach(function (child) {\n var childItem = _this.findById(child.id);\n var childType = childItem.getType();\n if (childType !== 'node' && childType !== 'combo') return;\n childrenParentCache_1[\"\".concat(childType, \"s\")].push({\n id: child.id,\n parentId: comboId\n });\n childNewParent_1[\"\".concat(childType, \"s\")].push({\n id: child.id,\n parentId: parentId\n });\n });\n childrenParentCache_1.combos.push(comboConfig);\n this.pushStack('uncombo', {\n before: childrenParentCache_1,\n after: childNewParent_1\n });\n }\n };\n /**\n * 根据 combo 位置更新内部节点位置 followCombo = true\n * 或根据内部元素的 bbox 更新所有 combos 的绘制,包括 combos 的位置和范围,followCombo = false\n */\n AbstractGraph.prototype.updateCombos = function (followCombo) {\n var _this = this;\n if (followCombo === void 0) {\n followCombo = false;\n }\n var self = this;\n var comboTrees = this.get('comboTrees');\n var itemController = self.get('itemController');\n var itemMap = self.get('itemMap');\n (comboTrees || []).forEach(function (ctree) {\n Object(_util_graphic__WEBPACK_IMPORTED_MODULE_9__[\"traverseTreeUp\"])(ctree, function (child) {\n var _a;\n if (!child) {\n return true;\n }\n var childItem = itemMap[child.id];\n if (((_a = childItem === null || childItem === void 0 ? void 0 : childItem.getType) === null || _a === void 0 ? void 0 : _a.call(childItem)) === 'combo') {\n // 更新具体的 Combo 之前先清除所有的已有状态,以免将 state 中的样式更新为 Combo 的样式\n var states = Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__spreadArray\"])([], childItem.getStates(), true);\n Object(_antv_util__WEBPACK_IMPORTED_MODULE_3__[\"each\"])(states, function (state) {\n return _this.setItemState(childItem, state, false);\n });\n // 更新具体的 Combo\n itemController.updateCombo(childItem, child.children, followCombo);\n // 更新 Combo 后,还原已有的状态\n Object(_antv_util__WEBPACK_IMPORTED_MODULE_3__[\"each\"])(states, function (state) {\n return _this.setItemState(childItem, state, true);\n });\n }\n return true;\n });\n });\n self.sortCombos();\n };\n /**\n * 根据节点的 bbox 更新 combo 及其祖先 combos 的绘制,包括 combos 的位置和范围\n * @param {String | ICombo} combo 需要被更新的 Combo 或 id,若指定,则该 Combo 及所有祖先 Combod 都会被更新\n */\n AbstractGraph.prototype.updateCombo = function (combo) {\n var _this = this;\n var self = this;\n var comboItem = combo;\n var comboId;\n if (Object(_antv_util__WEBPACK_IMPORTED_MODULE_3__[\"isString\"])(combo)) {\n comboItem = this.findById(combo);\n }\n if (!comboItem || comboItem.getType && comboItem.getType() !== 'combo') {\n console.warn('The item to be updated is not a combo!');\n return;\n }\n comboId = comboItem.get('id');\n var comboTrees = this.get('comboTrees');\n var itemController = self.get('itemController');\n var itemMap = self.get('itemMap');\n (comboTrees || []).forEach(function (ctree) {\n Object(_util_graphic__WEBPACK_IMPORTED_MODULE_9__[\"traverseTreeUp\"])(ctree, function (child) {\n if (!child) {\n return true;\n }\n var childItem = itemMap[child.id];\n if (comboId === child.id && childItem && childItem.getType && childItem.getType() === 'combo') {\n // 更新具体的 Combo 之前先清除所有的已有状态,以免将 state 中的样式更新为 Combo 的样式\n var states = Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__spreadArray\"])([], childItem.getStates(), true);\n // || !item.getStateStyle(stateName)\n Object(_antv_util__WEBPACK_IMPORTED_MODULE_3__[\"each\"])(states, function (state) {\n if (childItem.getStateStyle(state)) {\n _this.setItemState(childItem, state, false);\n }\n });\n // 更新具体的 Combo\n itemController.updateCombo(childItem, child.children);\n // 更新 Combo 后,还原已有的状态\n Object(_antv_util__WEBPACK_IMPORTED_MODULE_3__[\"each\"])(states, function (state) {\n if (childItem.getStateStyle(state)) {\n _this.setItemState(childItem, state, true);\n }\n });\n if (comboId) comboId = child.parentId;\n }\n return true;\n });\n });\n };\n /**\n * 更新树结构,例如移动子树等\n * @param {String | INode | ICombo} item 需要被更新的 Combo 或 节点 id\n * @param {string | undefined} parentId 新的父 combo id,undefined 代表没有父 combo\n */\n AbstractGraph.prototype.updateComboTree = function (item, parentId, stack) {\n if (stack === void 0) {\n stack = true;\n }\n var self = this;\n this.set('comboSorted', false);\n var uItem;\n if (Object(_antv_util__WEBPACK_IMPORTED_MODULE_3__[\"isString\"])(item)) {\n uItem = self.findById(item);\n } else {\n uItem = item;\n }\n var model = uItem.getModel();\n var oldParentId = model.comboId || model.parentId;\n var type = '';\n if (uItem.getType) type = uItem.getType();\n // 若 item 是 Combo,且 parentId 是其子孙 combo 的 id,则警告并终止\n if (parentId && type === 'combo') {\n var comboTrees = this.get('comboTrees');\n var valid_1 = true;\n var itemSubTree_1;\n (comboTrees || []).forEach(function (ctree) {\n if (itemSubTree_1) return;\n Object(_util_graphic__WEBPACK_IMPORTED_MODULE_9__[\"traverseTree\"])(ctree, function (subTree) {\n if (itemSubTree_1) return;\n // 找到从 item 开始的子树\n if (subTree.id === uItem.getID()) {\n itemSubTree_1 = subTree;\n }\n return true;\n });\n });\n // 在以 item 为根的子树中寻找与 parentId 相同的后继元素\n Object(_util_graphic__WEBPACK_IMPORTED_MODULE_9__[\"traverseTree\"])(itemSubTree_1, function (subTree) {\n if (subTree.id === parentId) {\n valid_1 = false;\n return false;\n }\n return true;\n });\n // parentId 是 item 的一个后继元素,不能进行更新\n if (!valid_1) {\n console.warn('Failed to update the combo tree! The parentId points to a descendant of the combo!');\n return;\n }\n }\n if (stack && this.get('enabledStack')) {\n var beforeData = {},\n afterData = {};\n if (type === 'combo') {\n beforeData.combos = [{\n id: model.id,\n parentId: model.parentId\n }];\n afterData.combos = [{\n id: model.id,\n parentId: parentId\n }];\n } else if (type === 'node') {\n beforeData.nodes = [{\n id: model.id,\n parentId: model.comboId\n }];\n afterData.nodes = [{\n id: model.id,\n parentId: parentId\n }];\n }\n this.pushStack('updateComboTree', {\n before: beforeData,\n after: afterData\n });\n }\n // 当 combo 存在 parentId 或 comboId 时,才将其移除\n if (model.parentId || model.comboId) {\n var combo = this.findById(model.parentId || model.comboId);\n if (combo) {\n combo.removeChild(uItem);\n }\n }\n if (type === 'combo') {\n model.parentId = parentId;\n } else if (type === 'node') {\n model.comboId = parentId;\n }\n // 只有当移入到指定 combo 时才添加\n if (parentId) {\n var parentCombo = this.findById(parentId);\n if (parentCombo) {\n // 将元素添加到 parentCombo 中\n parentCombo.addChild(uItem);\n }\n }\n // 如果原先有父亲 combo,则从原父 combo 的子元素数组中删除\n if (oldParentId) {\n var parentCombo = this.findById(oldParentId);\n if (parentCombo) {\n // 将元素从 parentCombo 中移除\n parentCombo.removeChild(uItem);\n }\n }\n var newComboTrees = Object(_util_graphic__WEBPACK_IMPORTED_MODULE_9__[\"reconstructTree\"])(this.get('comboTrees'), model.id, parentId);\n this.set('comboTrees', newComboTrees);\n this.updateCombos();\n };\n /**\n * 导出图数据\n * @return {object} data\n */\n AbstractGraph.prototype.save = function () {\n var nodes = [];\n var edges = [];\n var combos = [];\n Object(_antv_util__WEBPACK_IMPORTED_MODULE_3__[\"each\"])(this.get('nodes'), function (node) {\n nodes.push(node.getModel());\n });\n Object(_antv_util__WEBPACK_IMPORTED_MODULE_3__[\"each\"])(this.get('edges'), function (edge) {\n edges.push(edge.getModel());\n });\n Object(_antv_util__WEBPACK_IMPORTED_MODULE_3__[\"each\"])(this.get('combos'), function (combo) {\n combos.push(combo.getModel());\n });\n return {\n nodes: nodes,\n edges: edges,\n combos: combos\n };\n };\n /**\n * 改变画布大小\n * @param {number} width 画布宽度\n * @param {number} height 画布高度\n * @return {object} this\n */\n AbstractGraph.prototype.changeSize = function (width, height) {\n var viewController = this.get('viewController');\n viewController.changeSize(width, height);\n return this;\n };\n /**\n * 当源数据在外部发生变更时,根据新数据刷新视图。但是不刷新节点位置\n */\n AbstractGraph.prototype.refresh = function () {\n var self = this;\n self.emit('beforegraphrefresh');\n if (self.get('animate')) {\n self.positionsAnimate();\n } else {\n var nodes = self.get('nodes');\n var edges = self.get('edges');\n var vedges = self.get('edges');\n Object(_antv_util__WEBPACK_IMPORTED_MODULE_3__[\"each\"])(nodes, function (node) {\n node.refresh();\n });\n Object(_antv_util__WEBPACK_IMPORTED_MODULE_3__[\"each\"])(edges, function (edge) {\n edge.refresh();\n });\n Object(_antv_util__WEBPACK_IMPORTED_MODULE_3__[\"each\"])(vedges, function (vedge) {\n vedge.refresh();\n });\n }\n self.emit('aftergraphrefresh');\n self.autoPaint();\n };\n /**\n * 获取当前图中所有节点的item实例\n * @return {INode} item数组\n */\n AbstractGraph.prototype.getNodes = function () {\n return this.get('nodes');\n };\n /**\n * 获取当前图中所有边的item实例\n * @return {IEdge} item数组\n */\n AbstractGraph.prototype.getEdges = function () {\n return this.get('edges');\n };\n /**\n * 获取图中所有的 combo 实例\n */\n AbstractGraph.prototype.getCombos = function () {\n return this.get('combos');\n };\n /**\n * 获取指定 Combo 中所有的节点\n * @param comboId combo ID\n */\n AbstractGraph.prototype.getComboChildren = function (combo) {\n if (Object(_antv_util__WEBPACK_IMPORTED_MODULE_3__[\"isString\"])(combo)) {\n combo = this.findById(combo);\n }\n if (!combo || combo.getType && combo.getType() !== 'combo') {\n console.warn('The combo does not exist!');\n return;\n }\n return combo.getChildren();\n };\n /**\n * 根据 graph 上的 animateCfg 进行视图中节点位置动画接口\n */\n AbstractGraph.prototype.positionsAnimate = function (referComboModel) {\n var self = this;\n self.emit('beforeanimate');\n var animateCfg = self.get('animateCfg');\n var onFrame = animateCfg.onFrame;\n var nodes = referComboModel ? self.getNodes().concat(self.getCombos()) : self.getNodes();\n var toNodes = nodes.map(function (node) {\n var model = node.getModel();\n return {\n id: model.id,\n x: model.x,\n y: model.y\n };\n });\n self.stopAnimate();\n var canvas = self.get('canvas');\n self.animating = true;\n setTimeout(function () {\n canvas.animate(function (ratio) {\n Object(_antv_util__WEBPACK_IMPORTED_MODULE_3__[\"each\"])(toNodes, function (data) {\n var node = self.findById(data.id);\n if (!node || node.destroyed) {\n return;\n }\n var originAttrs = node.get('originAttrs');\n var model = node.get('model');\n var containerMatrix = node.getContainer().getMatrix();\n if (originAttrs === undefined || originAttrs === null) {\n // 变换前存在位置,设置到 originAttrs 上。否则标记 0 表示变换前不存在位置,不需要计算动画\n if (containerMatrix) {\n originAttrs = {\n x: containerMatrix[6],\n y: containerMatrix[7]\n };\n }\n node.set('originAttrs', originAttrs || 0);\n }\n if (onFrame) {\n var attrs = onFrame(node, ratio, data, originAttrs || {\n x: 0,\n y: 0\n });\n node.set('model', Object.assign(model, attrs));\n } else if (originAttrs) {\n // 变换前存在位置,进行动画\n model.x = originAttrs.x + (data.x - originAttrs.x) * ratio;\n model.y = originAttrs.y + (data.y - originAttrs.y) * ratio;\n } else {\n // 若在变换前不存在位置信息,则直接放到最终位置上\n model.x = data.x;\n model.y = data.y;\n }\n });\n self.refreshPositions(referComboModel);\n }, {\n duration: animateCfg.duration,\n easing: animateCfg.easing,\n callback: function callback() {\n Object(_antv_util__WEBPACK_IMPORTED_MODULE_3__[\"each\"])(nodes, function (node) {\n node.set('originAttrs', null);\n });\n if (animateCfg.callback) {\n animateCfg.callback();\n }\n self.emit('afteranimate');\n self.animating = false;\n }\n });\n }, 0);\n };\n /**\n * 当节点位置在外部发生改变时,刷新所有节点位置,重计算边\n */\n AbstractGraph.prototype.refreshPositions = function (referComboModel) {\n var self = this;\n self.emit('beforegraphrefreshposition');\n var nodes = self.get('nodes');\n var edges = self.get('edges');\n var vedges = self.get('vedges');\n var combos = self.get('combos');\n var model;\n var updatedNodes = {};\n var updateItems = function updateItems(items) {\n Object(_antv_util__WEBPACK_IMPORTED_MODULE_3__[\"each\"])(items, function (item) {\n model = item.getModel();\n var originAttrs = item.get('originAttrs');\n if (originAttrs && model.x === originAttrs.x && model.y === originAttrs.y) {\n return;\n }\n var changed = item.updatePosition({\n x: model.x,\n y: model.y\n });\n updatedNodes[model.id] = changed;\n if (model.comboId) updatedNodes[model.comboId] = updatedNodes[model.comboId] || changed;\n if (model.parentId) updatedNodes[model.parentId] = updatedNodes[model.parentId] || changed;\n });\n };\n updateItems(combos);\n updateItems(nodes);\n if (combos && combos.length !== 0) {\n if (referComboModel) {\n updateItems(combos);\n self.updateCombos();\n } else {\n self.updateCombos();\n }\n }\n Object(_antv_util__WEBPACK_IMPORTED_MODULE_3__[\"each\"])(edges, function (edge) {\n var sourceModel = edge.getSource().getModel();\n var target = edge.getTarget();\n // 避免 target 是纯对象的情况下调用 getModel 方法\n // 拖动生成边的时候 target 会是纯对象\n if (!Object(_antv_util__WEBPACK_IMPORTED_MODULE_3__[\"isPlainObject\"])(target)) {\n var targetModel = target.getModel();\n if (updatedNodes[sourceModel.id] || updatedNodes[targetModel.id] || edge.getModel().isComboEdge) {\n edge.refresh();\n }\n }\n });\n Object(_antv_util__WEBPACK_IMPORTED_MODULE_3__[\"each\"])(vedges, function (vedge) {\n vedge.refresh();\n });\n self.emit('aftergraphrefreshposition');\n self.autoPaint();\n };\n AbstractGraph.prototype.stopAnimate = function () {\n var canvas = this.get('canvas');\n var timeline = canvas.cfg.timeline;\n if (timeline) {\n timeline.stopAllAnimations();\n }\n };\n AbstractGraph.prototype.isAnimating = function () {\n return this.animating;\n };\n /**\n * 获取当前视口伸缩比例\n * @return {number} 比例\n */\n AbstractGraph.prototype.getZoom = function () {\n var matrix = this.get('group').getMatrix();\n return matrix ? matrix[0] : 1;\n };\n /**\n * 获取当前的行为模式\n * @return {string} 当前行为模式\n */\n AbstractGraph.prototype.getCurrentMode = function () {\n var modeController = this.get('modeController');\n return modeController.getMode();\n };\n /**\n * 切换行为模式\n * @param {string} mode 指定模式\n * @return {object} this\n */\n AbstractGraph.prototype.setMode = function (mode) {\n var modeController = this.get('modeController');\n modeController.setMode(mode);\n return this;\n };\n /**\n * 清除画布元素\n * @return {object} this\n */\n AbstractGraph.prototype.clear = function (avoidEmit) {\n var _a;\n if (avoidEmit === void 0) {\n avoidEmit = false;\n }\n (_a = this.get('canvas')) === null || _a === void 0 ? void 0 : _a.clear();\n this.initGroups();\n // 清空画布时同时清除数据\n this.set({\n itemMap: {},\n nodes: [],\n edges: [],\n vedges: [],\n groups: [],\n combos: [],\n comboTrees: []\n });\n if (!avoidEmit) this.emit('afterrender');\n return this;\n };\n /**\n * 更换布局配置项\n * @param {object} cfg 新布局配置项\n * @param {'center' | 'begin'} align 对齐方式,可选中心(center)对齐到对齐点,或左上角(begin)对齐到对齐点\n * @param {IPoint} alignPoint 画布上的对齐点,为 Canvas 坐标系(Canvas DOM)\n * 若 cfg 含有 type 字段或为 String 类型,且与现有布局方法不同,则更换布局\n * 若 cfg 不包括 type ,则保持原有布局方法,仅更新布局配置项\n */\n AbstractGraph.prototype.updateLayout = function (cfg, align, alignPoint, stack) {\n var _this = this;\n if (cfg === void 0) {\n cfg = {};\n }\n if (stack === void 0) {\n stack = true;\n }\n var layoutController = this.get('layoutController');\n if (Object(_antv_util__WEBPACK_IMPORTED_MODULE_3__[\"isString\"])(cfg)) {\n cfg = {\n type: cfg\n };\n }\n // align the graph after layout\n if (align) {\n var toPoint_1 = alignPoint;\n if (!toPoint_1) {\n if (align === 'begin') toPoint_1 = {\n x: 0,\n y: 0\n };else toPoint_1 = {\n x: this.getWidth() / 2,\n y: this.getHeight() / 2\n };\n }\n // translate to point coordinate system\n toPoint_1 = this.getPointByCanvas(toPoint_1.x, toPoint_1.y);\n var forceTypes = ['force', 'gForce', 'fruchterman', 'force2'];\n // if it is force layout, only center takes effect, and assign center force\n if (forceTypes.includes(cfg.type) || !cfg.type && forceTypes.includes(layoutController === null || layoutController === void 0 ? void 0 : layoutController.layoutType)) {\n cfg.center = [toPoint_1.x, toPoint_1.y];\n } else {\n this.once('afterlayout', function (e) {\n var matrix = _this.getGroup().getMatrix() || [1, 0, 0, 0, 1, 0, 0, 0, 1];\n toPoint_1.x = toPoint_1.x * matrix[0] + matrix[6];\n toPoint_1.y = toPoint_1.y * matrix[0] + matrix[7];\n var _a = _this.getGroup().getCanvasBBox(),\n minX = _a.minX,\n maxX = _a.maxX,\n minY = _a.minY,\n maxY = _a.maxY;\n var bboxPoint = {\n x: (minX + maxX) / 2,\n y: (minY + maxY) / 2\n };\n if (align === 'begin') {\n bboxPoint.x = minX;\n bboxPoint.y = minY;\n }\n _this.translate(toPoint_1.x - bboxPoint.x, toPoint_1.y - bboxPoint.y);\n });\n }\n }\n var oriLayoutCfg = Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__assign\"])({}, this.get('layout'));\n var layoutCfg = {};\n Object.assign(layoutCfg, oriLayoutCfg, cfg);\n if (cfg.pipes && !cfg.type) delete layoutCfg.type;else if (!cfg.pipes && layoutCfg.type) delete layoutCfg.pipes;\n this.set('layout', layoutCfg);\n if (!layoutController) return;\n if (layoutController.isLayoutTypeSame(layoutCfg) && layoutCfg.gpuEnabled === oriLayoutCfg.gpuEnabled) {\n // no type or same type, or switch the gpu and cpu, update layout\n layoutController.updateLayoutCfg(layoutCfg);\n } else {\n // has different type, change layout\n layoutController.changeLayout(layoutCfg);\n }\n if (stack && this.get('enabledStack')) {\n this.pushStack('layout', {\n before: oriLayoutCfg,\n after: layoutCfg\n });\n }\n };\n /**\n * 销毁布局,changeData 时不会再使用原来的布局方法对新数据进行布局\n */\n AbstractGraph.prototype.destroyLayout = function () {\n var layoutController = this.get('layoutController');\n layoutController === null || layoutController === void 0 ? void 0 : layoutController.destroyLayout();\n };\n /**\n * 重新以当前示例中配置的属性进行一次布局\n */\n AbstractGraph.prototype.layout = function () {\n var _a;\n var layoutController = this.get('layoutController');\n var layoutCfg = this.get('layout');\n if (!layoutCfg || !layoutController) return;\n if (layoutCfg.workerEnabled) {\n // 如果使用web worker布局\n layoutController.layout();\n return;\n }\n if ((_a = layoutController.layoutMethods) === null || _a === void 0 ? void 0 : _a.length) {\n layoutController.relayout(true);\n } else {\n layoutController.layout();\n }\n };\n /**\n * 收起指定的 combo\n * @param {string | ICombo} combo combo ID 或 combo item\n */\n AbstractGraph.prototype.collapseCombo = function (combo, stack) {\n var _this = this;\n if (stack === void 0) {\n stack = true;\n }\n if (this.destroyed) return;\n if (Object(_antv_util__WEBPACK_IMPORTED_MODULE_3__[\"isString\"])(combo)) {\n combo = this.findById(combo);\n }\n if (!combo) {\n console.warn('The combo to be collapsed does not exist!');\n return;\n }\n this.emit('beforecollapseexpandcombo', {\n action: 'collapse',\n item: combo\n });\n var comboModel = combo.getModel();\n var itemController = this.get('itemController');\n itemController.collapseCombo(combo, stack);\n comboModel.collapsed = true;\n // add virtual edges\n var edges = this.getEdges().concat(this.get('vedges'));\n // find all the descendant nodes and combos\n var cNodesCombos = [];\n var comboTrees = this.get('comboTrees');\n var found = false;\n (comboTrees || []).forEach(function (ctree) {\n if (found) return; // if the combo is found, terminate the forEach\n Object(_util_graphic__WEBPACK_IMPORTED_MODULE_9__[\"traverseTree\"])(ctree, function (subTree) {\n // if the combo is found and it is traversing the other branches, terminate\n if (found && subTree.depth <= comboModel.depth) return false;\n // if the combo is found\n if (comboModel.id === subTree.id) found = true;\n if (found) {\n // if the combo is found, concat the descendant nodes and combos\n var item = _this.findById(subTree.id);\n if (item && item.getType && item.getType() === 'combo') {\n cNodesCombos = cNodesCombos.concat(item.getNodes());\n cNodesCombos = cNodesCombos.concat(item.getCombos());\n }\n }\n return true;\n });\n });\n var addedVEdgeMap = {};\n edges.forEach(function (edge) {\n var _a = edge.getModel(),\n isVEdge = _a.isVEdge,\n _b = _a.size,\n size = _b === void 0 ? 1 : _b;\n if (edge.isVisible() && !isVEdge) return;\n var source = edge.getSource();\n var target = edge.getTarget();\n var otherEnd = null;\n var otherEndIsSource;\n if (source.getModel().id === comboModel.id || cNodesCombos.includes(source) && !cNodesCombos.includes(target)) {\n // source is the current combo, or descent node/combo is the source but not the target)\n otherEnd = target;\n otherEndIsSource = false;\n } else if (target.getModel().id === comboModel.id || !cNodesCombos.includes(source) && cNodesCombos.includes(target)) {\n // target is the current combo, or descent node/combo is the target but not the source)\n otherEnd = source;\n otherEndIsSource = true;\n }\n if (otherEnd) {\n if (isVEdge) {\n _this.removeItem(edge, false);\n return;\n }\n var otherEndModel = otherEnd.getModel();\n while (!otherEnd.isVisible()) {\n var otherEndPId = otherEndModel.parentId,\n otherEndCId = otherEndModel.comboId;\n var otherEndParentId = otherEndPId || otherEndCId;\n otherEnd = _this.findById(otherEndParentId);\n if (!otherEnd || !otherEndParentId) return; // all the ancestors are hidden, then ignore the edge\n otherEndModel = otherEnd.getModel();\n }\n var otherEndId = otherEndModel.id;\n var vEdgeInfo = otherEndIsSource ? {\n source: otherEndId,\n target: comboModel.id,\n size: size,\n isVEdge: true\n } : {\n source: comboModel.id,\n target: otherEndId,\n size: size,\n isVEdge: true\n };\n var key = \"\".concat(vEdgeInfo.source, \"-\").concat(vEdgeInfo.target);\n if (addedVEdgeMap[key]) {\n addedVEdgeMap[key].size += size;\n return;\n }\n addedVEdgeMap[key] = vEdgeInfo;\n }\n });\n // update the width of the virtual edges, which is the sum of merged actual edges\n // be attention that the actual edges with same endpoints but different directions will be represented by two different virtual edges\n this.addItems(Object.values(addedVEdgeMap).map(function (edgeInfo) {\n return {\n type: 'vedge',\n model: edgeInfo\n };\n }), false);\n this.emit('aftercollapseexpandcombo', {\n action: 'collapse',\n item: combo\n });\n };\n /**\n * 展开指定的 combo\n * @param {string | ICombo} combo combo ID 或 combo item\n */\n AbstractGraph.prototype.expandCombo = function (combo, stack) {\n var _this = this;\n if (stack === void 0) {\n stack = true;\n }\n if (Object(_antv_util__WEBPACK_IMPORTED_MODULE_3__[\"isString\"])(combo)) {\n combo = this.findById(combo);\n }\n if (!combo || combo.getType && combo.getType() !== 'combo') {\n console.warn('The combo to be collapsed does not exist!');\n return;\n }\n this.emit('beforecollapseexpandcombo', {\n action: 'expand',\n item: combo\n });\n var comboModel = combo.getModel();\n var itemController = this.get('itemController');\n itemController.expandCombo(combo, stack);\n comboModel.collapsed = false;\n // add virtual edges\n var edges = this.getEdges().concat(this.get('vedges'));\n // find all the descendant nodes and combos\n var cNodesCombos = [];\n var comboTrees = this.get('comboTrees');\n var found = false;\n (comboTrees || []).forEach(function (ctree) {\n if (found) return; // if the combo is found, terminate\n Object(_util_graphic__WEBPACK_IMPORTED_MODULE_9__[\"traverseTree\"])(ctree, function (subTree) {\n // if the combo is found and it is traversing the other branches, terminate\n if (found && subTree.depth <= comboModel.depth) return false;\n if (comboModel.id === subTree.id) found = true;\n if (found) {\n var item = _this.findById(subTree.id);\n if (item && item.getType && item.getType() === 'combo') {\n cNodesCombos = cNodesCombos.concat(item.getNodes());\n cNodesCombos = cNodesCombos.concat(item.getCombos());\n }\n }\n return true;\n });\n });\n var addedVEdgeMap = {};\n edges.forEach(function (edge) {\n if (edge.isVisible() && !edge.getModel().isVEdge) return;\n var source = edge.getSource();\n var target = edge.getTarget();\n var sourceId = source.get('id');\n var targetId = target.get('id');\n var otherEnd = null;\n var otherEndIsSource;\n if (sourceId === comboModel.id || cNodesCombos.includes(source) && !cNodesCombos.includes(target)) {\n // the source is in the combo, the target is not\n otherEnd = target;\n otherEndIsSource = false;\n } else if (targetId === comboModel.id || !cNodesCombos.includes(source) && cNodesCombos.includes(target)) {\n // the target is in the combo, the source is not\n otherEnd = source;\n otherEndIsSource = true;\n } else if (cNodesCombos.includes(source) && cNodesCombos.includes(target)) {\n // both source and target are in the combo, if the target and source are both visible, show the edge\n if (source.isVisible() && target.isVisible()) {\n edge.show();\n }\n }\n if (otherEnd) {\n var _a = edge.getModel(),\n isVEdge = _a.isVEdge,\n _b = _a.size,\n size = _b === void 0 ? 1 : _b;\n // ignore the virtual edges\n if (isVEdge) {\n _this.removeItem(edge, false);\n return;\n }\n var otherEndModel = otherEnd.getModel();\n // find the nearest visible ancestor\n while (!otherEnd.isVisible()) {\n var otherEndPId = otherEndModel.parentId,\n otherEndCId = otherEndModel.comboId;\n var otherEndParentId = otherEndPId || otherEndCId;\n otherEnd = _this.findById(otherEndParentId);\n if (!otherEnd || !otherEndParentId) {\n return; // if all the ancestors of the oppsite are all hidden, ignore the edge\n }\n\n otherEndModel = otherEnd.getModel();\n }\n var otherEndId = otherEndModel.id;\n var selfEnd = otherEndIsSource ? target : source;\n var selfEndModel = selfEnd.getModel();\n // find the nearest visible ancestor\n while (!selfEnd.isVisible()) {\n var selfEndPId = selfEndModel.parentId,\n selfEndCId = selfEndModel.comboId;\n var selfEndParentId = selfEndPId || selfEndCId;\n selfEnd = _this.findById(selfEndParentId);\n if (!selfEnd || !selfEndParentId) {\n return; // if all the ancestors of the oppsite are all hidden, ignore the edge\n }\n\n if (selfEndModel.comboId === comboModel.id || selfEndModel.parentId === comboModel.id) {\n break; // if the next ancestor is the combo, break the while\n }\n\n selfEndModel = selfEnd.getModel();\n }\n var selfEndId = selfEndModel.id;\n if (otherEndId) {\n var vEdgeInfo = otherEndIsSource ? {\n source: otherEndId,\n target: selfEndId,\n isVEdge: true,\n size: size\n } : {\n source: selfEndId,\n target: otherEndId,\n isVEdge: true,\n size: size\n };\n var vedgeId = \"\".concat(vEdgeInfo.source, \"-\").concat(vEdgeInfo.target);\n // update the width of the virtual edges, which is the sum of merged actual edges\n // be attention that the actual edges with same endpoints but different directions will be represented by two different virtual edges\n if (addedVEdgeMap[vedgeId]) {\n addedVEdgeMap[vedgeId].size += size;\n return;\n }\n addedVEdgeMap[vedgeId] = vEdgeInfo;\n }\n }\n });\n this.addItems(Object.values(addedVEdgeMap).map(function (edgeInfo) {\n return {\n type: 'vedge',\n model: edgeInfo\n };\n }), false);\n this.emit('aftercollapseexpandcombo', {\n action: 'expand',\n item: combo\n });\n };\n AbstractGraph.prototype.collapseExpandCombo = function (combo, stack) {\n if (stack === void 0) {\n stack = true;\n }\n if (Object(_antv_util__WEBPACK_IMPORTED_MODULE_3__[\"isString\"])(combo)) {\n combo = this.findById(combo);\n }\n if (!combo || combo.getType && combo.getType() !== 'combo') return;\n var comboModel = combo.getModel();\n // if one ancestor combo of the combo is collapsed, it should not be collapsed or expanded\n var parentItem = this.findById(comboModel.parentId);\n while (parentItem) {\n var parentModel = parentItem.getModel();\n if (parentModel.collapsed) {\n console.warn(\"Fail to expand the combo since it's ancestor combo is collapsed.\");\n parentItem = undefined;\n return;\n }\n parentItem = this.findById(parentModel.parentId);\n }\n var collapsed = comboModel.collapsed;\n // 该群组已经处于收起状态,需要展开\n if (collapsed) {\n this.expandCombo(combo, stack);\n } else {\n this.collapseCombo(combo, stack);\n }\n this.updateCombo(combo);\n };\n /**\n * 获取节点所有的邻居节点\n *\n * @param {(string | INode)} node 节点 ID 或实例\n * @returns {INode[]}\n * @memberof IAbstractGraph\n */\n AbstractGraph.prototype.getNeighbors = function (node, type) {\n var item = node;\n if (Object(_antv_util__WEBPACK_IMPORTED_MODULE_3__[\"isString\"])(node)) {\n item = this.findById(node);\n }\n return item.getNeighbors(type);\n };\n /**\n * 获取 node 的度数\n *\n * @param {(string | INode)} node 节点 ID 或实例\n * @param {('in' | 'out' | 'total' | 'all' | undefined)} 度数类型,in 入度,out 出度,total 总度数,all 返回三种类型度数的对象\n * @returns {Number | Object} 该节点的度数\n * @memberof IAbstractGraph\n */\n AbstractGraph.prototype.getNodeDegree = function (node, type, refresh) {\n if (type === void 0) {\n type = undefined;\n }\n if (refresh === void 0) {\n refresh = false;\n }\n var item = node;\n if (Object(_antv_util__WEBPACK_IMPORTED_MODULE_3__[\"isString\"])(node)) {\n item = this.findById(node);\n }\n var degrees = this.get('degrees');\n if (!degrees || refresh) {\n degrees = Object(_antv_algorithm__WEBPACK_IMPORTED_MODULE_4__[\"getDegree\"])(this.save());\n this.set('degrees', degrees);\n }\n var nodeDegrees = degrees[item.getID()];\n var res = 0;\n // 如果是通过 addItem 后面新增加的节点,此时它的所有度数都为 0\n if (!nodeDegrees) {\n return 0;\n }\n switch (type) {\n case 'in':\n res = nodeDegrees.inDegree;\n break;\n case 'out':\n res = nodeDegrees.outDegree;\n break;\n case 'all':\n res = nodeDegrees;\n break;\n default:\n res = nodeDegrees.degree;\n break;\n }\n return res;\n };\n AbstractGraph.prototype.getUndoStack = function () {\n return this.undoStack;\n };\n AbstractGraph.prototype.getRedoStack = function () {\n return this.redoStack;\n };\n /**\n * 获取 undo 和 redo 栈的数据\n */\n AbstractGraph.prototype.getStackData = function () {\n if (!this.get('enabledStack')) {\n return null;\n }\n return {\n undoStack: this.undoStack.toArray(),\n redoStack: this.redoStack.toArray()\n };\n };\n /**\n * 清空 undo stack & redo stack\n */\n AbstractGraph.prototype.clearStack = function () {\n if (this.get('enabledStack')) {\n this.undoStack.clear();\n this.redoStack.clear();\n this.emit('stackchange', {\n undoStack: this.undoStack,\n redoStack: this.redoStack\n });\n }\n };\n /**\n * 将操作类型和操作数据入栈\n * @param action 操作类型\n * @param data 入栈的数据\n * @param stackType 栈的类型\n */\n AbstractGraph.prototype.pushStack = function (action, data, stackType) {\n if (action === void 0) {\n action = 'update';\n }\n if (stackType === void 0) {\n stackType = 'undo';\n }\n if (!this.get('enabledStack')) {\n console.warn('请先启用 undo & redo 功能,在实例化 Graph 时候配置 enabledStack: true !');\n return;\n }\n var stackData = data ? Object(_antv_util__WEBPACK_IMPORTED_MODULE_3__[\"clone\"])(data) : {\n before: {},\n after: Object(_antv_util__WEBPACK_IMPORTED_MODULE_3__[\"clone\"])(this.save())\n };\n if (stackType === 'redo') {\n this.redoStack.push({\n action: action,\n data: stackData\n });\n } else {\n this.undoStack.push({\n action: action,\n data: stackData\n });\n }\n this.emit('stackchange', {\n action: action,\n stackType: stackType,\n undoStack: this.undoStack,\n redoStack: this.redoStack\n });\n };\n /**\n * 获取邻接矩阵\n *\n * @param {boolean} cache 是否使用缓存的\n * @param {boolean} directed 是否是有向图,默认取 graph.directed\n * @returns {Matrix} 邻接矩阵\n * @memberof IAbstractGraph\n */\n AbstractGraph.prototype.getAdjMatrix = function (cache, directed) {\n if (cache === void 0) {\n cache = true;\n }\n if (directed === undefined) directed = this.get('directed');\n var currentAdjMatrix = this.get('adjMatrix');\n if (!currentAdjMatrix || !cache) {\n currentAdjMatrix = Object(_antv_algorithm__WEBPACK_IMPORTED_MODULE_4__[\"getAdjMatrix\"])(this.save(), directed);\n this.set('adjMatrix', currentAdjMatrix);\n }\n return currentAdjMatrix;\n };\n /**\n * 获取最短路径矩阵\n *\n * @param {boolean} cache 是否使用缓存的\n * @param {boolean} directed 是否是有向图,默认取 graph.directed\n * @returns {Matrix} 最短路径矩阵\n * @memberof IAbstractGraph\n */\n AbstractGraph.prototype.getShortestPathMatrix = function (cache, directed) {\n if (cache === void 0) {\n cache = true;\n }\n if (directed === undefined) directed = this.get('directed');\n var currentAdjMatrix = this.get('adjMatrix');\n var currentShourtestPathMatrix = this.get('shortestPathMatrix');\n if (!currentAdjMatrix || !cache) {\n currentAdjMatrix = Object(_antv_algorithm__WEBPACK_IMPORTED_MODULE_4__[\"getAdjMatrix\"])(this.save(), directed);\n this.set('adjMatrix', currentAdjMatrix);\n }\n if (!currentShourtestPathMatrix || !cache) {\n currentShourtestPathMatrix = Object(_antv_algorithm__WEBPACK_IMPORTED_MODULE_4__[\"floydWarshall\"])(this.save(), directed);\n this.set('shortestPathMatrix', currentShourtestPathMatrix);\n }\n return currentShourtestPathMatrix;\n };\n /**\n * 重新定义监听函数,复写参数类型\n */\n AbstractGraph.prototype.on = function (eventName, callback, once) {\n return _super.prototype.on.call(this, eventName, callback, once);\n };\n /**\n * 销毁画布\n */\n AbstractGraph.prototype.destroy = function () {\n var _a, _b, _c, _d, _e;\n this.emit('beforedestroy');\n this.clear();\n // 清空栈数据\n this.clearStack();\n (_a = this.get('itemController')) === null || _a === void 0 ? void 0 : _a.destroy();\n (_b = this.get('modeController')) === null || _b === void 0 ? void 0 : _b.destroy();\n (_c = this.get('viewController')) === null || _c === void 0 ? void 0 : _c.destroy();\n (_d = this.get('stateController')) === null || _d === void 0 ? void 0 : _d.destroy();\n (_e = this.get('canvas')) === null || _e === void 0 ? void 0 : _e.destroy();\n this.cfg = null;\n this.destroyed = true;\n this.redoStack = null;\n this.undoStack = null;\n this.emit('afterdestroy');\n };\n /**\n * 创建凸包或凹包轮廓\n * @param cfg HullCfg 轮廓配置项\n */\n AbstractGraph.prototype.createHull = function (cfg) {\n if (!cfg.members || cfg.members.length < 1) {\n console.warn('Create hull failed! The members is empty.');\n return;\n }\n var parent = this.get('hullGroup');\n var hullMap = this.get('hullMap');\n if (!hullMap) {\n hullMap = {};\n this.set('hullMap', hullMap);\n }\n if (!parent || parent.get('destroyed')) {\n parent = this.get('group').addGroup({\n id: 'hullGroup'\n });\n parent.toBack();\n this.set('hullGroup', parent);\n }\n if (hullMap[cfg.id]) {\n console.warn('Existed hull id.');\n return hullMap[cfg.id];\n }\n var group = parent.addGroup({\n id: \"\".concat(cfg.id, \"-container\")\n });\n var hull = new _item_hull__WEBPACK_IMPORTED_MODULE_10__[\"default\"](this, Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__assign\"])(Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__assign\"])({}, cfg), {\n group: group\n }));\n var hullId = hull.id;\n hullMap[hullId] = hull;\n return hull;\n };\n /**\n * 获取当前 graph 中存在的包裹轮廓\n * @return {[key: string]: Hull} Hull 的 map,hullId 对应的 hull 实例\n */\n AbstractGraph.prototype.getHulls = function () {\n return this.get('hullMap');\n };\n /**\n * 根据 hullId 获取对应的 hull\n * @return Hull\n */\n AbstractGraph.prototype.getHullById = function (hullId) {\n return this.get('hullMap')[hullId];\n };\n AbstractGraph.prototype.removeHull = function (hull) {\n var _a;\n var hullInstance;\n if (Object(_antv_util__WEBPACK_IMPORTED_MODULE_3__[\"isString\"])(hull)) {\n hullInstance = this.getHullById(hull);\n } else {\n hullInstance = hull;\n }\n (_a = this.get('hullMap')) === null || _a === void 0 ? true : delete _a[hullInstance.id];\n hullInstance.destroy();\n };\n AbstractGraph.prototype.removeHulls = function () {\n var hulls = this.getHulls();\n if (!hulls || !Object.keys(hulls).length) return;\n Object.keys(hulls).forEach(function (key) {\n var hull = hulls[key];\n hull.destroy();\n });\n this.set('hullMap', {});\n };\n return AbstractGraph;\n}(_antv_event_emitter__WEBPACK_IMPORTED_MODULE_1__[\"default\"]);\n/* harmony default export */ __webpack_exports__[\"default\"] = (AbstractGraph);\n\n//# sourceURL=webpack:///./node_modules/@antv/g6-core/es/graph/graph.js?");
/***/ }),
/***/ "./node_modules/@antv/g6-core/es/index.js":
/*!************************************************!*\
!*** ./node_modules/@antv/g6-core/es/index.js ***!
\************************************************/
/*! exports provided: G6GraphEvent, Arrow, Shape, Node, Edge, Combo, Hull, Marker, registerNode, registerCombo, AbstractGraph, Util, registerEdge, registerBehavior, AbstractLayout, AbstractEvent, BaseGlobal, default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"registerNode\", function() { return registerNode; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"registerCombo\", function() { return registerCombo; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"registerEdge\", function() { return registerEdge; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"registerBehavior\", function() { return registerBehavior; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"BaseGlobal\", function() { return BaseGlobal; });\n/* harmony import */ var _behavior__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./behavior */ \"./node_modules/@antv/g6-core/es/behavior/index.js\");\n/* harmony import */ var _graph_graph__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./graph/graph */ \"./node_modules/@antv/g6-core/es/graph/graph.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"AbstractGraph\", function() { return _graph_graph__WEBPACK_IMPORTED_MODULE_1__[\"default\"]; });\n\n/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./element */ \"./node_modules/@antv/g6-core/es/element/index.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Arrow\", function() { return _element__WEBPACK_IMPORTED_MODULE_2__[\"Arrow\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Shape\", function() { return _element__WEBPACK_IMPORTED_MODULE_2__[\"default\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Marker\", function() { return _element__WEBPACK_IMPORTED_MODULE_2__[\"Marker\"]; });\n\n/* harmony import */ var _global__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./global */ \"./node_modules/@antv/g6-core/es/global.js\");\n/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./util */ \"./node_modules/@antv/g6-core/es/util/index.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Util\", function() { return _util__WEBPACK_IMPORTED_MODULE_4__[\"default\"]; });\n\n/* harmony import */ var _graph_controller_layout__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./graph/controller/layout */ \"./node_modules/@antv/g6-core/es/graph/controller/layout.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"AbstractLayout\", function() { return _graph_controller_layout__WEBPACK_IMPORTED_MODULE_5__[\"default\"]; });\n\n/* harmony import */ var _graph_controller_event__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./graph/controller/event */ \"./node_modules/@antv/g6-core/es/graph/controller/event.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"AbstractEvent\", function() { return _graph_controller_event__WEBPACK_IMPORTED_MODULE_6__[\"default\"]; });\n\n/* harmony import */ var _item_node__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./item/node */ \"./node_modules/@antv/g6-core/es/item/node.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Node\", function() { return _item_node__WEBPACK_IMPORTED_MODULE_7__[\"default\"]; });\n\n/* harmony import */ var _item_edge__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./item/edge */ \"./node_modules/@antv/g6-core/es/item/edge.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Edge\", function() { return _item_edge__WEBPACK_IMPORTED_MODULE_8__[\"default\"]; });\n\n/* harmony import */ var _item_hull__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./item/hull */ \"./node_modules/@antv/g6-core/es/item/hull.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Hull\", function() { return _item_hull__WEBPACK_IMPORTED_MODULE_9__[\"default\"]; });\n\n/* harmony import */ var _item_combo__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./item/combo */ \"./node_modules/@antv/g6-core/es/item/combo.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Combo\", function() { return _item_combo__WEBPACK_IMPORTED_MODULE_10__[\"default\"]; });\n\n/* harmony import */ var _types__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./types */ \"./node_modules/@antv/g6-core/es/types/index.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"G6GraphEvent\", function() { return _types__WEBPACK_IMPORTED_MODULE_11__[\"G6GraphEvent\"]; });\n\n\n\n\n\n\n// 用于 PC 和 Mobile 端分别实现 layout 和 updateLayoutCfg 方法\n\n\n\n\n\n\nvar registerNode = _element__WEBPACK_IMPORTED_MODULE_2__[\"default\"].registerNode;\nvar registerEdge = _element__WEBPACK_IMPORTED_MODULE_2__[\"default\"].registerEdge;\nvar registerCombo = _element__WEBPACK_IMPORTED_MODULE_2__[\"default\"].registerCombo;\nvar registerBehavior = _behavior__WEBPACK_IMPORTED_MODULE_0__[\"default\"].registerBehavior;\nvar BaseGlobal = _global__WEBPACK_IMPORTED_MODULE_3__[\"default\"];\n\n\n/* harmony default export */ __webpack_exports__[\"default\"] = ({\n version: _global__WEBPACK_IMPORTED_MODULE_3__[\"default\"].version,\n AbstractGraph: _graph_graph__WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n BaseGlobal: BaseGlobal,\n Util: _util__WEBPACK_IMPORTED_MODULE_4__[\"default\"],\n Shape: _element__WEBPACK_IMPORTED_MODULE_2__[\"default\"],\n Node: _item_node__WEBPACK_IMPORTED_MODULE_7__[\"default\"],\n Edge: _item_edge__WEBPACK_IMPORTED_MODULE_8__[\"default\"],\n Combo: _item_combo__WEBPACK_IMPORTED_MODULE_10__[\"default\"],\n Hull: _item_hull__WEBPACK_IMPORTED_MODULE_9__[\"default\"],\n registerNode: _element__WEBPACK_IMPORTED_MODULE_2__[\"default\"].registerNode,\n registerEdge: _element__WEBPACK_IMPORTED_MODULE_2__[\"default\"].registerEdge,\n registerCombo: _element__WEBPACK_IMPORTED_MODULE_2__[\"default\"].registerCombo,\n registerBehavior: _behavior__WEBPACK_IMPORTED_MODULE_0__[\"default\"].registerBehavior,\n Arrow: _element__WEBPACK_IMPORTED_MODULE_2__[\"Arrow\"],\n Marker: _element__WEBPACK_IMPORTED_MODULE_2__[\"Marker\"],\n AbstractLayout: _graph_controller_layout__WEBPACK_IMPORTED_MODULE_5__[\"default\"],\n AbstractEvent: _graph_controller_event__WEBPACK_IMPORTED_MODULE_6__[\"default\"]\n});\n\n//# sourceURL=webpack:///./node_modules/@antv/g6-core/es/index.js?");
/***/ }),
/***/ "./node_modules/@antv/g6-core/es/interface/behavior.js":
/*!*************************************************************!*\
!*** ./node_modules/@antv/g6-core/es/interface/behavior.js ***!
\*************************************************************/
/*! exports provided: G6GraphEvent */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"G6GraphEvent\", function() { return G6GraphEvent; });\n/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tslib */ \"./node_modules/tslib/tslib.es6.js\");\n/* harmony import */ var _antv_g_base__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @antv/g-base */ \"./node_modules/@antv/g-base/esm/index.js\");\n\n\nvar G6GraphEvent = /** @class */function (_super) {\n Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__extends\"])(G6GraphEvent, _super);\n function G6GraphEvent(type, event) {\n var _this = _super.call(this, type, event) || this;\n _this.item = event.item;\n _this.canvasX = event.canvasX;\n _this.canvasY = event.canvasY;\n _this.wheelDelta = event.wheelDelta;\n _this.detail = event.detail;\n return _this;\n }\n return G6GraphEvent;\n}(_antv_g_base__WEBPACK_IMPORTED_MODULE_1__[\"Event\"]);\n\n\n//# sourceURL=webpack:///./node_modules/@antv/g6-core/es/interface/behavior.js?");
/***/ }),
/***/ "./node_modules/@antv/g6-core/es/interface/graph.js":
/*!**********************************************************!*\
!*** ./node_modules/@antv/g6-core/es/interface/graph.js ***!
\**********************************************************/
/*! no exports provided */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n\n\n//# sourceURL=webpack:///./node_modules/@antv/g6-core/es/interface/graph.js?");
/***/ }),
/***/ "./node_modules/@antv/g6-core/es/interface/index.js":
/*!**********************************************************!*\
!*** ./node_modules/@antv/g6-core/es/interface/index.js ***!
\**********************************************************/
/*! exports provided: G6GraphEvent */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _graph__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./graph */ \"./node_modules/@antv/g6-core/es/interface/graph.js\");\n/* empty/unused harmony star reexport *//* harmony import */ var _behavior__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./behavior */ \"./node_modules/@antv/g6-core/es/interface/behavior.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"G6GraphEvent\", function() { return _behavior__WEBPACK_IMPORTED_MODULE_1__[\"G6GraphEvent\"]; });\n\n/* harmony import */ var _item__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./item */ \"./node_modules/@antv/g6-core/es/interface/item.js\");\n/* empty/unused harmony star reexport *//* harmony import */ var _shape__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./shape */ \"./node_modules/@antv/g6-core/es/interface/shape.js\");\n/* empty/unused harmony star reexport */\n\n\n\n\n//# sourceURL=webpack:///./node_modules/@antv/g6-core/es/interface/index.js?");
/***/ }),
/***/ "./node_modules/@antv/g6-core/es/interface/item.js":
/*!*********************************************************!*\
!*** ./node_modules/@antv/g6-core/es/interface/item.js ***!
\*********************************************************/
/*! no exports provided */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n\n\n//# sourceURL=webpack:///./node_modules/@antv/g6-core/es/interface/item.js?");
/***/ }),
/***/ "./node_modules/@antv/g6-core/es/interface/shape.js":
/*!**********************************************************!*\
!*** ./node_modules/@antv/g6-core/es/interface/shape.js ***!
\**********************************************************/
/*! no exports provided */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n\n\n//# sourceURL=webpack:///./node_modules/@antv/g6-core/es/interface/shape.js?");
/***/ }),
/***/ "./node_modules/@antv/g6-core/es/item/combo.js":
/*!*****************************************************!*\
!*** ./node_modules/@antv/g6-core/es/item/combo.js ***!
\*****************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tslib */ \"./node_modules/tslib/tslib.es6.js\");\n/* harmony import */ var _node__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./node */ \"./node_modules/@antv/g6-core/es/item/node.js\");\n/* harmony import */ var _global__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../global */ \"./node_modules/@antv/g6-core/es/global.js\");\n/* harmony import */ var _util_graphic__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../util/graphic */ \"./node_modules/@antv/g6-core/es/util/graphic.js\");\n/* harmony import */ var _antv_util__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @antv/util */ \"./node_modules/@antv/util/esm/index.js\");\n\n\n\n\n\nvar CACHE_BBOX = 'bboxCache';\nvar CACHE_CANVAS_BBOX = 'bboxCanvasCache';\nvar CACHE_SIZE = 'sizeCache';\nvar CACHE_ANCHOR_POINTS = 'anchorPointsCache';\nvar Combo = /** @class */function (_super) {\n Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__extends\"])(Combo, _super);\n function Combo() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n Combo.prototype.getDefaultCfg = function () {\n return {\n type: 'combo',\n nodes: [],\n edges: [],\n combos: []\n };\n };\n Combo.prototype.getShapeCfg = function (model) {\n var styles = this.get('styles');\n var bbox = this.get('bbox');\n if (styles && bbox) {\n // merge graph的item样式与数据模型中的样式\n var newModel = model;\n var modelSize = Object(_antv_util__WEBPACK_IMPORTED_MODULE_4__[\"isNumber\"])(model.size) ? [model.size, model.size] : model.size;\n var modelFixSize = Object(_antv_util__WEBPACK_IMPORTED_MODULE_4__[\"isNumber\"])(model.fixSize) ? [model.fixSize, model.fixSize] : model.fixSize;\n var useModelSize = modelSize || modelFixSize || _global__WEBPACK_IMPORTED_MODULE_2__[\"default\"].defaultCombo.size;\n var size = {\n r: (Math.max(bbox.width, bbox.height) || Math.max(useModelSize[0], useModelSize[1])) / 2,\n width: bbox.width || useModelSize[0],\n height: bbox.height || useModelSize[1]\n };\n newModel.style = Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__assign\"])(Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__assign\"])(Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__assign\"])({}, styles), model.style), size);\n var padding = model.padding || _global__WEBPACK_IMPORTED_MODULE_2__[\"default\"].defaultCombo.padding;\n if (Object(_antv_util__WEBPACK_IMPORTED_MODULE_4__[\"isNumber\"])(padding)) {\n size.r += padding;\n size.width += padding * 2;\n size.height += padding * 2;\n } else {\n size.r = size.r + Math.max.apply(Math, padding);\n size.width += padding[1] + padding[3] || padding[1] * 2;\n size.height += padding[0] + padding[2] || padding[0] * 2;\n }\n this.set(CACHE_SIZE, size);\n return newModel;\n }\n return model;\n };\n /**\n * 根据 keyshape 计算包围盒\n */\n Combo.prototype.calculateCanvasBBox = function () {\n if (this.destroyed) return;\n var keyShape = this.get('keyShape');\n var group = this.get('group');\n var cacheBBox = this.get(CACHE_BBOX) || {};\n var oriX = cacheBBox.x;\n var oriY = cacheBBox.x;\n var cacheSize = this.get(CACHE_SIZE);\n // 因为 group 可能会移动,所以必须通过父元素计算才能计算出正确的包围盒\n var bbox = Object(_util_graphic__WEBPACK_IMPORTED_MODULE_3__[\"getBBox\"])(keyShape, group);\n bbox.centerX = (bbox.minX + bbox.maxX) / 2;\n bbox.centerY = (bbox.minY + bbox.maxY) / 2;\n if (cacheSize) {\n cacheSize.width = Math.max(cacheSize.width, bbox.width);\n cacheSize.height = Math.max(cacheSize.height, bbox.height);\n this.set(CACHE_SIZE, cacheSize);\n var type = keyShape.get('type');\n if (type === 'circle') {\n bbox.width = cacheSize.r * 2;\n bbox.height = cacheSize.r * 2;\n } else {\n bbox.width = cacheSize.width;\n bbox.height = cacheSize.height;\n }\n bbox.minX = bbox.centerX - bbox.width / 2;\n bbox.minY = bbox.centerY - bbox.height / 2;\n bbox.maxX = bbox.centerX + bbox.width / 2;\n bbox.maxY = bbox.centerY + bbox.height / 2;\n } else {\n bbox.width = bbox.maxX - bbox.minX;\n bbox.height = bbox.maxY - bbox.minY;\n bbox.centerX = (bbox.minX + bbox.maxX) / 2;\n bbox.centerY = (bbox.minY + bbox.maxY) / 2;\n }\n bbox.x = bbox.minX;\n bbox.y = bbox.minY;\n if (bbox.x !== oriX || bbox.y !== oriY) this.set(CACHE_ANCHOR_POINTS, null);\n return bbox;\n };\n /**\n * 获取 Combo 中所有的子元素,包括 Combo、Node 及 Edge\n */\n Combo.prototype.getChildren = function () {\n var self = this;\n return {\n nodes: self.getNodes(),\n combos: self.getCombos()\n };\n };\n /**\n * 获取 Combo 中所有子节点\n */\n Combo.prototype.getNodes = function () {\n var self = this;\n return self.get('nodes');\n };\n /**\n * 获取 Combo 中所有子 combo\n */\n Combo.prototype.getCombos = function () {\n var self = this;\n return self.get('combos');\n };\n /**\n * 向 Combo 中增加子 combo 或 node\n * @param item Combo 或节点实例\n * @return boolean 添加成功返回 true,否则返回 false\n */\n Combo.prototype.addChild = function (item) {\n var self = this;\n var itemType = item.getType();\n switch (itemType) {\n case 'node':\n self.addNode(item);\n break;\n case 'combo':\n self.addCombo(item);\n break;\n default:\n console.warn('Only node or combo items are allowed to be added into a combo');\n return false;\n }\n return true;\n };\n /**\n * 向 Combo 中增加 combo\n * @param combo Combo 实例\n * @return boolean 添加成功返回 true,否则返回 false\n */\n Combo.prototype.addCombo = function (combo) {\n var self = this;\n self.get('combos').push(combo);\n return true;\n };\n /**\n * 向 Combo 中添加节点\n * @param node 节点实例\n * @return boolean 添加成功返回 true,否则返回 false\n */\n Combo.prototype.addNode = function (node) {\n var self = this;\n self.get('nodes').push(node);\n return true;\n };\n /**\n * 向 Combo 中增加子 combo 或 node\n * @param item Combo 或节点实例\n * @return boolean 添加成功返回 true,否则返回 false\n */\n Combo.prototype.removeChild = function (item) {\n var self = this;\n var itemType = item.getType();\n switch (itemType) {\n case 'node':\n self.removeNode(item);\n break;\n case 'combo':\n self.removeCombo(item);\n break;\n default:\n console.warn('Only node or combo items are allowed to be added into a combo');\n return false;\n }\n return true;\n };\n /**\n * 从 Combo 中移除指定的 combo\n * @param combo Combo 实例\n * @return boolean 移除成功返回 true,否则返回 false\n */\n Combo.prototype.removeCombo = function (combo) {\n if (!combo) return;\n var combos = this.getCombos();\n var index = combos.indexOf(combo);\n if (index > -1) {\n combos.splice(index, 1);\n return true;\n }\n return false;\n };\n /**\n * 向 Combo 中移除指定的节点\n * @param node 节点实例\n * @return boolean 移除成功返回 true,否则返回 false\n */\n Combo.prototype.removeNode = function (node) {\n if (!node) return;\n var nodes = this.getNodes();\n var index = nodes.indexOf(node);\n if (index > -1) {\n nodes.splice(index, 1);\n return true;\n }\n return false;\n };\n Combo.prototype.getUpdateType = function (cfg) {\n return undefined;\n };\n /**\n * 获取 item 的包围盒,这个包围盒是相对于 item 自己,不会将 matrix 计算在内\n * @return {Object} 包含 x,y,width,height, centerX, centerY\n */\n Combo.prototype.getBBox = function () {\n this.set(CACHE_CANVAS_BBOX, null);\n var bbox = this.calculateCanvasBBox();\n return bbox;\n };\n Combo.prototype.clearCache = function () {\n this.set(CACHE_BBOX, null); // 清理缓存的 bbox\n this.set(CACHE_CANVAS_BBOX, null);\n this.set(CACHE_ANCHOR_POINTS, null);\n };\n Combo.prototype.destroy = function () {\n if (!this.destroyed) {\n var animate = this.get('animate');\n var group = this.get('group');\n if (animate) {\n group.stopAnimate();\n }\n group['shapeMap'] = {};\n this.clearCache();\n this.set(CACHE_SIZE, null);\n this.set('bbox', null);\n group.remove();\n this._cfg = null;\n this.destroyed = true;\n }\n };\n return Combo;\n}(_node__WEBPACK_IMPORTED_MODULE_1__[\"default\"]);\n/* harmony default export */ __webpack_exports__[\"default\"] = (Combo);\n\n//# sourceURL=webpack:///./node_modules/@antv/g6-core/es/item/combo.js?");
/***/ }),
/***/ "./node_modules/@antv/g6-core/es/item/edge.js":
/*!****************************************************!*\
!*** ./node_modules/@antv/g6-core/es/item/edge.js ***!
\****************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tslib */ \"./node_modules/tslib/tslib.es6.js\");\n/* harmony import */ var _antv_util__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @antv/util */ \"./node_modules/@antv/util/esm/index.js\");\n/* harmony import */ var _item__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./item */ \"./node_modules/@antv/g6-core/es/item/item.js\");\n\n\n\nvar END_MAP = {\n source: 'start',\n target: 'end'\n};\nvar ITEM_NAME_SUFFIX = 'Node'; // 端点的后缀,如 sourceNode, targetNode\nvar POINT_NAME_SUFFIX = 'Point'; // 起点或者结束点的后缀,如 startPoint, endPoint\nvar ANCHOR_NAME_SUFFIX = 'Anchor';\nvar Edge = /** @class */function (_super) {\n Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__extends\"])(Edge, _super);\n function Edge() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n Edge.prototype.getDefaultCfg = function () {\n return {\n type: 'edge',\n sourceNode: null,\n targetNode: null,\n startPoint: null,\n endPoint: null,\n linkCenter: false\n };\n };\n Edge.prototype.setEnd = function (name, value) {\n var pointName = END_MAP[name] + POINT_NAME_SUFFIX;\n var itemName = name + ITEM_NAME_SUFFIX;\n var preItem = this.get(itemName);\n if (preItem && !preItem.destroyed) {\n // 如果之前存在节点,则移除掉边\n preItem.removeEdge(this);\n }\n if (Object(_antv_util__WEBPACK_IMPORTED_MODULE_1__[\"isPlainObject\"])(value)) {\n // 如果设置成具体的点,则清理节点\n this.set(pointName, value);\n this.set(itemName, null);\n } else if (value) {\n value.addEdge(this);\n this.set(itemName, value);\n this.set(pointName, null);\n }\n };\n /**\n * 获取连接点的坐标\n * @param name source | target\n * @param model 边的数据模型\n * @param controlPoints 控制点\n */\n Edge.prototype.getLinkPoint = function (name, model, controlPoints) {\n var pointName = END_MAP[name] + POINT_NAME_SUFFIX;\n var itemName = name + ITEM_NAME_SUFFIX;\n var point = this.get(pointName);\n if (!point) {\n var item = this.get(itemName);\n var anchorName = name + ANCHOR_NAME_SUFFIX;\n var prePoint = this.getPrePoint(name, controlPoints);\n var anchorIndex = model[anchorName];\n if (!Object(_antv_util__WEBPACK_IMPORTED_MODULE_1__[\"isNil\"])(anchorIndex)) {\n // 如果有锚点,则使用锚点索引获取连接点\n point = item.getLinkPointByAnchor(anchorIndex);\n }\n // 如果锚点没有对应的点或者没有锚点,则直接计算连接点\n point = point || item.getLinkPoint(prePoint);\n if (!Object(_antv_util__WEBPACK_IMPORTED_MODULE_1__[\"isNil\"])(point.index)) {\n this.set(\"\".concat(name, \"AnchorIndex\"), point.index);\n }\n }\n return point;\n };\n /**\n * 获取同端点进行连接的点,计算交汇点\n * @param name\n * @param controlPoints\n */\n Edge.prototype.getPrePoint = function (name, controlPoints) {\n if (controlPoints && controlPoints.length) {\n var index = name === 'source' ? 0 : controlPoints.length - 1;\n return controlPoints[index];\n }\n var oppositeName = name === 'source' ? 'target' : 'source'; // 取另一个节点的位置\n return this.getEndPoint(oppositeName);\n };\n /**\n * 获取端点的位置\n * @param name\n */\n Edge.prototype.getEndPoint = function (name) {\n var itemName = name + ITEM_NAME_SUFFIX;\n var pointName = END_MAP[name] + POINT_NAME_SUFFIX;\n var item = this.get(itemName);\n // 如果有端点,直接使用 model\n if (item && !item.destroyed) {\n return item.get('model');\n } // 否则直接使用点\n return this.get(pointName);\n };\n /**\n * 通过端点的中心获取控制点\n * @param model\n */\n Edge.prototype.getControlPointsByCenter = function (model) {\n var sourcePoint = this.getEndPoint('source');\n var targetPoint = this.getEndPoint('target');\n var shapeFactory = this.get('shapeFactory');\n var type = model.type;\n return shapeFactory.getControlPoints(type, {\n startPoint: sourcePoint,\n endPoint: targetPoint\n });\n };\n Edge.prototype.getEndCenter = function (name) {\n var itemName = name + ITEM_NAME_SUFFIX;\n var pointName = END_MAP[name] + POINT_NAME_SUFFIX;\n var item = this.get(itemName);\n // 如果有端点,直接使用 model\n if (item) {\n var bbox = item.getBBox();\n return {\n x: bbox.centerX,\n y: bbox.centerY\n };\n } // 否则直接使用点\n return this.get(pointName);\n };\n Edge.prototype.init = function () {\n _super.prototype.init.call(this);\n // 初始化两个端点\n this.setSource(this.get('source'));\n this.setTarget(this.get('target'));\n };\n Edge.prototype.getShapeCfg = function (model, updateType) {\n var self = this;\n var linkCenter = self.get('linkCenter'); // 如果连接到中心,忽视锚点、忽视控制点\n var cfg = (updateType === null || updateType === void 0 ? void 0 : updateType.includes('move')) ? model : _super.prototype.getShapeCfg.call(this, model);\n if (linkCenter) {\n cfg.startPoint = self.getEndCenter('source');\n cfg.endPoint = self.getEndCenter('target');\n } else {\n var controlPoints = cfg.controlPoints || self.getControlPointsByCenter(cfg);\n cfg.startPoint = self.getLinkPoint('source', model, controlPoints);\n cfg.endPoint = self.getLinkPoint('target', model, controlPoints);\n }\n cfg.sourceNode = self.get('sourceNode');\n cfg.targetNode = self.get('targetNode');\n return cfg;\n };\n /**\n * 获取边的数据模型\n */\n Edge.prototype.getModel = function () {\n var out = this.get('model');\n var sourceItem = this.get(\"source\".concat(ITEM_NAME_SUFFIX));\n var targetItem = this.get(\"target\".concat(ITEM_NAME_SUFFIX));\n if (sourceItem) {\n delete out[\"source\".concat(ITEM_NAME_SUFFIX)];\n } else {\n out.source = this.get(\"start\".concat(POINT_NAME_SUFFIX));\n }\n if (targetItem) {\n delete out[\"target\".concat(ITEM_NAME_SUFFIX)];\n } else {\n out.target = this.get(\"end\".concat(POINT_NAME_SUFFIX));\n }\n if (!Object(_antv_util__WEBPACK_IMPORTED_MODULE_1__[\"isString\"])(out.source) && !Object(_antv_util__WEBPACK_IMPORTED_MODULE_1__[\"isPlainObject\"])(out.source)) {\n out.source = out.source.getID();\n }\n if (!Object(_antv_util__WEBPACK_IMPORTED_MODULE_1__[\"isString\"])(out.target) && !Object(_antv_util__WEBPACK_IMPORTED_MODULE_1__[\"isPlainObject\"])(out.target)) {\n out.target = out.target.getID();\n }\n return out;\n };\n Edge.prototype.setSource = function (source) {\n this.setEnd('source', source);\n this.set('source', source);\n };\n Edge.prototype.setTarget = function (target) {\n this.setEnd('target', target);\n this.set('target', target);\n };\n Edge.prototype.getSource = function () {\n return this.get('source');\n };\n Edge.prototype.getTarget = function () {\n return this.get('target');\n };\n Edge.prototype.updatePosition = function () {\n return false;\n };\n /**\n * 边不需要重计算容器位置,直接重新计算 path 位置\n * @param {object} cfg 待更新数据\n */\n Edge.prototype.update = function (cfg, updateType) {\n if (updateType === void 0) {\n updateType = undefined;\n }\n var model = this.get('model');\n var oriVisible = model.visible;\n var cfgVisible = cfg.visible;\n if (oriVisible !== cfgVisible && cfgVisible !== undefined) this.changeVisibility(cfgVisible);\n var sourceItem = this.get('source');\n var targetItem = this.get('target');\n if (!sourceItem || sourceItem.destroyed || !targetItem || targetItem.destroyed) return;\n var styles = this.get('styles');\n if (cfg.stateStyles) {\n // 更新 item 时更新 this.get('styles') 中的值\n var stateStyles = cfg.stateStyles;\n Object(_antv_util__WEBPACK_IMPORTED_MODULE_1__[\"mix\"])(styles, stateStyles);\n delete cfg.stateStyles;\n }\n Object.assign(model, cfg);\n this.updateShape(updateType);\n this.afterUpdate();\n this.clearCache();\n };\n Edge.prototype.destroy = function () {\n var sourceItem = this.get(\"source\".concat(ITEM_NAME_SUFFIX));\n var targetItem = this.get(\"target\".concat(ITEM_NAME_SUFFIX));\n if (sourceItem && !sourceItem.destroyed) {\n sourceItem.removeEdge(this);\n }\n if (targetItem && !targetItem.destroyed) {\n targetItem.removeEdge(this);\n }\n _super.prototype.destroy.call(this);\n };\n return Edge;\n}(_item__WEBPACK_IMPORTED_MODULE_2__[\"default\"]);\n/* harmony default export */ __webpack_exports__[\"default\"] = (Edge);\n\n//# sourceURL=webpack:///./node_modules/@antv/g6-core/es/item/edge.js?");
/***/ }),
/***/ "./node_modules/@antv/g6-core/es/item/hull.js":
/*!****************************************************!*\
!*** ./node_modules/@antv/g6-core/es/item/hull.js ***!
\****************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tslib */ \"./node_modules/tslib/tslib.es6.js\");\n/* harmony import */ var _antv_util__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @antv/util */ \"./node_modules/@antv/util/esm/index.js\");\n/* harmony import */ var _antv_path_util__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @antv/path-util */ \"./node_modules/@antv/path-util/esm/index.js\");\n/* harmony import */ var _util_path__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../util/path */ \"./node_modules/@antv/g6-core/es/util/path.js\");\n/* harmony import */ var _util_math__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../util/math */ \"./node_modules/@antv/g6-core/es/util/math.js\");\n/* harmony import */ var _element_hull_convexHull__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../element/hull/convexHull */ \"./node_modules/@antv/g6-core/es/element/hull/convexHull.js\");\n/* harmony import */ var _element_hull_bubbleset__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../element/hull/bubbleset */ \"./node_modules/@antv/g6-core/es/element/hull/bubbleset.js\");\n\n\n\n\n\n\n\n/**\n * 用于包裹内部的成员的轮廓。\n * convex hull(凸包):http://geomalgorithms.com/a10-_hull-1.html#Monotone%20Chain\n * bubble: 使用 bubbleset算法,refer: http://vialab.science.uoit.ca/wp-content/papercite-data/pdf/col2009c.pdf\n * 通过配置 padding 可以调节包裹轮廓对节点的松紧程度\n */\nvar Hull = /** @class */function () {\n function Hull(graph, cfg) {\n this.cfg = Object(_antv_util__WEBPACK_IMPORTED_MODULE_1__[\"deepMix\"])(this.getDefaultCfg(), cfg);\n this.graph = graph;\n this.id = this.cfg.id;\n this.group = this.cfg.group;\n this.members = this.cfg.members.map(function (item) {\n return Object(_antv_util__WEBPACK_IMPORTED_MODULE_1__[\"isString\"])(item) ? graph.findById(item) : item;\n });\n this.nonMembers = this.cfg.nonMembers.map(function (item) {\n return Object(_antv_util__WEBPACK_IMPORTED_MODULE_1__[\"isString\"])(item) ? graph.findById(item) : item;\n });\n this.setPadding();\n this.setType();\n this.path = this.calcPath(this.members, this.nonMembers);\n this.render();\n }\n Hull.prototype.getDefaultCfg = function () {\n return {\n id: 'g6-hull',\n type: 'round-convex',\n members: [],\n nonMembers: [],\n style: {\n fill: 'lightblue',\n stroke: 'blue',\n opacity: 0.2\n },\n padding: 10\n };\n };\n Hull.prototype.setPadding = function () {\n var nodeSize = this.members.length && this.members[0].getKeyShape().getCanvasBBox().width / 2;\n this.padding = this.cfg.padding > 0 ? this.cfg.padding + nodeSize : 10 + nodeSize;\n this.cfg.bubbleCfg = {\n nodeR0: this.padding - nodeSize,\n nodeR1: this.padding - nodeSize,\n morphBuffer: this.padding - nodeSize\n };\n };\n Hull.prototype.setType = function () {\n this.type = this.cfg.type;\n if (this.members.length < 3) {\n this.type = 'round-convex';\n }\n if (this.type !== 'round-convex' && this.type !== 'smooth-convex' && this.type !== 'bubble') {\n console.warn('The hull type should be either round-convex, smooth-convex or bubble, round-convex is used by default.');\n this.type = 'round-convex';\n }\n };\n Hull.prototype.calcPath = function (members, nonMembers) {\n var contour, path, hull;\n switch (this.type) {\n case 'round-convex':\n contour = Object(_element_hull_convexHull__WEBPACK_IMPORTED_MODULE_5__[\"genConvexHull\"])(members);\n hull = Object(_util_path__WEBPACK_IMPORTED_MODULE_3__[\"roundedHull\"])(contour.map(function (p) {\n return [p.x, p.y];\n }), this.padding);\n path = Object(_antv_path_util__WEBPACK_IMPORTED_MODULE_2__[\"parsePathString\"])(hull);\n break;\n case 'smooth-convex':\n contour = Object(_element_hull_convexHull__WEBPACK_IMPORTED_MODULE_5__[\"genConvexHull\"])(members);\n if (contour.length === 2) {\n hull = Object(_util_path__WEBPACK_IMPORTED_MODULE_3__[\"roundedHull\"])(contour.map(function (p) {\n return [p.x, p.y];\n }), this.padding);\n path = Object(_antv_path_util__WEBPACK_IMPORTED_MODULE_2__[\"parsePathString\"])(hull);\n } else if (contour.length > 2) {\n hull = Object(_util_path__WEBPACK_IMPORTED_MODULE_3__[\"paddedHull\"])(contour.map(function (p) {\n return [p.x, p.y];\n }), this.padding);\n path = Object(_util_path__WEBPACK_IMPORTED_MODULE_3__[\"getClosedSpline\"])(hull);\n }\n break;\n case 'bubble':\n contour = Object(_element_hull_bubbleset__WEBPACK_IMPORTED_MODULE_6__[\"genBubbleSet\"])(members, nonMembers, this.cfg.bubbleCfg);\n path = contour.length >= 2 && Object(_util_path__WEBPACK_IMPORTED_MODULE_3__[\"getClosedSpline\"])(contour);\n break;\n default:\n }\n return path;\n };\n Hull.prototype.render = function () {\n this.group.addShape('path', {\n attrs: Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__assign\"])({\n path: this.path\n }, this.cfg.style),\n id: this.id,\n name: this.cfg.id,\n capture: false\n });\n this.group.toBack();\n };\n /**\n * 增加hull的成员,同时如果该成员原先在nonMembers中,则从nonMembers中去掉\n * @param item 节点实例\n * @return boolean 添加成功返回 true,否则返回 false\n */\n Hull.prototype.addMember = function (item) {\n if (!item) return;\n if (Object(_antv_util__WEBPACK_IMPORTED_MODULE_1__[\"isString\"])(item)) item = this.graph.findById(item);\n this.members.push(item);\n var index = this.nonMembers.indexOf(item);\n if (index > -1) {\n this.nonMembers.splice(index, 1);\n }\n this.updateData(this.members, this.nonMembers);\n return true;\n };\n /**\n * 增加hull需要排除的节点,同时如果该成员原先在members中,则从members中去掉\n * @param item 节点实例\n * @return boolean 添加成功返回 true,否则返回 false\n */\n Hull.prototype.addNonMember = function (item) {\n if (!item) return;\n if (Object(_antv_util__WEBPACK_IMPORTED_MODULE_1__[\"isString\"])(item)) item = this.graph.findById(item);\n this.nonMembers.push(item);\n var index = this.members.indexOf(item);\n if (index > -1) {\n this.members.splice(index, 1);\n }\n this.updateData(this.members, this.nonMembers);\n return true;\n };\n /**\n * 移除hull中的成员\n * @param node 节点实例\n * @return boolean 移除成功返回 true,否则返回 false\n */\n Hull.prototype.removeMember = function (item) {\n if (!item) return;\n if (Object(_antv_util__WEBPACK_IMPORTED_MODULE_1__[\"isString\"])(item)) item = this.graph.findById(item);\n var index = this.members.indexOf(item);\n if (index > -1) {\n this.members.splice(index, 1);\n this.updateData(this.members, this.nonMembers);\n return true;\n }\n return false;\n };\n /**\n * @param node 节点实例\n * @return boolean 移除成功返回 true,否则返回 false\n */\n Hull.prototype.removeNonMember = function (item) {\n if (!item) return;\n if (Object(_antv_util__WEBPACK_IMPORTED_MODULE_1__[\"isString\"])(item)) item = this.graph.findById(item);\n var index = this.nonMembers.indexOf(item);\n if (index > -1) {\n this.nonMembers.splice(index, 1);\n this.updateData(this.members, this.nonMembers);\n return true;\n }\n return false;\n };\n Hull.prototype.updateData = function (members, nonMembers) {\n var _this = this;\n this.group.findById(this.id).remove();\n if (members) this.members = members.map(function (item) {\n return Object(_antv_util__WEBPACK_IMPORTED_MODULE_1__[\"isString\"])(item) ? _this.graph.findById(item) : item;\n });\n if (nonMembers) this.nonMembers = nonMembers.map(function (item) {\n return Object(_antv_util__WEBPACK_IMPORTED_MODULE_1__[\"isString\"])(item) ? _this.graph.findById(item) : item;\n });\n this.path = this.calcPath(this.members, this.nonMembers);\n this.render();\n };\n Hull.prototype.updateStyle = function (cfg) {\n var path = this.group.findById(this.id);\n path.attr(Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__assign\"])({}, cfg));\n };\n /**\n * 更新 hull\n * @param cfg hull 配置项\n */\n Hull.prototype.updateCfg = function (cfg) {\n var _this = this;\n this.cfg = Object(_antv_util__WEBPACK_IMPORTED_MODULE_1__[\"deepMix\"])(this.cfg, cfg);\n this.id = this.cfg.id;\n this.group = this.cfg.group;\n if (cfg.members) {\n this.members = this.cfg.members.map(function (item) {\n return Object(_antv_util__WEBPACK_IMPORTED_MODULE_1__[\"isString\"])(item) ? _this.graph.findById(item) : item;\n });\n }\n if (cfg.nonMembers) {\n this.nonMembers = this.cfg.nonMembers.map(function (item) {\n return Object(_antv_util__WEBPACK_IMPORTED_MODULE_1__[\"isString\"])(item) ? _this.graph.findById(item) : item;\n });\n }\n // TODO padding 设置太大,会影响到 contain 结果\n this.setPadding();\n this.setType();\n this.path = this.calcPath(this.members, this.nonMembers);\n this.render();\n };\n /**\n * 判断是否在hull内部\n * @param item\n */\n Hull.prototype.contain = function (item) {\n var _this = this;\n var nodeItem;\n if (Object(_antv_util__WEBPACK_IMPORTED_MODULE_1__[\"isString\"])(item)) {\n nodeItem = this.graph.findById(item);\n } else {\n nodeItem = item;\n }\n var shapePoints;\n var shape = nodeItem.getKeyShape();\n if (nodeItem.get('type') === 'path') {\n shapePoints = Object(_util_path__WEBPACK_IMPORTED_MODULE_3__[\"pathToPoints\"])(shape.attr('path'));\n } else {\n var shapeBBox = shape.getCanvasBBox();\n shapePoints = [[shapeBBox.minX, shapeBBox.minY], [shapeBBox.maxX, shapeBBox.minY], [shapeBBox.maxX, shapeBBox.maxY], [shapeBBox.minX, shapeBBox.maxY]];\n }\n shapePoints = shapePoints.map(function (canvasPoint) {\n var point = _this.graph.getPointByCanvas(canvasPoint[0], canvasPoint[1]);\n return [point.x, point.y];\n });\n return Object(_util_math__WEBPACK_IMPORTED_MODULE_4__[\"isPolygonsIntersect\"])(shapePoints, Object(_util_path__WEBPACK_IMPORTED_MODULE_3__[\"pathToPoints\"])(this.path));\n };\n Hull.prototype.destroy = function () {\n this.group.remove();\n this.cfg = null;\n };\n return Hull;\n}();\n/* harmony default export */ __webpack_exports__[\"default\"] = (Hull);\n\n//# sourceURL=webpack:///./node_modules/@antv/g6-core/es/item/hull.js?");
/***/ }),
/***/ "./node_modules/@antv/g6-core/es/item/item.js":
/*!****************************************************!*\
!*** ./node_modules/@antv/g6-core/es/item/item.js ***!
\****************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tslib */ \"./node_modules/tslib/tslib.es6.js\");\n/* harmony import */ var _antv_util__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @antv/util */ \"./node_modules/@antv/util/esm/index.js\");\n/* harmony import */ var _element_shape__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../element/shape */ \"./node_modules/@antv/g6-core/es/element/shape.js\");\n/* harmony import */ var _util_graphic__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../util/graphic */ \"./node_modules/@antv/g6-core/es/util/graphic.js\");\n/* harmony import */ var _util_math__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../util/math */ \"./node_modules/@antv/g6-core/es/util/math.js\");\n/* harmony import */ var _util_base__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../util/base */ \"./node_modules/@antv/g6-core/es/util/base.js\");\n\n\n\n\n\n\nvar CACHE_BBOX = 'bboxCache';\nvar CACHE_CANVAS_BBOX = 'bboxCanvasCache';\nvar ARROWS = ['startArrow', 'endArrow'];\nvar ItemBase = /** @class */function () {\n function ItemBase(cfg) {\n this._cfg = {};\n this.destroyed = false;\n // 是否开启优化,由 graph 根据当前图上节点数量来控制\n this.optimize = false;\n var defaultCfg = {\n /**\n * id\n * @type {string}\n */\n id: undefined,\n /**\n * 类型\n * @type {string}\n */\n type: 'item',\n /**\n * data model\n * @type {object}\n */\n model: {},\n /**\n * g group\n * @type {G.Group}\n */\n group: undefined,\n /**\n * is open animate\n * @type {boolean}\n */\n animate: false,\n /**\n * visible - not group visible\n * @type {boolean}\n */\n visible: true,\n /**\n * locked - lock node\n * @type {boolean}\n */\n locked: false,\n /**\n * capture event\n * @type {boolean}\n */\n event: true,\n /**\n * key shape to calculate item's bbox\n * @type object\n */\n keyShape: undefined,\n /**\n * item's states, such as selected or active\n * @type Array\n */\n states: []\n };\n this._cfg = Object.assign(defaultCfg, this.getDefaultCfg(), cfg);\n var model = this.get('model');\n var id = model.id;\n var itemType = this.get('type');\n if (typeof id === 'undefined') {\n id = Object(_util_base__WEBPACK_IMPORTED_MODULE_5__[\"uniqueId\"])(itemType);\n } else if (typeof id !== 'string') {\n id = String(id);\n }\n this.get('model').id = id;\n this.set('id', id);\n var group = cfg.group;\n if (group) {\n group.set('item', this);\n group.set('id', id);\n }\n this.init();\n this.draw();\n var shapeType = model.shape || model.type || (itemType === 'edge' ? 'line' : 'circle');\n var shapeFactory = this.get('shapeFactory');\n if (shapeFactory && shapeFactory[shapeType]) {\n var options = shapeFactory[shapeType].options;\n // merge the stateStyles from item and shape\n if (options && options.stateStyles) {\n var styles = this.get('styles') || model.stateStyles;\n styles = Object(_antv_util__WEBPACK_IMPORTED_MODULE_1__[\"deepMix\"])({}, options.stateStyles, styles);\n this.set('styles', styles);\n }\n }\n }\n /**\n * 根据 keyshape 计算包围盒\n */\n ItemBase.prototype.calculateBBox = function () {\n var keyShape = this.get('keyShape');\n var group = this.get('group');\n // 因为 group 可能会移动,所以必须通过父元素计算才能计算出正确的包围盒\n var bbox = Object(_util_graphic__WEBPACK_IMPORTED_MODULE_3__[\"getBBox\"])(keyShape, group);\n bbox.x = bbox.minX;\n bbox.y = bbox.minY;\n bbox.width = bbox.maxX - bbox.minX;\n bbox.height = bbox.maxY - bbox.minY;\n bbox.centerX = (bbox.minX + bbox.maxX) / 2;\n bbox.centerY = (bbox.minY + bbox.maxY) / 2;\n return bbox;\n };\n /**\n * 根据 keyshape 计算包围盒\n */\n ItemBase.prototype.calculateCanvasBBox = function () {\n var keyShape = this.get('keyShape');\n var group = this.get('group');\n // 因为 group 可能会移动,所以必须通过父元素计算才能计算出正确的包围盒\n var bbox = Object(_util_graphic__WEBPACK_IMPORTED_MODULE_3__[\"getBBox\"])(keyShape, group);\n bbox.x = bbox.minX;\n bbox.y = bbox.minY;\n bbox.width = bbox.maxX - bbox.minX;\n bbox.height = bbox.maxY - bbox.minY;\n bbox.centerX = (bbox.minX + bbox.maxX) / 2;\n bbox.centerY = (bbox.minY + bbox.maxY) / 2;\n return bbox;\n };\n /**\n * draw shape\n */\n ItemBase.prototype.drawInner = function () {\n var self = this;\n var shapeFactory = self.get('shapeFactory');\n var group = self.get('group');\n var model = self.get('model');\n group.clear();\n var visible = model.visible;\n if (visible !== undefined && !visible) self.changeVisibility(visible);\n if (!shapeFactory) {\n return;\n }\n self.updatePosition(model);\n var cfg = self.getShapeCfg(model); // 可能会附加额外信息\n var shapeType = cfg.type;\n var keyShape = shapeFactory.draw(shapeType, cfg, group);\n if (keyShape) {\n self.set('keyShape', keyShape);\n keyShape.set('isKeyShape', true);\n keyShape.set('draggable', true);\n }\n this.setOriginStyle();\n // 防止由于用户外部修改 model 中的 shape 导致 shape 不更新\n this.set('currentShape', shapeType);\n this.restoreStates(shapeFactory, shapeType);\n };\n /**\n * 设置图元素原始样式\n * @param keyShape 图元素 keyShape\n * @param group Group 容器\n */\n ItemBase.prototype.setOriginStyle = function () {\n var group = this.get('group');\n var children = group.get('children');\n var keyShape = this.getKeyShape();\n var self = this;\n var keyShapeName = keyShape.get('name');\n if (!this.get('originStyle')) {\n // 第一次 set originStyle,直接拿首次渲染所有图形的 attrs\n var originStyles = {};\n for (var i = 0; i < children.length; i++) {\n var child = children[i];\n var shapeType = child.get('type');\n var name_1 = child.get('name');\n if (name_1 && name_1 !== keyShapeName) {\n originStyles[name_1] = shapeType !== 'image' ? Object(_antv_util__WEBPACK_IMPORTED_MODULE_1__[\"clone\"])(child.attr()) : self.getShapeStyleByName(name_1);\n // The text's position and matrix is not allowed to be affected by states\n if (shapeType === 'text' && originStyles[name_1]) {\n delete originStyles[name_1].x;\n delete originStyles[name_1].y;\n delete originStyles[name_1].matrix;\n }\n } else {\n var keyShapeStyle = self.getShapeStyleByName(); // 可优化,需要去除 child.attr 中其他 shape 名的对象\n delete keyShapeStyle.path;\n delete keyShapeStyle.matrix;\n if (!keyShapeName) {\n Object.assign(originStyles, keyShapeStyle);\n } else {\n // 若 keyShape 有 name 且 !name,这个图形不是 keyShape,给这个图形一个 name\n if (!name_1) {\n var shapeName = Object(_util_base__WEBPACK_IMPORTED_MODULE_5__[\"uniqueId\"])('shape');\n child.set('name', shapeName);\n group['shapeMap'][shapeName] = child;\n originStyles[shapeName] = shapeType !== 'image' ? Object(_antv_util__WEBPACK_IMPORTED_MODULE_1__[\"clone\"])(child.attr()) : self.getShapeStyleByName(name_1);\n } else {\n originStyles[keyShapeName] = keyShapeStyle;\n }\n }\n }\n }\n self.set('originStyle', originStyles);\n } else {\n // 第二次 set originStyles,需要找到不是 stateStyles 的样式,更新到 originStyles 中\n // 上一次设置的 originStyle,是初始的 shape attrs\n var styles_1 = this.get('originStyle');\n // let styles: ShapeStyle = {};\n if (keyShapeName && !styles_1[keyShapeName]) styles_1[keyShapeName] = {};\n // 获取当前状态样式\n var currentStatesStyle_1 = this.getCurrentStatesStyle();\n var _loop_1 = function _loop_1(i) {\n var child = children[i];\n var name_2 = child.get('name');\n var shapeAttrs = child.attr();\n if (name_2 && name_2 !== keyShapeName) {\n // 有 name 的非 keyShape 图形\n var shapeStateStyle_1 = currentStatesStyle_1[name_2];\n if (!styles_1[name_2]) styles_1[name_2] = {};\n if (shapeStateStyle_1) {\n Object.keys(shapeAttrs).forEach(function (key) {\n var value = shapeAttrs[key];\n if (value !== shapeStateStyle_1[key]) styles_1[name_2][key] = value;\n });\n } else {\n styles_1[name_2] = child.get('type') !== 'image' ? Object(_antv_util__WEBPACK_IMPORTED_MODULE_1__[\"clone\"])(shapeAttrs) : self.getShapeStyleByName(name_2);\n }\n } else {\n var shapeAttrs_1 = child.attr();\n var keyShapeStateStyles_1 = {};\n Object.keys(currentStatesStyle_1).forEach(function (styleKey) {\n var subStyle = currentStatesStyle_1[styleKey];\n if (styleKey === keyShapeName || !Object(_antv_util__WEBPACK_IMPORTED_MODULE_1__[\"isPlainObject\"])(subStyle)) {\n keyShapeStateStyles_1[styleKey] = subStyle;\n }\n });\n Object.keys(shapeAttrs_1).forEach(function (key) {\n var value = shapeAttrs_1[key];\n // 如果是对象且不是 arrow,则是其他 shape 的样式\n // if (isPlainObject(value) && ARROWS.indexOf(name) === -1) return;\n if (keyShapeStateStyles_1[key] !== value) {\n if (keyShapeName) styles_1[keyShapeName][key] = value;else styles_1[key] = value;\n }\n });\n }\n };\n // 遍历当前所有图形的 attrs,找到不是 stateStyles 的样式更新到 originStyles 中\n for (var i = 0; i < children.length; i++) {\n _loop_1(i);\n }\n delete styles_1.path;\n delete styles_1.matrix;\n delete styles_1.x;\n delete styles_1.y;\n if (styles_1[keyShapeName]) {\n delete styles_1[keyShapeName].x;\n delete styles_1[keyShapeName].y;\n delete styles_1[keyShapeName].matrix;\n delete styles_1[keyShapeName].path;\n }\n self.set('originStyle', styles_1);\n }\n };\n /**\n * restore shape states\n * @param shapeFactory\n * @param shapeType\n */\n ItemBase.prototype.restoreStates = function (shapeFactory, shapeType) {\n var self = this;\n var states = self.get('states');\n Object(_antv_util__WEBPACK_IMPORTED_MODULE_1__[\"each\"])(states, function (state) {\n shapeFactory.setState(shapeType, state, true, self);\n });\n };\n ItemBase.prototype.init = function () {\n var shapeFactory = _element_shape__WEBPACK_IMPORTED_MODULE_2__[\"default\"].getFactory(this.get('type'));\n this.set('shapeFactory', shapeFactory);\n };\n /**\n * 获取属性\n * @internal 仅内部类使用\n * @param {String} key 属性名\n * @return {object | string | number} 属性值\n */\n ItemBase.prototype.get = function (key) {\n return this._cfg[key];\n };\n /**\n * 设置属性\n * @internal 仅内部类使用\n * @param {String|Object} key 属性名,也可以是对象\n * @param {object | string | number} val 属性值\n */\n ItemBase.prototype.set = function (key, val) {\n if (Object(_antv_util__WEBPACK_IMPORTED_MODULE_1__[\"isPlainObject\"])(key)) {\n this._cfg = Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__assign\"])(Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__assign\"])({}, this._cfg), key);\n } else {\n this._cfg[key] = val;\n }\n };\n ItemBase.prototype.getDefaultCfg = function () {\n return {};\n };\n /**\n * 更新/刷新等操作后,清除 cache\n */\n ItemBase.prototype.clearCache = function () {\n this.set(CACHE_BBOX, null);\n this.set(CACHE_CANVAS_BBOX, null);\n };\n /**\n * 渲染前的逻辑,提供给子类复写\n */\n ItemBase.prototype.beforeDraw = function () {};\n /**\n * 渲染后的逻辑,提供给子类复写\n */\n ItemBase.prototype.afterDraw = function () {};\n /**\n * 更新后做一些工作\n */\n ItemBase.prototype.afterUpdate = function () {};\n /**\n * draw shape\n */\n ItemBase.prototype.draw = function () {\n this.beforeDraw();\n this.drawInner();\n this.afterDraw();\n };\n ItemBase.prototype.getShapeStyleByName = function (name) {\n var group = this.get('group');\n var currentShape;\n if (name) {\n currentShape = group['shapeMap'][name] || group.find(function (element) {\n return element.get('name') === name;\n });\n } else {\n currentShape = this.getKeyShape();\n }\n if (currentShape) {\n var styles_2 = {};\n Object(_antv_util__WEBPACK_IMPORTED_MODULE_1__[\"each\"])(currentShape.attr(), function (val, key) {\n // 修改 img 通过 updateItem 实现\n if (key !== 'img' || Object(_antv_util__WEBPACK_IMPORTED_MODULE_1__[\"isString\"])(val)) {\n styles_2[key] = val;\n }\n });\n return styles_2;\n }\n return {};\n };\n ItemBase.prototype.getShapeCfg = function (model, updateType) {\n var styles = this.get('styles');\n if (styles) {\n // merge graph的item样式与数据模型中的样式\n var newModel = model;\n newModel.style = Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__assign\"])(Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__assign\"])({}, styles), model.style);\n return newModel;\n }\n return model;\n };\n /**\n * 获取指定状态的样式,去除了全局样式\n * @param state 状态名称\n */\n ItemBase.prototype.getStateStyle = function (state) {\n var styles = this.get('styles');\n var stateStyle = styles && styles[state];\n return stateStyle;\n };\n /**\n * get keyshape style\n */\n ItemBase.prototype.getOriginStyle = function () {\n return this.get('originStyle');\n };\n ItemBase.prototype.getCurrentStatesStyle = function () {\n var self = this;\n var styles = {};\n var states = self.getStates();\n if (!states || !states.length) {\n return this.get('originStyle');\n }\n Object(_antv_util__WEBPACK_IMPORTED_MODULE_1__[\"each\"])(self.getStates(), function (state) {\n styles = Object.assign(styles, self.getStateStyle(state));\n });\n return styles;\n };\n /**\n * 更改元素状态, visible 不属于这个范畴\n * @internal 仅提供内部类 graph 使用\n * @param {String} state 状态名\n * @param {Boolean} value 节点状态值\n */\n ItemBase.prototype.setState = function (state, value) {\n var states = this.get('states');\n var shapeFactory = this.get('shapeFactory');\n var stateName = state;\n var filterStateName = state;\n if (Object(_antv_util__WEBPACK_IMPORTED_MODULE_1__[\"isString\"])(value)) {\n stateName = \"\".concat(state, \":\").concat(value);\n filterStateName = \"\".concat(state, \":\");\n }\n var newStates = states;\n if (Object(_antv_util__WEBPACK_IMPORTED_MODULE_1__[\"isBoolean\"])(value)) {\n var index = states.indexOf(filterStateName);\n if (value) {\n if (index > -1) {\n return;\n }\n states.push(stateName);\n } else if (index > -1) {\n states.splice(index, 1);\n }\n } else if (Object(_antv_util__WEBPACK_IMPORTED_MODULE_1__[\"isString\"])(value)) {\n // 过滤掉 states 中 filterStateName 相关的状态\n var filterStates = states.filter(function (name) {\n return name.includes(filterStateName);\n });\n if (filterStates.length > 0) {\n this.clearStates(filterStates);\n }\n newStates = newStates.filter(function (name) {\n return !name.includes(filterStateName);\n });\n newStates.push(stateName);\n this.set('states', newStates);\n }\n if (shapeFactory) {\n var model = this.get('model');\n var type = model.type;\n // 调用 shape/shape.ts 中的 setState\n shapeFactory.setState(type, state, value, this);\n }\n };\n /**\n * 清除指定的状态,如果参数为空,则不做任务处理\n * @param states 状态名称\n */\n ItemBase.prototype.clearStates = function (states) {\n var self = this;\n var originStates = self.getStates();\n var shapeFactory = self.get('shapeFactory');\n var model = self.get('model');\n var shape = model.type;\n if (!states) {\n states = originStates;\n }\n if (Object(_antv_util__WEBPACK_IMPORTED_MODULE_1__[\"isString\"])(states)) {\n states = [states];\n }\n var newStates = originStates.filter(function (state) {\n return states.indexOf(state) === -1;\n });\n self.set('states', newStates);\n states.forEach(function (state) {\n shapeFactory.setState(shape, state, false, self);\n });\n };\n /**\n * 设置是否开启性能优化模式\n * 目前影响:节点的状态样式更新是否影响相关边的更新\n * @param {Boolean} enableOptimize 是否开启\n */\n ItemBase.prototype.setOptimize = function (enableOptimize) {\n this.optimize = enableOptimize;\n };\n /**\n * 节点的图形容器\n * @return {G.Group} 图形容器\n */\n ItemBase.prototype.getContainer = function () {\n return this.get('group');\n };\n /**\n * 节点的关键形状,用于计算节点大小,连线截距等\n * @return {IShapeBase} 关键形状\n */\n ItemBase.prototype.getKeyShape = function () {\n return this.get('keyShape');\n };\n /**\n * 节点数据模型\n * @return {Object} 数据模型\n */\n ItemBase.prototype.getModel = function () {\n return this.get('model');\n };\n /**\n * 节点类型\n * @return {string} 节点的类型\n */\n ItemBase.prototype.getType = function () {\n return this.get('type');\n };\n /**\n * 获取 Item 的ID\n */\n ItemBase.prototype.getID = function () {\n return this.get('id');\n };\n /**\n * 是否是 Item 对象,悬空边情况下进行判定\n */\n ItemBase.prototype.isItem = function () {\n return true;\n };\n /**\n * 获取当前元素的所有状态\n * @return {Array} 元素的所有状态\n */\n ItemBase.prototype.getStates = function () {\n return this.get('states');\n };\n /**\n * 当前元素是否处于某状态\n * @param {String} state 状态名\n * @return {Boolean} 是否处于某状态\n */\n ItemBase.prototype.hasState = function (state) {\n var states = this.getStates();\n return states.indexOf(state) >= 0;\n };\n /**\n * 刷新一般用于处理几种情况\n * 1. item model 在外部被改变\n * 2. 边的节点位置发生改变,需要重新计算边\n *\n * 因为数据从外部被修改无法判断一些属性是否被修改,直接走位置和 shape 的更新\n */\n ItemBase.prototype.refresh = function (updateType) {\n var model = this.get('model');\n // 更新元素位置\n this.updatePosition(model);\n // 更新元素内容,样式\n this.updateShape(updateType);\n // 做一些更新之后的操作\n this.afterUpdate();\n // 清除缓存\n this.clearCache();\n };\n ItemBase.prototype.getUpdateType = function (cfg) {\n return undefined;\n };\n /**\n * 将更新应用到 model 上,刷新属性\n * @internal 仅提供给 Graph 使用,外部直接调用 graph.update 接口\n * @param {Object} cfg 配置项,可以是增量信息\n */\n ItemBase.prototype.update = function (cfg, updateType) {\n if (updateType === void 0) {\n updateType = undefined;\n }\n var model = this.get('model');\n // 仅仅移动位置时,既不更新,也不重绘\n if (updateType === 'move') {\n this.updatePosition(cfg);\n } else {\n var oriVisible = model.visible;\n var cfgVisible = cfg.visible;\n if (oriVisible !== cfgVisible && cfgVisible !== undefined) this.changeVisibility(cfgVisible);\n var originPosition = {\n x: model.x,\n y: model.y\n };\n cfg.x = isNaN(+cfg.x) ? model.x : +cfg.x;\n cfg.y = isNaN(+cfg.y) ? model.y : +cfg.y;\n var styles = this.get('styles');\n if (cfg.stateStyles) {\n // 更新 item 时更新 this.get('styles') 中的值\n var stateStyles = cfg.stateStyles;\n Object(_antv_util__WEBPACK_IMPORTED_MODULE_1__[\"mix\"])(styles, stateStyles);\n delete cfg.stateStyles;\n }\n // 直接将更新合到原数据模型上,可以保证用户在外部修改源数据然后刷新时的样式符合期待。\n Object.assign(model, cfg);\n // 如果 x,y 有变化,先重置位置\n if (originPosition.x !== cfg.x || originPosition.y !== cfg.y) {\n this.updatePosition(cfg);\n }\n this.updateShape(updateType);\n }\n this.afterUpdate();\n this.clearCache();\n };\n /**\n * 更新元素内容,样式\n */\n ItemBase.prototype.updateShape = function (updateType) {\n var shapeFactory = this.get('shapeFactory');\n var model = this.get('model');\n var shape = model.type;\n // 判定是否允许更新\n // 1. 注册的节点允许更新(即有继承的/复写的 update 方法,即 update 方法没有被复写为 undefined)\n // 2. 更新后的 shape 等于原先的 shape\n if (shapeFactory.shouldUpdate(shape) && shape === this.get('currentShape')) {\n var updateCfg = this.getShapeCfg(model, updateType);\n shapeFactory.baseUpdate(shape, updateCfg, this, updateType);\n // 更新完以后重新设置原始样式\n if (updateType !== 'move') this.setOriginStyle();\n } else {\n // 如果不满足上面两种状态,重新绘制\n this.draw();\n }\n // 更新后重置节点状态\n this.restoreStates(shapeFactory, shape);\n };\n /**\n * 更新位置,避免整体重绘\n * @param {object} cfg 待更新数据\n */\n ItemBase.prototype.updatePosition = function (cfg) {\n var model = this.get('model');\n var x = isNaN(+cfg.x) ? +model.x : +cfg.x;\n var y = isNaN(+cfg.y) ? +model.y : +cfg.y;\n var group = this.get('group');\n if (isNaN(x) || isNaN(y)) {\n return false;\n }\n model.x = x;\n model.y = y;\n var matrix = group.getMatrix();\n if (matrix && matrix[6] === x && matrix[7] === y) return false;\n group.resetMatrix();\n // G 4.0 element 中移除了矩阵相关方法,详见https://www.yuque.com/antv/blog/kxzk9g#4rMMV\n Object(_util_math__WEBPACK_IMPORTED_MODULE_4__[\"translate\"])(group, {\n x: x,\n y: y\n });\n this.clearCache(); // 位置更新后需要清除缓存\n return true;\n };\n /**\n * 获取 item 的包围盒,这个包围盒是相对于 item 自己,不会将 matrix 计算在内\n * @return {Object} 包含 x,y,width,height, centerX, centerY\n */\n ItemBase.prototype.getBBox = function () {\n // 计算 bbox 开销有些大,缓存\n var bbox = this.get(CACHE_BBOX);\n if (!bbox) {\n bbox = this.calculateBBox();\n this.set(CACHE_BBOX, bbox);\n }\n return bbox;\n };\n /**\n * 获取 item 相对于画布的包围盒,会将从顶层到当前元素的 matrix 都计算在内\n * @return {Object} 包含 x,y,width,height, centerX, centerY\n */\n ItemBase.prototype.getCanvasBBox = function () {\n // 计算 bbox 开销大,缓存\n var bbox = this.get(CACHE_CANVAS_BBOX);\n if (!bbox) {\n bbox = this.calculateCanvasBBox();\n this.set(CACHE_CANVAS_BBOX, bbox);\n }\n return bbox;\n };\n /**\n * 将元素放到最前面\n */\n ItemBase.prototype.toFront = function () {\n var group = this.get('group');\n group.toFront();\n };\n /**\n * 将元素放到最后面\n */\n ItemBase.prototype.toBack = function () {\n var group = this.get('group');\n group.toBack();\n };\n /**\n * 显示元素\n */\n ItemBase.prototype.show = function () {\n this.changeVisibility(true);\n };\n /**\n * 隐藏元素\n */\n ItemBase.prototype.hide = function () {\n this.changeVisibility(false);\n };\n /**\n * 更改是否显示\n * @param {Boolean} visible 是否显示\n */\n ItemBase.prototype.changeVisibility = function (visible) {\n var group = this.get('group');\n if (visible) {\n group.show();\n } else {\n group.hide();\n }\n this.set('visible', visible);\n };\n /**\n * 元素是否可见\n * @return {Boolean} 返回该元素是否可见\n */\n ItemBase.prototype.isVisible = function () {\n return this.get('visible');\n };\n /**\n * 是否拾取及出发该元素的交互事件\n * @param {Boolean} enable 标识位\n */\n ItemBase.prototype.enableCapture = function (enable) {\n var group = this.get('group');\n if (group) {\n group.set('capture', enable);\n }\n };\n ItemBase.prototype.destroy = function () {\n if (!this.destroyed) {\n var animate = this.get('animate');\n var group = this.get('group');\n if (animate) {\n group.stopAnimate();\n }\n group['shapeMap'] = {};\n this.clearCache();\n group.remove();\n this._cfg = null;\n this.destroyed = true;\n }\n };\n return ItemBase;\n}();\n/* harmony default export */ __webpack_exports__[\"default\"] = (ItemBase);\n\n//# sourceURL=webpack:///./node_modules/@antv/g6-core/es/item/item.js?");
/***/ }),
/***/ "./node_modules/@antv/g6-core/es/item/node.js":
/*!****************************************************!*\
!*** ./node_modules/@antv/g6-core/es/item/node.js ***!
\****************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tslib */ \"./node_modules/tslib/tslib.es6.js\");\n/* harmony import */ var _antv_util__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @antv/util */ \"./node_modules/@antv/util/esm/index.js\");\n/* harmony import */ var _util_math__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../util/math */ \"./node_modules/@antv/g6-core/es/util/math.js\");\n/* harmony import */ var _item__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./item */ \"./node_modules/@antv/g6-core/es/item/item.js\");\n\n\n\n\nvar CACHE_ANCHOR_POINTS = 'anchorPointsCache';\nvar CACHE_BBOX = 'bboxCache';\nvar Node = /** @class */function (_super) {\n Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__extends\"])(Node, _super);\n function Node() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n Node.prototype.getNearestPoint = function (points, curPoint) {\n var index = 0;\n var nearestPoint = points[0];\n var minDistance = Object(_util_math__WEBPACK_IMPORTED_MODULE_2__[\"distance\"])(points[0], curPoint);\n for (var i = 0; i < points.length; i++) {\n var point = points[i];\n var dis = Object(_util_math__WEBPACK_IMPORTED_MODULE_2__[\"distance\"])(point, curPoint);\n if (dis < minDistance) {\n nearestPoint = point;\n minDistance = dis;\n index = i;\n }\n }\n nearestPoint.anchorIndex = index;\n return nearestPoint;\n };\n Node.prototype.getDefaultCfg = function () {\n return {\n type: 'node',\n edges: []\n };\n };\n /**\n * 获取从节点关联的所有边\n */\n Node.prototype.getEdges = function () {\n return this.get('edges');\n };\n /**\n * 获取所有的入边\n */\n Node.prototype.getInEdges = function () {\n var self = this;\n return this.get('edges').filter(function (edge) {\n return edge.get('target') === self;\n });\n };\n /**\n * 获取所有的出边\n */\n Node.prototype.getOutEdges = function () {\n var self = this;\n return this.get('edges').filter(function (edge) {\n return edge.get('source') === self;\n });\n };\n /**\n * 获取节点的邻居节点\n *\n * @returns {INode[]}\n * @memberof Node\n */\n Node.prototype.getNeighbors = function (type) {\n var _this = this;\n var edges = this.get('edges');\n if (type === 'target') {\n // 当前节点为 source,它所指向的目标节点\n var neighborsConverter_1 = function neighborsConverter_1(edge) {\n return edge.getSource() === _this;\n };\n return edges.filter(neighborsConverter_1).map(function (edge) {\n return edge.getTarget();\n });\n }\n if (type === 'source') {\n // 当前节点为 target,它所指向的源节点\n var neighborsConverter_2 = function neighborsConverter_2(edge) {\n return edge.getTarget() === _this;\n };\n return edges.filter(neighborsConverter_2).map(function (edge) {\n return edge.getSource();\n });\n }\n // 若未指定 type ,则返回所有邻居\n var neighborsConverter = function neighborsConverter(edge) {\n return edge.getSource() === _this ? edge.getTarget() : edge.getSource();\n };\n return edges.map(neighborsConverter);\n };\n /**\n * 根据锚点的索引获取连接点\n * @param {Number} index 索引\n */\n Node.prototype.getLinkPointByAnchor = function (index) {\n var anchorPoints = this.getAnchorPoints();\n return anchorPoints[index];\n };\n /**\n * 获取连接点\n * @param point\n */\n Node.prototype.getLinkPoint = function (point) {\n var keyShape = this.get('keyShape');\n var type = keyShape.get('type');\n var itemType = this.get('type');\n var centerX;\n var centerY;\n var bbox = this.getBBox();\n if (itemType === 'combo') {\n centerX = bbox.centerX || (bbox.maxX + bbox.minX) / 2;\n centerY = bbox.centerY || (bbox.maxY + bbox.minY) / 2;\n } else {\n centerX = bbox.centerX;\n centerY = bbox.centerY;\n }\n var anchorPoints = this.getAnchorPoints();\n var intersectPoint;\n switch (type) {\n case 'circle':\n intersectPoint = Object(_util_math__WEBPACK_IMPORTED_MODULE_2__[\"getCircleIntersectByPoint\"])({\n x: centerX,\n y: centerY,\n r: bbox.width / 2\n }, point);\n break;\n case 'ellipse':\n intersectPoint = Object(_util_math__WEBPACK_IMPORTED_MODULE_2__[\"getEllipseIntersectByPoint\"])({\n x: centerX,\n y: centerY,\n rx: bbox.width / 2,\n ry: bbox.height / 2\n }, point);\n break;\n default:\n intersectPoint = Object(_util_math__WEBPACK_IMPORTED_MODULE_2__[\"getRectIntersectByPoint\"])(bbox, point);\n }\n var linkPoint = intersectPoint;\n // 如果存在锚点,则使用交点计算最近的锚点\n if (anchorPoints.length) {\n if (!linkPoint) {\n // 如果计算不出交点\n linkPoint = point;\n }\n linkPoint = this.getNearestPoint(anchorPoints, linkPoint);\n }\n if (!linkPoint) {\n // 如果最终依然没法找到锚点和连接点,直接返回中心点\n linkPoint = {\n x: centerX,\n y: centerY\n };\n }\n return linkPoint;\n };\n /**\n * 获取锚点的定义\n * @return {array} anchorPoints\n */\n Node.prototype.getAnchorPoints = function () {\n var anchorPoints = this.get(CACHE_ANCHOR_POINTS);\n if (!anchorPoints) {\n anchorPoints = [];\n var shapeFactory = this.get('shapeFactory');\n var bbox_1 = this.getBBox();\n var model = this.get('model');\n var shapeCfg = this.getShapeCfg(model);\n var type = model.type;\n var points = shapeFactory.getAnchorPoints(type, shapeCfg) || [];\n Object(_antv_util__WEBPACK_IMPORTED_MODULE_1__[\"each\"])(points, function (pointArr, index) {\n var point = {\n x: bbox_1.minX + pointArr[0] * bbox_1.width,\n y: bbox_1.minY + pointArr[1] * bbox_1.height,\n anchorIndex: index\n };\n anchorPoints.push(point);\n });\n this.set(CACHE_ANCHOR_POINTS, anchorPoints);\n }\n return anchorPoints;\n };\n /**\n * add edge\n * @param edge Edge instance\n */\n Node.prototype.addEdge = function (edge) {\n this.get('edges').push(edge);\n };\n /**\n * 锁定节点\n */\n Node.prototype.lock = function () {\n this.set('locked', true);\n };\n /**\n * 解锁锁定的节点\n */\n Node.prototype.unlock = function () {\n this.set('locked', false);\n };\n Node.prototype.hasLocked = function () {\n return this.get('locked');\n };\n /**\n * 移除边\n * @param {Edge} edge 边\n */\n Node.prototype.removeEdge = function (edge) {\n var edges = this.getEdges();\n var index = edges.indexOf(edge);\n if (index > -1) edges.splice(index, 1);\n };\n Node.prototype.clearCache = function () {\n this.set(CACHE_BBOX, null); // 清理缓存的 bbox\n this.set(CACHE_ANCHOR_POINTS, null);\n };\n /**\n * 判断更新的种类,move 表示仅移动,bbox 表示大小有变化,style 表示仅与大小无关的参数变化\n * @param cfg 节点数据模型\n */\n Node.prototype.getUpdateType = function (cfg) {\n var _a, _b, _c, _d, _e;\n if (!cfg) return undefined;\n var existX = !Object(_antv_util__WEBPACK_IMPORTED_MODULE_1__[\"isNil\"])(cfg.x);\n var existY = !Object(_antv_util__WEBPACK_IMPORTED_MODULE_1__[\"isNil\"])(cfg.y);\n var keys = Object.keys(cfg);\n // 仅有一个字段,包含 x 或者 包含 y\n // 两个字段,同时有 x,同时有 y\n if (keys.length === 1 && (existX || existY) || keys.length === 2 && existX && existY) return 'move';\n if (Object(_antv_util__WEBPACK_IMPORTED_MODULE_1__[\"isNumber\"])(cfg.x) || Object(_antv_util__WEBPACK_IMPORTED_MODULE_1__[\"isNumber\"])(cfg.y) || cfg.type || cfg.anchorPoints || cfg.size || (cfg === null || cfg === void 0 ? void 0 : cfg.style) && (((_a = cfg === null || cfg === void 0 ? void 0 : cfg.style) === null || _a === void 0 ? void 0 : _a.r) || ((_b = cfg === null || cfg === void 0 ? void 0 : cfg.style) === null || _b === void 0 ? void 0 : _b.width) || ((_c = cfg === null || cfg === void 0 ? void 0 : cfg.style) === null || _c === void 0 ? void 0 : _c.height) || ((_d = cfg === null || cfg === void 0 ? void 0 : cfg.style) === null || _d === void 0 ? void 0 : _d.rx) || ((_e = cfg === null || cfg === void 0 ? void 0 : cfg.style) === null || _e === void 0 ? void 0 : _e.ry))) return 'bbox|label';\n var updateLabel = keys.includes('label') || keys.includes('labelCfg');\n return updateLabel ? 'style|label' : 'style';\n };\n Node.prototype.setState = function (state, value) {\n var _this = this;\n if (this.optimize) {\n _super.prototype.setState.call(this, state, value);\n return;\n }\n this.runWithBBoxAffected(function () {\n return _super.prototype.setState.call(_this, state, value);\n });\n };\n Node.prototype.clearStates = function (states) {\n var _this = this;\n if (this.optimize) {\n _super.prototype.clearStates.call(this, states);\n return;\n }\n this.runWithBBoxAffected(function () {\n return _super.prototype.clearStates.call(_this, states);\n });\n };\n Node.prototype.runWithBBoxAffected = function (fn) {\n var bboxAffectedStyleKeys = ['r', 'width', 'height', 'rx', 'ry', 'lineWidth'];\n var beforeAttrs = this.getKeyShape().attr();\n var bboxAffectedStyleBefore = {};\n Object.keys(this.getKeyShape().attr()).forEach(function (key) {\n if (bboxAffectedStyleKeys.includes(key)) bboxAffectedStyleBefore[key] = beforeAttrs[key];\n });\n fn();\n // if the state styles affect the bbox, the bbox cache should be cleared to get correct edge connecting points\n var afterAttrs = this.getKeyShape().attr();\n for (var i = 0; i < bboxAffectedStyleKeys.length; i++) {\n var key = bboxAffectedStyleKeys[i];\n if (afterAttrs[key] !== bboxAffectedStyleBefore[key]) {\n this.clearCache();\n this.getEdges().forEach(function (edge) {\n return edge.refresh();\n });\n break;\n }\n }\n };\n return Node;\n}(_item__WEBPACK_IMPORTED_MODULE_3__[\"default\"]);\n/* harmony default export */ __webpack_exports__[\"default\"] = (Node);\n\n//# sourceURL=webpack:///./node_modules/@antv/g6-core/es/item/node.js?");
/***/ }),
/***/ "./node_modules/@antv/g6-core/es/types/index.js":
/*!******************************************************!*\
!*** ./node_modules/@antv/g6-core/es/types/index.js ***!
\******************************************************/
/*! exports provided: G6GraphEvent */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _interface__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../interface */ \"./node_modules/@antv/g6-core/es/interface/index.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"G6GraphEvent\", function() { return _interface__WEBPACK_IMPORTED_MODULE_0__[\"G6GraphEvent\"]; });\n\n\n\n//# sourceURL=webpack:///./node_modules/@antv/g6-core/es/types/index.js?");
/***/ }),
/***/ "./node_modules/@antv/g6-core/es/util/base.js":
/*!****************************************************!*\
!*** ./node_modules/@antv/g6-core/es/util/base.js ***!
\****************************************************/
/*! exports provided: uniqueId, formatPadding, cloneEvent, isViewportChanged, isNaN, calculationItemsBBox, processParallelEdges */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"uniqueId\", function() { return uniqueId; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"formatPadding\", function() { return formatPadding; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"cloneEvent\", function() { return cloneEvent; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"isViewportChanged\", function() { return isViewportChanged; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"isNaN\", function() { return isNaN; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"calculationItemsBBox\", function() { return calculationItemsBBox; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"processParallelEdges\", function() { return processParallelEdges; });\n/* harmony import */ var _antv_util__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @antv/util */ \"./node_modules/@antv/util/esm/index.js\");\n/* harmony import */ var _interface_behavior__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../interface/behavior */ \"./node_modules/@antv/g6-core/es/interface/behavior.js\");\n\n\nvar uniqueId = function uniqueId(type) {\n return \"\".concat(type, \"-\").concat(Math.random()).concat(Date.now());\n};\n/**\n * turn padding into [top, right, bottom, right]\n * @param {Number|Array} padding input padding\n * @return {array} output\n */\nvar formatPadding = function formatPadding(padding) {\n if (Object(_antv_util__WEBPACK_IMPORTED_MODULE_0__[\"isArray\"])(padding)) {\n switch (padding.length) {\n case 4:\n return padding;\n case 3:\n padding.push(padding[1]);\n return padding;\n case 2:\n return padding.concat(padding);\n case 1:\n return [padding[0], padding[0], padding[0], padding[0]];\n default:\n return [0, 0, 0, 0];\n }\n }\n if (Object(_antv_util__WEBPACK_IMPORTED_MODULE_0__[\"isNumber\"])(padding)) {\n return [padding, padding, padding, padding];\n } else if (Object(_antv_util__WEBPACK_IMPORTED_MODULE_0__[\"isString\"])(padding)) {\n var intPadding = parseInt(padding, 10);\n return [intPadding, intPadding, intPadding, intPadding];\n }\n return [0, 0, 0, 0];\n};\n/**\n * clone event\n * @param e\n */\nvar cloneEvent = function cloneEvent(e) {\n var event = new _interface_behavior__WEBPACK_IMPORTED_MODULE_1__[\"G6GraphEvent\"](e.type, e);\n event.clientX = e.clientX;\n event.clientY = e.clientY;\n event.x = e.x;\n event.y = e.y;\n event.target = e.target;\n event.currentTarget = e.currentTarget;\n event.bubbles = true;\n event.item = e.item;\n return event;\n};\n/**\n * 判断 viewport 是否改变,通过和单位矩阵对比\n * @param matrix Viewport 的 Matrix\n */\nvar isViewportChanged = function isViewportChanged(matrix) {\n // matrix 为 null, 则说明没有变化\n if (!matrix) {\n return false;\n }\n var MATRIX_LEN = 9;\n var ORIGIN_MATRIX = [1, 0, 0, 0, 1, 0, 0, 0, 1];\n for (var i = 0; i < MATRIX_LEN; i++) {\n if (matrix[i] !== ORIGIN_MATRIX[i]) {\n return true;\n }\n }\n return false;\n};\nvar isNaN = function isNaN(input) {\n return Number.isNaN(Number(input));\n};\n/**\n * 计算一组 Item 的 BBox\n * @param items 选中的一组Item,可以是 node 或 combo\n */\nvar calculationItemsBBox = function calculationItemsBBox(items) {\n var minx = Infinity;\n var maxx = -Infinity;\n var miny = Infinity;\n var maxy = -Infinity;\n // 获取已节点的所有最大最小x y值\n for (var i = 0; i < items.length; i++) {\n var element = items[i];\n var bbox = element.getBBox();\n var minX = bbox.minX,\n minY = bbox.minY,\n maxX = bbox.maxX,\n maxY = bbox.maxY;\n if (minX < minx) {\n minx = minX;\n }\n if (minY < miny) {\n miny = minY;\n }\n if (maxX > maxx) {\n maxx = maxX;\n }\n if (maxY > maxy) {\n maxy = maxY;\n }\n }\n var x = Math.floor(minx);\n var y = Math.floor(miny);\n var width = Math.ceil(maxx) - Math.floor(minx);\n var height = Math.ceil(maxy) - Math.floor(miny);\n return {\n x: x,\n y: y,\n width: width,\n height: height,\n minX: minx,\n minY: miny,\n maxX: maxx,\n maxY: maxy\n };\n};\n/**\n * 若 edges 中存在两端点相同的边,使用 quadratic 边并自动计算 curveOffset 使它们不相互重叠\n * 文档: https://g6.antv.antgroup.com/en/api/Util\n * @param edges 边数据集合\n * @param offsetDiff 相邻两边的 offset 之差\n * @param multiEdgeType\n * @param singleEdgeType\n * @param loopEdgeType\n */\nvar processParallelEdges = function processParallelEdges(edges, offsetDiff, multiEdgeType, singleEdgeType, loopEdgeType) {\n if (offsetDiff === void 0) {\n offsetDiff = 15;\n }\n if (multiEdgeType === void 0) {\n multiEdgeType = 'quadratic';\n }\n if (singleEdgeType === void 0) {\n singleEdgeType = undefined;\n }\n if (loopEdgeType === void 0) {\n loopEdgeType = undefined;\n }\n var len = edges.length;\n var cod = offsetDiff * 2;\n var loopPosition = ['top', 'top-right', 'right', 'bottom-right', 'bottom', 'bottom-left', 'left', 'top-left'];\n var edgeMap = {};\n var tags = [];\n var reverses = {};\n for (var i = 0; i < len; i++) {\n var edge = edges[i];\n var source = edge.source,\n target = edge.target;\n var sourceTarget = \"\".concat(source, \"-\").concat(target);\n if (tags[i]) continue;\n if (!edgeMap[sourceTarget]) {\n edgeMap[sourceTarget] = [];\n }\n tags[i] = true;\n edgeMap[sourceTarget].push(edge);\n for (var j = 0; j < len; j++) {\n if (i === j) continue;\n var sedge = edges[j];\n var src = sedge.source;\n var dst = sedge.target;\n // 两个节点之间共同的边\n // 第一条的source = 第二条的target\n // 第一条的target = 第二条的source\n if (!tags[j]) {\n if (source === dst && target === src) {\n edgeMap[sourceTarget].push(sedge);\n tags[j] = true;\n reverses[\"\".concat(src, \"|\").concat(dst, \"|\").concat(edgeMap[sourceTarget].length - 1)] = true;\n } else if (source === src && target === dst) {\n edgeMap[sourceTarget].push(sedge);\n tags[j] = true;\n }\n }\n }\n }\n for (var key in edgeMap) {\n var arcEdges = edgeMap[key];\n var length_1 = arcEdges.length;\n for (var k = 0; k < length_1; k++) {\n var current = arcEdges[k];\n if (current.source === current.target) {\n if (loopEdgeType) current.type = loopEdgeType;\n // 超过8条自环边,则需要重新处理\n current.loopCfg = {\n position: loopPosition[k % 8],\n dist: Math.floor(k / 8) * 20 + 50\n };\n continue;\n }\n if (length_1 === 1 && singleEdgeType && current.source !== current.target) {\n current.type = singleEdgeType;\n continue;\n }\n current.type = multiEdgeType;\n var sign = (k % 2 === 0 ? 1 : -1) * (reverses[\"\".concat(current.source, \"|\").concat(current.target, \"|\").concat(k)] ? -1 : 1);\n if (length_1 % 2 === 1) {\n current.curveOffset = sign * Math.ceil(k / 2) * cod;\n } else {\n current.curveOffset = sign * (Math.floor(k / 2) * cod + offsetDiff);\n }\n }\n }\n return edges;\n};\n\n//# sourceURL=webpack:///./node_modules/@antv/g6-core/es/util/base.js?");
/***/ }),
/***/ "./node_modules/@antv/g6-core/es/util/color.js":
/*!*****************************************************!*\
!*** ./node_modules/@antv/g6-core/es/util/color.js ***!
\*****************************************************/
/*! exports provided: defaultSubjectColors */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"defaultSubjectColors\", function() { return defaultSubjectColors; });\nvar defaultSubjectColors = ['#5F95FF', '#61DDAA', '#65789B', '#F6BD16', '#7262FD', '#78D3F8', '#9661BC', '#F6903D', '#008685', '#F08BB4'];\n\n//# sourceURL=webpack:///./node_modules/@antv/g6-core/es/util/color.js?");
/***/ }),
/***/ "./node_modules/@antv/g6-core/es/util/graphic.js":
/*!*******************************************************!*\
!*** ./node_modules/@antv/g6-core/es/util/graphic.js ***!
\*******************************************************/
/*! exports provided: getBBox, getLoopCfgs, getLabelPosition, traverseTree, traverseTreeUp, getLetterWidth, getTextSize, truncateLabelByLength, plainCombosToTrees, reconstructTree, getComboBBox, shouldRefreshEdge, cloneBesidesImg, getAnimateCfgWithCallback */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"getBBox\", function() { return getBBox; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"getLoopCfgs\", function() { return getLoopCfgs; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"getLabelPosition\", function() { return getLabelPosition; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"traverseTree\", function() { return traverseTree; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"traverseTreeUp\", function() { return traverseTreeUp; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"getLetterWidth\", function() { return getLetterWidth; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"getTextSize\", function() { return getTextSize; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"truncateLabelByLength\", function() { return truncateLabelByLength; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"plainCombosToTrees\", function() { return plainCombosToTrees; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"reconstructTree\", function() { return reconstructTree; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"getComboBBox\", function() { return getComboBBox; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"shouldRefreshEdge\", function() { return shouldRefreshEdge; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"cloneBesidesImg\", function() { return cloneBesidesImg; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"getAnimateCfgWithCallback\", function() { return getAnimateCfgWithCallback; });\n/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tslib */ \"./node_modules/tslib/tslib.es6.js\");\n/* harmony import */ var _antv_matrix_util__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @antv/matrix-util */ \"./node_modules/@antv/matrix-util/esm/index.js\");\n/* harmony import */ var _antv_util__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @antv/util */ \"./node_modules/@antv/util/esm/index.js\");\n/* harmony import */ var _global__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../global */ \"./node_modules/@antv/g6-core/es/global.js\");\n/* harmony import */ var _letterAspectRatio__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./letterAspectRatio */ \"./node_modules/@antv/g6-core/es/util/letterAspectRatio.js\");\n/* harmony import */ var _math__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./math */ \"./node_modules/@antv/g6-core/es/util/math.js\");\n\n\n\n\n\n\nvar PI = Math.PI,\n sin = Math.sin,\n cos = Math.cos;\n// 一共支持8个方向的自环,每个环占的角度是45度,在计算时再二分,为22.5度\nvar SELF_LINK_SIN = sin(PI / 8);\nvar SELF_LINK_COS = cos(PI / 8);\nvar getBBox = function getBBox(element, group) {\n var bbox = element.getBBox();\n var leftTop = {\n x: bbox.minX,\n y: bbox.minY\n };\n var rightBottom = {\n x: bbox.maxX,\n y: bbox.maxY\n };\n // 根据父元素变换矩阵\n if (group) {\n var matrix = group.getMatrix();\n if (!matrix) {\n matrix = [1, 0, 0, 0, 1, 0, 0, 0, 1];\n }\n leftTop = Object(_math__WEBPACK_IMPORTED_MODULE_5__[\"applyMatrix\"])(leftTop, matrix);\n rightBottom = Object(_math__WEBPACK_IMPORTED_MODULE_5__[\"applyMatrix\"])(rightBottom, matrix);\n }\n var lx = leftTop.x,\n ly = leftTop.y;\n var rx = rightBottom.x,\n ry = rightBottom.y;\n return {\n x: lx,\n y: ly,\n minX: lx,\n minY: ly,\n maxX: rx,\n maxY: ry,\n width: rx - lx,\n height: ry - ly\n };\n};\n/**\n * get loop edge config\n * @param cfg edge config\n */\nvar getLoopCfgs = function getLoopCfgs(cfg) {\n var item = cfg.sourceNode || cfg.targetNode;\n var container = item.get('group');\n var containerMatrix = container.getMatrix();\n if (!containerMatrix) containerMatrix = [1, 0, 0, 0, 1, 0, 0, 0, 1];\n var keyShape = item.getKeyShape();\n var bbox = keyShape.getBBox();\n var loopCfg = cfg.loopCfg || {};\n // 距离keyShape边的最高距离\n var dist = loopCfg.dist || Math.max(bbox.width, bbox.height) * 2;\n // 自环边与keyShape的相对位置关系\n var position = loopCfg.position || _global__WEBPACK_IMPORTED_MODULE_3__[\"default\"].defaultLoopPosition;\n // 中心取节点 keyShape bbox 的中心位置 + 节点位置坐标\n var center = [(bbox.minX + bbox.maxX) / 2 + containerMatrix[6], (bbox.minY + bbox.maxY) / 2 + containerMatrix[7]];\n var startPoint = [cfg.startPoint.x, cfg.startPoint.y];\n var endPoint = [cfg.endPoint.x, cfg.endPoint.y];\n var halfOfHeight = bbox.height / 2;\n var halfOfWidth = bbox.width / 2;\n var rstart = halfOfHeight;\n var rend = halfOfHeight;\n var sinDeltaStart = rstart * SELF_LINK_SIN;\n var cosDeltaStart = rstart * SELF_LINK_COS;\n var sinDeltaEnd = rend * SELF_LINK_SIN;\n var cosDeltaEnd = rend * SELF_LINK_COS;\n var shapeType = keyShape.get('type');\n // 美观考虑,pointPadding 默认取宽高中最小的1/4\n var defaultPointPadding = Math.min(halfOfHeight / 2, halfOfWidth / 2);\n var maxPointPadding = Math.min(halfOfHeight, halfOfWidth);\n // 对于非圆形节点设置的连接点与节点中心坐标(`top-right`,`bottom-right`,`top-left`,`bottom-left`较特殊,为四个角坐标)在 x 轴或 y 轴方向的偏移量,默认为 `节点宽高中最小值的1/4`\n var pointPadding = (loopCfg === null || loopCfg === void 0 ? void 0 : loopCfg.pointPadding) ? Math.min(maxPointPadding, loopCfg === null || loopCfg === void 0 ? void 0 : loopCfg.pointPadding) : defaultPointPadding;\n // 如果定义了锚点的,直接用锚点坐标,否则,根据自环的 cfg 计算\n if (startPoint[0] === endPoint[0] && startPoint[1] === endPoint[1]) {\n switch (position) {\n case 'top':\n if (shapeType === 'circle') {\n startPoint = [center[0] - sinDeltaStart, center[1] - cosDeltaStart];\n endPoint = [center[0] + sinDeltaEnd, center[1] - cosDeltaEnd];\n } else {\n startPoint = [center[0] - pointPadding, center[1] - halfOfHeight];\n endPoint = [center[0] + pointPadding, center[1] - halfOfHeight];\n }\n break;\n case 'top-right':\n rstart = halfOfHeight;\n rend = halfOfWidth;\n if (shapeType === 'circle') {\n sinDeltaStart = rstart * SELF_LINK_SIN;\n cosDeltaStart = rstart * SELF_LINK_COS;\n sinDeltaEnd = rend * SELF_LINK_SIN;\n cosDeltaEnd = rend * SELF_LINK_COS;\n startPoint = [center[0] + sinDeltaStart, center[1] - cosDeltaStart];\n endPoint = [center[0] + cosDeltaEnd, center[1] - sinDeltaEnd];\n } else {\n startPoint = [center[0] + halfOfWidth - pointPadding, center[1] - halfOfHeight];\n endPoint = [center[0] + halfOfWidth, center[1] - halfOfHeight + pointPadding];\n }\n break;\n case 'right':\n rstart = halfOfWidth;\n rend = halfOfWidth;\n if (shapeType === 'circle') {\n sinDeltaStart = rstart * SELF_LINK_SIN;\n cosDeltaStart = rstart * SELF_LINK_COS;\n sinDeltaEnd = rend * SELF_LINK_SIN;\n cosDeltaEnd = rend * SELF_LINK_COS;\n startPoint = [center[0] + cosDeltaStart, center[1] - sinDeltaStart];\n endPoint = [center[0] + cosDeltaEnd, center[1] + sinDeltaEnd];\n } else {\n startPoint = [center[0] + halfOfWidth, center[1] - pointPadding];\n endPoint = [center[0] + halfOfWidth, center[1] + pointPadding];\n }\n break;\n case 'bottom-right':\n rstart = halfOfWidth;\n rend = halfOfHeight;\n if (shapeType === 'circle') {\n sinDeltaStart = rstart * SELF_LINK_SIN;\n cosDeltaStart = rstart * SELF_LINK_COS;\n sinDeltaEnd = rend * SELF_LINK_SIN;\n cosDeltaEnd = rend * SELF_LINK_COS;\n startPoint = [center[0] + cosDeltaStart, center[1] + sinDeltaStart];\n endPoint = [center[0] + sinDeltaEnd, center[1] + cosDeltaEnd];\n } else {\n startPoint = [center[0] + halfOfWidth, center[1] + halfOfHeight - pointPadding];\n endPoint = [center[0] + halfOfWidth - pointPadding, center[1] + halfOfHeight];\n }\n break;\n case 'bottom':\n rstart = halfOfHeight;\n rend = halfOfHeight;\n if (shapeType === 'circle') {\n sinDeltaStart = rstart * SELF_LINK_SIN;\n cosDeltaStart = rstart * SELF_LINK_COS;\n sinDeltaEnd = rend * SELF_LINK_SIN;\n cosDeltaEnd = rend * SELF_LINK_COS;\n startPoint = [center[0] + sinDeltaStart, center[1] + cosDeltaStart];\n endPoint = [center[0] - sinDeltaEnd, center[1] + cosDeltaEnd];\n } else {\n startPoint = [center[0] - pointPadding, center[1] + halfOfHeight];\n endPoint = [center[0] + pointPadding, center[1] + halfOfHeight];\n }\n break;\n case 'bottom-left':\n rstart = halfOfHeight;\n rend = halfOfWidth;\n if (shapeType === 'circle') {\n sinDeltaStart = rstart * SELF_LINK_SIN;\n cosDeltaStart = rstart * SELF_LINK_COS;\n sinDeltaEnd = rend * SELF_LINK_SIN;\n cosDeltaEnd = rend * SELF_LINK_COS;\n startPoint = [center[0] - sinDeltaStart, center[1] + cosDeltaStart];\n endPoint = [center[0] - cosDeltaEnd, center[1] + sinDeltaEnd];\n } else {\n startPoint = [center[0] - halfOfWidth, center[1] + halfOfHeight - pointPadding];\n endPoint = [center[0] - halfOfWidth + pointPadding, center[1] + halfOfHeight];\n }\n break;\n case 'left':\n rstart = halfOfWidth;\n rend = halfOfWidth;\n if (shapeType === 'circle') {\n sinDeltaStart = rstart * SELF_LINK_SIN;\n cosDeltaStart = rstart * SELF_LINK_COS;\n sinDeltaEnd = rend * SELF_LINK_SIN;\n cosDeltaEnd = rend * SELF_LINK_COS;\n startPoint = [center[0] - cosDeltaStart, center[1] + sinDeltaStart];\n endPoint = [center[0] - cosDeltaEnd, center[1] - sinDeltaEnd];\n } else {\n startPoint = [center[0] - halfOfWidth, center[1] - pointPadding];\n endPoint = [center[0] - halfOfWidth, center[1] + pointPadding];\n }\n break;\n case 'top-left':\n rstart = halfOfWidth;\n rend = halfOfHeight;\n if (shapeType === 'circle') {\n sinDeltaStart = rstart * SELF_LINK_SIN;\n cosDeltaStart = rstart * SELF_LINK_COS;\n sinDeltaEnd = rend * SELF_LINK_SIN;\n cosDeltaEnd = rend * SELF_LINK_COS;\n startPoint = [center[0] - cosDeltaStart, center[1] - sinDeltaStart];\n endPoint = [center[0] - sinDeltaEnd, center[1] - cosDeltaEnd];\n } else {\n startPoint = [center[0] - halfOfWidth + pointPadding, center[1] - halfOfHeight];\n endPoint = [center[0] - halfOfWidth, center[1] - halfOfHeight + pointPadding];\n }\n break;\n default:\n rstart = halfOfWidth;\n rend = halfOfWidth;\n sinDeltaStart = rstart * SELF_LINK_SIN;\n cosDeltaStart = rstart * SELF_LINK_COS;\n sinDeltaEnd = rend * SELF_LINK_SIN;\n cosDeltaEnd = rend * SELF_LINK_COS;\n startPoint = [center[0] - sinDeltaStart, center[1] - cosDeltaStart];\n endPoint = [center[0] + sinDeltaEnd, center[1] - cosDeltaEnd];\n }\n // 如果逆时针画,交换起点和终点\n if (loopCfg.clockwise === false) {\n var swap = [startPoint[0], startPoint[1]];\n startPoint = [endPoint[0], endPoint[1]];\n endPoint = [swap[0], swap[1]];\n }\n }\n var startVec = [startPoint[0] - center[0], startPoint[1] - center[1]];\n var scaleRateStart = (rstart + dist) / rstart;\n var scaleRateEnd = (rend + dist) / rend;\n if (loopCfg.clockwise === false) {\n scaleRateStart = (rend + dist) / rend;\n scaleRateEnd = (rstart + dist) / rstart;\n }\n var startExtendVec = _antv_matrix_util__WEBPACK_IMPORTED_MODULE_1__[\"vec2\"].scale([0, 0], startVec, scaleRateStart);\n var controlPoint1 = [center[0] + startExtendVec[0], center[1] + startExtendVec[1]];\n var endVec = [endPoint[0] - center[0], endPoint[1] - center[1]];\n var endExtendVec = _antv_matrix_util__WEBPACK_IMPORTED_MODULE_1__[\"vec2\"].scale([0, 0], endVec, scaleRateEnd);\n var controlPoint2 = [center[0] + endExtendVec[0], center[1] + endExtendVec[1]];\n cfg.startPoint = {\n x: startPoint[0],\n y: startPoint[1]\n };\n cfg.endPoint = {\n x: endPoint[0],\n y: endPoint[1]\n };\n cfg.controlPoints = [{\n x: controlPoint1[0],\n y: controlPoint1[1]\n }, {\n x: controlPoint2[0],\n y: controlPoint2[1]\n }];\n return cfg;\n};\n/**\n * 根据 label 所在线条的位置百分比,计算 label 坐标\n * @param {object} pathShape G 的 path 实例,一般是 Edge 实例的 keyShape\n * @param {number} percent 范围 0 - 1 的线条百分比\n * @param {number} refX x 轴正方向为基准的 label 偏移\n * @param {number} refY y 轴正方向为基准的 label 偏移\n * @param {boolean} rotate 是否根据线条斜率旋转文本\n * @return {object} 文本的 x, y, 文本的旋转角度\n */\nvar getLabelPosition = function getLabelPosition(pathShape, percent, refX, refY, rotate) {\n var TAN_OFFSET = 0.0001;\n var vector = [];\n var point = pathShape === null || pathShape === void 0 ? void 0 : pathShape.getPoint(percent);\n if (!point) {\n return {\n x: 0,\n y: 0,\n angle: 0\n };\n }\n // 头尾最可能,放在最前面,使用 g path 上封装的方法\n if (percent < TAN_OFFSET) {\n vector = pathShape.getStartTangent().reverse();\n } else if (percent > 1 - TAN_OFFSET) {\n vector = pathShape.getEndTangent();\n } else {\n // 否则取指定位置的点,与少量偏移的点,做微分向量\n var offsetPoint = pathShape === null || pathShape === void 0 ? void 0 : pathShape.getPoint(percent + TAN_OFFSET);\n vector.push([point.x, point.y]);\n vector.push([offsetPoint.x, offsetPoint.y]);\n }\n var rad = Math.atan2(vector[1][1] - vector[0][1], vector[1][0] - vector[0][0]);\n if (rad < 0) {\n rad += PI * 2;\n }\n if (refX) {\n point.x += cos(rad) * refX;\n point.y += sin(rad) * refX;\n }\n if (refY) {\n // 默认方向是 x 轴正方向,法线是 求出角度 - 90°\n var normal = rad - PI / 2;\n // 若法线角度在 y 轴负方向,切到正方向,保证 refY 相对于 y 轴正方向\n if (rad > 1 / 2 * PI && rad < 3 * 1 / 2 * PI) {\n normal -= PI;\n }\n point.x += cos(normal) * refY;\n point.y += sin(normal) * refY;\n }\n var result = {\n x: point.x,\n y: point.y,\n angle: rad\n };\n if (rotate) {\n if (rad > 0.5 * PI && rad < 1.5 * PI) {\n rad -= PI;\n }\n return Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__assign\"])({\n rotate: rad\n }, result);\n }\n return result;\n};\n/**\n * depth first traverse, from root to leaves, children in inverse order\n * if the fn returns false, terminate the traverse\n */\nvar traverse = function traverse(data, parent, index, fn) {\n if (fn(data, parent, index) === false) {\n return false;\n }\n if (data && data.children) {\n for (var i = data.children.length - 1; i >= 0; i--) {\n if (!traverse(data.children[i], data, i, fn)) return false;\n }\n }\n return true;\n};\n/**\n * depth first traverse, from leaves to root, children in inverse order\n * if the fn returns false, terminate the traverse\n */\nvar traverseUp = function traverseUp(data, parent, index, fn) {\n if (data && data.children) {\n for (var i = data.children.length - 1; i >= 0; i--) {\n if (!traverseUp(data.children[i], data, i, fn)) return;\n }\n }\n if (fn(data, parent, index) === false) {\n return false;\n }\n return true;\n};\n/**\n * depth first traverse, from root to leaves, children in inverse order\n * if the fn returns false, terminate the traverse\n */\nvar traverseTree = function traverseTree(data, fn) {\n if (typeof fn !== 'function') {\n return;\n }\n traverse(data, null, -1, fn);\n};\n/**\n * depth first traverse, from leaves to root, children in inverse order\n * if the fn returns false, terminate the traverse\n */\nvar traverseTreeUp = function traverseTreeUp(data, fn) {\n if (typeof fn !== 'function') {\n return;\n }\n traverseUp(data, null, -1, fn);\n};\n/**\n *\n * @param letter the letter\n * @param fontSize\n * @return the letter's width\n */\nvar getLetterWidth = function getLetterWidth(letter, fontSize) {\n return fontSize * (_letterAspectRatio__WEBPACK_IMPORTED_MODULE_4__[\"default\"][letter] || 1);\n};\n/**\n *\n * @param text the text\n * @param fontSize\n * @return the text's size\n */\nvar getTextSize = function getTextSize(text, fontSize) {\n var width = 0;\n var pattern = new RegExp(\"[\\u4E00-\\u9FA5]+\");\n text.split('').forEach(function (letter) {\n if (pattern.test(letter)) {\n // 中文字符\n width += fontSize;\n } else {\n width += getLetterWidth(letter, fontSize);\n }\n });\n return [width, fontSize];\n};\nvar truncateLabelByLength = function truncateLabelByLength(text, length) {\n if (typeof length !== 'number' || length <= 0 || length >= text.length) {\n return text;\n }\n return text.substring(0, length) + '...';\n};\n/**\n * construct the trees from combos data\n * @param array the combos array\n * @param nodes the nodes array\n * @return the tree\n */\nvar plainCombosToTrees = function plainCombosToTrees(array, nodes) {\n var result = [];\n var addedMap = {};\n var modelMap = {};\n array.forEach(function (d) {\n modelMap[d.id] = d;\n });\n array.forEach(function (d, i) {\n var cd = Object(_antv_util__WEBPACK_IMPORTED_MODULE_2__[\"clone\"])(d);\n cd.itemType = 'combo';\n cd.children = undefined;\n if (cd.parentId === cd.id) {\n console.warn(\"The parentId for combo \".concat(cd.id, \" can not be the same as the combo's id\"));\n delete cd.parentId;\n } else if (cd.parentId && !modelMap[cd.parentId]) {\n console.warn(\"The parent combo for combo \".concat(cd.id, \" does not exist!\"));\n delete cd.parentId;\n }\n var mappedObj = addedMap[cd.id];\n if (mappedObj) {\n cd.children = mappedObj.children;\n addedMap[cd.id] = cd;\n mappedObj = cd;\n if (!mappedObj.parentId) {\n result.push(mappedObj);\n return;\n }\n var mappedParent = addedMap[mappedObj.parentId];\n if (mappedParent) {\n if (mappedParent.children) mappedParent.children.push(cd);else mappedParent.children = [cd];\n } else {\n var parent_1 = {\n id: mappedObj.parentId,\n children: [mappedObj]\n };\n addedMap[mappedObj.parentId] = parent_1;\n addedMap[cd.id] = cd;\n }\n return;\n }\n if (Object(_antv_util__WEBPACK_IMPORTED_MODULE_2__[\"isString\"])(d.parentId)) {\n var parent_2 = addedMap[d.parentId];\n if (parent_2) {\n if (parent_2.children) parent_2.children.push(cd);else parent_2.children = [cd];\n addedMap[cd.id] = cd;\n } else {\n var pa = {\n id: d.parentId,\n children: [cd]\n };\n addedMap[pa.id] = pa;\n addedMap[cd.id] = cd;\n }\n } else {\n result.push(cd);\n addedMap[cd.id] = cd;\n }\n });\n // proccess the nodes\n var nodeMap = {};\n (nodes || []).forEach(function (node) {\n nodeMap[node.id] = node;\n var combo = addedMap[node.comboId];\n if (combo) {\n var cnode = {\n id: node.id,\n comboId: node.comboId\n };\n if (combo.children) combo.children.push(cnode);else combo.children = [cnode];\n cnode.itemType = 'node';\n addedMap[node.id] = cnode;\n }\n });\n // assign the depth for each element\n var maxDepth = 0;\n result.forEach(function (tree) {\n tree.depth = maxDepth + 10;\n traverseTree(tree, function (child) {\n var parent;\n var itemType = addedMap[child.id].itemType;\n if (itemType === 'node') {\n parent = addedMap[child.comboId];\n } else {\n parent = addedMap[child.parentId];\n }\n if (parent) {\n if (itemType === 'node') child.depth = maxDepth + 1;else child.depth = maxDepth + 10;\n } else {\n child.depth = maxDepth + 10;\n }\n if (maxDepth < child.depth) maxDepth = child.depth;\n var oriNodeModel = nodeMap[child.id];\n if (oriNodeModel) {\n oriNodeModel.depth = child.depth;\n }\n return true;\n });\n });\n return result;\n};\nvar reconstructTree = function reconstructTree(trees, subtreeId, newParentId) {\n var _a;\n var brothers = trees;\n var subtree;\n var comboChildsMap = {\n root: {\n children: trees\n }\n };\n var foundSubTree = false;\n var oldParentId = 'root';\n (trees || []).forEach(function (tree) {\n if (foundSubTree) return;\n if (tree.id === subtreeId) {\n subtree = tree;\n if (tree.itemType === 'combo') {\n subtree.parentId = newParentId;\n } else {\n subtree.comboId = newParentId;\n }\n foundSubTree = true;\n return;\n }\n traverseTree(tree, function (child) {\n var _a;\n comboChildsMap[child.id] = {\n children: (child === null || child === void 0 ? void 0 : child.children) || []\n };\n // store the old parent id to delete the subtree from the old parent's children in next recursion\n brothers = (_a = comboChildsMap[child.parentId || child.comboId || 'root']) === null || _a === void 0 ? void 0 : _a.children;\n if (child && (child.removed || subtreeId === child.id) && brothers) {\n oldParentId = child.parentId || child.comboId || 'root';\n subtree = child;\n // re-assign the parentId or comboId for the moved subtree\n if (child.itemType === 'combo') {\n subtree.parentId = newParentId;\n } else {\n subtree.comboId = newParentId;\n }\n foundSubTree = true;\n return false;\n }\n return true;\n });\n });\n brothers = (_a = comboChildsMap[oldParentId]) === null || _a === void 0 ? void 0 : _a.children;\n var index = brothers ? brothers.indexOf(subtree) : -1;\n if (index > -1) brothers.splice(index, 1);\n // 如果遍历完整棵树还没有找到,说明之前就不在树中\n if (!foundSubTree) {\n subtree = {\n id: subtreeId,\n itemType: 'node',\n comboId: newParentId\n };\n comboChildsMap[subtreeId] = {\n children: undefined\n };\n }\n // append to new parent\n if (subtreeId) {\n var found_1 = false;\n // newParentId is undefined means the subtree will have no parent\n if (newParentId) {\n var newParentDepth_1 = 0;\n (trees || []).forEach(function (tree) {\n if (found_1) return; // terminate\n traverseTree(tree, function (child) {\n // append subtree to the new parent ans assign the depth to the subtree\n if (newParentId === child.id) {\n found_1 = true;\n if (child.children) child.children.push(subtree);else child.children = [subtree];\n newParentDepth_1 = child.depth;\n if (subtree.itemType === 'node') subtree.depth = newParentDepth_1 + 2;else subtree.depth = newParentDepth_1 + 1;\n return false; // terminate\n }\n\n return true;\n });\n });\n } else if ((!newParentId || !found_1) && subtree.itemType !== 'node') {\n // if the newParentId is undefined or it is not found in the tree, add the subTree to the root\n trees.push(subtree);\n }\n // update the depth of the subtree and its children from the subtree\n var currentDepth_1 = subtree.depth;\n traverseTree(subtree, function (child) {\n if (child.itemType === 'node') currentDepth_1 += 2;else currentDepth_1 += 1;\n child.depth = currentDepth_1;\n return true;\n });\n }\n return trees;\n};\nvar getComboBBox = function getComboBBox(children, graph, combo) {\n var comboBBox = {\n minX: Infinity,\n minY: Infinity,\n maxX: -Infinity,\n maxY: -Infinity,\n x: undefined,\n y: undefined,\n width: undefined,\n height: undefined,\n centerX: undefined,\n centerY: undefined\n };\n if (!children || children.length === 0) {\n var comboModel = combo === null || combo === void 0 ? void 0 : combo.getModel();\n var _a = comboModel || {},\n x = _a.x,\n y = _a.y,\n fixSize = _a.fixSize,\n collapsed = _a.collapsed,\n fixCollapseSize = _a.fixCollapseSize;\n var useFixSize = collapsed ? fixCollapseSize : fixSize;\n var _b = Object(_antv_util__WEBPACK_IMPORTED_MODULE_2__[\"isArray\"])(useFixSize) ? useFixSize : [useFixSize, useFixSize],\n width = _b[0],\n height = _b[1];\n var halfSize = [width / 2, height / 2];\n return {\n minX: x - halfSize[0],\n minY: y - halfSize[1],\n maxX: x + halfSize[0],\n maxY: y + halfSize[1],\n x: x,\n y: y,\n width: width,\n height: height\n };\n }\n children.forEach(function (child) {\n var childItem = graph.findById(child.id);\n if (!childItem || !childItem.isVisible()) return; // ignore hidden children\n childItem.set('bboxCanvasCache', undefined);\n var childBBox = childItem.getCanvasBBox();\n if (childBBox.x && comboBBox.minX > childBBox.minX) comboBBox.minX = childBBox.minX;\n if (childBBox.y && comboBBox.minY > childBBox.minY) comboBBox.minY = childBBox.minY;\n if (childBBox.x && comboBBox.maxX < childBBox.maxX) comboBBox.maxX = childBBox.maxX;\n if (childBBox.y && comboBBox.maxY < childBBox.maxY) comboBBox.maxY = childBBox.maxY;\n });\n comboBBox.x = (comboBBox.minX + comboBBox.maxX) / 2;\n comboBBox.y = (comboBBox.minY + comboBBox.maxY) / 2;\n comboBBox.width = comboBBox.maxX - comboBBox.minX;\n comboBBox.height = comboBBox.maxY - comboBBox.minY;\n comboBBox.centerX = (comboBBox.minX + comboBBox.maxX) / 2;\n comboBBox.centerY = (comboBBox.minY + comboBBox.maxY) / 2;\n // if it is a circle combo, diagnal length of the children's bbox should be the diameter of the combo's bbox\n if ((combo === null || combo === void 0 ? void 0 : combo.getKeyShape().get('type')) === 'circle') {\n comboBBox.width = Math.hypot(comboBBox.height, comboBBox.width);\n comboBBox.height = comboBBox.width;\n }\n Object.keys(comboBBox).forEach(function (key) {\n if (comboBBox[key] === Infinity || comboBBox[key] === -Infinity) {\n comboBBox[key] = undefined;\n }\n });\n return comboBBox;\n};\nvar shouldRefreshEdge = function shouldRefreshEdge(cfg) {\n var refreshEdge = Object(_antv_util__WEBPACK_IMPORTED_MODULE_2__[\"isNumber\"])(cfg.x) || Object(_antv_util__WEBPACK_IMPORTED_MODULE_2__[\"isNumber\"])(cfg.y) || cfg.type || cfg.anchorPoints || cfg.size;\n if (cfg.style) refreshEdge = refreshEdge || Object(_antv_util__WEBPACK_IMPORTED_MODULE_2__[\"isNumber\"])(cfg.style.r) || Object(_antv_util__WEBPACK_IMPORTED_MODULE_2__[\"isNumber\"])(cfg.style.width) || Object(_antv_util__WEBPACK_IMPORTED_MODULE_2__[\"isNumber\"])(cfg.style.height) || Object(_antv_util__WEBPACK_IMPORTED_MODULE_2__[\"isNumber\"])(cfg.style.rx) || Object(_antv_util__WEBPACK_IMPORTED_MODULE_2__[\"isNumber\"])(cfg.style.ry);\n return refreshEdge;\n};\nvar cloneBesidesImg = function cloneBesidesImg(obj) {\n var clonedObj = {};\n Object.keys(obj).forEach(function (key1) {\n var obj2 = obj[key1];\n if (key1 === 'img' && !Object(_antv_util__WEBPACK_IMPORTED_MODULE_2__[\"isString\"])(obj2)) return;\n if (Object(_antv_util__WEBPACK_IMPORTED_MODULE_2__[\"isObject\"])(obj2) && !Object(_antv_util__WEBPACK_IMPORTED_MODULE_2__[\"isArray\"])(obj2)) {\n var clonedObj2_1 = {};\n Object.keys(obj2).forEach(function (key2) {\n var v = obj2[key2];\n if (key2 === 'img' && !Object(_antv_util__WEBPACK_IMPORTED_MODULE_2__[\"isString\"])(v)) return;\n clonedObj2_1[key2] = Object(_antv_util__WEBPACK_IMPORTED_MODULE_2__[\"clone\"])(v);\n });\n clonedObj[key1] = clonedObj2_1;\n } else {\n clonedObj[key1] = Object(_antv_util__WEBPACK_IMPORTED_MODULE_2__[\"clone\"])(obj2);\n }\n });\n return clonedObj;\n};\nvar getAnimateCfgWithCallback = function getAnimateCfgWithCallback(_a) {\n var animateCfg = _a.animateCfg,\n callback = _a.callback;\n var animateConfig;\n if (!animateCfg) {\n animateConfig = {\n duration: 500,\n callback: callback\n };\n } else {\n animateConfig = Object(_antv_util__WEBPACK_IMPORTED_MODULE_2__[\"clone\"])(animateCfg);\n if (animateCfg.callback) {\n var animateCfgCallback_1 = animateCfg.callback;\n animateConfig.callback = function () {\n callback();\n animateCfgCallback_1();\n };\n } else {\n animateConfig.callback = callback;\n }\n }\n return animateConfig;\n};\n\n//# sourceURL=webpack:///./node_modules/@antv/g6-core/es/util/graphic.js?");
/***/ }),
/***/ "./node_modules/@antv/g6-core/es/util/index.js":
/*!*****************************************************!*\
!*** ./node_modules/@antv/g6-core/es/util/index.js ***!
\*****************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tslib */ \"./node_modules/tslib/tslib.es6.js\");\n/* harmony import */ var _math__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./math */ \"./node_modules/@antv/g6-core/es/util/math.js\");\n/* harmony import */ var _graphic__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./graphic */ \"./node_modules/@antv/g6-core/es/util/graphic.js\");\n/* harmony import */ var _path__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./path */ \"./node_modules/@antv/g6-core/es/util/path.js\");\n/* harmony import */ var _base__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./base */ \"./node_modules/@antv/g6-core/es/util/base.js\");\n/* harmony import */ var _color__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./color */ \"./node_modules/@antv/g6-core/es/util/color.js\");\n/* harmony import */ var _layout__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./layout */ \"./node_modules/@antv/g6-core/es/util/layout.js\");\n/* harmony import */ var _antv_matrix_util__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @antv/matrix-util */ \"./node_modules/@antv/matrix-util/esm/index.js\");\n\n\n\n\n\n\n\n\nvar transform = _antv_matrix_util__WEBPACK_IMPORTED_MODULE_7__[\"ext\"].transform;\nvar Util = Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__assign\"])(Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__assign\"])(Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__assign\"])(Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__assign\"])(Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__assign\"])(Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__assign\"])(Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__assign\"])({}, _base__WEBPACK_IMPORTED_MODULE_4__), _graphic__WEBPACK_IMPORTED_MODULE_2__), _path__WEBPACK_IMPORTED_MODULE_3__), _math__WEBPACK_IMPORTED_MODULE_1__), _color__WEBPACK_IMPORTED_MODULE_5__), _layout__WEBPACK_IMPORTED_MODULE_6__), {\n transform: transform,\n mat3: _antv_matrix_util__WEBPACK_IMPORTED_MODULE_7__[\"mat3\"]\n});\n/* harmony default export */ __webpack_exports__[\"default\"] = (Util);\n\n//# sourceURL=webpack:///./node_modules/@antv/g6-core/es/util/index.js?");
/***/ }),
/***/ "./node_modules/@antv/g6-core/es/util/layout.js":
/*!******************************************************!*\
!*** ./node_modules/@antv/g6-core/es/util/layout.js ***!
\******************************************************/
/*! exports provided: isForce */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"isForce\", function() { return isForce; });\nvar isForce = function isForce(layoutType) {\n return layoutType === 'force' || layoutType === 'g6force' || layoutType === 'gForce' || layoutType === 'force2';\n};\n\n//# sourceURL=webpack:///./node_modules/@antv/g6-core/es/util/layout.js?");
/***/ }),
/***/ "./node_modules/@antv/g6-core/es/util/letterAspectRatio.js":
/*!*****************************************************************!*\
!*** ./node_modules/@antv/g6-core/es/util/letterAspectRatio.js ***!
\*****************************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony default export */ __webpack_exports__[\"default\"] = ({\n ' ': 0.3329986572265625,\n a: 0.5589996337890625,\n A: 0.6569992065429687,\n b: 0.58599853515625,\n B: 0.6769989013671875,\n c: 0.5469985961914062,\n C: 0.7279998779296875,\n d: 0.58599853515625,\n D: 0.705999755859375,\n e: 0.554998779296875,\n E: 0.63699951171875,\n f: 0.37299957275390627,\n F: 0.5769989013671875,\n g: 0.5909988403320312,\n G: 0.7479995727539063,\n h: 0.555999755859375,\n H: 0.7199996948242188,\n i: 0.255999755859375,\n I: 0.23699951171875,\n j: 0.26699981689453123,\n J: 0.5169998168945312,\n k: 0.5289993286132812,\n K: 0.6899993896484375,\n l: 0.23499908447265624,\n L: 0.5879989624023437,\n m: 0.854998779296875,\n M: 0.8819992065429687,\n n: 0.5589996337890625,\n N: 0.7189987182617188,\n o: 0.58599853515625,\n O: 0.7669998168945312,\n p: 0.58599853515625,\n P: 0.6419998168945312,\n q: 0.58599853515625,\n Q: 0.7669998168945312,\n r: 0.3649993896484375,\n R: 0.6759994506835938,\n s: 0.504998779296875,\n S: 0.6319992065429687,\n t: 0.354998779296875,\n T: 0.6189987182617187,\n u: 0.5599990844726562,\n U: 0.7139999389648437,\n v: 0.48199920654296874,\n V: 0.6389999389648438,\n w: 0.754998779296875,\n W: 0.929998779296875,\n x: 0.5089996337890625,\n X: 0.63699951171875,\n y: 0.4959991455078125,\n Y: 0.66199951171875,\n z: 0.48699951171875,\n Z: 0.6239990234375,\n '0': 0.6,\n '1': 0.40099945068359377,\n '2': 0.6,\n '3': 0.6,\n '4': 0.6,\n '5': 0.6,\n '6': 0.6,\n '7': 0.5469985961914062,\n '8': 0.6,\n '9': 0.6,\n '[': 0.3329986572265625,\n ']': 0.3329986572265625,\n ',': 0.26399993896484375,\n '.': 0.26399993896484375,\n ';': 0.26399993896484375,\n ':': 0.26399993896484375,\n '{': 0.3329986572265625,\n '}': 0.3329986572265625,\n '\\\\': 0.5,\n '|': 0.19499969482421875,\n '=': 0.604998779296875,\n '+': 0.604998779296875,\n '-': 0.604998779296875,\n _: 0.5,\n '`': 0.3329986572265625,\n ' ~': 0.8329986572265625,\n '!': 0.3329986572265625,\n '@': 0.8579986572265625,\n '#': 0.6,\n $: 0.6,\n '%': 0.9699996948242188,\n '^': 0.517999267578125,\n '&': 0.7259994506835937,\n '*': 0.505999755859375,\n '(': 0.3329986572265625,\n ')': 0.3329986572265625,\n '<': 0.604998779296875,\n '>': 0.604998779296875,\n '/': 0.5,\n '?': 0.53699951171875\n});\n\n//# sourceURL=webpack:///./node_modules/@antv/g6-core/es/util/letterAspectRatio.js?");
/***/ }),
/***/ "./node_modules/@antv/g6-core/es/util/math.js":
/*!****************************************************!*\
!*** ./node_modules/@antv/g6-core/es/util/math.js ***!
\****************************************************/
/*! exports provided: compare, getLineIntersect, getRectIntersectByPoint, getCircleIntersectByPoint, getEllipseIntersectByPoint, applyMatrix, invertMatrix, getCircleCenterByPoints, distance, scaleMatrix, floydWarshall, getAdjMatrix, translate, move, scale, rotate, getDegree, isPointInPolygon, intersectBBox, isPolygonsIntersect, Line, getBBoxBoundLine, itemIntersectByLine, fractionToLine, getPointsCenter, squareDist, pointLineSquareDist, isPointsOverlap, pointRectSquareDist, pointLineDistance, lerp, lerpArray */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"compare\", function() { return compare; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"getLineIntersect\", function() { return getLineIntersect; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"getRectIntersectByPoint\", function() { return getRectIntersectByPoint; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"getCircleIntersectByPoint\", function() { return getCircleIntersectByPoint; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"getEllipseIntersectByPoint\", function() { return getEllipseIntersectByPoint; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"applyMatrix\", function() { return applyMatrix; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"invertMatrix\", function() { return invertMatrix; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"getCircleCenterByPoints\", function() { return getCircleCenterByPoints; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"distance\", function() { return distance; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"scaleMatrix\", function() { return scaleMatrix; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"floydWarshall\", function() { return floydWarshall; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"getAdjMatrix\", function() { return getAdjMatrix; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"translate\", function() { return translate; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"move\", function() { return move; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"scale\", function() { return scale; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"rotate\", function() { return rotate; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"getDegree\", function() { return getDegree; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"isPointInPolygon\", function() { return isPointInPolygon; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"intersectBBox\", function() { return intersectBBox; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"isPolygonsIntersect\", function() { return isPolygonsIntersect; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"Line\", function() { return Line; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"getBBoxBoundLine\", function() { return getBBoxBoundLine; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"itemIntersectByLine\", function() { return itemIntersectByLine; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"fractionToLine\", function() { return fractionToLine; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"getPointsCenter\", function() { return getPointsCenter; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"squareDist\", function() { return squareDist; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"pointLineSquareDist\", function() { return pointLineSquareDist; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"isPointsOverlap\", function() { return isPointsOverlap; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"pointRectSquareDist\", function() { return pointRectSquareDist; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"pointLineDistance\", function() { return pointLineDistance; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"lerp\", function() { return lerp; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"lerpArray\", function() { return lerpArray; });\n/* harmony import */ var _antv_matrix_util__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @antv/matrix-util */ \"./node_modules/@antv/matrix-util/esm/index.js\");\n/* harmony import */ var _antv_util__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @antv/util */ \"./node_modules/@antv/util/esm/index.js\");\n\n\nvar transform = _antv_matrix_util__WEBPACK_IMPORTED_MODULE_0__[\"ext\"].transform;\n/**\n * 对比对象,用于对象数组排序\n * @param {string} attributeName 排序依据的字段名称\n * @param {number} min 最小值\n * @param {number} max 最大值\n * @return {boolean} bool 布尔\n */\nvar compare = function compare(attributeName) {\n return function (m, n) {\n return m[attributeName] - n[attributeName];\n };\n};\n/**\n * 是否在区间内\n * @param {number} value 值\n * @param {number} min 最小值\n * @param {number} max 最大值\n * @return {boolean} bool 布尔\n */\nvar isBetween = function isBetween(value, min, max) {\n return value >= min && value <= max;\n};\n/**\n * 获取两条线段的交点\n * @param {Point} p0 第一条线段起点\n * @param {Point} p1 第一条线段终点\n * @param {Point} p2 第二条线段起点\n * @param {Point} p3 第二条线段终点\n * @return {Point} 交点\n */\nvar getLineIntersect = function getLineIntersect(p0, p1, p2, p3) {\n var tolerance = 0.0001;\n var E = {\n x: p2.x - p0.x,\n y: p2.y - p0.y\n };\n var D0 = {\n x: p1.x - p0.x,\n y: p1.y - p0.y\n };\n var D1 = {\n x: p3.x - p2.x,\n y: p3.y - p2.y\n };\n var kross = D0.x * D1.y - D0.y * D1.x;\n var sqrKross = kross * kross;\n var invertKross = 1 / kross;\n var sqrLen0 = D0.x * D0.x + D0.y * D0.y;\n var sqrLen1 = D1.x * D1.x + D1.y * D1.y;\n if (sqrKross > tolerance * sqrLen0 * sqrLen1) {\n var s = (E.x * D1.y - E.y * D1.x) * invertKross;\n var t = (E.x * D0.y - E.y * D0.x) * invertKross;\n if (!isBetween(s, 0, 1) || !isBetween(t, 0, 1)) return null;\n return {\n x: p0.x + s * D0.x,\n y: p0.y + s * D0.y\n };\n }\n return null;\n};\n/**\n * point and rectangular intersection point\n * @param {IRect} rect rect\n * @param {Point} point point\n * @return {PointPoint} rst;\n */\nvar getRectIntersectByPoint = function getRectIntersectByPoint(rect, point) {\n var x = rect.x,\n y = rect.y,\n width = rect.width,\n height = rect.height;\n var cx = x + width / 2;\n var cy = y + height / 2;\n var points = [];\n var center = {\n x: cx,\n y: cy\n };\n points.push({\n x: x,\n y: y\n });\n points.push({\n x: x + width,\n y: y\n });\n points.push({\n x: x + width,\n y: y + height\n });\n points.push({\n x: x,\n y: y + height\n });\n points.push({\n x: x,\n y: y\n });\n var rst = null;\n for (var i = 1; i < points.length; i++) {\n rst = getLineIntersect(points[i - 1], points[i], center, point);\n if (rst) {\n break;\n }\n }\n return rst;\n};\n/**\n * get point and circle inIntersect\n * @param {ICircle} circle 圆点,x,y,r\n * @param {Point} point 点 x,y\n * @return {Point} applied point\n */\nvar getCircleIntersectByPoint = function getCircleIntersectByPoint(circle, point) {\n var cx = circle.x,\n cy = circle.y,\n r = circle.r;\n var x = point.x,\n y = point.y;\n var dx = x - cx;\n var dy = y - cy;\n if (dx * dx + dy * dy < r * r) {\n return null;\n }\n var angle = Math.atan(dy / dx);\n return {\n x: cx + Math.abs(r * Math.cos(angle)) * Math.sign(dx),\n y: cy + Math.abs(r * Math.sin(angle)) * Math.sign(dy)\n };\n};\n/**\n * get point and ellipse inIntersect\n * @param {Object} ellipse 椭圆 x,y,rx,ry\n * @param {Object} point 点 x,y\n * @return {object} applied point\n */\nvar getEllipseIntersectByPoint = function getEllipseIntersectByPoint(ellipse, point) {\n var a = ellipse.rx;\n var b = ellipse.ry;\n var cx = ellipse.x;\n var cy = ellipse.y;\n var dx = point.x - cx;\n var dy = point.y - cy;\n // 直接通过 x,y 求夹角,求出来的范围是 -PI, PI\n var angle = Math.atan2(dy / b, dx / a);\n if (angle < 0) {\n angle += 2 * Math.PI; // 转换到 0,2PI\n }\n\n return {\n x: cx + a * Math.cos(angle),\n y: cy + b * Math.sin(angle)\n };\n};\n/**\n * coordinate matrix transformation\n * @param {number} point coordinate\n * @param {Matrix} matrix matrix\n * @param {number} tag could be 0 or 1\n * @return {Point} transformed point\n */\nvar applyMatrix = function applyMatrix(point, matrix, tag) {\n if (tag === void 0) {\n tag = 1;\n }\n var vector = [point.x, point.y, tag];\n if (!matrix || isNaN(matrix[0])) {\n matrix = [1, 0, 0, 0, 1, 0, 0, 0, 1];\n }\n _antv_matrix_util__WEBPACK_IMPORTED_MODULE_0__[\"vec3\"].transformMat3(vector, vector, matrix);\n return {\n x: vector[0],\n y: vector[1]\n };\n};\n/**\n * coordinate matrix invert transformation\n * @param {number} point coordinate\n * @param {number} matrix matrix\n * @param {number} tag could be 0 or 1\n * @return {object} transformed point\n */\nvar invertMatrix = function invertMatrix(point, matrix, tag) {\n if (tag === void 0) {\n tag = 1;\n }\n if (!matrix || isNaN(matrix[0])) {\n matrix = [1, 0, 0, 0, 1, 0, 0, 0, 1];\n }\n var inversedMatrix = _antv_matrix_util__WEBPACK_IMPORTED_MODULE_0__[\"mat3\"].invert([1, 0, 0, 0, 1, 0, 0, 0, 1], matrix);\n if (!inversedMatrix) {\n inversedMatrix = [1, 0, 0, 0, 1, 0, 0, 0, 1];\n }\n var vector = [point.x, point.y, tag];\n _antv_matrix_util__WEBPACK_IMPORTED_MODULE_0__[\"vec3\"].transformMat3(vector, vector, inversedMatrix);\n return {\n x: vector[0],\n y: vector[1]\n };\n};\n/**\n *\n * @param p1 First coordinate\n * @param p2 second coordinate\n * @param p3 three coordinate\n */\nvar getCircleCenterByPoints = function getCircleCenterByPoints(p1, p2, p3) {\n var a = p1.x - p2.x;\n var b = p1.y - p2.y;\n var c = p1.x - p3.x;\n var d = p1.y - p3.y;\n var e = (p1.x * p1.x - p2.x * p2.x - p2.y * p2.y + p1.y * p1.y) / 2;\n var f = (p1.x * p1.x - p3.x * p3.x - p3.y * p3.y + p1.y * p1.y) / 2;\n var denominator = b * c - a * d;\n return {\n x: -(d * e - b * f) / denominator,\n y: -(a * f - c * e) / denominator\n };\n};\n/**\n * get distance by two points\n * @param p1 first point\n * @param p2 second point\n */\nvar distance = function distance(p1, p2) {\n var vx = p1.x - p2.x;\n var vy = p1.y - p2.y;\n return Math.sqrt(vx * vx + vy * vy);\n};\n/**\n * scale matrix\n * @param matrix [ [], [], [] ]\n * @param ratio\n */\nvar scaleMatrix = function scaleMatrix(matrix, ratio) {\n var result = [];\n matrix.forEach(function (row) {\n var newRow = [];\n row.forEach(function (v) {\n newRow.push(v * ratio);\n });\n result.push(newRow);\n });\n return result;\n};\n/**\n * Floyd Warshall algorithm for shortest path distances matrix\n * @param {array} adjMatrix adjacency matrix\n * @return {array} distances shortest path distances matrix\n */\nvar floydWarshall = function floydWarshall(adjMatrix) {\n // initialize\n var dist = [];\n var size = adjMatrix.length;\n for (var i = 0; i < size; i += 1) {\n dist[i] = [];\n for (var j = 0; j < size; j += 1) {\n if (i === j) {\n dist[i][j] = 0;\n } else if (adjMatrix[i][j] === 0 || !adjMatrix[i][j]) {\n dist[i][j] = Infinity;\n } else {\n dist[i][j] = adjMatrix[i][j];\n }\n }\n }\n // floyd\n for (var k = 0; k < size; k += 1) {\n for (var i = 0; i < size; i += 1) {\n for (var j = 0; j < size; j += 1) {\n if (dist[i][j] > dist[i][k] + dist[k][j]) {\n dist[i][j] = dist[i][k] + dist[k][j];\n }\n }\n }\n }\n return dist;\n};\n/**\n * get adjacency matrix\n * @param data graph data\n * @param directed whether it's a directed graph\n */\nvar getAdjMatrix = function getAdjMatrix(data, directed) {\n var nodes = data.nodes,\n edges = data.edges;\n var matrix = [];\n // map node with index in data.nodes\n var nodeMap = {};\n if (!nodes) {\n throw new Error('invalid nodes data!');\n }\n if (nodes) {\n nodes.forEach(function (node, i) {\n nodeMap[node.id] = i;\n var row = [];\n matrix.push(row);\n });\n }\n if (edges) {\n edges.forEach(function (e) {\n var source = e.source,\n target = e.target;\n var sIndex = nodeMap[source];\n var tIndex = nodeMap[target];\n matrix[sIndex][tIndex] = 1;\n if (!directed) {\n matrix[tIndex][sIndex] = 1;\n }\n });\n }\n return matrix;\n};\n/**\n * 平移group\n * @param group Group 实例\n * @param vec 移动向量\n */\nvar translate = function translate(group, vec) {\n group.translate(vec.x, vec.y);\n};\n/**\n * 移动到指定坐标点\n * @param group Group 实例\n * @param point 移动到的坐标点\n */\nvar move = function move(group, point, animate, animateCfg) {\n if (animateCfg === void 0) {\n animateCfg = {\n duration: 500\n };\n }\n var matrix = group.getMatrix();\n if (!matrix) {\n matrix = [1, 0, 0, 0, 1, 0, 0, 0, 1];\n }\n var bbox = group.getCanvasBBox();\n var vx = point.x - bbox.minX;\n var vy = point.y - bbox.minY;\n if (animate) {\n var dx_1 = vx * matrix[0];\n var dy_1 = vy * matrix[4];\n var lastX_1 = 0;\n var lastY_1 = 0;\n var newX_1 = 0;\n var newY_1 = 0;\n group.animate(function (ratio) {\n newX_1 = dx_1 * ratio;\n newY_1 = dy_1 * ratio;\n matrix = transform(matrix, [['t', newX_1 - lastX_1, newY_1 - lastY_1]]);\n lastX_1 = newX_1;\n lastY_1 = newY_1;\n return {\n matrix: matrix\n };\n }, animateCfg);\n } else {\n var movedMatrix = transform(matrix, [['t', vx, vy]]);\n group.setMatrix(movedMatrix);\n }\n};\n/**\n * 缩放 group\n * @param group Group 实例\n * @param point 在x 和 y 方向上的缩放比例\n */\nvar scale = function scale(group, ratio) {\n var matrix = group.getMatrix();\n if (!matrix) {\n matrix = [1, 0, 0, 0, 1, 0, 0, 0, 1];\n }\n var scaleXY = ratio;\n if (!Object(_antv_util__WEBPACK_IMPORTED_MODULE_1__[\"isArray\"])(ratio)) {\n scaleXY = [ratio, ratio];\n }\n if (Object(_antv_util__WEBPACK_IMPORTED_MODULE_1__[\"isArray\"])(ratio) && ratio.length === 1) {\n scaleXY = [ratio[0], ratio[0]];\n }\n matrix = transform(matrix, [['s', scaleXY[0], scaleXY[1]]]);\n group.setMatrix(matrix);\n};\n/**\n *\n * @param group Group 实例\n * @param ratio 选择角度\n */\nvar rotate = function rotate(group, angle) {\n var matrix = group.getMatrix();\n if (!matrix) {\n matrix = [1, 0, 0, 0, 1, 0, 0, 0, 1];\n }\n matrix = transform(matrix, [['r', angle]]);\n group.setMatrix(matrix);\n};\nvar getDegree = function getDegree(n, nodeIdxMap, edges) {\n var degrees = [];\n for (var i = 0; i < n; i++) {\n degrees[i] = 0;\n }\n edges.forEach(function (e) {\n if (e.source) {\n degrees[nodeIdxMap[e.source]] += 1;\n }\n if (e.target) {\n degrees[nodeIdxMap[e.target]] += 1;\n }\n });\n return degrees;\n};\n// 判断点Q是否在p1和p2的线段上\nfunction onSegment(p1, p2, q) {\n if ((q[0] - p1[0]) * (p2[1] - p1[1]) === (p2[0] - p1[0]) * (q[1] - p1[1]) && Math.min(p1[0], p2[0]) <= q[0] && q[0] <= Math.max(p1[0], p2[0]) && Math.min(p1[1], p2[1]) <= q[1] && q[1] <= Math.max(p1[1], p2[1])) {\n return true;\n }\n return false;\n}\n/**\n * 判断点P在多边形内-射线法. Borrow from https://github.com/antvis/util/blob/master/packages/path-util/src/point-in-polygon.ts\n * @param points\n * @param x\n * @param y\n */\nvar isPointInPolygon = function isPointInPolygon(points, x, y) {\n var isHit = false;\n var n = points.length;\n // 判断两个double在eps精度下的大小关系\n var tolerance = 1e-6;\n function dcmp(xValue) {\n if (Math.abs(xValue) < tolerance) {\n return 0;\n }\n return xValue < 0 ? -1 : 1;\n }\n if (n <= 2) {\n // svg 中点小于 3 个时,不显示,也无法被拾取\n return false;\n }\n for (var i = 0; i < n; i++) {\n var p1 = points[i];\n var p2 = points[(i + 1) % n];\n if (onSegment(p1, p2, [x, y])) {\n // 点在多边形一条边上\n return true;\n }\n // 前一个判断min(p1[1],p2[1]) 0 !== dcmp(p2[1] - y) > 0 && dcmp(x - (y - p1[1]) * (p1[0] - p2[0]) / (p1[1] - p2[1]) - p1[0]) < 0) {\n isHit = !isHit;\n }\n }\n return isHit;\n};\n// 判断两个BBox是否相交\nvar intersectBBox = function intersectBBox(box1, box2) {\n return !(box2.minX > box1.maxX || box2.maxX < box1.minX || box2.minY > box1.maxY || box2.maxY < box1.minY);\n};\nvar lineIntersectPolygon = function lineIntersectPolygon(lines, line) {\n var isIntersect = false;\n Object(_antv_util__WEBPACK_IMPORTED_MODULE_1__[\"each\"])(lines, function (l) {\n if (getLineIntersect(l.from, l.to, line.from, line.to)) {\n isIntersect = true;\n return false;\n }\n });\n return isIntersect;\n};\n/**\n * 判断两个polygon是否相交。\n * borrow from @antv/path-util\n * @param points1 polygon1的顶点数组\n * @param points2 polygon2的顶点数组\n */\nvar isPolygonsIntersect = function isPolygonsIntersect(points1, points2) {\n var getBBox = function getBBox(points) {\n var xArr = points.map(function (p) {\n return p[0];\n });\n var yArr = points.map(function (p) {\n return p[1];\n });\n return {\n minX: Math.min.apply(null, xArr),\n maxX: Math.max.apply(null, xArr),\n minY: Math.min.apply(null, yArr),\n maxY: Math.max.apply(null, yArr)\n };\n };\n var parseToLines = function parseToLines(points) {\n var lines = [];\n var count = points.length;\n for (var i = 0; i < count - 1; i++) {\n var point = points[i];\n var next = points[i + 1];\n lines.push({\n from: {\n x: point[0],\n y: point[1]\n },\n to: {\n x: next[0],\n y: next[1]\n }\n });\n }\n if (lines.length > 1) {\n var first = points[0];\n var last = points[count - 1];\n lines.push({\n from: {\n x: last[0],\n y: last[1]\n },\n to: {\n x: first[0],\n y: first[1]\n }\n });\n }\n return lines;\n };\n // 空数组,或者一个点返回 false\n if (points1.length < 2 || points2.length < 2) {\n return false;\n }\n var bbox1 = getBBox(points1);\n var bbox2 = getBBox(points2);\n // 判定包围盒是否相交,比判定点是否在多边形内要快的多,可以筛选掉大多数情况\n if (!intersectBBox(bbox1, bbox2)) {\n return false;\n }\n var isIn = false;\n // 判定点是否在多边形内部,一旦有一个点在另一个多边形内,则返回\n Object(_antv_util__WEBPACK_IMPORTED_MODULE_1__[\"each\"])(points2, function (point) {\n if (isPointInPolygon(points1, point[0], point[1])) {\n isIn = true;\n return false;\n }\n });\n if (isIn) {\n return true;\n }\n Object(_antv_util__WEBPACK_IMPORTED_MODULE_1__[\"each\"])(points1, function (point) {\n if (isPointInPolygon(points2, point[0], point[1])) {\n isIn = true;\n return false;\n }\n });\n if (isIn) {\n return true;\n }\n var lines1 = parseToLines(points1);\n var lines2 = parseToLines(points2);\n var isIntersect = false;\n Object(_antv_util__WEBPACK_IMPORTED_MODULE_1__[\"each\"])(lines2, function (line) {\n if (lineIntersectPolygon(lines1, line)) {\n isIntersect = true;\n return false;\n }\n });\n return isIntersect;\n};\nvar Line = /** @class */function () {\n function Line(x1, y1, x2, y2) {\n this.x1 = x1;\n this.y1 = y1;\n this.x2 = x2;\n this.y2 = y2;\n }\n Line.prototype.getBBox = function () {\n var minX = Math.min(this.x1, this.x2);\n var minY = Math.min(this.y1, this.y2);\n var maxX = Math.max(this.x1, this.x2);\n var maxY = Math.max(this.y1, this.y2);\n var res = {\n x: minX,\n y: minY,\n minX: minX,\n minY: minY,\n maxX: maxX,\n maxY: maxY,\n width: maxX - minX,\n height: maxY - minY\n };\n return res;\n };\n return Line;\n}();\n\nvar getBBoxBoundLine = function getBBoxBoundLine(bbox, direction) {\n var bounds = {\n top: [bbox.minX, bbox.minY, bbox.maxX, bbox.minY],\n left: [bbox.minX, bbox.minY, bbox.minX, bbox.maxY],\n bottom: [bbox.minX, bbox.maxY, bbox.maxX, bbox.maxY],\n right: [bbox.maxX, bbox.minY, bbox.maxX, bbox.maxY]\n };\n return bounds[direction];\n};\n/**\n * 计算两条线段相交时,相交点对第一条线段上的分割比例\n */\nvar fractionAlongLineA = function fractionAlongLineA(la, lb) {\n var uaT = (lb.x2 - lb.x1) * (la.y1 - lb.y1) - (lb.y2 - lb.y1) * (la.x1 - lb.x1);\n var ubT = (la.x2 - la.x1) * (la.y1 - lb.y1) - (la.y2 - la.y1) * (la.x1 - lb.x1);\n var uB = (lb.y2 - lb.y1) * (la.x2 - la.x1) - (lb.x2 - lb.x1) * (la.y2 - la.y1);\n if (uB) {\n var ua = uaT / uB;\n var ub = ubT / uB;\n if (ua >= 0 && ua <= 1 && ub >= 0 && ub <= 1) {\n return ua;\n }\n }\n return Number.POSITIVE_INFINITY;\n};\nvar itemIntersectByLine = function itemIntersectByLine(item, line) {\n var directions = ['top', 'left', 'bottom', 'right'];\n var bbox = item.getBBox();\n var countIntersections = 0;\n var intersections = [];\n for (var i = 0; i < 4; i++) {\n var _a = getBBoxBoundLine(bbox, directions[i]),\n x1 = _a[0],\n y1 = _a[1],\n x2 = _a[2],\n y2 = _a[3];\n intersections[i] = getLineIntersect({\n x: line.x1,\n y: line.y1\n }, {\n x: line.x2,\n y: line.y2\n }, {\n x: x1,\n y: y1\n }, {\n x: x2,\n y: y2\n });\n if (intersections[i]) {\n countIntersections += 1;\n }\n }\n return [intersections, countIntersections];\n};\nvar fractionToLine = function fractionToLine(item, line) {\n var directions = ['top', 'left', 'bottom', 'right'];\n var bbox = item.getBBox();\n var minDistance = Number.POSITIVE_INFINITY;\n var countIntersections = 0;\n for (var i = 0; i < 4; i++) {\n var _a = getBBoxBoundLine(bbox, directions[i]),\n x1 = _a[0],\n y1 = _a[1],\n x2 = _a[2],\n y2 = _a[3];\n var testDistance = fractionAlongLineA(line, new Line(x1, y1, x2, y2));\n testDistance = Math.abs(testDistance - 0.5);\n if (testDistance >= 0 && testDistance <= 1) {\n countIntersections += 1;\n minDistance = testDistance < minDistance ? testDistance : minDistance;\n }\n }\n if (countIntersections === 0) return -1;\n return minDistance;\n};\nvar getPointsCenter = function getPointsCenter(points) {\n var centerX = 0;\n var centerY = 0;\n if (points.length > 0) {\n for (var _i = 0, points_1 = points; _i < points_1.length; _i++) {\n var point = points_1[_i];\n centerX += point.x;\n centerY += point.y;\n }\n centerX /= points.length;\n centerY /= points.length;\n }\n return {\n x: centerX,\n y: centerY\n };\n};\nvar squareDist = function squareDist(a, b) {\n return Math.pow(a.x - b.x, 2) + Math.pow(a.y - b.y, 2);\n};\nvar pointLineSquareDist = function pointLineSquareDist(point, line) {\n var x1 = line.x1;\n var y1 = line.y1;\n var x2 = line.x2 - x1;\n var y2 = line.y2 - y1;\n var px = point.x - x1;\n var py = point.y - y1;\n var dotprod = px * x2 + py * y2;\n var projlenSq;\n if (dotprod <= 0) {\n projlenSq = 0;\n } else {\n px = x2 - px;\n py = y2 - py;\n dotprod = px * x2 + py * y2;\n if (dotprod <= 0) {\n projlenSq = 0;\n } else {\n projlenSq = dotprod * dotprod / (x2 * x2 + y2 * y2);\n }\n }\n var lenSq = px * px + py * py - projlenSq;\n if (lenSq < 0) {\n lenSq = 0;\n }\n return lenSq;\n};\nvar isPointsOverlap = function isPointsOverlap(p1, p2, e) {\n if (e === void 0) {\n e = 1e-3;\n }\n return Math.pow(p1.x - p2.x, 2) + Math.pow(p1.y - p2.y, 2) < Math.pow(e, 2);\n};\n/**\n * 点到矩形的距离的平方:矩形内部点视作距离为0,外部的点若投影落在矩形边上则为点到矩形边的最近的垂直距离,否则为点到矩形顶点的距离,\n * @param point IPoint\n * @param rect IRect\n */\nvar pointRectSquareDist = function pointRectSquareDist(point, rect) {\n var isLeft = point.x < rect.x;\n var isRight = point.x > rect.x + rect.width;\n var isTop = point.y > rect.y + rect.height;\n var isBottom = point.y < rect.y;\n var isPointOutside = isLeft || isRight || isTop || isBottom;\n if (!isPointOutside) {\n return 0;\n }\n if (isTop && !isLeft && !isRight) {\n return Math.pow(rect.y + rect.height - point.y, 2);\n }\n if (isBottom && !isLeft && !isRight) {\n return Math.pow(point.y - rect.y, 2);\n }\n if (isLeft && !isTop && !isBottom) {\n return Math.pow(rect.x - point.x, 2);\n }\n if (isRight && !isTop && !isBottom) {\n return Math.pow(rect.x + rect.width - point.x, 2);\n }\n var dx = Math.min(Math.abs(rect.x - point.x), Math.abs(rect.x + rect.width - point.x));\n var dy = Math.min(Math.abs(rect.y - point.y), Math.abs(rect.y + rect.height - point.y));\n return dx * dx + dy * dy;\n};\n/**\n * point to line distance\n * @param {array} line 线的四个顶点 [x1, y1, x2, y2]\n * @param {object} point 坐标点 {x, y}\n * @return {Number|NaN} distance\n */\nvar pointLineDistance = function pointLineDistance(line, point) {\n var x1 = line[0],\n y1 = line[1],\n x2 = line[2],\n y2 = line[3];\n var x = point.x,\n y = point.y;\n var d = [x2 - x1, y2 - y1];\n if (_antv_matrix_util__WEBPACK_IMPORTED_MODULE_0__[\"vec2\"].exactEquals(d, [0, 0])) {\n return NaN;\n }\n var u = [-d[1], d[0]];\n // @ts-ignore\n _antv_matrix_util__WEBPACK_IMPORTED_MODULE_0__[\"vec2\"].normalize(u, u);\n var a = [x - x1, y - y1];\n // @ts-ignore\n return Math.abs(_antv_matrix_util__WEBPACK_IMPORTED_MODULE_0__[\"vec2\"].dot(a, u));\n};\n/**\n * Linearly interpolate between start and end, where alpha is the percent distance along the line.\n * alpha = 0 will be start, and alpha = 1 will be end.\n * @param {number} start\n * @param {number} end\n * @param {number} alpha interpolation factor, typically in the closed interval [0, 1]\n * @returns {number}\n */\nvar lerp = function lerp(start, end, alpha) {\n return start + (end - start) * alpha;\n};\n/**\n * Linearly interpolate between start and end arrays, where alpha is the percent distance along the line.\n * alpha = 0 will be start, and alpha = 1 will be end.\n * @param {number[]} start\n * @param {number[]} end\n * @param {number} alpha interpolation factor, typically in the closed interval [0, 1]\n * @returns {number[]}\n */\nvar lerpArray = function lerpArray(start, end, alpha) {\n var len = Math.min(start.length, end.length);\n var out = new Array(len);\n for (var i = 0; i < len; i++) {\n out[i] = lerp(start[i], end[i], alpha);\n }\n return out;\n};\n\n//# sourceURL=webpack:///./node_modules/@antv/g6-core/es/util/math.js?");
/***/ }),
/***/ "./node_modules/@antv/g6-core/es/util/path.js":
/*!****************************************************!*\
!*** ./node_modules/@antv/g6-core/es/util/path.js ***!
\****************************************************/
/*! exports provided: getSpline, getControlPoint, pointsToPolygon, pathToPoints, getClosedSpline, roundedHull, paddedHull, getStarPath */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"getSpline\", function() { return getSpline; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"getControlPoint\", function() { return getControlPoint; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"pointsToPolygon\", function() { return pointsToPolygon; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"pathToPoints\", function() { return pathToPoints; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"getClosedSpline\", function() { return getClosedSpline; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"roundedHull\", function() { return roundedHull; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"paddedHull\", function() { return paddedHull; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"getStarPath\", function() { return getStarPath; });\n/* harmony import */ var _antv_matrix_util__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @antv/matrix-util */ \"./node_modules/@antv/matrix-util/esm/index.js\");\n/* harmony import */ var _antv_path_util__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @antv/path-util */ \"./node_modules/@antv/path-util/esm/index.js\");\n\n\n/**\n * 替换字符串中的字段\n * @param {String} str 模版字符串\n * @param {Object} o json data\n */\nvar substitute = function substitute(str, o) {\n if (!str || !o) {\n return str;\n }\n return str.replace(/\\\\?\\{([^{}]+)\\}/g, function (match, name) {\n if (match.charAt(0) === '\\\\') {\n return match.slice(1);\n }\n var res = o[name];\n if (res === 0) res = '0';\n return res || '';\n });\n};\n/**\n * 给定坐标获取三次贝塞尔曲线的 M 及 C 值\n * @param points coordinate set\n */\nvar getSpline = function getSpline(points) {\n var data = [];\n if (points.length < 2) {\n throw new Error(\"point length must largn than 2, now it's \".concat(points.length));\n }\n for (var _i = 0, points_1 = points; _i < points_1.length; _i++) {\n var point = points_1[_i];\n var x = point.x,\n y = point.y;\n data.push(x);\n data.push(y);\n }\n var spliePath = Object(_antv_path_util__WEBPACK_IMPORTED_MODULE_1__[\"catmullRom2Bezier\"])(data);\n spliePath.unshift(['M', points[0].x, points[0].y]);\n return spliePath;\n};\n/**\n * 根据起始点、相对位置、偏移量计算控制点\n * @param {IPoint} startPoint 起始点,包含 x,y\n * @param {IPoint} endPoint 结束点, 包含 x,y\n * @param {Number} percent 相对位置,范围 0-1\n * @param {Number} offset 偏移量\n * @return {IPoint} 控制点,包含 x,y\n */\nvar getControlPoint = function getControlPoint(startPoint, endPoint, percent, offset) {\n if (percent === void 0) {\n percent = 0;\n }\n if (offset === void 0) {\n offset = 0;\n }\n var point = {\n x: (1 - percent) * startPoint.x + percent * endPoint.x,\n y: (1 - percent) * startPoint.y + percent * endPoint.y\n };\n var tangent = [0, 0];\n _antv_matrix_util__WEBPACK_IMPORTED_MODULE_0__[\"vec2\"].normalize(tangent, [endPoint.x - startPoint.x, endPoint.y - startPoint.y]);\n if (!tangent || !tangent[0] && !tangent[1]) {\n tangent = [0, 0];\n }\n var perpendicular = [-tangent[1] * offset, tangent[0] * offset]; // 垂直向量\n point.x += perpendicular[0];\n point.y += perpendicular[1];\n return point;\n};\n/**\n * 点集转化为Path多边形\n * @param {Array} points 点集\n * @param {Boolen} z 是否封闭\n * @return {Array} Path\n */\nvar pointsToPolygon = function pointsToPolygon(points, z) {\n var length = points.length;\n if (!length) {\n return '';\n }\n var path = '';\n var str = '';\n for (var i = 0; i < length; i++) {\n var item = points[i];\n if (i === 0) {\n str = 'M{x} {y}';\n } else {\n str = 'L{x} {y}';\n }\n path += substitute(str, item);\n }\n if (z) {\n path += 'Z';\n }\n return path;\n};\nvar pathToPoints = function pathToPoints(path) {\n var points = [];\n path.forEach(function (seg) {\n var command = seg[0];\n if (command !== 'A') {\n for (var i = 1; i < seg.length; i = i + 2) {\n points.push([seg[i], seg[i + 1]]);\n }\n } else {\n var length_1 = seg.length;\n points.push([seg[length_1 - 2], seg[length_1 - 1]]);\n }\n });\n return points;\n};\n/**\n * 生成平滑的闭合曲线\n * @param points\n */\nvar getClosedSpline = function getClosedSpline(points) {\n if (points.length < 2) {\n throw new Error(\"point length must larger than 2, now it's \".concat(points.length));\n }\n var first = points[0];\n var second = points[1];\n var last = points[points.length - 1];\n var lastSecond = points[points.length - 2];\n points.unshift(last);\n points.unshift(lastSecond);\n points.push(first);\n points.push(second);\n var closedPath = [];\n for (var i = 1; i < points.length - 2; i += 1) {\n var x0 = points[i - 1].x;\n var y0 = points[i - 1].y;\n var x1 = points[i].x;\n var y1 = points[i].y;\n var x2 = points[i + 1].x;\n var y2 = points[i + 1].y;\n var x3 = i !== points.length - 2 ? points[i + 2].x : x2;\n var y3 = i !== points.length - 2 ? points[i + 2].y : y2;\n var cp1x = x1 + (x2 - x0) / 6;\n var cp1y = y1 + (y2 - y0) / 6;\n var cp2x = x2 - (x3 - x1) / 6;\n var cp2y = y2 - (y3 - y1) / 6;\n closedPath.push(['C', cp1x, cp1y, cp2x, cp2y, x2, y2]);\n }\n closedPath.unshift(['M', last.x, last.y]);\n return closedPath;\n};\nvar vecScaleTo = function vecScaleTo(v, length) {\n // Vector with direction of v with specified length\n return _antv_matrix_util__WEBPACK_IMPORTED_MODULE_0__[\"vec2\"].scale([0, 0], _antv_matrix_util__WEBPACK_IMPORTED_MODULE_0__[\"vec2\"].normalize([0, 0], v), length);\n};\nvar unitNormal = function unitNormal(p0, p1) {\n // Returns the unit normal to the line segment from p0 to p1.\n var n = [p0[1] - p1[1], p1[0] - p0[0]];\n var nLength = Math.sqrt(n[0] * n[0] + n[1] * n[1]);\n if (nLength === 0) {\n throw new Error('p0 should not be equal to p1');\n }\n return [n[0] / nLength, n[1] / nLength];\n};\nvar vecFrom = function vecFrom(p0, p1) {\n // Vector from p0 to p1\n return [p1[0] - p0[0], p1[1] - p0[1]];\n};\n/**\n * 传入的节点作为多边形顶点,生成有圆角的多边形\n * @param polyPoints 多边形顶点\n * @param padding 在原多边形基础上增加最终轮廓和原多边形的空白间隔\n */\nfunction roundedHull(polyPoints, padding) {\n // The rounded hull path around a single point\n var roundedHull1 = function roundedHull1(points) {\n var p1 = [points[0][0], points[0][1] - padding];\n var p2 = [points[0][0], points[0][1] + padding];\n return \"M \".concat(p1, \" A \").concat(padding, \",\").concat(padding, \",0,0,0,\").concat(p2, \" A \").concat(padding, \",\").concat(padding, \",0,0,0,\").concat(p1);\n };\n // The rounded hull path around two points\n var roundedHull2 = function roundedHull2(points) {\n var offsetVector = _antv_matrix_util__WEBPACK_IMPORTED_MODULE_0__[\"vec2\"].scale([0, 0], unitNormal(points[0], points[1]), padding);\n var invOffsetVector = _antv_matrix_util__WEBPACK_IMPORTED_MODULE_0__[\"vec2\"].scale([0, 0], offsetVector, -1);\n var p0 = _antv_matrix_util__WEBPACK_IMPORTED_MODULE_0__[\"vec2\"].add([0, 0], points[0], offsetVector);\n var p1 = _antv_matrix_util__WEBPACK_IMPORTED_MODULE_0__[\"vec2\"].add([0, 0], points[1], offsetVector);\n var p2 = _antv_matrix_util__WEBPACK_IMPORTED_MODULE_0__[\"vec2\"].add([0, 0], points[1], invOffsetVector);\n var p3 = _antv_matrix_util__WEBPACK_IMPORTED_MODULE_0__[\"vec2\"].add([0, 0], points[0], invOffsetVector);\n return \"M \".concat(p0, \" L \").concat(p1, \" A \").concat([padding, padding, '0,0,0', p2].join(','), \" L \").concat(p3, \" A \").concat([padding, padding, '0,0,0', p0].join(','));\n };\n // 特殊情况处理:节点数小于等于2\n if (!polyPoints || polyPoints.length < 1) return '';\n if (polyPoints.length === 1) return roundedHull1(polyPoints);\n if (polyPoints.length === 2) return roundedHull2(polyPoints);\n var segments = new Array(polyPoints.length);\n // Calculate each offset (outwards) segment of the convex hull.\n for (var segmentIndex = 0; segmentIndex < segments.length; ++segmentIndex) {\n var p0 = segmentIndex === 0 ? polyPoints[polyPoints.length - 1] : polyPoints[segmentIndex - 1];\n var p1 = polyPoints[segmentIndex];\n // Compute the offset vector for the line segment, with length = padding.\n var offset = _antv_matrix_util__WEBPACK_IMPORTED_MODULE_0__[\"vec2\"].scale([0, 0], unitNormal(p0, p1), padding);\n segments[segmentIndex] = [_antv_matrix_util__WEBPACK_IMPORTED_MODULE_0__[\"vec2\"].add([0, 0], p0, offset), _antv_matrix_util__WEBPACK_IMPORTED_MODULE_0__[\"vec2\"].add([0, 0], p1, offset)];\n }\n var arcData = \"A \".concat([padding, padding, '0,0,0,'].join(','));\n segments = segments.map(function (segment, index) {\n var pathFragment = '';\n if (index === 0) {\n pathFragment = \"M \".concat(segments[segments.length - 1][1], \" \");\n }\n pathFragment += \"\".concat(arcData + segment[0], \" L \").concat(segment[1]);\n return pathFragment;\n });\n return segments.join(' ');\n}\n/**\n * 传入的节点作为多边形顶点,生成平滑的闭合多边形\n * @param polyPoints\n * @param padding\n */\nfunction paddedHull(polyPoints, padding) {\n var pointCount = polyPoints.length;\n var smoothHull1 = function smoothHull1(points) {\n // Returns the path for a circular hull around a single point.\n var p1 = [points[0][0], points[0][1] - padding];\n var p2 = [points[0][0], points[0][1] + padding];\n return \"M \".concat(p1, \" A \").concat([padding, padding, '0,0,0', p2].join(','), \" A \").concat([padding, padding, '0,0,0', p1].join(','));\n };\n // Returns the path for a rounded hull around two points.\n var smoothHull2 = function smoothHull2(points) {\n var v = vecFrom(points[0], points[1]);\n var extensionVec = vecScaleTo(v, padding);\n var extension0 = _antv_matrix_util__WEBPACK_IMPORTED_MODULE_0__[\"vec2\"].add([0, 0], points[0], _antv_matrix_util__WEBPACK_IMPORTED_MODULE_0__[\"vec2\"].scale([0, 0], extensionVec, -1));\n var extension1 = _antv_matrix_util__WEBPACK_IMPORTED_MODULE_0__[\"vec2\"].add([0, 0], points[1], extensionVec);\n var tangentHalfLength = 1.2 * padding;\n var controlDelta = vecScaleTo(_antv_matrix_util__WEBPACK_IMPORTED_MODULE_0__[\"vec2\"].normalize([0, 0], v), tangentHalfLength);\n var invControlDelta = _antv_matrix_util__WEBPACK_IMPORTED_MODULE_0__[\"vec2\"].scale([0, 0], controlDelta, -1);\n var control0 = _antv_matrix_util__WEBPACK_IMPORTED_MODULE_0__[\"vec2\"].add([0, 0], extension0, invControlDelta);\n var control1 = _antv_matrix_util__WEBPACK_IMPORTED_MODULE_0__[\"vec2\"].add([0, 0], extension1, invControlDelta);\n var control3 = _antv_matrix_util__WEBPACK_IMPORTED_MODULE_0__[\"vec2\"].add([0, 0], extension0, controlDelta);\n // return [\n // ['M', extension0[0], extension0[1]],\n // ['C', control0, control1, extension1],\n // ['S', control3, extension0],\n // 'Z',\n // ];\n return \"M \".concat(extension0, \" C \").concat([control0, control1, extension1].join(','), \" S \").concat([control3, extension0].join(','), \" Z\");\n };\n // Handle special cases\n if (!polyPoints || pointCount < 1) return '';\n if (pointCount === 1) return smoothHull1(polyPoints);\n if (pointCount === 2) return smoothHull2(polyPoints);\n var hullPoints = polyPoints.map(function (point, index) {\n var pNext = polyPoints[(index + 1) % pointCount];\n return {\n p: point,\n v: _antv_matrix_util__WEBPACK_IMPORTED_MODULE_0__[\"vec2\"].normalize([0, 0], vecFrom(point, pNext))\n };\n });\n // Compute the expanded hull points, and the nearest prior control point for each.\n for (var i = 0; i < hullPoints.length; ++i) {\n var priorIndex = i > 0 ? i - 1 : pointCount - 1;\n var extensionVec = _antv_matrix_util__WEBPACK_IMPORTED_MODULE_0__[\"vec2\"].normalize([0, 0], _antv_matrix_util__WEBPACK_IMPORTED_MODULE_0__[\"vec2\"].add([0, 0], hullPoints[priorIndex].v, _antv_matrix_util__WEBPACK_IMPORTED_MODULE_0__[\"vec2\"].scale([0, 0], hullPoints[i].v, -1)));\n hullPoints[i].p = _antv_matrix_util__WEBPACK_IMPORTED_MODULE_0__[\"vec2\"].add([0, 0], hullPoints[i].p, _antv_matrix_util__WEBPACK_IMPORTED_MODULE_0__[\"vec2\"].scale([0, 0], extensionVec, padding));\n }\n return hullPoints.map(function (obj) {\n var point = obj.p;\n return {\n x: point[0],\n y: point[1]\n };\n });\n}\n/**\n * get a path of a star with outer radius and inner radius\n * @param outerR\n * @param innerR\n * @returns\n */\nvar getStarPath = function getStarPath(outerR, innerR) {\n var path = [];\n for (var i = 0; i < 5; i++) {\n var x1 = Math.cos((18 + 72 * i) / 180 * Math.PI) * outerR;\n var y1 = Math.sin((18 + 72 * i) / 180 * Math.PI) * outerR;\n var x2 = Math.cos((54 + 72 * i) / 180 * Math.PI) * innerR;\n var y2 = Math.sin((54 + 72 * i) / 180 * Math.PI) * innerR;\n if (i === 0) {\n path.push(['M', x1, -y1]);\n } else {\n path.push(['L', x1, -y1]);\n }\n path.push(['L', x2, -y2]);\n }\n path.push(['Z']);\n return path;\n};\n\n//# sourceURL=webpack:///./node_modules/@antv/g6-core/es/util/path.js?");
/***/ }),
/***/ "./node_modules/@antv/g6-core/es/util/validation.js":
/*!**********************************************************!*\
!*** ./node_modules/@antv/g6-core/es/util/validation.js ***!
\**********************************************************/
/*! exports provided: dataValidation, singleDataValidation */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"dataValidation\", function() { return dataValidation; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"singleDataValidation\", function() { return singleDataValidation; });\n/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tslib */ \"./node_modules/tslib/tslib.es6.js\");\n/* harmony import */ var _antv_util__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @antv/util */ \"./node_modules/@antv/util/esm/index.js\");\n/* harmony import */ var _graphic__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./graphic */ \"./node_modules/@antv/g6-core/es/util/graphic.js\");\n\n\n\n/**\n * 验证关系图或树图数据的合法性,必须符合以下规则才会渲染图:\n * 1. 必须传入数据\n * 2. 节点的 ID 必须为字符串,暂不支持数字类型,如果支持数字类型,会出现类似 123 与 '123' 是否相等的问题\n * 3. 边的 source 和 target 值必须在节点 ID 中存在\n * @param data 关系图或树图数据\n * @return boolean 全部验证通过返回 true,否则返回 false\n */\nvar dataValidation = function dataValidation(data) {\n // 1. 必须传入数据\n if (!data) {\n console.error('G6 Error Tips: the data must be defined');\n return false;\n }\n // 2. 节点的 ID 必须为字符串或数字类型\n var nodes = data.nodes,\n edges = data.edges,\n _a = data.combos,\n combos = _a === void 0 ? [] : _a;\n if (!nodes && !edges) {\n var validated_1 = true;\n // 不存在 nodes 和 edges,则说明是 TreeGraphData,按 TreeGraphData 规则验证\n Object(_graphic__WEBPACK_IMPORTED_MODULE_2__[\"traverseTree\"])(data, function (param) {\n if (!Object(_antv_util__WEBPACK_IMPORTED_MODULE_1__[\"isString\"])(param.id)) {\n validated_1 = false;\n return false;\n }\n return true;\n });\n return validated_1;\n }\n var nonNode = (nodes || []).find(function (node) {\n return !Object(_antv_util__WEBPACK_IMPORTED_MODULE_1__[\"isString\"])(node.id);\n });\n if (nonNode) {\n console.warn(\"G6 Warning Tips: missing 'id' property, or %c\".concat(nonNode.id, \"%c is not a string.\"), 'font-size: 20px; color: red;', '');\n return false;\n }\n // 3. 边的 source 和 target 必须存在于节点 或 Combo中\n var nodeIds = (nodes || []).map(function (node) {\n return node.id;\n });\n var comboIds = combos === null || combos === void 0 ? void 0 : combos.map(function (combo) {\n return combo.id;\n });\n var ids = Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__spreadArray\"])(Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__spreadArray\"])([], nodeIds, true), comboIds, true);\n var nonEdges = (edges || []).find(function (edge) {\n return !ids.includes(edge.source) || !ids.includes(edge.target);\n });\n if (nonEdges) {\n console.warn(\"G6 Warning Tips: The source %c\".concat(nonEdges.source, \"%c or the target %c\").concat(nonEdges.target, \"%c of the edge do not exist in the nodes or combos.\"), 'font-size: 20px; color: red;', '', 'font-size: 20px; color: red;', '');\n return false;\n }\n return true;\n};\n/**\n * 验证添加节点、边或从combo时的数据\n * @param type 节点、边或从combo\n * @param data 添加的单条数据\n * @return boolean 全部验证通过返回 true,否则返回 false\n */\nvar singleDataValidation = function singleDataValidation(type, data) {\n if (type === 'node' || type === 'combo') {\n // 必须有 id 字段,且id必须为字符串类型\n if (data.id && !Object(_antv_util__WEBPACK_IMPORTED_MODULE_1__[\"isString\"])(data.id)) {\n console.warn(\"G6 Warning Tips: missing 'id' property, or the 'id' %c\".concat(data.id, \"%c is not a string.\"), 'font-size: 20px; color: red;', '');\n return false;\n }\n } else if (type === 'edge') {\n // 必须有 source 和 target 字段\n if (!data.source || !data.target) {\n console.warn(\"G6 Warning Tips: missing 'source' or 'target' for the edge.\");\n return false;\n }\n }\n return true;\n};\n\n//# sourceURL=webpack:///./node_modules/@antv/g6-core/es/util/validation.js?");
/***/ }),
/***/ "./node_modules/@antv/g6-core/lib/element/shape.js":
/*!*********************************************************!*\
!*** ./node_modules/@antv/g6-core/lib/element/shape.js ***!
\*********************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
eval("\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = exports.ShapeFactoryBase = void 0;\nvar _tslib = __webpack_require__(/*! tslib */ \"./node_modules/tslib/tslib.es6.js\");\nvar _util = __webpack_require__(/*! @antv/util */ \"./node_modules/@antv/util/esm/index.js\");\nvar _xml = __webpack_require__(/*! ./xml */ \"./node_modules/@antv/g6-core/lib/element/xml.js\");\nvar cache = {}; // ucfirst 开销过大,进行缓存\n// 首字母大写\nfunction ucfirst(str) {\n if (!cache[str]) {\n cache[str] = (0, _util.upperFirst)(str);\n }\n return cache[str];\n}\n/**\n * 工厂方法的基类\n * @type Shape.FactoryBase\n */\nvar ShapeFactoryBase = exports.ShapeFactoryBase = {\n /**\n * 默认的形状,当没有指定/匹配 shapeType 时,使用默认的\n * @type {String}\n */\n defaultShapeType: 'defaultType',\n /**\n * 形状的 className,用于搜索\n * @type {String}\n */\n className: null,\n /**\n * 获取绘制 Shape 的工具类,无状态\n * @param {String} type 类型\n * @return {Shape} 工具类\n */\n getShape: function getShape(type) {\n var self = this;\n var shape = self[type] || self[self.defaultShapeType] || self['simple-circle'];\n return shape;\n },\n /**\n * 绘制图形\n * @param {String} type 类型\n * @param {Object} cfg 配置项\n * @param {G.Group} group 图形的分组\n * @return {IShape} 图形对象\n */\n draw: function draw(type, cfg, group) {\n var shape = this.getShape(type);\n group['shapeMap'] = {};\n var rst = shape.draw(cfg, group);\n if (shape.afterDraw) {\n shape.afterDraw(cfg, group, rst);\n }\n return rst;\n },\n /**\n * 更新\n * @param {String} type 类型\n * @param {Object} cfg 配置项\n * @param {G6.Item} item 节点、边、分组等\n */\n baseUpdate: function baseUpdate(type, cfg, item, updateType) {\n var _a, _b;\n var shape = this.getShape(type);\n // 防止没定义 update 函数\n if (shape.update) {\n // shape.mergeStyle = updateType === 'move' || updateType === 'bbox' ? {} : shape.getOptions?.(cfg);\n shape.mergeStyle = (_a = shape.getOptions) === null || _a === void 0 ? void 0 : _a.call(shape, cfg, updateType);\n (_b = shape.update) === null || _b === void 0 ? void 0 : _b.call(shape, cfg, item, updateType);\n }\n if (shape.afterUpdate) {\n shape.afterUpdate(cfg, item);\n }\n },\n /**\n * 设置状态\n * @param {String} type 类型\n * @param {String} name 状态名\n * @param {String | Boolean} value 状态值\n * @param {G6.Item} item 节点、边、分组等\n */\n setState: function setState(type, name, value, item) {\n var shape = this.getShape(type);\n // 调用 shape/shapeBase.ts 中的 setState 方法\n shape.setState(name, value, item);\n },\n /**\n * 是否允许更新,不重新绘制图形\n * @param {String} type 类型\n * @return {Boolean} 是否允许使用更新\n */\n shouldUpdate: function shouldUpdate(type) {\n var shape = this.getShape(type);\n return !!shape.update;\n },\n getControlPoints: function getControlPoints(type, cfg) {\n var shape = this.getShape(type);\n return shape.getControlPoints(cfg);\n },\n /**\n * 获取控制点\n * @param {String} type 节点、边类型\n * @param {Object} cfg 节点、边的配置项\n * @return {Array|null} 控制点的数组,如果为 null,则没有控制点\n */\n getAnchorPoints: function getAnchorPoints(type, cfg) {\n var shape = this.getShape(type);\n return shape.getAnchorPoints(cfg);\n }\n};\n/**\n * 元素的框架\n */\nvar ShapeFramework = {\n // 默认样式及配置\n options: {},\n /**\n * 绘制\n */\n draw: function draw(cfg, group) {\n return this.drawShape(cfg, group);\n },\n /**\n * 绘制\n */\n drawShape: function drawShape( /* cfg, group */) {},\n /**\n * 绘制完成后的操作,便于用户继承现有的节点、边\n */\n afterDraw: function afterDraw( /* cfg, group */) {},\n // update(cfg, item) // 默认不定义\n afterUpdate: function afterUpdate( /* cfg, item */) {},\n /**\n * 设置节点、边状态\n */\n setState: function setState( /* name, value, item */) {},\n /**\n * 获取控制点\n * @param {Object} cfg 节点、边的配置项\n * @return {Array|null} 控制点的数组,如果为 null,则没有控制点\n */\n getControlPoints: function getControlPoints(cfg) {\n return cfg.controlPoints;\n },\n /**\n * 获取控制点\n * @param {Object} cfg 节点、边的配置项\n * @return {Array|null} 控制点的数组,如果为 null,则没有控制点\n */\n getAnchorPoints: function getAnchorPoints(cfg) {\n var defaultAnchorPoints = this.options.anchorPoints;\n var anchorPoints = cfg.anchorPoints || defaultAnchorPoints;\n return anchorPoints;\n }\n /* 如果没定义 update 方法,每次都调用 draw 方法\n update(cfg, item) {\n }\n */\n};\n\nvar Shape = /** @class */function () {\n function Shape() {}\n Shape.registerFactory = function (factoryType, cfg) {\n var className = ucfirst(factoryType);\n var factoryBase = ShapeFactoryBase;\n var shapeFactory = (0, _tslib.__assign)((0, _tslib.__assign)({}, factoryBase), cfg);\n Shape[className] = shapeFactory;\n shapeFactory.className = className;\n return shapeFactory;\n };\n Shape.getFactory = function (factoryType) {\n var className = ucfirst(factoryType);\n return Shape[className];\n };\n Shape.registerNode = function (shapeType, nodeDefinition, extendShapeType) {\n var shapeFactory = Shape.Node;\n var shapeObj;\n if (typeof nodeDefinition === 'string' || typeof nodeDefinition === 'function') {\n var autoNodeDefinition = (0, _xml.createNodeFromXML)(nodeDefinition);\n shapeObj = (0, _tslib.__assign)((0, _tslib.__assign)({}, shapeFactory.getShape('single-node')), autoNodeDefinition);\n } else if (nodeDefinition.jsx) {\n var jsx = nodeDefinition.jsx;\n var autoNodeDefinition = (0, _xml.createNodeFromXML)(jsx);\n shapeObj = (0, _tslib.__assign)((0, _tslib.__assign)((0, _tslib.__assign)({}, shapeFactory.getShape('single-node')), autoNodeDefinition), nodeDefinition);\n } else {\n shapeFactory.getShape(extendShapeType);\n var extendShape = extendShapeType ? shapeFactory.getShape(extendShapeType) : ShapeFramework;\n shapeObj = (0, _tslib.__assign)((0, _tslib.__assign)({}, extendShape), nodeDefinition);\n }\n shapeObj.type = shapeType;\n shapeObj.itemType = 'node';\n shapeFactory[shapeType] = shapeObj;\n return shapeObj;\n };\n Shape.registerEdge = function (shapeType, edgeDefinition, extendShapeType) {\n var shapeFactory = Shape.Edge;\n var extendShape = extendShapeType ? shapeFactory.getShape(extendShapeType) : ShapeFramework;\n var shapeObj = (0, _tslib.__assign)((0, _tslib.__assign)({}, extendShape), edgeDefinition);\n shapeObj.type = shapeType;\n shapeObj.itemType = 'edge';\n shapeFactory[shapeType] = shapeObj;\n return shapeObj;\n };\n Shape.registerCombo = function (shapeType, comboDefinition, extendShapeType) {\n var shapeFactory = Shape.Combo;\n var extendShape = extendShapeType ? shapeFactory.getShape(extendShapeType) : ShapeFramework;\n var shapeObj = (0, _tslib.__assign)((0, _tslib.__assign)({}, extendShape), comboDefinition);\n shapeObj.type = shapeType;\n shapeObj.itemType = 'combo';\n shapeFactory[shapeType] = shapeObj;\n return shapeObj;\n };\n return Shape;\n}();\nvar _default = exports.default = Shape; // 注册 Node 的工厂方法\nShape.registerFactory('node', {\n defaultShapeType: 'circle'\n});\n// 注册 Edge 的工厂方法\nShape.registerFactory('edge', {\n defaultShapeType: 'line'\n});\n// 注册 Combo 的工厂方法\nShape.registerFactory('combo', {\n defaultShapeType: 'circle'\n});\n\n//# sourceURL=webpack:///./node_modules/@antv/g6-core/lib/element/shape.js?");
/***/ }),
/***/ "./node_modules/@antv/g6-core/lib/element/shapeBase.js":
/*!*************************************************************!*\
!*** ./node_modules/@antv/g6-core/lib/element/shapeBase.js ***!
\*************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
eval("\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.shapeBase = exports.CLS_LABEL_BG_SUFFIX = void 0;\nvar _tslib = __webpack_require__(/*! tslib */ \"./node_modules/tslib/tslib.es6.js\");\nvar _global = _interopRequireDefault(__webpack_require__(/*! ../global */ \"./node_modules/@antv/g6-core/lib/global.js\"));\nvar _matrixUtil = __webpack_require__(/*! @antv/matrix-util */ \"./node_modules/@antv/matrix-util/esm/index.js\");\nvar _util = __webpack_require__(/*! @antv/util */ \"./node_modules/@antv/util/esm/index.js\");\nvar _graphic = __webpack_require__(/*! ../util/graphic */ \"./node_modules/@antv/g6-core/lib/util/graphic.js\");\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\nfunction _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nvar transform = _matrixUtil.ext.transform;\nvar CLS_SHAPE_SUFFIX = '-shape';\nvar CLS_LABEL_SUFFIX = '-label';\nvar ARROWS = ['startArrow', 'endArrow'];\nvar SHAPE_DEFAULT_ATTRS = {\n lineWidth: 1,\n stroke: undefined,\n fill: undefined,\n lineAppendWidth: 1,\n opacity: undefined,\n strokeOpacity: undefined,\n fillOpacity: undefined,\n x: 0,\n y: 0,\n r: 10,\n width: 20,\n height: 20,\n shadowColor: undefined,\n shadowBlur: 0,\n shadowOffsetX: 0,\n shadowOffsetY: 0\n};\nvar PATH_SHAPE_DEFAULT_ATTRS = {\n lineWidth: 1,\n stroke: '#000',\n lineDash: undefined,\n startArrow: false,\n endArrow: false,\n opacity: undefined,\n strokeOpacity: undefined,\n fillOpacity: undefined,\n shadowColor: undefined,\n shadowBlur: 0,\n shadowOffsetX: 0,\n shadowOffsetY: 0\n};\nvar SHAPES_DEFAULT_ATTRS = {\n edge: PATH_SHAPE_DEFAULT_ATTRS,\n node: SHAPE_DEFAULT_ATTRS,\n combo: SHAPE_DEFAULT_ATTRS\n};\nvar CLS_LABEL_BG_SUFFIX = exports.CLS_LABEL_BG_SUFFIX = '-label-bg';\n// 单个 shape 带有一个 label,共用这段代码\nvar shapeBase = exports.shapeBase = {\n // 默认样式及配置\n options: {\n labelCfg: {\n style: {\n fontFamily: _global.default.windowFontFamily\n }\n },\n descriptionCfg: {\n style: {\n fontFamily: _global.default.windowFontFamily\n }\n }\n },\n itemType: '',\n /**\n * 形状的类型,例如 circle,ellipse,polyline...\n */\n type: '',\n getCustomConfig: function getCustomConfig(cfg) {\n return {};\n },\n getOptions: function getOptions(cfg, updateType) {\n if (updateType === 'move' || (updateType === null || updateType === void 0 ? void 0 : updateType.includes('bbox'))) return cfg;\n return (0, _util.deepMix)({}, this.options, this.getCustomConfig(cfg) || {}, cfg);\n },\n /**\n * 绘制节点/边,包含文本\n * @override\n * @param {Object} cfg 节点的配置项\n * @param {G.Group} group 节点的容器\n * @return {IShape} 绘制的图形\n */\n draw: function draw(cfg, group) {\n group['shapeMap'] = {};\n this.mergeStyle = this.getOptions(cfg);\n var shape = this.drawShape(cfg, group);\n shape.set('className', this.itemType + CLS_SHAPE_SUFFIX);\n group['shapeMap'][this.itemType + CLS_SHAPE_SUFFIX] = shape;\n if (cfg.label) {\n var label = this.drawLabel(cfg, group);\n label.set('className', this.itemType + CLS_LABEL_SUFFIX);\n group['shapeMap'][this.itemType + CLS_LABEL_SUFFIX] = label;\n }\n return shape;\n },\n /**\n * 绘制完成后的操作,便于用户继承现有的节点、边\n * @param cfg\n * @param group\n * @param keyShape\n */\n afterDraw: function afterDraw(cfg, group, keyShape) {},\n drawShape: function drawShape(cfg, group) {\n return null;\n },\n drawLabel: function drawLabel(cfg, group) {\n var defaultLabelCfg = (this.mergeStyle || this.getOptions(cfg) || {}).labelCfg;\n // image的情况下有可能为null\n var labelCfg = defaultLabelCfg || {};\n var labelStyle = this.getLabelStyle(cfg, labelCfg, group);\n var rotate = labelStyle.rotate;\n delete labelStyle.rotate;\n var label = group.addShape('text', {\n attrs: labelStyle,\n draggable: true,\n className: 'text-shape',\n name: 'text-shape',\n labelRelated: true\n });\n group['shapeMap']['text-shape'] = label;\n if (!isNaN(rotate) && rotate !== '') {\n var labelBBox = label.getBBox();\n var labelMatrix = [1, 0, 0, 0, 1, 0, 0, 0, 1];\n if (labelStyle.rotateCenter) {\n switch (labelStyle.rotateCenter) {\n case 'center':\n labelMatrix = transform(labelMatrix, [['t', -labelBBox.width / 2, -labelBBox.height / 2], ['r', rotate], ['t', labelBBox.width / 2, labelBBox.height / 2]]);\n break;\n case 'lefttop':\n labelMatrix = transform(labelMatrix, [['t', -labelStyle.x, -labelStyle.y], ['r', rotate], ['t', labelStyle.x, labelStyle.y]]);\n break;\n case 'leftcenter':\n labelMatrix = transform(labelMatrix, [['t', -labelStyle.x, -labelStyle.y - labelBBox.height / 2], ['r', rotate], ['t', labelStyle.x, labelStyle.y + labelBBox.height / 2]]);\n break;\n default:\n labelMatrix = transform(labelMatrix, [['t', -labelBBox.width / 2, -labelBBox.height / 2], ['r', rotate], ['t', labelBBox.width / 2, labelBBox.height / 2]]);\n break;\n }\n } else {\n labelMatrix = transform(labelMatrix, [['t', -labelStyle.x, -labelStyle.y - labelBBox.height / 2], ['r', rotate], ['t', labelStyle.x, labelStyle.y + labelBBox.height / 2]]);\n }\n label.setMatrix(labelMatrix);\n }\n if (labelStyle.background) {\n var rect = this.drawLabelBg(cfg, group, label);\n var labelBgClassname = this.itemType + CLS_LABEL_BG_SUFFIX;\n rect.set('classname', labelBgClassname);\n group['shapeMap'][labelBgClassname] = rect;\n label.toFront();\n }\n return label;\n },\n drawLabelBg: function drawLabelBg(cfg, group, label) {\n var defaultLabelCfg = this.options.labelCfg;\n var labelCfg = (0, _util.mix)({}, defaultLabelCfg, cfg.labelCfg);\n var style = this.getLabelBgStyleByPosition(label, labelCfg);\n var rect = group.addShape('rect', {\n name: 'text-bg-shape',\n attrs: style,\n labelRelated: true\n });\n group['shapeMap']['text-bg-shape'] = rect;\n return rect;\n },\n getLabelStyleByPosition: function getLabelStyleByPosition(cfg, labelCfg, group) {\n return {\n text: cfg.label\n };\n },\n getLabelBgStyleByPosition: function getLabelBgStyleByPosition(label, labelCfg) {\n return {};\n },\n /**\n * 获取文本的配置项\n * @param cfg 节点的配置项\n * @param labelCfg 文本的配置项\n * @param group 父容器,label 的定位可能与图形相关\n */\n getLabelStyle: function getLabelStyle(cfg, labelCfg, group) {\n var calculateStyle = this.getLabelStyleByPosition(cfg, labelCfg, group);\n var attrName = \"\".concat(this.itemType, \"Label\"); // 取 nodeLabel,edgeLabel 的配置项\n var defaultStyle = _global.default[attrName] ? _global.default[attrName].style : null;\n return (0, _tslib.__assign)((0, _tslib.__assign)((0, _tslib.__assign)({}, defaultStyle), calculateStyle), labelCfg.style);\n },\n /**\n * 获取图形的配置项\n * @param cfg\n */\n getShapeStyle: function getShapeStyle(cfg) {\n return cfg.style;\n },\n /**\n * 更新节点,包含文本\n * @override\n * @param {Object} cfg 节点/边的配置项\n * @param {G6.Item} item 节点/边\n */\n update: function update(cfg, item, updateType) {\n this.updateShapeStyle(cfg, item, updateType);\n this.updateLabel(cfg, item, updateType);\n },\n updateShapeStyle: function updateShapeStyle(cfg, item, updateType) {\n var _a;\n var group = item.getContainer();\n var shape = item.getKeyShape();\n var shapeStyle = (0, _util.mix)({}, shape.attr(), cfg.style);\n var _loop_1 = function _loop_1(key) {\n var _b;\n var style = shapeStyle[key];\n if ((0, _util.isPlainObject)(style)) {\n // 更新图元素样式,支持更新子元素\n var subShape = ((_a = group['shapeMap']) === null || _a === void 0 ? void 0 : _a[key]) || group.find(function (element) {\n return element.get('name') === key;\n });\n subShape === null || subShape === void 0 ? void 0 : subShape.attr(style);\n } else {\n shape.attr((_b = {}, _b[key] = style, _b));\n }\n };\n for (var key in shapeStyle) {\n _loop_1(key);\n }\n },\n updateLabel: function updateLabel(cfg, item, updateType) {\n var _a, _b;\n var group = item.getContainer();\n var _c = (this.mergeStyle || this.getOptions({}, updateType) || {}).labelCfg,\n labelCfg = _c === void 0 ? {} : _c;\n var labelClassName = this.itemType + CLS_LABEL_SUFFIX;\n var label = group['shapeMap'][labelClassName] || group.find(function (ele) {\n return ele.get('className') === labelClassName;\n });\n var labelBgClassname = this.itemType + CLS_LABEL_BG_SUFFIX;\n var labelBg = group['shapeMap'][labelBgClassname] || group.find(function (ele) {\n return ele.get('className') === labelBgClassname;\n });\n if (label && cfg.label === undefined) {\n group.removeChild(label);\n delete group['shapeMap'][labelClassName];\n if (labelBg) {\n group.removeChild(labelBg);\n delete group['shapeMap'][labelBgClassname];\n }\n }\n // 防止 cfg.label = \"\" 的情况\n if (cfg.label || cfg.label === '') {\n // 若传入的新配置中有 label,(用户没传入但原先有 label,label 也会有值)\n if (!label) {\n // 若原先不存在 label,则绘制一个新的 label\n var newLabel = this.drawLabel(cfg, group);\n newLabel.set('className', labelClassName);\n group['shapeMap'][labelClassName] = newLabel;\n } else {\n // 若原先存在 label,则更新样式。与 getLabelStyle 不同在于这里需要融合当前 label 的样式\n // 融合 style 以外的属性:position, offset, ...\n if (!updateType || updateType === 'bbox|label' || this.itemType === 'edge' && updateType !== 'style') {\n labelCfg = (0, _util.deepMix)(labelCfg, cfg.labelCfg);\n }\n // 获取位置信息\n var calculateStyle = this.getLabelStyleByPosition(cfg, labelCfg, group);\n // 取 nodeLabel,edgeLabel 的配置项\n var cfgStyle = (_a = cfg.labelCfg) === null || _a === void 0 ? void 0 : _a.style;\n // const cfgBgStyle = labelCfg.style?.background;\n // 需要融合当前\b label 的样式 label.attr()。不再需要全局/默认样式,因为已经应用在当前的 label 上\n var labelStyle = (0, _tslib.__assign)((0, _tslib.__assign)({}, calculateStyle), cfgStyle);\n var rotate = labelStyle.rotate;\n delete labelStyle.rotate;\n // 计算 label 的旋转矩阵\n if (!isNaN(rotate) && rotate !== '') {\n // if G 4.x define the rotateAtStart, use it directly instead of using the following codes\n var rotateMatrix = [1, 0, 0, 0, 1, 0, 0, 0, 1];\n rotateMatrix = transform(rotateMatrix, [['t', -labelStyle.x, -labelStyle.y], ['r', rotate], ['t', labelStyle.x, labelStyle.y]]);\n labelStyle.matrix = rotateMatrix;\n label.attr(labelStyle);\n } else {\n if (((_b = label.getMatrix()) === null || _b === void 0 ? void 0 : _b[4]) !== 1) {\n label.resetMatrix();\n }\n label.attr(labelStyle);\n }\n if (!labelBg) {\n if (labelStyle.background) {\n labelBg = this.drawLabelBg(cfg, group, label);\n labelBg.set('classname', labelBgClassname);\n group['shapeMap'][labelBgClassname] = labelBg;\n label.toFront();\n }\n } else if (labelStyle.background) {\n var calculateBgStyle = this.getLabelBgStyleByPosition(label, labelCfg);\n labelBg.attr(calculateBgStyle);\n } else {\n group.removeChild(labelBg);\n }\n }\n }\n },\n // update(cfg, item) // 默认不定义\n afterUpdate: function afterUpdate(cfg, item) {},\n /**\n * 设置节点的状态,主要是交互状态,业务状态请在 draw 方法中实现\n * 单图形的节点仅考虑 selected、active 状态,有其他状态需求的用户自己复写这个方法\n * @override\n * @param {String} name 状态名称\n * @param {String | Boolean} value 状态值\n * @param {G6.Item} item 节点\n */\n setState: function setState(name, value, item) {\n var _a, _b;\n var _c;\n var shape = item.get('keyShape');\n if (!shape || shape.destroyed) return;\n var type = item.getType();\n var stateName = (0, _util.isBoolean)(value) ? name : \"\".concat(name, \":\").concat(value);\n var shapeStateStyle = this.getStateStyle(stateName, item);\n var itemStateStyle = item.getStateStyle(stateName);\n // const originStyle = item.getOriginStyle();\n // 不允许设置一个不存在的状态\n if (!itemStateStyle && !shapeStateStyle) {\n return;\n }\n // 要设置或取消的状态的样式\n // 当没有 state 状态时,默认使用 model.stateStyles 中的样式\n var styles = (0, _util.mix)({}, itemStateStyle || shapeStateStyle);\n var group = item.getContainer();\n // 从图元素现有的样式中删除本次要取消的 states 中存在的属性值。使用对象检索更快\n var keptAttrs = {\n x: 1,\n y: 1,\n cx: 1,\n cy: 1,\n matrix: 1\n };\n if (type === 'combo') {\n keptAttrs.r = 1;\n keptAttrs.width = 1;\n keptAttrs.height = 1;\n }\n if (value) {\n var _loop_2 = function _loop_2(key) {\n var _d;\n var style = styles[key];\n if ((0, _util.isPlainObject)(style) && !ARROWS.includes(key)) {\n var subShape = ((_c = group['shapeMap']) === null || _c === void 0 ? void 0 : _c[key]) || group.find(function (element) {\n return element.get('name') === key;\n });\n subShape === null || subShape === void 0 ? void 0 : subShape.attr(style);\n } else {\n // 非纯对象,则认为是设置到 keyShape 上面的\n shape.attr((_d = {}, _d[key] = style, _d));\n }\n };\n // style 为要设置的状态的样式\n for (var key in styles) {\n _loop_2(key);\n }\n } else {\n // 所有生效的 state 的样式\n var enableStatesStyle = (0, _graphic.cloneBesidesImg)(item.getCurrentStatesStyle());\n var model = item.getModel();\n // 原始样式\n var originStyle_1 = (0, _util.mix)({}, model.style, (0, _graphic.cloneBesidesImg)(item.getOriginStyle()));\n var keyShapeName_1 = shape.get('name');\n // cloning shape.attr(), keys.forEach to avoid cloning the img attr, which leads to maximum clone heap #2383\n // const keyShapeStyles = clone(shape.attr())\n var shapeAttrs_1 = shape.attr();\n var keyShapeStyles_1 = {};\n Object.keys(shapeAttrs_1).forEach(function (key) {\n if (key === 'img') return;\n var attr = shapeAttrs_1[key];\n if (attr && _typeof(attr) === 'object') {\n keyShapeStyles_1[key] = (0, _util.clone)(attr);\n } else {\n keyShapeStyles_1[key] = attr;\n }\n });\n // 已有样式 - 要取消的状态的样式\n var filtetDisableStatesStyle = {};\n var _loop_3 = function _loop_3(p) {\n var style = styles[p];\n if ((0, _util.isPlainObject)(style) && !ARROWS.includes(p)) {\n var subShape_1 = group['shapeMap'][p] || group.find(function (ele) {\n return ele.get('name') === p;\n });\n if (subShape_1) {\n var subShapeStyles_1 = (0, _graphic.cloneBesidesImg)(subShape_1.attr());\n (0, _util.each)(style, function (v, key) {\n if (p === keyShapeName_1 && keyShapeStyles_1[key] && !keptAttrs[key]) {\n delete keyShapeStyles_1[key];\n var value_1 = originStyle_1[p][key] || SHAPES_DEFAULT_ATTRS[type][key];\n shape.attr(key, value_1);\n } else if (subShapeStyles_1[key] || subShapeStyles_1[key] === 0) {\n delete subShapeStyles_1[key];\n var value_2 = originStyle_1[p][key] || SHAPES_DEFAULT_ATTRS[type][key];\n subShape_1.attr(key, value_2);\n }\n });\n filtetDisableStatesStyle[p] = subShapeStyles_1;\n }\n } else {\n if (keyShapeStyles_1[p] && !keptAttrs[p]) {\n delete keyShapeStyles_1[p];\n var value_3 = originStyle_1[p] || (originStyle_1[keyShapeName_1] ? originStyle_1[keyShapeName_1][p] : undefined) || SHAPES_DEFAULT_ATTRS[type][p];\n shape.attr(p, value_3);\n }\n }\n };\n // styles 为要取消的状态的样式\n for (var p in styles) {\n _loop_3(p);\n }\n // 从图元素现有的样式中删除本次要取消的 states 中存在的属性值后,\n // 如果 keyShape 有 name 属性,则 filtetDisableStatesStyle 的格式为 { keyShapeName: {} }\n // 否则为普通对象\n if (!keyShapeName_1) {\n (0, _util.mix)(filtetDisableStatesStyle, keyShapeStyles_1);\n } else {\n filtetDisableStatesStyle[keyShapeName_1] = keyShapeStyles_1;\n }\n for (var key in enableStatesStyle) {\n if (keptAttrs[key]) continue;\n var enableStyle = enableStatesStyle[key];\n if (!(0, _util.isPlainObject)(enableStyle) || ARROWS.includes(key)) {\n // 把样式属性merge到keyShape中\n if (!keyShapeName_1) {\n (0, _util.mix)(originStyle_1, (_a = {}, _a[key] = enableStyle, _a));\n } else {\n (0, _util.mix)(originStyle_1[keyShapeName_1], (_b = {}, _b[key] = enableStyle, _b));\n delete originStyle_1[key];\n }\n delete enableStatesStyle[key];\n }\n }\n var originstyles = {};\n (0, _util.deepMix)(originstyles, originStyle_1, filtetDisableStatesStyle, enableStatesStyle);\n var keyShapeSetted = false;\n var _loop_4 = function _loop_4(originKey) {\n var _e, _f;\n var style = originstyles[originKey];\n if ((0, _util.isPlainObject)(style) && !ARROWS.includes(originKey)) {\n var subShape = group['shapeMap'][originKey] || group.find(function (ele) {\n return ele.get('name') === originKey;\n });\n if (subShape) {\n // The text's position and matrix is not allowed to be affected by states\n if (subShape.get('type') === 'text' || subShape.get('labelRelated')) {\n delete style.x;\n delete style.y;\n delete style.matrix;\n }\n if (originKey === keyShapeName_1) {\n if (type === 'combo') {\n delete style.r;\n delete style.width;\n delete style.height;\n }\n keyShapeSetted = true;\n }\n subShape.attr(style);\n }\n } else if (!keyShapeSetted) {\n var value_4 = style || SHAPES_DEFAULT_ATTRS[type][originKey];\n // 当更新 combo 状态时,当不存在 keyShapeName 时候,则认为是设置到 keyShape 上面的\n if (type === 'combo') {\n if (!keyShapeName_1) {\n shape.attr((_e = {}, _e[originKey] = value_4, _e));\n }\n } else {\n shape.attr((_f = {}, _f[originKey] = value_4, _f));\n }\n }\n };\n for (var originKey in originstyles) {\n _loop_4(originKey);\n }\n }\n },\n /**\n * 获取不同状态下的样式\n *\n * @param {string} name 状态名称\n * @param {Item} item Node或Edge的实例\n * @return {object} 样式\n */\n getStateStyle: function getStateStyle(name, item) {\n var model = item.getModel();\n var type = item.getType();\n var _a = this.getOptions(model),\n stateStyles = _a.stateStyles,\n _b = _a.style,\n style = _b === void 0 ? {} : _b;\n var modelStateStyle = model.stateStyles ? model.stateStyles[name] : stateStyles && stateStyles[name];\n if (type === 'combo') {\n return (0, _util.clone)(modelStateStyle);\n }\n return (0, _util.mix)({}, style, modelStateStyle);\n },\n /**\n * 获取控制点\n * @param {Object} cfg 节点、边的配置项\n * @return {Array|null} 控制点的数组,如果为 null,则没有控制点\n */\n getControlPoints: function getControlPoints(cfg) {\n return cfg.controlPoints;\n },\n /**\n * 获取控制点\n * @param {Object} cfg 节点、边的配置项\n * @return {Array|null} 锚点的数组,如果为 null,则没有锚点\n */\n getAnchorPoints: function getAnchorPoints(cfg) {\n var _a, _b;\n var anchorPoints = (cfg === null || cfg === void 0 ? void 0 : cfg.anchorPoints) || ((_a = this.getCustomConfig(cfg)) === null || _a === void 0 ? void 0 : _a.anchorPoints) || ((_b = this.options) === null || _b === void 0 ? void 0 : _b.anchorPoints);\n return anchorPoints;\n }\n};\n\n//# sourceURL=webpack:///./node_modules/@antv/g6-core/lib/element/shapeBase.js?");
/***/ }),
/***/ "./node_modules/@antv/g6-core/lib/element/xml.js":
/*!*******************************************************!*\
!*** ./node_modules/@antv/g6-core/lib/element/xml.js ***!
\*******************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
eval("\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.compareTwoTarget = compareTwoTarget;\nexports.createNodeFromXML = createNodeFromXML;\nexports.generateTarget = generateTarget;\nexports.getBBox = getBBox;\nexports.parseXML = parseXML;\nexports.xmlDataRenderer = void 0;\nvar _tslib = __webpack_require__(/*! tslib */ \"./node_modules/tslib/tslib.es6.js\");\nvar _util = __webpack_require__(/*! @antv/util */ \"./node_modules/@antv/util/esm/index.js\");\nvar _graphic = __webpack_require__(/*! ../util/graphic */ \"./node_modules/@antv/g6-core/lib/util/graphic.js\");\nfunction _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); } /**\n * @fileOverview 从xml建立自定义Node,包含update\n * @author xuzhi.mxz@antfin.com\n */\n/**\n * 一种更宽松的JSON 解析,如果遇到不符合规范的字段会直接转为字符串\n * @param text json 内容\n */\nfunction looseJSONParse(text) {\n if (typeof text !== 'string') {\n return text;\n }\n var safeParse = function safeParse(str) {\n if (typeof str !== 'string') {\n return str;\n }\n try {\n return JSON.parse(str.trim());\n } catch (e) {\n return str.trim();\n }\n };\n var firstAttempt = safeParse(text);\n if (typeof firstAttempt !== 'string') {\n return firstAttempt;\n }\n var tail = function tail(arr) {\n return arr[arr.length - 1];\n };\n var str = text.trim();\n var objectStack = [];\n var syntaxStack = [];\n var isLastPair = function isLastPair() {\n var syntaxes = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n syntaxes[_i] = arguments[_i];\n }\n return syntaxes.some(function (syntax) {\n return tail(syntaxStack) === syntax;\n });\n };\n var getValueStore = function getValueStore() {\n return tail(objectStack);\n };\n var rst = null;\n var i = 0;\n var temp = '';\n while (i < str.length) {\n var nowChar = str[i];\n var isInString = isLastPair('\"', \"'\");\n if (!isInString && !nowChar.trim()) {\n i += 1;\n continue;\n }\n var isLastTranslate = str[i - 1] === '\\\\';\n var isInObject = isLastPair('}');\n var isInArray = isLastPair(']');\n var isWaitingValue = isLastPair(',');\n var tempArr = getValueStore();\n if (isInString) {\n if (tail(syntaxStack) === nowChar && !isLastTranslate) {\n syntaxStack.pop();\n var value = safeParse(temp);\n tempArr.push(value);\n rst = value;\n temp = '';\n } else {\n temp += nowChar;\n }\n } else if (isInArray && nowChar === ',') {\n if (temp) {\n tempArr.push(safeParse(temp));\n temp = '';\n }\n } else if (isInObject && nowChar === ':') {\n syntaxStack.push(',');\n if (temp) {\n tempArr.push(temp);\n temp = '';\n }\n } else if (isWaitingValue && nowChar === ',') {\n if (temp) {\n tempArr.push(safeParse(temp));\n temp = '';\n }\n syntaxStack.pop();\n } else if (nowChar === '}' && (isInObject || isWaitingValue)) {\n if (temp) {\n tempArr.push(safeParse(temp));\n temp = '';\n }\n if (isWaitingValue) {\n syntaxStack.pop();\n }\n var obj = {};\n for (var c = 1; c < tempArr.length; c += 2) {\n obj[tempArr[c - 1]] = tempArr[c];\n }\n objectStack.pop();\n if (objectStack.length) {\n tail(objectStack).push(obj);\n }\n syntaxStack.pop();\n rst = obj;\n } else if (nowChar === ']' && isInArray) {\n if (temp) {\n tempArr.push(safeParse(temp));\n temp = '';\n }\n objectStack.pop();\n if (objectStack.length) {\n tail(objectStack).push(tempArr);\n }\n syntaxStack.pop();\n rst = tempArr;\n } else if (nowChar === '{') {\n objectStack.push([]);\n syntaxStack.push('}');\n } else if (nowChar === '[') {\n objectStack.push([]);\n syntaxStack.push(']');\n } else if (nowChar === '\"') {\n syntaxStack.push('\"');\n } else if (nowChar === \"'\") {\n syntaxStack.push(\"'\");\n } else {\n temp += nowChar;\n }\n i += 1;\n }\n return rst || temp;\n}\nvar keyConvert = function keyConvert(str) {\n return str.split('-').reduce(function (a, b) {\n return a + b.charAt(0).toUpperCase() + b.slice(1);\n });\n};\n/**\n * 简单的一个{{}}模板渲染,不包含任何复杂语法\n * @param xml\n */\nvar xmlDataRenderer = exports.xmlDataRenderer = function xmlDataRenderer(xml) {\n return function (data) {\n var len = xml.length;\n var arr = [];\n var i = 0;\n var tmp = '';\n while (i < len) {\n if (xml[i] === '{' && xml[i + 1] === '{') {\n arr.push(tmp);\n tmp = '';\n i += 2;\n } else if (xml[i] === '}' && xml[i + 1] === '}') {\n if (arr.length) {\n var last = arr.pop();\n tmp = (0, _util.get)(data, tmp, last.endsWith('=') ? \"\\\"{\".concat(tmp, \"}\\\"\") : tmp);\n arr.push(last + tmp);\n }\n i += 2;\n tmp = '';\n } else {\n tmp += xml[i];\n i += 1;\n }\n }\n arr.push(tmp);\n return arr.map(function (e, index) {\n return arr[index - 1] && arr[index - 1].endsWith('=') ? \"\\\"{\".concat(e, \"}\\\"\") : e;\n }).join('');\n };\n};\n/**\n * 解析XML,并转化为相应的JSON结构\n * @param xml xml解析后的节点\n */\nfunction parseXML(xml, cfg) {\n var attrs = {};\n var keys = xml.getAttributeNames && xml.getAttributeNames() || [];\n var children = xml.children && Array.from(xml.children).map(function (e) {\n return parseXML(e, cfg);\n });\n var rst = {};\n var tagName = xml.tagName ? xml.tagName.toLowerCase() : 'group';\n if (tagName === 'text') {\n attrs.text = xml.innerText;\n }\n rst.type = tagName;\n if (tagName === 'img') {\n rst.type = 'image';\n }\n Array.from(keys).forEach(function (k) {\n var key = keyConvert(k);\n var val = xml.getAttribute(k);\n try {\n if (key === 'style' || key === 'attrs') {\n var style = looseJSONParse(val);\n attrs = (0, _tslib.__assign)((0, _tslib.__assign)({}, attrs), style);\n } else {\n rst[key] = looseJSONParse(val);\n }\n } catch (e) {\n if (key === 'style') {\n throw e;\n }\n rst[key] = val;\n }\n });\n rst.attrs = attrs;\n if (cfg && cfg.style && rst.name && _typeof(cfg.style[rst.name]) === 'object') {\n rst.attrs = (0, _tslib.__assign)((0, _tslib.__assign)({}, rst.attrs), cfg.style[rst.name]);\n }\n if (cfg && cfg.style && rst.keyshape) {\n rst.attrs = (0, _tslib.__assign)((0, _tslib.__assign)({}, rst.attrs), cfg.style);\n }\n if (children.length) {\n rst.children = children;\n }\n return rst;\n}\n/**\n * 根据偏移量和内部节点最终的bounding box来得出该shape最终的bbox\n */\nfunction getBBox(node, offset, childrenBBox) {\n var _a = node.attrs,\n attrs = _a === void 0 ? {} : _a;\n var bbox = {\n x: offset.x || 0,\n y: offset.y || 0,\n width: childrenBBox.width || 0,\n height: childrenBBox.height || 0\n };\n var shapeHeight, shapeWidth;\n switch (node.type) {\n case 'maker':\n case 'circle':\n if (attrs.r) {\n shapeWidth = 2 * attrs.r;\n shapeHeight = 2 * attrs.r;\n }\n break;\n case 'text':\n if (attrs.text) {\n shapeWidth = (0, _graphic.getTextSize)(attrs.text, attrs.fontSize || 12)[0];\n shapeHeight = 16;\n bbox.y += shapeHeight;\n bbox.height = shapeHeight;\n bbox.width = shapeWidth;\n node.attrs = (0, _tslib.__assign)({\n fontSize: 12,\n fill: '#000'\n }, attrs);\n }\n break;\n default:\n if (attrs.width) {\n shapeWidth = attrs.width;\n }\n if (attrs.height) {\n shapeHeight = attrs.height;\n }\n }\n if (shapeHeight >= 0) {\n bbox.height = shapeHeight;\n }\n if (shapeWidth >= 0) {\n bbox.width = shapeWidth;\n }\n if (attrs.marginTop) {\n bbox.y += attrs.marginTop;\n }\n if (attrs.marginLeft) {\n bbox.x += attrs.marginLeft;\n }\n return bbox;\n}\n/**\n * 把从xml计算出的结构填上位置信息,补全attrs\n * @param target\n * @param lastOffset\n */\nfunction generateTarget(target, lastOffset) {\n var _a;\n if (lastOffset === void 0) {\n lastOffset = {\n x: 0,\n y: 0\n };\n }\n var defaultBbox = (0, _tslib.__assign)({\n x: 0,\n y: 0,\n width: 0,\n height: 0\n }, lastOffset);\n if ((_a = target.children) === null || _a === void 0 ? void 0 : _a.length) {\n var _b = target.attrs,\n attrs = _b === void 0 ? {} : _b;\n var marginTop = attrs.marginTop;\n var offset = (0, _tslib.__assign)({}, lastOffset);\n if (marginTop) {\n offset.y += marginTop;\n }\n for (var index = 0; index < target.children.length; index++) {\n target.children[index].attrs.key = \"\".concat(attrs.key || 'root', \" -\").concat(index, \" \");\n var node = generateTarget(target.children[index], offset);\n if (node.bbox) {\n var bbox = node.bbox;\n if (node.attrs.next === 'inline') {\n offset.x += node.bbox.width;\n } else {\n offset.y += node.bbox.height;\n }\n if (bbox.width + bbox.x > defaultBbox.width) {\n defaultBbox.width = bbox.width + bbox.x;\n }\n if (bbox.height + bbox.y > defaultBbox.height) {\n defaultBbox.height = bbox.height + bbox.y;\n }\n }\n }\n }\n target.bbox = getBBox(target, lastOffset, defaultBbox);\n target.attrs = (0, _tslib.__assign)((0, _tslib.__assign)({}, target.attrs), target.bbox);\n return target;\n}\n/**\n * 对比前后两个最终计算出来的node,并对比出最小改动,\n * 动作: 'add' 添加节点 | ’delete‘ 删除节点 | ’change‘ 改变节点attrs | 'restructure' 重构节点\n * @param nowTarget\n * @param formerTarget\n */\nfunction compareTwoTarget(nowTarget, formerTarget) {\n var _a, _b, _c, _d;\n var type = (nowTarget || {}).type;\n var key = ((formerTarget === null || formerTarget === void 0 ? void 0 : formerTarget.attrs) || {}).key;\n if (key && nowTarget) {\n nowTarget.attrs.key = key;\n }\n if (!nowTarget && formerTarget) {\n return {\n action: 'delete',\n val: formerTarget,\n type: type,\n key: key\n };\n }\n if (nowTarget && !formerTarget) {\n return {\n action: 'add',\n val: nowTarget,\n type: type\n };\n }\n if (!nowTarget && !formerTarget) {\n return {\n action: 'same',\n type: type\n };\n }\n var children = [];\n if (((_a = nowTarget.children) === null || _a === void 0 ? void 0 : _a.length) > 0 || ((_b = formerTarget.children) === null || _b === void 0 ? void 0 : _b.length) > 0) {\n var length_1 = Math.max((_c = nowTarget.children) === null || _c === void 0 ? void 0 : _c.length, (_d = formerTarget.children) === null || _d === void 0 ? void 0 : _d.length);\n var formerChildren = formerTarget.children || [];\n var nowChildren = nowTarget.children || [];\n for (var index = 0; index < length_1; index += 1) {\n children.push(compareTwoTarget(nowChildren[index], formerChildren[index]));\n }\n }\n var formerKeys = Object.keys(formerTarget.attrs);\n var nowKeys = Object.keys(nowTarget.attrs);\n if (formerTarget.type !== nowTarget.type) {\n return {\n action: 'restructure',\n nowTarget: nowTarget,\n formerTarget: formerTarget,\n key: key,\n children: children\n };\n }\n if (formerKeys.filter(function (e) {\n return e !== 'children';\n }).some(function (e) {\n return nowTarget.attrs[e] !== formerTarget.attrs[e] || !nowKeys.includes(e);\n })) {\n return {\n action: 'change',\n val: nowTarget,\n children: children,\n type: type,\n key: key\n };\n }\n return {\n action: 'same',\n children: children,\n type: type,\n key: key\n };\n}\n/**\n * 根据xml或者返回xml的函数构建自定义节点的结构\n * @param gen\n */\nfunction createNodeFromXML(gen) {\n var structures = {};\n var compileXML = function compileXML(cfg) {\n var rawStr = typeof gen === 'function' ? gen(cfg) : gen;\n var target = xmlDataRenderer(rawStr)(cfg);\n var xmlParser = document.createElement('div');\n xmlParser.innerHTML = target;\n var xml = xmlParser.children[0];\n var result = generateTarget(parseXML(xml, cfg));\n xmlParser.remove();\n return result;\n };\n return {\n draw: function draw(cfg, group) {\n var resultTarget = compileXML(cfg);\n var keyshape = group;\n var renderTarget = function renderTarget(target) {\n var _a = target.attrs,\n attrs = _a === void 0 ? {} : _a,\n bbox = target.bbox,\n type = target.type,\n children = target.children,\n rest = (0, _tslib.__rest)(target, [\"attrs\", \"bbox\", \"type\", \"children\"]);\n if (target.type !== 'group') {\n var shape = group.addShape(target.type, (0, _tslib.__assign)({\n attrs: attrs,\n origin: {\n bbox: bbox,\n type: type,\n children: children\n }\n }, rest));\n if (target.keyshape) {\n keyshape = shape;\n }\n }\n if (target.children) {\n target.children.forEach(function (n) {\n return renderTarget(n);\n });\n }\n };\n renderTarget(resultTarget);\n structures[cfg.id] = [resultTarget];\n return keyshape;\n },\n update: function update(cfg, node) {\n if (!structures[cfg.id]) {\n structures[cfg.id] = [];\n }\n var container = node.getContainer();\n var children = container.get('children');\n var newTarget = compileXML(cfg);\n var lastTarget = structures[cfg.id].pop();\n var diffResult = compareTwoTarget(newTarget, lastTarget);\n var addShape = function addShape(shape) {\n var _a;\n if (shape.type !== 'group') {\n container.addShape(shape.type, {\n attrs: shape.attrs\n });\n }\n if ((_a = shape.children) === null || _a === void 0 ? void 0 : _a.length) {\n shape.children.map(function (e) {\n return addShape(e);\n });\n }\n };\n var delShape = function delShape(shape) {\n var _a;\n var targetShape = children.find(function (e) {\n return e.attrs.key === shape.attrs.key;\n });\n if (targetShape) {\n container.removeChild(targetShape);\n }\n if ((_a = shape.children) === null || _a === void 0 ? void 0 : _a.length) {\n shape.children.map(function (e) {\n return delShape(e);\n });\n }\n };\n var updateTarget = function updateTarget(target) {\n var key = target.key;\n if (target.type !== 'group') {\n var targetShape = children.find(function (e) {\n return e.attrs.key === key;\n });\n switch (target.action) {\n case 'change':\n if (targetShape) {\n var originAttr = target.val.keyshape ? node.getOriginStyle() : {};\n targetShape.attr((0, _tslib.__assign)((0, _tslib.__assign)({}, originAttr), target.val.attrs));\n }\n break;\n case 'add':\n addShape(target.val);\n break;\n case 'delete':\n delShape(target.val);\n break;\n case 'restructure':\n delShape(target.formerTarget);\n addShape(target.nowTarget);\n break;\n default:\n break;\n }\n }\n if (target.children) {\n target.children.forEach(function (n) {\n return updateTarget(n);\n });\n }\n };\n updateTarget(diffResult);\n structures[cfg.id].push(newTarget);\n },\n getAnchorPoints: function getAnchorPoints() {\n return [[0, 0.5], [1, 0.5], [0.5, 1], [0.5, 0]];\n }\n };\n}\n\n//# sourceURL=webpack:///./node_modules/@antv/g6-core/lib/element/xml.js?");
/***/ }),
/***/ "./node_modules/@antv/g6-core/lib/global.js":
/*!**************************************************!*\
!*** ./node_modules/@antv/g6-core/lib/global.js ***!
\**************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
eval("\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\nvar subjectColor = 'rgb(95, 149, 255)';\nvar backColor = 'rgb(255, 255, 255)';\nvar textColor = 'rgb(0, 0, 0)';\nvar activeFill = 'rgb(247, 250, 255)';\nvar nodeMainFill = 'rgb(239, 244, 255)';\nvar comboFill = 'rgb(253, 253, 253)';\nvar disabledFill = 'rgb(250, 250, 250)';\nvar edgeMainStroke = 'rgb(224, 224, 224)';\nvar edgeInactiveStroke = 'rgb(234, 234, 234)';\nvar edgeDisablesStroke = 'rgb(245, 245, 245)';\nvar inactiveStroke = 'rgb(191, 213, 255)';\nvar highlightStroke = '#4572d9';\nvar highlightFill = 'rgb(223, 234, 255)';\nvar colorSet = {\n // for nodes\n mainStroke: subjectColor,\n mainFill: nodeMainFill,\n activeStroke: subjectColor,\n activeFill: activeFill,\n inactiveStroke: inactiveStroke,\n inactiveFill: activeFill,\n selectedStroke: subjectColor,\n selectedFill: backColor,\n highlightStroke: highlightStroke,\n highlightFill: highlightFill,\n disableStroke: edgeMainStroke,\n disableFill: disabledFill,\n // for edges\n edgeMainStroke: edgeMainStroke,\n edgeActiveStroke: subjectColor,\n edgeInactiveStroke: edgeInactiveStroke,\n edgeSelectedStroke: subjectColor,\n edgeHighlightStroke: subjectColor,\n edgeDisableStroke: edgeDisablesStroke,\n // for combos\n comboMainStroke: edgeMainStroke,\n comboMainFill: comboFill,\n comboActiveStroke: subjectColor,\n comboActiveFill: activeFill,\n comboInactiveStroke: edgeMainStroke,\n comboInactiveFill: comboFill,\n comboSelectedStroke: subjectColor,\n comboSelectedFill: comboFill,\n comboHighlightStroke: highlightStroke,\n comboHighlightFill: comboFill,\n comboDisableStroke: edgeInactiveStroke,\n comboDisableFill: disabledFill\n};\nvar _default = exports.default = {\n version: '0.8.23',\n rootContainerClassName: 'root-container',\n nodeContainerClassName: 'node-container',\n edgeContainerClassName: 'edge-container',\n comboContainerClassName: 'combo-container',\n delegateContainerClassName: 'delegate-container',\n defaultLoopPosition: 'top',\n nodeLabel: {\n style: {\n fill: '#000',\n fontSize: 12,\n textAlign: 'center',\n textBaseline: 'middle'\n },\n offset: 4 // 节点的默认文本不居中时的偏移量\n },\n\n defaultNode: {\n type: 'circle',\n style: {\n lineWidth: 1,\n stroke: colorSet.mainStroke,\n fill: nodeMainFill\n },\n size: 20,\n color: colorSet.mainStroke,\n linkPoints: {\n size: 8,\n lineWidth: 1,\n fill: colorSet.activeFill,\n stroke: colorSet.activeStroke\n }\n },\n // 节点应用状态后的样式,默认仅提供 active、selected、highlight、inactive、disable,用户可以自己扩展\n nodeStateStyles: {\n active: {\n fill: colorSet.activeFill,\n stroke: colorSet.activeStroke,\n lineWidth: 2,\n shadowColor: colorSet.mainStroke,\n shadowBlur: 10\n },\n selected: {\n fill: colorSet.selectedFill,\n stroke: colorSet.selectedStroke,\n lineWidth: 4,\n shadowColor: colorSet.selectedStroke,\n shadowBlur: 10,\n 'text-shape': {\n fontWeight: 500\n }\n },\n highlight: {\n fill: colorSet.highlightFill,\n stroke: colorSet.highlightStroke,\n lineWidth: 2,\n 'text-shape': {\n fontWeight: 500\n }\n },\n inactive: {\n fill: colorSet.inactiveFill,\n stroke: colorSet.inactiveStroke,\n lineWidth: 1\n },\n disable: {\n fill: colorSet.disableFill,\n stroke: colorSet.disableStroke,\n lineWidth: 1\n }\n },\n edgeLabel: {\n style: {\n fill: textColor,\n textAlign: 'center',\n textBaseline: 'middle',\n fontSize: 12\n }\n },\n defaultEdge: {\n type: 'line',\n size: 1,\n style: {\n stroke: colorSet.edgeMainStroke,\n lineAppendWidth: 2\n },\n color: colorSet.edgeMainStroke\n },\n // 边应用状态后的样式,默认仅提供 active、selected、highlight、inactive、disable,用户可以自己扩展\n edgeStateStyles: {\n active: {\n stroke: colorSet.edgeActiveStroke,\n lineWidth: 1\n },\n selected: {\n stroke: colorSet.edgeSelectedStroke,\n lineWidth: 2,\n shadowColor: colorSet.edgeSelectedStroke,\n shadowBlur: 10,\n 'text-shape': {\n fontWeight: 500\n }\n },\n highlight: {\n stroke: colorSet.edgeHighlightStroke,\n lineWidth: 2,\n 'text-shape': {\n fontWeight: 500\n }\n },\n inactive: {\n stroke: colorSet.edgeInactiveStroke,\n lineWidth: 1\n },\n disable: {\n stroke: colorSet.edgeDisableStroke,\n lineWidth: 1\n }\n },\n comboLabel: {\n style: {\n fill: textColor,\n // textAlign: 'center',\n textBaseline: 'middle',\n fontSize: 12\n },\n refY: 10,\n refX: 10 // Combo 的默认文本不居中时的偏移量\n },\n\n defaultCombo: {\n type: 'circle',\n style: {\n fill: colorSet.comboMainFill,\n lineWidth: 1,\n stroke: colorSet.comboMainStroke,\n r: 5,\n width: 20,\n height: 10\n },\n size: [20, 5],\n color: colorSet.comboMainStroke,\n padding: [25, 20, 15, 20]\n },\n // combo 应用状态后的样式,默认仅提供 active、selected、highlight、inactive、disable,用户可以自己扩展\n comboStateStyles: {\n active: {\n stroke: colorSet.comboActiveStroke,\n lineWidth: 1,\n fill: colorSet.comboActiveFill\n },\n selected: {\n stroke: colorSet.comboSelectedStroke,\n lineWidth: 2,\n fill: colorSet.comboSelectedFill,\n shadowColor: colorSet.comboSelectedStroke,\n shadowBlur: 10,\n 'text-shape': {\n fontWeight: 500\n }\n },\n highlight: {\n stroke: colorSet.comboHighlightStroke,\n lineWidth: 2,\n fill: colorSet.comboHighlightFill,\n 'text-shape': {\n fontWeight: 500\n }\n },\n inactive: {\n stroke: colorSet.comboInactiveStroke,\n fill: colorSet.comboInactiveFill,\n lineWidth: 1\n },\n disable: {\n stroke: colorSet.comboDisableStroke,\n fill: colorSet.comboDisableFill,\n lineWidth: 1\n }\n },\n delegateStyle: {\n fill: '#F3F9FF',\n fillOpacity: 0.5,\n stroke: '#1890FF',\n strokeOpacity: 0.9,\n lineDash: [5, 5]\n },\n windowFontFamily: typeof window !== 'undefined' && window.getComputedStyle && document.body ? window.getComputedStyle(document.body, null).getPropertyValue('font-family') || 'Arial, sans-serif' : 'Arial, sans-serif'\n};\n\n//# sourceURL=webpack:///./node_modules/@antv/g6-core/lib/global.js?");
/***/ }),
/***/ "./node_modules/@antv/g6-core/lib/interface/behavior.js":
/*!**************************************************************!*\
!*** ./node_modules/@antv/g6-core/lib/interface/behavior.js ***!
\**************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
eval("\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.G6GraphEvent = void 0;\nvar _tslib = __webpack_require__(/*! tslib */ \"./node_modules/tslib/tslib.es6.js\");\nvar _gBase = __webpack_require__(/*! @antv/g-base */ \"./node_modules/@antv/g-base/esm/index.js\");\nvar G6GraphEvent = exports.G6GraphEvent = /** @class */function (_super) {\n (0, _tslib.__extends)(G6GraphEvent, _super);\n function G6GraphEvent(type, event) {\n var _this = _super.call(this, type, event) || this;\n _this.item = event.item;\n _this.canvasX = event.canvasX;\n _this.canvasY = event.canvasY;\n _this.wheelDelta = event.wheelDelta;\n _this.detail = event.detail;\n return _this;\n }\n return G6GraphEvent;\n}(_gBase.Event);\n\n//# sourceURL=webpack:///./node_modules/@antv/g6-core/lib/interface/behavior.js?");
/***/ }),
/***/ "./node_modules/@antv/g6-core/lib/item/item.js":
/*!*****************************************************!*\
!*** ./node_modules/@antv/g6-core/lib/item/item.js ***!
\*****************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
eval("\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\nvar _tslib = __webpack_require__(/*! tslib */ \"./node_modules/tslib/tslib.es6.js\");\nvar _util = __webpack_require__(/*! @antv/util */ \"./node_modules/@antv/util/esm/index.js\");\nvar _shape = _interopRequireDefault(__webpack_require__(/*! ../element/shape */ \"./node_modules/@antv/g6-core/lib/element/shape.js\"));\nvar _graphic = __webpack_require__(/*! ../util/graphic */ \"./node_modules/@antv/g6-core/lib/util/graphic.js\");\nvar _math = __webpack_require__(/*! ../util/math */ \"./node_modules/@antv/g6-core/lib/util/math.js\");\nvar _base = __webpack_require__(/*! ../util/base */ \"./node_modules/@antv/g6-core/lib/util/base.js\");\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\nvar CACHE_BBOX = 'bboxCache';\nvar CACHE_CANVAS_BBOX = 'bboxCanvasCache';\nvar ARROWS = ['startArrow', 'endArrow'];\nvar ItemBase = /** @class */function () {\n function ItemBase(cfg) {\n this._cfg = {};\n this.destroyed = false;\n // 是否开启优化,由 graph 根据当前图上节点数量来控制\n this.optimize = false;\n var defaultCfg = {\n /**\n * id\n * @type {string}\n */\n id: undefined,\n /**\n * 类型\n * @type {string}\n */\n type: 'item',\n /**\n * data model\n * @type {object}\n */\n model: {},\n /**\n * g group\n * @type {G.Group}\n */\n group: undefined,\n /**\n * is open animate\n * @type {boolean}\n */\n animate: false,\n /**\n * visible - not group visible\n * @type {boolean}\n */\n visible: true,\n /**\n * locked - lock node\n * @type {boolean}\n */\n locked: false,\n /**\n * capture event\n * @type {boolean}\n */\n event: true,\n /**\n * key shape to calculate item's bbox\n * @type object\n */\n keyShape: undefined,\n /**\n * item's states, such as selected or active\n * @type Array\n */\n states: []\n };\n this._cfg = Object.assign(defaultCfg, this.getDefaultCfg(), cfg);\n var model = this.get('model');\n var id = model.id;\n var itemType = this.get('type');\n if (typeof id === 'undefined') {\n id = (0, _base.uniqueId)(itemType);\n } else if (typeof id !== 'string') {\n id = String(id);\n }\n this.get('model').id = id;\n this.set('id', id);\n var group = cfg.group;\n if (group) {\n group.set('item', this);\n group.set('id', id);\n }\n this.init();\n this.draw();\n var shapeType = model.shape || model.type || (itemType === 'edge' ? 'line' : 'circle');\n var shapeFactory = this.get('shapeFactory');\n if (shapeFactory && shapeFactory[shapeType]) {\n var options = shapeFactory[shapeType].options;\n // merge the stateStyles from item and shape\n if (options && options.stateStyles) {\n var styles = this.get('styles') || model.stateStyles;\n styles = (0, _util.deepMix)({}, options.stateStyles, styles);\n this.set('styles', styles);\n }\n }\n }\n /**\n * 根据 keyshape 计算包围盒\n */\n ItemBase.prototype.calculateBBox = function () {\n var keyShape = this.get('keyShape');\n var group = this.get('group');\n // 因为 group 可能会移动,所以必须通过父元素计算才能计算出正确的包围盒\n var bbox = (0, _graphic.getBBox)(keyShape, group);\n bbox.x = bbox.minX;\n bbox.y = bbox.minY;\n bbox.width = bbox.maxX - bbox.minX;\n bbox.height = bbox.maxY - bbox.minY;\n bbox.centerX = (bbox.minX + bbox.maxX) / 2;\n bbox.centerY = (bbox.minY + bbox.maxY) / 2;\n return bbox;\n };\n /**\n * 根据 keyshape 计算包围盒\n */\n ItemBase.prototype.calculateCanvasBBox = function () {\n var keyShape = this.get('keyShape');\n var group = this.get('group');\n // 因为 group 可能会移动,所以必须通过父元素计算才能计算出正确的包围盒\n var bbox = (0, _graphic.getBBox)(keyShape, group);\n bbox.x = bbox.minX;\n bbox.y = bbox.minY;\n bbox.width = bbox.maxX - bbox.minX;\n bbox.height = bbox.maxY - bbox.minY;\n bbox.centerX = (bbox.minX + bbox.maxX) / 2;\n bbox.centerY = (bbox.minY + bbox.maxY) / 2;\n return bbox;\n };\n /**\n * draw shape\n */\n ItemBase.prototype.drawInner = function () {\n var self = this;\n var shapeFactory = self.get('shapeFactory');\n var group = self.get('group');\n var model = self.get('model');\n group.clear();\n var visible = model.visible;\n if (visible !== undefined && !visible) self.changeVisibility(visible);\n if (!shapeFactory) {\n return;\n }\n self.updatePosition(model);\n var cfg = self.getShapeCfg(model); // 可能会附加额外信息\n var shapeType = cfg.type;\n var keyShape = shapeFactory.draw(shapeType, cfg, group);\n if (keyShape) {\n self.set('keyShape', keyShape);\n keyShape.set('isKeyShape', true);\n keyShape.set('draggable', true);\n }\n this.setOriginStyle();\n // 防止由于用户外部修改 model 中的 shape 导致 shape 不更新\n this.set('currentShape', shapeType);\n this.restoreStates(shapeFactory, shapeType);\n };\n /**\n * 设置图元素原始样式\n * @param keyShape 图元素 keyShape\n * @param group Group 容器\n */\n ItemBase.prototype.setOriginStyle = function () {\n var group = this.get('group');\n var children = group.get('children');\n var keyShape = this.getKeyShape();\n var self = this;\n var keyShapeName = keyShape.get('name');\n if (!this.get('originStyle')) {\n // 第一次 set originStyle,直接拿首次渲染所有图形的 attrs\n var originStyles = {};\n for (var i = 0; i < children.length; i++) {\n var child = children[i];\n var shapeType = child.get('type');\n var name_1 = child.get('name');\n if (name_1 && name_1 !== keyShapeName) {\n originStyles[name_1] = shapeType !== 'image' ? (0, _util.clone)(child.attr()) : self.getShapeStyleByName(name_1);\n // The text's position and matrix is not allowed to be affected by states\n if (shapeType === 'text' && originStyles[name_1]) {\n delete originStyles[name_1].x;\n delete originStyles[name_1].y;\n delete originStyles[name_1].matrix;\n }\n } else {\n var keyShapeStyle = self.getShapeStyleByName(); // 可优化,需要去除 child.attr 中其他 shape 名的对象\n delete keyShapeStyle.path;\n delete keyShapeStyle.matrix;\n if (!keyShapeName) {\n Object.assign(originStyles, keyShapeStyle);\n } else {\n // 若 keyShape 有 name 且 !name,这个图形不是 keyShape,给这个图形一个 name\n if (!name_1) {\n var shapeName = (0, _base.uniqueId)('shape');\n child.set('name', shapeName);\n group['shapeMap'][shapeName] = child;\n originStyles[shapeName] = shapeType !== 'image' ? (0, _util.clone)(child.attr()) : self.getShapeStyleByName(name_1);\n } else {\n originStyles[keyShapeName] = keyShapeStyle;\n }\n }\n }\n }\n self.set('originStyle', originStyles);\n } else {\n // 第二次 set originStyles,需要找到不是 stateStyles 的样式,更新到 originStyles 中\n // 上一次设置的 originStyle,是初始的 shape attrs\n var styles_1 = this.get('originStyle');\n // let styles: ShapeStyle = {};\n if (keyShapeName && !styles_1[keyShapeName]) styles_1[keyShapeName] = {};\n // 获取当前状态样式\n var currentStatesStyle_1 = this.getCurrentStatesStyle();\n var _loop_1 = function _loop_1(i) {\n var child = children[i];\n var name_2 = child.get('name');\n var shapeAttrs = child.attr();\n if (name_2 && name_2 !== keyShapeName) {\n // 有 name 的非 keyShape 图形\n var shapeStateStyle_1 = currentStatesStyle_1[name_2];\n if (!styles_1[name_2]) styles_1[name_2] = {};\n if (shapeStateStyle_1) {\n Object.keys(shapeAttrs).forEach(function (key) {\n var value = shapeAttrs[key];\n if (value !== shapeStateStyle_1[key]) styles_1[name_2][key] = value;\n });\n } else {\n styles_1[name_2] = child.get('type') !== 'image' ? (0, _util.clone)(shapeAttrs) : self.getShapeStyleByName(name_2);\n }\n } else {\n var shapeAttrs_1 = child.attr();\n var keyShapeStateStyles_1 = {};\n Object.keys(currentStatesStyle_1).forEach(function (styleKey) {\n var subStyle = currentStatesStyle_1[styleKey];\n if (styleKey === keyShapeName || !(0, _util.isPlainObject)(subStyle)) {\n keyShapeStateStyles_1[styleKey] = subStyle;\n }\n });\n Object.keys(shapeAttrs_1).forEach(function (key) {\n var value = shapeAttrs_1[key];\n // 如果是对象且不是 arrow,则是其他 shape 的样式\n // if (isPlainObject(value) && ARROWS.indexOf(name) === -1) return;\n if (keyShapeStateStyles_1[key] !== value) {\n if (keyShapeName) styles_1[keyShapeName][key] = value;else styles_1[key] = value;\n }\n });\n }\n };\n // 遍历当前所有图形的 attrs,找到不是 stateStyles 的样式更新到 originStyles 中\n for (var i = 0; i < children.length; i++) {\n _loop_1(i);\n }\n delete styles_1.path;\n delete styles_1.matrix;\n delete styles_1.x;\n delete styles_1.y;\n if (styles_1[keyShapeName]) {\n delete styles_1[keyShapeName].x;\n delete styles_1[keyShapeName].y;\n delete styles_1[keyShapeName].matrix;\n delete styles_1[keyShapeName].path;\n }\n self.set('originStyle', styles_1);\n }\n };\n /**\n * restore shape states\n * @param shapeFactory\n * @param shapeType\n */\n ItemBase.prototype.restoreStates = function (shapeFactory, shapeType) {\n var self = this;\n var states = self.get('states');\n (0, _util.each)(states, function (state) {\n shapeFactory.setState(shapeType, state, true, self);\n });\n };\n ItemBase.prototype.init = function () {\n var shapeFactory = _shape.default.getFactory(this.get('type'));\n this.set('shapeFactory', shapeFactory);\n };\n /**\n * 获取属性\n * @internal 仅内部类使用\n * @param {String} key 属性名\n * @return {object | string | number} 属性值\n */\n ItemBase.prototype.get = function (key) {\n return this._cfg[key];\n };\n /**\n * 设置属性\n * @internal 仅内部类使用\n * @param {String|Object} key 属性名,也可以是对象\n * @param {object | string | number} val 属性值\n */\n ItemBase.prototype.set = function (key, val) {\n if ((0, _util.isPlainObject)(key)) {\n this._cfg = (0, _tslib.__assign)((0, _tslib.__assign)({}, this._cfg), key);\n } else {\n this._cfg[key] = val;\n }\n };\n ItemBase.prototype.getDefaultCfg = function () {\n return {};\n };\n /**\n * 更新/刷新等操作后,清除 cache\n */\n ItemBase.prototype.clearCache = function () {\n this.set(CACHE_BBOX, null);\n this.set(CACHE_CANVAS_BBOX, null);\n };\n /**\n * 渲染前的逻辑,提供给子类复写\n */\n ItemBase.prototype.beforeDraw = function () {};\n /**\n * 渲染后的逻辑,提供给子类复写\n */\n ItemBase.prototype.afterDraw = function () {};\n /**\n * 更新后做一些工作\n */\n ItemBase.prototype.afterUpdate = function () {};\n /**\n * draw shape\n */\n ItemBase.prototype.draw = function () {\n this.beforeDraw();\n this.drawInner();\n this.afterDraw();\n };\n ItemBase.prototype.getShapeStyleByName = function (name) {\n var group = this.get('group');\n var currentShape;\n if (name) {\n currentShape = group['shapeMap'][name] || group.find(function (element) {\n return element.get('name') === name;\n });\n } else {\n currentShape = this.getKeyShape();\n }\n if (currentShape) {\n var styles_2 = {};\n (0, _util.each)(currentShape.attr(), function (val, key) {\n // 修改 img 通过 updateItem 实现\n if (key !== 'img' || (0, _util.isString)(val)) {\n styles_2[key] = val;\n }\n });\n return styles_2;\n }\n return {};\n };\n ItemBase.prototype.getShapeCfg = function (model, updateType) {\n var styles = this.get('styles');\n if (styles) {\n // merge graph的item样式与数据模型中的样式\n var newModel = model;\n newModel.style = (0, _tslib.__assign)((0, _tslib.__assign)({}, styles), model.style);\n return newModel;\n }\n return model;\n };\n /**\n * 获取指定状态的样式,去除了全局样式\n * @param state 状态名称\n */\n ItemBase.prototype.getStateStyle = function (state) {\n var styles = this.get('styles');\n var stateStyle = styles && styles[state];\n return stateStyle;\n };\n /**\n * get keyshape style\n */\n ItemBase.prototype.getOriginStyle = function () {\n return this.get('originStyle');\n };\n ItemBase.prototype.getCurrentStatesStyle = function () {\n var self = this;\n var styles = {};\n var states = self.getStates();\n if (!states || !states.length) {\n return this.get('originStyle');\n }\n (0, _util.each)(self.getStates(), function (state) {\n styles = Object.assign(styles, self.getStateStyle(state));\n });\n return styles;\n };\n /**\n * 更改元素状态, visible 不属于这个范畴\n * @internal 仅提供内部类 graph 使用\n * @param {String} state 状态名\n * @param {Boolean} value 节点状态值\n */\n ItemBase.prototype.setState = function (state, value) {\n var states = this.get('states');\n var shapeFactory = this.get('shapeFactory');\n var stateName = state;\n var filterStateName = state;\n if ((0, _util.isString)(value)) {\n stateName = \"\".concat(state, \":\").concat(value);\n filterStateName = \"\".concat(state, \":\");\n }\n var newStates = states;\n if ((0, _util.isBoolean)(value)) {\n var index = states.indexOf(filterStateName);\n if (value) {\n if (index > -1) {\n return;\n }\n states.push(stateName);\n } else if (index > -1) {\n states.splice(index, 1);\n }\n } else if ((0, _util.isString)(value)) {\n // 过滤掉 states 中 filterStateName 相关的状态\n var filterStates = states.filter(function (name) {\n return name.includes(filterStateName);\n });\n if (filterStates.length > 0) {\n this.clearStates(filterStates);\n }\n newStates = newStates.filter(function (name) {\n return !name.includes(filterStateName);\n });\n newStates.push(stateName);\n this.set('states', newStates);\n }\n if (shapeFactory) {\n var model = this.get('model');\n var type = model.type;\n // 调用 shape/shape.ts 中的 setState\n shapeFactory.setState(type, state, value, this);\n }\n };\n /**\n * 清除指定的状态,如果参数为空,则不做任务处理\n * @param states 状态名称\n */\n ItemBase.prototype.clearStates = function (states) {\n var self = this;\n var originStates = self.getStates();\n var shapeFactory = self.get('shapeFactory');\n var model = self.get('model');\n var shape = model.type;\n if (!states) {\n states = originStates;\n }\n if ((0, _util.isString)(states)) {\n states = [states];\n }\n var newStates = originStates.filter(function (state) {\n return states.indexOf(state) === -1;\n });\n self.set('states', newStates);\n states.forEach(function (state) {\n shapeFactory.setState(shape, state, false, self);\n });\n };\n /**\n * 设置是否开启性能优化模式\n * 目前影响:节点的状态样式更新是否影响相关边的更新\n * @param {Boolean} enableOptimize 是否开启\n */\n ItemBase.prototype.setOptimize = function (enableOptimize) {\n this.optimize = enableOptimize;\n };\n /**\n * 节点的图形容器\n * @return {G.Group} 图形容器\n */\n ItemBase.prototype.getContainer = function () {\n return this.get('group');\n };\n /**\n * 节点的关键形状,用于计算节点大小,连线截距等\n * @return {IShapeBase} 关键形状\n */\n ItemBase.prototype.getKeyShape = function () {\n return this.get('keyShape');\n };\n /**\n * 节点数据模型\n * @return {Object} 数据模型\n */\n ItemBase.prototype.getModel = function () {\n return this.get('model');\n };\n /**\n * 节点类型\n * @return {string} 节点的类型\n */\n ItemBase.prototype.getType = function () {\n return this.get('type');\n };\n /**\n * 获取 Item 的ID\n */\n ItemBase.prototype.getID = function () {\n return this.get('id');\n };\n /**\n * 是否是 Item 对象,悬空边情况下进行判定\n */\n ItemBase.prototype.isItem = function () {\n return true;\n };\n /**\n * 获取当前元素的所有状态\n * @return {Array} 元素的所有状态\n */\n ItemBase.prototype.getStates = function () {\n return this.get('states');\n };\n /**\n * 当前元素是否处于某状态\n * @param {String} state 状态名\n * @return {Boolean} 是否处于某状态\n */\n ItemBase.prototype.hasState = function (state) {\n var states = this.getStates();\n return states.indexOf(state) >= 0;\n };\n /**\n * 刷新一般用于处理几种情况\n * 1. item model 在外部被改变\n * 2. 边的节点位置发生改变,需要重新计算边\n *\n * 因为数据从外部被修改无法判断一些属性是否被修改,直接走位置和 shape 的更新\n */\n ItemBase.prototype.refresh = function (updateType) {\n var model = this.get('model');\n // 更新元素位置\n this.updatePosition(model);\n // 更新元素内容,样式\n this.updateShape(updateType);\n // 做一些更新之后的操作\n this.afterUpdate();\n // 清除缓存\n this.clearCache();\n };\n ItemBase.prototype.getUpdateType = function (cfg) {\n return undefined;\n };\n /**\n * 将更新应用到 model 上,刷新属性\n * @internal 仅提供给 Graph 使用,外部直接调用 graph.update 接口\n * @param {Object} cfg 配置项,可以是增量信息\n */\n ItemBase.prototype.update = function (cfg, updateType) {\n if (updateType === void 0) {\n updateType = undefined;\n }\n var model = this.get('model');\n // 仅仅移动位置时,既不更新,也不重绘\n if (updateType === 'move') {\n this.updatePosition(cfg);\n } else {\n var oriVisible = model.visible;\n var cfgVisible = cfg.visible;\n if (oriVisible !== cfgVisible && cfgVisible !== undefined) this.changeVisibility(cfgVisible);\n var originPosition = {\n x: model.x,\n y: model.y\n };\n cfg.x = isNaN(+cfg.x) ? model.x : +cfg.x;\n cfg.y = isNaN(+cfg.y) ? model.y : +cfg.y;\n var styles = this.get('styles');\n if (cfg.stateStyles) {\n // 更新 item 时更新 this.get('styles') 中的值\n var stateStyles = cfg.stateStyles;\n (0, _util.mix)(styles, stateStyles);\n delete cfg.stateStyles;\n }\n // 直接将更新合到原数据模型上,可以保证用户在外部修改源数据然后刷新时的样式符合期待。\n Object.assign(model, cfg);\n // 如果 x,y 有变化,先重置位置\n if (originPosition.x !== cfg.x || originPosition.y !== cfg.y) {\n this.updatePosition(cfg);\n }\n this.updateShape(updateType);\n }\n this.afterUpdate();\n this.clearCache();\n };\n /**\n * 更新元素内容,样式\n */\n ItemBase.prototype.updateShape = function (updateType) {\n var shapeFactory = this.get('shapeFactory');\n var model = this.get('model');\n var shape = model.type;\n // 判定是否允许更新\n // 1. 注册的节点允许更新(即有继承的/复写的 update 方法,即 update 方法没有被复写为 undefined)\n // 2. 更新后的 shape 等于原先的 shape\n if (shapeFactory.shouldUpdate(shape) && shape === this.get('currentShape')) {\n var updateCfg = this.getShapeCfg(model, updateType);\n shapeFactory.baseUpdate(shape, updateCfg, this, updateType);\n // 更新完以后重新设置原始样式\n if (updateType !== 'move') this.setOriginStyle();\n } else {\n // 如果不满足上面两种状态,重新绘制\n this.draw();\n }\n // 更新后重置节点状态\n this.restoreStates(shapeFactory, shape);\n };\n /**\n * 更新位置,避免整体重绘\n * @param {object} cfg 待更新数据\n */\n ItemBase.prototype.updatePosition = function (cfg) {\n var model = this.get('model');\n var x = isNaN(+cfg.x) ? +model.x : +cfg.x;\n var y = isNaN(+cfg.y) ? +model.y : +cfg.y;\n var group = this.get('group');\n if (isNaN(x) || isNaN(y)) {\n return false;\n }\n model.x = x;\n model.y = y;\n var matrix = group.getMatrix();\n if (matrix && matrix[6] === x && matrix[7] === y) return false;\n group.resetMatrix();\n // G 4.0 element 中移除了矩阵相关方法,详见https://www.yuque.com/antv/blog/kxzk9g#4rMMV\n (0, _math.translate)(group, {\n x: x,\n y: y\n });\n this.clearCache(); // 位置更新后需要清除缓存\n return true;\n };\n /**\n * 获取 item 的包围盒,这个包围盒是相对于 item 自己,不会将 matrix 计算在内\n * @return {Object} 包含 x,y,width,height, centerX, centerY\n */\n ItemBase.prototype.getBBox = function () {\n // 计算 bbox 开销有些大,缓存\n var bbox = this.get(CACHE_BBOX);\n if (!bbox) {\n bbox = this.calculateBBox();\n this.set(CACHE_BBOX, bbox);\n }\n return bbox;\n };\n /**\n * 获取 item 相对于画布的包围盒,会将从顶层到当前元素的 matrix 都计算在内\n * @return {Object} 包含 x,y,width,height, centerX, centerY\n */\n ItemBase.prototype.getCanvasBBox = function () {\n // 计算 bbox 开销大,缓存\n var bbox = this.get(CACHE_CANVAS_BBOX);\n if (!bbox) {\n bbox = this.calculateCanvasBBox();\n this.set(CACHE_CANVAS_BBOX, bbox);\n }\n return bbox;\n };\n /**\n * 将元素放到最前面\n */\n ItemBase.prototype.toFront = function () {\n var group = this.get('group');\n group.toFront();\n };\n /**\n * 将元素放到最后面\n */\n ItemBase.prototype.toBack = function () {\n var group = this.get('group');\n group.toBack();\n };\n /**\n * 显示元素\n */\n ItemBase.prototype.show = function () {\n this.changeVisibility(true);\n };\n /**\n * 隐藏元素\n */\n ItemBase.prototype.hide = function () {\n this.changeVisibility(false);\n };\n /**\n * 更改是否显示\n * @param {Boolean} visible 是否显示\n */\n ItemBase.prototype.changeVisibility = function (visible) {\n var group = this.get('group');\n if (visible) {\n group.show();\n } else {\n group.hide();\n }\n this.set('visible', visible);\n };\n /**\n * 元素是否可见\n * @return {Boolean} 返回该元素是否可见\n */\n ItemBase.prototype.isVisible = function () {\n return this.get('visible');\n };\n /**\n * 是否拾取及出发该元素的交互事件\n * @param {Boolean} enable 标识位\n */\n ItemBase.prototype.enableCapture = function (enable) {\n var group = this.get('group');\n if (group) {\n group.set('capture', enable);\n }\n };\n ItemBase.prototype.destroy = function () {\n if (!this.destroyed) {\n var animate = this.get('animate');\n var group = this.get('group');\n if (animate) {\n group.stopAnimate();\n }\n group['shapeMap'] = {};\n this.clearCache();\n group.remove();\n this._cfg = null;\n this.destroyed = true;\n }\n };\n return ItemBase;\n}();\nvar _default = exports.default = ItemBase;\n\n//# sourceURL=webpack:///./node_modules/@antv/g6-core/lib/item/item.js?");
/***/ }),
/***/ "./node_modules/@antv/g6-core/lib/util/base.js":
/*!*****************************************************!*\
!*** ./node_modules/@antv/g6-core/lib/util/base.js ***!
\*****************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
eval("\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.uniqueId = exports.processParallelEdges = exports.isViewportChanged = exports.isNaN = exports.formatPadding = exports.cloneEvent = exports.calculationItemsBBox = void 0;\nvar _util = __webpack_require__(/*! @antv/util */ \"./node_modules/@antv/util/esm/index.js\");\nvar _behavior = __webpack_require__(/*! ../interface/behavior */ \"./node_modules/@antv/g6-core/lib/interface/behavior.js\");\nvar uniqueId = exports.uniqueId = function uniqueId(type) {\n return \"\".concat(type, \"-\").concat(Math.random()).concat(Date.now());\n};\n/**\n * turn padding into [top, right, bottom, right]\n * @param {Number|Array} padding input padding\n * @return {array} output\n */\nvar formatPadding = exports.formatPadding = function formatPadding(padding) {\n if ((0, _util.isArray)(padding)) {\n switch (padding.length) {\n case 4:\n return padding;\n case 3:\n padding.push(padding[1]);\n return padding;\n case 2:\n return padding.concat(padding);\n case 1:\n return [padding[0], padding[0], padding[0], padding[0]];\n default:\n return [0, 0, 0, 0];\n }\n }\n if ((0, _util.isNumber)(padding)) {\n return [padding, padding, padding, padding];\n } else if ((0, _util.isString)(padding)) {\n var intPadding = parseInt(padding, 10);\n return [intPadding, intPadding, intPadding, intPadding];\n }\n return [0, 0, 0, 0];\n};\n/**\n * clone event\n * @param e\n */\nvar cloneEvent = exports.cloneEvent = function cloneEvent(e) {\n var event = new _behavior.G6GraphEvent(e.type, e);\n event.clientX = e.clientX;\n event.clientY = e.clientY;\n event.x = e.x;\n event.y = e.y;\n event.target = e.target;\n event.currentTarget = e.currentTarget;\n event.bubbles = true;\n event.item = e.item;\n return event;\n};\n/**\n * 判断 viewport 是否改变,通过和单位矩阵对比\n * @param matrix Viewport 的 Matrix\n */\nvar isViewportChanged = exports.isViewportChanged = function isViewportChanged(matrix) {\n // matrix 为 null, 则说明没有变化\n if (!matrix) {\n return false;\n }\n var MATRIX_LEN = 9;\n var ORIGIN_MATRIX = [1, 0, 0, 0, 1, 0, 0, 0, 1];\n for (var i = 0; i < MATRIX_LEN; i++) {\n if (matrix[i] !== ORIGIN_MATRIX[i]) {\n return true;\n }\n }\n return false;\n};\nvar isNaN = exports.isNaN = function isNaN(input) {\n return Number.isNaN(Number(input));\n};\n/**\n * 计算一组 Item 的 BBox\n * @param items 选中的一组Item,可以是 node 或 combo\n */\nvar calculationItemsBBox = exports.calculationItemsBBox = function calculationItemsBBox(items) {\n var minx = Infinity;\n var maxx = -Infinity;\n var miny = Infinity;\n var maxy = -Infinity;\n // 获取已节点的所有最大最小x y值\n for (var i = 0; i < items.length; i++) {\n var element = items[i];\n var bbox = element.getBBox();\n var minX = bbox.minX,\n minY = bbox.minY,\n maxX = bbox.maxX,\n maxY = bbox.maxY;\n if (minX < minx) {\n minx = minX;\n }\n if (minY < miny) {\n miny = minY;\n }\n if (maxX > maxx) {\n maxx = maxX;\n }\n if (maxY > maxy) {\n maxy = maxY;\n }\n }\n var x = Math.floor(minx);\n var y = Math.floor(miny);\n var width = Math.ceil(maxx) - Math.floor(minx);\n var height = Math.ceil(maxy) - Math.floor(miny);\n return {\n x: x,\n y: y,\n width: width,\n height: height,\n minX: minx,\n minY: miny,\n maxX: maxx,\n maxY: maxy\n };\n};\n/**\n * 若 edges 中存在两端点相同的边,使用 quadratic 边并自动计算 curveOffset 使它们不相互重叠\n * 文档: https://g6.antv.antgroup.com/en/api/Util\n * @param edges 边数据集合\n * @param offsetDiff 相邻两边的 offset 之差\n * @param multiEdgeType\n * @param singleEdgeType\n * @param loopEdgeType\n */\nvar processParallelEdges = exports.processParallelEdges = function processParallelEdges(edges, offsetDiff, multiEdgeType, singleEdgeType, loopEdgeType) {\n if (offsetDiff === void 0) {\n offsetDiff = 15;\n }\n if (multiEdgeType === void 0) {\n multiEdgeType = 'quadratic';\n }\n if (singleEdgeType === void 0) {\n singleEdgeType = undefined;\n }\n if (loopEdgeType === void 0) {\n loopEdgeType = undefined;\n }\n var len = edges.length;\n var cod = offsetDiff * 2;\n var loopPosition = ['top', 'top-right', 'right', 'bottom-right', 'bottom', 'bottom-left', 'left', 'top-left'];\n var edgeMap = {};\n var tags = [];\n var reverses = {};\n for (var i = 0; i < len; i++) {\n var edge = edges[i];\n var source = edge.source,\n target = edge.target;\n var sourceTarget = \"\".concat(source, \"-\").concat(target);\n if (tags[i]) continue;\n if (!edgeMap[sourceTarget]) {\n edgeMap[sourceTarget] = [];\n }\n tags[i] = true;\n edgeMap[sourceTarget].push(edge);\n for (var j = 0; j < len; j++) {\n if (i === j) continue;\n var sedge = edges[j];\n var src = sedge.source;\n var dst = sedge.target;\n // 两个节点之间共同的边\n // 第一条的source = 第二条的target\n // 第一条的target = 第二条的source\n if (!tags[j]) {\n if (source === dst && target === src) {\n edgeMap[sourceTarget].push(sedge);\n tags[j] = true;\n reverses[\"\".concat(src, \"|\").concat(dst, \"|\").concat(edgeMap[sourceTarget].length - 1)] = true;\n } else if (source === src && target === dst) {\n edgeMap[sourceTarget].push(sedge);\n tags[j] = true;\n }\n }\n }\n }\n for (var key in edgeMap) {\n var arcEdges = edgeMap[key];\n var length_1 = arcEdges.length;\n for (var k = 0; k < length_1; k++) {\n var current = arcEdges[k];\n if (current.source === current.target) {\n if (loopEdgeType) current.type = loopEdgeType;\n // 超过8条自环边,则需要重新处理\n current.loopCfg = {\n position: loopPosition[k % 8],\n dist: Math.floor(k / 8) * 20 + 50\n };\n continue;\n }\n if (length_1 === 1 && singleEdgeType && current.source !== current.target) {\n current.type = singleEdgeType;\n continue;\n }\n current.type = multiEdgeType;\n var sign = (k % 2 === 0 ? 1 : -1) * (reverses[\"\".concat(current.source, \"|\").concat(current.target, \"|\").concat(k)] ? -1 : 1);\n if (length_1 % 2 === 1) {\n current.curveOffset = sign * Math.ceil(k / 2) * cod;\n } else {\n current.curveOffset = sign * (Math.floor(k / 2) * cod + offsetDiff);\n }\n }\n }\n return edges;\n};\n\n//# sourceURL=webpack:///./node_modules/@antv/g6-core/lib/util/base.js?");
/***/ }),
/***/ "./node_modules/@antv/g6-core/lib/util/graphic.js":
/*!********************************************************!*\
!*** ./node_modules/@antv/g6-core/lib/util/graphic.js ***!
\********************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
eval("\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.truncateLabelByLength = exports.traverseTreeUp = exports.traverseTree = exports.shouldRefreshEdge = exports.reconstructTree = exports.plainCombosToTrees = exports.getTextSize = exports.getLoopCfgs = exports.getLetterWidth = exports.getLabelPosition = exports.getComboBBox = exports.getBBox = exports.getAnimateCfgWithCallback = exports.cloneBesidesImg = void 0;\nvar _tslib = __webpack_require__(/*! tslib */ \"./node_modules/tslib/tslib.es6.js\");\nvar _matrixUtil = __webpack_require__(/*! @antv/matrix-util */ \"./node_modules/@antv/matrix-util/esm/index.js\");\nvar _util = __webpack_require__(/*! @antv/util */ \"./node_modules/@antv/util/esm/index.js\");\nvar _global = _interopRequireDefault(__webpack_require__(/*! ../global */ \"./node_modules/@antv/g6-core/lib/global.js\"));\nvar _letterAspectRatio = _interopRequireDefault(__webpack_require__(/*! ./letterAspectRatio */ \"./node_modules/@antv/g6-core/lib/util/letterAspectRatio.js\"));\nvar _math = __webpack_require__(/*! ./math */ \"./node_modules/@antv/g6-core/lib/util/math.js\");\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\nvar PI = Math.PI,\n sin = Math.sin,\n cos = Math.cos;\n// 一共支持8个方向的自环,每个环占的角度是45度,在计算时再二分,为22.5度\nvar SELF_LINK_SIN = sin(PI / 8);\nvar SELF_LINK_COS = cos(PI / 8);\nvar getBBox = exports.getBBox = function getBBox(element, group) {\n var bbox = element.getBBox();\n var leftTop = {\n x: bbox.minX,\n y: bbox.minY\n };\n var rightBottom = {\n x: bbox.maxX,\n y: bbox.maxY\n };\n // 根据父元素变换矩阵\n if (group) {\n var matrix = group.getMatrix();\n if (!matrix) {\n matrix = [1, 0, 0, 0, 1, 0, 0, 0, 1];\n }\n leftTop = (0, _math.applyMatrix)(leftTop, matrix);\n rightBottom = (0, _math.applyMatrix)(rightBottom, matrix);\n }\n var lx = leftTop.x,\n ly = leftTop.y;\n var rx = rightBottom.x,\n ry = rightBottom.y;\n return {\n x: lx,\n y: ly,\n minX: lx,\n minY: ly,\n maxX: rx,\n maxY: ry,\n width: rx - lx,\n height: ry - ly\n };\n};\n/**\n * get loop edge config\n * @param cfg edge config\n */\nvar getLoopCfgs = exports.getLoopCfgs = function getLoopCfgs(cfg) {\n var item = cfg.sourceNode || cfg.targetNode;\n var container = item.get('group');\n var containerMatrix = container.getMatrix();\n if (!containerMatrix) containerMatrix = [1, 0, 0, 0, 1, 0, 0, 0, 1];\n var keyShape = item.getKeyShape();\n var bbox = keyShape.getBBox();\n var loopCfg = cfg.loopCfg || {};\n // 距离keyShape边的最高距离\n var dist = loopCfg.dist || Math.max(bbox.width, bbox.height) * 2;\n // 自环边与keyShape的相对位置关系\n var position = loopCfg.position || _global.default.defaultLoopPosition;\n // 中心取节点 keyShape bbox 的中心位置 + 节点位置坐标\n var center = [(bbox.minX + bbox.maxX) / 2 + containerMatrix[6], (bbox.minY + bbox.maxY) / 2 + containerMatrix[7]];\n var startPoint = [cfg.startPoint.x, cfg.startPoint.y];\n var endPoint = [cfg.endPoint.x, cfg.endPoint.y];\n var halfOfHeight = bbox.height / 2;\n var halfOfWidth = bbox.width / 2;\n var rstart = halfOfHeight;\n var rend = halfOfHeight;\n var sinDeltaStart = rstart * SELF_LINK_SIN;\n var cosDeltaStart = rstart * SELF_LINK_COS;\n var sinDeltaEnd = rend * SELF_LINK_SIN;\n var cosDeltaEnd = rend * SELF_LINK_COS;\n var shapeType = keyShape.get('type');\n // 美观考虑,pointPadding 默认取宽高中最小的1/4\n var defaultPointPadding = Math.min(halfOfHeight / 2, halfOfWidth / 2);\n var maxPointPadding = Math.min(halfOfHeight, halfOfWidth);\n // 对于非圆形节点设置的连接点与节点中心坐标(`top-right`,`bottom-right`,`top-left`,`bottom-left`较特殊,为四个角坐标)在 x 轴或 y 轴方向的偏移量,默认为 `节点宽高中最小值的1/4`\n var pointPadding = (loopCfg === null || loopCfg === void 0 ? void 0 : loopCfg.pointPadding) ? Math.min(maxPointPadding, loopCfg === null || loopCfg === void 0 ? void 0 : loopCfg.pointPadding) : defaultPointPadding;\n // 如果定义了锚点的,直接用锚点坐标,否则,根据自环的 cfg 计算\n if (startPoint[0] === endPoint[0] && startPoint[1] === endPoint[1]) {\n switch (position) {\n case 'top':\n if (shapeType === 'circle') {\n startPoint = [center[0] - sinDeltaStart, center[1] - cosDeltaStart];\n endPoint = [center[0] + sinDeltaEnd, center[1] - cosDeltaEnd];\n } else {\n startPoint = [center[0] - pointPadding, center[1] - halfOfHeight];\n endPoint = [center[0] + pointPadding, center[1] - halfOfHeight];\n }\n break;\n case 'top-right':\n rstart = halfOfHeight;\n rend = halfOfWidth;\n if (shapeType === 'circle') {\n sinDeltaStart = rstart * SELF_LINK_SIN;\n cosDeltaStart = rstart * SELF_LINK_COS;\n sinDeltaEnd = rend * SELF_LINK_SIN;\n cosDeltaEnd = rend * SELF_LINK_COS;\n startPoint = [center[0] + sinDeltaStart, center[1] - cosDeltaStart];\n endPoint = [center[0] + cosDeltaEnd, center[1] - sinDeltaEnd];\n } else {\n startPoint = [center[0] + halfOfWidth - pointPadding, center[1] - halfOfHeight];\n endPoint = [center[0] + halfOfWidth, center[1] - halfOfHeight + pointPadding];\n }\n break;\n case 'right':\n rstart = halfOfWidth;\n rend = halfOfWidth;\n if (shapeType === 'circle') {\n sinDeltaStart = rstart * SELF_LINK_SIN;\n cosDeltaStart = rstart * SELF_LINK_COS;\n sinDeltaEnd = rend * SELF_LINK_SIN;\n cosDeltaEnd = rend * SELF_LINK_COS;\n startPoint = [center[0] + cosDeltaStart, center[1] - sinDeltaStart];\n endPoint = [center[0] + cosDeltaEnd, center[1] + sinDeltaEnd];\n } else {\n startPoint = [center[0] + halfOfWidth, center[1] - pointPadding];\n endPoint = [center[0] + halfOfWidth, center[1] + pointPadding];\n }\n break;\n case 'bottom-right':\n rstart = halfOfWidth;\n rend = halfOfHeight;\n if (shapeType === 'circle') {\n sinDeltaStart = rstart * SELF_LINK_SIN;\n cosDeltaStart = rstart * SELF_LINK_COS;\n sinDeltaEnd = rend * SELF_LINK_SIN;\n cosDeltaEnd = rend * SELF_LINK_COS;\n startPoint = [center[0] + cosDeltaStart, center[1] + sinDeltaStart];\n endPoint = [center[0] + sinDeltaEnd, center[1] + cosDeltaEnd];\n } else {\n startPoint = [center[0] + halfOfWidth, center[1] + halfOfHeight - pointPadding];\n endPoint = [center[0] + halfOfWidth - pointPadding, center[1] + halfOfHeight];\n }\n break;\n case 'bottom':\n rstart = halfOfHeight;\n rend = halfOfHeight;\n if (shapeType === 'circle') {\n sinDeltaStart = rstart * SELF_LINK_SIN;\n cosDeltaStart = rstart * SELF_LINK_COS;\n sinDeltaEnd = rend * SELF_LINK_SIN;\n cosDeltaEnd = rend * SELF_LINK_COS;\n startPoint = [center[0] + sinDeltaStart, center[1] + cosDeltaStart];\n endPoint = [center[0] - sinDeltaEnd, center[1] + cosDeltaEnd];\n } else {\n startPoint = [center[0] - pointPadding, center[1] + halfOfHeight];\n endPoint = [center[0] + pointPadding, center[1] + halfOfHeight];\n }\n break;\n case 'bottom-left':\n rstart = halfOfHeight;\n rend = halfOfWidth;\n if (shapeType === 'circle') {\n sinDeltaStart = rstart * SELF_LINK_SIN;\n cosDeltaStart = rstart * SELF_LINK_COS;\n sinDeltaEnd = rend * SELF_LINK_SIN;\n cosDeltaEnd = rend * SELF_LINK_COS;\n startPoint = [center[0] - sinDeltaStart, center[1] + cosDeltaStart];\n endPoint = [center[0] - cosDeltaEnd, center[1] + sinDeltaEnd];\n } else {\n startPoint = [center[0] - halfOfWidth, center[1] + halfOfHeight - pointPadding];\n endPoint = [center[0] - halfOfWidth + pointPadding, center[1] + halfOfHeight];\n }\n break;\n case 'left':\n rstart = halfOfWidth;\n rend = halfOfWidth;\n if (shapeType === 'circle') {\n sinDeltaStart = rstart * SELF_LINK_SIN;\n cosDeltaStart = rstart * SELF_LINK_COS;\n sinDeltaEnd = rend * SELF_LINK_SIN;\n cosDeltaEnd = rend * SELF_LINK_COS;\n startPoint = [center[0] - cosDeltaStart, center[1] + sinDeltaStart];\n endPoint = [center[0] - cosDeltaEnd, center[1] - sinDeltaEnd];\n } else {\n startPoint = [center[0] - halfOfWidth, center[1] - pointPadding];\n endPoint = [center[0] - halfOfWidth, center[1] + pointPadding];\n }\n break;\n case 'top-left':\n rstart = halfOfWidth;\n rend = halfOfHeight;\n if (shapeType === 'circle') {\n sinDeltaStart = rstart * SELF_LINK_SIN;\n cosDeltaStart = rstart * SELF_LINK_COS;\n sinDeltaEnd = rend * SELF_LINK_SIN;\n cosDeltaEnd = rend * SELF_LINK_COS;\n startPoint = [center[0] - cosDeltaStart, center[1] - sinDeltaStart];\n endPoint = [center[0] - sinDeltaEnd, center[1] - cosDeltaEnd];\n } else {\n startPoint = [center[0] - halfOfWidth + pointPadding, center[1] - halfOfHeight];\n endPoint = [center[0] - halfOfWidth, center[1] - halfOfHeight + pointPadding];\n }\n break;\n default:\n rstart = halfOfWidth;\n rend = halfOfWidth;\n sinDeltaStart = rstart * SELF_LINK_SIN;\n cosDeltaStart = rstart * SELF_LINK_COS;\n sinDeltaEnd = rend * SELF_LINK_SIN;\n cosDeltaEnd = rend * SELF_LINK_COS;\n startPoint = [center[0] - sinDeltaStart, center[1] - cosDeltaStart];\n endPoint = [center[0] + sinDeltaEnd, center[1] - cosDeltaEnd];\n }\n // 如果逆时针画,交换起点和终点\n if (loopCfg.clockwise === false) {\n var swap = [startPoint[0], startPoint[1]];\n startPoint = [endPoint[0], endPoint[1]];\n endPoint = [swap[0], swap[1]];\n }\n }\n var startVec = [startPoint[0] - center[0], startPoint[1] - center[1]];\n var scaleRateStart = (rstart + dist) / rstart;\n var scaleRateEnd = (rend + dist) / rend;\n if (loopCfg.clockwise === false) {\n scaleRateStart = (rend + dist) / rend;\n scaleRateEnd = (rstart + dist) / rstart;\n }\n var startExtendVec = _matrixUtil.vec2.scale([0, 0], startVec, scaleRateStart);\n var controlPoint1 = [center[0] + startExtendVec[0], center[1] + startExtendVec[1]];\n var endVec = [endPoint[0] - center[0], endPoint[1] - center[1]];\n var endExtendVec = _matrixUtil.vec2.scale([0, 0], endVec, scaleRateEnd);\n var controlPoint2 = [center[0] + endExtendVec[0], center[1] + endExtendVec[1]];\n cfg.startPoint = {\n x: startPoint[0],\n y: startPoint[1]\n };\n cfg.endPoint = {\n x: endPoint[0],\n y: endPoint[1]\n };\n cfg.controlPoints = [{\n x: controlPoint1[0],\n y: controlPoint1[1]\n }, {\n x: controlPoint2[0],\n y: controlPoint2[1]\n }];\n return cfg;\n};\n/**\n * 根据 label 所在线条的位置百分比,计算 label 坐标\n * @param {object} pathShape G 的 path 实例,一般是 Edge 实例的 keyShape\n * @param {number} percent 范围 0 - 1 的线条百分比\n * @param {number} refX x 轴正方向为基准的 label 偏移\n * @param {number} refY y 轴正方向为基准的 label 偏移\n * @param {boolean} rotate 是否根据线条斜率旋转文本\n * @return {object} 文本的 x, y, 文本的旋转角度\n */\nvar getLabelPosition = exports.getLabelPosition = function getLabelPosition(pathShape, percent, refX, refY, rotate) {\n var TAN_OFFSET = 0.0001;\n var vector = [];\n var point = pathShape === null || pathShape === void 0 ? void 0 : pathShape.getPoint(percent);\n if (!point) {\n return {\n x: 0,\n y: 0,\n angle: 0\n };\n }\n // 头尾最可能,放在最前面,使用 g path 上封装的方法\n if (percent < TAN_OFFSET) {\n vector = pathShape.getStartTangent().reverse();\n } else if (percent > 1 - TAN_OFFSET) {\n vector = pathShape.getEndTangent();\n } else {\n // 否则取指定位置的点,与少量偏移的点,做微分向量\n var offsetPoint = pathShape === null || pathShape === void 0 ? void 0 : pathShape.getPoint(percent + TAN_OFFSET);\n vector.push([point.x, point.y]);\n vector.push([offsetPoint.x, offsetPoint.y]);\n }\n var rad = Math.atan2(vector[1][1] - vector[0][1], vector[1][0] - vector[0][0]);\n if (rad < 0) {\n rad += PI * 2;\n }\n if (refX) {\n point.x += cos(rad) * refX;\n point.y += sin(rad) * refX;\n }\n if (refY) {\n // 默认方向是 x 轴正方向,法线是 求出角度 - 90°\n var normal = rad - PI / 2;\n // 若法线角度在 y 轴负方向,切到正方向,保证 refY 相对于 y 轴正方向\n if (rad > 1 / 2 * PI && rad < 3 * 1 / 2 * PI) {\n normal -= PI;\n }\n point.x += cos(normal) * refY;\n point.y += sin(normal) * refY;\n }\n var result = {\n x: point.x,\n y: point.y,\n angle: rad\n };\n if (rotate) {\n if (rad > 0.5 * PI && rad < 1.5 * PI) {\n rad -= PI;\n }\n return (0, _tslib.__assign)({\n rotate: rad\n }, result);\n }\n return result;\n};\n/**\n * depth first traverse, from root to leaves, children in inverse order\n * if the fn returns false, terminate the traverse\n */\nvar traverse = function traverse(data, parent, index, fn) {\n if (fn(data, parent, index) === false) {\n return false;\n }\n if (data && data.children) {\n for (var i = data.children.length - 1; i >= 0; i--) {\n if (!traverse(data.children[i], data, i, fn)) return false;\n }\n }\n return true;\n};\n/**\n * depth first traverse, from leaves to root, children in inverse order\n * if the fn returns false, terminate the traverse\n */\nvar traverseUp = function traverseUp(data, parent, index, fn) {\n if (data && data.children) {\n for (var i = data.children.length - 1; i >= 0; i--) {\n if (!traverseUp(data.children[i], data, i, fn)) return;\n }\n }\n if (fn(data, parent, index) === false) {\n return false;\n }\n return true;\n};\n/**\n * depth first traverse, from root to leaves, children in inverse order\n * if the fn returns false, terminate the traverse\n */\nvar traverseTree = exports.traverseTree = function traverseTree(data, fn) {\n if (typeof fn !== 'function') {\n return;\n }\n traverse(data, null, -1, fn);\n};\n/**\n * depth first traverse, from leaves to root, children in inverse order\n * if the fn returns false, terminate the traverse\n */\nvar traverseTreeUp = exports.traverseTreeUp = function traverseTreeUp(data, fn) {\n if (typeof fn !== 'function') {\n return;\n }\n traverseUp(data, null, -1, fn);\n};\n/**\n *\n * @param letter the letter\n * @param fontSize\n * @return the letter's width\n */\nvar getLetterWidth = exports.getLetterWidth = function getLetterWidth(letter, fontSize) {\n return fontSize * (_letterAspectRatio.default[letter] || 1);\n};\n/**\n *\n * @param text the text\n * @param fontSize\n * @return the text's size\n */\nvar getTextSize = exports.getTextSize = function getTextSize(text, fontSize) {\n var width = 0;\n var pattern = new RegExp(\"[\\u4E00-\\u9FA5]+\");\n text.split('').forEach(function (letter) {\n if (pattern.test(letter)) {\n // 中文字符\n width += fontSize;\n } else {\n width += getLetterWidth(letter, fontSize);\n }\n });\n return [width, fontSize];\n};\nvar truncateLabelByLength = exports.truncateLabelByLength = function truncateLabelByLength(text, length) {\n if (typeof length !== 'number' || length <= 0 || length >= text.length) {\n return text;\n }\n return text.substring(0, length) + '...';\n};\n/**\n * construct the trees from combos data\n * @param array the combos array\n * @param nodes the nodes array\n * @return the tree\n */\nvar plainCombosToTrees = exports.plainCombosToTrees = function plainCombosToTrees(array, nodes) {\n var result = [];\n var addedMap = {};\n var modelMap = {};\n array.forEach(function (d) {\n modelMap[d.id] = d;\n });\n array.forEach(function (d, i) {\n var cd = (0, _util.clone)(d);\n cd.itemType = 'combo';\n cd.children = undefined;\n if (cd.parentId === cd.id) {\n console.warn(\"The parentId for combo \".concat(cd.id, \" can not be the same as the combo's id\"));\n delete cd.parentId;\n } else if (cd.parentId && !modelMap[cd.parentId]) {\n console.warn(\"The parent combo for combo \".concat(cd.id, \" does not exist!\"));\n delete cd.parentId;\n }\n var mappedObj = addedMap[cd.id];\n if (mappedObj) {\n cd.children = mappedObj.children;\n addedMap[cd.id] = cd;\n mappedObj = cd;\n if (!mappedObj.parentId) {\n result.push(mappedObj);\n return;\n }\n var mappedParent = addedMap[mappedObj.parentId];\n if (mappedParent) {\n if (mappedParent.children) mappedParent.children.push(cd);else mappedParent.children = [cd];\n } else {\n var parent_1 = {\n id: mappedObj.parentId,\n children: [mappedObj]\n };\n addedMap[mappedObj.parentId] = parent_1;\n addedMap[cd.id] = cd;\n }\n return;\n }\n if ((0, _util.isString)(d.parentId)) {\n var parent_2 = addedMap[d.parentId];\n if (parent_2) {\n if (parent_2.children) parent_2.children.push(cd);else parent_2.children = [cd];\n addedMap[cd.id] = cd;\n } else {\n var pa = {\n id: d.parentId,\n children: [cd]\n };\n addedMap[pa.id] = pa;\n addedMap[cd.id] = cd;\n }\n } else {\n result.push(cd);\n addedMap[cd.id] = cd;\n }\n });\n // proccess the nodes\n var nodeMap = {};\n (nodes || []).forEach(function (node) {\n nodeMap[node.id] = node;\n var combo = addedMap[node.comboId];\n if (combo) {\n var cnode = {\n id: node.id,\n comboId: node.comboId\n };\n if (combo.children) combo.children.push(cnode);else combo.children = [cnode];\n cnode.itemType = 'node';\n addedMap[node.id] = cnode;\n }\n });\n // assign the depth for each element\n var maxDepth = 0;\n result.forEach(function (tree) {\n tree.depth = maxDepth + 10;\n traverseTree(tree, function (child) {\n var parent;\n var itemType = addedMap[child.id].itemType;\n if (itemType === 'node') {\n parent = addedMap[child.comboId];\n } else {\n parent = addedMap[child.parentId];\n }\n if (parent) {\n if (itemType === 'node') child.depth = maxDepth + 1;else child.depth = maxDepth + 10;\n } else {\n child.depth = maxDepth + 10;\n }\n if (maxDepth < child.depth) maxDepth = child.depth;\n var oriNodeModel = nodeMap[child.id];\n if (oriNodeModel) {\n oriNodeModel.depth = child.depth;\n }\n return true;\n });\n });\n return result;\n};\nvar reconstructTree = exports.reconstructTree = function reconstructTree(trees, subtreeId, newParentId) {\n var _a;\n var brothers = trees;\n var subtree;\n var comboChildsMap = {\n root: {\n children: trees\n }\n };\n var foundSubTree = false;\n var oldParentId = 'root';\n (trees || []).forEach(function (tree) {\n if (foundSubTree) return;\n if (tree.id === subtreeId) {\n subtree = tree;\n if (tree.itemType === 'combo') {\n subtree.parentId = newParentId;\n } else {\n subtree.comboId = newParentId;\n }\n foundSubTree = true;\n return;\n }\n traverseTree(tree, function (child) {\n var _a;\n comboChildsMap[child.id] = {\n children: (child === null || child === void 0 ? void 0 : child.children) || []\n };\n // store the old parent id to delete the subtree from the old parent's children in next recursion\n brothers = (_a = comboChildsMap[child.parentId || child.comboId || 'root']) === null || _a === void 0 ? void 0 : _a.children;\n if (child && (child.removed || subtreeId === child.id) && brothers) {\n oldParentId = child.parentId || child.comboId || 'root';\n subtree = child;\n // re-assign the parentId or comboId for the moved subtree\n if (child.itemType === 'combo') {\n subtree.parentId = newParentId;\n } else {\n subtree.comboId = newParentId;\n }\n foundSubTree = true;\n return false;\n }\n return true;\n });\n });\n brothers = (_a = comboChildsMap[oldParentId]) === null || _a === void 0 ? void 0 : _a.children;\n var index = brothers ? brothers.indexOf(subtree) : -1;\n if (index > -1) brothers.splice(index, 1);\n // 如果遍历完整棵树还没有找到,说明之前就不在树中\n if (!foundSubTree) {\n subtree = {\n id: subtreeId,\n itemType: 'node',\n comboId: newParentId\n };\n comboChildsMap[subtreeId] = {\n children: undefined\n };\n }\n // append to new parent\n if (subtreeId) {\n var found_1 = false;\n // newParentId is undefined means the subtree will have no parent\n if (newParentId) {\n var newParentDepth_1 = 0;\n (trees || []).forEach(function (tree) {\n if (found_1) return; // terminate\n traverseTree(tree, function (child) {\n // append subtree to the new parent ans assign the depth to the subtree\n if (newParentId === child.id) {\n found_1 = true;\n if (child.children) child.children.push(subtree);else child.children = [subtree];\n newParentDepth_1 = child.depth;\n if (subtree.itemType === 'node') subtree.depth = newParentDepth_1 + 2;else subtree.depth = newParentDepth_1 + 1;\n return false; // terminate\n }\n\n return true;\n });\n });\n } else if ((!newParentId || !found_1) && subtree.itemType !== 'node') {\n // if the newParentId is undefined or it is not found in the tree, add the subTree to the root\n trees.push(subtree);\n }\n // update the depth of the subtree and its children from the subtree\n var currentDepth_1 = subtree.depth;\n traverseTree(subtree, function (child) {\n if (child.itemType === 'node') currentDepth_1 += 2;else currentDepth_1 += 1;\n child.depth = currentDepth_1;\n return true;\n });\n }\n return trees;\n};\nvar getComboBBox = exports.getComboBBox = function getComboBBox(children, graph, combo) {\n var comboBBox = {\n minX: Infinity,\n minY: Infinity,\n maxX: -Infinity,\n maxY: -Infinity,\n x: undefined,\n y: undefined,\n width: undefined,\n height: undefined,\n centerX: undefined,\n centerY: undefined\n };\n if (!children || children.length === 0) {\n var comboModel = combo === null || combo === void 0 ? void 0 : combo.getModel();\n var _a = comboModel || {},\n x = _a.x,\n y = _a.y,\n fixSize = _a.fixSize,\n collapsed = _a.collapsed,\n fixCollapseSize = _a.fixCollapseSize;\n var useFixSize = collapsed ? fixCollapseSize : fixSize;\n var _b = (0, _util.isArray)(useFixSize) ? useFixSize : [useFixSize, useFixSize],\n width = _b[0],\n height = _b[1];\n var halfSize = [width / 2, height / 2];\n return {\n minX: x - halfSize[0],\n minY: y - halfSize[1],\n maxX: x + halfSize[0],\n maxY: y + halfSize[1],\n x: x,\n y: y,\n width: width,\n height: height\n };\n }\n children.forEach(function (child) {\n var childItem = graph.findById(child.id);\n if (!childItem || !childItem.isVisible()) return; // ignore hidden children\n childItem.set('bboxCanvasCache', undefined);\n var childBBox = childItem.getCanvasBBox();\n if (childBBox.x && comboBBox.minX > childBBox.minX) comboBBox.minX = childBBox.minX;\n if (childBBox.y && comboBBox.minY > childBBox.minY) comboBBox.minY = childBBox.minY;\n if (childBBox.x && comboBBox.maxX < childBBox.maxX) comboBBox.maxX = childBBox.maxX;\n if (childBBox.y && comboBBox.maxY < childBBox.maxY) comboBBox.maxY = childBBox.maxY;\n });\n comboBBox.x = (comboBBox.minX + comboBBox.maxX) / 2;\n comboBBox.y = (comboBBox.minY + comboBBox.maxY) / 2;\n comboBBox.width = comboBBox.maxX - comboBBox.minX;\n comboBBox.height = comboBBox.maxY - comboBBox.minY;\n comboBBox.centerX = (comboBBox.minX + comboBBox.maxX) / 2;\n comboBBox.centerY = (comboBBox.minY + comboBBox.maxY) / 2;\n // if it is a circle combo, diagnal length of the children's bbox should be the diameter of the combo's bbox\n if ((combo === null || combo === void 0 ? void 0 : combo.getKeyShape().get('type')) === 'circle') {\n comboBBox.width = Math.hypot(comboBBox.height, comboBBox.width);\n comboBBox.height = comboBBox.width;\n }\n Object.keys(comboBBox).forEach(function (key) {\n if (comboBBox[key] === Infinity || comboBBox[key] === -Infinity) {\n comboBBox[key] = undefined;\n }\n });\n return comboBBox;\n};\nvar shouldRefreshEdge = exports.shouldRefreshEdge = function shouldRefreshEdge(cfg) {\n var refreshEdge = (0, _util.isNumber)(cfg.x) || (0, _util.isNumber)(cfg.y) || cfg.type || cfg.anchorPoints || cfg.size;\n if (cfg.style) refreshEdge = refreshEdge || (0, _util.isNumber)(cfg.style.r) || (0, _util.isNumber)(cfg.style.width) || (0, _util.isNumber)(cfg.style.height) || (0, _util.isNumber)(cfg.style.rx) || (0, _util.isNumber)(cfg.style.ry);\n return refreshEdge;\n};\nvar cloneBesidesImg = exports.cloneBesidesImg = function cloneBesidesImg(obj) {\n var clonedObj = {};\n Object.keys(obj).forEach(function (key1) {\n var obj2 = obj[key1];\n if (key1 === 'img' && !(0, _util.isString)(obj2)) return;\n if ((0, _util.isObject)(obj2) && !(0, _util.isArray)(obj2)) {\n var clonedObj2_1 = {};\n Object.keys(obj2).forEach(function (key2) {\n var v = obj2[key2];\n if (key2 === 'img' && !(0, _util.isString)(v)) return;\n clonedObj2_1[key2] = (0, _util.clone)(v);\n });\n clonedObj[key1] = clonedObj2_1;\n } else {\n clonedObj[key1] = (0, _util.clone)(obj2);\n }\n });\n return clonedObj;\n};\nvar getAnimateCfgWithCallback = exports.getAnimateCfgWithCallback = function getAnimateCfgWithCallback(_a) {\n var animateCfg = _a.animateCfg,\n callback = _a.callback;\n var animateConfig;\n if (!animateCfg) {\n animateConfig = {\n duration: 500,\n callback: callback\n };\n } else {\n animateConfig = (0, _util.clone)(animateCfg);\n if (animateCfg.callback) {\n var animateCfgCallback_1 = animateCfg.callback;\n animateConfig.callback = function () {\n callback();\n animateCfgCallback_1();\n };\n } else {\n animateConfig.callback = callback;\n }\n }\n return animateConfig;\n};\n\n//# sourceURL=webpack:///./node_modules/@antv/g6-core/lib/util/graphic.js?");
/***/ }),
/***/ "./node_modules/@antv/g6-core/lib/util/letterAspectRatio.js":
/*!******************************************************************!*\
!*** ./node_modules/@antv/g6-core/lib/util/letterAspectRatio.js ***!
\******************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
eval("\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\nvar _default = exports.default = {\n ' ': 0.3329986572265625,\n a: 0.5589996337890625,\n A: 0.6569992065429687,\n b: 0.58599853515625,\n B: 0.6769989013671875,\n c: 0.5469985961914062,\n C: 0.7279998779296875,\n d: 0.58599853515625,\n D: 0.705999755859375,\n e: 0.554998779296875,\n E: 0.63699951171875,\n f: 0.37299957275390627,\n F: 0.5769989013671875,\n g: 0.5909988403320312,\n G: 0.7479995727539063,\n h: 0.555999755859375,\n H: 0.7199996948242188,\n i: 0.255999755859375,\n I: 0.23699951171875,\n j: 0.26699981689453123,\n J: 0.5169998168945312,\n k: 0.5289993286132812,\n K: 0.6899993896484375,\n l: 0.23499908447265624,\n L: 0.5879989624023437,\n m: 0.854998779296875,\n M: 0.8819992065429687,\n n: 0.5589996337890625,\n N: 0.7189987182617188,\n o: 0.58599853515625,\n O: 0.7669998168945312,\n p: 0.58599853515625,\n P: 0.6419998168945312,\n q: 0.58599853515625,\n Q: 0.7669998168945312,\n r: 0.3649993896484375,\n R: 0.6759994506835938,\n s: 0.504998779296875,\n S: 0.6319992065429687,\n t: 0.354998779296875,\n T: 0.6189987182617187,\n u: 0.5599990844726562,\n U: 0.7139999389648437,\n v: 0.48199920654296874,\n V: 0.6389999389648438,\n w: 0.754998779296875,\n W: 0.929998779296875,\n x: 0.5089996337890625,\n X: 0.63699951171875,\n y: 0.4959991455078125,\n Y: 0.66199951171875,\n z: 0.48699951171875,\n Z: 0.6239990234375,\n '0': 0.6,\n '1': 0.40099945068359377,\n '2': 0.6,\n '3': 0.6,\n '4': 0.6,\n '5': 0.6,\n '6': 0.6,\n '7': 0.5469985961914062,\n '8': 0.6,\n '9': 0.6,\n '[': 0.3329986572265625,\n ']': 0.3329986572265625,\n ',': 0.26399993896484375,\n '.': 0.26399993896484375,\n ';': 0.26399993896484375,\n ':': 0.26399993896484375,\n '{': 0.3329986572265625,\n '}': 0.3329986572265625,\n '\\\\': 0.5,\n '|': 0.19499969482421875,\n '=': 0.604998779296875,\n '+': 0.604998779296875,\n '-': 0.604998779296875,\n _: 0.5,\n '`': 0.3329986572265625,\n ' ~': 0.8329986572265625,\n '!': 0.3329986572265625,\n '@': 0.8579986572265625,\n '#': 0.6,\n $: 0.6,\n '%': 0.9699996948242188,\n '^': 0.517999267578125,\n '&': 0.7259994506835937,\n '*': 0.505999755859375,\n '(': 0.3329986572265625,\n ')': 0.3329986572265625,\n '<': 0.604998779296875,\n '>': 0.604998779296875,\n '/': 0.5,\n '?': 0.53699951171875\n};\n\n//# sourceURL=webpack:///./node_modules/@antv/g6-core/lib/util/letterAspectRatio.js?");
/***/ }),
/***/ "./node_modules/@antv/g6-core/lib/util/math.js":
/*!*****************************************************!*\
!*** ./node_modules/@antv/g6-core/lib/util/math.js ***!
\*****************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
eval("\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.translate = exports.squareDist = exports.scaleMatrix = exports.scale = exports.rotate = exports.pointRectSquareDist = exports.pointLineSquareDist = exports.pointLineDistance = exports.move = exports.lerpArray = exports.lerp = exports.itemIntersectByLine = exports.isPolygonsIntersect = exports.isPointsOverlap = exports.isPointInPolygon = exports.invertMatrix = exports.intersectBBox = exports.getRectIntersectByPoint = exports.getPointsCenter = exports.getLineIntersect = exports.getEllipseIntersectByPoint = exports.getDegree = exports.getCircleIntersectByPoint = exports.getCircleCenterByPoints = exports.getBBoxBoundLine = exports.getAdjMatrix = exports.fractionToLine = exports.floydWarshall = exports.distance = exports.compare = exports.applyMatrix = exports.Line = void 0;\nvar _matrixUtil = __webpack_require__(/*! @antv/matrix-util */ \"./node_modules/@antv/matrix-util/esm/index.js\");\nvar _util = __webpack_require__(/*! @antv/util */ \"./node_modules/@antv/util/esm/index.js\");\nvar transform = _matrixUtil.ext.transform;\n/**\n * 对比对象,用于对象数组排序\n * @param {string} attributeName 排序依据的字段名称\n * @param {number} min 最小值\n * @param {number} max 最大值\n * @return {boolean} bool 布尔\n */\nvar compare = exports.compare = function compare(attributeName) {\n return function (m, n) {\n return m[attributeName] - n[attributeName];\n };\n};\n/**\n * 是否在区间内\n * @param {number} value 值\n * @param {number} min 最小值\n * @param {number} max 最大值\n * @return {boolean} bool 布尔\n */\nvar isBetween = function isBetween(value, min, max) {\n return value >= min && value <= max;\n};\n/**\n * 获取两条线段的交点\n * @param {Point} p0 第一条线段起点\n * @param {Point} p1 第一条线段终点\n * @param {Point} p2 第二条线段起点\n * @param {Point} p3 第二条线段终点\n * @return {Point} 交点\n */\nvar getLineIntersect = exports.getLineIntersect = function getLineIntersect(p0, p1, p2, p3) {\n var tolerance = 0.0001;\n var E = {\n x: p2.x - p0.x,\n y: p2.y - p0.y\n };\n var D0 = {\n x: p1.x - p0.x,\n y: p1.y - p0.y\n };\n var D1 = {\n x: p3.x - p2.x,\n y: p3.y - p2.y\n };\n var kross = D0.x * D1.y - D0.y * D1.x;\n var sqrKross = kross * kross;\n var invertKross = 1 / kross;\n var sqrLen0 = D0.x * D0.x + D0.y * D0.y;\n var sqrLen1 = D1.x * D1.x + D1.y * D1.y;\n if (sqrKross > tolerance * sqrLen0 * sqrLen1) {\n var s = (E.x * D1.y - E.y * D1.x) * invertKross;\n var t = (E.x * D0.y - E.y * D0.x) * invertKross;\n if (!isBetween(s, 0, 1) || !isBetween(t, 0, 1)) return null;\n return {\n x: p0.x + s * D0.x,\n y: p0.y + s * D0.y\n };\n }\n return null;\n};\n/**\n * point and rectangular intersection point\n * @param {IRect} rect rect\n * @param {Point} point point\n * @return {PointPoint} rst;\n */\nvar getRectIntersectByPoint = exports.getRectIntersectByPoint = function getRectIntersectByPoint(rect, point) {\n var x = rect.x,\n y = rect.y,\n width = rect.width,\n height = rect.height;\n var cx = x + width / 2;\n var cy = y + height / 2;\n var points = [];\n var center = {\n x: cx,\n y: cy\n };\n points.push({\n x: x,\n y: y\n });\n points.push({\n x: x + width,\n y: y\n });\n points.push({\n x: x + width,\n y: y + height\n });\n points.push({\n x: x,\n y: y + height\n });\n points.push({\n x: x,\n y: y\n });\n var rst = null;\n for (var i = 1; i < points.length; i++) {\n rst = getLineIntersect(points[i - 1], points[i], center, point);\n if (rst) {\n break;\n }\n }\n return rst;\n};\n/**\n * get point and circle inIntersect\n * @param {ICircle} circle 圆点,x,y,r\n * @param {Point} point 点 x,y\n * @return {Point} applied point\n */\nvar getCircleIntersectByPoint = exports.getCircleIntersectByPoint = function getCircleIntersectByPoint(circle, point) {\n var cx = circle.x,\n cy = circle.y,\n r = circle.r;\n var x = point.x,\n y = point.y;\n var dx = x - cx;\n var dy = y - cy;\n if (dx * dx + dy * dy < r * r) {\n return null;\n }\n var angle = Math.atan(dy / dx);\n return {\n x: cx + Math.abs(r * Math.cos(angle)) * Math.sign(dx),\n y: cy + Math.abs(r * Math.sin(angle)) * Math.sign(dy)\n };\n};\n/**\n * get point and ellipse inIntersect\n * @param {Object} ellipse 椭圆 x,y,rx,ry\n * @param {Object} point 点 x,y\n * @return {object} applied point\n */\nvar getEllipseIntersectByPoint = exports.getEllipseIntersectByPoint = function getEllipseIntersectByPoint(ellipse, point) {\n var a = ellipse.rx;\n var b = ellipse.ry;\n var cx = ellipse.x;\n var cy = ellipse.y;\n var dx = point.x - cx;\n var dy = point.y - cy;\n // 直接通过 x,y 求夹角,求出来的范围是 -PI, PI\n var angle = Math.atan2(dy / b, dx / a);\n if (angle < 0) {\n angle += 2 * Math.PI; // 转换到 0,2PI\n }\n\n return {\n x: cx + a * Math.cos(angle),\n y: cy + b * Math.sin(angle)\n };\n};\n/**\n * coordinate matrix transformation\n * @param {number} point coordinate\n * @param {Matrix} matrix matrix\n * @param {number} tag could be 0 or 1\n * @return {Point} transformed point\n */\nvar applyMatrix = exports.applyMatrix = function applyMatrix(point, matrix, tag) {\n if (tag === void 0) {\n tag = 1;\n }\n var vector = [point.x, point.y, tag];\n if (!matrix || isNaN(matrix[0])) {\n matrix = [1, 0, 0, 0, 1, 0, 0, 0, 1];\n }\n _matrixUtil.vec3.transformMat3(vector, vector, matrix);\n return {\n x: vector[0],\n y: vector[1]\n };\n};\n/**\n * coordinate matrix invert transformation\n * @param {number} point coordinate\n * @param {number} matrix matrix\n * @param {number} tag could be 0 or 1\n * @return {object} transformed point\n */\nvar invertMatrix = exports.invertMatrix = function invertMatrix(point, matrix, tag) {\n if (tag === void 0) {\n tag = 1;\n }\n if (!matrix || isNaN(matrix[0])) {\n matrix = [1, 0, 0, 0, 1, 0, 0, 0, 1];\n }\n var inversedMatrix = _matrixUtil.mat3.invert([1, 0, 0, 0, 1, 0, 0, 0, 1], matrix);\n if (!inversedMatrix) {\n inversedMatrix = [1, 0, 0, 0, 1, 0, 0, 0, 1];\n }\n var vector = [point.x, point.y, tag];\n _matrixUtil.vec3.transformMat3(vector, vector, inversedMatrix);\n return {\n x: vector[0],\n y: vector[1]\n };\n};\n/**\n *\n * @param p1 First coordinate\n * @param p2 second coordinate\n * @param p3 three coordinate\n */\nvar getCircleCenterByPoints = exports.getCircleCenterByPoints = function getCircleCenterByPoints(p1, p2, p3) {\n var a = p1.x - p2.x;\n var b = p1.y - p2.y;\n var c = p1.x - p3.x;\n var d = p1.y - p3.y;\n var e = (p1.x * p1.x - p2.x * p2.x - p2.y * p2.y + p1.y * p1.y) / 2;\n var f = (p1.x * p1.x - p3.x * p3.x - p3.y * p3.y + p1.y * p1.y) / 2;\n var denominator = b * c - a * d;\n return {\n x: -(d * e - b * f) / denominator,\n y: -(a * f - c * e) / denominator\n };\n};\n/**\n * get distance by two points\n * @param p1 first point\n * @param p2 second point\n */\nvar distance = exports.distance = function distance(p1, p2) {\n var vx = p1.x - p2.x;\n var vy = p1.y - p2.y;\n return Math.sqrt(vx * vx + vy * vy);\n};\n/**\n * scale matrix\n * @param matrix [ [], [], [] ]\n * @param ratio\n */\nvar scaleMatrix = exports.scaleMatrix = function scaleMatrix(matrix, ratio) {\n var result = [];\n matrix.forEach(function (row) {\n var newRow = [];\n row.forEach(function (v) {\n newRow.push(v * ratio);\n });\n result.push(newRow);\n });\n return result;\n};\n/**\n * Floyd Warshall algorithm for shortest path distances matrix\n * @param {array} adjMatrix adjacency matrix\n * @return {array} distances shortest path distances matrix\n */\nvar floydWarshall = exports.floydWarshall = function floydWarshall(adjMatrix) {\n // initialize\n var dist = [];\n var size = adjMatrix.length;\n for (var i = 0; i < size; i += 1) {\n dist[i] = [];\n for (var j = 0; j < size; j += 1) {\n if (i === j) {\n dist[i][j] = 0;\n } else if (adjMatrix[i][j] === 0 || !adjMatrix[i][j]) {\n dist[i][j] = Infinity;\n } else {\n dist[i][j] = adjMatrix[i][j];\n }\n }\n }\n // floyd\n for (var k = 0; k < size; k += 1) {\n for (var i = 0; i < size; i += 1) {\n for (var j = 0; j < size; j += 1) {\n if (dist[i][j] > dist[i][k] + dist[k][j]) {\n dist[i][j] = dist[i][k] + dist[k][j];\n }\n }\n }\n }\n return dist;\n};\n/**\n * get adjacency matrix\n * @param data graph data\n * @param directed whether it's a directed graph\n */\nvar getAdjMatrix = exports.getAdjMatrix = function getAdjMatrix(data, directed) {\n var nodes = data.nodes,\n edges = data.edges;\n var matrix = [];\n // map node with index in data.nodes\n var nodeMap = {};\n if (!nodes) {\n throw new Error('invalid nodes data!');\n }\n if (nodes) {\n nodes.forEach(function (node, i) {\n nodeMap[node.id] = i;\n var row = [];\n matrix.push(row);\n });\n }\n if (edges) {\n edges.forEach(function (e) {\n var source = e.source,\n target = e.target;\n var sIndex = nodeMap[source];\n var tIndex = nodeMap[target];\n matrix[sIndex][tIndex] = 1;\n if (!directed) {\n matrix[tIndex][sIndex] = 1;\n }\n });\n }\n return matrix;\n};\n/**\n * 平移group\n * @param group Group 实例\n * @param vec 移动向量\n */\nvar translate = exports.translate = function translate(group, vec) {\n group.translate(vec.x, vec.y);\n};\n/**\n * 移动到指定坐标点\n * @param group Group 实例\n * @param point 移动到的坐标点\n */\nvar move = exports.move = function move(group, point, animate, animateCfg) {\n if (animateCfg === void 0) {\n animateCfg = {\n duration: 500\n };\n }\n var matrix = group.getMatrix();\n if (!matrix) {\n matrix = [1, 0, 0, 0, 1, 0, 0, 0, 1];\n }\n var bbox = group.getCanvasBBox();\n var vx = point.x - bbox.minX;\n var vy = point.y - bbox.minY;\n if (animate) {\n var dx_1 = vx * matrix[0];\n var dy_1 = vy * matrix[4];\n var lastX_1 = 0;\n var lastY_1 = 0;\n var newX_1 = 0;\n var newY_1 = 0;\n group.animate(function (ratio) {\n newX_1 = dx_1 * ratio;\n newY_1 = dy_1 * ratio;\n matrix = transform(matrix, [['t', newX_1 - lastX_1, newY_1 - lastY_1]]);\n lastX_1 = newX_1;\n lastY_1 = newY_1;\n return {\n matrix: matrix\n };\n }, animateCfg);\n } else {\n var movedMatrix = transform(matrix, [['t', vx, vy]]);\n group.setMatrix(movedMatrix);\n }\n};\n/**\n * 缩放 group\n * @param group Group 实例\n * @param point 在x 和 y 方向上的缩放比例\n */\nvar scale = exports.scale = function scale(group, ratio) {\n var matrix = group.getMatrix();\n if (!matrix) {\n matrix = [1, 0, 0, 0, 1, 0, 0, 0, 1];\n }\n var scaleXY = ratio;\n if (!(0, _util.isArray)(ratio)) {\n scaleXY = [ratio, ratio];\n }\n if ((0, _util.isArray)(ratio) && ratio.length === 1) {\n scaleXY = [ratio[0], ratio[0]];\n }\n matrix = transform(matrix, [['s', scaleXY[0], scaleXY[1]]]);\n group.setMatrix(matrix);\n};\n/**\n *\n * @param group Group 实例\n * @param ratio 选择角度\n */\nvar rotate = exports.rotate = function rotate(group, angle) {\n var matrix = group.getMatrix();\n if (!matrix) {\n matrix = [1, 0, 0, 0, 1, 0, 0, 0, 1];\n }\n matrix = transform(matrix, [['r', angle]]);\n group.setMatrix(matrix);\n};\nvar getDegree = exports.getDegree = function getDegree(n, nodeIdxMap, edges) {\n var degrees = [];\n for (var i = 0; i < n; i++) {\n degrees[i] = 0;\n }\n edges.forEach(function (e) {\n if (e.source) {\n degrees[nodeIdxMap[e.source]] += 1;\n }\n if (e.target) {\n degrees[nodeIdxMap[e.target]] += 1;\n }\n });\n return degrees;\n};\n// 判断点Q是否在p1和p2的线段上\nfunction onSegment(p1, p2, q) {\n if ((q[0] - p1[0]) * (p2[1] - p1[1]) === (p2[0] - p1[0]) * (q[1] - p1[1]) && Math.min(p1[0], p2[0]) <= q[0] && q[0] <= Math.max(p1[0], p2[0]) && Math.min(p1[1], p2[1]) <= q[1] && q[1] <= Math.max(p1[1], p2[1])) {\n return true;\n }\n return false;\n}\n/**\n * 判断点P在多边形内-射线法. Borrow from https://github.com/antvis/util/blob/master/packages/path-util/src/point-in-polygon.ts\n * @param points\n * @param x\n * @param y\n */\nvar isPointInPolygon = exports.isPointInPolygon = function isPointInPolygon(points, x, y) {\n var isHit = false;\n var n = points.length;\n // 判断两个double在eps精度下的大小关系\n var tolerance = 1e-6;\n function dcmp(xValue) {\n if (Math.abs(xValue) < tolerance) {\n return 0;\n }\n return xValue < 0 ? -1 : 1;\n }\n if (n <= 2) {\n // svg 中点小于 3 个时,不显示,也无法被拾取\n return false;\n }\n for (var i = 0; i < n; i++) {\n var p1 = points[i];\n var p2 = points[(i + 1) % n];\n if (onSegment(p1, p2, [x, y])) {\n // 点在多边形一条边上\n return true;\n }\n // 前一个判断min(p1[1],p2[1]) 0 !== dcmp(p2[1] - y) > 0 && dcmp(x - (y - p1[1]) * (p1[0] - p2[0]) / (p1[1] - p2[1]) - p1[0]) < 0) {\n isHit = !isHit;\n }\n }\n return isHit;\n};\n// 判断两个BBox是否相交\nvar intersectBBox = exports.intersectBBox = function intersectBBox(box1, box2) {\n return !(box2.minX > box1.maxX || box2.maxX < box1.minX || box2.minY > box1.maxY || box2.maxY < box1.minY);\n};\nvar lineIntersectPolygon = function lineIntersectPolygon(lines, line) {\n var isIntersect = false;\n (0, _util.each)(lines, function (l) {\n if (getLineIntersect(l.from, l.to, line.from, line.to)) {\n isIntersect = true;\n return false;\n }\n });\n return isIntersect;\n};\n/**\n * 判断两个polygon是否相交。\n * borrow from @antv/path-util\n * @param points1 polygon1的顶点数组\n * @param points2 polygon2的顶点数组\n */\nvar isPolygonsIntersect = exports.isPolygonsIntersect = function isPolygonsIntersect(points1, points2) {\n var getBBox = function getBBox(points) {\n var xArr = points.map(function (p) {\n return p[0];\n });\n var yArr = points.map(function (p) {\n return p[1];\n });\n return {\n minX: Math.min.apply(null, xArr),\n maxX: Math.max.apply(null, xArr),\n minY: Math.min.apply(null, yArr),\n maxY: Math.max.apply(null, yArr)\n };\n };\n var parseToLines = function parseToLines(points) {\n var lines = [];\n var count = points.length;\n for (var i = 0; i < count - 1; i++) {\n var point = points[i];\n var next = points[i + 1];\n lines.push({\n from: {\n x: point[0],\n y: point[1]\n },\n to: {\n x: next[0],\n y: next[1]\n }\n });\n }\n if (lines.length > 1) {\n var first = points[0];\n var last = points[count - 1];\n lines.push({\n from: {\n x: last[0],\n y: last[1]\n },\n to: {\n x: first[0],\n y: first[1]\n }\n });\n }\n return lines;\n };\n // 空数组,或者一个点返回 false\n if (points1.length < 2 || points2.length < 2) {\n return false;\n }\n var bbox1 = getBBox(points1);\n var bbox2 = getBBox(points2);\n // 判定包围盒是否相交,比判定点是否在多边形内要快的多,可以筛选掉大多数情况\n if (!intersectBBox(bbox1, bbox2)) {\n return false;\n }\n var isIn = false;\n // 判定点是否在多边形内部,一旦有一个点在另一个多边形内,则返回\n (0, _util.each)(points2, function (point) {\n if (isPointInPolygon(points1, point[0], point[1])) {\n isIn = true;\n return false;\n }\n });\n if (isIn) {\n return true;\n }\n (0, _util.each)(points1, function (point) {\n if (isPointInPolygon(points2, point[0], point[1])) {\n isIn = true;\n return false;\n }\n });\n if (isIn) {\n return true;\n }\n var lines1 = parseToLines(points1);\n var lines2 = parseToLines(points2);\n var isIntersect = false;\n (0, _util.each)(lines2, function (line) {\n if (lineIntersectPolygon(lines1, line)) {\n isIntersect = true;\n return false;\n }\n });\n return isIntersect;\n};\nvar Line = exports.Line = /** @class */function () {\n function Line(x1, y1, x2, y2) {\n this.x1 = x1;\n this.y1 = y1;\n this.x2 = x2;\n this.y2 = y2;\n }\n Line.prototype.getBBox = function () {\n var minX = Math.min(this.x1, this.x2);\n var minY = Math.min(this.y1, this.y2);\n var maxX = Math.max(this.x1, this.x2);\n var maxY = Math.max(this.y1, this.y2);\n var res = {\n x: minX,\n y: minY,\n minX: minX,\n minY: minY,\n maxX: maxX,\n maxY: maxY,\n width: maxX - minX,\n height: maxY - minY\n };\n return res;\n };\n return Line;\n}();\nvar getBBoxBoundLine = exports.getBBoxBoundLine = function getBBoxBoundLine(bbox, direction) {\n var bounds = {\n top: [bbox.minX, bbox.minY, bbox.maxX, bbox.minY],\n left: [bbox.minX, bbox.minY, bbox.minX, bbox.maxY],\n bottom: [bbox.minX, bbox.maxY, bbox.maxX, bbox.maxY],\n right: [bbox.maxX, bbox.minY, bbox.maxX, bbox.maxY]\n };\n return bounds[direction];\n};\n/**\n * 计算两条线段相交时,相交点对第一条线段上的分割比例\n */\nvar fractionAlongLineA = function fractionAlongLineA(la, lb) {\n var uaT = (lb.x2 - lb.x1) * (la.y1 - lb.y1) - (lb.y2 - lb.y1) * (la.x1 - lb.x1);\n var ubT = (la.x2 - la.x1) * (la.y1 - lb.y1) - (la.y2 - la.y1) * (la.x1 - lb.x1);\n var uB = (lb.y2 - lb.y1) * (la.x2 - la.x1) - (lb.x2 - lb.x1) * (la.y2 - la.y1);\n if (uB) {\n var ua = uaT / uB;\n var ub = ubT / uB;\n if (ua >= 0 && ua <= 1 && ub >= 0 && ub <= 1) {\n return ua;\n }\n }\n return Number.POSITIVE_INFINITY;\n};\nvar itemIntersectByLine = exports.itemIntersectByLine = function itemIntersectByLine(item, line) {\n var directions = ['top', 'left', 'bottom', 'right'];\n var bbox = item.getBBox();\n var countIntersections = 0;\n var intersections = [];\n for (var i = 0; i < 4; i++) {\n var _a = getBBoxBoundLine(bbox, directions[i]),\n x1 = _a[0],\n y1 = _a[1],\n x2 = _a[2],\n y2 = _a[3];\n intersections[i] = getLineIntersect({\n x: line.x1,\n y: line.y1\n }, {\n x: line.x2,\n y: line.y2\n }, {\n x: x1,\n y: y1\n }, {\n x: x2,\n y: y2\n });\n if (intersections[i]) {\n countIntersections += 1;\n }\n }\n return [intersections, countIntersections];\n};\nvar fractionToLine = exports.fractionToLine = function fractionToLine(item, line) {\n var directions = ['top', 'left', 'bottom', 'right'];\n var bbox = item.getBBox();\n var minDistance = Number.POSITIVE_INFINITY;\n var countIntersections = 0;\n for (var i = 0; i < 4; i++) {\n var _a = getBBoxBoundLine(bbox, directions[i]),\n x1 = _a[0],\n y1 = _a[1],\n x2 = _a[2],\n y2 = _a[3];\n var testDistance = fractionAlongLineA(line, new Line(x1, y1, x2, y2));\n testDistance = Math.abs(testDistance - 0.5);\n if (testDistance >= 0 && testDistance <= 1) {\n countIntersections += 1;\n minDistance = testDistance < minDistance ? testDistance : minDistance;\n }\n }\n if (countIntersections === 0) return -1;\n return minDistance;\n};\nvar getPointsCenter = exports.getPointsCenter = function getPointsCenter(points) {\n var centerX = 0;\n var centerY = 0;\n if (points.length > 0) {\n for (var _i = 0, points_1 = points; _i < points_1.length; _i++) {\n var point = points_1[_i];\n centerX += point.x;\n centerY += point.y;\n }\n centerX /= points.length;\n centerY /= points.length;\n }\n return {\n x: centerX,\n y: centerY\n };\n};\nvar squareDist = exports.squareDist = function squareDist(a, b) {\n return Math.pow(a.x - b.x, 2) + Math.pow(a.y - b.y, 2);\n};\nvar pointLineSquareDist = exports.pointLineSquareDist = function pointLineSquareDist(point, line) {\n var x1 = line.x1;\n var y1 = line.y1;\n var x2 = line.x2 - x1;\n var y2 = line.y2 - y1;\n var px = point.x - x1;\n var py = point.y - y1;\n var dotprod = px * x2 + py * y2;\n var projlenSq;\n if (dotprod <= 0) {\n projlenSq = 0;\n } else {\n px = x2 - px;\n py = y2 - py;\n dotprod = px * x2 + py * y2;\n if (dotprod <= 0) {\n projlenSq = 0;\n } else {\n projlenSq = dotprod * dotprod / (x2 * x2 + y2 * y2);\n }\n }\n var lenSq = px * px + py * py - projlenSq;\n if (lenSq < 0) {\n lenSq = 0;\n }\n return lenSq;\n};\nvar isPointsOverlap = exports.isPointsOverlap = function isPointsOverlap(p1, p2, e) {\n if (e === void 0) {\n e = 1e-3;\n }\n return Math.pow(p1.x - p2.x, 2) + Math.pow(p1.y - p2.y, 2) < Math.pow(e, 2);\n};\n/**\n * 点到矩形的距离的平方:矩形内部点视作距离为0,外部的点若投影落在矩形边上则为点到矩形边的最近的垂直距离,否则为点到矩形顶点的距离,\n * @param point IPoint\n * @param rect IRect\n */\nvar pointRectSquareDist = exports.pointRectSquareDist = function pointRectSquareDist(point, rect) {\n var isLeft = point.x < rect.x;\n var isRight = point.x > rect.x + rect.width;\n var isTop = point.y > rect.y + rect.height;\n var isBottom = point.y < rect.y;\n var isPointOutside = isLeft || isRight || isTop || isBottom;\n if (!isPointOutside) {\n return 0;\n }\n if (isTop && !isLeft && !isRight) {\n return Math.pow(rect.y + rect.height - point.y, 2);\n }\n if (isBottom && !isLeft && !isRight) {\n return Math.pow(point.y - rect.y, 2);\n }\n if (isLeft && !isTop && !isBottom) {\n return Math.pow(rect.x - point.x, 2);\n }\n if (isRight && !isTop && !isBottom) {\n return Math.pow(rect.x + rect.width - point.x, 2);\n }\n var dx = Math.min(Math.abs(rect.x - point.x), Math.abs(rect.x + rect.width - point.x));\n var dy = Math.min(Math.abs(rect.y - point.y), Math.abs(rect.y + rect.height - point.y));\n return dx * dx + dy * dy;\n};\n/**\n * point to line distance\n * @param {array} line 线的四个顶点 [x1, y1, x2, y2]\n * @param {object} point 坐标点 {x, y}\n * @return {Number|NaN} distance\n */\nvar pointLineDistance = exports.pointLineDistance = function pointLineDistance(line, point) {\n var x1 = line[0],\n y1 = line[1],\n x2 = line[2],\n y2 = line[3];\n var x = point.x,\n y = point.y;\n var d = [x2 - x1, y2 - y1];\n if (_matrixUtil.vec2.exactEquals(d, [0, 0])) {\n return NaN;\n }\n var u = [-d[1], d[0]];\n // @ts-ignore\n _matrixUtil.vec2.normalize(u, u);\n var a = [x - x1, y - y1];\n // @ts-ignore\n return Math.abs(_matrixUtil.vec2.dot(a, u));\n};\n/**\n * Linearly interpolate between start and end, where alpha is the percent distance along the line.\n * alpha = 0 will be start, and alpha = 1 will be end.\n * @param {number} start\n * @param {number} end\n * @param {number} alpha interpolation factor, typically in the closed interval [0, 1]\n * @returns {number}\n */\nvar lerp = exports.lerp = function lerp(start, end, alpha) {\n return start + (end - start) * alpha;\n};\n/**\n * Linearly interpolate between start and end arrays, where alpha is the percent distance along the line.\n * alpha = 0 will be start, and alpha = 1 will be end.\n * @param {number[]} start\n * @param {number[]} end\n * @param {number} alpha interpolation factor, typically in the closed interval [0, 1]\n * @returns {number[]}\n */\nvar lerpArray = exports.lerpArray = function lerpArray(start, end, alpha) {\n var len = Math.min(start.length, end.length);\n var out = new Array(len);\n for (var i = 0; i < len; i++) {\n out[i] = lerp(start[i], end[i], alpha);\n }\n return out;\n};\n\n//# sourceURL=webpack:///./node_modules/@antv/g6-core/lib/util/math.js?");
/***/ }),
/***/ "./node_modules/@antv/g6-element/es/edges/index.js":
/*!*********************************************************!*\
!*** ./node_modules/@antv/g6-element/es/edges/index.js ***!
\*********************************************************/
/*! no exports provided */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _polyline__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./polyline */ \"./node_modules/@antv/g6-element/es/edges/polyline.js\");\n\n\n//# sourceURL=webpack:///./node_modules/@antv/g6-element/es/edges/index.js?");
/***/ }),
/***/ "./node_modules/@antv/g6-element/es/edges/polyline-util.js":
/*!*****************************************************************!*\
!*** ./node_modules/@antv/g6-element/es/edges/polyline-util.js ***!
\*****************************************************************/
/*! exports provided: getBBoxFromPoint, getBBoxFromPoints, isBBoxesOverlapping, filterConnectPoints, simplifyPolyline, getSimplePolyline, getExpandedBBox, isHorizontalPort, getExpandedBBoxPoint, mergeBBox, getPointsFromBBox, isPointOutsideBBox, getBBoxXCrossPoints, getBBoxYCrossPoints, getBBoxCrossPointsByPoint, distance, _costByPoints, heuristicCostEstimate, reconstructPath, removeFrom, isSegmentsIntersected, isSegmentCrossingBBox, getNeighborPoints, pathFinder, isBending, getBorderRadiusPoints, getPathWithBorderRadiusByPolyline, getPolylinePoints, removeRedundantPoint, SortedArray */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"getBBoxFromPoint\", function() { return getBBoxFromPoint; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"getBBoxFromPoints\", function() { return getBBoxFromPoints; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"isBBoxesOverlapping\", function() { return isBBoxesOverlapping; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"filterConnectPoints\", function() { return filterConnectPoints; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"simplifyPolyline\", function() { return simplifyPolyline; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"getSimplePolyline\", function() { return getSimplePolyline; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"getExpandedBBox\", function() { return getExpandedBBox; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"isHorizontalPort\", function() { return isHorizontalPort; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"getExpandedBBoxPoint\", function() { return getExpandedBBoxPoint; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"mergeBBox\", function() { return mergeBBox; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"getPointsFromBBox\", function() { return getPointsFromBBox; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"isPointOutsideBBox\", function() { return isPointOutsideBBox; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"getBBoxXCrossPoints\", function() { return getBBoxXCrossPoints; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"getBBoxYCrossPoints\", function() { return getBBoxYCrossPoints; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"getBBoxCrossPointsByPoint\", function() { return getBBoxCrossPointsByPoint; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"distance\", function() { return distance; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"_costByPoints\", function() { return _costByPoints; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"heuristicCostEstimate\", function() { return heuristicCostEstimate; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"reconstructPath\", function() { return reconstructPath; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"removeFrom\", function() { return removeFrom; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"isSegmentsIntersected\", function() { return isSegmentsIntersected; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"isSegmentCrossingBBox\", function() { return isSegmentCrossingBBox; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"getNeighborPoints\", function() { return getNeighborPoints; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"pathFinder\", function() { return pathFinder; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"isBending\", function() { return isBending; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"getBorderRadiusPoints\", function() { return getBorderRadiusPoints; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"getPathWithBorderRadiusByPolyline\", function() { return getPathWithBorderRadiusByPolyline; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"getPolylinePoints\", function() { return getPolylinePoints; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"removeRedundantPoint\", function() { return removeRedundantPoint; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"SortedArray\", function() { return SortedArray; });\nvar getBBoxFromPoint = function getBBoxFromPoint(point) {\n var x = point.x,\n y = point.y;\n return {\n x: x,\n y: y,\n centerX: x,\n centerY: y,\n minX: x,\n minY: y,\n maxX: x,\n maxY: y,\n height: 0,\n width: 0\n };\n};\nvar getBBoxFromPoints = function getBBoxFromPoints(points) {\n if (points === void 0) {\n points = [];\n }\n var xs = [];\n var ys = [];\n points.forEach(function (p) {\n xs.push(p.x);\n ys.push(p.y);\n });\n var minX = Math.min.apply(Math, xs);\n var maxX = Math.max.apply(Math, xs);\n var minY = Math.min.apply(Math, ys);\n var maxY = Math.max.apply(Math, ys);\n return {\n centerX: (minX + maxX) / 2,\n centerY: (minY + maxY) / 2,\n maxX: maxX,\n maxY: maxY,\n minX: minX,\n minY: minY,\n height: maxY - minY,\n width: maxX - minX\n };\n};\nvar isBBoxesOverlapping = function isBBoxesOverlapping(b1, b2) {\n return Math.abs(b1.centerX - b2.centerX) * 2 < b1.width + b2.width && Math.abs(b1.centerY - b2.centerY) * 2 < b1.height + b2.height;\n};\nvar filterConnectPoints = function filterConnectPoints(points) {\n // pre-process: remove duplicated points\n var result = [];\n var map = {};\n var pointsLength = points.length;\n for (var i = pointsLength - 1; i >= 0; i--) {\n var p = points[i];\n p.id = \"\".concat(p.x, \"|||\").concat(p.y);\n if (!map[p.id]) {\n map[p.id] = p;\n result.push(p);\n }\n }\n return result;\n};\nvar simplifyPolyline = function simplifyPolyline(points) {\n return filterConnectPoints(points);\n};\nvar getSimplePolyline = function getSimplePolyline(sPoint, tPoint) {\n return [sPoint, {\n x: sPoint.x,\n y: tPoint.y\n }, tPoint];\n};\nvar getExpandedBBox = function getExpandedBBox(bbox, offset) {\n if (bbox.width || bbox.height) {\n return {\n centerX: bbox.centerX,\n centerY: bbox.centerY,\n minX: bbox.minX - offset,\n minY: bbox.minY - offset,\n maxX: bbox.maxX + offset,\n maxY: bbox.maxY + offset,\n height: bbox.height + 2 * offset,\n width: bbox.width + 2 * offset\n };\n }\n // when it is a point\n return bbox;\n};\nvar isHorizontalPort = function isHorizontalPort(port, bbox) {\n var dx = Math.abs(port.x - bbox.centerX);\n var dy = Math.abs(port.y - bbox.centerY);\n if (dx === 0 && dy === 0) return 0;\n return dx / bbox.width > dy / bbox.height;\n};\nvar getExpandedBBoxPoint = function getExpandedBBoxPoint(bbox,\n// 将原来节点 bbox 扩展了 offset 后的 bbox,且被 gridSize 格式化\npoint,\n// 被 gridSize 格式化后的位置(anchorPoint)\nanotherPoint) {\n var isHorizontal = isHorizontalPort(point, bbox);\n if (isHorizontal === 0) {\n // 说明锚点是节点中心,linkCenter: true。需要根据两个节点的相对关系决定方向\n var x = bbox.centerX;\n var y = bbox.centerY;\n if (anotherPoint.y < point.y) {\n // 另一端在左上/右上方时,总是从上方走\n y = bbox.minY;\n } else if (anotherPoint.x > point.x) {\n // 另一端在右下方,往右边走\n x = bbox.maxX;\n } else if (anotherPoint.x < point.x) {\n // 另一端在左下方,往左边走\n x = bbox.minX;\n } else if (anotherPoint.x === point.x) {\n // 另一段在正下方,往下走\n y = bbox.maxY;\n }\n return {\n x: x,\n y: y\n };\n }\n if (isHorizontal) {\n return {\n x: point.x > bbox.centerX ? bbox.maxX : bbox.minX,\n y: point.y\n };\n }\n return {\n x: point.x,\n y: point.y > bbox.centerY ? bbox.maxY : bbox.minY\n };\n};\n/**\n *\n * @param b1\n * @param b2\n */\nvar mergeBBox = function mergeBBox(b1, b2) {\n var minX = Math.min(b1.minX, b2.minX);\n var minY = Math.min(b1.minY, b2.minY);\n var maxX = Math.max(b1.maxX, b2.maxX);\n var maxY = Math.max(b1.maxY, b2.maxY);\n return {\n centerX: (minX + maxX) / 2,\n centerY: (minY + maxY) / 2,\n minX: minX,\n minY: minY,\n maxX: maxX,\n maxY: maxY,\n height: maxY - minY,\n width: maxX - minX\n };\n};\nvar getPointsFromBBox = function getPointsFromBBox(bbox) {\n // anticlockwise\n return [{\n x: bbox.minX,\n y: bbox.minY\n }, {\n x: bbox.maxX,\n y: bbox.minY\n }, {\n x: bbox.maxX,\n y: bbox.maxY\n }, {\n x: bbox.minX,\n y: bbox.maxY\n }];\n};\nvar isPointOutsideBBox = function isPointOutsideBBox(point, bbox) {\n var x = point.x,\n y = point.y;\n return x < bbox.minX || x > bbox.maxX || y < bbox.minY || y > bbox.maxY;\n};\nvar getBBoxXCrossPoints = function getBBoxXCrossPoints(bbox, x) {\n if (x < bbox.minX || x > bbox.maxX) {\n return [];\n }\n return [{\n x: x,\n y: bbox.minY\n }, {\n x: x,\n y: bbox.maxY\n }];\n};\nvar getBBoxYCrossPoints = function getBBoxYCrossPoints(bbox, y) {\n if (y < bbox.minY || y > bbox.maxY) {\n return [];\n }\n return [{\n x: bbox.minX,\n y: y\n }, {\n x: bbox.maxX,\n y: y\n }];\n};\nvar getBBoxCrossPointsByPoint = function getBBoxCrossPointsByPoint(bbox, point) {\n return getBBoxXCrossPoints(bbox, point.x).concat(getBBoxYCrossPoints(bbox, point.y));\n};\n/**\n * 曼哈顿距离\n */\nvar distance = function distance(p1, p2) {\n return Math.abs(p1.x - p2.x) + Math.abs(p1.y - p2.y);\n};\n/**\n * 如果 points 中的一个节点 x 与 p 相等,则消耗 -2。y 同\n * 即优先选择和 points 在同一水平线 / 垂直线上的点\n */\n// eslint-disable-next-line @typescript-eslint/naming-convention\nvar _costByPoints = function _costByPoints(p, points) {\n var offset = -2;\n var result = 0;\n points.forEach(function (point) {\n if (point) {\n if (p.x === point.x) {\n result += offset;\n }\n if (p.y === point.y) {\n result += offset;\n }\n }\n });\n return result;\n};\n/**\n * ps 经过 p 到 pt 的距离,减去其他路过节点造成的消耗\n */\nvar heuristicCostEstimate = function heuristicCostEstimate(p, ps, pt, source, target) {\n return distance(p, ps) + distance(p, pt) + _costByPoints(p, [ps, pt, source, target]);\n};\nvar reconstructPath = function reconstructPath(pathPoints, pointById, cameFrom, currentId, iterator) {\n if (iterator === void 0) {\n iterator = 0;\n }\n pathPoints.unshift(pointById[currentId]);\n if (cameFrom[currentId] && cameFrom[currentId] !== currentId && iterator <= 100) {\n reconstructPath(pathPoints, pointById, cameFrom, cameFrom[currentId], iterator + 1);\n }\n};\n/**\n * 从 arr 中删去 item\n */\nvar removeFrom = function removeFrom(arr, item) {\n var index = arr.indexOf(item);\n if (index > -1) {\n arr.splice(index, 1);\n }\n};\nvar isSegmentsIntersected = function isSegmentsIntersected(p0, p1, p2, p3) {\n var v1x = p2.x - p0.x;\n var v1y = p2.y - p0.y;\n var v2x = p3.x - p0.x;\n var v2y = p3.y - p0.y;\n var v3x = p2.x - p1.x;\n var v3y = p2.y - p1.y;\n var v4x = p3.x - p1.x;\n var v4y = p3.y - p1.y;\n var pd1 = v1x * v2y - v1y * v2x;\n var pd2 = v3x * v4y - v3y * v4x;\n var pd3 = v1x * v3y - v1y * v3x;\n var pd4 = v2x * v4y - v2y * v4x;\n return pd1 * pd2 <= 0 && pd3 * pd4 <= 0;\n};\nvar isSegmentCrossingBBox = function isSegmentCrossingBBox(p1, p2, bbox) {\n if (bbox.width || bbox.height) {\n var _a = getPointsFromBBox(bbox),\n pa = _a[0],\n pb = _a[1],\n pc = _a[2],\n pd = _a[3];\n return isSegmentsIntersected(p1, p2, pa, pb) || isSegmentsIntersected(p1, p2, pa, pd) || isSegmentsIntersected(p1, p2, pb, pc) || isSegmentsIntersected(p1, p2, pc, pd);\n }\n return false;\n};\n/**\n * 在 points 中找到满足 x 或 y 和 point 的 x 或 y 相等,且与 point 连线不经过 bbox1 与 bbox2 的点\n */\nvar getNeighborPoints = function getNeighborPoints(points, point, bbox1, bbox2) {\n var neighbors = [];\n points.forEach(function (p) {\n if (p === point) return;\n if (p.x === point.x || p.y === point.y) {\n if (isSegmentCrossingBBox(p, point, bbox1) || isSegmentCrossingBBox(p, point, bbox2)) return;\n neighbors.push(p);\n }\n });\n return filterConnectPoints(neighbors);\n};\nvar pathFinder = function pathFinder(points, start, goal, sBBox, tBBox, os, ot) {\n var _a;\n // A-Star Algorithm\n var closedSet = [];\n var openSet = (_a = {}, _a[start.id] = start, _a);\n var cameFrom = {};\n var gScore = {}; // all default values are Infinity\n var fScore = {}; // all default values are Infinity\n gScore[start.id] = 0;\n fScore[start.id] = heuristicCostEstimate(start, goal, start);\n var sortedOpenSet = new SortedArray();\n sortedOpenSet.add({\n id: start.id,\n value: fScore[start.id]\n });\n var pointById = {};\n points.forEach(function (p) {\n pointById[p.id] = p;\n });\n var current;\n while (Object.keys(openSet).length) {\n var minId = sortedOpenSet.minId(false);\n if (minId) {\n current = openSet[minId];\n } else {\n break;\n }\n // 若 openSet 中 fScore 最小的点就是终点\n if (current === goal) {\n // ending condition\n var pathPoints = [];\n reconstructPath(pathPoints, pointById, cameFrom, goal.id);\n return pathPoints;\n }\n delete openSet[current.id];\n sortedOpenSet.remove(current.id);\n closedSet.push(current);\n var neighborPoints = getNeighborPoints(points, current, sBBox, tBBox);\n var iterateNeighbors = function iterateNeighbors(items) {\n items.forEach(function (neighbor) {\n if (closedSet.indexOf(neighbor) !== -1) {\n return;\n }\n var neighborId = neighbor.id;\n if (!openSet[neighborId]) {\n openSet[neighborId] = neighbor;\n }\n var tentativeGScore = fScore[current.id] + distance(current, neighbor); // + distance(neighbor, goal);\n if (gScore[neighborId] && tentativeGScore >= gScore[neighborId]) {\n sortedOpenSet.add({\n id: neighborId,\n value: fScore[neighborId]\n });\n return;\n }\n cameFrom[neighborId] = current.id;\n gScore[neighborId] = tentativeGScore;\n fScore[neighborId] = gScore[neighborId] + heuristicCostEstimate(neighbor, goal, start, os, ot);\n sortedOpenSet.add({\n id: neighborId,\n value: fScore[neighborId]\n });\n });\n };\n iterateNeighbors(neighborPoints);\n }\n // throw new Error('Cannot find path');\n return [start, goal];\n};\nvar isBending = function isBending(p0, p1, p2) {\n return !(p0.x === p1.x && p1.x === p2.x || p0.y === p1.y && p1.y === p2.y);\n};\nvar getBorderRadiusPoints = function getBorderRadiusPoints(p0, p1, p2, r) {\n var d0 = distance(p0, p1);\n var d1 = distance(p2, p1);\n if (d0 < r) {\n r = d0;\n }\n if (d1 < r) {\n r = d1;\n }\n var ps = {\n x: p1.x - r / d0 * (p1.x - p0.x),\n y: p1.y - r / d0 * (p1.y - p0.y)\n };\n var pt = {\n x: p1.x - r / d1 * (p1.x - p2.x),\n y: p1.y - r / d1 * (p1.y - p2.y)\n };\n return [ps, pt];\n};\nvar getPathWithBorderRadiusByPolyline = function getPathWithBorderRadiusByPolyline(points, borderRadius) {\n var pathSegments = [];\n var startPoint = points[0];\n pathSegments.push(\"M\".concat(startPoint.x, \" \").concat(startPoint.y));\n points.forEach(function (p, i) {\n var p1 = points[i + 1];\n var p2 = points[i + 2];\n if (p1 && p2) {\n if (isBending(p, p1, p2)) {\n var _a = getBorderRadiusPoints(p, p1, p2, borderRadius),\n ps = _a[0],\n pt = _a[1];\n pathSegments.push(\"L\".concat(ps.x, \" \").concat(ps.y));\n pathSegments.push(\"Q\".concat(p1.x, \" \").concat(p1.y, \" \").concat(pt.x, \" \").concat(pt.y));\n pathSegments.push(\"L\".concat(pt.x, \" \").concat(pt.y));\n } else {\n pathSegments.push(\"L\".concat(p1.x, \" \").concat(p1.y));\n }\n } else if (p1) {\n pathSegments.push(\"L\".concat(p1.x, \" \").concat(p1.y));\n }\n });\n return pathSegments.join('');\n};\nvar getPolylinePoints = function getPolylinePoints(start, end, sNode, tNode, offset) {\n var sBBox, tBBox;\n if (!sNode || !sNode.getType()) {\n sBBox = getBBoxFromPoint(start);\n } else if (sNode.getType() === 'combo') {\n var sKeyShapeBBox = sNode.getKeyShape().getBBox();\n if (sKeyShapeBBox) {\n var _a = sNode.getModel(),\n sx = _a.x,\n sy = _a.y;\n sBBox = {\n x: sx,\n y: sy,\n width: sKeyShapeBBox.width,\n height: sKeyShapeBBox.height,\n minX: sKeyShapeBBox.minX + sx,\n maxX: sKeyShapeBBox.maxX + sx,\n minY: sKeyShapeBBox.minY + sy,\n maxY: sKeyShapeBBox.maxY + sy\n };\n sBBox.centerX = (sBBox.minX + sBBox.maxX) / 2;\n sBBox.centerY = (sBBox.minY + sBBox.maxY) / 2;\n } else {\n sBBox = getBBoxFromPoint(start);\n }\n } else {\n sBBox = sNode && sNode.getBBox();\n }\n if (!tNode || !tNode.getType()) {\n tBBox = getBBoxFromPoint(end);\n } else if (tNode.getType() === 'combo') {\n var tKeyShapeBBox = tNode.getKeyShape().getBBox();\n if (tKeyShapeBBox) {\n var _b = tNode.getModel(),\n tx = _b.x,\n ty = _b.y;\n tBBox = {\n x: tx,\n y: ty,\n width: tKeyShapeBBox.width,\n height: tKeyShapeBBox.height,\n minX: tKeyShapeBBox.minX + tx,\n maxX: tKeyShapeBBox.maxX + tx,\n minY: tKeyShapeBBox.minY + ty,\n maxY: tKeyShapeBBox.maxY + ty\n };\n tBBox.centerX = (tBBox.minX + tBBox.maxX) / 2;\n tBBox.centerY = (tBBox.minY + tBBox.maxY) / 2;\n } else {\n tBBox = getBBoxFromPoint(end);\n }\n } else {\n tBBox = tNode && tNode.getBBox();\n }\n // if (isBBoxesOverlapping(sBBox, tBBox)) {\n // // source and target nodes are overlapping\n // return simplifyPolyline(getSimplePolyline(start, end));\n // }\n var sxBBox = getExpandedBBox(sBBox, offset);\n var txBBox = getExpandedBBox(tBBox, offset);\n // if (isBBoxesOverlapping(sxBBox, txBBox)) {\n // // the expanded bounding boxes of source and target nodes are overlapping\n // return simplifyPolyline(getSimplePolyline(start, end));\n // }\n var sPoint = getExpandedBBoxPoint(sxBBox, start, end);\n var tPoint = getExpandedBBoxPoint(txBBox, end, start);\n var lineBBox = getBBoxFromPoints([sPoint, tPoint]);\n var sMixBBox = mergeBBox(sxBBox, lineBBox);\n var tMixBBox = mergeBBox(txBBox, lineBBox);\n var connectPoints = [];\n connectPoints = connectPoints.concat(getPointsFromBBox(sMixBBox)).concat(getPointsFromBBox(tMixBBox));\n var centerPoint = {\n x: (start.x + end.x) / 2,\n y: (start.y + end.y) / 2\n };\n [lineBBox, sMixBBox, tMixBBox].forEach(function (bbox) {\n connectPoints = connectPoints.concat(getBBoxCrossPointsByPoint(bbox, centerPoint).filter(function (p) {\n return isPointOutsideBBox(p, sxBBox) && isPointOutsideBBox(p, txBBox);\n }));\n });\n [{\n x: sPoint.x,\n y: tPoint.y\n }, {\n x: tPoint.x,\n y: sPoint.y\n }].forEach(function (p) {\n // impossible!!\n if (isPointOutsideBBox(p, sxBBox) && isPointOutsideBBox(p, txBBox) // &&\n // isPointInsideBBox(p, sMixBBox) && isPointInsideBBox(p, tMixBBox)\n ) {\n connectPoints.push(p);\n }\n });\n connectPoints.unshift(sPoint);\n connectPoints.push(tPoint);\n // filter out dulplicated points in connectPoints\n connectPoints = filterConnectPoints(connectPoints); // , sxBBox, txBBox, outerBBox\n var pathPoints = pathFinder(connectPoints, sPoint, tPoint, sBBox, tBBox, start, end);\n pathPoints.unshift(start);\n pathPoints.push(end);\n return simplifyPolyline(pathPoints);\n};\n/**\n * 去除连续同 x 不同 y 的中间点;去除连续同 y 不同 x 的中间点\n * @param points 坐标集合 { x: number, y: number, id: string }[]\n * @returns\n */\nvar removeRedundantPoint = function removeRedundantPoint(points) {\n if (!(points === null || points === void 0 ? void 0 : points.length)) return points;\n var beginPoint = points[points.length - 1];\n var current = {\n x: beginPoint.x,\n y: beginPoint.y\n };\n var continueSameX = [beginPoint];\n var continueSameY = [beginPoint];\n for (var i = points.length - 2; i >= 0; i--) {\n var point = points[i];\n if (point.x === current.x) {\n continueSameX.push(point);\n } else {\n continueSameX = [point];\n current.x = point.x;\n }\n if (point.y === current.y) {\n continueSameY.push(point);\n } else {\n continueSameY = [point];\n current.y = point.y;\n }\n if (continueSameX.length > 2) {\n var removeIdx = points.indexOf(continueSameX[1]);\n if (removeIdx > -1) points.splice(removeIdx, 1);\n continue;\n }\n if (continueSameY.length > 2) {\n var removeIdx = points.indexOf(continueSameY[1]);\n if (removeIdx > -1) points.splice(removeIdx, 1);\n }\n }\n return points;\n};\n/**\n * sorted array ascendly\n * add new item to proper index when calling add\n */\nvar SortedArray = /** @class */function () {\n function SortedArray() {\n this.arr = [];\n this.map = {};\n this.arr = [];\n this.map = {};\n }\n SortedArray.prototype._innerAdd = function (item, length) {\n var idxRange = [0, length - 1];\n while (idxRange[1] - idxRange[0] > 1) {\n var midIdx = Math.floor((idxRange[0] + idxRange[1]) / 2);\n if (this.arr[midIdx].value > item.value) {\n idxRange[1] = midIdx;\n } else if (this.arr[midIdx].value < item.value) {\n idxRange[0] = midIdx;\n } else {\n this.arr.splice(midIdx, 0, item);\n this.map[item.id] = true;\n return;\n }\n }\n this.arr.splice(idxRange[1], 0, item);\n this.map[item.id] = true;\n };\n SortedArray.prototype.add = function (item) {\n // 已经存在,先移除\n delete this.map[item.id];\n var length = this.arr.length;\n if (!length) {\n this.arr.push(item);\n this.map[item.id] = true;\n return;\n }\n // 比最后一个大,加入尾部\n if (this.arr[length - 1].value < item.value) {\n this.arr.push(item);\n this.map[item.id] = true;\n return;\n }\n this._innerAdd(item, length);\n };\n // only remove from the map to avoid cost\n // clear the invalid (not in the map) item when calling minId(true)\n SortedArray.prototype.remove = function (id) {\n if (!this.map[id]) return;\n delete this.map[id];\n };\n SortedArray.prototype._clearAndGetMinId = function () {\n var res;\n for (var i = this.arr.length - 1; i >= 0; i--) {\n if (this.map[this.arr[i].id]) res = this.arr[i].id;else this.arr.splice(i, 1);\n }\n return res;\n };\n SortedArray.prototype._findFirstId = function () {\n while (this.arr.length) {\n var first = this.arr.shift();\n if (this.map[first.id]) return first.id;\n }\n };\n SortedArray.prototype.minId = function (clear) {\n if (clear) {\n return this._clearAndGetMinId();\n } else {\n return this._findFirstId();\n }\n };\n return SortedArray;\n}();\n\n\n//# sourceURL=webpack:///./node_modules/@antv/g6-element/es/edges/polyline-util.js?");
/***/ }),
/***/ "./node_modules/@antv/g6-element/es/edges/polyline.js":
/*!************************************************************!*\
!*** ./node_modules/@antv/g6-element/es/edges/polyline.js ***!
\************************************************************/
/*! no exports provided */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tslib */ \"./node_modules/tslib/tslib.es6.js\");\n/* harmony import */ var _antv_util__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @antv/util */ \"./node_modules/@antv/util/esm/index.js\");\n/* harmony import */ var _antv_g6_core__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @antv/g6-core */ \"./node_modules/@antv/g6-core/es/index.js\");\n/* harmony import */ var _polyline_util__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./polyline-util */ \"./node_modules/@antv/g6-element/es/edges/polyline-util.js\");\n/* harmony import */ var _router__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./router */ \"./node_modules/@antv/g6-element/es/edges/router.js\");\n\n\n\n\n\n// 折线\nObject(_antv_g6_core__WEBPACK_IMPORTED_MODULE_2__[\"registerEdge\"])('polyline', {\n options: {\n color: _antv_g6_core__WEBPACK_IMPORTED_MODULE_2__[\"BaseGlobal\"].defaultEdge.color,\n size: _antv_g6_core__WEBPACK_IMPORTED_MODULE_2__[\"BaseGlobal\"].defaultEdge.size,\n style: {\n radius: 0,\n offset: 15,\n x: 0,\n y: 0,\n stroke: _antv_g6_core__WEBPACK_IMPORTED_MODULE_2__[\"BaseGlobal\"].defaultEdge.style.stroke,\n lineAppendWidth: _antv_g6_core__WEBPACK_IMPORTED_MODULE_2__[\"BaseGlobal\"].defaultEdge.style.lineAppendWidth\n },\n // 文本样式配置\n labelCfg: {\n style: {\n fill: _antv_g6_core__WEBPACK_IMPORTED_MODULE_2__[\"BaseGlobal\"].edgeLabel.style.fill,\n fontSize: _antv_g6_core__WEBPACK_IMPORTED_MODULE_2__[\"BaseGlobal\"].edgeLabel.style.fontSize,\n fontFamily: _antv_g6_core__WEBPACK_IMPORTED_MODULE_2__[\"BaseGlobal\"].windowFontFamily\n }\n },\n routeCfg: {\n obstacles: [],\n maxAllowedDirectionChange: Math.PI,\n maximumLoops: 500,\n gridSize: 10 // 指定精度\n },\n\n stateStyles: Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__assign\"])({}, _antv_g6_core__WEBPACK_IMPORTED_MODULE_2__[\"BaseGlobal\"].edgeStateStyles)\n },\n shapeType: 'polyline',\n // 文本位置\n labelPosition: 'center',\n drawShape: function drawShape(cfg, group) {\n var shapeStyle = this.getShapeStyle(cfg);\n if (shapeStyle.radius === 0) delete shapeStyle.radius;\n var keyShape = group.addShape('path', {\n className: 'edge-shape',\n name: 'edge-shape',\n attrs: shapeStyle\n });\n group['shapeMap']['edge-shape'] = keyShape;\n return keyShape;\n },\n getShapeStyle: function getShapeStyle(cfg) {\n var defaultStyle = this.options.style;\n var strokeStyle = {\n stroke: cfg.color\n };\n var style = Object(_antv_util__WEBPACK_IMPORTED_MODULE_1__[\"mix\"])({}, defaultStyle, strokeStyle, cfg.style);\n cfg = this.getPathPoints(cfg);\n this.radius = style.radius;\n this.offset = style.offset;\n var startPoint = cfg.startPoint,\n endPoint = cfg.endPoint;\n var controlPoints = this.getControlPoints(cfg);\n var points = [startPoint]; // 添加起始点\n // 添加控制点\n if (controlPoints) {\n points = points.concat(controlPoints);\n }\n // 添加结束点\n points.push(endPoint);\n var source = cfg.sourceNode;\n var target = cfg.targetNode;\n var radius = style.radius;\n var defaultRouteCfg = this.options.routeCfg;\n var routeCfg = Object(_antv_util__WEBPACK_IMPORTED_MODULE_1__[\"mix\"])({}, defaultRouteCfg, cfg.routeCfg);\n routeCfg.offset = style.offset;\n var path = this.getPath(points, source, target, radius, routeCfg, !Boolean(controlPoints));\n if (Object(_antv_util__WEBPACK_IMPORTED_MODULE_1__[\"isArray\"])(path) && path.length <= 1 || Object(_antv_util__WEBPACK_IMPORTED_MODULE_1__[\"isString\"])(path) && path.indexOf('L') === -1) {\n path = 'M0 0, L0 0';\n }\n if (isNaN(startPoint.x) || isNaN(startPoint.y) || isNaN(endPoint.x) || isNaN(endPoint.y)) {\n path = 'M0 0, L0 0';\n }\n var attrs = Object(_antv_util__WEBPACK_IMPORTED_MODULE_1__[\"mix\"])({}, _antv_g6_core__WEBPACK_IMPORTED_MODULE_2__[\"BaseGlobal\"].defaultEdge.style, style, {\n lineWidth: cfg.size,\n path: path\n });\n return attrs;\n },\n updateShapeStyle: function updateShapeStyle(cfg, item) {\n var group = item.getContainer();\n if (!item.isVisible()) return;\n var strokeStyle = {\n stroke: cfg.color\n };\n var shape = group['shapeMap']['edge-shape'] || group.find(function (element) {\n return element.get('className') === 'edge-shape';\n }) || item.getKeyShape();\n var size = cfg.size;\n cfg = this.getPathPoints(cfg);\n var startPoint = cfg.startPoint,\n endPoint = cfg.endPoint;\n var controlPoints = this.getControlPoints(cfg); // || cfg.controlPoints;\n var points = [startPoint]; // 添加起始点\n // 添加控制点\n if (controlPoints) {\n points = points.concat(controlPoints);\n }\n // 添加结束点\n points.push(endPoint);\n var currentAttr = shape.attr();\n var previousStyle = Object(_antv_util__WEBPACK_IMPORTED_MODULE_1__[\"mix\"])({}, strokeStyle, currentAttr, cfg.style);\n var source = cfg.sourceNode;\n var target = cfg.targetNode;\n var radius = previousStyle.radius;\n var defaultRouteCfg = this.options.routeCfg;\n var routeCfg = Object(_antv_util__WEBPACK_IMPORTED_MODULE_1__[\"mix\"])({}, defaultRouteCfg, cfg.routeCfg);\n routeCfg.offset = previousStyle.offset;\n var path = this.getPath(points, source, target, radius, routeCfg, !Boolean(controlPoints));\n if (Object(_antv_util__WEBPACK_IMPORTED_MODULE_1__[\"isArray\"])(path) && path.length <= 1 || Object(_antv_util__WEBPACK_IMPORTED_MODULE_1__[\"isString\"])(path) && path.indexOf('L') === -1) {\n path = 'M0 0, L0 0';\n }\n if (isNaN(startPoint.x) || isNaN(startPoint.y) || isNaN(endPoint.x) || isNaN(endPoint.y)) {\n path = 'M0 0, L0 0';\n }\n if (currentAttr.endArrow && previousStyle.endArrow === false) {\n cfg.style.endArrow = {\n path: ''\n };\n }\n if (currentAttr.startArrow && previousStyle.startArrow === false) {\n cfg.style.startArrow = {\n path: ''\n };\n }\n var style = Object(_antv_util__WEBPACK_IMPORTED_MODULE_1__[\"mix\"])(strokeStyle, shape.attr(), {\n lineWidth: size,\n path: path\n }, cfg.style);\n if (shape) {\n shape.attr(style);\n }\n },\n getPath: function getPath(points, source, target, radius, routeCfg, auto) {\n var offset = routeCfg.offset,\n obstacles = routeCfg.obstacles;\n var simple = routeCfg.simple;\n // 指定了控制点\n if (!offset || points.length > 2 || auto === false) {\n if (radius) {\n return Object(_polyline_util__WEBPACK_IMPORTED_MODULE_3__[\"getPathWithBorderRadiusByPolyline\"])(points, radius);\n }\n var pathArray_1 = [];\n Object(_antv_util__WEBPACK_IMPORTED_MODULE_1__[\"each\"])(points, function (point, index) {\n if (index === 0) {\n pathArray_1.push(['M', point.x, point.y]);\n } else {\n pathArray_1.push(['L', point.x, point.y]);\n }\n });\n return pathArray_1;\n }\n // 未指定控制点\n if (simple !== false && !(obstacles === null || obstacles === void 0 ? void 0 : obstacles.length)) simple = true;\n var polylinePoints = simple ? Object(_polyline_util__WEBPACK_IMPORTED_MODULE_3__[\"getPolylinePoints\"])(points[points.length - 1], points[0], target, source, offset) : Object(_router__WEBPACK_IMPORTED_MODULE_4__[\"pathFinder\"])(points[0], points[points.length - 1], source, target, routeCfg);\n if (!polylinePoints || !polylinePoints.length) return 'M0 0, L0 0';\n if (radius) {\n var res_1 = Object(_polyline_util__WEBPACK_IMPORTED_MODULE_3__[\"getPathWithBorderRadiusByPolyline\"])(polylinePoints, radius);\n return res_1;\n }\n // 去除连续同 x 不同 y 的中间点;去除连续同 y 不同 x 的中间点\n polylinePoints = Object(_polyline_util__WEBPACK_IMPORTED_MODULE_3__[\"removeRedundantPoint\"])(polylinePoints);\n var res = _antv_g6_core__WEBPACK_IMPORTED_MODULE_2__[\"Util\"].pointsToPolygon(polylinePoints);\n return res;\n }\n}, 'single-edge');\n\n//# sourceURL=webpack:///./node_modules/@antv/g6-element/es/edges/polyline.js?");
/***/ }),
/***/ "./node_modules/@antv/g6-element/es/edges/router.js":
/*!**********************************************************!*\
!*** ./node_modules/@antv/g6-element/es/edges/router.js ***!
\**********************************************************/
/*! exports provided: octolinearCfg, pathFinder */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"octolinearCfg\", function() { return octolinearCfg; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"pathFinder\", function() { return pathFinder; });\n/* harmony import */ var _antv_g6_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @antv/g6-core */ \"./node_modules/@antv/g6-core/es/index.js\");\n/* harmony import */ var _antv_util__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @antv/util */ \"./node_modules/@antv/util/esm/index.js\");\n/* harmony import */ var _polyline_util__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./polyline-util */ \"./node_modules/@antv/g6-element/es/edges/polyline-util.js\");\n/**\n * 通过配置不同的 costFunc, distFunc, constraints 可以得到不同效果的 router\n * generalRouter: 不限制搜索时的移动方向,避开障碍即可\n * orthogonal: 线必须沿着竖直或水平方向(4个方向)\n * octolinearRouter: 线沿着竖直、水平、对角线方向(8个方向)\n */\n\n\n\nvar manhattanDist = function manhattanDist(p1, p2) {\n return Math.abs(p1.x - p2.x) + Math.abs(p1.y - p2.y);\n};\nvar eucliDist = function eucliDist(p1, p2) {\n return Math.sqrt(Math.pow(p1.x - p2.x, 2) + Math.pow(p1.y - p2.y, 2));\n};\nvar straightPath = function straightPath(start, end) {\n // console.warn('fallbackRoute: straight path');\n return [start, end];\n};\nvar simplePolyline = function simplePolyline(start, end, startNode, endNode, cfg) {\n return Object(_polyline_util__WEBPACK_IMPORTED_MODULE_2__[\"simplifyPolyline\"])(Object(_polyline_util__WEBPACK_IMPORTED_MODULE_2__[\"getPolylinePoints\"])(start, end, startNode, endNode, cfg.offset));\n};\n// getPolylinePoints\nvar defaultCfg = {\n offset: 20,\n maxAllowedDirectionChange: Math.PI / 2,\n maximumLoops: 2000,\n gridSize: 10,\n directions: [{\n stepX: 1,\n stepY: 0\n }, {\n stepX: -1,\n stepY: 0\n }, {\n stepX: 0,\n stepY: 1\n }, {\n stepX: 0,\n stepY: -1\n } // top\n ],\n\n get penalties() {\n return {\n 0: 0,\n 45: this.gridSize / 2,\n 90: this.gridSize / 2\n };\n },\n distFunc: manhattanDist,\n fallbackRoute: simplePolyline\n};\nvar octolinearCfg = {\n maxAllowedDirectionChange: Math.PI / 4,\n // 8 个方向: 上下左右 + 45度斜线方向\n directions: [{\n stepX: 1,\n stepY: 0\n }, {\n stepX: 1,\n stepY: 1\n }, {\n stepX: 0,\n stepY: 1\n }, {\n stepX: -1,\n stepY: 1\n }, {\n stepX: -1,\n stepY: 0\n }, {\n stepX: -1,\n stepY: -1\n }, {\n stepX: 0,\n stepY: -1\n }, {\n stepX: 1,\n stepY: -1\n }],\n distFunc: eucliDist,\n fallbackRoute: straightPath\n};\nvar pos2GridIx = function pos2GridIx(pos, gridSize) {\n var gridIx = Math.round(Math.abs(pos / gridSize));\n var sign = pos < 0 ? -1 : 1;\n return gridIx < 0 ? 0 : sign * gridIx;\n};\nvar getObstacleMap = function getObstacleMap(items, gridSize, offset) {\n var map = {};\n items.forEach(function (item) {\n // create-edge 时,当边类型为 polyline 时 endNode 为 null\n if (!item) return;\n var bbox = Object(_polyline_util__WEBPACK_IMPORTED_MODULE_2__[\"getExpandedBBox\"])(item.getBBox(), offset);\n for (var x = pos2GridIx(bbox.minX, gridSize); x <= pos2GridIx(bbox.maxX, gridSize); x += 1) {\n for (var y = pos2GridIx(bbox.minY, gridSize); y <= pos2GridIx(bbox.maxY, gridSize); y += 1) {\n map[\"\".concat(x, \"|||\").concat(y)] = true;\n }\n }\n });\n return map;\n};\n/**\n * 方向角:计算从 p1 到 p2 的射线与水平线形成的夹角度数(顺时针从右侧0°转到该射线的角度)\n * @param p1 PolyPoint\n * @param p2 PolyPoint\n */\nvar getDirectionAngle = function getDirectionAngle(p1, p2) {\n var deltaX = p2.x - p1.x;\n var deltaY = p2.y - p1.y;\n if (deltaX || deltaY) {\n return Math.atan2(deltaY, deltaX);\n }\n return 0;\n};\n/**\n * 方向角的改变,取小于180度角\n * @param angle1\n * @param angle2\n */\nvar getAngleDiff = function getAngleDiff(angle1, angle2) {\n var directionChange = Math.abs(angle1 - angle2);\n return directionChange > Math.PI ? 2 * Math.PI - directionChange : directionChange;\n // return directionChange > 180 ? 360 - directionChange : directionChange;\n};\n// Path finder //\nvar estimateCost = function estimateCost(from, endPoints, distFunc) {\n var min = Infinity;\n for (var i = 0, len = endPoints.length; i < len; i++) {\n var cost = distFunc(from, endPoints[i]);\n if (cost < min) {\n min = cost;\n }\n }\n return min;\n};\n// 计算考虑 offset 后的 BBox 上的连接点\nvar getBoxPoints = function getBoxPoints(point,\n// 被 gridSize 格式化后的位置(anchorPoint)\noriPoint,\n// 未被 gridSize 格式化的位置(anchorPoint)\nnode,\n// 原始节点,用于获取 bbox\nanotherPoint,\n// 另一端被 gridSize 格式化后的位置\ncfg) {\n var points = [];\n // create-edge 生成边的过程中,endNode 为 null\n if (!node) {\n return [point];\n }\n var directions = cfg.directions,\n offset = cfg.offset;\n var bbox = node.getBBox();\n var isInside = oriPoint.x > bbox.minX && oriPoint.x < bbox.maxX && oriPoint.y > bbox.minY && oriPoint.y < bbox.maxY;\n var expandBBox = Object(_polyline_util__WEBPACK_IMPORTED_MODULE_2__[\"getExpandedBBox\"])(bbox, offset);\n for (var i in expandBBox) {\n expandBBox[i] = pos2GridIx(expandBBox[i], cfg.gridSize);\n }\n if (isInside) {\n // 如果 anchorPoint 在节点内部,允许第一段线穿过节点\n for (var _i = 0, directions_1 = directions; _i < directions_1.length; _i++) {\n var dir = directions_1[_i];\n var bounds = [[{\n x: expandBBox.minX,\n y: expandBBox.minY\n }, {\n x: expandBBox.maxX,\n y: expandBBox.minY\n }], [{\n x: expandBBox.minX,\n y: expandBBox.minY\n }, {\n x: expandBBox.minX,\n y: expandBBox.maxY\n }], [{\n x: expandBBox.maxX,\n y: expandBBox.minY\n }, {\n x: expandBBox.maxX,\n y: expandBBox.maxY\n }], [{\n x: expandBBox.minX,\n y: expandBBox.maxY\n }, {\n x: expandBBox.maxX,\n y: expandBBox.maxY\n }]];\n for (var i = 0; i < 4; i++) {\n var boundLine = bounds[i];\n var insterctP_1 = _antv_g6_core__WEBPACK_IMPORTED_MODULE_0__[\"Util\"].getLineIntersect(point, {\n x: point.x + dir.stepX * expandBBox.width,\n y: point.y + dir.stepY * expandBBox.height\n }, boundLine[0], boundLine[1]);\n if (insterctP_1 && !Object(_polyline_util__WEBPACK_IMPORTED_MODULE_2__[\"isSegmentCrossingBBox\"])(point, insterctP_1, bbox)) {\n insterctP_1.id = \"\".concat(insterctP_1.x, \"|||\").concat(insterctP_1.y);\n points.push(insterctP_1);\n }\n }\n }\n return points;\n }\n // 如果 anchorPoint 在节点上,只有一个可选方向\n var insterctP = Object(_polyline_util__WEBPACK_IMPORTED_MODULE_2__[\"getExpandedBBoxPoint\"])(expandBBox, point, anotherPoint);\n insterctP.id = \"\".concat(insterctP.x, \"|||\").concat(insterctP.y);\n return [insterctP];\n};\nvar getDirectionChange = function getDirectionChange(current, neighbor, cameFrom, scaleStartPoint) {\n var directionAngle = getDirectionAngle(current, neighbor);\n var currentCameFrom = cameFrom[current.id];\n if (!currentCameFrom) {\n var startAngle = getDirectionAngle(scaleStartPoint, current);\n return getAngleDiff(startAngle, directionAngle);\n }\n var prevDirectionAngle = getDirectionAngle({\n x: currentCameFrom.x,\n y: currentCameFrom.y\n }, current);\n return getAngleDiff(prevDirectionAngle, directionAngle);\n};\nvar getControlPoints = function getControlPoints(current, cameFrom, scaleStartPoint, endPoint, startPoint, scaleEndPoint, gridSize) {\n var controlPoints = [endPoint];\n var pointZero = endPoint;\n var currentId = current.id;\n var currentX = current.x;\n var currentY = current.y;\n var lastPoint = {\n x: currentX,\n y: currentY,\n id: currentId\n };\n if (getDirectionChange(lastPoint, scaleEndPoint, cameFrom, scaleStartPoint)) {\n pointZero = {\n x: scaleEndPoint.x === endPoint.x ? endPoint.x : lastPoint.x * gridSize,\n y: scaleEndPoint.y === endPoint.y ? endPoint.y : lastPoint.y * gridSize\n };\n controlPoints.unshift(pointZero);\n }\n var currentCameFrom = cameFrom[currentId];\n while (currentCameFrom && currentCameFrom.id !== currentId) {\n var point = {\n x: currentX,\n y: currentY,\n id: currentId\n };\n var prePoint = {\n x: currentCameFrom.x,\n y: currentCameFrom.y,\n id: currentCameFrom.id\n };\n var directionChange = getDirectionChange(prePoint, point, cameFrom, scaleStartPoint);\n if (directionChange) {\n pointZero = {\n x: prePoint.x === point.x ? pointZero.x : prePoint.x * gridSize,\n y: prePoint.y === point.y ? pointZero.y : prePoint.y * gridSize\n };\n controlPoints.unshift(pointZero);\n }\n currentId = prePoint.id;\n currentX = prePoint.x;\n currentY = prePoint.y;\n currentCameFrom = cameFrom[currentId];\n }\n // 和startNode对齐\n controlPoints[0].x = currentX === scaleStartPoint.x ? startPoint.x : pointZero.x;\n controlPoints[0].y = currentY === scaleStartPoint.y ? startPoint.y : pointZero.y;\n controlPoints.unshift(startPoint);\n return controlPoints;\n};\nvar pathFinder = function pathFinder(startPoint, endPoint, startNode, endNode, routerCfg) {\n if (isNaN(startPoint.x) || isNaN(endPoint.x)) return [];\n var cfg = Object(_antv_util__WEBPACK_IMPORTED_MODULE_1__[\"deepMix\"])(defaultCfg, routerCfg);\n cfg.obstacles = cfg.obstacles || [];\n var penalties = cfg.penalties,\n gridSize = cfg.gridSize;\n var map = getObstacleMap(cfg.obstacles.concat([startNode, endNode]), gridSize, cfg.offset);\n var scaleStartPoint = {\n x: pos2GridIx(startPoint.x, gridSize),\n y: pos2GridIx(startPoint.y, gridSize)\n };\n var scaleEndPoint = {\n x: pos2GridIx(endPoint.x, gridSize),\n y: pos2GridIx(endPoint.y, gridSize)\n };\n startPoint.id = \"\".concat(scaleStartPoint.x, \"|||\").concat(scaleStartPoint.y);\n endPoint.id = \"\".concat(scaleEndPoint.x, \"|||\").concat(scaleEndPoint.y);\n var startPoints = getBoxPoints(scaleStartPoint, startPoint, startNode, scaleEndPoint, cfg);\n var endPoints = getBoxPoints(scaleEndPoint, endPoint, endNode, scaleStartPoint, cfg);\n startPoints.forEach(function (point) {\n delete map[point.id];\n });\n endPoints.forEach(function (point) {\n delete map[point.id];\n });\n var openSet = {};\n var closedSet = {};\n var cameFrom = {};\n // 从起点到当前点已产生的 cost, default: Infinity\n var gScore = {};\n // 起点经过当前点到达终点预估的 cost, default: Infinity\n var fScore = {};\n var sortedOpenSet = new _polyline_util__WEBPACK_IMPORTED_MODULE_2__[\"SortedArray\"]();\n // initialize\n for (var i = 0; i < startPoints.length; i++) {\n var firstStep = startPoints[i];\n openSet[firstStep.id] = firstStep;\n gScore[firstStep.id] = 0;\n fScore[firstStep.id] = estimateCost(firstStep, endPoints, cfg.distFunc);\n sortedOpenSet.add({\n id: firstStep.id,\n value: fScore[firstStep.id]\n });\n }\n var remainLoops = cfg.maximumLoops;\n var current, direction, neighbor, neighborCost, costFromStart, directionChange;\n var curCost = Infinity;\n var endPointMap = {};\n endPoints.forEach(function (point) {\n endPointMap[\"\".concat(point.x, \"|||\").concat(point.y)] = true;\n });\n Object.keys(openSet).forEach(function (key) {\n var id = openSet[key].id;\n if (fScore[id] <= curCost) {\n curCost = fScore[id];\n current = openSet[id];\n }\n });\n while (Object.keys(openSet).length > 0 && remainLoops > 0) {\n var minId = sortedOpenSet.minId((remainLoops + 1) % 30 === 0);\n if (minId) {\n current = openSet[minId];\n } else {\n break;\n }\n // 如果 fScore 最小的点就是终点\n if (endPointMap[\"\".concat(current.x, \"|||\").concat(current.y)]) {\n return getControlPoints(current, cameFrom, scaleStartPoint, endPoint, startPoint, scaleEndPoint, gridSize);\n }\n delete openSet[current.id];\n sortedOpenSet.remove(current.id);\n closedSet[current.id] = true;\n // 获取符合条件的下一步的候选连接点\n // 沿候选方向走一步\n for (var i = 0; i < cfg.directions.length; i++) {\n direction = cfg.directions[i];\n var neighborId = \"\".concat(Math.round(current.x) + direction.stepX, \"|||\").concat(Math.round(current.y) + direction.stepY);\n neighbor = {\n x: current.x + direction.stepX,\n y: current.y + direction.stepY,\n id: neighborId\n };\n if (closedSet[neighborId]) continue;\n directionChange = getDirectionChange(current, neighbor, cameFrom, scaleStartPoint);\n if (directionChange > cfg.maxAllowedDirectionChange) continue;\n if (map[neighborId]) continue; // 如果交叉则跳过\n // 将候选点加入 openSet, 并计算每个候选点的 cost\n if (!openSet[neighborId]) {\n openSet[neighborId] = neighbor;\n }\n var directionPenalties = penalties[directionChange];\n neighborCost = cfg.distFunc(current, neighbor) + (isNaN(directionPenalties) ? gridSize : directionPenalties);\n costFromStart = gScore[current.id] + neighborCost;\n var neighborGScore = gScore[neighborId];\n if (neighborGScore && costFromStart >= neighborGScore) {\n continue;\n }\n cameFrom[neighborId] = current;\n gScore[neighborId] = costFromStart;\n fScore[neighborId] = costFromStart + estimateCost(neighbor, endPoints, cfg.distFunc);\n sortedOpenSet.add({\n id: neighborId,\n value: fScore[neighborId]\n });\n }\n remainLoops -= 1;\n }\n return cfg.fallbackRoute(startPoint, endPoint, startNode, endNode, cfg);\n};\n\n//# sourceURL=webpack:///./node_modules/@antv/g6-element/es/edges/router.js?");
/***/ }),
/***/ "./node_modules/@antv/g6-element/es/index.js":
/*!***************************************************!*\
!*** ./node_modules/@antv/g6-element/es/index.js ***!
\***************************************************/
/*! no exports provided */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _nodes__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./nodes */ \"./node_modules/@antv/g6-element/es/nodes/index.js\");\n/* harmony import */ var _edges__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./edges */ \"./node_modules/@antv/g6-element/es/edges/index.js\");\n\n\n\n//# sourceURL=webpack:///./node_modules/@antv/g6-element/es/index.js?");
/***/ }),
/***/ "./node_modules/@antv/g6-element/es/nodes/circle.js":
/*!**********************************************************!*\
!*** ./node_modules/@antv/g6-element/es/nodes/circle.js ***!
\**********************************************************/
/*! no exports provided */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tslib */ \"./node_modules/tslib/tslib.es6.js\");\n/* harmony import */ var _antv_g6_core__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @antv/g6-core */ \"./node_modules/@antv/g6-core/es/index.js\");\n/* harmony import */ var _antv_util__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @antv/util */ \"./node_modules/@antv/util/esm/index.js\");\n\n\n\n// 带有图标的圆,可用于拓扑图中\nObject(_antv_g6_core__WEBPACK_IMPORTED_MODULE_1__[\"registerNode\"])('circle', {\n // 自定义节点时的配置\n options: {\n size: _antv_g6_core__WEBPACK_IMPORTED_MODULE_1__[\"BaseGlobal\"].defaultNode.size,\n style: {\n x: 0,\n y: 0,\n stroke: _antv_g6_core__WEBPACK_IMPORTED_MODULE_1__[\"BaseGlobal\"].defaultNode.style.stroke,\n fill: _antv_g6_core__WEBPACK_IMPORTED_MODULE_1__[\"BaseGlobal\"].defaultNode.style.fill,\n lineWidth: _antv_g6_core__WEBPACK_IMPORTED_MODULE_1__[\"BaseGlobal\"].defaultNode.style.lineWidth\n },\n labelCfg: {\n style: {\n fill: _antv_g6_core__WEBPACK_IMPORTED_MODULE_1__[\"BaseGlobal\"].nodeLabel.style.fill,\n fontSize: _antv_g6_core__WEBPACK_IMPORTED_MODULE_1__[\"BaseGlobal\"].nodeLabel.style.fontSize,\n fontFamily: _antv_g6_core__WEBPACK_IMPORTED_MODULE_1__[\"BaseGlobal\"].windowFontFamily\n }\n },\n // 节点上左右上下四个方向上的链接circle配置\n linkPoints: {\n top: false,\n right: false,\n bottom: false,\n left: false,\n // circle的大小\n size: _antv_g6_core__WEBPACK_IMPORTED_MODULE_1__[\"BaseGlobal\"].defaultNode.linkPoints.size,\n lineWidth: _antv_g6_core__WEBPACK_IMPORTED_MODULE_1__[\"BaseGlobal\"].defaultNode.linkPoints.lineWidth,\n fill: _antv_g6_core__WEBPACK_IMPORTED_MODULE_1__[\"BaseGlobal\"].defaultNode.linkPoints.fill,\n stroke: _antv_g6_core__WEBPACK_IMPORTED_MODULE_1__[\"BaseGlobal\"].defaultNode.linkPoints.stroke\n },\n // 节点中icon配置\n icon: {\n // 是否显示icon,值为 false 则不渲染icon\n show: false,\n // icon的地址,字符串类型\n img: 'https://gw.alipayobjects.com/zos/bmw-prod/5d015065-8505-4e7a-baec-976f81e3c41d.svg',\n width: 20,\n height: 20\n },\n stateStyles: Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__assign\"])({}, _antv_g6_core__WEBPACK_IMPORTED_MODULE_1__[\"BaseGlobal\"].nodeStateStyles)\n },\n shapeType: 'circle',\n // 文本位置\n labelPosition: 'center',\n drawShape: function drawShape(cfg, group) {\n var _a = (this.mergeStyle || this.getOptions(cfg)).icon,\n defaultIcon = _a === void 0 ? {} : _a;\n var style = this.getShapeStyle(cfg);\n var icon = Object(_antv_util__WEBPACK_IMPORTED_MODULE_2__[\"deepMix\"])({}, defaultIcon, cfg.icon);\n var name = \"\".concat(this.type, \"-keyShape\");\n var keyShape = group.addShape('circle', {\n attrs: style,\n className: name,\n name: name,\n draggable: true\n });\n group['shapeMap'][name] = keyShape;\n var width = icon.width,\n height = icon.height,\n show = icon.show,\n text = icon.text;\n if (show) {\n var iconName = \"\".concat(this.type, \"-icon\");\n if (text) {\n group['shapeMap'][iconName] = group.addShape('text', {\n attrs: Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__assign\"])({\n x: 0,\n y: 0,\n fontSize: 12,\n fill: '#000',\n stroke: '#000',\n textBaseline: 'middle',\n textAlign: 'center'\n }, icon),\n className: iconName,\n name: iconName,\n draggable: true\n });\n } else {\n group['shapeMap'][iconName] = group.addShape('image', {\n attrs: Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__assign\"])({\n x: -width / 2,\n y: -height / 2\n }, icon),\n className: iconName,\n name: iconName,\n draggable: true\n });\n }\n }\n this.drawLinkPoints(cfg, group);\n return keyShape;\n },\n /**\n * 绘制节点上的LinkPoints\n * @param {Object} cfg data数据配置项\n * @param {Group} group Group实例\n */\n drawLinkPoints: function drawLinkPoints(cfg, group) {\n var linkPoints = (this.mergeStyle || this.getOptions(cfg)).linkPoints;\n if (!linkPoints) return;\n var _a = linkPoints || {},\n top = _a.top,\n left = _a.left,\n right = _a.right,\n bottom = _a.bottom,\n markSize = _a.size,\n markR = _a.r,\n markStyle = Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__rest\"])(_a, [\"top\", \"left\", \"right\", \"bottom\", \"size\", \"r\"]);\n var size = this.getSize(cfg);\n var r = size[0] / 2;\n if (left) {\n // left circle\n var name_1 = 'link-point-left';\n group['shapeMap'][name_1] = group.addShape('circle', {\n attrs: Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__assign\"])(Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__assign\"])({}, markStyle), {\n x: -r,\n y: 0,\n r: markSize / 2 || markR || 5\n }),\n className: name_1,\n name: name_1,\n isAnchorPoint: true\n });\n }\n if (right) {\n // right circle\n var name_2 = 'link-point-right';\n group['shapeMap'][name_2] = group.addShape('circle', {\n attrs: Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__assign\"])(Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__assign\"])({}, markStyle), {\n x: r,\n y: 0,\n r: markSize / 2 || markR || 5\n }),\n className: name_2,\n name: name_2,\n isAnchorPoint: true\n });\n }\n if (top) {\n // top circle\n var name_3 = 'link-point-top';\n group['shapeMap'][name_3] = group.addShape('circle', {\n attrs: Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__assign\"])(Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__assign\"])({}, markStyle), {\n x: 0,\n y: -r,\n r: markSize / 2 || markR || 5\n }),\n className: name_3,\n name: name_3,\n isAnchorPoint: true\n });\n }\n if (bottom) {\n // bottom circle\n var name_4 = 'link-point-bottom';\n group['shapeMap'][name_4] = group.addShape('circle', {\n attrs: Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__assign\"])(Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__assign\"])({}, markStyle), {\n x: 0,\n y: r,\n r: markSize / 2 || markR || 5\n }),\n className: name_4,\n name: name_4,\n isAnchorPoint: true\n });\n }\n },\n /**\n * 获取节点的样式,供基于该节点自定义时使用\n * @param {Object} cfg 节点数据模型\n * @return {Object} 节点的样式\n */\n getShapeStyle: function getShapeStyle(cfg) {\n var defaultStyle = (this.mergeStyle || this.getOptions(cfg)).style;\n var strokeStyle = {\n stroke: cfg.color\n };\n // 如果设置了color,则覆盖默认的stroke属性\n var style = Object(_antv_util__WEBPACK_IMPORTED_MODULE_2__[\"deepMix\"])({}, defaultStyle, strokeStyle);\n var size = this.getSize(cfg);\n var r = size[0] / 2;\n var styles = Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__assign\"])({\n x: 0,\n y: 0,\n r: r\n }, style);\n return styles;\n },\n update: function update(cfg, item, updateType) {\n var group = item.getContainer();\n var size = this.getSize(cfg);\n var style = Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__assign\"])({}, cfg.style);\n if (cfg.style.stroke === undefined && cfg.color) {\n style.stroke = cfg.color;\n }\n if (cfg.style.r === undefined && !isNaN(size[0])) {\n style.r = size[0] / 2;\n }\n this.updateShape(cfg, item, style, true, updateType);\n this.updateLinkPoints(cfg, group);\n }\n}, 'single-node');\n\n//# sourceURL=webpack:///./node_modules/@antv/g6-element/es/nodes/circle.js?");
/***/ }),
/***/ "./node_modules/@antv/g6-element/es/nodes/diamond.js":
/*!***********************************************************!*\
!*** ./node_modules/@antv/g6-element/es/nodes/diamond.js ***!
\***********************************************************/
/*! no exports provided */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tslib */ \"./node_modules/tslib/tslib.es6.js\");\n/* harmony import */ var _antv_g6_core__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @antv/g6-core */ \"./node_modules/@antv/g6-core/es/index.js\");\n/* harmony import */ var _antv_util__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @antv/util */ \"./node_modules/@antv/util/esm/index.js\");\n\n\n\n// 菱形shape\nObject(_antv_g6_core__WEBPACK_IMPORTED_MODULE_1__[\"registerNode\"])('diamond', {\n // 自定义节点时的配置\n options: {\n size: [80, 80],\n style: {\n stroke: _antv_g6_core__WEBPACK_IMPORTED_MODULE_1__[\"BaseGlobal\"].defaultNode.style.stroke,\n fill: _antv_g6_core__WEBPACK_IMPORTED_MODULE_1__[\"BaseGlobal\"].defaultNode.style.fill,\n lineWidth: _antv_g6_core__WEBPACK_IMPORTED_MODULE_1__[\"BaseGlobal\"].defaultNode.style.lineWidth\n },\n // 文本样式配置\n labelCfg: {\n style: {\n fill: _antv_g6_core__WEBPACK_IMPORTED_MODULE_1__[\"BaseGlobal\"].nodeLabel.style.fill,\n fontSize: _antv_g6_core__WEBPACK_IMPORTED_MODULE_1__[\"BaseGlobal\"].nodeLabel.style.fontSize,\n fontFamily: _antv_g6_core__WEBPACK_IMPORTED_MODULE_1__[\"BaseGlobal\"].windowFontFamily\n }\n },\n // 节点上左右上下四个方向上的链接circle配置\n linkPoints: {\n top: false,\n right: false,\n bottom: false,\n left: false,\n // circle的大小\n size: _antv_g6_core__WEBPACK_IMPORTED_MODULE_1__[\"BaseGlobal\"].defaultNode.linkPoints.size,\n lineWidth: _antv_g6_core__WEBPACK_IMPORTED_MODULE_1__[\"BaseGlobal\"].defaultNode.linkPoints.lineWidth,\n fill: _antv_g6_core__WEBPACK_IMPORTED_MODULE_1__[\"BaseGlobal\"].defaultNode.linkPoints.fill,\n stroke: _antv_g6_core__WEBPACK_IMPORTED_MODULE_1__[\"BaseGlobal\"].defaultNode.linkPoints.stroke\n },\n // 节点中icon配置\n icon: {\n // 是否显示icon,值为 false 则不渲染icon\n show: false,\n // icon的地址,字符串类型\n img: 'https://gw.alipayobjects.com/zos/bmw-prod/5d015065-8505-4e7a-baec-976f81e3c41d.svg',\n width: 20,\n height: 20\n },\n stateStyles: Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__assign\"])({}, _antv_g6_core__WEBPACK_IMPORTED_MODULE_1__[\"BaseGlobal\"].nodeStateStyles)\n },\n shapeType: 'diamond',\n // 文本位置\n labelPosition: 'center',\n drawShape: function drawShape(cfg, group) {\n var _a = (this.mergeStyle || this.getOptions(cfg)).icon,\n icon = _a === void 0 ? {} : _a;\n var style = this.getShapeStyle(cfg);\n var keyShape = group.addShape('path', {\n attrs: style,\n className: \"\".concat(this.type, \"-keyShape\"),\n name: \"\".concat(this.type, \"-keyShape\"),\n draggable: true\n });\n group['shapeMap'][\"\".concat(this.type, \"-keyShape\")] = keyShape;\n var w = icon.width,\n h = icon.height,\n show = icon.show,\n text = icon.text;\n if (show) {\n if (text) {\n group['shapeMap'][\"\".concat(this.type, \"-icon\")] = group.addShape('text', {\n attrs: Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__assign\"])({\n x: 0,\n y: 0,\n fontSize: 12,\n fill: '#000',\n stroke: '#000',\n textBaseline: 'middle',\n textAlign: 'center'\n }, icon),\n className: \"\".concat(this.type, \"-icon\"),\n name: \"\".concat(this.type, \"-icon\"),\n draggable: true\n });\n } else {\n group['shapeMap'][\"\".concat(this.type, \"-icon\")] = group.addShape('image', {\n attrs: Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__assign\"])({\n x: -w / 2,\n y: -h / 2\n }, icon),\n className: \"\".concat(this.type, \"-icon\"),\n name: \"\".concat(this.type, \"-icon\"),\n draggable: true\n });\n }\n }\n this.drawLinkPoints(cfg, group);\n return keyShape;\n },\n /**\n * 绘制节点上的LinkPoints\n * @param {Object} cfg data数据配置项\n * @param {Group} group Group实例\n */\n drawLinkPoints: function drawLinkPoints(cfg, group) {\n var _a = (this.mergeStyle || this.getOptions(cfg)).linkPoints,\n linkPoints = _a === void 0 ? {} : _a;\n var top = linkPoints.top,\n left = linkPoints.left,\n right = linkPoints.right,\n bottom = linkPoints.bottom,\n markSize = linkPoints.size,\n markR = linkPoints.r,\n markStyle = Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__rest\"])(linkPoints, [\"top\", \"left\", \"right\", \"bottom\", \"size\", \"r\"]);\n var size = this.getSize(cfg);\n var width = size[0];\n var height = size[1];\n if (left) {\n // left circle\n group['shapeMap']['link-point-left'] = group.addShape('circle', {\n attrs: Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__assign\"])(Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__assign\"])({}, markStyle), {\n x: -width / 2,\n y: 0,\n r: markSize / 2 || markR || 5\n }),\n className: 'link-point-left',\n name: 'link-point-left',\n isAnchorPoint: true\n });\n }\n if (right) {\n // right circle\n group['shapeMap']['link-point-right'] = group.addShape('circle', {\n attrs: Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__assign\"])(Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__assign\"])({}, markStyle), {\n x: width / 2,\n y: 0,\n r: markSize / 2 || markR || 5\n }),\n className: 'link-point-right',\n name: 'link-point-right',\n isAnchorPoint: true\n });\n }\n if (top) {\n // top circle\n group['shapeMap']['link-point-top'] = group.addShape('circle', {\n attrs: Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__assign\"])(Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__assign\"])({}, markStyle), {\n x: 0,\n y: -height / 2,\n r: markSize / 2 || markR || 5\n }),\n className: 'link-point-top',\n name: 'link-point-top',\n isAnchorPoint: true\n });\n }\n if (bottom) {\n // bottom circle\n group['shapeMap']['link-point-bottom'] = group.addShape('circle', {\n attrs: Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__assign\"])(Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__assign\"])({}, markStyle), {\n x: 0,\n y: height / 2,\n r: markSize / 2 || markR || 5\n }),\n className: 'link-point-bottom',\n name: 'link-point-bottom',\n isAnchorPoint: true\n });\n }\n },\n getPath: function getPath(cfg) {\n var size = this.getSize(cfg);\n var width = size[0];\n var height = size[1];\n var path = [['M', 0, -height / 2], ['L', width / 2, 0], ['L', 0, height / 2], ['L', -width / 2, 0], ['Z'] // 封闭\n ];\n\n return path;\n },\n /**\n * 获取节点的样式,供基于该节点自定义时使用\n * @param {Object} cfg 节点数据模型\n * @return {Object} 节点的样式\n */\n getShapeStyle: function getShapeStyle(cfg) {\n var defaultStyle = (this.mergeStyle || this.getOptions(cfg)).style;\n var strokeStyle = {\n stroke: cfg.color\n };\n // 如果设置了color,则覆盖默认的stroke属性\n var style = Object(_antv_util__WEBPACK_IMPORTED_MODULE_2__[\"mix\"])({}, defaultStyle, strokeStyle);\n var path = this.getPath(cfg);\n var styles = Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__assign\"])({\n path: path\n }, style);\n return styles;\n },\n update: function update(cfg, item, updateType) {\n var group = item.getContainer();\n // 这里不传 cfg 参数是因为 cfg.style 需要最后覆盖样式\n var defaultStyle = this.getOptions({}).style;\n var path = this.getPath(cfg);\n // 下面这些属性需要覆盖默认样式与目前样式,但若在 cfg 中有指定则应该被 cfg 的相应配置覆盖。\n var strokeStyle = {\n stroke: cfg.color,\n path: path\n };\n // 与 getShapeStyle 不同在于,update 时需要获取到当前的 style 进行融合。即新传入的配置项中没有涉及的属性,保留当前的配置。\n var keyShape = item.get('keyShape');\n var style = Object(_antv_util__WEBPACK_IMPORTED_MODULE_2__[\"mix\"])({}, defaultStyle, keyShape.attr(), strokeStyle);\n style = Object(_antv_util__WEBPACK_IMPORTED_MODULE_2__[\"mix\"])(style, cfg.style);\n this.updateShape(cfg, item, style, true, updateType);\n this.updateLinkPoints(cfg, group);\n }\n}, 'single-node');\n\n//# sourceURL=webpack:///./node_modules/@antv/g6-element/es/nodes/diamond.js?");
/***/ }),
/***/ "./node_modules/@antv/g6-element/es/nodes/donut.js":
/*!*********************************************************!*\
!*** ./node_modules/@antv/g6-element/es/nodes/donut.js ***!
\*********************************************************/
/*! no exports provided */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tslib */ \"./node_modules/tslib/tslib.es6.js\");\n/* harmony import */ var _antv_g6_core__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @antv/g6-core */ \"./node_modules/@antv/g6-core/es/index.js\");\n/* harmony import */ var _antv_util__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @antv/util */ \"./node_modules/@antv/util/esm/index.js\");\n\n\n\nvar defaultSubjectColors = _antv_g6_core__WEBPACK_IMPORTED_MODULE_1__[\"Util\"].defaultSubjectColors;\nvar FAN_NAME_PREFIX = 'fan-shape-';\n// 饼图节点\nObject(_antv_g6_core__WEBPACK_IMPORTED_MODULE_1__[\"registerNode\"])('donut', {\n // 自定义节点时的配置\n options: {\n size: _antv_g6_core__WEBPACK_IMPORTED_MODULE_1__[\"BaseGlobal\"].defaultNode.size,\n style: {\n x: 0,\n y: 0,\n stroke: _antv_g6_core__WEBPACK_IMPORTED_MODULE_1__[\"BaseGlobal\"].defaultNode.style.stroke,\n fill: _antv_g6_core__WEBPACK_IMPORTED_MODULE_1__[\"BaseGlobal\"].defaultNode.style.fill,\n lineWidth: _antv_g6_core__WEBPACK_IMPORTED_MODULE_1__[\"BaseGlobal\"].defaultNode.style.lineWidth\n },\n labelCfg: {\n style: {\n fill: _antv_g6_core__WEBPACK_IMPORTED_MODULE_1__[\"BaseGlobal\"].nodeLabel.style.fill,\n fontSize: _antv_g6_core__WEBPACK_IMPORTED_MODULE_1__[\"BaseGlobal\"].nodeLabel.style.fontSize,\n fontFamily: _antv_g6_core__WEBPACK_IMPORTED_MODULE_1__[\"BaseGlobal\"].windowFontFamily\n }\n },\n // 节点上左右上下四个方向上的链接circle配置\n linkPoints: {\n top: false,\n right: false,\n bottom: false,\n left: false,\n // circle的大小\n size: _antv_g6_core__WEBPACK_IMPORTED_MODULE_1__[\"BaseGlobal\"].defaultNode.linkPoints.size,\n lineWidth: _antv_g6_core__WEBPACK_IMPORTED_MODULE_1__[\"BaseGlobal\"].defaultNode.linkPoints.lineWidth,\n fill: _antv_g6_core__WEBPACK_IMPORTED_MODULE_1__[\"BaseGlobal\"].defaultNode.linkPoints.fill,\n stroke: _antv_g6_core__WEBPACK_IMPORTED_MODULE_1__[\"BaseGlobal\"].defaultNode.linkPoints.stroke\n },\n // 节点中icon配置\n icon: {\n // 是否显示icon,值为 false 则不渲染icon\n show: false,\n // icon的地址,字符串类型\n img: 'https://gw.alipayobjects.com/zos/bmw-prod/5d015065-8505-4e7a-baec-976f81e3c41d.svg',\n width: 20,\n height: 20\n },\n stateStyles: Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__assign\"])({}, _antv_g6_core__WEBPACK_IMPORTED_MODULE_1__[\"BaseGlobal\"].nodeStateStyles)\n },\n shapeType: 'circle',\n // 文本位置\n labelPosition: 'center',\n drawShape: function drawShape(cfg, group) {\n var _a = (this.mergeStyle || this.getOptions(cfg)).icon,\n defaultIcon = _a === void 0 ? {} : _a;\n var style = this.getShapeStyle(cfg);\n var icon = Object(_antv_util__WEBPACK_IMPORTED_MODULE_2__[\"deepMix\"])({}, defaultIcon, cfg.icon);\n var keyShape = group.addShape('circle', {\n attrs: style,\n className: \"\".concat(this.type, \"-keyShape\"),\n draggable: true,\n name: \"\".concat(this.type, \"-keyShape\")\n });\n group['shapeMap'][\"\".concat(this.type, \"-keyShape\")] = keyShape;\n var width = icon.width,\n height = icon.height,\n show = icon.show,\n text = icon.text;\n if (show) {\n if (text) {\n group['shapeMap'][\"\".concat(this.type, \"-icon\")] = group.addShape('text', {\n attrs: Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__assign\"])({\n x: 0,\n y: 0,\n fontSize: 12,\n fill: '#000',\n stroke: '#000',\n textBaseline: 'middle',\n textAlign: 'center'\n }, icon),\n className: \"\".concat(this.type, \"-icon\"),\n name: \"\".concat(this.type, \"-icon\"),\n draggable: true\n });\n } else {\n group['shapeMap'][\"\".concat(this.type, \"-icon\")] = group.addShape('image', {\n attrs: Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__assign\"])({\n x: -width / 2,\n y: -height / 2\n }, icon),\n className: \"\".concat(this.type, \"-icon\"),\n name: \"\".concat(this.type, \"-icon\"),\n draggable: true\n });\n }\n }\n // draw the fan shapes\n drawFans(cfg, group, keyShape);\n this.drawLinkPoints(cfg, group);\n return keyShape;\n },\n updateShape: function updateShape(cfg, item, keyShapeStyle, hasIcon, updateType) {\n // here cfg is merged configure including old model and new configs\n var keyShape = item.get('keyShape');\n keyShape.attr(Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__assign\"])({}, keyShapeStyle));\n updateFans(cfg, item, keyShape);\n if (!undefined || (updateType === null || updateType === void 0 ? void 0 : updateType.includes('label'))) {\n this.updateLabel(cfg, item, updateType);\n }\n if (hasIcon) {\n this.updateIcon(cfg, item);\n }\n }\n}, 'circle');\n/**\n * draws the fan shapes\n * @param cfg\n * @param group\n * @param keyShape\n * @returns\n */\nvar drawFans = function drawFans(cfg, group, keyShape) {\n var _a = cfg.donutAttrs,\n donutAttrs = _a === void 0 ? {} : _a,\n _b = cfg.donutColorMap,\n donutColorMap = _b === void 0 ? {} : _b;\n var attrNum = Object.keys(donutAttrs).length;\n if (donutAttrs && attrNum > 1) {\n var _c = getDonutConfig(donutAttrs, donutColorMap),\n configs = _c.configs,\n totalValue = _c.totalValue;\n if (totalValue) {\n var _d = getDonutSize(keyShape),\n lineWidth = _d.lineWidth,\n arcR = _d.arcR;\n var arcBegin = [arcR, 0];\n var beginAngle = 0;\n if (attrNum === 1) {\n // draw a path represents a circle\n drawFan(group, {\n arcR: arcR,\n arcBegin: arcBegin,\n beginAngle: beginAngle,\n config: configs[0],\n fanIndex: 0,\n lineWidth: lineWidth,\n totalValue: totalValue,\n drawWhole: true\n });\n return;\n }\n for (var i = 0; i < configs.length; i++) {\n var result = drawFan(group, {\n arcR: arcR,\n arcBegin: arcBegin,\n beginAngle: beginAngle,\n config: configs[i],\n fanIndex: i,\n lineWidth: lineWidth,\n totalValue: totalValue\n });\n if (result.shouldEnd) return;\n arcBegin = result.arcBegin;\n beginAngle = result.beginAngle;\n }\n }\n }\n};\n/**\n * draws one fan shape and returns the next position and angle\n * @param group\n * @param fanConfig\n * @returns\n */\nvar drawFan = function drawFan(group, fanConfig) {\n var arcR = fanConfig.arcR,\n arcBegin = fanConfig.arcBegin,\n beginAngle = fanConfig.beginAngle,\n config = fanConfig.config,\n fanIndex = fanConfig.fanIndex,\n lineWidth = fanConfig.lineWidth,\n totalValue = fanConfig.totalValue,\n _a = fanConfig.drawWhole,\n drawWhole = _a === void 0 ? false : _a,\n _b = fanConfig.updateShape,\n updateShape = _b === void 0 ? undefined : _b;\n var percent = config.value / totalValue;\n if (percent < 0.001) {\n // too small to add a fan\n return {\n beginAngle: beginAngle,\n arcBegin: arcBegin,\n shape: undefined,\n shouldEnd: false\n };\n }\n var arcEnd, endAngle, isBig;\n // draw a path represents the whole circle, or the percentage is close to 1\n if (drawWhole || percent > 0.999) {\n arcEnd = [arcR, 0.0001]; // [arcR * cos(2 * PI), -arcR * sin(2 * PI)]\n isBig = 1;\n } else {\n var angle = percent * Math.PI * 2;\n endAngle = beginAngle + angle;\n arcEnd = [arcR * Math.cos(endAngle), -arcR * Math.sin(endAngle)];\n isBig = angle > Math.PI ? 1 : 0;\n }\n var style = {\n path: [['M', arcBegin[0], arcBegin[1]], ['A', arcR, arcR, 0, isBig, 0, arcEnd[0], arcEnd[1]]],\n stroke: config.color || (updateShape === null || updateShape === void 0 ? void 0 : updateShape.attr('stroke')) || defaultSubjectColors[fanIndex % defaultSubjectColors.length],\n lineWidth: lineWidth\n };\n if (updateShape) {\n // update\n updateShape.attr(style);\n } else {\n // draw\n group['shapeMap'][\"\".concat(FAN_NAME_PREFIX).concat(fanIndex)] = group.addShape('path', {\n attrs: style,\n name: \"\".concat(FAN_NAME_PREFIX).concat(fanIndex),\n draggable: true\n });\n }\n return {\n beginAngle: endAngle,\n arcBegin: arcEnd,\n shape: group['shapeMap'][\"\".concat(FAN_NAME_PREFIX).concat(fanIndex)],\n shouldEnd: drawWhole || percent > 0.999\n };\n};\n/**\n * utilizes the existing fan shapes, update them with new configs\n * removes the redundent fan shapes\n * or adds more fan shapes\n * @param cfg\n * @param item\n * @param keyShape\n */\nvar updateFans = function updateFans(cfg, item, keyShape) {\n var donutAttrs = cfg.donutAttrs,\n _a = cfg.donutColorMap,\n donutColorMap = _a === void 0 ? {} : _a;\n var visitMap = {};\n var group = item.getContainer();\n if (donutAttrs) {\n var _b = getDonutConfig(donutAttrs, donutColorMap),\n configs = _b.configs,\n totalValue = _b.totalValue;\n if (totalValue) {\n var _c = getDonutSize(keyShape),\n lineWidth = _c.lineWidth,\n arcR = _c.arcR;\n var arcBegin = [arcR, 0];\n var beginAngle = 0;\n for (var i = 0; i < configs.length; i++) {\n var shapeName = \"\".concat(FAN_NAME_PREFIX).concat(i);\n var result = drawFan(group, {\n arcR: arcR,\n arcBegin: arcBegin,\n beginAngle: beginAngle,\n config: configs[i],\n fanIndex: i,\n lineWidth: lineWidth,\n totalValue: totalValue,\n drawWhole: configs.length === 1,\n updateShape: group['shapeMap'][shapeName]\n });\n if (result.shape) visitMap[shapeName] = true;\n if (result.shouldEnd) break;\n arcBegin = result.arcBegin;\n beginAngle = result.beginAngle;\n }\n }\n }\n // remove the old shapes which are not visited, including the situation taht donutAttrs is empty\n var fanKeys = Object.keys(group['shapeMap']).filter(function (key) {\n return key.includes(FAN_NAME_PREFIX);\n });\n fanKeys.forEach(function (key) {\n if (!visitMap[key]) {\n group['shapeMap'][key].remove(true);\n delete group['shapeMap'][key];\n }\n });\n};\n/**\n * calculate the total value and format single value for each fan\n * @param donutAttrs\n * @param donutColorMap\n * @returns\n */\nvar getDonutConfig = function getDonutConfig(donutAttrs, donutColorMap) {\n var totalValue = 0;\n var configs = [];\n Object.keys(donutAttrs).forEach(function (name) {\n var value = +donutAttrs[name];\n if (isNaN(value)) return;\n configs.push({\n key: name,\n value: value,\n color: donutColorMap[name]\n });\n totalValue += value;\n });\n return {\n totalValue: totalValue,\n configs: configs\n };\n};\n/**\n * calculate the lineWidth and radius for fan shapes according to the keyShape's radius\n * @param keyShape\n * @returns\n */\nvar getDonutSize = function getDonutSize(keyShape) {\n var keyShapeR = keyShape.attr('r');\n var innerR = 0.6 * keyShapeR; // 甜甜圈的内环半径\n var arcR = (keyShapeR + innerR) / 2; // 内环半径与外环半径的平均值\n var lineWidth = keyShapeR - innerR;\n return {\n lineWidth: lineWidth,\n arcR: arcR\n };\n};\n\n//# sourceURL=webpack:///./node_modules/@antv/g6-element/es/nodes/donut.js?");
/***/ }),
/***/ "./node_modules/@antv/g6-element/es/nodes/ellipse.js":
/*!***********************************************************!*\
!*** ./node_modules/@antv/g6-element/es/nodes/ellipse.js ***!
\***********************************************************/
/*! no exports provided */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tslib */ \"./node_modules/tslib/tslib.es6.js\");\n/* harmony import */ var _antv_g6_core__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @antv/g6-core */ \"./node_modules/@antv/g6-core/es/index.js\");\n/* harmony import */ var _antv_util__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @antv/util */ \"./node_modules/@antv/util/esm/index.js\");\n\n\n\n/**\n * 基本的椭圆,可以添加文本,默认文本居中\n */\nObject(_antv_g6_core__WEBPACK_IMPORTED_MODULE_1__[\"registerNode\"])('ellipse', {\n // 自定义节点时的配置\n options: {\n size: [80, 40],\n style: {\n x: 0,\n y: 0,\n stroke: _antv_g6_core__WEBPACK_IMPORTED_MODULE_1__[\"BaseGlobal\"].defaultNode.style.stroke,\n fill: _antv_g6_core__WEBPACK_IMPORTED_MODULE_1__[\"BaseGlobal\"].defaultNode.style.fill,\n lineWidth: _antv_g6_core__WEBPACK_IMPORTED_MODULE_1__[\"BaseGlobal\"].defaultNode.style.lineWidth\n },\n // 文本样式配置\n labelCfg: {\n style: {\n fill: _antv_g6_core__WEBPACK_IMPORTED_MODULE_1__[\"BaseGlobal\"].nodeLabel.style.fill,\n fontSize: _antv_g6_core__WEBPACK_IMPORTED_MODULE_1__[\"BaseGlobal\"].nodeLabel.style.fontSize,\n fontFamily: _antv_g6_core__WEBPACK_IMPORTED_MODULE_1__[\"BaseGlobal\"].windowFontFamily\n }\n },\n // 节点上左右上下四个方向上的链接circle配置\n linkPoints: {\n top: false,\n right: false,\n bottom: false,\n left: false,\n // circle的大小\n size: _antv_g6_core__WEBPACK_IMPORTED_MODULE_1__[\"BaseGlobal\"].defaultNode.linkPoints.size,\n lineWidth: _antv_g6_core__WEBPACK_IMPORTED_MODULE_1__[\"BaseGlobal\"].defaultNode.linkPoints.lineWidth,\n fill: _antv_g6_core__WEBPACK_IMPORTED_MODULE_1__[\"BaseGlobal\"].defaultNode.linkPoints.fill,\n stroke: _antv_g6_core__WEBPACK_IMPORTED_MODULE_1__[\"BaseGlobal\"].defaultNode.linkPoints.stroke\n },\n // 节点中icon配置\n icon: {\n // 是否显示icon,值为 false 则不渲染icon\n show: false,\n // icon的地址,字符串类型\n img: 'https://gw.alipayobjects.com/zos/bmw-prod/5d015065-8505-4e7a-baec-976f81e3c41d.svg',\n width: 20,\n height: 20\n },\n stateStyles: Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__assign\"])({}, _antv_g6_core__WEBPACK_IMPORTED_MODULE_1__[\"BaseGlobal\"].nodeStateStyles)\n },\n shapeType: 'ellipse',\n // 文本位置\n labelPosition: 'center',\n drawShape: function drawShape(cfg, group) {\n var _a = (this.mergeStyle || this.getOptions(cfg)).icon,\n icon = _a === void 0 ? {} : _a;\n var style = this.getShapeStyle(cfg);\n var keyShape = group.addShape('ellipse', {\n attrs: style,\n className: 'ellipse-keyShape',\n name: 'ellipse-keyShape',\n draggable: true\n });\n group['shapeMap']['ellipse-keyShape'] = keyShape;\n var width = icon.width,\n height = icon.height,\n show = icon.show,\n text = icon.text;\n if (show) {\n if (text) {\n group['shapeMap'][\"\".concat(this.type, \"-icon\")] = group.addShape('text', {\n attrs: Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__assign\"])({\n x: 0,\n y: 0,\n fontSize: 12,\n fill: '#000',\n stroke: '#000',\n textBaseline: 'middle',\n textAlign: 'center'\n }, icon),\n className: \"\".concat(this.type, \"-icon\"),\n name: \"\".concat(this.type, \"-icon\"),\n draggable: true\n });\n } else {\n group['shapeMap'][\"\".concat(this.type, \"-icon\")] = group.addShape('image', {\n attrs: Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__assign\"])({\n x: -width / 2,\n y: -height / 2\n }, icon),\n className: \"\".concat(this.type, \"-icon\"),\n name: \"\".concat(this.type, \"-icon\"),\n draggable: true\n });\n }\n }\n this.drawLinkPoints(cfg, group);\n return keyShape;\n },\n /**\n * 绘制节点上的LinkPoints\n * @param {Object} cfg data数据配置项\n * @param {Group} group Group实例\n */\n drawLinkPoints: function drawLinkPoints(cfg, group) {\n var _a = (this.mergeStyle || this.getOptions(cfg)).linkPoints,\n linkPoints = _a === void 0 ? {} : _a;\n var top = linkPoints.top,\n left = linkPoints.left,\n right = linkPoints.right,\n bottom = linkPoints.bottom,\n markSize = linkPoints.size,\n markR = linkPoints.r,\n markStyle = Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__rest\"])(linkPoints, [\"top\", \"left\", \"right\", \"bottom\", \"size\", \"r\"]);\n var size = this.getSize(cfg);\n var rx = size[0] / 2;\n var ry = size[1] / 2;\n if (left) {\n // left circle\n group['shapeMap']['link-point-left'] = group.addShape('circle', {\n attrs: Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__assign\"])(Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__assign\"])({}, markStyle), {\n x: -rx,\n y: 0,\n r: markSize / 2 || markR || 5\n }),\n className: 'link-point-left',\n name: 'link-point-left',\n isAnchorPoint: true\n });\n }\n if (right) {\n // right circle\n group['shapeMap']['link-point-right'] = group.addShape('circle', {\n attrs: Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__assign\"])(Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__assign\"])({}, markStyle), {\n x: rx,\n y: 0,\n r: markSize / 2 || markR || 5\n }),\n className: 'link-point-right',\n name: 'link-point-right',\n isAnchorPoint: true\n });\n }\n if (top) {\n // top circle\n group['shapeMap']['link-point-top'] = group.addShape('circle', {\n attrs: Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__assign\"])(Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__assign\"])({}, markStyle), {\n x: 0,\n y: -ry,\n r: markSize / 2 || markR || 5\n }),\n className: 'link-point-top',\n name: 'link-point-top',\n isAnchorPoint: true\n });\n }\n if (bottom) {\n // bottom circle\n group['shapeMap']['link-point-bottom'] = group.addShape('circle', {\n attrs: Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__assign\"])(Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__assign\"])({}, markStyle), {\n x: 0,\n y: ry,\n r: markSize / 2 || markR || 5\n }),\n className: 'link-point-bottom',\n name: 'link-point-bottom',\n isAnchorPoint: true\n });\n }\n },\n /**\n * 获取节点的样式,供基于该节点自定义时使用\n * @param {Object} cfg 节点数据模型\n * @return {Object} 节点的样式\n */\n getShapeStyle: function getShapeStyle(cfg) {\n var defaultStyle = (this.mergeStyle || this.getOptions(cfg)).style;\n var strokeStyle = {\n stroke: cfg.color\n };\n // 如果设置了color,则覆盖默认的stroke属性\n var style = Object(_antv_util__WEBPACK_IMPORTED_MODULE_2__[\"mix\"])({}, defaultStyle, strokeStyle);\n var size = this.getSize(cfg);\n var rx = size[0] / 2;\n var ry = size[1] / 2;\n var styles = Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__assign\"])({\n x: 0,\n y: 0,\n rx: rx,\n ry: ry\n }, style);\n return styles;\n },\n update: function update(cfg, item, updateType) {\n var group = item.getContainer();\n // 这里不传 cfg 参数是因为 cfg.style 需要最后覆盖样式\n var defaultStyle = this.getOptions({}).style;\n var size = this.getSize(cfg);\n var strokeStyle = {\n stroke: cfg.color,\n rx: size[0] / 2,\n ry: size[1] / 2\n };\n // 与 getShapeStyle 不同在于,update 时需要获取到当前的 style 进行融合。即新传入的配置项中没有涉及的属性,保留当前的配置。\n var keyShape = item.get('keyShape');\n var style = Object(_antv_util__WEBPACK_IMPORTED_MODULE_2__[\"mix\"])({}, defaultStyle, keyShape.attr(), strokeStyle);\n style = Object(_antv_util__WEBPACK_IMPORTED_MODULE_2__[\"mix\"])(style, cfg.style);\n this.updateShape(cfg, item, style, true, updateType);\n this.updateLinkPoints(cfg, group);\n }\n}, 'single-node');\n\n//# sourceURL=webpack:///./node_modules/@antv/g6-element/es/nodes/ellipse.js?");
/***/ }),
/***/ "./node_modules/@antv/g6-element/es/nodes/index.js":
/*!*********************************************************!*\
!*** ./node_modules/@antv/g6-element/es/nodes/index.js ***!
\*********************************************************/
/*! no exports provided */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _circle__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./circle */ \"./node_modules/@antv/g6-element/es/nodes/circle.js\");\n/* harmony import */ var _rect__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./rect */ \"./node_modules/@antv/g6-element/es/nodes/rect.js\");\n/* harmony import */ var _ellipse__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./ellipse */ \"./node_modules/@antv/g6-element/es/nodes/ellipse.js\");\n/* harmony import */ var _diamond__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./diamond */ \"./node_modules/@antv/g6-element/es/nodes/diamond.js\");\n/* harmony import */ var _triangle__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./triangle */ \"./node_modules/@antv/g6-element/es/nodes/triangle.js\");\n/* harmony import */ var _modelRect__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./modelRect */ \"./node_modules/@antv/g6-element/es/nodes/modelRect.js\");\n/* harmony import */ var _star__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./star */ \"./node_modules/@antv/g6-element/es/nodes/star.js\");\n/* harmony import */ var _donut__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./donut */ \"./node_modules/@antv/g6-element/es/nodes/donut.js\");\n\n\n\n\n\n\n\n\n// import './image';\n\n//# sourceURL=webpack:///./node_modules/@antv/g6-element/es/nodes/index.js?");
/***/ }),
/***/ "./node_modules/@antv/g6-element/es/nodes/modelRect.js":
/*!*************************************************************!*\
!*** ./node_modules/@antv/g6-element/es/nodes/modelRect.js ***!
\*************************************************************/
/*! no exports provided */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tslib */ \"./node_modules/tslib/tslib.es6.js\");\n/* harmony import */ var _antv_util__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @antv/util */ \"./node_modules/@antv/util/esm/index.js\");\n/* harmony import */ var _antv_g6_core__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @antv/g6-core */ \"./node_modules/@antv/g6-core/es/index.js\");\n\n\n\nObject(_antv_g6_core__WEBPACK_IMPORTED_MODULE_2__[\"registerNode\"])('modelRect', {\n // 自定义节点时的配置\n options: {\n size: [185, 70],\n style: {\n radius: 5,\n stroke: '#69c0ff',\n fill: '#ffffff',\n lineWidth: _antv_g6_core__WEBPACK_IMPORTED_MODULE_2__[\"BaseGlobal\"].defaultNode.style.lineWidth,\n fillOpacity: 1\n },\n // 文本样式配置\n labelCfg: {\n style: {\n fill: '#595959',\n fontSize: 14,\n fontFamily: _antv_g6_core__WEBPACK_IMPORTED_MODULE_2__[\"BaseGlobal\"].windowFontFamily\n },\n offset: 30 // 距离左侧的 offset,没有设置 y 轴上移动的配置\n },\n\n descriptionCfg: {\n style: {\n fontSize: 12,\n fill: '#bfbfbf',\n fontFamily: _antv_g6_core__WEBPACK_IMPORTED_MODULE_2__[\"BaseGlobal\"].windowFontFamily\n },\n paddingTop: 0\n },\n preRect: {\n show: true,\n width: 4,\n fill: '#40a9ff',\n radius: 2\n },\n // 节点上左右上下四个方向上的链接circle配置\n linkPoints: {\n top: false,\n right: false,\n bottom: false,\n left: false,\n // circle的大小\n size: 10,\n lineWidth: 1,\n fill: '#72CC4A',\n stroke: '#72CC4A'\n },\n // 节点中icon配置\n logoIcon: {\n // 是否显示icon,值为 false 则不渲染icon\n show: true,\n x: 0,\n y: 0,\n // icon的地址,字符串类型\n img: 'https://gw.alipayobjects.com/zos/basement_prod/4f81893c-1806-4de4-aff3-9a6b266bc8a2.svg',\n width: 16,\n height: 16,\n // 用于调整图标的左右位置\n offset: 0\n },\n // 节点中表示状态的icon配置\n stateIcon: {\n // 是否显示icon,值为 false 则不渲染icon\n show: true,\n x: 0,\n y: 0,\n // icon的地址,字符串类型\n img: 'https://gw.alipayobjects.com/zos/basement_prod/300a2523-67e0-4cbf-9d4a-67c077b40395.svg',\n width: 16,\n height: 16,\n // 用于调整图标的左右位置\n offset: -5\n },\n // 连接点,默认为左右\n // anchorPoints: [{ x: 0, y: 0.5 }, { x: 1, y: 0.5 }]\n anchorPoints: [[0, 0.5], [1, 0.5]]\n },\n shapeType: 'modelRect',\n drawShape: function drawShape(cfg, group) {\n var _a = (this.mergeStyle || this.getOptions(cfg)).preRect,\n preRect = _a === void 0 ? {} : _a;\n var style = this.getShapeStyle(cfg);\n var size = this.getSize(cfg);\n var width = size[0];\n var height = size[1];\n var keyShape = group.addShape('rect', {\n attrs: style,\n className: \"\".concat(this.type, \"-keyShape\"),\n name: \"\".concat(this.type, \"-keyShape\"),\n draggable: true\n });\n group['shapeMap'][\"\".concat(this.type, \"-keyShape\")] = keyShape;\n var preRectShow = preRect.show,\n preRectStyle = Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__rest\"])(preRect, [\"show\"]);\n if (preRectShow) {\n group['shapeMap']['pre-rect'] = group.addShape('rect', {\n attrs: Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__assign\"])({\n x: -width / 2,\n y: -height / 2,\n height: height\n }, preRectStyle),\n className: 'pre-rect',\n name: 'pre-rect',\n draggable: true\n });\n }\n this.drawLogoIcon(cfg, group);\n this.drawStateIcon(cfg, group);\n this.drawLinkPoints(cfg, group);\n return keyShape;\n },\n /**\n * 绘制模型矩形左边的logo图标\n * @param {Object} cfg 数据配置项\n * @param {Group} group Group实例\n */\n drawLogoIcon: function drawLogoIcon(cfg, group) {\n var _a = (this.mergeStyle || this.getOptions(cfg)).logoIcon,\n logoIcon = _a === void 0 ? {} : _a;\n var size = this.getSize(cfg);\n var width = size[0];\n if (logoIcon.show) {\n var w = logoIcon.width,\n h = logoIcon.height,\n x = logoIcon.x,\n y = logoIcon.y,\n offset = logoIcon.offset,\n text = logoIcon.text,\n logoIconStyle = Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__rest\"])(logoIcon, [\"width\", \"height\", \"x\", \"y\", \"offset\", \"text\"]);\n if (text) {\n group['shapeMap']['rect-logo-icon'] = group.addShape('text', {\n attrs: Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__assign\"])({\n x: 0,\n y: 0,\n fontSize: 12,\n fill: '#000',\n stroke: '#000',\n textBaseline: 'middle',\n textAlign: 'center'\n }, logoIconStyle),\n className: 'rect-logo-icon',\n name: 'rect-logo-icon',\n draggable: true\n });\n } else {\n group['shapeMap']['rect-logo-icon'] = group.addShape('image', {\n attrs: Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__assign\"])(Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__assign\"])({}, logoIconStyle), {\n x: x || -width / 2 + w + offset,\n y: y || -h / 2,\n width: w,\n height: h\n }),\n className: 'rect-logo-icon',\n name: 'rect-logo-icon',\n draggable: true\n });\n }\n }\n },\n /**\n * 绘制模型矩形右边的状态图标\n * @param {Object} cfg 数据配置项\n * @param {Group} group Group实例\n */\n drawStateIcon: function drawStateIcon(cfg, group) {\n var _a = (this.mergeStyle || this.getOptions(cfg)).stateIcon,\n stateIcon = _a === void 0 ? {} : _a;\n var size = this.getSize(cfg);\n var width = size[0];\n if (stateIcon.show) {\n var w = stateIcon.width,\n h = stateIcon.height,\n x = stateIcon.x,\n y = stateIcon.y,\n offset = stateIcon.offset,\n text = stateIcon.text,\n iconStyle = Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__rest\"])(stateIcon, [\"width\", \"height\", \"x\", \"y\", \"offset\", \"text\"]);\n if (text) {\n group['shapeMap']['rect-state-icon'] = group.addShape('text', {\n attrs: Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__assign\"])({\n x: 0,\n y: 0,\n fontSize: 12,\n fill: '#000',\n stroke: '#000',\n textBaseline: 'middle',\n textAlign: 'center'\n }, iconStyle),\n className: 'rect-state-icon',\n name: 'rect-state-icon',\n draggable: true\n });\n } else {\n group['shapeMap']['rect-state-icon'] = group.addShape('image', {\n attrs: Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__assign\"])(Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__assign\"])({}, iconStyle), {\n x: x || width / 2 - w + offset,\n y: y || -h / 2,\n width: w,\n height: h\n }),\n className: 'rect-state-icon',\n name: 'rect-state-icon',\n draggable: true\n });\n }\n }\n },\n /**\n * 绘制节点上的LinkPoints\n * @param {Object} cfg data数据配置项\n * @param {Group} group Group实例\n */\n drawLinkPoints: function drawLinkPoints(cfg, group) {\n var _a = (this.mergeStyle || this.getOptions(cfg)).linkPoints,\n linkPoints = _a === void 0 ? {} : _a;\n var top = linkPoints.top,\n left = linkPoints.left,\n right = linkPoints.right,\n bottom = linkPoints.bottom,\n markSize = linkPoints.size,\n markR = linkPoints.r,\n markStyle = Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__rest\"])(linkPoints, [\"top\", \"left\", \"right\", \"bottom\", \"size\", \"r\"]);\n var size = this.getSize(cfg);\n var width = size[0];\n var height = size[1];\n if (left) {\n // left circle\n group['shapeMap']['link-point-left'] = group.addShape('circle', {\n attrs: Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__assign\"])(Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__assign\"])({}, markStyle), {\n x: -width / 2,\n y: 0,\n r: markSize / 2 || markR || 5\n }),\n className: 'link-point-left',\n name: 'link-point-left',\n isAnchorPoint: true\n });\n }\n if (right) {\n // right circle\n group['shapeMap']['link-point-right'] = group.addShape('circle', {\n attrs: Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__assign\"])(Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__assign\"])({}, markStyle), {\n x: width / 2,\n y: 0,\n r: markSize / 2 || markR || 5\n }),\n className: 'link-point-right',\n name: 'link-point-right',\n isAnchorPoint: true\n });\n }\n if (top) {\n // top circle\n group['shapeMap']['link-point-top'] = group.addShape('circle', {\n attrs: Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__assign\"])(Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__assign\"])({}, markStyle), {\n x: 0,\n y: -height / 2,\n r: markSize / 2 || markR || 5\n }),\n className: 'link-point-top',\n name: 'link-point-top',\n isAnchorPoint: true\n });\n }\n if (bottom) {\n // bottom circle\n group['shapeMap']['link-point-bottom'] = group.addShape('circle', {\n attrs: Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__assign\"])(Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__assign\"])({}, markStyle), {\n x: 0,\n y: height / 2,\n r: markSize / 2 || markR || 5\n }),\n className: 'link-point-bottom',\n name: 'link-point-bottom',\n isAnchorPoint: true\n });\n }\n },\n drawLabel: function drawLabel(cfg, group) {\n var _a = this.getOptions(cfg),\n _b = _a.labelCfg,\n labelCfg = _b === void 0 ? {} : _b,\n _c = _a.logoIcon,\n logoIcon = _c === void 0 ? {} : _c,\n _d = _a.descriptionCfg,\n descriptionCfg = _d === void 0 ? {} : _d;\n var size = this.getSize(cfg);\n var width = size[0];\n var label = null;\n var show = logoIcon.show,\n w = logoIcon.width;\n var offsetX = -width / 2 + labelCfg.offset;\n if (show) {\n offsetX = -width / 2 + w + labelCfg.offset;\n }\n var fontStyle = labelCfg.style;\n var descriptionStyle = descriptionCfg.style,\n descriptionPaddingTop = descriptionCfg.paddingTop;\n if (Object(_antv_util__WEBPACK_IMPORTED_MODULE_1__[\"isString\"])(cfg.description)) {\n label = group.addShape('text', {\n attrs: Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__assign\"])(Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__assign\"])({}, fontStyle), {\n x: offsetX,\n y: -5,\n text: cfg.label\n }),\n className: 'text-shape',\n name: 'text-shape',\n draggable: true,\n labelRelated: true\n });\n group['shapeMap']['text-shape'] = label;\n group['shapeMap']['rect-description'] = group.addShape('text', {\n attrs: Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__assign\"])(Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__assign\"])({}, descriptionStyle), {\n x: offsetX,\n y: 17 + (descriptionPaddingTop || 0),\n text: cfg.description\n }),\n className: 'rect-description',\n name: 'rect-description',\n draggable: true,\n labelRelated: true\n });\n } else {\n label = group.addShape('text', {\n attrs: Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__assign\"])(Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__assign\"])({}, fontStyle), {\n x: offsetX,\n y: 7,\n text: cfg.label\n }),\n className: 'text-shape',\n name: 'text-shape',\n draggable: true,\n labelRelated: true\n });\n group['shapeMap']['text-shape'] = label;\n }\n return label;\n },\n /**\n * 获取节点的样式,供基于该节点自定义时使用\n * @param {Object} cfg 节点数据模型\n * @return {Object} 节点的样式\n */\n getShapeStyle: function getShapeStyle(cfg) {\n var defaultStyle = (this.mergeStyle || this.getOptions(cfg)).style;\n var strokeStyle = {\n stroke: cfg.color\n };\n // 如果设置了color,则覆盖默认的stroke属性\n var style = Object(_antv_util__WEBPACK_IMPORTED_MODULE_1__[\"mix\"])({}, defaultStyle, strokeStyle);\n var size = this.getSize(cfg);\n var width = style.width || size[0];\n var height = style.height || size[1];\n var styles = Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__assign\"])({\n x: -width / 2,\n y: -height / 2,\n width: width,\n height: height\n }, style);\n return styles;\n },\n update: function update(cfg, item) {\n var _a = this.mergeStyle || this.getOptions(cfg),\n _b = _a.style,\n style = _b === void 0 ? {} : _b,\n _c = _a.labelCfg,\n labelCfg = _c === void 0 ? {} : _c,\n _d = _a.descriptionCfg,\n descriptionCfg = _d === void 0 ? {} : _d;\n var size = this.getSize(cfg);\n var width = size[0];\n var height = size[1];\n var keyShape = item.get('keyShape');\n keyShape.attr(Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__assign\"])(Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__assign\"])({}, style), {\n x: -width / 2,\n y: -height / 2,\n width: width,\n height: height\n }));\n var group = item.getContainer();\n var logoIconShape = group['shapeMap']['rect-logo-icon'] || group.find(function (element) {\n return element.get('className') === 'rect-logo-icon';\n });\n var currentLogoIconAttr = logoIconShape ? logoIconShape.attr() : {};\n var logoIcon = Object(_antv_util__WEBPACK_IMPORTED_MODULE_1__[\"mix\"])({}, currentLogoIconAttr, cfg.logoIcon);\n var w = logoIcon.width;\n if (w === undefined) {\n w = this.options.logoIcon.width;\n }\n var show = cfg.logoIcon ? cfg.logoIcon.show : undefined;\n var offset = labelCfg.offset;\n var offsetX = -width / 2 + w + offset;\n if (!show && show !== undefined) {\n offsetX = -width / 2 + offset;\n }\n var label = group['shapeMap']['node-label'] || group.find(function (element) {\n return element.get('className') === 'node-label';\n });\n var description = group['shapeMap']['rect-description'] || group.find(function (element) {\n return element.get('className') === 'rect-description';\n });\n if (cfg.label) {\n if (!label) {\n group['shapeMap']['node-label'] = group.addShape('text', {\n attrs: Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__assign\"])(Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__assign\"])({}, labelCfg.style), {\n x: offsetX,\n y: cfg.description ? -5 : 7,\n text: cfg.label\n }),\n className: 'node-label',\n name: 'node-label',\n draggable: true,\n labelRelated: true\n });\n } else {\n var cfgStyle = cfg.labelCfg ? cfg.labelCfg.style : {};\n var labelStyle = Object(_antv_util__WEBPACK_IMPORTED_MODULE_1__[\"mix\"])({}, label.attr(), cfgStyle);\n if (cfg.label) labelStyle.text = cfg.label;\n labelStyle.x = offsetX;\n if (Object(_antv_util__WEBPACK_IMPORTED_MODULE_1__[\"isString\"])(cfg.description)) labelStyle.y = -5;\n if (description) {\n description.resetMatrix();\n description.attr({\n x: offsetX\n });\n }\n label.resetMatrix();\n label.attr(labelStyle);\n }\n }\n if (Object(_antv_util__WEBPACK_IMPORTED_MODULE_1__[\"isString\"])(cfg.description)) {\n var paddingTop = descriptionCfg.paddingTop;\n if (!description) {\n group['shapeMap']['rect-description'] = group.addShape('text', {\n attrs: Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__assign\"])(Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__assign\"])({}, descriptionCfg.style), {\n x: offsetX,\n y: 17 + (paddingTop || 0),\n text: cfg.description\n }),\n className: 'rect-description',\n name: 'rect-description',\n draggable: true,\n labelRelated: true\n });\n } else {\n var cfgStyle = cfg.descriptionCfg ? cfg.descriptionCfg.style : {};\n var descriptionStyle = Object(_antv_util__WEBPACK_IMPORTED_MODULE_1__[\"mix\"])({}, description.attr(), cfgStyle);\n if (Object(_antv_util__WEBPACK_IMPORTED_MODULE_1__[\"isString\"])(cfg.description)) descriptionStyle.text = cfg.description;\n descriptionStyle.x = offsetX;\n description.resetMatrix();\n description.attr(Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__assign\"])(Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__assign\"])({}, descriptionStyle), {\n y: 17 + (paddingTop || 0)\n }));\n }\n }\n var preRectShape = group['shapeMap']['pre-rect'] || group.find(function (element) {\n return element.get('className') === 'pre-rect';\n });\n if (preRectShape && !preRectShape.destroyed) {\n var preRect = Object(_antv_util__WEBPACK_IMPORTED_MODULE_1__[\"mix\"])({}, preRectShape.attr(), cfg.preRect);\n preRectShape.attr(Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__assign\"])(Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__assign\"])({}, preRect), {\n x: -width / 2,\n y: -height / 2,\n height: height\n }));\n }\n if (logoIconShape && !logoIconShape.destroyed) {\n if (!show && show !== undefined) {\n logoIconShape.remove();\n delete group['shapeMap']['pre-rect'];\n } else {\n var logoW = logoIcon.width,\n h = logoIcon.height,\n x = logoIcon.x,\n y = logoIcon.y,\n logoOffset = logoIcon.offset,\n logoIconStyle = Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__rest\"])(logoIcon, [\"width\", \"height\", \"x\", \"y\", \"offset\"]);\n logoIconShape.attr(Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__assign\"])(Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__assign\"])({}, logoIconStyle), {\n x: x || -width / 2 + logoW + logoOffset,\n y: y || -h / 2,\n width: logoW,\n height: h\n }));\n }\n } else if (show) {\n this.drawLogoIcon(cfg, group);\n }\n var stateIconShape = group['shapeMap']['rect-state-icon'] || group.find(function (element) {\n return element.get('className') === 'rect-state-icon';\n });\n var currentStateIconAttr = stateIconShape ? stateIconShape.attr() : {};\n var stateIcon = Object(_antv_util__WEBPACK_IMPORTED_MODULE_1__[\"mix\"])({}, currentStateIconAttr, cfg.stateIcon);\n if (stateIconShape) {\n if (!stateIcon.show && stateIcon.show !== undefined) {\n stateIconShape.remove();\n delete group['shapeMap']['rect-state-icon'];\n }\n var stateW = stateIcon.width,\n h = stateIcon.height,\n x = stateIcon.x,\n y = stateIcon.y,\n stateOffset = stateIcon.offset,\n stateIconStyle = Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__rest\"])(stateIcon, [\"width\", \"height\", \"x\", \"y\", \"offset\"]);\n stateIconShape.attr(Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__assign\"])(Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__assign\"])({}, stateIconStyle), {\n x: x || width / 2 - stateW + stateOffset,\n y: y || -h / 2,\n width: stateW,\n height: h\n }));\n } else if (stateIcon.show) {\n this.drawStateIcon(cfg, group);\n }\n this.updateLinkPoints(cfg, group);\n },\n getOptions: function getOptions(cfg, updateType) {\n if (updateType === 'move') return cfg;\n // different from baseShape, the config should be mixed when the updateType is not 'move'\n return Object(_antv_util__WEBPACK_IMPORTED_MODULE_1__[\"deepMix\"])({}, this.options, this.getCustomConfig(cfg) || {}, cfg);\n }\n}, 'single-node');\n\n//# sourceURL=webpack:///./node_modules/@antv/g6-element/es/nodes/modelRect.js?");
/***/ }),
/***/ "./node_modules/@antv/g6-element/es/nodes/rect.js":
/*!********************************************************!*\
!*** ./node_modules/@antv/g6-element/es/nodes/rect.js ***!
\********************************************************/
/*! no exports provided */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tslib */ \"./node_modules/tslib/tslib.es6.js\");\n/* harmony import */ var _antv_util__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @antv/util */ \"./node_modules/@antv/util/esm/index.js\");\n/* harmony import */ var _antv_g6_core__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @antv/g6-core */ \"./node_modules/@antv/g6-core/es/index.js\");\n\n\n\nObject(_antv_g6_core__WEBPACK_IMPORTED_MODULE_2__[\"registerNode\"])('rect', {\n // 自定义节点时的配置\n options: {\n size: [100, 30],\n style: {\n radius: 0,\n stroke: _antv_g6_core__WEBPACK_IMPORTED_MODULE_2__[\"BaseGlobal\"].defaultNode.style.stroke,\n fill: _antv_g6_core__WEBPACK_IMPORTED_MODULE_2__[\"BaseGlobal\"].defaultNode.style.fill,\n lineWidth: _antv_g6_core__WEBPACK_IMPORTED_MODULE_2__[\"BaseGlobal\"].defaultNode.style.lineWidth\n },\n // 文本样式配置\n labelCfg: {\n style: {\n fill: _antv_g6_core__WEBPACK_IMPORTED_MODULE_2__[\"BaseGlobal\"].nodeLabel.style.fill,\n fontSize: _antv_g6_core__WEBPACK_IMPORTED_MODULE_2__[\"BaseGlobal\"].nodeLabel.style.fontSize,\n fontFamily: _antv_g6_core__WEBPACK_IMPORTED_MODULE_2__[\"BaseGlobal\"].windowFontFamily\n }\n },\n // 节点上左右上下四个方向上的链接circle配置\n linkPoints: {\n top: false,\n right: false,\n bottom: false,\n left: false,\n // circle的大小\n size: _antv_g6_core__WEBPACK_IMPORTED_MODULE_2__[\"BaseGlobal\"].defaultNode.linkPoints.size,\n lineWidth: _antv_g6_core__WEBPACK_IMPORTED_MODULE_2__[\"BaseGlobal\"].defaultNode.linkPoints.lineWidth,\n fill: _antv_g6_core__WEBPACK_IMPORTED_MODULE_2__[\"BaseGlobal\"].defaultNode.linkPoints.fill,\n stroke: _antv_g6_core__WEBPACK_IMPORTED_MODULE_2__[\"BaseGlobal\"].defaultNode.linkPoints.stroke\n },\n // 节点中icon配置\n icon: {\n // 是否显示icon,值为 false 则不渲染icon\n show: false,\n // icon的地址,字符串类型\n img: 'https://gw.alipayobjects.com/zos/bmw-prod/5d015065-8505-4e7a-baec-976f81e3c41d.svg',\n width: 20,\n height: 20\n },\n // 连接点,默认为左右\n // anchorPoints: [{ x: 0, y: 0.5 }, { x: 1, y: 0.5 }]\n anchorPoints: [[0, 0.5], [1, 0.5]],\n stateStyles: Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__assign\"])({}, _antv_g6_core__WEBPACK_IMPORTED_MODULE_2__[\"BaseGlobal\"].nodeStateStyles)\n },\n shapeType: 'rect',\n labelPosition: 'center',\n drawShape: function drawShape(cfg, group) {\n var style = this.getShapeStyle(cfg);\n var keyShape = group.addShape('rect', {\n attrs: style,\n className: \"\".concat(this.type, \"-keyShape\"),\n name: \"\".concat(this.type, \"-keyShape\"),\n draggable: true\n });\n group['shapeMap'][\"\".concat(this.type, \"-keyShape\")] = keyShape;\n this.drawLinkPoints(cfg, group);\n return keyShape;\n },\n /**\n * 绘制节点上的LinkPoints\n * @param {Object} cfg data数据配置项\n * @param {Group} group Group实例\n */\n drawLinkPoints: function drawLinkPoints(cfg, group) {\n var _a = (this.mergeStyle || this.getOptions(cfg)).linkPoints,\n linkPoints = _a === void 0 ? {} : _a;\n var top = linkPoints.top,\n left = linkPoints.left,\n right = linkPoints.right,\n bottom = linkPoints.bottom,\n markSize = linkPoints.size,\n markR = linkPoints.r,\n markStyle = Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__rest\"])(linkPoints, [\"top\", \"left\", \"right\", \"bottom\", \"size\", \"r\"]);\n var size = this.getSize(cfg);\n var width = size[0];\n var height = size[1];\n if (left) {\n // left circle\n group['shapeMap']['link-point-left'] = group.addShape('circle', {\n attrs: Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__assign\"])(Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__assign\"])({}, markStyle), {\n x: -width / 2,\n y: 0,\n r: markSize / 2 || markR || 5\n }),\n className: 'link-point-left',\n name: 'link-point-left',\n isAnchorPoint: true\n });\n }\n if (right) {\n // right circle\n group['shapeMap']['link-point-right'] = group.addShape('circle', {\n attrs: Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__assign\"])(Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__assign\"])({}, markStyle), {\n x: width / 2,\n y: 0,\n r: markSize / 2 || markR || 5\n }),\n className: 'link-point-right',\n name: 'link-point-right',\n isAnchorPoint: true\n });\n }\n if (top) {\n // top circle\n group['shapeMap']['link-point-top'] = group.addShape('circle', {\n attrs: Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__assign\"])(Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__assign\"])({}, markStyle), {\n x: 0,\n y: -height / 2,\n r: markSize / 2 || markR || 5\n }),\n className: 'link-point-top',\n name: 'link-point-top',\n isAnchorPoint: true\n });\n }\n if (bottom) {\n // bottom circle\n group['shapeMap']['link-point-bottom'] = group.addShape('circle', {\n attrs: Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__assign\"])(Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__assign\"])({}, markStyle), {\n x: 0,\n y: height / 2,\n r: markSize / 2 || markR || 5\n }),\n className: 'link-point-bottom',\n name: 'link-point-bottom',\n isAnchorPoint: true\n });\n }\n },\n /**\n * 获取节点的样式,供基于该节点自定义时使用\n * @param {Object} cfg 节点数据模型\n * @return {Object} 节点的样式\n */\n getShapeStyle: function getShapeStyle(cfg) {\n var defaultStyle = (this.mergeStyle || this.getOptions(cfg)).style;\n var strokeStyle = {\n stroke: cfg.color\n };\n // 如果设置了color,则覆盖默认的stroke属性\n var style = Object(_antv_util__WEBPACK_IMPORTED_MODULE_1__[\"mix\"])({}, defaultStyle, strokeStyle);\n var size = this.getSize(cfg);\n var width = style.width || size[0];\n var height = style.height || size[1];\n var styles = Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__assign\"])({\n x: -width / 2,\n y: -height / 2,\n width: width,\n height: height\n }, style);\n return styles;\n },\n update: function update(cfg, item, updateType) {\n var group = item.getContainer();\n // 这里不传 cfg 参数是因为 cfg.style 需要最后覆盖样式\n var defaultStyle = this.getOptions({}).style;\n var size = this.getSize(cfg);\n var keyShape = item.get('keyShape');\n if (!cfg.size) {\n size[0] = keyShape.attr('width') || defaultStyle.width;\n size[1] = keyShape.attr('height') || defaultStyle.height;\n }\n // 下面这些属性需要覆盖默认样式与目前样式,但若在 cfg 中有指定则应该被 cfg 的相应配置覆盖。\n var strokeStyle = {\n stroke: cfg.color,\n x: -size[0] / 2,\n y: -size[1] / 2,\n width: size[0],\n height: size[1]\n };\n // 与 getShapeStyle 不同在于,update 时需要获取到当前的 style 进行融合。即新传入的配置项中没有涉及的属性,保留当前的配置。\n var style = Object(_antv_util__WEBPACK_IMPORTED_MODULE_1__[\"mix\"])({}, defaultStyle, keyShape.attr(), strokeStyle);\n style = Object(_antv_util__WEBPACK_IMPORTED_MODULE_1__[\"mix\"])(style, cfg.style);\n this.updateShape(cfg, item, style, false, updateType);\n this.updateLinkPoints(cfg, group);\n }\n}, 'single-node');\n\n//# sourceURL=webpack:///./node_modules/@antv/g6-element/es/nodes/rect.js?");
/***/ }),
/***/ "./node_modules/@antv/g6-element/es/nodes/star.js":
/*!********************************************************!*\
!*** ./node_modules/@antv/g6-element/es/nodes/star.js ***!
\********************************************************/
/*! no exports provided */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tslib */ \"./node_modules/tslib/tslib.es6.js\");\n/* harmony import */ var _antv_g6_core__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @antv/g6-core */ \"./node_modules/@antv/g6-core/es/index.js\");\n/* harmony import */ var _antv_util__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @antv/util */ \"./node_modules/@antv/util/esm/index.js\");\n\n\n\n// 五角星shape\nObject(_antv_g6_core__WEBPACK_IMPORTED_MODULE_1__[\"registerNode\"])('star', {\n // 自定义节点时的配置\n options: {\n size: 60,\n style: {\n stroke: _antv_g6_core__WEBPACK_IMPORTED_MODULE_1__[\"BaseGlobal\"].defaultNode.style.stroke,\n fill: _antv_g6_core__WEBPACK_IMPORTED_MODULE_1__[\"BaseGlobal\"].defaultNode.style.fill,\n lineWidth: _antv_g6_core__WEBPACK_IMPORTED_MODULE_1__[\"BaseGlobal\"].defaultNode.style.lineWidth\n },\n labelCfg: {\n style: {\n fill: _antv_g6_core__WEBPACK_IMPORTED_MODULE_1__[\"BaseGlobal\"].nodeLabel.style.fill,\n fontSize: _antv_g6_core__WEBPACK_IMPORTED_MODULE_1__[\"BaseGlobal\"].nodeLabel.style.fontSize,\n fontFamily: _antv_g6_core__WEBPACK_IMPORTED_MODULE_1__[\"BaseGlobal\"].windowFontFamily\n }\n },\n // 节点上左右上下四个方向上的链接circle配置\n linkPoints: {\n top: false,\n right: false,\n bottom: false,\n left: false,\n // circle的大小\n size: _antv_g6_core__WEBPACK_IMPORTED_MODULE_1__[\"BaseGlobal\"].defaultNode.linkPoints.size,\n lineWidth: _antv_g6_core__WEBPACK_IMPORTED_MODULE_1__[\"BaseGlobal\"].defaultNode.linkPoints.lineWidth,\n fill: _antv_g6_core__WEBPACK_IMPORTED_MODULE_1__[\"BaseGlobal\"].defaultNode.linkPoints.fill,\n stroke: _antv_g6_core__WEBPACK_IMPORTED_MODULE_1__[\"BaseGlobal\"].defaultNode.linkPoints.stroke\n },\n // 节点中icon配置\n icon: {\n // 是否显示icon,值为 false 则不渲染icon\n show: false,\n // icon的地址,字符串类型\n img: 'https://gw.alipayobjects.com/zos/bmw-prod/5d015065-8505-4e7a-baec-976f81e3c41d.svg',\n width: 20,\n height: 20\n },\n stateStyles: Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__assign\"])({}, _antv_g6_core__WEBPACK_IMPORTED_MODULE_1__[\"BaseGlobal\"].nodeStateStyles)\n },\n shapeType: 'star',\n // 文本位置\n labelPosition: 'center',\n drawShape: function drawShape(cfg, group) {\n var _a = (this.mergeStyle || this.getOptions(cfg)).icon,\n icon = _a === void 0 ? {} : _a;\n var style = this.getShapeStyle(cfg);\n var keyShape = group.addShape('path', {\n attrs: style,\n className: \"\".concat(this.type, \"-keyShape\"),\n name: \"\".concat(this.type, \"-keyShape\"),\n draggable: true\n });\n group['shapeMap'][\"\".concat(this.type, \"-keyShape\")] = keyShape;\n var w = icon.width,\n h = icon.height,\n show = icon.show,\n text = icon.text;\n if (show) {\n if (text) {\n group['shapeMap'][\"\".concat(this.type, \"-icon\")] = group.addShape('text', {\n attrs: Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__assign\"])({\n x: 0,\n y: 0,\n fontSize: 12,\n fill: '#000',\n stroke: '#000',\n textBaseline: 'middle',\n textAlign: 'center'\n }, icon),\n className: \"\".concat(this.type, \"-icon\"),\n name: \"\".concat(this.type, \"-icon\"),\n draggable: true\n });\n } else {\n group['shapeMap'][\"\".concat(this.type, \"-icon\")] = group.addShape('image', {\n attrs: Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__assign\"])({\n x: -w / 2,\n y: -h / 2\n }, icon),\n className: \"\".concat(this.type, \"-icon\"),\n name: \"\".concat(this.type, \"-icon\"),\n draggable: true\n });\n }\n }\n this.drawLinkPoints(cfg, group);\n return keyShape;\n },\n /**\n * 绘制节点上的LinkPoints\n * @param {Object} cfg data数据配置项\n * @param {Group} group Group实例\n */\n drawLinkPoints: function drawLinkPoints(cfg, group) {\n var _a = (this.mergeStyle || this.getOptions(cfg)).linkPoints,\n linkPoints = _a === void 0 ? {} : _a;\n var top = linkPoints.top,\n left = linkPoints.left,\n right = linkPoints.right,\n leftBottom = linkPoints.leftBottom,\n rightBottom = linkPoints.rightBottom,\n markSize = linkPoints.size,\n markR = linkPoints.r,\n markStyle = Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__rest\"])(linkPoints, [\"top\", \"left\", \"right\", \"leftBottom\", \"rightBottom\", \"size\", \"r\"]);\n var size = this.getSize(cfg);\n var outerR = size[0];\n if (right) {\n // right circle\n // up down left right 四个方向的坐标均不相同\n var x1 = Math.cos((18 + 72 * 0) / 180 * Math.PI) * outerR;\n var y1 = Math.sin((18 + 72 * 0) / 180 * Math.PI) * outerR;\n group['shapeMap']['link-point-right'] = group.addShape('circle', {\n attrs: Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__assign\"])(Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__assign\"])({}, markStyle), {\n x: x1,\n y: -y1,\n r: markSize / 2 || markR || 5\n }),\n className: 'link-point-right',\n name: 'link-point-right'\n });\n }\n if (top) {\n // up down left right 四个方向的坐标均不相同\n var x1 = Math.cos((18 + 72 * 1) / 180 * Math.PI) * outerR;\n var y1 = Math.sin((18 + 72 * 1) / 180 * Math.PI) * outerR;\n // top circle\n group['shapeMap']['link-point-top'] = group.addShape('circle', {\n attrs: Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__assign\"])(Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__assign\"])({}, markStyle), {\n x: x1,\n y: -y1,\n r: markSize / 2 || markR || 5\n }),\n className: 'link-point-top',\n name: 'link-point-top'\n });\n }\n if (left) {\n // up down left right 四个方向的坐标均不相同\n var x1 = Math.cos((18 + 72 * 2) / 180 * Math.PI) * outerR;\n var y1 = Math.sin((18 + 72 * 2) / 180 * Math.PI) * outerR;\n // left circle\n group['shapeMap']['link-point-left'] = group.addShape('circle', {\n attrs: Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__assign\"])(Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__assign\"])({}, markStyle), {\n x: x1,\n y: -y1,\n r: markSize / 2 || markR || 5\n }),\n className: 'link-point-left',\n name: 'link-point-left'\n });\n }\n if (leftBottom) {\n // up down left right 四个方向的坐标均不相同\n var x1 = Math.cos((18 + 72 * 3) / 180 * Math.PI) * outerR;\n var y1 = Math.sin((18 + 72 * 3) / 180 * Math.PI) * outerR;\n // left bottom circle\n group['shapeMap']['link-point-bottom'] = group.addShape('circle', {\n attrs: Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__assign\"])(Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__assign\"])({}, markStyle), {\n x: x1,\n y: -y1,\n r: markSize / 2 || markR || 5\n }),\n className: 'link-point-left-bottom',\n name: 'link-point-left-bottom'\n });\n }\n if (rightBottom) {\n // up down left right 四个方向的坐标均不相同\n var x1 = Math.cos((18 + 72 * 4) / 180 * Math.PI) * outerR;\n var y1 = Math.sin((18 + 72 * 4) / 180 * Math.PI) * outerR;\n // left bottom circle\n group['shapeMap']['link-point-right-bottom'] = group.addShape('circle', {\n attrs: Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__assign\"])(Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__assign\"])({}, markStyle), {\n x: x1,\n y: -y1,\n r: markSize / 2 || markR || 5\n }),\n className: 'link-point-right-bottom',\n name: 'link-point-right-bottom'\n });\n }\n },\n getPath: function getPath(cfg) {\n var size = this.getSize(cfg);\n var outerR = size[0];\n var defaultInnerR = outerR * 3 / 8;\n var innerR = cfg.innerR || defaultInnerR;\n return _antv_g6_core__WEBPACK_IMPORTED_MODULE_1__[\"Util\"].getStarPath(outerR, innerR);\n },\n /**\n * 获取节点的样式,供基于该节点自定义时使用\n * @param {Object} cfg 节点数据模型\n * @return {Object} 节点的样式\n */\n getShapeStyle: function getShapeStyle(cfg) {\n var defaultStyle = (this.mergeStyle || this.getOptions(cfg)).style;\n var strokeStyle = {\n stroke: cfg.color\n };\n // 如果设置了color,则覆盖原来默认的 stroke 属性。但 cfg 中但 stroke 属性优先级更高\n var style = Object(_antv_util__WEBPACK_IMPORTED_MODULE_2__[\"mix\"])({}, defaultStyle, strokeStyle);\n var path = this.getPath(cfg);\n var styles = Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__assign\"])({\n path: path\n }, style);\n return styles;\n },\n update: function update(cfg, item, updateType) {\n var group = item.getContainer();\n // 这里不传 cfg 参数是因为 cfg.style 需要最后覆盖样式\n var defaultStyle = this.getOptions({}).style;\n var path = this.getPath(cfg);\n // 下面这些属性需要覆盖默认样式与目前样式,但若在 cfg 中有指定则应该被 cfg 的相应配置覆盖。\n var strokeStyle = {\n stroke: cfg.color,\n path: path\n };\n // 与 getShapeStyle 不同在于,update 时需要获取到当前的 style 进行融合。即新传入的配置项中没有涉及的属性,保留当前的配置。\n var keyShape = item.get('keyShape');\n var style = Object(_antv_util__WEBPACK_IMPORTED_MODULE_2__[\"mix\"])({}, defaultStyle, keyShape.attr(), strokeStyle);\n style = Object(_antv_util__WEBPACK_IMPORTED_MODULE_2__[\"mix\"])(style, cfg.style);\n this.updateShape(cfg, item, style, true, updateType);\n this.updateLinkPoints(cfg, group);\n },\n /**\n * 更新linkPoints\n * @param {Object} cfg 节点数据配置项\n * @param {Group} group Item所在的group\n */\n updateLinkPoints: function updateLinkPoints(cfg, group) {\n var defaultLinkPoints = this.getOptions({}).linkPoints;\n var markLeft = group['shapeMap']['link-point-left'] || group.find(function (element) {\n return element.get('className') === 'link-point-left';\n });\n var markRight = group['shapeMap']['link-point-right'] || group.find(function (element) {\n return element.get('className') === 'link-point-right';\n });\n var markTop = group['shapeMap']['link-point-top'] || group.find(function (element) {\n return element.get('className') === 'link-point-top';\n });\n var markLeftBottom = group['shapeMap']['link-point-left-bottom'] || group.find(function (element) {\n return element.get('className') === 'link-point-left-bottom';\n });\n var markRightBottom = group['shapeMap']['link-point-left-bottom'] || group.find(function (element) {\n return element.get('className') === 'link-point-right-bottom';\n });\n var currentLinkPoints = defaultLinkPoints;\n var existLinkPoint = markLeft || markRight || markTop || markLeftBottom || markRightBottom;\n if (existLinkPoint) {\n currentLinkPoints = existLinkPoint.attr();\n }\n var linkPoints = Object(_antv_util__WEBPACK_IMPORTED_MODULE_2__[\"mix\"])({}, currentLinkPoints, cfg.linkPoints);\n var markFill = linkPoints.fill,\n markStroke = linkPoints.stroke,\n borderWidth = linkPoints.lineWidth;\n var markSize = linkPoints.size / 2;\n if (!markSize) markSize = linkPoints.r;\n var _a = cfg.linkPoints ? cfg.linkPoints : {\n left: undefined,\n right: undefined,\n top: undefined,\n leftBottom: undefined,\n rightBottom: undefined\n },\n left = _a.left,\n right = _a.right,\n top = _a.top,\n leftBottom = _a.leftBottom,\n rightBottom = _a.rightBottom;\n var size = this.getSize(cfg);\n var outerR = size[0];\n var styles = {\n r: markSize,\n fill: markFill,\n stroke: markStroke,\n lineWidth: borderWidth\n };\n var x = Math.cos((18 + 72 * 0) / 180 * Math.PI) * outerR;\n var y = Math.sin((18 + 72 * 0) / 180 * Math.PI) * outerR;\n if (markRight) {\n if (!right && right !== undefined) {\n markRight.remove();\n delete group['shapeMap']['link-point-right'];\n } else {\n markRight.attr(Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__assign\"])(Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__assign\"])({}, styles), {\n x: x,\n y: -y\n }));\n }\n } else if (right) {\n group['shapeMap']['link-point-right'] = group.addShape('circle', {\n attrs: Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__assign\"])(Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__assign\"])({}, styles), {\n x: x,\n y: -y\n }),\n className: 'link-point-right',\n name: 'link-point-right',\n isAnchorPoint: true\n });\n }\n x = Math.cos((18 + 72 * 1) / 180 * Math.PI) * outerR;\n y = Math.sin((18 + 72 * 1) / 180 * Math.PI) * outerR;\n if (markTop) {\n if (!top && top !== undefined) {\n markTop.remove();\n delete group['shapeMap']['link-point-top'];\n } else {\n markTop.attr(Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__assign\"])(Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__assign\"])({}, styles), {\n x: x,\n y: -y\n }));\n }\n } else if (top) {\n group['shapeMap']['link-point-top'] = group.addShape('circle', {\n attrs: Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__assign\"])(Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__assign\"])({}, styles), {\n x: x,\n y: -y\n }),\n className: 'link-point-top',\n name: 'link-point-top',\n isAnchorPoint: true\n });\n }\n x = Math.cos((18 + 72 * 2) / 180 * Math.PI) * outerR;\n y = Math.sin((18 + 72 * 2) / 180 * Math.PI) * outerR;\n if (markLeft) {\n if (!left && left !== undefined) {\n markLeft.remove();\n delete group['shapeMap']['link-point-left'];\n } else {\n markLeft.attr(Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__assign\"])(Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__assign\"])({}, styles), {\n x: x,\n y: -y\n }));\n }\n } else if (left) {\n group['shapeMap']['link-point-left'] = group.addShape('circle', {\n attrs: Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__assign\"])(Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__assign\"])({}, styles), {\n x: x,\n y: -y\n }),\n className: 'link-point-left',\n name: 'link-point-left',\n isAnchorPoint: true\n });\n }\n x = Math.cos((18 + 72 * 3) / 180 * Math.PI) * outerR;\n y = Math.sin((18 + 72 * 3) / 180 * Math.PI) * outerR;\n if (markLeftBottom) {\n if (!leftBottom && leftBottom !== undefined) {\n markLeftBottom.remove();\n delete group['shapeMap']['link-point-left-bottom'];\n } else {\n markLeftBottom.attr(Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__assign\"])(Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__assign\"])({}, styles), {\n x: x,\n y: -y\n }));\n }\n } else if (leftBottom) {\n group['shapeMap']['link-point-left-bottom'] = group.addShape('circle', {\n attrs: Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__assign\"])(Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__assign\"])({}, styles), {\n x: x,\n y: -y\n }),\n className: 'link-point-left-bottom',\n name: 'link-point-left-bottom',\n isAnchorPoint: true\n });\n }\n x = Math.cos((18 + 72 * 4) / 180 * Math.PI) * outerR;\n y = Math.sin((18 + 72 * 4) / 180 * Math.PI) * outerR;\n if (markRightBottom) {\n if (!rightBottom && rightBottom !== undefined) {\n markRightBottom.remove();\n delete group['shapeMap']['link-point-right-bottom'];\n } else {\n markRightBottom.attr(Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__assign\"])(Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__assign\"])({}, styles), {\n x: x,\n y: -y\n }));\n }\n } else if (rightBottom) {\n group['shapeMap']['link-point-right-bottom'] = group.addShape('circle', {\n attrs: Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__assign\"])(Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__assign\"])({}, styles), {\n x: x,\n y: -y\n }),\n className: 'link-point-right-bottom',\n name: 'link-point-right-bottom',\n isAnchorPoint: true\n });\n }\n }\n}, 'single-node');\n\n//# sourceURL=webpack:///./node_modules/@antv/g6-element/es/nodes/star.js?");
/***/ }),
/***/ "./node_modules/@antv/g6-element/es/nodes/triangle.js":
/*!************************************************************!*\
!*** ./node_modules/@antv/g6-element/es/nodes/triangle.js ***!
\************************************************************/
/*! no exports provided */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tslib */ \"./node_modules/tslib/tslib.es6.js\");\n/* harmony import */ var _antv_g6_core__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @antv/g6-core */ \"./node_modules/@antv/g6-core/es/index.js\");\n/* harmony import */ var _antv_util__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @antv/util */ \"./node_modules/@antv/util/esm/index.js\");\n\n\n\n// 三角形\nObject(_antv_g6_core__WEBPACK_IMPORTED_MODULE_1__[\"registerNode\"])('triangle', {\n // 自定义节点时的配置\n options: {\n size: 40,\n direction: 'up',\n style: {\n stroke: _antv_g6_core__WEBPACK_IMPORTED_MODULE_1__[\"BaseGlobal\"].defaultNode.style.stroke,\n fill: _antv_g6_core__WEBPACK_IMPORTED_MODULE_1__[\"BaseGlobal\"].defaultNode.style.fill,\n lineWidth: _antv_g6_core__WEBPACK_IMPORTED_MODULE_1__[\"BaseGlobal\"].defaultNode.style.lineWidth\n },\n labelCfg: {\n style: {\n fill: _antv_g6_core__WEBPACK_IMPORTED_MODULE_1__[\"BaseGlobal\"].nodeLabel.style.fill,\n fontSize: _antv_g6_core__WEBPACK_IMPORTED_MODULE_1__[\"BaseGlobal\"].nodeLabel.style.fontSize\n },\n offset: 15\n },\n // 节点上左右上下四个方向上的链接circle配置\n linkPoints: {\n top: false,\n right: false,\n bottom: false,\n left: false,\n // circle的大小\n size: _antv_g6_core__WEBPACK_IMPORTED_MODULE_1__[\"BaseGlobal\"].defaultNode.linkPoints.size,\n lineWidth: _antv_g6_core__WEBPACK_IMPORTED_MODULE_1__[\"BaseGlobal\"].defaultNode.linkPoints.lineWidth,\n fill: _antv_g6_core__WEBPACK_IMPORTED_MODULE_1__[\"BaseGlobal\"].defaultNode.linkPoints.fill,\n stroke: _antv_g6_core__WEBPACK_IMPORTED_MODULE_1__[\"BaseGlobal\"].defaultNode.linkPoints.stroke\n },\n // 节点中icon配置\n icon: {\n // 是否显示icon,值为 false 则不渲染icon\n show: false,\n // icon的地址,字符串类型\n img: 'https://gw.alipayobjects.com/zos/bmw-prod/5d015065-8505-4e7a-baec-976f81e3c41d.svg',\n width: 20,\n height: 20,\n offset: 6\n },\n stateStyles: Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__assign\"])({}, _antv_g6_core__WEBPACK_IMPORTED_MODULE_1__[\"BaseGlobal\"].nodeStateStyles)\n },\n shapeType: 'triangle',\n // 文本位置\n labelPosition: 'bottom',\n drawShape: function drawShape(cfg, group) {\n var _a = this.mergeStyle || this.getOptions(cfg),\n _b = _a.icon,\n icon = _b === void 0 ? {} : _b,\n defaultDirection = _a.direction;\n var style = this.getShapeStyle(cfg);\n var direction = cfg.direction || defaultDirection;\n var keyShape = group.addShape('path', {\n attrs: style,\n className: \"\".concat(this.type, \"-keyShape\"),\n name: \"\".concat(this.type, \"-keyShape\"),\n draggable: true\n });\n group['shapeMap'][\"\".concat(this.type, \"-keyShape\")] = keyShape;\n var w = icon.width,\n h = icon.height,\n show = icon.show,\n offset = icon.offset,\n text = icon.text;\n if (show) {\n if (text) {\n group['shapeMap'][\"\".concat(this.type, \"-icon\")] = group.addShape('text', {\n attrs: Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__assign\"])({\n x: 0,\n y: 0,\n fontSize: 12,\n fill: '#000',\n stroke: '#000',\n textBaseline: 'middle',\n textAlign: 'center'\n }, icon),\n className: \"\".concat(this.type, \"-icon\"),\n name: \"\".concat(this.type, \"-icon\"),\n draggable: true\n });\n } else {\n var iconW = -w / 2;\n var iconH = -h / 2;\n if (direction === 'up' || direction === 'down') {\n iconH += offset;\n }\n if (direction === 'left' || direction === 'right') {\n iconW += offset;\n }\n group['shapeMap'][\"\".concat(this.type, \"-icon\")] = group.addShape('image', {\n attrs: Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__assign\"])({\n x: iconW,\n y: iconH\n }, icon),\n className: \"\".concat(this.type, \"-icon\"),\n name: \"\".concat(this.type, \"-icon\"),\n draggable: true\n });\n }\n }\n this.drawLinkPoints(cfg, group);\n return keyShape;\n },\n /**\n * 绘制节点上的LinkPoints\n * @param {Object} cfg data数据配置项\n * @param {Group} group Group实例\n */\n drawLinkPoints: function drawLinkPoints(cfg, group) {\n var _a = this.mergeStyle || this.getOptions(cfg),\n _b = _a.linkPoints,\n linkPoints = _b === void 0 ? {} : _b,\n defaultDirection = _a.direction;\n var direction = cfg.direction || defaultDirection;\n var top = linkPoints.top,\n left = linkPoints.left,\n right = linkPoints.right,\n bottom = linkPoints.bottom,\n markSize = linkPoints.size,\n markR = linkPoints.r,\n markStyle = Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__rest\"])(linkPoints, [\"top\", \"left\", \"right\", \"bottom\", \"size\", \"r\"]);\n var size = this.getSize(cfg);\n var len = size[0];\n if (left) {\n // up down left right 四个方向的坐标均不相同\n var leftPos = null;\n var diffY = len * Math.sin(1 / 3 * Math.PI);\n var r = len * Math.sin(1 / 3 * Math.PI);\n if (direction === 'up') {\n leftPos = [-r, diffY];\n } else if (direction === 'down') {\n leftPos = [-r, -diffY];\n } else if (direction === 'left') {\n leftPos = [-r, r - diffY];\n }\n if (leftPos) {\n // left circle\n group['shapeMap']['link-point-left'] = group.addShape('circle', {\n attrs: Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__assign\"])(Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__assign\"])({}, markStyle), {\n x: leftPos[0],\n y: leftPos[1],\n r: markSize / 2 || markR || 5\n }),\n className: 'link-point-left',\n name: 'link-point-left'\n });\n }\n }\n if (right) {\n // right circle\n // up down left right 四个方向的坐标均不相同\n var rightPos = null;\n var diffY = len * Math.sin(1 / 3 * Math.PI);\n var r = len * Math.sin(1 / 3 * Math.PI);\n if (direction === 'up') {\n rightPos = [r, diffY];\n } else if (direction === 'down') {\n rightPos = [r, -diffY];\n } else if (direction === 'right') {\n rightPos = [r, r - diffY];\n }\n if (rightPos) {\n group['shapeMap']['link-point-right'] = group.addShape('circle', {\n attrs: Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__assign\"])(Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__assign\"])({}, markStyle), {\n x: rightPos[0],\n y: rightPos[1],\n r: markSize / 2 || markR || 5\n }),\n className: 'link-point-right',\n name: 'link-point-right'\n });\n }\n }\n if (top) {\n // up down left right 四个方向的坐标均不相同\n var topPos = null;\n var diffY = len * Math.sin(1 / 3 * Math.PI);\n var r = len * Math.sin(1 / 3 * Math.PI);\n if (direction === 'up') {\n topPos = [r - diffY, -diffY];\n } else if (direction === 'left') {\n topPos = [r, -diffY];\n } else if (direction === 'right') {\n topPos = [-r, -diffY];\n }\n if (topPos) {\n // top circle\n group['shapeMap']['link-point-top'] = group.addShape('circle', {\n attrs: Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__assign\"])(Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__assign\"])({}, markStyle), {\n x: topPos[0],\n y: topPos[1],\n r: markSize / 2 || markR || 5\n }),\n className: 'link-point-top',\n name: 'link-point-top'\n });\n }\n }\n if (bottom) {\n // up down left right 四个方向的坐标均不相同\n var bottomPos = null;\n var diffY = len * Math.sin(1 / 3 * Math.PI);\n var r = len * Math.sin(1 / 3 * Math.PI);\n if (direction === 'down') {\n bottomPos = [-r + diffY, diffY];\n } else if (direction === 'left') {\n bottomPos = [r, diffY];\n } else if (direction === 'right') {\n bottomPos = [-r, diffY];\n }\n if (bottomPos) {\n // bottom circle\n group['shapeMap']['link-point-bottom'] = group.addShape('circle', {\n attrs: Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__assign\"])(Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__assign\"])({}, markStyle), {\n x: bottomPos[0],\n y: bottomPos[1],\n r: markSize / 2 || markR || 5\n }),\n className: 'link-point-bottom',\n name: 'link-point-bottom'\n });\n }\n }\n },\n getPath: function getPath(cfg) {\n var defaultDirection = (this.mergeStyle || this.getOptions(cfg)).direction;\n var direction = cfg.direction || defaultDirection;\n var size = this.getSize(cfg);\n var len = size[0];\n var diffY = len * Math.sin(1 / 3 * Math.PI);\n var r = len * Math.sin(1 / 3 * Math.PI);\n var path = [['M', -r, diffY], ['L', 0, -diffY], ['L', r, diffY], ['Z'] // 封闭\n ];\n\n if (direction === 'down') {\n path = [['M', -r, -diffY], ['L', r, -diffY], ['L', 0, diffY], ['Z'] // 封闭\n ];\n } else if (direction === 'left') {\n path = [['M', -r, r - diffY], ['L', r, -r], ['L', r, r], ['Z'] // 封闭\n ];\n } else if (direction === 'right') {\n path = [['M', r, r - diffY], ['L', -r, r], ['L', -r, -r], ['Z'] // 封闭\n ];\n }\n\n return path;\n },\n /**\n * 获取节点的样式,供基于该节点自定义时使用\n * @param {Object} cfg 节点数据模型\n * @return {Object} 节点的样式\n */\n getShapeStyle: function getShapeStyle(cfg) {\n var defaultStyle = (this.mergeStyle || this.getOptions(cfg)).style;\n var strokeStyle = {\n stroke: cfg.color\n };\n // 如果设置了color,则覆盖默认的stroke属性\n var style = Object(_antv_util__WEBPACK_IMPORTED_MODULE_2__[\"mix\"])({}, defaultStyle, strokeStyle);\n var path = this.getPath(cfg);\n var styles = Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__assign\"])({\n path: path\n }, style);\n return styles;\n },\n update: function update(cfg, item, updateType) {\n var group = item.getContainer();\n // 这里不传 cfg 参数是因为 cfg.style 需要最后覆盖样式\n var defaultStyle = this.getOptions({}).style;\n var path = this.getPath(cfg);\n // 下面这些属性需要覆盖默认样式与目前样式,但若在 cfg 中有指定则应该被 cfg 的相应配置覆盖。\n var strokeStyle = {\n stroke: cfg.color,\n path: path\n };\n // 与 getShapeStyle 不同在于,update 时需要获取到当前的 style 进行融合。即新传入的配置项中没有涉及的属性,保留当前的配置。\n var keyShape = item.get('keyShape');\n var style = Object(_antv_util__WEBPACK_IMPORTED_MODULE_2__[\"mix\"])({}, defaultStyle, keyShape.attr(), strokeStyle);\n style = Object(_antv_util__WEBPACK_IMPORTED_MODULE_2__[\"mix\"])(style, cfg.style);\n this.updateShape(cfg, item, style, true, updateType);\n this.updateLinkPoints(cfg, group);\n },\n /**\n * 更新linkPoints\n * @param {Object} cfg 节点数据配置项\n * @param {Group} group Item所在的group\n */\n updateLinkPoints: function updateLinkPoints(cfg, group) {\n var _a = this.getOptions({}),\n defaultLinkPoints = _a.linkPoints,\n defaultDirection = _a.direction;\n var direction = cfg.direction || defaultDirection;\n var markLeft = group['shapeMap']['link-point-left'] || group.find(function (element) {\n return element.get('className') === 'link-point-left';\n });\n var markRight = group['shapeMap']['link-point-right'] || group.find(function (element) {\n return element.get('className') === 'link-point-right';\n });\n var markTop = group['shapeMap']['link-point-top'] || group.find(function (element) {\n return element.get('className') === 'link-point-top';\n });\n var markBottom = group['shapeMap']['link-point-bottom'] || group.find(function (element) {\n return element.get('className') === 'link-point-bottom';\n });\n var currentLinkPoints = defaultLinkPoints;\n var existLinkPoint = markLeft || markRight || markTop || markBottom;\n if (existLinkPoint) {\n currentLinkPoints = existLinkPoint.attr();\n }\n var linkPoints = Object(_antv_util__WEBPACK_IMPORTED_MODULE_2__[\"mix\"])({}, currentLinkPoints, cfg.linkPoints);\n var markFill = linkPoints.fill,\n markStroke = linkPoints.stroke,\n borderWidth = linkPoints.lineWidth;\n var markSize = linkPoints.size / 2;\n if (!markSize) markSize = linkPoints.r;\n var _b = cfg.linkPoints ? cfg.linkPoints : {\n left: undefined,\n right: undefined,\n top: undefined,\n bottom: undefined\n },\n left = _b.left,\n right = _b.right,\n top = _b.top,\n bottom = _b.bottom;\n var size = this.getSize(cfg);\n var len = size[0];\n var styles = {\n r: markSize,\n fill: markFill,\n stroke: markStroke,\n lineWidth: borderWidth\n };\n var leftPos = null;\n var diffY = len * Math.sin(1 / 3 * Math.PI);\n var r = len * Math.sin(1 / 3 * Math.PI);\n if (direction === 'up') {\n leftPos = [-r, diffY];\n } else if (direction === 'down') {\n leftPos = [-r, -diffY];\n } else if (direction === 'left') {\n leftPos = [-r, r - diffY];\n }\n if (leftPos) {\n if (markLeft) {\n if (!left && left !== undefined) {\n markLeft.remove();\n delete group['shapeMap']['link-point-left'];\n } else {\n markLeft.attr(Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__assign\"])(Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__assign\"])({}, styles), {\n x: leftPos[0],\n y: leftPos[1]\n }));\n }\n } else if (left) {\n group['shapeMap']['link-point-left'] = group.addShape('circle', {\n attrs: Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__assign\"])(Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__assign\"])({}, styles), {\n x: leftPos[0],\n y: leftPos[1]\n }),\n className: 'link-point-left',\n name: 'link-point-left',\n isAnchorPoint: true\n });\n }\n }\n var rightPos = null;\n if (direction === 'up') {\n rightPos = [r, diffY];\n } else if (direction === 'down') {\n rightPos = [r, -diffY];\n } else if (direction === 'right') {\n rightPos = [r, r - diffY];\n }\n if (rightPos) {\n if (markRight) {\n if (!right && right !== undefined) {\n markRight.remove();\n delete group['shapeMap']['link-point-right'];\n } else {\n markRight.attr(Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__assign\"])(Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__assign\"])({}, styles), {\n x: rightPos[0],\n y: rightPos[1]\n }));\n }\n } else if (right) {\n group['shapeMap']['link-point-right'] = group.addShape('circle', {\n attrs: Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__assign\"])(Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__assign\"])({}, styles), {\n x: rightPos[0],\n y: rightPos[1]\n }),\n className: 'link-point-right',\n name: 'link-point-right',\n isAnchorPoint: true\n });\n }\n }\n var topPos = null;\n if (direction === 'up') {\n topPos = [r - diffY, -diffY];\n } else if (direction === 'left') {\n topPos = [r, -diffY];\n } else if (direction === 'right') {\n topPos = [-r, -diffY];\n }\n if (topPos) {\n if (markTop) {\n if (!top && top !== undefined) {\n markTop.remove();\n delete group['shapeMap']['link-point-top'];\n } else {\n // top circle\n markTop.attr(Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__assign\"])(Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__assign\"])({}, styles), {\n x: topPos[0],\n y: topPos[1]\n }));\n }\n } else if (top) {\n group['shapeMap']['link-point-top'] = group.addShape('circle', {\n attrs: Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__assign\"])(Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__assign\"])({}, styles), {\n x: topPos[0],\n y: topPos[1]\n }),\n className: 'link-point-top',\n name: 'link-point-top',\n isAnchorPoint: true\n });\n }\n }\n var bottomPos = null;\n if (direction === 'down') {\n bottomPos = [-r + diffY, diffY];\n } else if (direction === 'left') {\n bottomPos = [r, diffY];\n } else if (direction === 'right') {\n bottomPos = [-r, diffY];\n }\n if (bottomPos) {\n if (markBottom) {\n if (!bottom && bottom !== undefined) {\n markBottom.remove();\n delete group['shapeMap']['link-point-bottom'];\n } else {\n markBottom.attr(Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__assign\"])(Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__assign\"])({}, styles), {\n x: bottomPos[0],\n y: bottomPos[1]\n }));\n }\n } else if (bottom) {\n group['shapeMap']['link-point-bottom'] = group.addShape('circle', {\n attrs: Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__assign\"])(Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__assign\"])({}, styles), {\n x: bottomPos[0],\n y: bottomPos[1]\n }),\n className: 'link-point-bottom',\n name: 'link-point-bottom',\n isAnchorPoint: true\n });\n }\n }\n }\n}, 'single-node');\n\n//# sourceURL=webpack:///./node_modules/@antv/g6-element/es/nodes/triangle.js?");
/***/ }),
/***/ "./node_modules/@antv/g6-pc/es/behavior/activate-relations.js":
/*!********************************************************************!*\
!*** ./node_modules/@antv/g6-pc/es/behavior/activate-relations.js ***!
\********************************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _antv_util__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @antv/util */ \"./node_modules/@antv/util/esm/index.js\");\n\nvar clickNodeId = null;\n/* harmony default export */ __webpack_exports__[\"default\"] = ({\n getDefaultCfg: function getDefaultCfg() {\n return {\n // 可选 mouseenter || click\n // 选择 click 会监听 touch,mouseenter 不会监听\n trigger: 'mouseenter',\n activeState: 'active',\n inactiveState: 'inactive',\n resetSelected: false,\n shouldClearStatusOnSecond: false,\n shouldUpdate: function shouldUpdate() {\n return true;\n }\n };\n },\n getEvents: function getEvents() {\n if (this.get('trigger') === 'mouseenter') {\n return {\n 'node:mouseenter': 'setAllItemStates',\n 'combo:mouseenter': 'setAllItemStates',\n 'node:mouseleave': 'clearActiveState',\n 'combo:mouseleave': 'clearActiveState'\n };\n }\n return {\n 'node:click': 'setAllItemStates',\n 'combo:click': 'setAllItemStates',\n 'canvas:click': 'clearActiveState',\n 'node:touchstart': 'setOnTouchStart',\n 'combo:touchstart': 'setOnTouchStart',\n 'canvas:touchstart': 'clearOnTouchStart'\n };\n },\n setOnTouchStart: function setOnTouchStart(e) {\n var self = this;\n try {\n var touches = e.originalEvent.touches;\n var event1 = touches[0];\n var event2 = touches[1];\n if (event1 && event2) {\n return;\n }\n e.preventDefault();\n } catch (e) {\n console.warn('Touch original event not exist!');\n }\n self.setAllItemStates(e);\n },\n clearOnTouchStart: function clearOnTouchStart(e) {\n var self = this;\n try {\n var touches = e.originalEvent.touches;\n var event1 = touches[0];\n var event2 = touches[1];\n if (event1 && event2) {\n return;\n }\n e.preventDefault();\n } catch (e) {\n console.warn('Touch original event not exist!');\n }\n self.clearActiveState(e);\n },\n setAllItemStates: function setAllItemStates(e) {\n clearTimeout(this.timer);\n this.throttleSetAllItemStates(e, this);\n },\n clearActiveState: function clearActiveState(e) {\n var _this = this;\n // avoid clear state frequently, it costs a lot since all the items' states on the graph need to be cleared\n var shouldClearStatusOnSecond = this.shouldClearStatusOnSecond;\n if (shouldClearStatusOnSecond) {\n clickNodeId = null;\n }\n this.timer = setTimeout(function () {\n _this.throttleClearActiveState(e, _this);\n }, 50);\n },\n throttleSetAllItemStates: Object(_antv_util__WEBPACK_IMPORTED_MODULE_0__[\"throttle\"])(function (e, self) {\n var item = e.item;\n var graph = self.graph;\n if (!graph || graph.destroyed) return;\n self.item = item;\n if (!self.shouldUpdate(e.item, {\n event: e,\n action: 'activate'\n }, self)) {\n return;\n }\n var shouldClearStatusOnSecond = self.shouldClearStatusOnSecond;\n var currentNodeId = item.getModel().id;\n if (clickNodeId === currentNodeId && shouldClearStatusOnSecond) {\n self.throttleClearActiveState(e, self);\n clickNodeId = null;\n return;\n }\n var activeState = self.activeState;\n var inactiveState = self.inactiveState;\n var nodes = graph.getNodes();\n var combos = graph.getCombos();\n var edges = graph.getEdges();\n var vEdges = graph.get('vedges');\n var nodeLength = nodes.length;\n var comboLength = combos.length;\n var edgeLength = edges.length;\n var vEdgeLength = vEdges.length;\n var inactiveItems = self.inactiveItems || {};\n var activeItems = self.activeItems || {};\n for (var i = 0; i < nodeLength; i++) {\n var node = nodes[i];\n var nodeId = node.getID();\n var hasSelected = node.hasState('selected');\n if (self.resetSelected) {\n if (hasSelected) {\n graph.setItemState(node, 'selected', false);\n }\n }\n if (activeItems[nodeId]) {\n graph.setItemState(node, activeState, false);\n delete activeItems[nodeId];\n }\n if (inactiveState && !inactiveItems[nodeId]) {\n graph.setItemState(node, inactiveState, true);\n inactiveItems[nodeId] = node;\n }\n }\n for (var i = 0; i < comboLength; i++) {\n var combo = combos[i];\n var comboId = combo.getID();\n var hasSelected = combo.hasState('selected');\n if (self.resetSelected) {\n if (hasSelected) {\n graph.setItemState(combo, 'selected', false);\n }\n }\n if (activeItems[comboId]) {\n graph.setItemState(combo, activeState, false);\n delete activeItems[comboId];\n }\n if (inactiveState && !inactiveItems[comboId]) {\n graph.setItemState(combo, inactiveState, true);\n inactiveItems[comboId] = combo;\n }\n }\n for (var i = 0; i < edgeLength; i++) {\n var edge = edges[i];\n var edgeId = edge.getID();\n if (activeItems[edgeId]) {\n graph.setItemState(edge, activeState, false);\n delete activeItems[edgeId];\n }\n if (inactiveState && !inactiveItems[edgeId]) {\n graph.setItemState(edge, inactiveState, true);\n inactiveItems[edgeId] = edge;\n }\n }\n for (var i = 0; i < vEdgeLength; i++) {\n var vEdge = vEdges[i];\n var vEdgeId = vEdge.getID();\n if (activeItems[vEdgeId]) {\n graph.setItemState(vEdge, activeState, false);\n delete activeItems[vEdgeId];\n }\n if (inactiveState && !inactiveItems[vEdgeId]) {\n graph.setItemState(vEdge, inactiveState, true);\n inactiveItems[vEdgeId] = vEdge;\n }\n }\n if (item && !item.destroyed) {\n if (inactiveState) {\n graph.setItemState(item, inactiveState, false);\n delete inactiveItems[item.getID()];\n }\n if (!activeItems[item.getID()]) {\n graph.setItemState(item, activeState, true);\n activeItems[item.getID()] = item;\n }\n var rEdges = item.getEdges();\n var rEdgeLegnth = rEdges.length;\n for (var i = 0; i < rEdgeLegnth; i++) {\n var edge = rEdges[i];\n var edgeId = edge.getID();\n var otherEnd = void 0;\n if (edge.getSource() === item) {\n otherEnd = edge.getTarget();\n } else {\n otherEnd = edge.getSource();\n }\n var otherEndId = otherEnd.getID();\n if (inactiveState && inactiveItems[otherEndId]) {\n graph.setItemState(otherEnd, inactiveState, false);\n delete inactiveItems[otherEndId];\n }\n if (!activeItems[otherEndId]) {\n graph.setItemState(otherEnd, activeState, true);\n activeItems[otherEndId] = otherEnd;\n }\n if (inactiveItems[edgeId]) {\n graph.setItemState(edge, inactiveState, false);\n delete inactiveItems[edgeId];\n }\n if (!activeItems[edgeId]) {\n graph.setItemState(edge, activeState, true);\n activeItems[edgeId] = edge;\n }\n edge.toFront();\n }\n }\n self.activeItems = activeItems;\n self.inactiveItems = inactiveItems;\n if (shouldClearStatusOnSecond) {\n clickNodeId = item.getModel().id;\n }\n graph.emit('afteractivaterelations', {\n item: e.item,\n action: 'activate'\n });\n }, 50, {\n trailing: true,\n leading: true\n }),\n throttleClearActiveState: Object(_antv_util__WEBPACK_IMPORTED_MODULE_0__[\"throttle\"])(function (e, self) {\n var graph = self.get('graph');\n if (!graph || graph.destroyed) return;\n if (!self.shouldUpdate(e.item, {\n event: e,\n action: 'deactivate'\n }, self)) return;\n var activeState = self.activeState;\n var inactiveState = self.inactiveState;\n var activeItems = self.activeItems || {};\n var inactiveItems = self.inactiveItems || {};\n Object.values(activeItems).filter(function (item) {\n return !item.destroyed;\n }).forEach(function (item) {\n graph.clearItemStates(item, activeState);\n });\n Object.values(inactiveItems).filter(function (item) {\n return !item.destroyed;\n }).forEach(function (item) {\n graph.clearItemStates(item, inactiveState);\n });\n self.activeItems = {};\n self.inactiveItems = {};\n graph.emit('afteractivaterelations', {\n item: e.item || self.get('item'),\n action: 'deactivate'\n });\n }, 50, {\n trailing: true,\n leading: true\n })\n});\n\n//# sourceURL=webpack:///./node_modules/@antv/g6-pc/es/behavior/activate-relations.js?");
/***/ }),
/***/ "./node_modules/@antv/g6-pc/es/behavior/brush-select.js":
/*!**************************************************************!*\
!*** ./node_modules/@antv/g6-pc/es/behavior/brush-select.js ***!
\**************************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\nvar min = Math.min,\n max = Math.max,\n abs = Math.abs;\nvar DEFAULT_TRIGGER = 'shift';\nvar ALLOW_EVENTS = ['drag', 'shift', 'ctrl', 'alt', 'control'];\n/* harmony default export */ __webpack_exports__[\"default\"] = ({\n getDefaultCfg: function getDefaultCfg() {\n return {\n brushStyle: {\n fill: '#EEF6FF',\n fillOpacity: 0.4,\n stroke: '#DDEEFE',\n lineWidth: 1\n },\n onSelect: function onSelect() {},\n onDeselect: function onDeselect() {},\n selectedState: 'selected',\n trigger: DEFAULT_TRIGGER,\n includeEdges: true,\n includeCombos: false,\n selectOnCombo: false,\n selectedEdges: [],\n selectedNodes: [],\n selectedCombos: []\n };\n },\n getEvents: function getEvents() {\n // 检测输入是否合法\n if (!(ALLOW_EVENTS.indexOf(this.trigger.toLowerCase()) > -1)) {\n this.trigger = DEFAULT_TRIGGER;\n console.warn(\"Behavior brush-select 的 trigger 参数不合法,请输入 'drag'、'shift'、'ctrl' 或 'alt'\");\n }\n if (this.trigger === 'drag') {\n return {\n dragstart: 'onMouseDown',\n drag: 'onMouseMove',\n dragend: 'onMouseUp',\n 'canvas:click': 'clearStates'\n };\n }\n return {\n dragstart: 'onMouseDown',\n drag: 'onMouseMove',\n dragend: 'onMouseUp',\n 'canvas:click': 'clearStates',\n keyup: 'onKeyUp',\n keydown: 'onKeyDown'\n };\n },\n onMouseDown: function onMouseDown(e) {\n // 按在node上面拖动时候不应该是框选\n var item = e.item;\n var brush = this.brush;\n var selectOnCombo = this.selectOnCombo;\n var isCombo = (item === null || item === void 0 ? void 0 : item.getType()) === 'combo';\n // 若在 combo 上操作,且不允许在 combo 上选择,则不继续\n if (isCombo && !selectOnCombo) {\n return;\n }\n // 若不在 combo 上操作,而是其他的 item ,则不继续\n if (!isCombo && item) {\n return;\n }\n if (this.trigger !== 'drag' && !this.keydown) {\n return;\n }\n if (this.selectedNodes && this.selectedNodes.length !== 0) {\n this.clearStates();\n }\n if (!brush) {\n brush = this.createBrush();\n }\n this.originPoint = {\n x: e.canvasX,\n y: e.canvasY\n };\n brush.attr({\n width: 0,\n height: 0\n });\n brush.show();\n this.dragging = true;\n },\n onMouseMove: function onMouseMove(e) {\n if (!this.dragging) {\n return;\n }\n if (this.trigger !== 'drag' && !this.keydown) {\n return;\n }\n this.updateBrush(e);\n },\n onMouseUp: function onMouseUp(e) {\n var graph = this.graph;\n // TODO: 触发了 canvas:click 导致 clearStates\n if (!this.brush && !this.dragging) {\n return;\n }\n if (this.trigger !== 'drag' && !this.keydown) {\n return;\n }\n this.brush.remove(true); // remove and destroy\n this.brush = null;\n this.getSelectedNodes(e);\n this.dragging = false;\n },\n clearStates: function clearStates() {\n var _a = this,\n graph = _a.graph,\n selectedState = _a.selectedState;\n var nodes = graph.findAllByState('node', selectedState);\n var edges = graph.findAllByState('edge', selectedState);\n var combos = graph.findAllByState('combo', selectedState);\n nodes.forEach(function (node) {\n return graph.setItemState(node, selectedState, false);\n });\n edges.forEach(function (edge) {\n return graph.setItemState(edge, selectedState, false);\n });\n combos.forEach(function (combo) {\n return graph.setItemState(combo, selectedState, false);\n });\n this.selectedNodes = [];\n this.selectedEdges = [];\n this.selectedCombos = [];\n if (this.onDeselect) {\n this.onDeselect(this.selectedNodes, this.selectedEdges, this.selectedCombos);\n }\n graph.emit('nodeselectchange', {\n selectedItems: {\n nodes: [],\n edges: [],\n combos: []\n },\n select: false\n });\n },\n isBBoxCenterInRect: function isBBoxCenterInRect(item, left, right, top, bottom) {\n var bbox = item.getBBox();\n return bbox.centerX >= left && bbox.centerX <= right && bbox.centerY >= top && bbox.centerY <= bottom;\n },\n getSelectedNodes: function getSelectedNodes(e) {\n var _this = this;\n var _a = this,\n graph = _a.graph,\n originPoint = _a.originPoint,\n shouldUpdate = _a.shouldUpdate,\n isBBoxCenterInRect = _a.isBBoxCenterInRect;\n var state = this.selectedState;\n var p1 = {\n x: e.x,\n y: e.y\n };\n var p2 = graph.getPointByCanvas(originPoint.x, originPoint.y);\n var left = min(p1.x, p2.x);\n var right = max(p1.x, p2.x);\n var top = min(p1.y, p2.y);\n var bottom = max(p1.y, p2.y);\n var selectedNodes = [];\n var selectedIds = [];\n graph.getNodes().forEach(function (node) {\n if (node.isVisible() &&\n // 隐藏节点不能被选中\n isBBoxCenterInRect(node, left, right, top, bottom) && shouldUpdate(node, 'select', _this)) {\n selectedNodes.push(node);\n var model = node.getModel();\n selectedIds.push(model.id);\n graph.setItemState(node, state, true);\n }\n });\n var selectedEdges = [];\n if (this.includeEdges) {\n // 选中边,边的source和target都在选中的节点中时才选中\n selectedNodes.forEach(function (node) {\n var edges = node.getOutEdges();\n edges.forEach(function (edge) {\n if (!edge.isVisible()) return; // 隐藏边不能够被选中\n var model = edge.getModel();\n var source = model.source,\n target = model.target;\n if (selectedIds.includes(source) && selectedIds.includes(target) && shouldUpdate(edge, 'select', _this)) {\n selectedEdges.push(edge);\n graph.setItemState(edge, _this.selectedState, true);\n }\n });\n });\n }\n var selectedCombos = [];\n if (this.includeCombos) {\n graph.getCombos().forEach(function (combo) {\n if (combo.isVisible() &&\n // 隐藏节点不能被选中\n isBBoxCenterInRect(combo, left, right, top, bottom) && shouldUpdate(combo, 'select', _this)) {\n selectedCombos.push(combo);\n var model = combo.getModel();\n selectedIds.push(model.id);\n graph.setItemState(combo, state, true);\n }\n });\n }\n this.selectedEdges = selectedEdges;\n this.selectedNodes = selectedNodes;\n this.selectedCombos = selectedCombos;\n if (this.onSelect) {\n this.onSelect(selectedNodes, selectedEdges, selectedCombos);\n }\n graph.emit('nodeselectchange', {\n selectedItems: {\n nodes: selectedNodes,\n edges: selectedEdges,\n combos: selectedCombos\n },\n select: true\n });\n },\n createBrush: function createBrush() {\n var self = this;\n var brush = self.graph.get('canvas').addShape('rect', {\n attrs: self.brushStyle,\n capture: false,\n name: 'brush-shape'\n });\n this.brush = brush;\n this.delegate = brush;\n return brush;\n },\n updateBrush: function updateBrush(e) {\n var originPoint = this.originPoint;\n this.brush.attr({\n width: abs(e.canvasX - originPoint.x),\n height: abs(e.canvasY - originPoint.y),\n x: min(e.canvasX, originPoint.x),\n y: min(e.canvasY, originPoint.y)\n });\n },\n onKeyDown: function onKeyDown(e) {\n var code = e.key;\n if (!code) {\n return;\n }\n var triggerLowerCase = this.trigger.toLowerCase();\n var codeLowerCase = code.toLowerCase();\n // 按住 control 键时,允许用户设置 trigger 为 ctrl\n if (codeLowerCase === triggerLowerCase || codeLowerCase === 'control' && triggerLowerCase === 'ctrl' || codeLowerCase === 'ctrl' && triggerLowerCase === 'control') {\n this.keydown = true;\n } else {\n this.keydown = false;\n }\n },\n onKeyUp: function onKeyUp() {\n if (this.brush) {\n // 清除所有选中状态后,设置拖得动状态为false,并清除框选的brush\n this.brush.remove(true);\n this.brush = null;\n this.dragging = false;\n }\n this.keydown = false;\n }\n});\n\n//# sourceURL=webpack:///./node_modules/@antv/g6-pc/es/behavior/brush-select.js?");
/***/ }),
/***/ "./node_modules/@antv/g6-pc/es/behavior/click-select.js":
/*!**************************************************************!*\
!*** ./node_modules/@antv/g6-pc/es/behavior/click-select.js ***!
\**************************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _antv_util__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @antv/util */ \"./node_modules/@antv/util/esm/index.js\");\n\nvar DEFAULT_TRIGGER = 'shift';\nvar ALLOW_EVENTS = ['shift', 'ctrl', 'alt', 'control'];\n/* harmony default export */ __webpack_exports__[\"default\"] = ({\n getDefaultCfg: function getDefaultCfg() {\n return {\n multiple: true,\n trigger: DEFAULT_TRIGGER,\n selectedState: 'selected',\n selectNode: true,\n selectEdge: false,\n selectCombo: true\n };\n },\n getEvents: function getEvents() {\n var self = this;\n // 检测输入是否合法\n if (!(ALLOW_EVENTS.indexOf(self.trigger.toLowerCase()) > -1)) {\n self.trigger = DEFAULT_TRIGGER;\n // eslint-disable-next-line no-console\n console.warn(\"Behavior click-select 的 trigger 参数不合法,请输入 'drag'、'shift'、'ctrl' 或 'alt'\");\n }\n if (!self.multiple) {\n return {\n 'node:click': 'onClick',\n 'combo:click': 'onClick',\n 'edge:click': 'onClick',\n 'canvas:click': 'onCanvasClick'\n };\n }\n return {\n 'node:click': 'onClick',\n 'combo:click': 'onClick',\n 'edge:click': 'onClick',\n 'canvas:click': 'onCanvasClick',\n keyup: 'onKeyUp',\n keydown: 'onKeyDown'\n };\n },\n onClick: function onClick(evt) {\n var self = this;\n var item = evt.item;\n if (!item || item.destroyed) {\n return;\n }\n var type = item.getType();\n var graph = self.graph,\n keydown = self.keydown,\n multiple = self.multiple,\n shouldUpdate = self.shouldUpdate,\n shouldBegin = self.shouldBegin;\n if (!shouldBegin(evt, self)) {\n return;\n }\n // allow to select multiple nodes but did not press a key || do not allow the select multiple nodes\n if (!keydown || !multiple) {\n var selected = graph.findAllByState('node', self.selectedState).concat(graph.findAllByState('edge', self.selectedState)).concat(graph.findAllByState('combo', self.selectedState));\n Object(_antv_util__WEBPACK_IMPORTED_MODULE_0__[\"each\"])(selected, function (selectedItem) {\n if (selectedItem !== item) {\n graph.setItemState(selectedItem, self.selectedState, false);\n }\n });\n }\n // check if the item could be selected, given the current cfg\n var itemSelectable = function () {\n switch (type) {\n case 'node':\n return self.selectNode;\n case 'edge':\n return self.selectEdge;\n case 'combo':\n return self.selectCombo;\n default:\n return false;\n }\n }();\n if (!itemSelectable) {\n var selectedNodes = graph.findAllByState('node', self.selectedState);\n var selectedEdges = graph.findAllByState('edge', self.selectedState);\n var selectedCombos = graph.findAllByState('combo', self.selectedState);\n graph.emit('nodeselectchange', {\n selectedItems: {\n nodes: selectedNodes,\n edges: selectedEdges,\n combos: selectedCombos\n },\n select: false\n });\n return;\n }\n if (item.hasState(self.selectedState)) {\n if (shouldUpdate(evt, self)) {\n graph.setItemState(item, self.selectedState, false);\n }\n var selectedNodes = graph.findAllByState('node', self.selectedState);\n var selectedEdges = graph.findAllByState('edge', self.selectedState);\n var selectedCombos = graph.findAllByState('combo', self.selectedState);\n graph.emit('nodeselectchange', {\n target: item,\n selectedItems: {\n nodes: selectedNodes,\n edges: selectedEdges,\n combos: selectedCombos\n },\n select: false\n });\n } else {\n if (shouldUpdate(evt, self)) {\n graph.setItemState(item, self.selectedState, true);\n }\n var selectedNodes = graph.findAllByState('node', self.selectedState);\n var selectedEdges = graph.findAllByState('edge', self.selectedState);\n var selectedCombos = graph.findAllByState('combo', self.selectedState);\n graph.emit('nodeselectchange', {\n target: item,\n selectedItems: {\n nodes: selectedNodes,\n edges: selectedEdges,\n combos: selectedCombos\n },\n select: true\n });\n }\n },\n onCanvasClick: function onCanvasClick(evt) {\n var _this = this;\n var _a = this,\n graph = _a.graph,\n shouldBegin = _a.shouldBegin;\n if (!shouldBegin(evt, this)) {\n return;\n }\n var selected = graph.findAllByState('node', this.selectedState);\n Object(_antv_util__WEBPACK_IMPORTED_MODULE_0__[\"each\"])(selected, function (node) {\n graph.setItemState(node, _this.selectedState, false);\n });\n var selectedEdges = graph.findAllByState('edge', this.selectedState);\n Object(_antv_util__WEBPACK_IMPORTED_MODULE_0__[\"each\"])(selectedEdges, function (edge) {\n graph.setItemState(edge, _this.selectedState, false);\n });\n var selectedCombos = graph.findAllByState('combo', this.selectedState);\n Object(_antv_util__WEBPACK_IMPORTED_MODULE_0__[\"each\"])(selectedCombos, function (combo) {\n graph.setItemState(combo, _this.selectedState, false);\n });\n graph.emit('nodeselectchange', {\n selectedItems: {\n nodes: [],\n edges: [],\n combos: []\n },\n select: false\n });\n },\n onKeyDown: function onKeyDown(e) {\n var self = this;\n var code = e.key;\n if (!code) {\n return;\n }\n if (code.toLowerCase() === this.trigger.toLowerCase() || code.toLowerCase() === 'control') {\n self.keydown = true;\n } else {\n self.keydown = false;\n }\n },\n onKeyUp: function onKeyUp() {\n var self = this;\n self.keydown = false;\n }\n});\n\n//# sourceURL=webpack:///./node_modules/@antv/g6-pc/es/behavior/click-select.js?");
/***/ }),
/***/ "./node_modules/@antv/g6-pc/es/behavior/collapse-expand-combo.js":
/*!***********************************************************************!*\
!*** ./node_modules/@antv/g6-pc/es/behavior/collapse-expand-combo.js ***!
\***********************************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/*\n * @Author: Shiwu\n * @Description: 收起和展开 Combo\n */\nvar DEFAULT_TRIGGER = 'dblclick';\nvar ALLOW_EVENTS = ['click', 'dblclick'];\n/* harmony default export */ __webpack_exports__[\"default\"] = ({\n getDefaultCfg: function getDefaultCfg() {\n return {\n trigger: DEFAULT_TRIGGER,\n relayout: true\n };\n },\n getEvents: function getEvents() {\n var _a;\n var trigger;\n // 检测输入是否合法\n if (ALLOW_EVENTS.includes(this.trigger)) {\n trigger = this.trigger;\n } else {\n trigger = DEFAULT_TRIGGER;\n // eslint-disable-next-line no-console\n console.warn(\"Behavior collapse-expand-group 的 trigger 参数不合法,请输入 'click' 或 'dblclick'\");\n }\n return _a = {}, _a[\"combo:\".concat(trigger)] = 'onComboClick', _a;\n },\n onComboClick: function onComboClick(evt) {\n var item = evt.item;\n var _a = this,\n graph = _a.graph,\n relayout = _a.relayout;\n if (!item || item.destroyed || item.getType() !== 'combo') return;\n var model = item.getModel();\n var comboId = model.id;\n if (!comboId) {\n return;\n }\n graph.collapseExpandCombo(comboId);\n if (relayout && graph.get('layout')) graph.layout();else graph.refreshPositions();\n }\n});\n\n//# sourceURL=webpack:///./node_modules/@antv/g6-pc/es/behavior/collapse-expand-combo.js?");
/***/ }),
/***/ "./node_modules/@antv/g6-pc/es/behavior/collapse-expand.js":
/*!*****************************************************************!*\
!*** ./node_modules/@antv/g6-pc/es/behavior/collapse-expand.js ***!
\*****************************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\nvar DEFAULT_TRIGGER = 'click';\nvar ALLOW_EVENTS = ['click', 'dblclick'];\n/* harmony default export */ __webpack_exports__[\"default\"] = ({\n getDefaultCfg: function getDefaultCfg() {\n return {\n /**\n * 发生收缩/扩展变化时的回调\n */\n trigger: DEFAULT_TRIGGER,\n onChange: function onChange() {}\n };\n },\n getEvents: function getEvents() {\n var _a;\n var trigger;\n // 检测输入是否合法\n if (ALLOW_EVENTS.includes(this.trigger)) {\n trigger = this.trigger;\n } else {\n trigger = DEFAULT_TRIGGER;\n // eslint-disable-next-line no-console\n console.warn(\"Behavior collapse-expand 的 trigger 参数不合法,请输入 'click' 或 'dblclick'\");\n }\n return _a = {}, _a[\"node:\".concat(trigger)] = 'onNodeClick',\n // 支持移动端事件\n _a.touchstart = 'onNodeClick', _a;\n },\n onNodeClick: function onNodeClick(e) {\n var _this = this;\n // avoid click being triggered on dblclick\n if (this.trigger === 'click') {\n if (this.timer) {\n clearTimeout(this.timer);\n this.timer = 0;\n return;\n }\n this.timer = setTimeout(function () {\n _this.toggle(e);\n clearTimeout(_this.timer);\n _this.timer = 0;\n }, 200);\n } else {\n this.toggle(e);\n }\n },\n toggle: function toggle(e) {\n var item = e.item;\n if (!item) return;\n // 如果节点进行过更新,model 会进行 merge,直接改 model 就不能改布局,所以需要去改源数据\n var sourceData = this.graph.findDataById(item.get('id'));\n if (!sourceData) {\n return;\n }\n var children = sourceData.children;\n // 叶子节点的收缩和展开没有意义\n if (!children || children.length === 0) {\n return;\n }\n var collapsed = !sourceData.collapsed;\n if (!this.shouldBegin(e, collapsed, this)) {\n return;\n }\n sourceData.collapsed = collapsed;\n item.getModel().collapsed = collapsed;\n this.graph.emit('itemcollapsed', {\n item: e.item,\n collapsed: collapsed\n });\n if (!this.shouldUpdate(e, collapsed, this)) {\n return;\n }\n this.onChange(item, collapsed, this);\n this.graph.layout();\n }\n});\n\n//# sourceURL=webpack:///./node_modules/@antv/g6-pc/es/behavior/collapse-expand.js?");
/***/ }),
/***/ "./node_modules/@antv/g6-pc/es/behavior/create-edge.js":
/*!*************************************************************!*\
!*** ./node_modules/@antv/g6-pc/es/behavior/create-edge.js ***!
\*************************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tslib */ \"./node_modules/tslib/tslib.es6.js\");\n/* harmony import */ var _antv_util__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @antv/util */ \"./node_modules/@antv/util/esm/index.js\");\n\n\nvar DEFAULT_TRIGGER = 'click';\nvar ALLOW_EVENTS = ['click', 'drag'];\nvar DEFAULT_KEY = undefined;\nvar ALLOW_KEYS = ['shift', 'ctrl', 'control', 'alt', 'meta', undefined];\n/* harmony default export */ __webpack_exports__[\"default\"] = ({\n getDefaultCfg: function getDefaultCfg() {\n return {\n trigger: DEFAULT_TRIGGER,\n key: DEFAULT_KEY,\n edgeConfig: {},\n getEdgeConfig: undefined\n };\n },\n getEvents: function getEvents() {\n var self = this;\n // 检测输入是否合法\n if (!(ALLOW_EVENTS.indexOf(self.trigger.toLowerCase()) > -1)) {\n self.trigger = DEFAULT_TRIGGER;\n // eslint-disable-next-line no-console\n console.warn(\"Behavior create-edge 的 trigger 参数不合法,请输入 'click','drag'\");\n }\n if (self.key && ALLOW_KEYS.indexOf(self.key.toLowerCase()) === -1) {\n self.trigger = DEFAULT_KEY;\n // eslint-disable-next-line no-console\n console.warn(\"Behavior create-edge 的 key 参数不合法,请输入 'shift','ctrl','alt','control',或 undefined\");\n }\n var events;\n if (self.trigger === 'drag') {\n events = {\n 'node:dragstart': 'onClick',\n 'combo:dragstart': 'onClick',\n drag: 'updateEndPoint',\n 'node:drop': 'onClick',\n 'combo:drop': 'onClick',\n dragend: 'onDragEnd'\n };\n } else if (self.trigger === 'click') {\n events = {\n 'node:click': 'onClick',\n mousemove: 'updateEndPoint',\n 'edge:click': 'cancelCreating',\n 'canvas:click': 'cancelCreating',\n 'combo:click': 'onClick'\n };\n }\n if (self.key) {\n events.keydown = 'onKeyDown';\n events.keyup = 'onKeyUp';\n }\n return events;\n },\n onDragEnd: function onDragEnd(ev) {\n var self = this;\n if (self.key && !self.keydown) return;\n var item = ev.item;\n if (!item || item.getID() === self.source || item.getType() !== 'node') self.cancelCreating({\n item: self.edge,\n x: ev.x,\n y: ev.y\n });\n },\n // 如果边的起点没有指定,则根据起点创建新边;如果起点已经指定而终点未指定,则指定终点\n onClick: function onClick(ev) {\n var self = this;\n if (self.key && !self.keydown) return;\n var node = ev.item;\n var graph = self.graph;\n var model = node.getModel();\n var getEdgeConfig = self.getEdgeConfig;\n // 如果起点已经指定而终点未指定,则指定终点\n if (self.addingEdge && self.edge) {\n if (!self.shouldEnd(ev, self)) return;\n var edgeConfig = void 0;\n if (getEdgeConfig && Object(_antv_util__WEBPACK_IMPORTED_MODULE_1__[\"isFunction\"])(getEdgeConfig)) {\n edgeConfig = getEdgeConfig({\n source: self.source,\n target: model.id\n }, self);\n } else {\n edgeConfig = self.edgeConfig;\n }\n var updateCfg = Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__assign\"])({\n target: model.id\n }, edgeConfig);\n if (self.source === model.id) {\n updateCfg.type = 'loop';\n }\n graph.emit('beforecreateedge', {});\n graph.updateItem(self.edge, updateCfg, false);\n if (graph.get('enabledStack')) {\n var addedModel = Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__assign\"])(Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__assign\"])({}, self.edge.getModel()), {\n itemType: 'edge'\n });\n var after = {};\n after.edges = [addedModel];\n graph.pushStack('add', {\n before: {},\n after: after\n });\n }\n graph.emit('aftercreateedge', {\n edge: self.edge\n });\n // 暂时将该边的 capture 恢复为 true\n self.edge.getKeyShape().set('capture', true);\n self.edge = null;\n self.addingEdge = false;\n } else {\n // 如果边的起点没有指定,则根据起点创建新边\n if (!self.shouldBegin(ev, self)) return;\n // 获取自定义 edge 配置\n var edgeConfig = void 0;\n if (getEdgeConfig && Object(_antv_util__WEBPACK_IMPORTED_MODULE_1__[\"isFunction\"])(getEdgeConfig)) {\n edgeConfig = getEdgeConfig({\n source: model.id,\n target: model.id\n }, self);\n } else {\n edgeConfig = self.edgeConfig;\n }\n self.edge = graph.addItem('edge', Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__assign\"])({\n source: model.id,\n target: model.id\n }, edgeConfig), false);\n self.source = model.id;\n self.addingEdge = true;\n // 暂时将该边的 capture 设置为 false,这样可以拾取到后面的元素\n self.edge.getKeyShape().set('capture', false);\n }\n },\n // 边的起点已经确定,边的末端跟随鼠标移动\n updateEndPoint: function updateEndPoint(ev) {\n var self = this;\n if (self.key && !self.keydown) return;\n if (self.edge && self.edge.destroyed) self.cancelCreating({\n item: self.edge\n });\n var point = {\n x: ev.x,\n y: ev.y\n };\n // 若此时 source 节点已经被移除,结束添加边\n if (!self.graph.findById(self.source)) {\n self.addingEdge = false;\n return;\n }\n if (self.addingEdge && self.edge) {\n // 更新边的终点为鼠标位置\n self.graph.updateItem(self.edge, {\n target: point\n }, false);\n }\n },\n // 取消增加边,删除该边;或指定终点\n cancelCreating: function cancelCreating(ev) {\n var _a, _b;\n var self = this;\n if (self.key && !self.keydown) return;\n var graph = self.graph;\n var currentEdge = ev.item;\n if (self.addingEdge && (self.edge === currentEdge || ((_b = (_a = ev.target) === null || _a === void 0 ? void 0 : _a.isCanvas) === null || _b === void 0 ? void 0 : _b.call(_a)))) {\n if (self.edge && !self.edge.destroyed) graph.removeItem(self.edge, false);\n self.edge = null;\n self.addingEdge = false;\n return;\n }\n },\n onKeyDown: function onKeyDown(e) {\n var self = this;\n var code = e.key;\n if (!code) {\n return;\n }\n if (code.toLowerCase() === self.key.toLowerCase()) {\n self.keydown = true;\n } else {\n self.keydown = false;\n }\n },\n onKeyUp: function onKeyUp() {\n var self = this;\n if (self.addingEdge && self.edge) {\n // 清除正在增加的边\n self.graph.removeItem(self.edge, false);\n self.addingEdge = false;\n self.edge = null;\n }\n this.keydown = false;\n }\n});\n\n//# sourceURL=webpack:///./node_modules/@antv/g6-pc/es/behavior/create-edge.js?");
/***/ }),
/***/ "./node_modules/@antv/g6-pc/es/behavior/drag-canvas.js":
/*!*************************************************************!*\
!*** ./node_modules/@antv/g6-pc/es/behavior/drag-canvas.js ***!
\*************************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _antv_util__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @antv/util */ \"./node_modules/@antv/util/esm/index.js\");\n/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../util */ \"./node_modules/@antv/g6-pc/es/util/index.js\");\n\n\nvar cloneEvent = _util__WEBPACK_IMPORTED_MODULE_1__[\"default\"].cloneEvent,\n isNaN = _util__WEBPACK_IMPORTED_MODULE_1__[\"default\"].isNaN;\nvar abs = Math.abs;\nvar DRAG_OFFSET = 10;\nvar ALLOW_EVENTS = ['shift', 'ctrl', 'alt', 'control'];\n/* harmony default export */ __webpack_exports__[\"default\"] = ({\n getDefaultCfg: function getDefaultCfg() {\n return {\n direction: 'both',\n enableOptimize: false,\n // drag-canvas 可拖动的扩展范围,默认为 0,即最多可以拖动一屏的位置\n // 当设置的值大于 0 时,即拖动可以超过一屏\n // 当设置的值小于 0 时,相当于缩小了可拖动范围\n // 具体实例可参考:https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*IFfoS67_HssAAAAAAAAAAAAAARQnAQ\n scalableRange: 0,\n allowDragOnItem: false\n };\n },\n getEvents: function getEvents() {\n return {\n 'mousedown': 'onMouseDown',\n 'drag': 'onDragMove',\n 'dragend': 'onMouseUp',\n 'canvas:click': 'onMouseUp',\n 'keyup': 'onKeyUp',\n 'focus': 'onKeyUp',\n 'keydown': 'onKeyDown',\n 'touchstart': 'onTouchStart',\n 'touchmove': 'onTouchMove',\n 'touchend': 'onMouseUp'\n };\n },\n updateViewport: function updateViewport(e) {\n var origin = this.origin;\n var clientX = +e.clientX;\n var clientY = +e.clientY;\n if (isNaN(clientX) || isNaN(clientY)) {\n return;\n }\n var dx = clientX - origin.x;\n var dy = clientY - origin.y;\n if (this.get('direction') === 'x') {\n dy = 0;\n } else if (this.get('direction') === 'y') {\n dx = 0;\n }\n this.origin = {\n x: clientX,\n y: clientY\n };\n var width = this.graph.get('width');\n var height = this.graph.get('height');\n var graphCanvasBBox = this.graph.get('canvas').getCanvasBBox();\n var expandWidth = this.scalableRange;\n var expandHeight = this.scalableRange;\n // 若 scalableRange 是 0~1 的小数,则作为比例考虑\n if (expandWidth < 1 && expandWidth > -1) {\n expandWidth = width * expandWidth;\n expandHeight = height * expandHeight;\n }\n if (graphCanvasBBox.minX <= width + expandWidth && graphCanvasBBox.minX + dx > width + expandWidth || graphCanvasBBox.maxX + expandWidth >= 0 && graphCanvasBBox.maxX + expandWidth + dx < 0) {\n dx = 0;\n }\n if (graphCanvasBBox.minY <= height + expandHeight && graphCanvasBBox.minY + dy > height + expandHeight || graphCanvasBBox.maxY + expandHeight >= 0 && graphCanvasBBox.maxY + expandHeight + dy < 0) {\n dy = 0;\n }\n this.graph.translate(dx, dy);\n },\n onTouchStart: function onTouchStart(e) {\n var self = this;\n var touches = e.originalEvent.touches;\n var event1 = touches[0];\n var event2 = touches[1];\n // 如果是双指操作,不允许拖拽画布\n if (event1 && event2) {\n return;\n }\n e.preventDefault();\n this.mousedown = true;\n self.onDragStart(e);\n },\n onMouseDown: function onMouseDown(e) {\n this.mousedown = true;\n },\n onDragMove: function onDragMove(evt) {\n if (!this.mousedown) return;\n if (!this.dragstart) {\n // dragstart\n this.dragstart = true;\n this.onDragStart(evt);\n } else {\n // drag\n this.onDrag(evt);\n }\n },\n onDragStart: function onDragStart(e) {\n var self = this;\n var event = e.originalEvent;\n // TODO: 'name' doesn't exist on `IG6GraphEvent`, we should consider typing it so users get autocomplete and other benefits\n if (event && e.name !== 'touchstart' && event.button !== 0) {\n return;\n }\n if (e.name !== 'touchstart' && typeof window !== 'undefined' && window.event && !window.event.buttons && !window.event.button) {\n return;\n }\n if (!this.shouldBegin(e, this)) {\n return;\n }\n if (self.keydown) return;\n if (!this.allowDrag(e)) return;\n self.origin = {\n x: e.clientX,\n y: e.clientY\n };\n self.dragging = false;\n if (this.enableOptimize) {\n // 拖动 canvas 过程中隐藏所有的边及label\n var graph = this.graph;\n var edges = graph.getEdges();\n for (var i = 0, len = edges.length; i < len; i++) {\n var shapes = edges[i].get('group').get('children');\n if (!shapes) continue;\n shapes.forEach(function (shape) {\n shape.set('ori-visibility', shape.get('ori-visibility') || shape.get('visible'));\n shape.hide();\n });\n }\n var nodes = graph.getNodes();\n for (var j = 0, nodeLen = nodes.length; j < nodeLen; j++) {\n var container = nodes[j].getContainer();\n var children = container.get('children');\n for (var _i = 0, children_1 = children; _i < children_1.length; _i++) {\n var child = children_1[_i];\n var isKeyShape = child.get('isKeyShape');\n if (!isKeyShape) {\n child.set('ori-visibility', child.get('ori-visibility') || child.get('visible'));\n child.hide();\n }\n }\n }\n }\n // 绑定浏览器右键监听,触发拖拽结束,结束拖拽时移除\n if (typeof window !== 'undefined') {\n var self_1 = this;\n this.handleDOMContextMenu = function (e) {\n return self_1.onMouseUp(e);\n };\n document.body.addEventListener('contextmenu', this.handleDOMContextMenu);\n }\n },\n onTouchMove: function onTouchMove(e) {\n var self = this;\n var touches = e.originalEvent.touches;\n var event1 = touches[0];\n var event2 = touches[1];\n // 如果是双指操作,不允许拖拽画布,结束拖拽\n if (event1 && event2) {\n this.onMouseUp(e);\n return;\n }\n e.preventDefault();\n self.onDrag(e);\n },\n onDrag: function onDrag(e) {\n if (!this.mousedown) return;\n var graph = this.graph;\n if (this.keydown) return;\n if (!this.allowDrag(e)) return;\n e = cloneEvent(e);\n if (!this.origin) {\n return;\n }\n if (!this.dragging) {\n if (abs(this.origin.x - e.clientX) + abs(this.origin.y - e.clientY) < DRAG_OFFSET) {\n return;\n }\n if (this.shouldBegin(e, this)) {\n e.type = 'dragstart';\n graph.emit('canvas:dragstart', e);\n this.originPosition = {\n x: e.clientX,\n y: e.clientY\n };\n this.dragging = true;\n }\n } else {\n e.type = 'drag';\n graph.emit('canvas:drag', e);\n }\n if (this.shouldUpdate(e, this)) {\n this.updateViewport(e);\n }\n },\n onMouseUp: function onMouseUp(e) {\n var _a, _b;\n this.mousedown = false;\n this.dragstart = false;\n var graph = this.graph;\n if (this.keydown) return;\n var currentZoom = graph.getZoom();\n var modeController = graph.get('modeController');\n var zoomCanvas = (_b = (_a = modeController === null || modeController === void 0 ? void 0 : modeController.modes[modeController.mode]) === null || _a === void 0 ? void 0 : _a.filter(function (behavior) {\n return behavior.type === 'zoom-canvas';\n })) === null || _b === void 0 ? void 0 : _b[0];\n var optimizeZoom = zoomCanvas ? zoomCanvas.optimizeZoom || 0.1 : 0;\n if (this.enableOptimize) {\n // 拖动结束后显示所有的边\n var edges = graph.getEdges();\n for (var i = 0, len = edges.length; i < len; i++) {\n var shapes = edges[i].get('group').get('children');\n if (!shapes) continue;\n shapes.forEach(function (shape) {\n var oriVis = shape.get('ori-visibility');\n shape.set('ori-visibility', undefined);\n if (oriVis) shape.show();\n });\n }\n if (currentZoom > optimizeZoom) {\n var nodes = graph.getNodes();\n for (var j = 0, nodeLen = nodes.length; j < nodeLen; j++) {\n var container = nodes[j].getContainer();\n var children = container.get('children');\n for (var _i = 0, children_2 = children; _i < children_2.length; _i++) {\n var child = children_2[_i];\n var isKeyShape = child.get('isKeyShape');\n if (!isKeyShape) {\n var oriVis = child.get('ori-visibility');\n child.set('ori-visibility', undefined);\n if (oriVis) child.show();\n }\n }\n }\n }\n }\n if (!this.dragging) {\n this.origin = null;\n return;\n }\n e = cloneEvent(e);\n if (this.shouldEnd(e, this)) {\n this.updateViewport(e);\n }\n e.type = 'dragend';\n e.dx = e.clientX - this.originPosition.x;\n e.dy = e.clientY - this.originPosition.y;\n graph.emit('canvas:dragend', e);\n this.endDrag();\n // 结束拖拽时移除浏览器右键监听\n if (typeof window !== 'undefined') {\n document.body.removeEventListener('contextmenu', this.handleDOMContextMenu);\n }\n },\n endDrag: function endDrag() {\n this.origin = null;\n this.dragging = false;\n this.dragbegin = false;\n this.mousedown = false;\n this.dragstart = false;\n },\n onKeyDown: function onKeyDown(e) {\n var self = this;\n var code = e.key;\n if (!code) {\n return;\n }\n if (ALLOW_EVENTS.indexOf(code.toLowerCase()) > -1) {\n self.keydown = true;\n } else {\n self.keydown = false;\n }\n },\n onKeyUp: function onKeyUp() {\n this.keydown = false;\n this.origin = null;\n this.dragging = false;\n this.dragbegin = false;\n },\n allowDrag: function allowDrag(evt) {\n var _a, _b;\n var target = evt.target;\n var targetIsCanvas = target && target.isCanvas && target.isCanvas();\n if (Object(_antv_util__WEBPACK_IMPORTED_MODULE_0__[\"isBoolean\"])(this.allowDragOnItem) && !this.allowDragOnItem && !targetIsCanvas) return false;\n if (Object(_antv_util__WEBPACK_IMPORTED_MODULE_0__[\"isObject\"])(this.allowDragOnItem)) {\n var _c = this.allowDragOnItem,\n node = _c.node,\n edge = _c.edge,\n combo = _c.combo;\n var itemType = (_b = (_a = evt.item) === null || _a === void 0 ? void 0 : _a.getType) === null || _b === void 0 ? void 0 : _b.call(_a);\n if (!node && itemType === 'node') return false;\n if (!edge && itemType === 'edge') return false;\n if (!combo && itemType === 'combo') return false;\n }\n return true;\n }\n});\n\n//# sourceURL=webpack:///./node_modules/@antv/g6-pc/es/behavior/drag-canvas.js?");
/***/ }),
/***/ "./node_modules/@antv/g6-pc/es/behavior/drag-combo.js":
/*!************************************************************!*\
!*** ./node_modules/@antv/g6-pc/es/behavior/drag-combo.js ***!
\************************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tslib */ \"./node_modules/tslib/tslib.es6.js\");\n/* harmony import */ var _antv_util__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @antv/util */ \"./node_modules/@antv/util/esm/index.js\");\n/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../util */ \"./node_modules/@antv/g6-pc/es/util/index.js\");\n/* harmony import */ var _global__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../global */ \"./node_modules/@antv/g6-pc/es/global.js\");\n\n/*\n * @Author: moyee\n * @LastEditors: moyee\n * @Description: 拖动 Combo\n */\n\n\n\nvar calculationItemsBBox = _util__WEBPACK_IMPORTED_MODULE_2__[\"default\"].calculationItemsBBox;\n/**\n * 遍历拖动的 Combo 下的所有 Combo\n * @param data 拖动的 Combo\n * @param fn\n */\nvar traverseCombo = function traverseCombo(data, fn) {\n if (fn(data) === false) {\n return;\n }\n if (data) {\n var combos = data.get('combos');\n if (combos.length === 0) {\n return false;\n }\n Object(_antv_util__WEBPACK_IMPORTED_MODULE_1__[\"each\"])(combos, function (child) {\n traverseCombo(child, fn);\n });\n }\n};\n/* harmony default export */ __webpack_exports__[\"default\"] = ({\n getDefaultCfg: function getDefaultCfg() {\n return {\n enableDelegate: false,\n delegateStyle: {},\n // 拖动节点过程中是否只改变 Combo 的大小,而不改变其结构\n onlyChangeComboSize: false,\n // 拖动过程中目标 combo 状态样式\n activeState: '',\n selectedState: 'selected',\n enableStack: true\n };\n },\n getEvents: function getEvents() {\n return {\n 'combo:mousedown': 'onMouseDown',\n 'combo:dragstart': 'onDragStart',\n 'combo:drag': 'onDrag',\n 'combo:dragend': 'onDragEnd',\n 'combo:drop': 'onDrop',\n 'node:drop': 'onNodeDrop',\n 'combo:dragenter': 'onDragEnter',\n 'combo:dragleave': 'onDragLeave'\n };\n },\n validationCombo: function validationCombo(evt) {\n var item = evt.item;\n if (!item || item.destroyed) {\n return false;\n }\n if (!this.shouldUpdate(evt, this)) {\n return false;\n }\n var type = item.getType();\n if (type !== 'combo') {\n return false;\n }\n return true;\n },\n onMouseDown: function onMouseDown(evt) {\n this.origin = {\n x: evt.x,\n y: evt.y\n };\n },\n onDragStart: function onDragStart(evt) {\n var _this = this;\n var graph = this.graph;\n var item = evt.item;\n this.currentShouldEnd = true;\n if (!this.validationCombo(evt)) return;\n this.targets = [];\n // 获取所有选中的 Combo\n var combos = graph.findAllByState('combo', this.selectedState);\n var currentCombo = item.get('id');\n var dragCombos = combos.filter(function (combo) {\n var comboId = combo.get('id');\n return currentCombo === comboId;\n });\n if (dragCombos.length === 0) {\n this.targets.push(item);\n } else {\n this.targets = combos;\n }\n var beforeDragItems = [];\n this.targets.forEach(function (t) {\n var _a = t.getModel(),\n x = _a.x,\n y = _a.y,\n id = _a.id;\n beforeDragItems.push({\n x: x,\n y: y,\n id: id\n });\n });\n this.set('beforeDragItems', beforeDragItems);\n if (this.activeState) {\n this.targets.map(function (combo) {\n var model = combo.getModel();\n if (model.parentId) {\n var parentCombo = graph.findById(model.parentId);\n if (parentCombo) {\n graph.setItemState(parentCombo, _this.activeState, true);\n }\n }\n });\n }\n this.point = {};\n this.originPoint = {};\n this.currentItemChildCombos = [];\n traverseCombo(item, function (param) {\n if (param.destroyed) {\n return false;\n }\n var model = param.getModel();\n _this.currentItemChildCombos.push(model.id);\n return true;\n });\n },\n onDrag: function onDrag(evt) {\n var _this = this;\n if (!this.origin) {\n return;\n }\n if (!this.validationCombo(evt)) return;\n if (this.enableDelegate) {\n this.updateDelegate(evt);\n } else {\n if (this.activeState) {\n var graph_1 = this.graph;\n var item = evt.item;\n var model_1 = item.getModel();\n // 拖动过程中实时计算距离\n var combos = graph_1.getCombos();\n var sourceBBox = item.getBBox();\n var centerX_1 = sourceBBox.centerX,\n centerY_1 = sourceBBox.centerY,\n width_1 = sourceBBox.width;\n // 参与计算的 Combo,需要排除掉:\n // 1、拖动 combo 自己\n // 2、拖动 combo 的 parent\n // 3、拖动 Combo 的 children\n var calcCombos = combos.filter(function (combo) {\n var cmodel = combo.getModel();\n // 被拖动的是最外层的 Combo,无 parent,排除自身和子元素\n if (!model_1.parentId) {\n return cmodel.id !== model_1.id && !_this.currentItemChildCombos.includes(cmodel.id);\n }\n return cmodel.id !== model_1.id && !_this.currentItemChildCombos.includes(cmodel.id);\n });\n calcCombos.map(function (combo) {\n var _a = combo.getBBox(),\n cx = _a.centerX,\n cy = _a.centerY,\n w = _a.width;\n // 拖动的 combo 和要进入的 combo 之间的距离\n var disX = centerX_1 - cx;\n var disY = centerY_1 - cy;\n // 圆心距离\n var distance = 2 * Math.sqrt(disX * disX + disY * disY);\n if (width_1 + w - distance > 0.8 * width_1) {\n graph_1.setItemState(combo, _this.activeState, true);\n } else {\n graph_1.setItemState(combo, _this.activeState, false);\n }\n });\n }\n Object(_antv_util__WEBPACK_IMPORTED_MODULE_1__[\"each\"])(this.targets, function (item) {\n _this.updateCombo(item, evt);\n });\n if (this.onlyChangeComboSize) {\n // 拖动节点过程中,动态改变 Combo 的大小\n this.updateParentCombos();\n }\n }\n },\n updatePositions: function updatePositions(evt, restore) {\n var _this = this;\n // 当启用 delegate 时,拖动结束时需要更新 combo\n if (this.enableDelegate || restore) {\n Object(_antv_util__WEBPACK_IMPORTED_MODULE_1__[\"each\"])(this.targets, function (item) {\n _this.updateCombo(item, evt, restore);\n });\n }\n },\n onDrop: function onDrop(evt) {\n var _this = this;\n // 被放下的目标 combo\n var item = evt.item;\n this.currentShouldEnd = this.shouldEnd(evt, item, this);\n this.updatePositions(evt, !this.currentShouldEnd);\n if (!this.currentShouldEnd || !item || !this.targets || item.destroyed) return;\n var graph = this.graph;\n var targetModel = item.getModel();\n this.targets.map(function (combo) {\n var model = combo.getModel();\n if (model.parentId !== targetModel.id) {\n if (_this.activeState) {\n graph.setItemState(item, _this.activeState, false);\n }\n // 将 Combo 放置到某个 Combo 上面时,只有当 onlyChangeComboSize 为 false 时候才更新 Combo 结构\n if (!_this.onlyChangeComboSize) {\n graph.updateComboTree(combo, targetModel.id, false);\n } else {\n graph.updateCombo(combo);\n }\n } else {\n graph.updateCombo(item);\n }\n });\n this.end(item, evt);\n // 如果已经拖放下了,则不需要再通过距离判断了\n this.endComparison = true;\n },\n onNodeDrop: function onNodeDrop(evt) {\n var _this = this;\n if (!this.targets || this.targets.length === 0) return;\n var graph = this.graph;\n var item = evt.item;\n var comboId = item.getModel().comboId;\n var newParentCombo = comboId ? graph.findById(comboId) : undefined;\n this.currentShouldEnd = this.shouldEnd(evt, newParentCombo, this);\n this.updatePositions(evt, !this.currentShouldEnd);\n if (!this.currentShouldEnd) return;\n var droppedCombo;\n // 如果被放置的的节点有 comboId,且这个 comboId 与正在被拖拽的 combo 的父 id 不相同,则更新父亲为 comboId\n if (comboId) {\n if (this.activeState) {\n var combo = graph.findById(comboId);\n graph.setItemState(combo, this.activeState, false);\n }\n this.targets.map(function (combo) {\n if (!_this.onlyChangeComboSize) {\n if (comboId !== combo.getID()) {\n droppedCombo = graph.findById(comboId);\n if (comboId !== combo.getModel().parentId) graph.updateComboTree(combo, comboId, false);\n }\n } else {\n graph.updateCombo(combo);\n }\n });\n } else {\n // 如果被放置的节点没有 comboId,且正在被拖拽的 combo 有父 id,则更新父亲为 undefined\n this.targets.map(function (combo) {\n if (!_this.onlyChangeComboSize) {\n var model = combo.getModel();\n if (model.comboId) {\n graph.updateComboTree(combo, undefined, false);\n }\n } else {\n graph.updateCombo(combo);\n }\n });\n }\n // 如果已经拖放下了,则不需要再通过距离判断了\n this.endComparison = true;\n this.end(droppedCombo, evt);\n },\n onDragEnter: function onDragEnter(evt) {\n if (!this.origin) {\n return;\n }\n if (!this.validationCombo(evt)) return;\n var item = evt.item;\n var graph = this.graph;\n if (this.activeState) {\n graph.setItemState(item, this.activeState, true);\n }\n },\n onDragLeave: function onDragLeave(evt) {\n if (!this.origin) {\n return;\n }\n if (!this.validationCombo(evt)) return;\n var item = evt.item;\n var graph = this.graph;\n if (this.activeState) {\n graph.setItemState(item, this.activeState, false);\n }\n },\n onDragEnd: function onDragEnd(evt) {\n if (!this.targets || this.targets.length === 0) return;\n var item = evt.item;\n if (this.currentShouldEnd) {\n this.updatePositions(evt);\n }\n var parentCombo = this.getParentCombo(item.getModel().parentId);\n var graph = this.graph;\n if (parentCombo && this.activeState) {\n graph.setItemState(parentCombo, this.activeState, false);\n }\n this.end(undefined, evt);\n },\n end: function end(comboDropedOn, evt) {\n var _this = this;\n if (!this.origin) return;\n var graph = this.graph;\n // 删除delegate shape\n if (this.delegateShape) {\n var delegateGroup = graph.get('delegateGroup');\n delegateGroup.clear();\n this.delegateShape = null;\n }\n if (comboDropedOn && this.activeState) {\n graph.setItemState(comboDropedOn, this.activeState, false);\n }\n // 若没有被放置的 combo,则是被放置在画布上\n if (!comboDropedOn) {\n var stack_1 = graph.get('enabledStack') && this.enableStack;\n var stackData_1 = {\n before: {\n nodes: [],\n edges: [],\n combos: [].concat(this.get('beforeDragItems'))\n },\n after: {\n nodes: [],\n edges: [],\n combos: []\n }\n };\n this.targets.map(function (combo) {\n // 将 Combo 放置到某个 Combo 上面时,只有当 onlyChangeComboSize 为 false 时候才更新 Combo 结构\n if (!_this.onlyChangeComboSize) {\n graph.updateComboTree(combo, undefined, stack_1);\n } else {\n graph.updateCombo(combo);\n var _a = combo.getModel(),\n x = _a.x,\n y = _a.y,\n id = _a.id;\n stackData_1.after.combos.push({\n x: x,\n y: y,\n id: id\n });\n graph.pushStack('update', stackData_1);\n }\n });\n }\n this.point = [];\n this.origin = null;\n this.originPoint = null;\n this.targets.length = 0;\n },\n /**\n * 遍历 comboTree,分别更新 node 和 combo\n * @param data\n * @param fn\n */\n traverse: function traverse(data, fn, edgesToBeUpdate) {\n var _this = this;\n if (edgesToBeUpdate === void 0) {\n edgesToBeUpdate = {};\n }\n if (fn(data, edgesToBeUpdate) === false) {\n return;\n }\n if (data) {\n var combos = data.get('combos');\n Object(_antv_util__WEBPACK_IMPORTED_MODULE_1__[\"each\"])(combos, function (child) {\n _this.traverse(child, fn, edgesToBeUpdate);\n });\n var nodes = data.get('nodes');\n Object(_antv_util__WEBPACK_IMPORTED_MODULE_1__[\"each\"])(nodes, function (child) {\n _this.traverse(child, fn, edgesToBeUpdate);\n });\n }\n },\n updateCombo: function updateCombo(item, evt, restore) {\n this.updateSingleItem(item, evt, restore);\n var edgesToBeUpdate = {};\n this.traverse(item, function (paramItem, paramEdgesMap) {\n if (paramItem.destroyed) {\n return false;\n }\n paramItem.getEdges().forEach(function (edge) {\n return paramEdgesMap[edge.getID()] = edge;\n });\n return true;\n }, edgesToBeUpdate);\n Object.values(edgesToBeUpdate).forEach(function (edge) {\n return edge.refresh();\n });\n },\n /**\n *\n * @param item 当前正在拖动的元素\n * @param evt\n */\n updateSingleItem: function updateSingleItem(item, evt, restore) {\n var origin = this.origin;\n var graph = this.graph;\n var model = item.getModel();\n var itemId = item.get('id');\n if (!this.point[itemId]) {\n this.point[itemId] = {\n x: model.x,\n y: model.y\n };\n }\n var x = evt.x - origin.x + this.point[itemId].x;\n var y = evt.y - origin.y + this.point[itemId].y;\n if (restore) {\n x += origin.x - evt.x;\n y += origin.y - evt.y;\n }\n graph.updateItem(item, {\n x: x,\n y: y\n }, false);\n // item.getEdges()?.forEach(edge => edge.refresh());\n },\n\n /**\n * 根据 ID 获取父 Combo\n * @param parentId 父 Combo ID\n */\n getParentCombo: function getParentCombo(parentId) {\n var graph = this.graph;\n if (!parentId) {\n return undefined;\n }\n var parentCombo = graph.findById(parentId);\n if (!parentCombo) {\n return undefined;\n }\n return parentCombo;\n },\n updateDelegate: function updateDelegate(evt) {\n var graph = this.graph;\n // 当没有 delegate shape 时创建\n if (!this.delegateShape) {\n var delegateGroup = graph.get('delegateGroup');\n var bbox = null;\n if (this.targets.length > 1) {\n bbox = calculationItemsBBox(this.targets);\n } else {\n bbox = this.targets[0].getBBox();\n }\n var x = bbox.x,\n y = bbox.y,\n width = bbox.width,\n height = bbox.height,\n minX = bbox.minX,\n minY = bbox.minY;\n this.originPoint = {\n x: x,\n y: y,\n width: width,\n height: height,\n minX: minX,\n minY: minY\n };\n var attrs = Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__assign\"])(Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__assign\"])({}, _global__WEBPACK_IMPORTED_MODULE_3__[\"default\"].delegateStyle), this.delegateStyle);\n this.delegateShape = delegateGroup.addShape('rect', {\n attrs: Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__assign\"])({\n width: bbox.width,\n height: bbox.height,\n x: bbox.x,\n y: bbox.y\n }, attrs),\n name: 'combo-delegate-shape'\n });\n this.delegateShape.set('capture', false);\n this.delegate = this.delegateShape;\n } else {\n var clientX = evt.x - this.origin.x + this.originPoint.minX;\n var clientY = evt.y - this.origin.y + this.originPoint.minY;\n this.delegateShape.attr({\n x: clientX,\n y: clientY\n });\n }\n },\n /**\n * updates the parent combos' size and position\n */\n updateParentCombos: function updateParentCombos() {\n var _a = this,\n graph = _a.graph,\n targets = _a.targets;\n var comboParentMap = {};\n targets === null || targets === void 0 ? void 0 : targets.forEach(function (target) {\n var comboId = target.getModel().parentId;\n if (comboId) comboParentMap[comboId] = graph.findById(comboId);\n });\n Object.values(comboParentMap).forEach(function (combo) {\n if (combo) graph.updateCombo(combo);\n });\n }\n});\n\n//# sourceURL=webpack:///./node_modules/@antv/g6-pc/es/behavior/drag-combo.js?");
/***/ }),
/***/ "./node_modules/@antv/g6-pc/es/behavior/drag-node.js":
/*!***********************************************************!*\
!*** ./node_modules/@antv/g6-pc/es/behavior/drag-node.js ***!
\***********************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tslib */ \"./node_modules/tslib/tslib.es6.js\");\n/* harmony import */ var _antv_util__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @antv/util */ \"./node_modules/@antv/util/esm/index.js\");\n/* harmony import */ var _global__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../global */ \"./node_modules/@antv/g6-pc/es/global.js\");\n\n\n\n/* harmony default export */ __webpack_exports__[\"default\"] = ({\n getDefaultCfg: function getDefaultCfg() {\n return {\n updateEdge: true,\n delegateStyle: {},\n // 是否开启delegate\n enableDelegate: false,\n // 拖动节点过程中是否只改变 Combo 的大小,而不改变其结构\n onlyChangeComboSize: false,\n // 拖动过程中目标 combo 状态样式\n comboActiveState: '',\n selectedState: 'selected',\n enableOptimize: false,\n enableDebounce: false,\n enableStack: true\n };\n },\n getEvents: function getEvents() {\n return {\n 'node:mousedown': 'onMouseDown',\n drag: 'onDragMove',\n dragend: 'onDragEnd',\n 'combo:dragenter': 'onDragEnter',\n 'combo:dragleave': 'onDragLeave',\n 'combo:drop': 'onDropCombo',\n 'node:drop': 'onDropNode',\n 'canvas:drop': 'onDropCanvas',\n touchstart: 'onTouchStart',\n touchmove: 'onTouchMove',\n touchend: 'onDragEnd',\n afterchangedata: 'onDragEnd'\n };\n },\n validationCombo: function validationCombo(item) {\n if (!this.origin || !item || item.destroyed) {\n return false;\n }\n var type = item.getType();\n if (type !== 'combo') {\n return false;\n }\n return true;\n },\n onTouchStart: function onTouchStart(evt) {\n if (!evt.item) return;\n var self = this;\n try {\n var touches = evt.originalEvent.touches;\n var event1 = touches[0];\n var event2 = touches[1];\n if (event1 && event2) {\n return;\n }\n evt.preventDefault();\n } catch (e) {\n console.warn('Touch original event not exist!');\n }\n this.mousedown = {\n item: evt.item,\n target: evt.target,\n origin: {\n x: evt.x,\n y: evt.y\n }\n };\n this.dragstart = true;\n self.onDragStart(evt);\n },\n onTouchMove: function onTouchMove(e) {\n var self = this;\n try {\n var touches = e.originalEvent.touches;\n var event1 = touches[0];\n var event2 = touches[1];\n if (event1 && event2) {\n self.onDragEnd(e);\n return;\n }\n e.preventDefault();\n } catch (e) {\n console.warn('Touch original event not exist!');\n }\n self.onDrag(e);\n },\n /**\n * cache the manipulated item and target, since drag and dragend are global events but not node:*\n * @param evt event param\n */\n onMouseDown: function onMouseDown(evt) {\n this.mousedown = {\n item: evt.item,\n target: evt.target,\n origin: {\n x: evt.x,\n y: evt.y\n }\n };\n // 绑定浏览器监听,触发拖拽结束,结束拖拽时移除\n if (typeof window !== 'undefined' && !this.windowEventBinded) {\n this.windowEventBinded = true;\n document.body.addEventListener('contextmenu', this.onDragEnd.bind(this));\n document.body.addEventListener('mouseup', this.onDragEnd.bind(this));\n }\n },\n /**\n * trigger dragstart/drag by mousedown and drag events\n * @param evt event param\n */\n onDragMove: function onDragMove(evt) {\n var _a, _b;\n if (((_b = (_a = evt.item) === null || _a === void 0 ? void 0 : _a.getType) === null || _b === void 0 ? void 0 : _b.call(_a)) !== 'node') {\n this.onDragEnd();\n return;\n }\n if (!this.mousedown) return;\n if (!this.dragstart) {\n // dragstart\n this.dragstart = true;\n this.onDragStart(evt);\n } else {\n // drag\n this.onDrag(Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__assign\"])(Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__assign\"])({}, evt), this.mousedown));\n }\n },\n /**\n * 开始拖动节点\n * @param evt\n */\n onDragStart: function onDragStart(evt) {\n var _this = this;\n this.currentShouldEnd = true;\n if (!this.shouldBegin(Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__assign\"])(Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__assign\"])({}, evt), this.mousedown), this)) {\n return;\n }\n var _a = this.mousedown,\n item = _a.item,\n target = _a.target;\n if (!item || item.destroyed || item.hasLocked()) {\n return;\n }\n // 拖动时,设置拖动元素的 capture 为false,则不拾取拖动的元素\n var group = item.getContainer();\n group.set('capture', false);\n if (!this.cachedCaptureItems) this.cachedCaptureItems = [];\n this.cachedCaptureItems.push(item);\n // 如果拖动的target 是linkPoints / anchorPoints 则不允许拖动\n if (target) {\n var isAnchorPoint = target.get('isAnchorPoint');\n if (isAnchorPoint) {\n return;\n }\n }\n var graph = this.graph;\n this.targets = [];\n // 将节点拖入到指定的 Combo\n this.targetCombo = null;\n // 获取所有选中的元素\n var nodes = graph.findAllByState('node', this.selectedState);\n var currentNodeId = item.get('id');\n // 当前拖动的节点是否是选中的节点\n var dragNodes = nodes.filter(function (node) {\n var nodeId = node.get('id');\n return currentNodeId === nodeId;\n });\n // 只拖动当前节点\n if (dragNodes.length === 0) {\n this.targets.push(item);\n } else if (nodes.length > 1) {\n // 拖动多个节点\n nodes.forEach(function (node) {\n var locked = node.hasLocked();\n if (!locked) {\n _this.targets.push(node);\n }\n });\n } else {\n this.targets.push(item);\n }\n if (this.graph.get('enabledStack') && this.enableStack) {\n var beforeDragNodes_1 = [];\n this.targets.forEach(function (t) {\n var _a = t.getModel(),\n x = _a.x,\n y = _a.y,\n id = _a.id;\n beforeDragNodes_1.push({\n x: x,\n y: y,\n id: id\n });\n });\n this.set('beforeDragNodes', beforeDragNodes_1);\n }\n this.hidenEdge = {};\n if (this.get('updateEdge') && this.enableOptimize && !this.enableDelegate) {\n this.targets.forEach(function (node) {\n var edges = node.getEdges();\n edges.forEach(function (edge) {\n if (!edge.isVisible()) return;\n _this.hidenEdge[edge.getID()] = true;\n edge.hide();\n });\n });\n }\n this.origin = this.mousedown.origin;\n this.point = {};\n this.originPoint = {};\n },\n /**\n * 持续拖动节点\n * @param evt\n */\n onDrag: function onDrag(evt) {\n var _this = this;\n if (!this.mousedown || !this.origin) return;\n if (!this.shouldUpdate(evt, this)) return;\n if (this.get('enableDelegate')) {\n this.updateDelegate(evt);\n } else {\n if (this.enableDebounce) {\n this.debounceUpdate({\n targets: this.targets,\n graph: this.graph,\n point: this.point,\n origin: this.origin,\n evt: evt,\n updateEdge: this.get('updateEdge'),\n onlyChangeComboSize: this.onlyChangeComboSize,\n updateParentCombos: this.updateParentCombos\n });\n } else {\n var parentComboMap_1 = {};\n this.targets.map(function (target) {\n _this.update(target, evt);\n var parentComboId = target.getModel().comboId;\n if (parentComboId) parentComboMap_1[parentComboId] = _this.graph.findById(parentComboId);\n });\n if (this.onlyChangeComboSize) {\n // 拖动节点过程中,动态改变 Combo 的大小\n this.updateParentCombos();\n }\n }\n }\n },\n /**\n * 拖动结束,设置拖动元素capture为true,更新元素位置,如果是拖动涉及到 combo,则更新 combo 结构\n * @param evt\n */\n onDragEnd: function onDragEnd(evt) {\n var _this = this;\n var _a;\n this.mousedown = false;\n this.dragstart = false;\n // 移除浏览器监听\n if (typeof window !== 'undefined' && this.windowEventBinded) {\n this.windowEventBinded = false;\n document.body.removeEventListener('contextmenu', this.onDragEnd.bind(this));\n document.body.removeEventListener('mouseup', this.onDragEnd.bind(this));\n }\n if (!this.origin) {\n return;\n }\n // 拖动结束后,设置拖动元素 group 的 capture 为 true,允许拾取拖动元素\n (_a = this.cachedCaptureItems) === null || _a === void 0 ? void 0 : _a.forEach(function (item) {\n var group = item.getContainer();\n group.set('capture', true);\n });\n this.cachedCaptureItems = [];\n if (this.delegateRect) {\n this.delegateRect.remove();\n this.delegateRect = null;\n }\n if (this.get('updateEdge') && this.enableOptimize && !this.enableDelegate) {\n this.targets.forEach(function (node) {\n var edges = node.getEdges();\n edges.forEach(function (edge) {\n if (_this.hidenEdge[edge.getID()]) edge.show();\n edge.refresh();\n });\n });\n }\n this.hidenEdge = {};\n var graph = this.graph;\n // 拖动结束后,入栈\n if (graph.get('enabledStack') && this.enableStack) {\n var stackData_1 = {\n before: {\n nodes: [],\n edges: [],\n combos: []\n },\n after: {\n nodes: [],\n edges: [],\n combos: []\n }\n };\n this.get('beforeDragNodes').forEach(function (model) {\n stackData_1.before.nodes.push(model);\n });\n this.targets.forEach(function (target) {\n var _a = target.getModel(),\n x = _a.x,\n y = _a.y,\n id = _a.id;\n stackData_1.after.nodes.push({\n x: x,\n y: y,\n id: id\n });\n });\n graph.pushStack('update', Object(_antv_util__WEBPACK_IMPORTED_MODULE_1__[\"clone\"])(stackData_1));\n }\n // 拖动结束后emit事件,将当前操作的节点抛出去,目标节点为null\n graph.emit('dragnodeend', {\n items: this.targets,\n targetItem: null\n });\n this.point = {};\n this.origin = null;\n this.originPoint = {};\n this.targets.length = 0;\n this.targetCombo = null;\n },\n /**\n * 拖动过程中将节点放置到 combo 上\n * @param evt\n */\n onDropCombo: function onDropCombo(evt) {\n var item = evt.item;\n this.currentShouldEnd = this.shouldEnd(evt, item, this);\n // 若不允许结束,则将节点位置设置回初识位置。后面的逻辑仍需要执行\n this.updatePositions(evt, !this.currentShouldEnd);\n if (!this.currentShouldEnd || !this.validationCombo(item)) return;\n var graph = this.graph;\n if (this.comboActiveState) {\n graph.setItemState(item, this.comboActiveState, false);\n }\n this.targetCombo = item;\n // 拖动结束后是动态改变 Combo 大小还是将节点从 Combo 中删除\n if (this.onlyChangeComboSize) {\n // 拖动节点结束后,动态改变 Combo 的大小\n graph.updateCombos();\n } else {\n var targetComboModel_1 = item.getModel();\n this.targets.map(function (node) {\n var nodeModel = node.getModel();\n if (nodeModel.comboId !== targetComboModel_1.id) {\n graph.updateComboTree(node, targetComboModel_1.id);\n }\n });\n graph.updateCombo(item);\n }\n // 将节点拖动到 combo 上面,emit事件抛出当前操作的节点及目标 combo\n graph.emit('dragnodeend', {\n items: this.targets,\n targetItem: this.targetCombo\n });\n },\n onDropCanvas: function onDropCanvas(evt) {\n var graph = this.graph;\n this.currentShouldEnd = this.shouldEnd(evt, undefined, this);\n // 若不允许结束,则将节点位置设置回初识位置。后面的逻辑仍需要执行\n this.updatePositions(evt, !this.currentShouldEnd);\n if (!this.targets || this.targets.length === 0 || !this.currentShouldEnd) return;\n if (this.onlyChangeComboSize) {\n this.updateParentCombos();\n } else {\n this.targets.map(function (node) {\n // 拖动的节点有 comboId,即是从其他 combo 中拖出时才处理\n var model = node.getModel();\n if (model.comboId) {\n graph.updateComboTree(node);\n }\n });\n }\n },\n /**\n * 拖动放置到某个 combo 中的子 node 上\n * @param evt\n */\n onDropNode: function onDropNode(evt) {\n if (!this.targets || this.targets.length === 0) return;\n var self = this;\n var item = evt.item;\n var graph = self.graph;\n var comboId = item.getModel().comboId;\n var newParentCombo = comboId ? graph.findById(comboId) : undefined;\n this.currentShouldEnd = this.shouldEnd(evt, newParentCombo, this);\n // 若不允许结束,则将节点位置设置回初识位置。后面的逻辑仍需要执行\n this.updatePositions(evt, !this.currentShouldEnd);\n if (!this.currentShouldEnd) return;\n if (this.onlyChangeComboSize) {\n this.updateParentCombos();\n } else if (comboId) {\n var combo = graph.findById(comboId);\n if (self.comboActiveState) {\n graph.setItemState(combo, self.comboActiveState, false);\n }\n this.targets.map(function (node) {\n var nodeModel = node.getModel();\n if (comboId !== nodeModel.comboId) {\n graph.updateComboTree(node, comboId);\n }\n });\n graph.updateCombo(combo);\n } else {\n this.targets.map(function (node) {\n var model = node.getModel();\n if (model.comboId) {\n graph.updateComboTree(node);\n }\n });\n }\n // 将节点拖动到另外个节点上面,emit 事件抛出当前操作的节点及目标节点\n graph.emit('dragnodeend', {\n items: this.targets,\n targetItem: item\n });\n },\n /**\n * 将节点拖入到 Combo 中\n * @param evt\n */\n onDragEnter: function onDragEnter(evt) {\n var item = evt.item;\n if (!this.validationCombo(item)) return;\n var graph = this.graph;\n if (this.comboActiveState) {\n graph.setItemState(item, this.comboActiveState, true);\n }\n },\n /**\n * 将节点从 Combo 中拖出\n * @param evt\n */\n onDragLeave: function onDragLeave(evt) {\n var item = evt.item;\n if (!this.validationCombo(item)) return;\n var graph = this.graph;\n if (this.comboActiveState) {\n graph.setItemState(item, this.comboActiveState, false);\n }\n },\n updatePositions: function updatePositions(evt, restore) {\n var _this = this;\n if (!this.targets || this.targets.length === 0) return;\n // 当开启 delegate 时,拖动结束后需要更新所有已选中节点的位置\n if (this.get('enableDelegate')) {\n if (this.enableDebounce) this.debounceUpdate({\n targets: this.targets,\n graph: this.graph,\n point: this.point,\n origin: this.origin,\n evt: evt,\n updateEdge: this.get('updateEdge'),\n onlyChangeComboSize: this.onlyChangeComboSize,\n updateParentCombos: this.updateParentCombos\n });else if (!restore) this.targets.map(function (node) {\n return _this.update(node, evt);\n });\n } else this.targets.map(function (node) {\n return _this.update(node, evt, restore);\n });\n },\n /**\n * 更新节点\n * @param item 拖动的节点实例\n * @param evt\n */\n update: function update(item, evt, restore) {\n var origin = this.origin;\n var model = item.get('model');\n var nodeId = item.get('id');\n if (!this.point[nodeId]) {\n this.point[nodeId] = {\n x: model.x || 0,\n y: model.y || 0\n };\n }\n var x = evt.x - origin.x + this.point[nodeId].x;\n var y = evt.y - origin.y + this.point[nodeId].y;\n if (restore) {\n x += origin.x - evt.x;\n y += origin.y - evt.y;\n }\n var pos = {\n x: x,\n y: y\n };\n if (this.get('updateEdge')) {\n this.graph.updateItem(item, pos, false);\n } else {\n item.updatePosition(pos);\n }\n },\n /**\n * 限流更新节点\n * @param item 拖动的节点实例\n * @param evt\n */\n debounceUpdate: Object(_antv_util__WEBPACK_IMPORTED_MODULE_1__[\"debounce\"])(function (event) {\n var targets = event.targets,\n graph = event.graph,\n point = event.point,\n origin = event.origin,\n evt = event.evt,\n updateEdge = event.updateEdge,\n onlyChangeComboSize = event.onlyChangeComboSize,\n updateParentCombos = event.updateParentCombos;\n targets.map(function (item) {\n var model = item.get('model');\n var nodeId = item.get('id');\n if (!point[nodeId]) {\n point[nodeId] = {\n x: model.x || 0,\n y: model.y || 0\n };\n }\n var x = evt.x - origin.x + point[nodeId].x;\n var y = evt.y - origin.y + point[nodeId].y;\n var pos = {\n x: x,\n y: y\n };\n if (updateEdge) {\n graph.updateItem(item, pos, false);\n } else {\n item.updatePosition(pos);\n }\n });\n if (onlyChangeComboSize) {\n updateParentCombos(graph, targets);\n }\n }, 50, true),\n /**\n * 更新拖动元素时的delegate\n * @param {Event} evt 事件句柄\n * @param {number} x 拖动单个元素时候的x坐标\n * @param {number} y 拖动单个元素时候的y坐标\n */\n updateDelegate: function updateDelegate(evt) {\n var graph = this.graph;\n if (!this.delegateRect) {\n // 拖动多个\n var parent_1 = graph.get('group');\n var attrs = Object(_antv_util__WEBPACK_IMPORTED_MODULE_1__[\"deepMix\"])({}, _global__WEBPACK_IMPORTED_MODULE_2__[\"default\"].delegateStyle, this.delegateStyle);\n var _a = this.calculationGroupPosition(evt),\n cx = _a.x,\n cy = _a.y,\n width = _a.width,\n height = _a.height,\n minX = _a.minX,\n minY = _a.minY;\n this.originPoint = {\n x: cx,\n y: cy,\n width: width,\n height: height,\n minX: minX,\n minY: minY\n };\n // model上的x, y是相对于图形中心的,delegateShape是g实例,x,y是绝对坐标\n this.delegateRect = parent_1.addShape('rect', {\n attrs: Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__assign\"])({\n width: width,\n height: height,\n x: cx,\n y: cy\n }, attrs),\n name: 'rect-delegate-shape'\n });\n this.delegate = this.delegateRect;\n this.delegateRect.set('capture', false);\n } else {\n var clientX = evt.x - this.origin.x + this.originPoint.minX;\n var clientY = evt.y - this.origin.y + this.originPoint.minY;\n this.delegateRect.attr({\n x: clientX,\n y: clientY\n });\n }\n },\n /**\n * 计算delegate位置,包括左上角左边及宽度和高度\n * @memberof ItemGroup\n * @return {object} 计算出来的delegate坐标信息及宽高\n */\n calculationGroupPosition: function calculationGroupPosition(evt) {\n var nodes = this.targets;\n if (nodes.length === 0) {\n nodes.push(evt.item);\n }\n var minx = Infinity;\n var maxx = -Infinity;\n var miny = Infinity;\n var maxy = -Infinity;\n // 获取已节点的所有最大最小x y值\n for (var i = 0; i < nodes.length; i++) {\n var element = nodes[i];\n var bbox = element.getBBox();\n var minX = bbox.minX,\n minY = bbox.minY,\n maxX = bbox.maxX,\n maxY = bbox.maxY;\n if (minX < minx) {\n minx = minX;\n }\n if (minY < miny) {\n miny = minY;\n }\n if (maxX > maxx) {\n maxx = maxX;\n }\n if (maxY > maxy) {\n maxy = maxY;\n }\n }\n var x = Math.floor(minx);\n var y = Math.floor(miny);\n var width = Math.ceil(maxx) - Math.floor(minx);\n var height = Math.ceil(maxy) - Math.floor(miny);\n return {\n x: x,\n y: y,\n width: width,\n height: height,\n minX: minx,\n minY: miny\n };\n },\n /**\n * updates the parent combos' size and position\n * @param paramGraph param for debounce function, where 'this' is not available\n * @param paramTargets param for debounce function, where 'this' is not available\n */\n updateParentCombos: function updateParentCombos(paramGraph, paramTargets) {\n var graph = paramGraph || this.graph;\n var targets = paramTargets || this.targets;\n var comboParentMap = {};\n targets === null || targets === void 0 ? void 0 : targets.forEach(function (target) {\n var comboId = target.getModel().comboId;\n if (comboId) comboParentMap[comboId] = graph.findById(comboId);\n });\n Object.values(comboParentMap).forEach(function (combo) {\n if (combo) graph.updateCombo(combo);\n });\n }\n});\n\n//# sourceURL=webpack:///./node_modules/@antv/g6-pc/es/behavior/drag-node.js?");
/***/ }),
/***/ "./node_modules/@antv/g6-pc/es/behavior/edge-tooltip.js":
/*!**************************************************************!*\
!*** ./node_modules/@antv/g6-pc/es/behavior/edge-tooltip.js ***!
\**************************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tslib */ \"./node_modules/tslib/tslib.es6.js\");\n/* harmony import */ var _tooltip_base__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./tooltip-base */ \"./node_modules/@antv/g6-pc/es/behavior/tooltip-base.js\");\n\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__assign\"])({\n getDefaultCfg: function getDefaultCfg() {\n return {\n item: 'edge',\n offset: 12,\n formatText: function formatText(model) {\n return \"source: \".concat(model.source, \" target: \").concat(model.target);\n }\n };\n },\n getEvents: function getEvents() {\n return {\n 'edge:mouseenter': 'onMouseEnter',\n 'edge:mouseleave': 'onMouseLeave',\n 'edge:mousemove': 'onMouseMove',\n afterremoveitem: 'onMouseLeave'\n };\n }\n}, _tooltip_base__WEBPACK_IMPORTED_MODULE_1__[\"default\"]));\n\n//# sourceURL=webpack:///./node_modules/@antv/g6-pc/es/behavior/edge-tooltip.js?");
/***/ }),
/***/ "./node_modules/@antv/g6-pc/es/behavior/index.js":
/*!*******************************************************!*\
!*** ./node_modules/@antv/g6-pc/es/behavior/index.js ***!
\*******************************************************/
/*! no exports provided */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _antv_util__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @antv/util */ \"./node_modules/@antv/util/esm/index.js\");\n/* harmony import */ var _antv_g6_core__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @antv/g6-core */ \"./node_modules/@antv/g6-core/es/index.js\");\n/* harmony import */ var _drag_canvas__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./drag-canvas */ \"./node_modules/@antv/g6-pc/es/behavior/drag-canvas.js\");\n/* harmony import */ var _drag_node__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./drag-node */ \"./node_modules/@antv/g6-pc/es/behavior/drag-node.js\");\n/* harmony import */ var _activate_relations__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./activate-relations */ \"./node_modules/@antv/g6-pc/es/behavior/activate-relations.js\");\n/* harmony import */ var _brush_select__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./brush-select */ \"./node_modules/@antv/g6-pc/es/behavior/brush-select.js\");\n/* harmony import */ var _click_select__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./click-select */ \"./node_modules/@antv/g6-pc/es/behavior/click-select.js\");\n/* harmony import */ var _zoom_canvas__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./zoom-canvas */ \"./node_modules/@antv/g6-pc/es/behavior/zoom-canvas.js\");\n/* harmony import */ var _tooltip__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./tooltip */ \"./node_modules/@antv/g6-pc/es/behavior/tooltip.js\");\n/* harmony import */ var _edge_tooltip__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./edge-tooltip */ \"./node_modules/@antv/g6-pc/es/behavior/edge-tooltip.js\");\n/* harmony import */ var _collapse_expand__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./collapse-expand */ \"./node_modules/@antv/g6-pc/es/behavior/collapse-expand.js\");\n/* harmony import */ var _drag_combo__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./drag-combo */ \"./node_modules/@antv/g6-pc/es/behavior/drag-combo.js\");\n/* harmony import */ var _collapse_expand_combo__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./collapse-expand-combo */ \"./node_modules/@antv/g6-pc/es/behavior/collapse-expand-combo.js\");\n/* harmony import */ var _lasso_select__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./lasso-select */ \"./node_modules/@antv/g6-pc/es/behavior/lasso-select.js\");\n/* harmony import */ var _create_edge__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ./create-edge */ \"./node_modules/@antv/g6-pc/es/behavior/create-edge.js\");\n/* harmony import */ var _shortcuts_call__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ./shortcuts-call */ \"./node_modules/@antv/g6-pc/es/behavior/shortcuts-call.js\");\n/* harmony import */ var _scroll_canvas__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ./scroll-canvas */ \"./node_modules/@antv/g6-pc/es/behavior/scroll-canvas.js\");\n\n\n// import Behavior from './behavior';\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar behaviors = {\n 'drag-canvas': _drag_canvas__WEBPACK_IMPORTED_MODULE_2__[\"default\"],\n 'zoom-canvas': _zoom_canvas__WEBPACK_IMPORTED_MODULE_7__[\"default\"],\n 'drag-node': _drag_node__WEBPACK_IMPORTED_MODULE_3__[\"default\"],\n 'activate-relations': _activate_relations__WEBPACK_IMPORTED_MODULE_4__[\"default\"],\n 'brush-select': _brush_select__WEBPACK_IMPORTED_MODULE_5__[\"default\"],\n 'click-select': _click_select__WEBPACK_IMPORTED_MODULE_6__[\"default\"],\n 'lasso-select': _lasso_select__WEBPACK_IMPORTED_MODULE_13__[\"default\"],\n tooltip: _tooltip__WEBPACK_IMPORTED_MODULE_8__[\"default\"],\n 'edge-tooltip': _edge_tooltip__WEBPACK_IMPORTED_MODULE_9__[\"default\"],\n 'collapse-expand': _collapse_expand__WEBPACK_IMPORTED_MODULE_10__[\"default\"],\n 'drag-combo': _drag_combo__WEBPACK_IMPORTED_MODULE_11__[\"default\"],\n 'collapse-expand-combo': _collapse_expand_combo__WEBPACK_IMPORTED_MODULE_12__[\"default\"],\n 'create-edge': _create_edge__WEBPACK_IMPORTED_MODULE_14__[\"default\"],\n 'shortcuts-call': _shortcuts_call__WEBPACK_IMPORTED_MODULE_15__[\"default\"],\n 'scroll-canvas': _scroll_canvas__WEBPACK_IMPORTED_MODULE_16__[\"default\"]\n};\nObject(_antv_util__WEBPACK_IMPORTED_MODULE_0__[\"each\"])(behaviors, function (behavior, type) {\n Object(_antv_g6_core__WEBPACK_IMPORTED_MODULE_1__[\"registerBehavior\"])(type, behavior);\n});\n// export default Behavior;\n\n//# sourceURL=webpack:///./node_modules/@antv/g6-pc/es/behavior/index.js?");
/***/ }),
/***/ "./node_modules/@antv/g6-pc/es/behavior/lasso-select.js":
/*!**************************************************************!*\
!*** ./node_modules/@antv/g6-pc/es/behavior/lasso-select.js ***!
\**************************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tslib */ \"./node_modules/tslib/tslib.es6.js\");\n/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../util */ \"./node_modules/@antv/g6-pc/es/util/index.js\");\n\n\nvar isPolygonsIntersect = _util__WEBPACK_IMPORTED_MODULE_1__[\"default\"].isPolygonsIntersect,\n pathToPoints = _util__WEBPACK_IMPORTED_MODULE_1__[\"default\"].pathToPoints;\nvar DEFAULT_TRIGGER = 'shift';\nvar ALLOW_EVENTS = ['drag', 'shift', 'ctrl', 'alt', 'control'];\nvar isItemIntersecPolygon = function isItemIntersecPolygon(item, polyPoints) {\n var shapePoints;\n var shape = item.getKeyShape();\n if (item.get('type') === 'path') {\n shapePoints = pathToPoints(shape.attr('path'));\n } else {\n var shapeBBox = shape.getCanvasBBox();\n shapePoints = [[shapeBBox.minX, shapeBBox.minY], [shapeBBox.maxX, shapeBBox.minY], [shapeBBox.maxX, shapeBBox.maxY], [shapeBBox.minX, shapeBBox.maxY]];\n }\n return isPolygonsIntersect(polyPoints, shapePoints);\n};\n/* harmony default export */ __webpack_exports__[\"default\"] = ({\n getDefaultCfg: function getDefaultCfg() {\n return {\n delegateStyle: {\n fill: '#EEF6FF',\n fillOpacity: 0.4,\n stroke: '#DDEEFE',\n lineWidth: 1\n },\n onSelect: function onSelect() {},\n onDeselect: function onDeselect() {},\n shouldDeselect: undefined,\n selectedState: 'selected',\n trigger: DEFAULT_TRIGGER,\n includeEdges: true,\n selectedEdges: [],\n selectedNodes: []\n // multiple: false,\n };\n },\n\n getEvents: function getEvents() {\n // 检测输入是否合法\n if (!(ALLOW_EVENTS.indexOf(this.trigger.toLowerCase()) > -1)) {\n this.trigger = DEFAULT_TRIGGER;\n console.warn(\"Behavior lasso-select 的 trigger 参数不合法,请输入 'drag'、'shift'、'ctrl' 或 'alt'\");\n }\n if (this.trigger === 'drag') {\n return {\n dragstart: 'onDragStart',\n drag: 'onDragMove',\n dragend: 'onDragEnd',\n 'canvas:click': 'clearStates'\n };\n }\n return {\n dragstart: 'onDragStart',\n drag: 'onDragMove',\n dragend: 'onDragEnd',\n keyup: 'onKeyUp',\n keydown: 'onKeyDown',\n 'canvas:click': 'clearStates'\n };\n },\n onDragStart: function onDragStart(e) {\n var lasso = this.lasso;\n var item = e.item;\n // 排除在节点上拖动\n if (item) {\n return;\n }\n if (this.trigger !== 'drag' && !this.keydown) {\n return;\n }\n if (this.selectedNodes && this.selectedNodes.length !== 0) {\n this.clearStates('dragstart');\n }\n if (!lasso) {\n lasso = this.createLasso();\n }\n this.dragging = true;\n this.originPoint = {\n x: e.x,\n y: e.y\n };\n this.points.push(this.originPoint);\n lasso.show();\n },\n onDragMove: function onDragMove(e) {\n if (!this.dragging) {\n return;\n }\n if (this.trigger !== 'drag' && !this.keydown) {\n return;\n }\n this.points.push({\n x: e.x,\n y: e.y\n });\n this.updateLasso(e);\n },\n onDragEnd: function onDragEnd(e) {\n if (!this.lasso && !this.dragging) {\n return;\n }\n if (this.trigger !== 'drag' && !this.keydown) {\n return;\n }\n this.points.push(this.originPoint);\n this.getSelectedItems();\n this.lasso.remove(true);\n this.lasso = null;\n this.points = [];\n this.dragging = false;\n },\n getLassoPath: function getLassoPath() {\n var points = this.points;\n var path = [];\n if (points.length) {\n points.forEach(function (point, index) {\n if (index === 0) {\n path.push(['M', point.x, point.y]);\n } else {\n path.push(['L', point.x, point.y]);\n }\n });\n path.push(['L', points[0].x, points[0].y]);\n }\n return path;\n },\n clearStates: function clearStates(action) {\n if (action === void 0) {\n action = 'canvas:click';\n }\n var _a = this,\n graph = _a.graph,\n selectedState = _a.selectedState,\n shouldDeselect = _a.shouldDeselect;\n var nodes = graph.findAllByState('node', selectedState);\n var edges = graph.findAllByState('edge', selectedState);\n if (!shouldDeselect || shouldDeselect({\n action: action,\n nodes: nodes,\n edges: edges\n })) {\n nodes.forEach(function (node) {\n return graph.setItemState(node, selectedState, false);\n });\n edges.forEach(function (edge) {\n return graph.setItemState(edge, selectedState, false);\n });\n }\n if (this.onDeselect) {\n this.onDeselect(this.selectedNodes, this.selectedEdges);\n }\n this.selectedNodes = [];\n this.selectedEdges = [];\n graph.emit('nodeselectchange', {\n selectedItems: {\n nodes: [],\n edges: []\n },\n select: false\n });\n },\n getSelectedItems: function getSelectedItems() {\n var _this = this;\n var _a = this,\n graph = _a.graph,\n shouldUpdate = _a.shouldUpdate;\n var lassoContour = this.points.map(function (point) {\n return [graph.getCanvasByPoint(point.x, point.y).x, graph.getCanvasByPoint(point.x, point.y).y];\n });\n var state = this.selectedState;\n var selectedNodes = [];\n var selectedIds = [];\n graph.getNodes().forEach(function (node) {\n if (!node.isVisible()) return; // 隐藏节点不能被选中\n if (isItemIntersecPolygon(node, lassoContour)) {\n if (shouldUpdate(node, 'select', _this)) {\n selectedNodes.push(node);\n var model = node.getModel();\n selectedIds.push(model.id);\n graph.setItemState(node, state, true);\n }\n }\n });\n var selectedEdges = [];\n if (this.includeEdges) {\n // 选中边,边的source和target都在选中的节点中时才选中\n selectedNodes.forEach(function (node) {\n var edges = node.getOutEdges();\n edges.forEach(function (edge) {\n if (!edge.isVisible()) return; // 隐藏边不能够被选中\n var model = edge.getModel();\n var source = model.source,\n target = model.target;\n if (selectedIds.includes(source) && selectedIds.includes(target) && shouldUpdate(edge, 'select', _this)) {\n selectedEdges.push(edge);\n graph.setItemState(edge, _this.selectedState, true);\n }\n });\n });\n }\n this.selectedEdges = selectedEdges;\n this.selectedNodes = selectedNodes;\n if (this.onSelect) {\n this.onSelect(selectedNodes, selectedEdges);\n }\n graph.emit('nodeselectchange', {\n selectedItems: {\n nodes: selectedNodes,\n edges: selectedEdges\n },\n select: true\n });\n },\n createLasso: function createLasso() {\n var self = this;\n var lasso = self.graph.get('delegateGroup').addShape('path', {\n attrs: Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__assign\"])({\n path: []\n }, self.delegateStyle),\n capture: false,\n name: 'lasso-shape'\n });\n this.lasso = lasso;\n this.delegate = lasso;\n this.points = [];\n return lasso;\n },\n updateLasso: function updateLasso(e) {\n var self = this;\n this.lasso.attr({\n path: self.getLassoPath()\n });\n },\n onKeyDown: function onKeyDown(e) {\n var code = e.key;\n if (!code) {\n return;\n }\n // if (this.selectedNodes && this.selectedNodes.length !== 0) {\n // this.clearStates();\n // }\n if (code.toLowerCase() === this.trigger.toLowerCase()) {\n this.keydown = true;\n } else {\n this.keydown = false;\n }\n },\n onKeyUp: function onKeyUp() {\n if (this.lasso) {\n // 清除所有选中状态后,设置拖得动状态为false,并清除框选的lasso\n this.lasso.remove(true);\n this.lasso = null;\n this.points = [];\n this.dragging = false;\n }\n this.keydown = false;\n }\n});\n\n//# sourceURL=webpack:///./node_modules/@antv/g6-pc/es/behavior/lasso-select.js?");
/***/ }),
/***/ "./node_modules/@antv/g6-pc/es/behavior/scroll-canvas.js":
/*!***************************************************************!*\
!*** ./node_modules/@antv/g6-pc/es/behavior/scroll-canvas.js ***!
\***************************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _antv_util__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @antv/util */ \"./node_modules/@antv/util/esm/index.js\");\n\nvar ALLOW_EVENTS = ['shift', 'ctrl', 'alt', 'control', 'meta'];\n/* harmony default export */ __webpack_exports__[\"default\"] = ({\n getDefaultCfg: function getDefaultCfg() {\n return {\n direction: 'both',\n enableOptimize: false,\n zoomKey: 'ctrl',\n // scroll-canvas 可滚动的扩展范围,默认为 0,即最多可以滚动一屏的位置\n // 当设置的值大于 0 时,即滚动可以超过一屏\n // 当设置的值小于 0 时,相当于缩小了可滚动范围\n // 具体实例可参考:https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*IFfoS67_HssAAAAAAAAAAAAAARQnAQ\n scalableRange: 0,\n allowDragOnItem: true\n };\n },\n getEvents: function getEvents() {\n if (!this.zoomKey || ALLOW_EVENTS.indexOf(this.zoomKey) === -1) this.zoomKey = 'ctrl';\n return {\n wheel: 'onWheel'\n };\n },\n onWheel: function onWheel(ev) {\n var _this = this;\n if (!this.allowDrag(ev)) return;\n var graph = this.graph;\n var zoomKeys = Array.isArray(this.zoomKey) ? [].concat(this.zoomKey) : [this.zoomKey];\n if (zoomKeys.includes('control')) zoomKeys.push('ctrl');\n var keyDown = zoomKeys.some(function (ele) {\n return ev[\"\".concat(ele, \"Key\")];\n });\n if (keyDown) {\n var canvas = graph.get('canvas');\n var point = canvas.getPointByClient(ev.clientX, ev.clientY);\n var ratio = graph.getZoom();\n if (ev.wheelDelta > 0) {\n ratio = ratio + ratio * 0.05;\n } else {\n ratio = ratio - ratio * 0.05;\n }\n graph.zoomTo(ratio, {\n x: point.x,\n y: point.y\n });\n } else {\n var dx = ev.deltaX || ev.movementX;\n var dy = ev.deltaY || ev.movementY;\n if (!dy && navigator.userAgent.indexOf('Firefox') > -1) dy = -ev.wheelDelta * 125 / 3;\n var width = this.graph.get('width');\n var height = this.graph.get('height');\n var graphCanvasBBox = this.graph.get('canvas').getCanvasBBox();\n var expandWidth = this.scalableRange;\n var expandHeight = this.scalableRange;\n // 若 scalableRange 是 0~1 的小数,则作为比例考虑\n if (expandWidth < 1 && expandWidth > -1) {\n expandWidth = width * expandWidth;\n expandHeight = height * expandHeight;\n }\n var minX = graphCanvasBBox.minX,\n maxX = graphCanvasBBox.maxX,\n minY = graphCanvasBBox.minY,\n maxY = graphCanvasBBox.maxY;\n if (dx > 0) {\n if (maxX < -expandWidth) {\n dx = 0;\n } else if (maxX - dx < -expandWidth) {\n dx = maxX + expandWidth;\n }\n } else if (dx < 0) {\n if (minX > width + expandWidth) {\n dx = 0;\n } else if (minX - dx > width + expandWidth) {\n dx = minX - (width + expandWidth);\n }\n }\n if (dy > 0) {\n if (maxY < -expandHeight) {\n dy = 0;\n } else if (maxY - dy < -expandHeight) {\n dy = maxY + expandHeight;\n }\n } else if (dy < 0) {\n if (minY > height + expandHeight) {\n dy = 0;\n } else if (minY - dy > height + expandHeight) {\n dy = minY - (height + expandHeight);\n }\n }\n if (this.get('direction') === 'x') {\n dy = 0;\n } else if (this.get('direction') === 'y') {\n dx = 0;\n }\n graph.translate(-dx, -dy);\n }\n ev.preventDefault();\n // hide the shapes when the zoom ratio is smaller than optimizeZoom\n // hide the shapes when zoomming\n var enableOptimize = this.get('enableOptimize');\n if (enableOptimize) {\n var optimizeZoom_1 = this.get('optimizeZoom');\n var optimized = this.get('optimized');\n var nodes_1 = graph.getNodes();\n var edges_1 = graph.getEdges();\n var nodesLength_1 = nodes_1.length;\n var edgesLength_1 = edges_1.length;\n // hiding\n if (!optimized) {\n for (var n = 0; n < nodesLength_1; n++) {\n var node = nodes_1[n];\n if (!node.destroyed) {\n var children = node.get('group').get('children');\n var childrenLength = children.length;\n for (var c = 0; c < childrenLength; c++) {\n var shape = children[c];\n if (!shape.destoryed && !shape.get('isKeyShape')) {\n shape.set('ori-visibility', shape.get('ori-visibility') || shape.get('visible'));\n shape.hide();\n }\n }\n }\n }\n for (var edgeIndex = 0; edgeIndex < edgesLength_1; edgeIndex++) {\n var edge = edges_1[edgeIndex];\n var children = edge.get('group').get('children');\n var childrenLength = children.length;\n for (var c = 0; c < childrenLength; c++) {\n var shape = children[c];\n shape.set('ori-visibility', shape.get('ori-visibility') || shape.get('visible'));\n shape.hide();\n }\n }\n this.set('optimized', true);\n }\n // showing after 100ms\n clearTimeout(this.get('timeout'));\n var timeout = setTimeout(function () {\n var currentZoom = graph.getZoom();\n var curOptimized = _this.get('optimized');\n if (curOptimized) {\n _this.set('optimized', false);\n for (var n = 0; n < nodesLength_1; n++) {\n var node = nodes_1[n];\n var children = node.get('group').get('children');\n var childrenLength = children.length;\n if (currentZoom < optimizeZoom_1) {\n var keyShape = node.getKeyShape();\n var oriVis = keyShape.get('ori-visibility');\n if (oriVis) keyShape.show();\n } else {\n for (var c = 0; c < childrenLength; c++) {\n var shape = children[c];\n var oriVis = shape.get('ori-visibility');\n if (!shape.get('visible') && oriVis) {\n if (oriVis) shape.show();\n }\n }\n }\n }\n for (var edgeIndex = 0; edgeIndex < edgesLength_1; edgeIndex++) {\n var edge = edges_1[edgeIndex];\n var children = edge.get('group').get('children');\n var childrenLength = children.length;\n if (currentZoom < optimizeZoom_1) {\n var keyShape = edge.getKeyShape();\n var oriVis = keyShape.get('ori-visibility');\n if (oriVis) keyShape.show();\n } else {\n for (var c = 0; c < childrenLength; c++) {\n var shape = children[c];\n if (!shape.get('visible')) {\n var oriVis = shape.get('ori-visibility');\n if (oriVis) shape.show();\n }\n }\n }\n }\n }\n }, 100);\n this.set('timeout', timeout);\n }\n },\n allowDrag: function allowDrag(evt) {\n var _a, _b;\n var target = evt.target;\n var targetIsCanvas = target && target.isCanvas && target.isCanvas();\n if (Object(_antv_util__WEBPACK_IMPORTED_MODULE_0__[\"isBoolean\"])(this.allowDragOnItem) && !this.allowDragOnItem && !targetIsCanvas) return false;\n if (Object(_antv_util__WEBPACK_IMPORTED_MODULE_0__[\"isObject\"])(this.allowDragOnItem)) {\n var _c = this.allowDragOnItem,\n node = _c.node,\n edge = _c.edge,\n combo = _c.combo;\n var itemType = (_b = (_a = evt.item) === null || _a === void 0 ? void 0 : _a.getType) === null || _b === void 0 ? void 0 : _b.call(_a);\n if (!node && itemType === 'node') return false;\n if (!edge && itemType === 'edge') return false;\n if (!combo && itemType === 'combo') return false;\n }\n return true;\n }\n});\n\n//# sourceURL=webpack:///./node_modules/@antv/g6-pc/es/behavior/scroll-canvas.js?");
/***/ }),
/***/ "./node_modules/@antv/g6-pc/es/behavior/shortcuts-call.js":
/*!****************************************************************!*\
!*** ./node_modules/@antv/g6-pc/es/behavior/shortcuts-call.js ***!
\****************************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\nvar DEFAULT_TRIGGER = 'ctrl';\nvar ALLOW_EVENTS = ['shift', 'ctrl', 'alt', 'control'];\nvar DEFAULT_COMBINED_KEY = '1';\n/* harmony default export */ __webpack_exports__[\"default\"] = ({\n getDefaultCfg: function getDefaultCfg() {\n return {\n trigger: DEFAULT_TRIGGER,\n combinedKey: DEFAULT_COMBINED_KEY,\n functionName: 'fitView',\n functionParams: []\n };\n },\n getEvents: function getEvents() {\n // 检测输入是否合法\n if (!(ALLOW_EVENTS.indexOf(this.trigger.toLowerCase()) > -1)) {\n this.trigger = DEFAULT_TRIGGER;\n console.warn(\"Behavior shortcuts-fit-view \\u7684 trigger \\u53C2\\u6570 '\".concat(this.trigger, \"' \\u4E0D\\u5408\\u6CD5\\uFF0C\\u8BF7\\u8F93\\u5165 'drag'\\u3001'shift'\\u3001'ctrl' \\u6216 'alt'\"));\n }\n if (this.combinedKey === this.trigger) {\n this.combinedKey = undefined;\n }\n return {\n keyup: 'onKeyUp',\n keydown: 'onKeyDown'\n };\n },\n onKeyDown: function onKeyDown(e) {\n var code = e.key;\n if (!code) {\n return;\n }\n var triggerLowerCase = this.trigger.toLowerCase();\n var codeLowerCase = code.toLowerCase();\n // 按住 control 键时,允许用户设置 trigger 为 ctrl\n if (!this.triggerKeydown) {\n if (codeLowerCase === triggerLowerCase || codeLowerCase === 'control' && triggerLowerCase === 'ctrl' || codeLowerCase === 'ctrl' && triggerLowerCase === 'control') {\n this.triggerKeydown = true;\n } else {\n this.triggerKeydown = false;\n }\n }\n var graph = this.graph;\n if (!graph[this.functionName]) {\n console.warn(\"Behavior shortcuts-fit-view \\u7684 functionName \\u53C2\\u6570 '\".concat(this.functionName, \"' \\u4E0D\\u5408\\u6CD5\\uFF0C\\u5B83\\u4E0D\\u662F Graph \\u7684\\u4E00\\u4E2A\\u51FD\\u6570\\u540D\"));\n return {};\n }\n // 未配置 combinedKey,直接 fitView\n if (this.triggerKeydown && !this.combinedKey) {\n if (this.functionParams && this.functionParams.length) graph[this.functionName].apply(graph, this.functionParams);else graph[this.functionName]();\n return;\n }\n var combinedKeyLowerCase = this.combinedKey.toLowerCase();\n if (this.triggerKeydown) {\n if (codeLowerCase === combinedKeyLowerCase || codeLowerCase === 'control' && combinedKeyLowerCase === 'ctrl' || codeLowerCase === 'ctrl' && combinedKeyLowerCase === 'control') {\n if (this.functionParams && this.functionParams.length) graph[this.functionName].apply(graph, this.functionParams);else graph[this.functionName]();\n }\n }\n },\n onKeyUp: function onKeyUp() {\n if (this.brush) {\n // 清除所有选中状态后,设置拖得动状态为false,并清除框选的brush\n this.brush.remove(true);\n this.brush = null;\n this.dragging = false;\n }\n this.triggerKeydown = false;\n }\n});\n\n//# sourceURL=webpack:///./node_modules/@antv/g6-pc/es/behavior/shortcuts-call.js?");
/***/ }),
/***/ "./node_modules/@antv/g6-pc/es/behavior/tooltip-base.js":
/*!**************************************************************!*\
!*** ./node_modules/@antv/g6-pc/es/behavior/tooltip-base.js ***!
\**************************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _antv_dom_util__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @antv/dom-util */ \"./node_modules/@antv/dom-util/esm/index.js\");\n\n/* harmony default export */ __webpack_exports__[\"default\"] = ({\n onMouseEnter: function onMouseEnter(e) {\n var item = e.item;\n this.currentTarget = item;\n this.showTooltip(e);\n this.graph.emit('tooltipchange', {\n item: e.item,\n action: 'show'\n });\n },\n onMouseMove: function onMouseMove(e) {\n if (!this.shouldUpdate(e, this)) {\n this.hideTooltip();\n return;\n }\n if (!this.currentTarget || e.item !== this.currentTarget) {\n return;\n }\n this.updatePosition(e);\n },\n onMouseLeave: function onMouseLeave(e) {\n if (!this.shouldEnd(e, this)) {\n return;\n }\n this.hideTooltip();\n this.graph.emit('tooltipchange', {\n item: this.currentTarget,\n action: 'hide'\n });\n this.currentTarget = null;\n },\n showTooltip: function showTooltip(e) {\n var container = this.container;\n if (!e.item || e.item.destroyed) {\n return;\n }\n if (!container) {\n container = this.createTooltip(this.graph.get('canvas'));\n this.container = container;\n }\n var text = this.formatText(e.item.get('model'), e);\n container.innerHTML = text;\n Object(_antv_dom_util__WEBPACK_IMPORTED_MODULE_0__[\"modifyCSS\"])(this.container, {\n visibility: 'visible'\n });\n this.updatePosition(e);\n },\n hideTooltip: function hideTooltip() {\n Object(_antv_dom_util__WEBPACK_IMPORTED_MODULE_0__[\"modifyCSS\"])(this.container, {\n visibility: 'hidden'\n });\n },\n updatePosition: function updatePosition(e) {\n var shouldBegin = this.get('shouldBegin');\n var _a = this,\n width = _a.width,\n height = _a.height,\n container = _a.container,\n graph = _a.graph;\n if (!shouldBegin(e, this)) {\n Object(_antv_dom_util__WEBPACK_IMPORTED_MODULE_0__[\"modifyCSS\"])(container, {\n visibility: 'hidden'\n });\n return;\n }\n var point = graph.getPointByClient(e.clientX, e.clientY);\n var _b = graph.getCanvasByPoint(point.x, point.y),\n x = _b.x,\n y = _b.y;\n var bbox = container.getBoundingClientRect();\n if (x > width / 2) {\n x -= bbox.width;\n } else {\n x += this.offset;\n }\n if (y > height / 2) {\n y -= bbox.height;\n } else {\n y += this.offset;\n }\n var left = \"\".concat(x, \"px\");\n var top = \"\".concat(y, \"px\");\n Object(_antv_dom_util__WEBPACK_IMPORTED_MODULE_0__[\"modifyCSS\"])(this.container, {\n left: left,\n top: top,\n visibility: 'visible'\n });\n },\n createTooltip: function createTooltip(canvas) {\n var el = canvas.get('el');\n el.style.position = 'relative';\n var container = Object(_antv_dom_util__WEBPACK_IMPORTED_MODULE_0__[\"createDom\"])(\"\"));\n el.parentNode.appendChild(container);\n Object(_antv_dom_util__WEBPACK_IMPORTED_MODULE_0__[\"modifyCSS\"])(container, {\n position: 'absolute',\n visibility: 'visible'\n });\n this.width = canvas.get('width');\n this.height = canvas.get('height');\n this.container = container;\n this.graph.get('tooltips').push(container);\n return container;\n }\n});\n\n//# sourceURL=webpack:///./node_modules/@antv/g6-pc/es/behavior/tooltip-base.js?");
/***/ }),
/***/ "./node_modules/@antv/g6-pc/es/behavior/tooltip.js":
/*!*********************************************************!*\
!*** ./node_modules/@antv/g6-pc/es/behavior/tooltip.js ***!
\*********************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tslib */ \"./node_modules/tslib/tslib.es6.js\");\n/* harmony import */ var _tooltip_base__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./tooltip-base */ \"./node_modules/@antv/g6-pc/es/behavior/tooltip-base.js\");\n\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__assign\"])({\n getDefaultCfg: function getDefaultCfg() {\n return {\n item: 'node',\n offset: 12,\n formatText: function formatText(model) {\n return model.label;\n }\n };\n },\n getEvents: function getEvents() {\n return {\n 'node:mouseenter': 'onMouseEnter',\n 'node:mouseleave': 'onMouseLeave',\n 'node:mousemove': 'onMouseMove',\n afterremoveitem: 'onMouseLeave'\n };\n }\n}, _tooltip_base__WEBPACK_IMPORTED_MODULE_1__[\"default\"]));\n\n//# sourceURL=webpack:///./node_modules/@antv/g6-pc/es/behavior/tooltip.js?");
/***/ }),
/***/ "./node_modules/@antv/g6-pc/es/behavior/zoom-canvas.js":
/*!*************************************************************!*\
!*** ./node_modules/@antv/g6-pc/es/behavior/zoom-canvas.js ***!
\*************************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _antv_matrix_util__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @antv/matrix-util */ \"./node_modules/@antv/matrix-util/esm/index.js\");\n/* harmony import */ var _antv_util__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @antv/util */ \"./node_modules/@antv/util/esm/index.js\");\n/* harmony import */ var _util_browser__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../util/browser */ \"./node_modules/@antv/g6-pc/es/util/browser.js\");\n\n\n\nvar transform = _antv_matrix_util__WEBPACK_IMPORTED_MODULE_0__[\"ext\"].transform;\nvar DELTA = 0.05;\n/* harmony default export */ __webpack_exports__[\"default\"] = ({\n getDefaultCfg: function getDefaultCfg() {\n this.isFireFox = Object(_util_browser__WEBPACK_IMPORTED_MODULE_2__[\"getBrowserName\"])() === 'firefox';\n return {\n sensitivity: 2,\n minZoom: undefined,\n maxZoom: undefined,\n enableOptimize: false,\n optimizeZoom: 0.1,\n fixSelectedItems: {\n fixAll: false,\n fixLineWidth: false,\n fixLabel: false,\n fixState: 'selected'\n },\n animate: false,\n animateCfg: {\n duration: 500\n }\n };\n },\n getEvents: function getEvents() {\n var fixSelectedItems = this.fixSelectedItems;\n if (!fixSelectedItems.fixState) fixSelectedItems.fixState = 'selected';\n if (fixSelectedItems.fixAll) {\n fixSelectedItems.fixLineWidth = true;\n fixSelectedItems.fixLabel = true;\n }\n return {\n wheel: 'onWheel',\n touchstart: 'onTouchStart',\n touchmove: 'onTouchMove',\n touchend: 'onTouchEnd'\n };\n },\n onTouchStart: function onTouchStart(evt) {\n var touches = evt.originalEvent.touches;\n var event1 = touches[0];\n var event2 = touches[1];\n evt.preventDefault();\n // 如果不是缩放事件则禁止继续执行\n if (!event2) {\n return;\n }\n if (this.shouldBegin && !this.shouldBegin(evt, this)) {\n return;\n }\n // 第一个触摸点位置\n this.startPoint = {\n pageX: event1.pageX,\n pageY: event1.pageY\n };\n this.moveable = true;\n if (event2) {\n this.endPoint = {\n pageX: event2.pageX,\n pageY: event2.pageY\n };\n }\n this.originScale = this.graph.getZoom() || this.currentScale || 1;\n },\n onTouchMove: function onTouchMove(evt) {\n if (!this.moveable) {\n return;\n }\n evt.preventDefault();\n var touches = evt.originalEvent.touches;\n var event1 = touches[0];\n var event2 = touches[1];\n if (!event2) {\n return;\n }\n if (!this.endPoint) {\n this.endPoint = {\n pageX: event2.pageX,\n pageY: event2.pageY\n };\n }\n // 获取坐标之间的距离\n var getDistance = function getDistance(start, end) {\n return Math.hypot(end.x - start.x, end.y - start.y);\n };\n // 双指缩放比例\n var scale = getDistance({\n x: event1.pageX,\n y: event1.pageY\n }, {\n x: event2.pageX,\n y: event2.pageY\n }) / getDistance({\n x: this.startPoint.pageX,\n y: this.startPoint.pageY\n }, {\n x: this.endPoint.pageX,\n y: this.endPoint.pageY\n });\n // 应用到画布上的缩放比例\n var zoom = this.originScale * scale;\n // 缓存当前的缩放比例\n this.currentScale = zoom;\n var minZoom = this.get('minZoom') || this.graph.get('minZoom');\n var maxZoom = this.get('maxZoom') || this.graph.get('maxZoom');\n if (zoom > maxZoom || zoom < minZoom) {\n return;\n }\n var animate = this.get('animate');\n var animateCfg = this.get('animateCfg');\n var canvas = this.graph.get('canvas');\n var point = canvas.getPointByClient(evt.clientX, evt.clientY);\n this.graph.zoomTo(zoom, {\n x: point.x,\n y: point.y\n }, animate, animateCfg);\n this.graph.emit('wheelzoom', evt);\n },\n onTouchEnd: function onTouchEnd() {\n this.moveable = false;\n this.endPoint = null;\n },\n onWheel: function onWheel(e) {\n var _this = this;\n var _a = this,\n graph = _a.graph,\n fixSelectedItems = _a.fixSelectedItems;\n if (this.shouldBegin && !this.shouldBegin(e, this)) {\n return;\n }\n if (!this.shouldUpdate(e, this)) {\n return;\n }\n e.preventDefault();\n var canvas = graph.get('canvas');\n var point = canvas.getPointByClient(e.clientX, e.clientY);\n var sensitivity = this.get('sensitivity');\n var graphZoom = graph.getZoom();\n var ratio = graphZoom;\n var zoom = graphZoom;\n // 兼容IE、Firefox及Chrome\n if (this.isFireFox) {\n if (e.deltaY > 0 || e.wheelDelta < 0) {\n ratio = 1 - DELTA * sensitivity;\n } else {\n ratio = 1 / (1 - DELTA * sensitivity);\n }\n } else {\n if (e.wheelDelta < 0) {\n ratio = 1 - DELTA * sensitivity;\n } else {\n ratio = 1 / (1 - DELTA * sensitivity);\n }\n }\n zoom = graphZoom * ratio;\n var minZoom = this.get('minZoom') || graph.get('minZoom');\n var maxZoom = this.get('maxZoom') || graph.get('maxZoom');\n if (zoom > maxZoom) {\n zoom = maxZoom;\n } else if (zoom < minZoom) {\n zoom = minZoom;\n }\n // hide the shapes when the zoom ratio is smaller than optimizeZoom\n // hide the shapes when zoomming\n var enableOptimize = this.get('enableOptimize');\n if (enableOptimize) {\n var optimizeZoom_1 = this.get('optimizeZoom');\n var optimized = this.get('optimized');\n var nodes_1 = graph.getNodes();\n var edges_1 = graph.getEdges();\n var nodesLength_1 = nodes_1.length;\n var edgesLength_1 = edges_1.length;\n // hiding\n if (!optimized) {\n for (var n = 0; n < nodesLength_1; n++) {\n var node = nodes_1[n];\n if (!node.destroyed) {\n var children = node.get('group').get('children');\n var childrenLength = children.length;\n for (var c = 0; c < childrenLength; c++) {\n var shape = children[c];\n if (!shape.destoryed && !shape.get('isKeyShape')) {\n shape.set('ori-visibility', shape.get('ori-visibility') || shape.get('visible'));\n shape.hide();\n }\n }\n }\n }\n for (var edgeIndex = 0; edgeIndex < edgesLength_1; edgeIndex++) {\n var edge = edges_1[edgeIndex];\n var children = edge.get('group').get('children');\n var childrenLength = children.length;\n for (var c = 0; c < childrenLength; c++) {\n var shape = children[c];\n shape.set('ori-visibility', shape.get('ori-visibility') || shape.get('visible'));\n shape.hide();\n }\n }\n this.set('optimized', true);\n }\n // showing after 100ms\n clearTimeout(this.get('timeout'));\n var timeout = setTimeout(function () {\n var currentZoom = graph.getZoom();\n var curOptimized = _this.get('optimized');\n if (curOptimized) {\n _this.set('optimized', false);\n for (var n = 0; n < nodesLength_1; n++) {\n var node = nodes_1[n];\n var children = node.get('group').get('children');\n var childrenLength = children.length;\n if (currentZoom < optimizeZoom_1) {\n var keyShape = node.getKeyShape();\n var oriVis = keyShape.get('ori-visibility');\n keyShape.set('ori-visibility', undefined);\n if (oriVis) keyShape.show();\n } else {\n for (var c = 0; c < childrenLength; c++) {\n var shape = children[c];\n var oriVis = shape.get('ori-visibility');\n shape.set('ori-visibility', undefined);\n if (!shape.get('visible') && oriVis) {\n if (oriVis) shape.show();\n }\n }\n }\n }\n for (var edgeIndex = 0; edgeIndex < edgesLength_1; edgeIndex++) {\n var edge = edges_1[edgeIndex];\n var children = edge.get('group').get('children');\n var childrenLength = children.length;\n if (currentZoom < optimizeZoom_1) {\n var keyShape = edge.getKeyShape();\n var oriVis = keyShape.get('ori-visibility');\n keyShape.set('ori-visibility', undefined);\n if (oriVis) keyShape.show();\n } else {\n for (var c = 0; c < childrenLength; c++) {\n var shape = children[c];\n if (!shape.get('visible')) {\n var oriVis = shape.get('ori-visibility');\n shape.set('ori-visibility', undefined);\n if (oriVis) shape.show();\n }\n }\n }\n }\n }\n }, 100);\n this.set('timeout', timeout);\n }\n // fix the items when zooming\n if (graphZoom <= 1) {\n var fixNodes = void 0,\n fixEdges = void 0;\n if (fixSelectedItems.fixAll || fixSelectedItems.fixLineWidth || fixSelectedItems.fixLabel) {\n fixNodes = graph.findAllByState('node', fixSelectedItems.fixState);\n fixEdges = graph.findAllByState('edge', fixSelectedItems.fixState);\n var scale = graphZoom / zoom;\n var fixNodesLength = fixNodes.length;\n for (var fn = 0; fn < fixNodesLength; fn++) {\n var node = fixNodes[fn];\n var group = node.getContainer();\n var nodeModel = node.getModel();\n var originStyle = node.getOriginStyle();\n var itemStateStyle = node.getStateStyle(fixSelectedItems.fixState);\n var shapeStateStyle = node.get('shapeFactory').getShape(nodeModel.type).getStateStyle(fixSelectedItems.fixState, node)[fixSelectedItems.fixState];\n if (fixSelectedItems.fixAll) {\n if (zoom <= 1) {\n var groupMatrix = Object(_antv_util__WEBPACK_IMPORTED_MODULE_1__[\"clone\"])(group.getMatrix());\n if (!groupMatrix) groupMatrix = [1, 0, 0, 0, 1, 0, 0, 0, 1];\n var _b = node.getModel(),\n x = _b.x,\n y = _b.y;\n groupMatrix = transform(groupMatrix, [['t', -x, -y], ['s', scale, scale], ['t', x, y]]);\n group.setMatrix(groupMatrix);\n }\n } else {\n var children = group.get('children');\n var childrenLength = children.length;\n for (var c = 0; c < childrenLength; c++) {\n var shape = children[c];\n var fontSize = void 0,\n lineWidth = void 0;\n if (fixSelectedItems.fixLabel) {\n var shapeType = shape.get('type');\n if (shapeType === 'text') {\n fontSize = shape.attr('fontSize') || 12;\n var itemStyle = itemStateStyle[shape.get('name')];\n var shapeStyle = shapeStateStyle[shape.get('name')];\n var itemFontSize = itemStyle ? itemStyle.fontSize : 12;\n var shapeFontSize = shapeStyle ? shapeStyle.fontSize : 12;\n var oriFontSize = itemFontSize || shapeFontSize || 12;\n if (zoom <= 1) shape.attr('fontSize', oriFontSize / zoom); // * graphZoom / zoom\n if (lineWidth) break;\n }\n }\n if (fixSelectedItems.fixLineWidth) {\n if (shape.get('isKeyShape')) {\n lineWidth = shape.attr('lineWidth') || 0;\n var oriLineWidth = itemStateStyle.lineWidth || shapeStateStyle.lineWidth || originStyle.lineWidth || 0;\n if (zoom <= 1) shape.attr('lineWidth', oriLineWidth / zoom); // * graphZoom / zoom\n if (fontSize) break;\n }\n }\n }\n }\n }\n var fixEdgesLength = fixEdges.length;\n for (var fe = 0; fe < fixEdgesLength; fe++) {\n var edge = fixEdges[fe];\n var group = edge.getContainer();\n var children = group.get('children');\n var nodeModel = edge.getModel();\n var itemStateStyle = edge.getStateStyle(fixSelectedItems.fixState);\n var shapeStateStyle = edge.get('shapeFactory').getShape(nodeModel.type).getStateStyle(fixSelectedItems.fixState, edge)[fixSelectedItems.fixState];\n var childrenLength = children.length;\n for (var c = 0; c < childrenLength; c++) {\n var shape = children[c];\n var fontSize = void 0,\n lineWidth = void 0;\n if (fixSelectedItems.fixLabel || fixSelectedItems.fixAll) {\n var shapeType = shape.get('type');\n if (shapeType === 'text') {\n fontSize = shape.attr('fontSize') || 12;\n var itemStyle = itemStateStyle[shape.get('name')];\n var shapeStyle = shapeStateStyle[shape.get('name')];\n var itemFontSize = itemStyle ? itemStyle.fontSize : 12;\n var shapeFontSize = shapeStyle ? shapeStyle.fontSize : 12;\n var oriFontSize = itemFontSize || shapeFontSize || 12;\n if (zoom <= 1) shape.attr('fontSize', oriFontSize / zoom);\n if (lineWidth) break;\n }\n }\n if (fixSelectedItems.fixLineWidth || fixSelectedItems.fixAll) {\n if (shape.get('isKeyShape')) {\n lineWidth = shape.attr('lineWidth') || 0;\n var oriLineWidth = itemStateStyle.lineWidth || shapeStateStyle.lineWidth || 1;\n if (zoom <= 1) shape.attr('lineWidth', oriLineWidth / zoom);\n if (fontSize) break;\n }\n }\n }\n }\n }\n }\n var animate = this.get('animate');\n var animateCfg = this.get('animateCfg');\n graph.zoomTo(zoom, {\n x: point.x,\n y: point.y\n }, animate, animateCfg);\n graph.emit('wheelzoom', e);\n }\n});\n\n//# sourceURL=webpack:///./node_modules/@antv/g6-pc/es/behavior/zoom-canvas.js?");
/***/ }),
/***/ "./node_modules/@antv/g6-pc/es/element/index.js":
/*!******************************************************!*\
!*** ./node_modules/@antv/g6-pc/es/element/index.js ***!
\******************************************************/
/*! no exports provided */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _antv_g6_element__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @antv/g6-element */ \"./node_modules/@antv/g6-element/es/index.js\");\n\n\n//# sourceURL=webpack:///./node_modules/@antv/g6-pc/es/element/index.js?");
/***/ }),
/***/ "./node_modules/@antv/g6-pc/es/global.js":
/*!***********************************************!*\
!*** ./node_modules/@antv/g6-pc/es/global.js ***!
\***********************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _util_color__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./util/color */ \"./node_modules/@antv/g6-pc/es/util/color.js\");\n\nvar subjectColor = 'rgb(95, 149, 255)';\nvar backColor = 'rgb(255, 255, 255)';\nvar textColor = 'rgb(0, 0, 0)';\nvar colorSet = Object(_util_color__WEBPACK_IMPORTED_MODULE_0__[\"getColorsWithSubjectColor\"])(subjectColor, backColor);\n/* harmony default export */ __webpack_exports__[\"default\"] = ({\n version: '0.8.23',\n rootContainerClassName: 'root-container',\n nodeContainerClassName: 'node-container',\n edgeContainerClassName: 'edge-container',\n comboContainerClassName: 'combo-container',\n delegateContainerClassName: 'delegate-container',\n defaultLoopPosition: 'top',\n nodeLabel: {\n style: {\n fill: '#000',\n fontSize: 12,\n textAlign: 'center',\n textBaseline: 'middle'\n },\n offset: 4 // 节点的默认文本不居中时的偏移量\n },\n\n defaultNode: {\n type: 'circle',\n style: {\n lineWidth: 1,\n stroke: colorSet.mainStroke,\n fill: colorSet.mainFill\n },\n size: 20,\n color: colorSet.mainStroke,\n linkPoints: {\n size: 8,\n lineWidth: 1,\n fill: colorSet.activeFill,\n stroke: colorSet.activeStroke\n }\n },\n // 节点应用状态后的样式,默认仅提供 active、selected、highlight、inactive、disable,用户可以自己扩展\n nodeStateStyles: {\n active: {\n fill: colorSet.activeFill,\n stroke: colorSet.activeStroke,\n lineWidth: 2,\n shadowColor: colorSet.mainStroke,\n shadowBlur: 10\n },\n selected: {\n fill: colorSet.selectedFill,\n stroke: colorSet.selectedStroke,\n lineWidth: 4,\n shadowColor: colorSet.selectedStroke,\n shadowBlur: 10,\n 'text-shape': {\n fontWeight: 500\n }\n },\n highlight: {\n fill: colorSet.highlightFill,\n stroke: colorSet.highlightStroke,\n lineWidth: 2,\n 'text-shape': {\n fontWeight: 500\n }\n },\n inactive: {\n fill: colorSet.inactiveFill,\n stroke: colorSet.inactiveStroke,\n lineWidth: 1\n },\n disable: {\n fill: colorSet.disableFill,\n stroke: colorSet.disableStroke,\n lineWidth: 1\n }\n },\n edgeLabel: {\n style: {\n fill: textColor,\n textAlign: 'center',\n textBaseline: 'middle',\n fontSize: 12\n }\n },\n defaultEdge: {\n type: 'line',\n size: 1,\n style: {\n stroke: colorSet.edgeMainStroke,\n lineAppendWidth: 2\n },\n color: colorSet.edgeMainStroke\n },\n // 边应用状态后的样式,默认仅提供 active、selected、highlight、inactive、disable,用户可以自己扩展\n edgeStateStyles: {\n active: {\n stroke: colorSet.edgeActiveStroke,\n lineWidth: 1\n },\n selected: {\n stroke: colorSet.edgeSelectedStroke,\n lineWidth: 2,\n shadowColor: colorSet.edgeSelectedStroke,\n shadowBlur: 10,\n 'text-shape': {\n fontWeight: 500\n }\n },\n highlight: {\n stroke: colorSet.edgeHighlightStroke,\n lineWidth: 2,\n 'text-shape': {\n fontWeight: 500\n }\n },\n inactive: {\n stroke: colorSet.edgeInactiveStroke,\n lineWidth: 1\n },\n disable: {\n stroke: colorSet.edgeDisableStroke,\n lineWidth: 1\n }\n },\n comboLabel: {\n style: {\n fill: textColor,\n // textAlign: 'center',\n textBaseline: 'middle',\n fontSize: 12\n },\n refY: 10,\n refX: 10 // Combo 的默认文本不居中时的偏移量\n },\n\n defaultCombo: {\n type: 'circle',\n style: {\n fill: colorSet.comboMainFill,\n lineWidth: 1,\n stroke: colorSet.comboMainStroke,\n r: 5,\n width: 20,\n height: 10\n },\n size: [20, 5],\n color: colorSet.comboMainStroke,\n padding: [25, 20, 15, 20]\n },\n // combo 应用状态后的样式,默认仅提供 active、selected、highlight、inactive、disable,用户可以自己扩展\n comboStateStyles: {\n active: {\n stroke: colorSet.comboActiveStroke,\n lineWidth: 1,\n fill: colorSet.comboActiveFill\n },\n selected: {\n stroke: colorSet.comboSelectedStroke,\n lineWidth: 2,\n fill: colorSet.comboSelectedFill,\n shadowColor: colorSet.comboSelectedStroke,\n shadowBlur: 10,\n 'text-shape': {\n fontWeight: 500\n }\n },\n highlight: {\n stroke: colorSet.comboHighlightStroke,\n lineWidth: 2,\n fill: colorSet.comboHighlightFill,\n 'text-shape': {\n fontWeight: 500\n }\n },\n inactive: {\n stroke: colorSet.comboInactiveStroke,\n fill: colorSet.comboInactiveFill,\n lineWidth: 1\n },\n disable: {\n stroke: colorSet.comboDisableStroke,\n fill: colorSet.comboDisableFill,\n lineWidth: 1\n }\n },\n delegateStyle: {\n fill: '#F3F9FF',\n fillOpacity: 0.5,\n stroke: '#1890FF',\n strokeOpacity: 0.9,\n lineDash: [5, 5]\n },\n // 文本水印默认配置\n textWaterMarkerConfig: {\n width: 150,\n height: 100,\n compatible: false,\n text: {\n x: 0,\n y: 60,\n lineHeight: 20,\n rotate: 20,\n fontSize: 14,\n fontFamily: 'Microsoft YaHei',\n fill: 'rgba(0, 0, 0, 0.1)',\n baseline: 'Middle'\n }\n },\n imageWaterMarkerConfig: {\n width: 150,\n height: 130,\n compatible: false,\n image: {\n x: 0,\n y: 0,\n width: 30,\n height: 20,\n rotate: 0\n }\n },\n waterMarkerImage: 'https://gw.alipayobjects.com/os/s/prod/antv/assets/image/logo-with-text-73b8a.svg'\n});\n\n//# sourceURL=webpack:///./node_modules/@antv/g6-pc/es/global.js?");
/***/ }),
/***/ "./node_modules/@antv/g6-pc/es/graph/controller/event.js":
/*!***************************************************************!*\
!*** ./node_modules/@antv/g6-pc/es/graph/controller/event.js ***!
\***************************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tslib */ \"./node_modules/tslib/tslib.es6.js\");\n/* harmony import */ var _antv_dom_util__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @antv/dom-util */ \"./node_modules/@antv/dom-util/esm/index.js\");\n/* harmony import */ var _antv_util__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @antv/util */ \"./node_modules/@antv/util/esm/index.js\");\n/* harmony import */ var _antv_g6_core__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @antv/g6-core */ \"./node_modules/@antv/g6-core/es/index.js\");\n\n\n\n\nvar cloneEvent = _antv_g6_core__WEBPACK_IMPORTED_MODULE_3__[\"Util\"].cloneEvent,\n isViewportChanged = _antv_g6_core__WEBPACK_IMPORTED_MODULE_3__[\"Util\"].isViewportChanged;\nvar EventController = /** @class */function (_super) {\n Object(tslib__WEBPACK_IMPORTED_MODULE_0__[\"__extends\"])(EventController, _super);\n function EventController(graph) {\n var _this = _super.call(this, graph) || this;\n _this.extendEvents = [];\n _this.dragging = false;\n _this.mousedown = false;\n _this.preItem = null;\n _this.destroy();\n _this.graph = graph;\n _this.destroyed = false;\n _this.initEvents();\n return _this;\n }\n // 初始化 G6 中的事件\n EventController.prototype.initEvents = function () {\n var _a = this,\n graph = _a.graph,\n _b = _a.extendEvents,\n extendEvents = _b === void 0 ? [] : _b;\n var canvas = graph.get('canvas');\n // canvas.set('draggable', true);\n var el = canvas.get('el');\n var canvasHandler = Object(_antv_util__WEBPACK_IMPORTED_MODULE_2__[\"wrapBehavior\"])(this, 'onCanvasEvents');\n var originHandler = Object(_antv_util__WEBPACK_IMPORTED_MODULE_2__[\"wrapBehavior\"])(this, 'onExtendEvents');\n var wheelHandler = Object(_antv_util__WEBPACK_IMPORTED_MODULE_2__[\"wrapBehavior\"])(this, 'onWheelEvent');\n // each(EVENTS, event => {\n // canvas.off(event).on(event, canvasHandler);\n // });\n canvas.off('*').on('*', canvasHandler);\n this.canvasHandler = canvasHandler;\n extendEvents.push(Object(_antv_dom_util__WEBPACK_IMPORTED_MODULE_1__[\"addEventListener\"])(el, 'wheel', wheelHandler));\n if (typeof window !== 'undefined') {\n extendEvents.push(Object(_antv_dom_util__WEBPACK_IMPORTED_MODULE_1__[\"addEventListener\"])(window, 'keydown', originHandler));\n extendEvents.push(Object(_antv_dom_util__WEBPACK_IMPORTED_MODULE_1__[\"addEventListener\"])(window, 'keyup', originHandler));\n extendEvents.push(Object(_antv_dom_util__WEBPACK_IMPORTED_MODULE_1__[\"addEventListener\"])(window, 'focus', originHandler));\n }\n // 数据变更,重置一些状态\n if (this.resetHandler) graph.off('afterchangedata', this.resetHandler);\n this.resetHandler = Object(_antv_util__WEBPACK_IMPORTED_MODULE_2__[\"wrapBehavior\"])(this, 'resetStatus');\n graph.on('afterchangedata', this.resetHandler);\n };\n // 获取 shape 的 item 对象\n EventController.getItemRoot = function (shape) {\n while (shape && !shape.get('item')) {\n shape = shape.get('parent');\n }\n return shape;\n };\n /**\n * 处理 canvas 事件\n * @param evt 事件句柄\n */\n EventController.prototype.onCanvasEvents = function (evt) {\n var _this = this;\n var graph = this.graph;\n var canvas = graph.get('canvas');\n var target = evt.target;\n var eventType = evt.type;\n switch (eventType) {\n // solve G's problem: mousemove and mouseup are not triggered with drag and dragend\n case 'drag':\n this.onCanvasEvents(Object.assign({}, evt, {\n type: 'mousemove'\n }));\n break;\n case 'dragend':\n this.onCanvasEvents(Object.assign({}, evt, {\n type: 'mouseup'\n }));\n break;\n // solve G's problem: mousedown on other DOMs, mouseup on canvas, click event is triggered unexpectedly\n case 'mousedown':\n this.mousedown = true;\n break;\n case 'mouseup':\n // mouseup happend before click, so setTimeout to reset the tag for reference in click event\n setTimeout(function () {\n return _this.mousedown = false;\n });\n break;\n case 'click':\n // the mousedown is not happend, the click is invalid\n if (!this.mousedown) return;\n break;\n default:\n break;\n }\n /**\n * (clientX, clientY): 相对于页面的坐标;\n * (canvasX, canvasY): 相对于